ETH Price: $3,387.98 (+1.13%)
Gas: 8 Gwei

Token

Jungle Cats (JC)
 

Overview

Max Total Supply

1,750 JC

Holders

571

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
6 JC
0x79B82218b354f8A3be48b027257A2A5C7b7fa4f9
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:
JungleCats

Compiler Version
v0.8.0+commit.c7dfd78e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, GNU GPLv3 license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: GPL-3.0

pragma solidity >=0.7.0 <0.9.0;
// File: @openzeppelin/contracts/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);
}

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

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

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

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

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

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

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


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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// File: @openzeppelin/contracts/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 `IERC721.onERC721Received.selector`.
     */
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}

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


// File: @openzeppelin/contracts/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: balance query for the zero address");
        return _balances[owner];
    }

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

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

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

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

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

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

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

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

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

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

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

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

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

        _transfer(from, to, tokenId);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _beforeTokenTransfer(from, to, tokenId);

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

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

        emit Transfer(from, to, tokenId);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

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

  string public baseURI;
  string public baseExtension = ".json";
  string public notRevealedUri;
  uint256 public cost = 0.075 ether;
  uint256 public maxSupply = 3000;
  uint256 public maxMintAmount = 10;
  uint256 public nftPerAddressLimit = 10;
  bool public paused = true;
  bool public revealed = false;
  address payable community = payable(0xB92319bA5c8e5873bb7753d0b565bC3dd68CFceE);
  address payable simon = payable(0xdb4a0662BE6AC72d1a3403c36bc8b6f578510F5B);
  address payable andy = payable(0x09660B3e67591B1aa1351e9759A2463FF626C37E);
  address payable domingo = payable(0x9aEFB5D4986CD925429416128E3eB8c994e6E26C);
  address payable zach = payable(0x0C55FF27C32cbda23671dC57114ED5b03E563072);
  address payable shawn = payable(0x70Ea92404568E0053Ef24737840B9f4f8F8c1595);
  address payable sathya = payable(0x63bFdd398b74c208EDB8a7e45910d0AAC4858D6A);
  address payable parth = payable(0xc5A328665D9BA8CFf48Ce12b41e6201247d998c2);
  uint256 communityPercentage = 20000;
  uint256 simonPercentage = 11910;
  uint256 andyPercentage = 11910;
  uint256 domingoPercentage = 11910;
  uint256 zachPercentage = 19985;
  uint256 shawnPercentage = 19985;
  uint256 sathyaPercentage = 3000;
  uint256 parthPercentage = 1300;
  uint256 baseDivisor = 100000;

  mapping(address => uint256) public addressMintedBalance;

  constructor() ERC721("Jungle Cats", "JC") {
    setNotRevealedURI("ipfs://QmQ1EmJuG6PJK9pkxGZ1hiHQraroKjZ3QJsPndppvPaNbE/MetaData.json");
  }

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

  // public
  function mint(uint256 _mintAmount) public payable {
    require(!paused, "the contract is paused");
    uint256 supply = totalSupply();
    require(_mintAmount > 0, "need to mint at least 1 NFT");
    require(_mintAmount <= maxMintAmount, "max mint amount per session exceeded");
    require(supply + _mintAmount <= maxSupply, "max NFT limit exceeded");
    require(addressMintedBalance[msg.sender] + _mintAmount <= nftPerAddressLimit, "max NFT per address limit exceeded");
    if (msg.sender != owner()) {
        require(msg.value >= cost * _mintAmount, "insufficient funds");
    }

    for (uint256 i = 1; i <= _mintAmount; i++) {
      addressMintedBalance[msg.sender]++;
      _safeMint(msg.sender, supply + i);
    }
  }

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

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

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

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

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

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

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

  function pause(bool _state) public onlyOwner {
    paused = _state;
  }
 
  function withdraw() public payable onlyOwner {
    uint256 totalBalance = address(this).balance;
    (bool cp, ) = payable(community).call{value: totalBalance / baseDivisor * communityPercentage}("");
    require(cp);
    (bool sp, ) = payable(simon).call{value: totalBalance / baseDivisor * simonPercentage}("");
    require(sp);
    (bool ap, ) = payable(andy).call{value: totalBalance / baseDivisor * andyPercentage}("");
    require(ap);
    (bool dp, ) = payable(domingo).call{value: totalBalance / baseDivisor * domingoPercentage}("");
    require(dp);
    (bool zp, ) = payable(zach).call{value: totalBalance / baseDivisor * zachPercentage}("");
    require(zp);
    (bool shp, ) = payable(shawn).call{value: totalBalance / baseDivisor * shawnPercentage}("");
    require(shp);
    (bool sap, ) = payable(sathya).call{value: totalBalance / baseDivisor * sathyaPercentage}("");
    require(sap);
    (bool pp, ) = payable(parth).call{value: totalBalance / baseDivisor * parthPercentage}("");
    require(pp);
  }
}

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

60806040526040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600c90805190602001906200005192919062000624565b5067010a741a46278000600e55610bb8600f55600a601055600a6011556001601260006101000a81548160ff0219169083151502179055506000601260016101000a81548160ff02191690831515021790555073b92319ba5c8e5873bb7753d0b565bc3dd68cfcee601260026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073db4a0662be6ac72d1a3403c36bc8b6f578510f5b601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507309660b3e67591b1aa1351e9759a2463ff626c37e601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550739aefb5d4986cd925429416128e3eb8c994e6e26c601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550730c55ff27c32cbda23671dc57114ed5b03e563072601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507370ea92404568e0053ef24737840b9f4f8f8c1595601760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507363bfdd398b74c208edb8a7e45910d0aac4858d6a601860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073c5a328665d9ba8cff48ce12b41e6201247d998c2601960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550614e20601a55612e86601b55612e86601c55612e86601d55614e11601e55614e11601f55610bb8602055610514602155620186a06022553480156200039057600080fd5b506040518060400160405280600b81526020017f4a756e676c6520436174730000000000000000000000000000000000000000008152506040518060400160405280600281526020017f4a4300000000000000000000000000000000000000000000000000000000000081525081600090805190602001906200041592919062000624565b5080600190805190602001906200042e92919062000624565b50505062000451620004456200048160201b60201c565b6200048960201b60201c565b6200047b604051806080016040528060438152602001620056d0604391396200054f60201b60201c565b620007ae565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6200055f6200048160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000585620005fa60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620005de576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005d59062000716565b60405180910390fd5b80600d9080519060200190620005f692919062000624565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054620006329062000749565b90600052602060002090601f016020900481019282620006565760008555620006a2565b82601f106200067157805160ff1916838001178555620006a2565b82800160010185558215620006a2579182015b82811115620006a157825182559160200191906001019062000684565b5b509050620006b19190620006b5565b5090565b5b80821115620006d0576000816000905550600101620006b6565b5090565b6000620006e360208362000738565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b600060208201905081810360008301526200073181620006d4565b9050919050565b600082825260208201905092915050565b600060028204905060018216806200076257607f821691505b602082108114156200077957620007786200077f565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b614f1280620007be6000396000f3fe60806040526004361061023b5760003560e01c80636352211e1161012e578063b88d4fde116100ab578063d5abeb011161006f578063d5abeb0114610857578063da3ef23f14610882578063e985e9c5146108ab578063f2c4ce1e146108e8578063f2fde38b146109115761023b565b8063b88d4fde14610772578063ba7d2c761461079b578063c6682862146107c6578063c87b56dd146107f1578063d0eb26b01461082e5761023b565b80638da5cb5b116100f25780638da5cb5b146106c057806395d89b41146106eb578063a0712d6814610716578063a22cb46514610732578063a475b5dd1461075b5761023b565b80636352211e146105db5780636c0360eb1461061857806370a0823114610643578063715018a6146106805780637f00c7a6146106975761023b565b806323b872dd116101bc57806344a0d68a1161018057806344a0d68a146104f65780634f6ccce71461051f578063518302271461055c57806355f804b3146105875780635c975abb146105b05761023b565b806323b872dd146104205780632f745c59146104495780633ccfd60b1461048657806342842e0e14610490578063438b6300146104b95761023b565b8063095ea7b311610203578063095ea7b31461033957806313faede61461036257806318160ddd1461038d57806318cae269146103b8578063239c70ae146103f55761023b565b806301ffc9a71461024057806302329a291461027d57806306fdde03146102a6578063081812fc146102d1578063081c8c441461030e575b600080fd5b34801561024c57600080fd5b5061026760048036038101906102629190613ade565b61093a565b60405161027491906146b7565b60405180910390f35b34801561028957600080fd5b506102a4600480360381019061029f9190613ab5565b6109b4565b005b3480156102b257600080fd5b506102bb610a4d565b6040516102c891906146d2565b60405180910390f35b3480156102dd57600080fd5b506102f860048036038101906102f39190613b71565b610adf565b604051610305919061462e565b60405180910390f35b34801561031a57600080fd5b50610323610b64565b60405161033091906146d2565b60405180910390f35b34801561034557600080fd5b50610360600480360381019061035b9190613a79565b610bf2565b005b34801561036e57600080fd5b50610377610d0a565b60405161038491906149f4565b60405180910390f35b34801561039957600080fd5b506103a2610d10565b6040516103af91906149f4565b60405180910390f35b3480156103c457600080fd5b506103df60048036038101906103da919061390e565b610d1d565b6040516103ec91906149f4565b60405180910390f35b34801561040157600080fd5b5061040a610d35565b60405161041791906149f4565b60405180910390f35b34801561042c57600080fd5b5061044760048036038101906104429190613973565b610d3b565b005b34801561045557600080fd5b50610470600480360381019061046b9190613a79565b610d9b565b60405161047d91906149f4565b60405180910390f35b61048e610e40565b005b34801561049c57600080fd5b506104b760048036038101906104b29190613973565b61145c565b005b3480156104c557600080fd5b506104e060048036038101906104db919061390e565b61147c565b6040516104ed9190614695565b60405180910390f35b34801561050257600080fd5b5061051d60048036038101906105189190613b71565b611576565b005b34801561052b57600080fd5b5061054660048036038101906105419190613b71565b6115fc565b60405161055391906149f4565b60405180910390f35b34801561056857600080fd5b50610571611693565b60405161057e91906146b7565b60405180910390f35b34801561059357600080fd5b506105ae60048036038101906105a99190613b30565b6116a6565b005b3480156105bc57600080fd5b506105c561173c565b6040516105d291906146b7565b60405180910390f35b3480156105e757600080fd5b5061060260048036038101906105fd9190613b71565b61174f565b60405161060f919061462e565b60405180910390f35b34801561062457600080fd5b5061062d611801565b60405161063a91906146d2565b60405180910390f35b34801561064f57600080fd5b5061066a6004803603810190610665919061390e565b61188f565b60405161067791906149f4565b60405180910390f35b34801561068c57600080fd5b50610695611947565b005b3480156106a357600080fd5b506106be60048036038101906106b99190613b71565b6119cf565b005b3480156106cc57600080fd5b506106d5611a55565b6040516106e2919061462e565b60405180910390f35b3480156106f757600080fd5b50610700611a7f565b60405161070d91906146d2565b60405180910390f35b610730600480360381019061072b9190613b71565b611b11565b005b34801561073e57600080fd5b5061075960048036038101906107549190613a3d565b611def565b005b34801561076757600080fd5b50610770611f70565b005b34801561077e57600080fd5b50610799600480360381019061079491906139c2565b612009565b005b3480156107a757600080fd5b506107b061206b565b6040516107bd91906149f4565b60405180910390f35b3480156107d257600080fd5b506107db612071565b6040516107e891906146d2565b60405180910390f35b3480156107fd57600080fd5b5061081860048036038101906108139190613b71565b6120ff565b60405161082591906146d2565b60405180910390f35b34801561083a57600080fd5b5061085560048036038101906108509190613b71565b612258565b005b34801561086357600080fd5b5061086c6122de565b60405161087991906149f4565b60405180910390f35b34801561088e57600080fd5b506108a960048036038101906108a49190613b30565b6122e4565b005b3480156108b757600080fd5b506108d260048036038101906108cd9190613937565b61237a565b6040516108df91906146b7565b60405180910390f35b3480156108f457600080fd5b5061090f600480360381019061090a9190613b30565b61240e565b005b34801561091d57600080fd5b506109386004803603810190610933919061390e565b6124a4565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109ad57506109ac8261259c565b5b9050919050565b6109bc61267e565b73ffffffffffffffffffffffffffffffffffffffff166109da611a55565b73ffffffffffffffffffffffffffffffffffffffff1614610a30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a27906148b4565b60405180910390fd5b80601260006101000a81548160ff02191690831515021790555050565b606060008054610a5c90614d07565b80601f0160208091040260200160405190810160405280929190818152602001828054610a8890614d07565b8015610ad55780601f10610aaa57610100808354040283529160200191610ad5565b820191906000526020600020905b815481529060010190602001808311610ab857829003601f168201915b5050505050905090565b6000610aea82612686565b610b29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2090614894565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600d8054610b7190614d07565b80601f0160208091040260200160405190810160405280929190818152602001828054610b9d90614d07565b8015610bea5780601f10610bbf57610100808354040283529160200191610bea565b820191906000526020600020905b815481529060010190602001808311610bcd57829003601f168201915b505050505081565b6000610bfd8261174f565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6590614954565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c8d61267e565b73ffffffffffffffffffffffffffffffffffffffff161480610cbc5750610cbb81610cb661267e565b61237a565b5b610cfb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf2906147d4565b60405180910390fd5b610d0583836126f2565b505050565b600e5481565b6000600880549050905090565b60236020528060005260406000206000915090505481565b60105481565b610d4c610d4661267e565b826127ab565b610d8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8290614994565b60405180910390fd5b610d96838383612889565b505050565b6000610da68361188f565b8210610de7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dde906146f4565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610e4861267e565b73ffffffffffffffffffffffffffffffffffffffff16610e66611a55565b73ffffffffffffffffffffffffffffffffffffffff1614610ebc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb3906148b4565b60405180910390fd5b60004790506000601260029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16601a5460225484610f0d9190614b92565b610f179190614bc3565b604051610f2390614619565b60006040518083038185875af1925050503d8060008114610f60576040519150601f19603f3d011682016040523d82523d6000602084013e610f65565b606091505b5050905080610f7357600080fd5b6000601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16601b5460225485610fbf9190614b92565b610fc99190614bc3565b604051610fd590614619565b60006040518083038185875af1925050503d8060008114611012576040519150601f19603f3d011682016040523d82523d6000602084013e611017565b606091505b505090508061102557600080fd5b6000601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16601c54602254866110719190614b92565b61107b9190614bc3565b60405161108790614619565b60006040518083038185875af1925050503d80600081146110c4576040519150601f19603f3d011682016040523d82523d6000602084013e6110c9565b606091505b50509050806110d757600080fd5b6000601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16601d54602254876111239190614b92565b61112d9190614bc3565b60405161113990614619565b60006040518083038185875af1925050503d8060008114611176576040519150601f19603f3d011682016040523d82523d6000602084013e61117b565b606091505b505090508061118957600080fd5b6000601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16601e54602254886111d59190614b92565b6111df9190614bc3565b6040516111eb90614619565b60006040518083038185875af1925050503d8060008114611228576040519150601f19603f3d011682016040523d82523d6000602084013e61122d565b606091505b505090508061123b57600080fd5b6000601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16601f54602254896112879190614b92565b6112919190614bc3565b60405161129d90614619565b60006040518083038185875af1925050503d80600081146112da576040519150601f19603f3d011682016040523d82523d6000602084013e6112df565b606091505b50509050806112ed57600080fd5b6000601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166020546022548a6113399190614b92565b6113439190614bc3565b60405161134f90614619565b60006040518083038185875af1925050503d806000811461138c576040519150601f19603f3d011682016040523d82523d6000602084013e611391565b606091505b505090508061139f57600080fd5b6000601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166021546022548b6113eb9190614b92565b6113f59190614bc3565b60405161140190614619565b60006040518083038185875af1925050503d806000811461143e576040519150601f19603f3d011682016040523d82523d6000602084013e611443565b606091505b505090508061145157600080fd5b505050505050505050565b61147783838360405180602001604052806000815250612009565b505050565b606060006114898361188f565b905060008167ffffffffffffffff8111156114cd577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156114fb5781602001602082028036833780820191505090505b50905060005b8281101561156b576115138582610d9b565b82828151811061154c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001018181525050808061156390614d39565b915050611501565b508092505050919050565b61157e61267e565b73ffffffffffffffffffffffffffffffffffffffff1661159c611a55565b73ffffffffffffffffffffffffffffffffffffffff16146115f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e9906148b4565b60405180910390fd5b80600e8190555050565b6000611606610d10565b8210611647576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163e906149b4565b60405180910390fd5b60088281548110611681577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b601260019054906101000a900460ff1681565b6116ae61267e565b73ffffffffffffffffffffffffffffffffffffffff166116cc611a55565b73ffffffffffffffffffffffffffffffffffffffff1614611722576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611719906148b4565b60405180910390fd5b80600b9080519060200190611738929190613732565b5050565b601260009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156117f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ef90614814565b60405180910390fd5b80915050919050565b600b805461180e90614d07565b80601f016020809104026020016040519081016040528092919081815260200182805461183a90614d07565b80156118875780601f1061185c57610100808354040283529160200191611887565b820191906000526020600020905b81548152906001019060200180831161186a57829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611900576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f7906147f4565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61194f61267e565b73ffffffffffffffffffffffffffffffffffffffff1661196d611a55565b73ffffffffffffffffffffffffffffffffffffffff16146119c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ba906148b4565b60405180910390fd5b6119cd6000612ae5565b565b6119d761267e565b73ffffffffffffffffffffffffffffffffffffffff166119f5611a55565b73ffffffffffffffffffffffffffffffffffffffff1614611a4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a42906148b4565b60405180910390fd5b8060108190555050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054611a8e90614d07565b80601f0160208091040260200160405190810160405280929190818152602001828054611aba90614d07565b8015611b075780601f10611adc57610100808354040283529160200191611b07565b820191906000526020600020905b815481529060010190602001808311611aea57829003601f168201915b5050505050905090565b601260009054906101000a900460ff1615611b61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b58906148d4565b60405180910390fd5b6000611b6b610d10565b905060008211611bb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ba7906149d4565b60405180910390fd5b601054821115611bf5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bec90614854565b60405180910390fd5b600f548282611c049190614b3c565b1115611c45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3c90614834565b60405180910390fd5b60115482602360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611c939190614b3c565b1115611cd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ccb906148f4565b60405180910390fd5b611cdc611a55565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611d5f5781600e54611d1c9190614bc3565b341015611d5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5590614974565b60405180910390fd5b5b6000600190505b828111611dea57602360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190611dbd90614d39565b9190505550611dd7338284611dd29190614b3c565b612bab565b8080611de290614d39565b915050611d66565b505050565b611df761267e565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611e65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5c90614794565b60405180910390fd5b8060056000611e7261267e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611f1f61267e565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611f6491906146b7565b60405180910390a35050565b611f7861267e565b73ffffffffffffffffffffffffffffffffffffffff16611f96611a55565b73ffffffffffffffffffffffffffffffffffffffff1614611fec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe3906148b4565b60405180910390fd5b6001601260016101000a81548160ff021916908315150217905550565b61201a61201461267e565b836127ab565b612059576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205090614994565b60405180910390fd5b61206584848484612bc9565b50505050565b60115481565b600c805461207e90614d07565b80601f01602080910402602001604051908101604052809291908181526020018280546120aa90614d07565b80156120f75780601f106120cc576101008083540402835291602001916120f7565b820191906000526020600020905b8154815290600101906020018083116120da57829003601f168201915b505050505081565b606061210a82612686565b612149576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214090614934565b60405180910390fd5b60001515601260019054906101000a900460ff16151514156121f757600d805461217290614d07565b80601f016020809104026020016040519081016040528092919081815260200182805461219e90614d07565b80156121eb5780601f106121c0576101008083540402835291602001916121eb565b820191906000526020600020905b8154815290600101906020018083116121ce57829003601f168201915b50505050509050612253565b6000612201612c25565b90506000815111612221576040518060200160405280600081525061224f565b8061222b84612cb7565b600c60405160200161223f939291906145e8565b6040516020818303038152906040525b9150505b919050565b61226061267e565b73ffffffffffffffffffffffffffffffffffffffff1661227e611a55565b73ffffffffffffffffffffffffffffffffffffffff16146122d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122cb906148b4565b60405180910390fd5b8060118190555050565b600f5481565b6122ec61267e565b73ffffffffffffffffffffffffffffffffffffffff1661230a611a55565b73ffffffffffffffffffffffffffffffffffffffff1614612360576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612357906148b4565b60405180910390fd5b80600c9080519060200190612376929190613732565b5050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61241661267e565b73ffffffffffffffffffffffffffffffffffffffff16612434611a55565b73ffffffffffffffffffffffffffffffffffffffff161461248a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612481906148b4565b60405180910390fd5b80600d90805190602001906124a0929190613732565b5050565b6124ac61267e565b73ffffffffffffffffffffffffffffffffffffffff166124ca611a55565b73ffffffffffffffffffffffffffffffffffffffff1614612520576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612517906148b4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612590576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258790614734565b60405180910390fd5b61259981612ae5565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061266757507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612677575061267682612e64565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166127658361174f565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006127b682612686565b6127f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ec906147b4565b60405180910390fd5b60006128008361174f565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061286f57508373ffffffffffffffffffffffffffffffffffffffff1661285784610adf565b73ffffffffffffffffffffffffffffffffffffffff16145b80612880575061287f818561237a565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166128a98261174f565b73ffffffffffffffffffffffffffffffffffffffff16146128ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128f690614914565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561296f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161296690614774565b60405180910390fd5b61297a838383612ece565b6129856000826126f2565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546129d59190614c1d565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612a2c9190614b3c565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612bc5828260405180602001604052806000815250612fe2565b5050565b612bd4848484612889565b612be08484848461303d565b612c1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c1690614714565b60405180910390fd5b50505050565b6060600b8054612c3490614d07565b80601f0160208091040260200160405190810160405280929190818152602001828054612c6090614d07565b8015612cad5780601f10612c8257610100808354040283529160200191612cad565b820191906000526020600020905b815481529060010190602001808311612c9057829003601f168201915b5050505050905090565b60606000821415612cff576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612e5f565b600082905060005b60008214612d31578080612d1a90614d39565b915050600a82612d2a9190614b92565b9150612d07565b60008167ffffffffffffffff811115612d73577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015612da55781602001600182028036833780820191505090505b5090505b60008514612e5857600182612dbe9190614c1d565b9150600a85612dcd9190614d82565b6030612dd99190614b3c565b60f81b818381518110612e15577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612e519190614b92565b9450612da9565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612ed98383836131d4565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612f1c57612f17816131d9565b612f5b565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612f5a57612f598382613222565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612f9e57612f998161338f565b612fdd565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612fdc57612fdb82826134d2565b5b5b505050565b612fec8383613551565b612ff9600084848461303d565b613038576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161302f90614714565b60405180910390fd5b505050565b600061305e8473ffffffffffffffffffffffffffffffffffffffff1661371f565b156131c7578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261308761267e565b8786866040518563ffffffff1660e01b81526004016130a99493929190614649565b602060405180830381600087803b1580156130c357600080fd5b505af19250505080156130f457506040513d601f19601f820116820180604052508101906130f19190613b07565b60015b613177573d8060008114613124576040519150601f19603f3d011682016040523d82523d6000602084013e613129565b606091505b5060008151141561316f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161316690614714565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506131cc565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161322f8461188f565b6132399190614c1d565b905060006007600084815260200190815260200160002054905081811461331e576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506133a39190614c1d565b90506000600960008481526020019081526020016000205490506000600883815481106133f9577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020015490508060088381548110613441577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806134b6577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b60006134dd8361188f565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156135c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135b890614874565b60405180910390fd5b6135ca81612686565b1561360a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161360190614754565b60405180910390fd5b61361660008383612ece565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546136669190614b3c565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b82805461373e90614d07565b90600052602060002090601f01602090048101928261376057600085556137a7565b82601f1061377957805160ff19168380011785556137a7565b828001600101855582156137a7579182015b828111156137a657825182559160200191906001019061378b565b5b5090506137b491906137b8565b5090565b5b808211156137d15760008160009055506001016137b9565b5090565b60006137e86137e384614a40565b614a0f565b90508281526020810184848401111561380057600080fd5b61380b848285614cc5565b509392505050565b600061382661382184614a70565b614a0f565b90508281526020810184848401111561383e57600080fd5b613849848285614cc5565b509392505050565b60008135905061386081614e80565b92915050565b60008135905061387581614e97565b92915050565b60008135905061388a81614eae565b92915050565b60008151905061389f81614eae565b92915050565b600082601f8301126138b657600080fd5b81356138c68482602086016137d5565b91505092915050565b600082601f8301126138e057600080fd5b81356138f0848260208601613813565b91505092915050565b60008135905061390881614ec5565b92915050565b60006020828403121561392057600080fd5b600061392e84828501613851565b91505092915050565b6000806040838503121561394a57600080fd5b600061395885828601613851565b925050602061396985828601613851565b9150509250929050565b60008060006060848603121561398857600080fd5b600061399686828701613851565b93505060206139a786828701613851565b92505060406139b8868287016138f9565b9150509250925092565b600080600080608085870312156139d857600080fd5b60006139e687828801613851565b94505060206139f787828801613851565b9350506040613a08878288016138f9565b925050606085013567ffffffffffffffff811115613a2557600080fd5b613a31878288016138a5565b91505092959194509250565b60008060408385031215613a5057600080fd5b6000613a5e85828601613851565b9250506020613a6f85828601613866565b9150509250929050565b60008060408385031215613a8c57600080fd5b6000613a9a85828601613851565b9250506020613aab858286016138f9565b9150509250929050565b600060208284031215613ac757600080fd5b6000613ad584828501613866565b91505092915050565b600060208284031215613af057600080fd5b6000613afe8482850161387b565b91505092915050565b600060208284031215613b1957600080fd5b6000613b2784828501613890565b91505092915050565b600060208284031215613b4257600080fd5b600082013567ffffffffffffffff811115613b5c57600080fd5b613b68848285016138cf565b91505092915050565b600060208284031215613b8357600080fd5b6000613b91848285016138f9565b91505092915050565b6000613ba683836145ca565b60208301905092915050565b613bbb81614c51565b82525050565b6000613bcc82614ac5565b613bd68185614af3565b9350613be183614aa0565b8060005b83811015613c12578151613bf98882613b9a565b9750613c0483614ae6565b925050600181019050613be5565b5085935050505092915050565b613c2881614c63565b82525050565b6000613c3982614ad0565b613c438185614b04565b9350613c53818560208601614cd4565b613c5c81614e6f565b840191505092915050565b6000613c7282614adb565b613c7c8185614b20565b9350613c8c818560208601614cd4565b613c9581614e6f565b840191505092915050565b6000613cab82614adb565b613cb58185614b31565b9350613cc5818560208601614cd4565b80840191505092915050565b60008154613cde81614d07565b613ce88186614b31565b94506001821660008114613d035760018114613d1457613d47565b60ff19831686528186019350613d47565b613d1d85614ab0565b60005b83811015613d3f57815481890152600182019150602081019050613d20565b838801955050505b50505092915050565b6000613d5d602b83614b20565b91507f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008301527f74206f6620626f756e64730000000000000000000000000000000000000000006020830152604082019050919050565b6000613dc3603283614b20565b91507f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008301527f63656976657220696d706c656d656e74657200000000000000000000000000006020830152604082019050919050565b6000613e29602683614b20565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613e8f601c83614b20565b91507f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006000830152602082019050919050565b6000613ecf602483614b20565b91507f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613f35601983614b20565b91507f4552433732313a20617070726f766520746f2063616c6c6572000000000000006000830152602082019050919050565b6000613f75602c83614b20565b91507f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000613fdb603883614b20565b91507f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008301527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006020830152604082019050919050565b6000614041602a83614b20565b91507f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008301527f726f2061646472657373000000000000000000000000000000000000000000006020830152604082019050919050565b60006140a7602983614b20565b91507f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008301527f656e7420746f6b656e00000000000000000000000000000000000000000000006020830152604082019050919050565b600061410d601683614b20565b91507f6d6178204e4654206c696d6974206578636565646564000000000000000000006000830152602082019050919050565b600061414d602483614b20565b91507f6d6178206d696e7420616d6f756e74207065722073657373696f6e206578636560008301527f65646564000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006141b3602083614b20565b91507f4552433732313a206d696e7420746f20746865207a65726f20616464726573736000830152602082019050919050565b60006141f3602c83614b20565b91507f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000614259602083614b20565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000614299601683614b20565b91507f74686520636f6e747261637420697320706175736564000000000000000000006000830152602082019050919050565b60006142d9602283614b20565b91507f6d6178204e4654207065722061646472657373206c696d69742065786365656460008301527f65640000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061433f602983614b20565b91507f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008301527f73206e6f74206f776e00000000000000000000000000000000000000000000006020830152604082019050919050565b60006143a5602f83614b20565b91507f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008301527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006020830152604082019050919050565b600061440b602183614b20565b91507f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008301527f72000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614471600083614b15565b9150600082019050919050565b600061448b601283614b20565b91507f696e73756666696369656e742066756e647300000000000000000000000000006000830152602082019050919050565b60006144cb603183614b20565b91507f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008301527f776e6572206e6f7220617070726f7665640000000000000000000000000000006020830152604082019050919050565b6000614531602c83614b20565b91507f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008301527f7574206f6620626f756e647300000000000000000000000000000000000000006020830152604082019050919050565b6000614597601b83614b20565b91507f6e65656420746f206d696e74206174206c656173742031204e465400000000006000830152602082019050919050565b6145d381614cbb565b82525050565b6145e281614cbb565b82525050565b60006145f48286613ca0565b91506146008285613ca0565b915061460c8284613cd1565b9150819050949350505050565b600061462482614464565b9150819050919050565b60006020820190506146436000830184613bb2565b92915050565b600060808201905061465e6000830187613bb2565b61466b6020830186613bb2565b61467860408301856145d9565b818103606083015261468a8184613c2e565b905095945050505050565b600060208201905081810360008301526146af8184613bc1565b905092915050565b60006020820190506146cc6000830184613c1f565b92915050565b600060208201905081810360008301526146ec8184613c67565b905092915050565b6000602082019050818103600083015261470d81613d50565b9050919050565b6000602082019050818103600083015261472d81613db6565b9050919050565b6000602082019050818103600083015261474d81613e1c565b9050919050565b6000602082019050818103600083015261476d81613e82565b9050919050565b6000602082019050818103600083015261478d81613ec2565b9050919050565b600060208201905081810360008301526147ad81613f28565b9050919050565b600060208201905081810360008301526147cd81613f68565b9050919050565b600060208201905081810360008301526147ed81613fce565b9050919050565b6000602082019050818103600083015261480d81614034565b9050919050565b6000602082019050818103600083015261482d8161409a565b9050919050565b6000602082019050818103600083015261484d81614100565b9050919050565b6000602082019050818103600083015261486d81614140565b9050919050565b6000602082019050818103600083015261488d816141a6565b9050919050565b600060208201905081810360008301526148ad816141e6565b9050919050565b600060208201905081810360008301526148cd8161424c565b9050919050565b600060208201905081810360008301526148ed8161428c565b9050919050565b6000602082019050818103600083015261490d816142cc565b9050919050565b6000602082019050818103600083015261492d81614332565b9050919050565b6000602082019050818103600083015261494d81614398565b9050919050565b6000602082019050818103600083015261496d816143fe565b9050919050565b6000602082019050818103600083015261498d8161447e565b9050919050565b600060208201905081810360008301526149ad816144be565b9050919050565b600060208201905081810360008301526149cd81614524565b9050919050565b600060208201905081810360008301526149ed8161458a565b9050919050565b6000602082019050614a0960008301846145d9565b92915050565b6000604051905081810181811067ffffffffffffffff82111715614a3657614a35614e40565b5b8060405250919050565b600067ffffffffffffffff821115614a5b57614a5a614e40565b5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff821115614a8b57614a8a614e40565b5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000614b4782614cbb565b9150614b5283614cbb565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614b8757614b86614db3565b5b828201905092915050565b6000614b9d82614cbb565b9150614ba883614cbb565b925082614bb857614bb7614de2565b5b828204905092915050565b6000614bce82614cbb565b9150614bd983614cbb565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614c1257614c11614db3565b5b828202905092915050565b6000614c2882614cbb565b9150614c3383614cbb565b925082821015614c4657614c45614db3565b5b828203905092915050565b6000614c5c82614c9b565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015614cf2578082015181840152602081019050614cd7565b83811115614d01576000848401525b50505050565b60006002820490506001821680614d1f57607f821691505b60208210811415614d3357614d32614e11565b5b50919050565b6000614d4482614cbb565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614d7757614d76614db3565b5b600182019050919050565b6000614d8d82614cbb565b9150614d9883614cbb565b925082614da857614da7614de2565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b614e8981614c51565b8114614e9457600080fd5b50565b614ea081614c63565b8114614eab57600080fd5b50565b614eb781614c6f565b8114614ec257600080fd5b50565b614ece81614cbb565b8114614ed957600080fd5b5056fea2646970667358221220c616ec781c2463591c8d23e21b5ff0bac196c215622aab68c33d5d8943f566bb64736f6c63430008000033697066733a2f2f516d5131456d4a754736504a4b39706b78475a31686948517261726f4b6a5a33514a73506e6470707650614e62452f4d657461446174612e6a736f6e

Deployed Bytecode

0x60806040526004361061023b5760003560e01c80636352211e1161012e578063b88d4fde116100ab578063d5abeb011161006f578063d5abeb0114610857578063da3ef23f14610882578063e985e9c5146108ab578063f2c4ce1e146108e8578063f2fde38b146109115761023b565b8063b88d4fde14610772578063ba7d2c761461079b578063c6682862146107c6578063c87b56dd146107f1578063d0eb26b01461082e5761023b565b80638da5cb5b116100f25780638da5cb5b146106c057806395d89b41146106eb578063a0712d6814610716578063a22cb46514610732578063a475b5dd1461075b5761023b565b80636352211e146105db5780636c0360eb1461061857806370a0823114610643578063715018a6146106805780637f00c7a6146106975761023b565b806323b872dd116101bc57806344a0d68a1161018057806344a0d68a146104f65780634f6ccce71461051f578063518302271461055c57806355f804b3146105875780635c975abb146105b05761023b565b806323b872dd146104205780632f745c59146104495780633ccfd60b1461048657806342842e0e14610490578063438b6300146104b95761023b565b8063095ea7b311610203578063095ea7b31461033957806313faede61461036257806318160ddd1461038d57806318cae269146103b8578063239c70ae146103f55761023b565b806301ffc9a71461024057806302329a291461027d57806306fdde03146102a6578063081812fc146102d1578063081c8c441461030e575b600080fd5b34801561024c57600080fd5b5061026760048036038101906102629190613ade565b61093a565b60405161027491906146b7565b60405180910390f35b34801561028957600080fd5b506102a4600480360381019061029f9190613ab5565b6109b4565b005b3480156102b257600080fd5b506102bb610a4d565b6040516102c891906146d2565b60405180910390f35b3480156102dd57600080fd5b506102f860048036038101906102f39190613b71565b610adf565b604051610305919061462e565b60405180910390f35b34801561031a57600080fd5b50610323610b64565b60405161033091906146d2565b60405180910390f35b34801561034557600080fd5b50610360600480360381019061035b9190613a79565b610bf2565b005b34801561036e57600080fd5b50610377610d0a565b60405161038491906149f4565b60405180910390f35b34801561039957600080fd5b506103a2610d10565b6040516103af91906149f4565b60405180910390f35b3480156103c457600080fd5b506103df60048036038101906103da919061390e565b610d1d565b6040516103ec91906149f4565b60405180910390f35b34801561040157600080fd5b5061040a610d35565b60405161041791906149f4565b60405180910390f35b34801561042c57600080fd5b5061044760048036038101906104429190613973565b610d3b565b005b34801561045557600080fd5b50610470600480360381019061046b9190613a79565b610d9b565b60405161047d91906149f4565b60405180910390f35b61048e610e40565b005b34801561049c57600080fd5b506104b760048036038101906104b29190613973565b61145c565b005b3480156104c557600080fd5b506104e060048036038101906104db919061390e565b61147c565b6040516104ed9190614695565b60405180910390f35b34801561050257600080fd5b5061051d60048036038101906105189190613b71565b611576565b005b34801561052b57600080fd5b5061054660048036038101906105419190613b71565b6115fc565b60405161055391906149f4565b60405180910390f35b34801561056857600080fd5b50610571611693565b60405161057e91906146b7565b60405180910390f35b34801561059357600080fd5b506105ae60048036038101906105a99190613b30565b6116a6565b005b3480156105bc57600080fd5b506105c561173c565b6040516105d291906146b7565b60405180910390f35b3480156105e757600080fd5b5061060260048036038101906105fd9190613b71565b61174f565b60405161060f919061462e565b60405180910390f35b34801561062457600080fd5b5061062d611801565b60405161063a91906146d2565b60405180910390f35b34801561064f57600080fd5b5061066a6004803603810190610665919061390e565b61188f565b60405161067791906149f4565b60405180910390f35b34801561068c57600080fd5b50610695611947565b005b3480156106a357600080fd5b506106be60048036038101906106b99190613b71565b6119cf565b005b3480156106cc57600080fd5b506106d5611a55565b6040516106e2919061462e565b60405180910390f35b3480156106f757600080fd5b50610700611a7f565b60405161070d91906146d2565b60405180910390f35b610730600480360381019061072b9190613b71565b611b11565b005b34801561073e57600080fd5b5061075960048036038101906107549190613a3d565b611def565b005b34801561076757600080fd5b50610770611f70565b005b34801561077e57600080fd5b50610799600480360381019061079491906139c2565b612009565b005b3480156107a757600080fd5b506107b061206b565b6040516107bd91906149f4565b60405180910390f35b3480156107d257600080fd5b506107db612071565b6040516107e891906146d2565b60405180910390f35b3480156107fd57600080fd5b5061081860048036038101906108139190613b71565b6120ff565b60405161082591906146d2565b60405180910390f35b34801561083a57600080fd5b5061085560048036038101906108509190613b71565b612258565b005b34801561086357600080fd5b5061086c6122de565b60405161087991906149f4565b60405180910390f35b34801561088e57600080fd5b506108a960048036038101906108a49190613b30565b6122e4565b005b3480156108b757600080fd5b506108d260048036038101906108cd9190613937565b61237a565b6040516108df91906146b7565b60405180910390f35b3480156108f457600080fd5b5061090f600480360381019061090a9190613b30565b61240e565b005b34801561091d57600080fd5b506109386004803603810190610933919061390e565b6124a4565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109ad57506109ac8261259c565b5b9050919050565b6109bc61267e565b73ffffffffffffffffffffffffffffffffffffffff166109da611a55565b73ffffffffffffffffffffffffffffffffffffffff1614610a30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a27906148b4565b60405180910390fd5b80601260006101000a81548160ff02191690831515021790555050565b606060008054610a5c90614d07565b80601f0160208091040260200160405190810160405280929190818152602001828054610a8890614d07565b8015610ad55780601f10610aaa57610100808354040283529160200191610ad5565b820191906000526020600020905b815481529060010190602001808311610ab857829003601f168201915b5050505050905090565b6000610aea82612686565b610b29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2090614894565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600d8054610b7190614d07565b80601f0160208091040260200160405190810160405280929190818152602001828054610b9d90614d07565b8015610bea5780601f10610bbf57610100808354040283529160200191610bea565b820191906000526020600020905b815481529060010190602001808311610bcd57829003601f168201915b505050505081565b6000610bfd8261174f565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6590614954565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c8d61267e565b73ffffffffffffffffffffffffffffffffffffffff161480610cbc5750610cbb81610cb661267e565b61237a565b5b610cfb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf2906147d4565b60405180910390fd5b610d0583836126f2565b505050565b600e5481565b6000600880549050905090565b60236020528060005260406000206000915090505481565b60105481565b610d4c610d4661267e565b826127ab565b610d8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8290614994565b60405180910390fd5b610d96838383612889565b505050565b6000610da68361188f565b8210610de7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dde906146f4565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610e4861267e565b73ffffffffffffffffffffffffffffffffffffffff16610e66611a55565b73ffffffffffffffffffffffffffffffffffffffff1614610ebc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb3906148b4565b60405180910390fd5b60004790506000601260029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16601a5460225484610f0d9190614b92565b610f179190614bc3565b604051610f2390614619565b60006040518083038185875af1925050503d8060008114610f60576040519150601f19603f3d011682016040523d82523d6000602084013e610f65565b606091505b5050905080610f7357600080fd5b6000601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16601b5460225485610fbf9190614b92565b610fc99190614bc3565b604051610fd590614619565b60006040518083038185875af1925050503d8060008114611012576040519150601f19603f3d011682016040523d82523d6000602084013e611017565b606091505b505090508061102557600080fd5b6000601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16601c54602254866110719190614b92565b61107b9190614bc3565b60405161108790614619565b60006040518083038185875af1925050503d80600081146110c4576040519150601f19603f3d011682016040523d82523d6000602084013e6110c9565b606091505b50509050806110d757600080fd5b6000601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16601d54602254876111239190614b92565b61112d9190614bc3565b60405161113990614619565b60006040518083038185875af1925050503d8060008114611176576040519150601f19603f3d011682016040523d82523d6000602084013e61117b565b606091505b505090508061118957600080fd5b6000601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16601e54602254886111d59190614b92565b6111df9190614bc3565b6040516111eb90614619565b60006040518083038185875af1925050503d8060008114611228576040519150601f19603f3d011682016040523d82523d6000602084013e61122d565b606091505b505090508061123b57600080fd5b6000601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16601f54602254896112879190614b92565b6112919190614bc3565b60405161129d90614619565b60006040518083038185875af1925050503d80600081146112da576040519150601f19603f3d011682016040523d82523d6000602084013e6112df565b606091505b50509050806112ed57600080fd5b6000601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166020546022548a6113399190614b92565b6113439190614bc3565b60405161134f90614619565b60006040518083038185875af1925050503d806000811461138c576040519150601f19603f3d011682016040523d82523d6000602084013e611391565b606091505b505090508061139f57600080fd5b6000601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166021546022548b6113eb9190614b92565b6113f59190614bc3565b60405161140190614619565b60006040518083038185875af1925050503d806000811461143e576040519150601f19603f3d011682016040523d82523d6000602084013e611443565b606091505b505090508061145157600080fd5b505050505050505050565b61147783838360405180602001604052806000815250612009565b505050565b606060006114898361188f565b905060008167ffffffffffffffff8111156114cd577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156114fb5781602001602082028036833780820191505090505b50905060005b8281101561156b576115138582610d9b565b82828151811061154c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001018181525050808061156390614d39565b915050611501565b508092505050919050565b61157e61267e565b73ffffffffffffffffffffffffffffffffffffffff1661159c611a55565b73ffffffffffffffffffffffffffffffffffffffff16146115f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e9906148b4565b60405180910390fd5b80600e8190555050565b6000611606610d10565b8210611647576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163e906149b4565b60405180910390fd5b60088281548110611681577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b601260019054906101000a900460ff1681565b6116ae61267e565b73ffffffffffffffffffffffffffffffffffffffff166116cc611a55565b73ffffffffffffffffffffffffffffffffffffffff1614611722576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611719906148b4565b60405180910390fd5b80600b9080519060200190611738929190613732565b5050565b601260009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156117f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ef90614814565b60405180910390fd5b80915050919050565b600b805461180e90614d07565b80601f016020809104026020016040519081016040528092919081815260200182805461183a90614d07565b80156118875780601f1061185c57610100808354040283529160200191611887565b820191906000526020600020905b81548152906001019060200180831161186a57829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611900576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f7906147f4565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61194f61267e565b73ffffffffffffffffffffffffffffffffffffffff1661196d611a55565b73ffffffffffffffffffffffffffffffffffffffff16146119c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ba906148b4565b60405180910390fd5b6119cd6000612ae5565b565b6119d761267e565b73ffffffffffffffffffffffffffffffffffffffff166119f5611a55565b73ffffffffffffffffffffffffffffffffffffffff1614611a4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a42906148b4565b60405180910390fd5b8060108190555050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054611a8e90614d07565b80601f0160208091040260200160405190810160405280929190818152602001828054611aba90614d07565b8015611b075780601f10611adc57610100808354040283529160200191611b07565b820191906000526020600020905b815481529060010190602001808311611aea57829003601f168201915b5050505050905090565b601260009054906101000a900460ff1615611b61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b58906148d4565b60405180910390fd5b6000611b6b610d10565b905060008211611bb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ba7906149d4565b60405180910390fd5b601054821115611bf5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bec90614854565b60405180910390fd5b600f548282611c049190614b3c565b1115611c45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3c90614834565b60405180910390fd5b60115482602360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611c939190614b3c565b1115611cd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ccb906148f4565b60405180910390fd5b611cdc611a55565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611d5f5781600e54611d1c9190614bc3565b341015611d5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5590614974565b60405180910390fd5b5b6000600190505b828111611dea57602360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190611dbd90614d39565b9190505550611dd7338284611dd29190614b3c565b612bab565b8080611de290614d39565b915050611d66565b505050565b611df761267e565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611e65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5c90614794565b60405180910390fd5b8060056000611e7261267e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611f1f61267e565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611f6491906146b7565b60405180910390a35050565b611f7861267e565b73ffffffffffffffffffffffffffffffffffffffff16611f96611a55565b73ffffffffffffffffffffffffffffffffffffffff1614611fec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe3906148b4565b60405180910390fd5b6001601260016101000a81548160ff021916908315150217905550565b61201a61201461267e565b836127ab565b612059576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205090614994565b60405180910390fd5b61206584848484612bc9565b50505050565b60115481565b600c805461207e90614d07565b80601f01602080910402602001604051908101604052809291908181526020018280546120aa90614d07565b80156120f75780601f106120cc576101008083540402835291602001916120f7565b820191906000526020600020905b8154815290600101906020018083116120da57829003601f168201915b505050505081565b606061210a82612686565b612149576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214090614934565b60405180910390fd5b60001515601260019054906101000a900460ff16151514156121f757600d805461217290614d07565b80601f016020809104026020016040519081016040528092919081815260200182805461219e90614d07565b80156121eb5780601f106121c0576101008083540402835291602001916121eb565b820191906000526020600020905b8154815290600101906020018083116121ce57829003601f168201915b50505050509050612253565b6000612201612c25565b90506000815111612221576040518060200160405280600081525061224f565b8061222b84612cb7565b600c60405160200161223f939291906145e8565b6040516020818303038152906040525b9150505b919050565b61226061267e565b73ffffffffffffffffffffffffffffffffffffffff1661227e611a55565b73ffffffffffffffffffffffffffffffffffffffff16146122d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122cb906148b4565b60405180910390fd5b8060118190555050565b600f5481565b6122ec61267e565b73ffffffffffffffffffffffffffffffffffffffff1661230a611a55565b73ffffffffffffffffffffffffffffffffffffffff1614612360576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612357906148b4565b60405180910390fd5b80600c9080519060200190612376929190613732565b5050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61241661267e565b73ffffffffffffffffffffffffffffffffffffffff16612434611a55565b73ffffffffffffffffffffffffffffffffffffffff161461248a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612481906148b4565b60405180910390fd5b80600d90805190602001906124a0929190613732565b5050565b6124ac61267e565b73ffffffffffffffffffffffffffffffffffffffff166124ca611a55565b73ffffffffffffffffffffffffffffffffffffffff1614612520576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612517906148b4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612590576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258790614734565b60405180910390fd5b61259981612ae5565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061266757507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612677575061267682612e64565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166127658361174f565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006127b682612686565b6127f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ec906147b4565b60405180910390fd5b60006128008361174f565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061286f57508373ffffffffffffffffffffffffffffffffffffffff1661285784610adf565b73ffffffffffffffffffffffffffffffffffffffff16145b80612880575061287f818561237a565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166128a98261174f565b73ffffffffffffffffffffffffffffffffffffffff16146128ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128f690614914565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561296f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161296690614774565b60405180910390fd5b61297a838383612ece565b6129856000826126f2565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546129d59190614c1d565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612a2c9190614b3c565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612bc5828260405180602001604052806000815250612fe2565b5050565b612bd4848484612889565b612be08484848461303d565b612c1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c1690614714565b60405180910390fd5b50505050565b6060600b8054612c3490614d07565b80601f0160208091040260200160405190810160405280929190818152602001828054612c6090614d07565b8015612cad5780601f10612c8257610100808354040283529160200191612cad565b820191906000526020600020905b815481529060010190602001808311612c9057829003601f168201915b5050505050905090565b60606000821415612cff576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612e5f565b600082905060005b60008214612d31578080612d1a90614d39565b915050600a82612d2a9190614b92565b9150612d07565b60008167ffffffffffffffff811115612d73577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015612da55781602001600182028036833780820191505090505b5090505b60008514612e5857600182612dbe9190614c1d565b9150600a85612dcd9190614d82565b6030612dd99190614b3c565b60f81b818381518110612e15577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612e519190614b92565b9450612da9565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612ed98383836131d4565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612f1c57612f17816131d9565b612f5b565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612f5a57612f598382613222565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612f9e57612f998161338f565b612fdd565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612fdc57612fdb82826134d2565b5b5b505050565b612fec8383613551565b612ff9600084848461303d565b613038576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161302f90614714565b60405180910390fd5b505050565b600061305e8473ffffffffffffffffffffffffffffffffffffffff1661371f565b156131c7578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261308761267e565b8786866040518563ffffffff1660e01b81526004016130a99493929190614649565b602060405180830381600087803b1580156130c357600080fd5b505af19250505080156130f457506040513d601f19601f820116820180604052508101906130f19190613b07565b60015b613177573d8060008114613124576040519150601f19603f3d011682016040523d82523d6000602084013e613129565b606091505b5060008151141561316f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161316690614714565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506131cc565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161322f8461188f565b6132399190614c1d565b905060006007600084815260200190815260200160002054905081811461331e576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506133a39190614c1d565b90506000600960008481526020019081526020016000205490506000600883815481106133f9577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020015490508060088381548110613441577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806134b6577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b60006134dd8361188f565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156135c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135b890614874565b60405180910390fd5b6135ca81612686565b1561360a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161360190614754565b60405180910390fd5b61361660008383612ece565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546136669190614b3c565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b82805461373e90614d07565b90600052602060002090601f01602090048101928261376057600085556137a7565b82601f1061377957805160ff19168380011785556137a7565b828001600101855582156137a7579182015b828111156137a657825182559160200191906001019061378b565b5b5090506137b491906137b8565b5090565b5b808211156137d15760008160009055506001016137b9565b5090565b60006137e86137e384614a40565b614a0f565b90508281526020810184848401111561380057600080fd5b61380b848285614cc5565b509392505050565b600061382661382184614a70565b614a0f565b90508281526020810184848401111561383e57600080fd5b613849848285614cc5565b509392505050565b60008135905061386081614e80565b92915050565b60008135905061387581614e97565b92915050565b60008135905061388a81614eae565b92915050565b60008151905061389f81614eae565b92915050565b600082601f8301126138b657600080fd5b81356138c68482602086016137d5565b91505092915050565b600082601f8301126138e057600080fd5b81356138f0848260208601613813565b91505092915050565b60008135905061390881614ec5565b92915050565b60006020828403121561392057600080fd5b600061392e84828501613851565b91505092915050565b6000806040838503121561394a57600080fd5b600061395885828601613851565b925050602061396985828601613851565b9150509250929050565b60008060006060848603121561398857600080fd5b600061399686828701613851565b93505060206139a786828701613851565b92505060406139b8868287016138f9565b9150509250925092565b600080600080608085870312156139d857600080fd5b60006139e687828801613851565b94505060206139f787828801613851565b9350506040613a08878288016138f9565b925050606085013567ffffffffffffffff811115613a2557600080fd5b613a31878288016138a5565b91505092959194509250565b60008060408385031215613a5057600080fd5b6000613a5e85828601613851565b9250506020613a6f85828601613866565b9150509250929050565b60008060408385031215613a8c57600080fd5b6000613a9a85828601613851565b9250506020613aab858286016138f9565b9150509250929050565b600060208284031215613ac757600080fd5b6000613ad584828501613866565b91505092915050565b600060208284031215613af057600080fd5b6000613afe8482850161387b565b91505092915050565b600060208284031215613b1957600080fd5b6000613b2784828501613890565b91505092915050565b600060208284031215613b4257600080fd5b600082013567ffffffffffffffff811115613b5c57600080fd5b613b68848285016138cf565b91505092915050565b600060208284031215613b8357600080fd5b6000613b91848285016138f9565b91505092915050565b6000613ba683836145ca565b60208301905092915050565b613bbb81614c51565b82525050565b6000613bcc82614ac5565b613bd68185614af3565b9350613be183614aa0565b8060005b83811015613c12578151613bf98882613b9a565b9750613c0483614ae6565b925050600181019050613be5565b5085935050505092915050565b613c2881614c63565b82525050565b6000613c3982614ad0565b613c438185614b04565b9350613c53818560208601614cd4565b613c5c81614e6f565b840191505092915050565b6000613c7282614adb565b613c7c8185614b20565b9350613c8c818560208601614cd4565b613c9581614e6f565b840191505092915050565b6000613cab82614adb565b613cb58185614b31565b9350613cc5818560208601614cd4565b80840191505092915050565b60008154613cde81614d07565b613ce88186614b31565b94506001821660008114613d035760018114613d1457613d47565b60ff19831686528186019350613d47565b613d1d85614ab0565b60005b83811015613d3f57815481890152600182019150602081019050613d20565b838801955050505b50505092915050565b6000613d5d602b83614b20565b91507f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008301527f74206f6620626f756e64730000000000000000000000000000000000000000006020830152604082019050919050565b6000613dc3603283614b20565b91507f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008301527f63656976657220696d706c656d656e74657200000000000000000000000000006020830152604082019050919050565b6000613e29602683614b20565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613e8f601c83614b20565b91507f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006000830152602082019050919050565b6000613ecf602483614b20565b91507f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613f35601983614b20565b91507f4552433732313a20617070726f766520746f2063616c6c6572000000000000006000830152602082019050919050565b6000613f75602c83614b20565b91507f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000613fdb603883614b20565b91507f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008301527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006020830152604082019050919050565b6000614041602a83614b20565b91507f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008301527f726f2061646472657373000000000000000000000000000000000000000000006020830152604082019050919050565b60006140a7602983614b20565b91507f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008301527f656e7420746f6b656e00000000000000000000000000000000000000000000006020830152604082019050919050565b600061410d601683614b20565b91507f6d6178204e4654206c696d6974206578636565646564000000000000000000006000830152602082019050919050565b600061414d602483614b20565b91507f6d6178206d696e7420616d6f756e74207065722073657373696f6e206578636560008301527f65646564000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006141b3602083614b20565b91507f4552433732313a206d696e7420746f20746865207a65726f20616464726573736000830152602082019050919050565b60006141f3602c83614b20565b91507f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000614259602083614b20565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000614299601683614b20565b91507f74686520636f6e747261637420697320706175736564000000000000000000006000830152602082019050919050565b60006142d9602283614b20565b91507f6d6178204e4654207065722061646472657373206c696d69742065786365656460008301527f65640000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061433f602983614b20565b91507f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008301527f73206e6f74206f776e00000000000000000000000000000000000000000000006020830152604082019050919050565b60006143a5602f83614b20565b91507f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008301527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006020830152604082019050919050565b600061440b602183614b20565b91507f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008301527f72000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614471600083614b15565b9150600082019050919050565b600061448b601283614b20565b91507f696e73756666696369656e742066756e647300000000000000000000000000006000830152602082019050919050565b60006144cb603183614b20565b91507f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008301527f776e6572206e6f7220617070726f7665640000000000000000000000000000006020830152604082019050919050565b6000614531602c83614b20565b91507f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008301527f7574206f6620626f756e647300000000000000000000000000000000000000006020830152604082019050919050565b6000614597601b83614b20565b91507f6e65656420746f206d696e74206174206c656173742031204e465400000000006000830152602082019050919050565b6145d381614cbb565b82525050565b6145e281614cbb565b82525050565b60006145f48286613ca0565b91506146008285613ca0565b915061460c8284613cd1565b9150819050949350505050565b600061462482614464565b9150819050919050565b60006020820190506146436000830184613bb2565b92915050565b600060808201905061465e6000830187613bb2565b61466b6020830186613bb2565b61467860408301856145d9565b818103606083015261468a8184613c2e565b905095945050505050565b600060208201905081810360008301526146af8184613bc1565b905092915050565b60006020820190506146cc6000830184613c1f565b92915050565b600060208201905081810360008301526146ec8184613c67565b905092915050565b6000602082019050818103600083015261470d81613d50565b9050919050565b6000602082019050818103600083015261472d81613db6565b9050919050565b6000602082019050818103600083015261474d81613e1c565b9050919050565b6000602082019050818103600083015261476d81613e82565b9050919050565b6000602082019050818103600083015261478d81613ec2565b9050919050565b600060208201905081810360008301526147ad81613f28565b9050919050565b600060208201905081810360008301526147cd81613f68565b9050919050565b600060208201905081810360008301526147ed81613fce565b9050919050565b6000602082019050818103600083015261480d81614034565b9050919050565b6000602082019050818103600083015261482d8161409a565b9050919050565b6000602082019050818103600083015261484d81614100565b9050919050565b6000602082019050818103600083015261486d81614140565b9050919050565b6000602082019050818103600083015261488d816141a6565b9050919050565b600060208201905081810360008301526148ad816141e6565b9050919050565b600060208201905081810360008301526148cd8161424c565b9050919050565b600060208201905081810360008301526148ed8161428c565b9050919050565b6000602082019050818103600083015261490d816142cc565b9050919050565b6000602082019050818103600083015261492d81614332565b9050919050565b6000602082019050818103600083015261494d81614398565b9050919050565b6000602082019050818103600083015261496d816143fe565b9050919050565b6000602082019050818103600083015261498d8161447e565b9050919050565b600060208201905081810360008301526149ad816144be565b9050919050565b600060208201905081810360008301526149cd81614524565b9050919050565b600060208201905081810360008301526149ed8161458a565b9050919050565b6000602082019050614a0960008301846145d9565b92915050565b6000604051905081810181811067ffffffffffffffff82111715614a3657614a35614e40565b5b8060405250919050565b600067ffffffffffffffff821115614a5b57614a5a614e40565b5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff821115614a8b57614a8a614e40565b5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000614b4782614cbb565b9150614b5283614cbb565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614b8757614b86614db3565b5b828201905092915050565b6000614b9d82614cbb565b9150614ba883614cbb565b925082614bb857614bb7614de2565b5b828204905092915050565b6000614bce82614cbb565b9150614bd983614cbb565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614c1257614c11614db3565b5b828202905092915050565b6000614c2882614cbb565b9150614c3383614cbb565b925082821015614c4657614c45614db3565b5b828203905092915050565b6000614c5c82614c9b565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015614cf2578082015181840152602081019050614cd7565b83811115614d01576000848401525b50505050565b60006002820490506001821680614d1f57607f821691505b60208210811415614d3357614d32614e11565b5b50919050565b6000614d4482614cbb565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614d7757614d76614db3565b5b600182019050919050565b6000614d8d82614cbb565b9150614d9883614cbb565b925082614da857614da7614de2565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b614e8981614c51565b8114614e9457600080fd5b50565b614ea081614c63565b8114614eab57600080fd5b50565b614eb781614c6f565b8114614ec257600080fd5b50565b614ece81614cbb565b8114614ed957600080fd5b5056fea2646970667358221220c616ec781c2463591c8d23e21b5ff0bac196c215622aab68c33d5d8943f566bb64736f6c63430008000033

Deployed Bytecode Sourcemap

42781:5217:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34388:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46879:73;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22315:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23874:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42935:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23397:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42968:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35028:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44157:55;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43042:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24764:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34696:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46959:1036;;;:::i;:::-;;25174:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45253:348;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46311:80;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35218:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43153:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46519:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43123:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22009:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42867:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21739:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42152:94;;;;;;;;;;;;;:::i;:::-;;46397:116;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41501:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22484:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44504:743;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24167:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46126:65;;;;;;;;;;;;;:::i;:::-;;25430:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43080:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42893:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45607:497;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46199:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43006:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46623:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24533:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46753:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42401:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34388:224;34490:4;34529:35;34514:50;;;:11;:50;;;;:90;;;;34568:36;34592:11;34568:23;:36::i;:::-;34514:90;34507:97;;34388:224;;;:::o;46879:73::-;41732:12;:10;:12::i;:::-;41721:23;;:7;:5;:7::i;:::-;:23;;;41713:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46940:6:::1;46931;;:15;;;;;;;;;;;;;;;;;;46879:73:::0;:::o;22315:100::-;22369:13;22402:5;22395:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22315:100;:::o;23874:221::-;23950:7;23978:16;23986:7;23978;:16::i;:::-;23970:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;24063:15;:24;24079:7;24063:24;;;;;;;;;;;;;;;;;;;;;24056:31;;23874:221;;;:::o;42935:28::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;23397:411::-;23478:13;23494:23;23509:7;23494:14;:23::i;:::-;23478:39;;23542:5;23536:11;;:2;:11;;;;23528:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;23636:5;23620:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;23645:37;23662:5;23669:12;:10;:12::i;:::-;23645:16;:37::i;:::-;23620:62;23598:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;23779:21;23788:2;23792:7;23779:8;:21::i;:::-;23397:411;;;:::o;42968:33::-;;;;:::o;35028:113::-;35089:7;35116:10;:17;;;;35109:24;;35028:113;:::o;44157:55::-;;;;;;;;;;;;;;;;;:::o;43042:33::-;;;;:::o;24764:339::-;24959:41;24978:12;:10;:12::i;:::-;24992:7;24959:18;:41::i;:::-;24951:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;25067:28;25077:4;25083:2;25087:7;25067:9;:28::i;:::-;24764:339;;;:::o;34696:256::-;34793:7;34829:23;34846:5;34829:16;:23::i;:::-;34821:5;:31;34813:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;34918:12;:19;34931:5;34918:19;;;;;;;;;;;;;;;:26;34938:5;34918:26;;;;;;;;;;;;34911:33;;34696:256;;;;:::o;46959:1036::-;41732:12;:10;:12::i;:::-;41721:23;;:7;:5;:7::i;:::-;:23;;;41713:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47011:20:::1;47034:21;47011:44;;47063:7;47084:9;;;;;;;;;;;47076:23;;47136:19;;47122:11;;47107:12;:26;;;;:::i;:::-;:48;;;;:::i;:::-;47076:84;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47062:98;;;47175:2;47167:11;;;::::0;::::1;;47186:7;47207:5;;;;;;;;;;;47199:19;;47255:15;;47241:11;;47226:12;:26;;;;:::i;:::-;:44;;;;:::i;:::-;47199:76;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47185:90;;;47290:2;47282:11;;;::::0;::::1;;47301:7;47322:4;;;;;;;;;;;47314:18;;47369:14;;47355:11;;47340:12;:26;;;;:::i;:::-;:43;;;;:::i;:::-;47314:74;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47300:88;;;47403:2;47395:11;;;::::0;::::1;;47414:7;47435;;;;;;;;;;;47427:21;;47485:17;;47471:11;;47456:12;:26;;;;:::i;:::-;:46;;;;:::i;:::-;47427:80;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47413:94;;;47522:2;47514:11;;;::::0;::::1;;47533:7;47554:4;;;;;;;;;;;47546:18;;47601:14;;47587:11;;47572:12;:26;;;;:::i;:::-;:43;;;;:::i;:::-;47546:74;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47532:88;;;47635:2;47627:11;;;::::0;::::1;;47646:8;47668:5;;;;;;;;;;;47660:19;;47716:15;;47702:11;;47687:12;:26;;;;:::i;:::-;:44;;;;:::i;:::-;47660:76;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47645:91;;;47751:3;47743:12;;;::::0;::::1;;47763:8;47785:6;;;;;;;;;;;47777:20;;47834:16;;47820:11;;47805:12;:26;;;;:::i;:::-;:45;;;;:::i;:::-;47777:78;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47762:93;;;47870:3;47862:12;;;::::0;::::1;;47882:7;47903:5;;;;;;;;;;;47895:19;;47951:15;;47937:11;;47922:12;:26;;;;:::i;:::-;:44;;;;:::i;:::-;47895:76;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47881:90;;;47986:2;47978:11;;;::::0;::::1;;41792:1;;;;;;;;;46959:1036::o:0;25174:185::-;25312:39;25329:4;25335:2;25339:7;25312:39;;;;;;;;;;;;:16;:39::i;:::-;25174:185;;;:::o;45253:348::-;45328:16;45356:23;45382:17;45392:6;45382:9;:17::i;:::-;45356:43;;45406:25;45448:15;45434:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45406:58;;45476:9;45471:103;45491:15;45487:1;:19;45471:103;;;45536:30;45556:6;45564:1;45536:19;:30::i;:::-;45522:8;45531:1;45522:11;;;;;;;;;;;;;;;;;;;;;:44;;;;;45508:3;;;;;:::i;:::-;;;;45471:103;;;;45587:8;45580:15;;;;45253:348;;;:::o;46311:80::-;41732:12;:10;:12::i;:::-;41721:23;;:7;:5;:7::i;:::-;:23;;;41713:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46377:8:::1;46370:4;:15;;;;46311:80:::0;:::o;35218:233::-;35293:7;35329:30;:28;:30::i;:::-;35321:5;:38;35313:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;35426:10;35437:5;35426:17;;;;;;;;;;;;;;;;;;;;;;;;35419:24;;35218:233;;;:::o;43153:28::-;;;;;;;;;;;;;:::o;46519:98::-;41732:12;:10;:12::i;:::-;41721:23;;:7;:5;:7::i;:::-;:23;;;41713:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46600:11:::1;46590:7;:21;;;;;;;;;;;;:::i;:::-;;46519:98:::0;:::o;43123:25::-;;;;;;;;;;;;;:::o;22009:239::-;22081:7;22101:13;22117:7;:16;22125:7;22117:16;;;;;;;;;;;;;;;;;;;;;22101:32;;22169:1;22152:19;;:5;:19;;;;22144:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;22235:5;22228:12;;;22009:239;;;:::o;42867:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;21739:208::-;21811:7;21856:1;21839:19;;:5;:19;;;;21831:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;21923:9;:16;21933:5;21923:16;;;;;;;;;;;;;;;;21916:23;;21739:208;;;:::o;42152:94::-;41732:12;:10;:12::i;:::-;41721:23;;:7;:5;:7::i;:::-;:23;;;41713:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42217:21:::1;42235:1;42217:9;:21::i;:::-;42152:94::o:0;46397:116::-;41732:12;:10;:12::i;:::-;41721:23;;:7;:5;:7::i;:::-;:23;;;41713:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46490:17:::1;46474:13;:33;;;;46397:116:::0;:::o;41501:87::-;41547:7;41574:6;;;;;;;;;;;41567:13;;41501:87;:::o;22484:104::-;22540:13;22573:7;22566:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22484:104;:::o;44504:743::-;44570:6;;;;;;;;;;;44569:7;44561:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;44610:14;44627:13;:11;:13::i;:::-;44610:30;;44669:1;44655:11;:15;44647:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;44732:13;;44717:11;:28;;44709:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;44825:9;;44810:11;44801:6;:20;;;;:::i;:::-;:33;;44793:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44926:18;;44911:11;44876:20;:32;44897:10;44876:32;;;;;;;;;;;;;;;;:46;;;;:::i;:::-;:68;;44868:115;;;;;;;;;;;;:::i;:::-;;;;;;;;;45008:7;:5;:7::i;:::-;44994:21;;:10;:21;;;44990:108;;45056:11;45049:4;;:18;;;;:::i;:::-;45036:9;:31;;45028:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;44990:108;45111:9;45123:1;45111:13;;45106:136;45131:11;45126:1;:16;45106:136;;45158:20;:32;45179:10;45158:32;;;;;;;;;;;;;;;;:34;;;;;;;;;:::i;:::-;;;;;;45201:33;45211:10;45232:1;45223:6;:10;;;;:::i;:::-;45201:9;:33::i;:::-;45144:3;;;;;:::i;:::-;;;;45106:136;;;;44504:743;;:::o;24167:295::-;24282:12;:10;:12::i;:::-;24270:24;;:8;:24;;;;24262:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;24382:8;24337:18;:32;24356:12;:10;:12::i;:::-;24337:32;;;;;;;;;;;;;;;:42;24370:8;24337:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;24435:8;24406:48;;24421:12;:10;:12::i;:::-;24406:48;;;24445:8;24406:48;;;;;;:::i;:::-;;;;;;;;24167:295;;:::o;46126:65::-;41732:12;:10;:12::i;:::-;41721:23;;:7;:5;:7::i;:::-;:23;;;41713:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46181:4:::1;46170:8;;:15;;;;;;;;;;;;;;;;;;46126:65::o:0;25430:328::-;25605:41;25624:12;:10;:12::i;:::-;25638:7;25605:18;:41::i;:::-;25597:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;25711:39;25725:4;25731:2;25735:7;25744:5;25711:13;:39::i;:::-;25430:328;;;;:::o;43080:38::-;;;;:::o;42893:37::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;45607:497::-;45705:13;45746:16;45754:7;45746;:16::i;:::-;45730:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;45855:5;45843:17;;:8;;;;;;;;;;;:17;;;45840:62;;;45880:14;45873:21;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45840:62;45910:28;45941:10;:8;:10::i;:::-;45910:41;;45996:1;45971:14;45965:28;:32;:133;;;;;;;;;;;;;;;;;46033:14;46049:18;:7;:16;:18::i;:::-;46069:13;46016:67;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;45965:133;45958:140;;;45607:497;;;;:::o;46199:104::-;41732:12;:10;:12::i;:::-;41721:23;;:7;:5;:7::i;:::-;:23;;;41713:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46291:6:::1;46270:18;:27;;;;46199:104:::0;:::o;43006:31::-;;;;:::o;46623:122::-;41732:12;:10;:12::i;:::-;41721:23;;:7;:5;:7::i;:::-;:23;;;41713:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46722:17:::1;46706:13;:33;;;;;;;;;;;;:::i;:::-;;46623:122:::0;:::o;24533:164::-;24630:4;24654:18;:25;24673:5;24654:25;;;;;;;;;;;;;;;:35;24680:8;24654:35;;;;;;;;;;;;;;;;;;;;;;;;;24647:42;;24533:164;;;;:::o;46753:120::-;41732:12;:10;:12::i;:::-;41721:23;;:7;:5;:7::i;:::-;:23;;;41713:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46852:15:::1;46835:14;:32;;;;;;;;;;;;:::i;:::-;;46753:120:::0;:::o;42401:192::-;41732:12;:10;:12::i;:::-;41721:23;;:7;:5;:7::i;:::-;:23;;;41713:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42510:1:::1;42490:22;;:8;:22;;;;42482:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;42566:19;42576:8;42566:9;:19::i;:::-;42401:192:::0;:::o;21370:305::-;21472:4;21524:25;21509:40;;;:11;:40;;;;:105;;;;21581:33;21566:48;;;:11;:48;;;;21509:105;:158;;;;21631:36;21655:11;21631:23;:36::i;:::-;21509:158;21489:178;;21370:305;;;:::o;19869:98::-;19922:7;19949:10;19942:17;;19869:98;:::o;27268:127::-;27333:4;27385:1;27357:30;;:7;:16;27365:7;27357:16;;;;;;;;;;;;;;;;;;;;;:30;;;;27350:37;;27268:127;;;:::o;31250:174::-;31352:2;31325:15;:24;31341:7;31325:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;31408:7;31404:2;31370:46;;31379:23;31394:7;31379:14;:23::i;:::-;31370:46;;;;;;;;;;;;31250:174;;:::o;27562:348::-;27655:4;27680:16;27688:7;27680;:16::i;:::-;27672:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27756:13;27772:23;27787:7;27772:14;:23::i;:::-;27756:39;;27825:5;27814:16;;:7;:16;;;:51;;;;27858:7;27834:31;;:20;27846:7;27834:11;:20::i;:::-;:31;;;27814:51;:87;;;;27869:32;27886:5;27893:7;27869:16;:32::i;:::-;27814:87;27806:96;;;27562:348;;;;:::o;30554:578::-;30713:4;30686:31;;:23;30701:7;30686:14;:23::i;:::-;:31;;;30678:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;30796:1;30782:16;;:2;:16;;;;30774:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;30852:39;30873:4;30879:2;30883:7;30852:20;:39::i;:::-;30956:29;30973:1;30977:7;30956:8;:29::i;:::-;31017:1;30998:9;:15;31008:4;30998:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;31046:1;31029:9;:13;31039:2;31029:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;31077:2;31058:7;:16;31066:7;31058:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;31116:7;31112:2;31097:27;;31106:4;31097:27;;;;;;;;;;;;30554:578;;;:::o;42601:173::-;42657:16;42676:6;;;;;;;;;;;42657:25;;42702:8;42693:6;;:17;;;;;;;;;;;;;;;;;;42757:8;42726:40;;42747:8;42726:40;;;;;;;;;;;;42601:173;;:::o;28252:110::-;28328:26;28338:2;28342:7;28328:26;;;;;;;;;;;;:9;:26::i;:::-;28252:110;;:::o;26640:315::-;26797:28;26807:4;26813:2;26817:7;26797:9;:28::i;:::-;26844:48;26867:4;26873:2;26877:7;26886:5;26844:22;:48::i;:::-;26836:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;26640:315;;;;:::o;44383:102::-;44443:13;44472:7;44465:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44383:102;:::o;7821:723::-;7877:13;8107:1;8098:5;:10;8094:53;;;8125:10;;;;;;;;;;;;;;;;;;;;;8094:53;8157:12;8172:5;8157:20;;8188:14;8213:78;8228:1;8220:4;:9;8213:78;;8246:8;;;;;:::i;:::-;;;;8277:2;8269:10;;;;;:::i;:::-;;;8213:78;;;8301:19;8333:6;8323:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8301:39;;8351:154;8367:1;8358:5;:10;8351:154;;8395:1;8385:11;;;;;:::i;:::-;;;8462:2;8454:5;:10;;;;:::i;:::-;8441:2;:24;;;;:::i;:::-;8428:39;;8411:6;8418;8411:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;8491:2;8482:11;;;;;:::i;:::-;;;8351:154;;;8529:6;8515:21;;;;;7821:723;;;;:::o;7377:157::-;7462:4;7501:25;7486:40;;;:11;:40;;;;7479:47;;7377:157;;;:::o;36064:589::-;36208:45;36235:4;36241:2;36245:7;36208:26;:45::i;:::-;36286:1;36270:18;;:4;:18;;;36266:187;;;36305:40;36337:7;36305:31;:40::i;:::-;36266:187;;;36375:2;36367:10;;:4;:10;;;36363:90;;36394:47;36427:4;36433:7;36394:32;:47::i;:::-;36363:90;36266:187;36481:1;36467:16;;:2;:16;;;36463:183;;;36500:45;36537:7;36500:36;:45::i;:::-;36463:183;;;36573:4;36567:10;;:2;:10;;;36563:83;;36594:40;36622:2;36626:7;36594:27;:40::i;:::-;36563:83;36463:183;36064:589;;;:::o;28589:321::-;28719:18;28725:2;28729:7;28719:5;:18::i;:::-;28770:54;28801:1;28805:2;28809:7;28818:5;28770:22;:54::i;:::-;28748:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;28589:321;;;:::o;31989:799::-;32144:4;32165:15;:2;:13;;;:15::i;:::-;32161:620;;;32217:2;32201:36;;;32238:12;:10;:12::i;:::-;32252:4;32258:7;32267:5;32201:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;32197:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32460:1;32443:6;:13;:18;32439:272;;;32486:60;;;;;;;;;;:::i;:::-;;;;;;;;32439:272;32661:6;32655:13;32646:6;32642:2;32638:15;32631:38;32197:529;32334:41;;;32324:51;;;:6;:51;;;;32317:58;;;;;32161:620;32765:4;32758:11;;31989:799;;;;;;;:::o;33360:126::-;;;;:::o;37376:164::-;37480:10;:17;;;;37453:15;:24;37469:7;37453:24;;;;;;;;;;;:44;;;;37508:10;37524:7;37508:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37376:164;:::o;38167:988::-;38433:22;38483:1;38458:22;38475:4;38458:16;:22::i;:::-;:26;;;;:::i;:::-;38433:51;;38495:18;38516:17;:26;38534:7;38516:26;;;;;;;;;;;;38495:47;;38663:14;38649:10;:28;38645:328;;38694:19;38716:12;:18;38729:4;38716:18;;;;;;;;;;;;;;;:34;38735:14;38716:34;;;;;;;;;;;;38694:56;;38800:11;38767:12;:18;38780:4;38767:18;;;;;;;;;;;;;;;:30;38786:10;38767:30;;;;;;;;;;;:44;;;;38917:10;38884:17;:30;38902:11;38884:30;;;;;;;;;;;:43;;;;38645:328;;39069:17;:26;39087:7;39069:26;;;;;;;;;;;39062:33;;;39113:12;:18;39126:4;39113:18;;;;;;;;;;;;;;;:34;39132:14;39113:34;;;;;;;;;;;39106:41;;;38167:988;;;;:::o;39450:1079::-;39703:22;39748:1;39728:10;:17;;;;:21;;;;:::i;:::-;39703:46;;39760:18;39781:15;:24;39797:7;39781:24;;;;;;;;;;;;39760:45;;40132:19;40154:10;40165:14;40154:26;;;;;;;;;;;;;;;;;;;;;;;;40132:48;;40218:11;40193:10;40204;40193:22;;;;;;;;;;;;;;;;;;;;;;;:36;;;;40329:10;40298:15;:28;40314:11;40298:28;;;;;;;;;;;:41;;;;40470:15;:24;40486:7;40470:24;;;;;;;;;;;40463:31;;;40505:10;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39450:1079;;;;:::o;36954:221::-;37039:14;37056:20;37073:2;37056:16;:20::i;:::-;37039:37;;37114:7;37087:12;:16;37100:2;37087:16;;;;;;;;;;;;;;;:24;37104:6;37087:24;;;;;;;;;;;:34;;;;37161:6;37132:17;:26;37150:7;37132:26;;;;;;;;;;;:35;;;;36954:221;;;:::o;29246:382::-;29340:1;29326:16;;:2;:16;;;;29318:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;29399:16;29407:7;29399;:16::i;:::-;29398:17;29390:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;29461:45;29490:1;29494:2;29498:7;29461:20;:45::i;:::-;29536:1;29519:9;:13;29529:2;29519:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;29567:2;29548:7;:16;29556:7;29548:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;29612:7;29608:2;29587:33;;29604:1;29587:33;;;;;;;;;;;;29246:382;;:::o;10315:387::-;10375:4;10583:12;10650:7;10638:20;10630:28;;10693:1;10686:4;:8;10679:15;;;10315:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:342:1:-;;109:64;124:48;165:6;124:48;:::i;:::-;109:64;:::i;:::-;100:73;;196:6;189:5;182:21;234:4;227:5;223:16;272:3;263:6;258:3;254:16;251:25;248:2;;;289:1;286;279:12;248:2;302:41;336:6;331:3;326;302:41;:::i;:::-;90:259;;;;;;:::o;355:344::-;;458:65;473:49;515:6;473:49;:::i;:::-;458:65;:::i;:::-;449:74;;546:6;539:5;532:21;584:4;577:5;573:16;622:3;613:6;608:3;604:16;601:25;598:2;;;639:1;636;629:12;598:2;652:41;686:6;681:3;676;652:41;:::i;:::-;439:260;;;;;;:::o;705:139::-;;789:6;776:20;767:29;;805:33;832:5;805:33;:::i;:::-;757:87;;;;:::o;850:133::-;;931:6;918:20;909:29;;947:30;971:5;947:30;:::i;:::-;899:84;;;;:::o;989:137::-;;1072:6;1059:20;1050:29;;1088:32;1114:5;1088:32;:::i;:::-;1040:86;;;;:::o;1132:141::-;;1219:6;1213:13;1204:22;;1235:32;1261:5;1235:32;:::i;:::-;1194:79;;;;:::o;1292:271::-;;1396:3;1389:4;1381:6;1377:17;1373:27;1363:2;;1414:1;1411;1404:12;1363:2;1454:6;1441:20;1479:78;1553:3;1545:6;1538:4;1530:6;1526:17;1479:78;:::i;:::-;1470:87;;1353:210;;;;;:::o;1583:273::-;;1688:3;1681:4;1673:6;1669:17;1665:27;1655:2;;1706:1;1703;1696:12;1655:2;1746:6;1733:20;1771:79;1846:3;1838:6;1831:4;1823:6;1819:17;1771:79;:::i;:::-;1762:88;;1645:211;;;;;:::o;1862:139::-;;1946:6;1933:20;1924:29;;1962:33;1989:5;1962:33;:::i;:::-;1914:87;;;;:::o;2007:262::-;;2115:2;2103:9;2094:7;2090:23;2086:32;2083:2;;;2131:1;2128;2121:12;2083:2;2174:1;2199:53;2244:7;2235:6;2224:9;2220:22;2199:53;:::i;:::-;2189:63;;2145:117;2073:196;;;;:::o;2275:407::-;;;2400:2;2388:9;2379:7;2375:23;2371:32;2368:2;;;2416:1;2413;2406:12;2368:2;2459:1;2484:53;2529:7;2520:6;2509:9;2505:22;2484:53;:::i;:::-;2474:63;;2430:117;2586:2;2612:53;2657:7;2648:6;2637:9;2633:22;2612:53;:::i;:::-;2602:63;;2557:118;2358:324;;;;;:::o;2688:552::-;;;;2830:2;2818:9;2809:7;2805:23;2801:32;2798:2;;;2846:1;2843;2836:12;2798:2;2889:1;2914:53;2959:7;2950:6;2939:9;2935:22;2914:53;:::i;:::-;2904:63;;2860:117;3016:2;3042:53;3087:7;3078:6;3067:9;3063:22;3042:53;:::i;:::-;3032:63;;2987:118;3144:2;3170:53;3215:7;3206:6;3195:9;3191:22;3170:53;:::i;:::-;3160:63;;3115:118;2788:452;;;;;:::o;3246:809::-;;;;;3414:3;3402:9;3393:7;3389:23;3385:33;3382:2;;;3431:1;3428;3421:12;3382:2;3474:1;3499:53;3544:7;3535:6;3524:9;3520:22;3499:53;:::i;:::-;3489:63;;3445:117;3601:2;3627:53;3672:7;3663:6;3652:9;3648:22;3627:53;:::i;:::-;3617:63;;3572:118;3729:2;3755:53;3800:7;3791:6;3780:9;3776:22;3755:53;:::i;:::-;3745:63;;3700:118;3885:2;3874:9;3870:18;3857:32;3916:18;3908:6;3905:30;3902:2;;;3948:1;3945;3938:12;3902:2;3976:62;4030:7;4021:6;4010:9;4006:22;3976:62;:::i;:::-;3966:72;;3828:220;3372:683;;;;;;;:::o;4061:401::-;;;4183:2;4171:9;4162:7;4158:23;4154:32;4151:2;;;4199:1;4196;4189:12;4151:2;4242:1;4267:53;4312:7;4303:6;4292:9;4288:22;4267:53;:::i;:::-;4257:63;;4213:117;4369:2;4395:50;4437:7;4428:6;4417:9;4413:22;4395:50;:::i;:::-;4385:60;;4340:115;4141:321;;;;;:::o;4468:407::-;;;4593:2;4581:9;4572:7;4568:23;4564:32;4561:2;;;4609:1;4606;4599:12;4561:2;4652:1;4677:53;4722:7;4713:6;4702:9;4698:22;4677:53;:::i;:::-;4667:63;;4623:117;4779:2;4805:53;4850:7;4841:6;4830:9;4826:22;4805:53;:::i;:::-;4795:63;;4750:118;4551:324;;;;;:::o;4881:256::-;;4986:2;4974:9;4965:7;4961:23;4957:32;4954:2;;;5002:1;4999;4992:12;4954:2;5045:1;5070:50;5112:7;5103:6;5092:9;5088:22;5070:50;:::i;:::-;5060:60;;5016:114;4944:193;;;;:::o;5143:260::-;;5250:2;5238:9;5229:7;5225:23;5221:32;5218:2;;;5266:1;5263;5256:12;5218:2;5309:1;5334:52;5378:7;5369:6;5358:9;5354:22;5334:52;:::i;:::-;5324:62;;5280:116;5208:195;;;;:::o;5409:282::-;;5527:2;5515:9;5506:7;5502:23;5498:32;5495:2;;;5543:1;5540;5533:12;5495:2;5586:1;5611:63;5666:7;5657:6;5646:9;5642:22;5611:63;:::i;:::-;5601:73;;5557:127;5485:206;;;;:::o;5697:375::-;;5815:2;5803:9;5794:7;5790:23;5786:32;5783:2;;;5831:1;5828;5821:12;5783:2;5902:1;5891:9;5887:17;5874:31;5932:18;5924:6;5921:30;5918:2;;;5964:1;5961;5954:12;5918:2;5992:63;6047:7;6038:6;6027:9;6023:22;5992:63;:::i;:::-;5982:73;;5845:220;5773:299;;;;:::o;6078:262::-;;6186:2;6174:9;6165:7;6161:23;6157:32;6154:2;;;6202:1;6199;6192:12;6154:2;6245:1;6270:53;6315:7;6306:6;6295:9;6291:22;6270:53;:::i;:::-;6260:63;;6216:117;6144:196;;;;:::o;6346:179::-;;6436:46;6478:3;6470:6;6436:46;:::i;:::-;6514:4;6509:3;6505:14;6491:28;;6426:99;;;;:::o;6531:118::-;6618:24;6636:5;6618:24;:::i;:::-;6613:3;6606:37;6596:53;;:::o;6685:732::-;;6833:54;6881:5;6833:54;:::i;:::-;6903:86;6982:6;6977:3;6903:86;:::i;:::-;6896:93;;7013:56;7063:5;7013:56;:::i;:::-;7092:7;7123:1;7108:284;7133:6;7130:1;7127:13;7108:284;;;7209:6;7203:13;7236:63;7295:3;7280:13;7236:63;:::i;:::-;7229:70;;7322:60;7375:6;7322:60;:::i;:::-;7312:70;;7168:224;7155:1;7152;7148:9;7143:14;;7108:284;;;7112:14;7408:3;7401:10;;6809:608;;;;;;;:::o;7423:109::-;7504:21;7519:5;7504:21;:::i;:::-;7499:3;7492:34;7482:50;;:::o;7538:360::-;;7652:38;7684:5;7652:38;:::i;:::-;7706:70;7769:6;7764:3;7706:70;:::i;:::-;7699:77;;7785:52;7830:6;7825:3;7818:4;7811:5;7807:16;7785:52;:::i;:::-;7862:29;7884:6;7862:29;:::i;:::-;7857:3;7853:39;7846:46;;7628:270;;;;;:::o;7904:364::-;;8020:39;8053:5;8020:39;:::i;:::-;8075:71;8139:6;8134:3;8075:71;:::i;:::-;8068:78;;8155:52;8200:6;8195:3;8188:4;8181:5;8177:16;8155:52;:::i;:::-;8232:29;8254:6;8232:29;:::i;:::-;8227:3;8223:39;8216:46;;7996:272;;;;;:::o;8274:377::-;;8408:39;8441:5;8408:39;:::i;:::-;8463:89;8545:6;8540:3;8463:89;:::i;:::-;8456:96;;8561:52;8606:6;8601:3;8594:4;8587:5;8583:16;8561:52;:::i;:::-;8638:6;8633:3;8629:16;8622:23;;8384:267;;;;;:::o;8681:845::-;;8821:5;8815:12;8850:36;8876:9;8850:36;:::i;:::-;8902:89;8984:6;8979:3;8902:89;:::i;:::-;8895:96;;9022:1;9011:9;9007:17;9038:1;9033:137;;;;9184:1;9179:341;;;;9000:520;;9033:137;9117:4;9113:9;9102;9098:25;9093:3;9086:38;9153:6;9148:3;9144:16;9137:23;;9033:137;;9179:341;9246:38;9278:5;9246:38;:::i;:::-;9306:1;9320:154;9334:6;9331:1;9328:13;9320:154;;;9408:7;9402:14;9398:1;9393:3;9389:11;9382:35;9458:1;9449:7;9445:15;9434:26;;9356:4;9353:1;9349:12;9344:17;;9320:154;;;9503:6;9498:3;9494:16;9487:23;;9186:334;;9000:520;;8788:738;;;;;;:::o;9532:375::-;;9695:67;9759:2;9754:3;9695:67;:::i;:::-;9688:74;;9792:34;9788:1;9783:3;9779:11;9772:55;9858:13;9853:2;9848:3;9844:12;9837:35;9898:2;9893:3;9889:12;9882:19;;9678:229;;;:::o;9913:382::-;;10076:67;10140:2;10135:3;10076:67;:::i;:::-;10069:74;;10173:34;10169:1;10164:3;10160:11;10153:55;10239:20;10234:2;10229:3;10225:12;10218:42;10286:2;10281:3;10277:12;10270:19;;10059:236;;;:::o;10301:370::-;;10464:67;10528:2;10523:3;10464:67;:::i;:::-;10457:74;;10561:34;10557:1;10552:3;10548:11;10541:55;10627:8;10622:2;10617:3;10613:12;10606:30;10662:2;10657:3;10653:12;10646:19;;10447:224;;;:::o;10677:326::-;;10840:67;10904:2;10899:3;10840:67;:::i;:::-;10833:74;;10937:30;10933:1;10928:3;10924:11;10917:51;10994:2;10989:3;10985:12;10978:19;;10823:180;;;:::o;11009:368::-;;11172:67;11236:2;11231:3;11172:67;:::i;:::-;11165:74;;11269:34;11265:1;11260:3;11256:11;11249:55;11335:6;11330:2;11325:3;11321:12;11314:28;11368:2;11363:3;11359:12;11352:19;;11155:222;;;:::o;11383:323::-;;11546:67;11610:2;11605:3;11546:67;:::i;:::-;11539:74;;11643:27;11639:1;11634:3;11630:11;11623:48;11697:2;11692:3;11688:12;11681:19;;11529:177;;;:::o;11712:376::-;;11875:67;11939:2;11934:3;11875:67;:::i;:::-;11868:74;;11972:34;11968:1;11963:3;11959:11;11952:55;12038:14;12033:2;12028:3;12024:12;12017:36;12079:2;12074:3;12070:12;12063:19;;11858:230;;;:::o;12094:388::-;;12257:67;12321:2;12316:3;12257:67;:::i;:::-;12250:74;;12354:34;12350:1;12345:3;12341:11;12334:55;12420:26;12415:2;12410:3;12406:12;12399:48;12473:2;12468:3;12464:12;12457:19;;12240:242;;;:::o;12488:374::-;;12651:67;12715:2;12710:3;12651:67;:::i;:::-;12644:74;;12748:34;12744:1;12739:3;12735:11;12728:55;12814:12;12809:2;12804:3;12800:12;12793:34;12853:2;12848:3;12844:12;12837:19;;12634:228;;;:::o;12868:373::-;;13031:67;13095:2;13090:3;13031:67;:::i;:::-;13024:74;;13128:34;13124:1;13119:3;13115:11;13108:55;13194:11;13189:2;13184:3;13180:12;13173:33;13232:2;13227:3;13223:12;13216:19;;13014:227;;;:::o;13247:320::-;;13410:67;13474:2;13469:3;13410:67;:::i;:::-;13403:74;;13507:24;13503:1;13498:3;13494:11;13487:45;13558:2;13553:3;13549:12;13542:19;;13393:174;;;:::o;13573:368::-;;13736:67;13800:2;13795:3;13736:67;:::i;:::-;13729:74;;13833:34;13829:1;13824:3;13820:11;13813:55;13899:6;13894:2;13889:3;13885:12;13878:28;13932:2;13927:3;13923:12;13916:19;;13719:222;;;:::o;13947:330::-;;14110:67;14174:2;14169:3;14110:67;:::i;:::-;14103:74;;14207:34;14203:1;14198:3;14194:11;14187:55;14268:2;14263:3;14259:12;14252:19;;14093:184;;;:::o;14283:376::-;;14446:67;14510:2;14505:3;14446:67;:::i;:::-;14439:74;;14543:34;14539:1;14534:3;14530:11;14523:55;14609:14;14604:2;14599:3;14595:12;14588:36;14650:2;14645:3;14641:12;14634:19;;14429:230;;;:::o;14665:330::-;;14828:67;14892:2;14887:3;14828:67;:::i;:::-;14821:74;;14925:34;14921:1;14916:3;14912:11;14905:55;14986:2;14981:3;14977:12;14970:19;;14811:184;;;:::o;15001:320::-;;15164:67;15228:2;15223:3;15164:67;:::i;:::-;15157:74;;15261:24;15257:1;15252:3;15248:11;15241:45;15312:2;15307:3;15303:12;15296:19;;15147:174;;;:::o;15327:366::-;;15490:67;15554:2;15549:3;15490:67;:::i;:::-;15483:74;;15587:34;15583:1;15578:3;15574:11;15567:55;15653:4;15648:2;15643:3;15639:12;15632:26;15684:2;15679:3;15675:12;15668:19;;15473:220;;;:::o;15699:373::-;;15862:67;15926:2;15921:3;15862:67;:::i;:::-;15855:74;;15959:34;15955:1;15950:3;15946:11;15939:55;16025:11;16020:2;16015:3;16011:12;16004:33;16063:2;16058:3;16054:12;16047:19;;15845:227;;;:::o;16078:379::-;;16241:67;16305:2;16300:3;16241:67;:::i;:::-;16234:74;;16338:34;16334:1;16329:3;16325:11;16318:55;16404:17;16399:2;16394:3;16390:12;16383:39;16448:2;16443:3;16439:12;16432:19;;16224:233;;;:::o;16463:365::-;;16626:67;16690:2;16685:3;16626:67;:::i;:::-;16619:74;;16723:34;16719:1;16714:3;16710:11;16703:55;16789:3;16784:2;16779:3;16775:12;16768:25;16819:2;16814:3;16810:12;16803:19;;16609:219;;;:::o;16834:297::-;;17014:83;17095:1;17090:3;17014:83;:::i;:::-;17007:90;;17123:1;17118:3;17114:11;17107:18;;16997:134;;;:::o;17137:316::-;;17300:67;17364:2;17359:3;17300:67;:::i;:::-;17293:74;;17397:20;17393:1;17388:3;17384:11;17377:41;17444:2;17439:3;17435:12;17428:19;;17283:170;;;:::o;17459:381::-;;17622:67;17686:2;17681:3;17622:67;:::i;:::-;17615:74;;17719:34;17715:1;17710:3;17706:11;17699:55;17785:19;17780:2;17775:3;17771:12;17764:41;17831:2;17826:3;17822:12;17815:19;;17605:235;;;:::o;17846:376::-;;18009:67;18073:2;18068:3;18009:67;:::i;:::-;18002:74;;18106:34;18102:1;18097:3;18093:11;18086:55;18172:14;18167:2;18162:3;18158:12;18151:36;18213:2;18208:3;18204:12;18197:19;;17992:230;;;:::o;18228:325::-;;18391:67;18455:2;18450:3;18391:67;:::i;:::-;18384:74;;18488:29;18484:1;18479:3;18475:11;18468:50;18544:2;18539:3;18535:12;18528:19;;18374:179;;;:::o;18559:108::-;18636:24;18654:5;18636:24;:::i;:::-;18631:3;18624:37;18614:53;;:::o;18673:118::-;18760:24;18778:5;18760:24;:::i;:::-;18755:3;18748:37;18738:53;;:::o;18797:589::-;;19044:95;19135:3;19126:6;19044:95;:::i;:::-;19037:102;;19156:95;19247:3;19238:6;19156:95;:::i;:::-;19149:102;;19268:92;19356:3;19347:6;19268:92;:::i;:::-;19261:99;;19377:3;19370:10;;19026:360;;;;;;:::o;19392:379::-;;19598:147;19741:3;19598:147;:::i;:::-;19591:154;;19762:3;19755:10;;19580:191;;;:::o;19777:222::-;;19908:2;19897:9;19893:18;19885:26;;19921:71;19989:1;19978:9;19974:17;19965:6;19921:71;:::i;:::-;19875:124;;;;:::o;20005:640::-;;20238:3;20227:9;20223:19;20215:27;;20252:71;20320:1;20309:9;20305:17;20296:6;20252:71;:::i;:::-;20333:72;20401:2;20390:9;20386:18;20377:6;20333:72;:::i;:::-;20415;20483:2;20472:9;20468:18;20459:6;20415:72;:::i;:::-;20534:9;20528:4;20524:20;20519:2;20508:9;20504:18;20497:48;20562:76;20633:4;20624:6;20562:76;:::i;:::-;20554:84;;20205:440;;;;;;;:::o;20651:373::-;;20832:2;20821:9;20817:18;20809:26;;20881:9;20875:4;20871:20;20867:1;20856:9;20852:17;20845:47;20909:108;21012:4;21003:6;20909:108;:::i;:::-;20901:116;;20799:225;;;;:::o;21030:210::-;;21155:2;21144:9;21140:18;21132:26;;21168:65;21230:1;21219:9;21215:17;21206:6;21168:65;:::i;:::-;21122:118;;;;:::o;21246:313::-;;21397:2;21386:9;21382:18;21374:26;;21446:9;21440:4;21436:20;21432:1;21421:9;21417:17;21410:47;21474:78;21547:4;21538:6;21474:78;:::i;:::-;21466:86;;21364:195;;;;:::o;21565:419::-;;21769:2;21758:9;21754:18;21746:26;;21818:9;21812:4;21808:20;21804:1;21793:9;21789:17;21782:47;21846:131;21972:4;21846:131;:::i;:::-;21838:139;;21736:248;;;:::o;21990:419::-;;22194:2;22183:9;22179:18;22171:26;;22243:9;22237:4;22233:20;22229:1;22218:9;22214:17;22207:47;22271:131;22397:4;22271:131;:::i;:::-;22263:139;;22161:248;;;:::o;22415:419::-;;22619:2;22608:9;22604:18;22596:26;;22668:9;22662:4;22658:20;22654:1;22643:9;22639:17;22632:47;22696:131;22822:4;22696:131;:::i;:::-;22688:139;;22586:248;;;:::o;22840:419::-;;23044:2;23033:9;23029:18;23021:26;;23093:9;23087:4;23083:20;23079:1;23068:9;23064:17;23057:47;23121:131;23247:4;23121:131;:::i;:::-;23113:139;;23011:248;;;:::o;23265:419::-;;23469:2;23458:9;23454:18;23446:26;;23518:9;23512:4;23508:20;23504:1;23493:9;23489:17;23482:47;23546:131;23672:4;23546:131;:::i;:::-;23538:139;;23436:248;;;:::o;23690:419::-;;23894:2;23883:9;23879:18;23871:26;;23943:9;23937:4;23933:20;23929:1;23918:9;23914:17;23907:47;23971:131;24097:4;23971:131;:::i;:::-;23963:139;;23861:248;;;:::o;24115:419::-;;24319:2;24308:9;24304:18;24296:26;;24368:9;24362:4;24358:20;24354:1;24343:9;24339:17;24332:47;24396:131;24522:4;24396:131;:::i;:::-;24388:139;;24286:248;;;:::o;24540:419::-;;24744:2;24733:9;24729:18;24721:26;;24793:9;24787:4;24783:20;24779:1;24768:9;24764:17;24757:47;24821:131;24947:4;24821:131;:::i;:::-;24813:139;;24711:248;;;:::o;24965:419::-;;25169:2;25158:9;25154:18;25146:26;;25218:9;25212:4;25208:20;25204:1;25193:9;25189:17;25182:47;25246:131;25372:4;25246:131;:::i;:::-;25238:139;;25136:248;;;:::o;25390:419::-;;25594:2;25583:9;25579:18;25571:26;;25643:9;25637:4;25633:20;25629:1;25618:9;25614:17;25607:47;25671:131;25797:4;25671:131;:::i;:::-;25663:139;;25561:248;;;:::o;25815:419::-;;26019:2;26008:9;26004:18;25996:26;;26068:9;26062:4;26058:20;26054:1;26043:9;26039:17;26032:47;26096:131;26222:4;26096:131;:::i;:::-;26088:139;;25986:248;;;:::o;26240:419::-;;26444:2;26433:9;26429:18;26421:26;;26493:9;26487:4;26483:20;26479:1;26468:9;26464:17;26457:47;26521:131;26647:4;26521:131;:::i;:::-;26513:139;;26411:248;;;:::o;26665:419::-;;26869:2;26858:9;26854:18;26846:26;;26918:9;26912:4;26908:20;26904:1;26893:9;26889:17;26882:47;26946:131;27072:4;26946:131;:::i;:::-;26938:139;;26836:248;;;:::o;27090:419::-;;27294:2;27283:9;27279:18;27271:26;;27343:9;27337:4;27333:20;27329:1;27318:9;27314:17;27307:47;27371:131;27497:4;27371:131;:::i;:::-;27363:139;;27261:248;;;:::o;27515:419::-;;27719:2;27708:9;27704:18;27696:26;;27768:9;27762:4;27758:20;27754:1;27743:9;27739:17;27732:47;27796:131;27922:4;27796:131;:::i;:::-;27788:139;;27686:248;;;:::o;27940:419::-;;28144:2;28133:9;28129:18;28121:26;;28193:9;28187:4;28183:20;28179:1;28168:9;28164:17;28157:47;28221:131;28347:4;28221:131;:::i;:::-;28213:139;;28111:248;;;:::o;28365:419::-;;28569:2;28558:9;28554:18;28546:26;;28618:9;28612:4;28608:20;28604:1;28593:9;28589:17;28582:47;28646:131;28772:4;28646:131;:::i;:::-;28638:139;;28536:248;;;:::o;28790:419::-;;28994:2;28983:9;28979:18;28971:26;;29043:9;29037:4;29033:20;29029:1;29018:9;29014:17;29007:47;29071:131;29197:4;29071:131;:::i;:::-;29063:139;;28961:248;;;:::o;29215:419::-;;29419:2;29408:9;29404:18;29396:26;;29468:9;29462:4;29458:20;29454:1;29443:9;29439:17;29432:47;29496:131;29622:4;29496:131;:::i;:::-;29488:139;;29386:248;;;:::o;29640:419::-;;29844:2;29833:9;29829:18;29821:26;;29893:9;29887:4;29883:20;29879:1;29868:9;29864:17;29857:47;29921:131;30047:4;29921:131;:::i;:::-;29913:139;;29811:248;;;:::o;30065:419::-;;30269:2;30258:9;30254:18;30246:26;;30318:9;30312:4;30308:20;30304:1;30293:9;30289:17;30282:47;30346:131;30472:4;30346:131;:::i;:::-;30338:139;;30236:248;;;:::o;30490:419::-;;30694:2;30683:9;30679:18;30671:26;;30743:9;30737:4;30733:20;30729:1;30718:9;30714:17;30707:47;30771:131;30897:4;30771:131;:::i;:::-;30763:139;;30661:248;;;:::o;30915:419::-;;31119:2;31108:9;31104:18;31096:26;;31168:9;31162:4;31158:20;31154:1;31143:9;31139:17;31132:47;31196:131;31322:4;31196:131;:::i;:::-;31188:139;;31086:248;;;:::o;31340:419::-;;31544:2;31533:9;31529:18;31521:26;;31593:9;31587:4;31583:20;31579:1;31568:9;31564:17;31557:47;31621:131;31747:4;31621:131;:::i;:::-;31613:139;;31511:248;;;:::o;31765:222::-;;31896:2;31885:9;31881:18;31873:26;;31909:71;31977:1;31966:9;31962:17;31953:6;31909:71;:::i;:::-;31863:124;;;;:::o;31993:283::-;;32059:2;32053:9;32043:19;;32101:4;32093:6;32089:17;32208:6;32196:10;32193:22;32172:18;32160:10;32157:34;32154:62;32151:2;;;32219:18;;:::i;:::-;32151:2;32259:10;32255:2;32248:22;32033:243;;;;:::o;32282:331::-;;32433:18;32425:6;32422:30;32419:2;;;32455:18;;:::i;:::-;32419:2;32540:4;32536:9;32529:4;32521:6;32517:17;32513:33;32505:41;;32601:4;32595;32591:15;32583:23;;32348:265;;;:::o;32619:332::-;;32771:18;32763:6;32760:30;32757:2;;;32793:18;;:::i;:::-;32757:2;32878:4;32874:9;32867:4;32859:6;32855:17;32851:33;32843:41;;32939:4;32933;32929:15;32921:23;;32686:265;;;:::o;32957:132::-;;33047:3;33039:11;;33077:4;33072:3;33068:14;33060:22;;33029:60;;;:::o;33095:141::-;;33167:3;33159:11;;33190:3;33187:1;33180:14;33224:4;33221:1;33211:18;33203:26;;33149:87;;;:::o;33242:114::-;;33343:5;33337:12;33327:22;;33316:40;;;:::o;33362:98::-;;33447:5;33441:12;33431:22;;33420:40;;;:::o;33466:99::-;;33552:5;33546:12;33536:22;;33525:40;;;:::o;33571:113::-;;33673:4;33668:3;33664:14;33656:22;;33646:38;;;:::o;33690:184::-;;33823:6;33818:3;33811:19;33863:4;33858:3;33854:14;33839:29;;33801:73;;;;:::o;33880:168::-;;33997:6;33992:3;33985:19;34037:4;34032:3;34028:14;34013:29;;33975:73;;;;:::o;34054:147::-;;34192:3;34177:18;;34167:34;;;;:::o;34207:169::-;;34325:6;34320:3;34313:19;34365:4;34360:3;34356:14;34341:29;;34303:73;;;;:::o;34382:148::-;;34521:3;34506:18;;34496:34;;;;:::o;34536:305::-;;34595:20;34613:1;34595:20;:::i;:::-;34590:25;;34629:20;34647:1;34629:20;:::i;:::-;34624:25;;34783:1;34715:66;34711:74;34708:1;34705:81;34702:2;;;34789:18;;:::i;:::-;34702:2;34833:1;34830;34826:9;34819:16;;34580:261;;;;:::o;34847:185::-;;34904:20;34922:1;34904:20;:::i;:::-;34899:25;;34938:20;34956:1;34938:20;:::i;:::-;34933:25;;34977:1;34967:2;;34982:18;;:::i;:::-;34967:2;35024:1;35021;35017:9;35012:14;;34889:143;;;;:::o;35038:348::-;;35101:20;35119:1;35101:20;:::i;:::-;35096:25;;35135:20;35153:1;35135:20;:::i;:::-;35130:25;;35323:1;35255:66;35251:74;35248:1;35245:81;35240:1;35233:9;35226:17;35222:105;35219:2;;;35330:18;;:::i;:::-;35219:2;35378:1;35375;35371:9;35360:20;;35086:300;;;;:::o;35392:191::-;;35452:20;35470:1;35452:20;:::i;:::-;35447:25;;35486:20;35504:1;35486:20;:::i;:::-;35481:25;;35525:1;35522;35519:8;35516:2;;;35530:18;;:::i;:::-;35516:2;35575:1;35572;35568:9;35560:17;;35437:146;;;;:::o;35589:96::-;;35655:24;35673:5;35655:24;:::i;:::-;35644:35;;35634:51;;;:::o;35691:90::-;;35768:5;35761:13;35754:21;35743:32;;35733:48;;;:::o;35787:149::-;;35863:66;35856:5;35852:78;35841:89;;35831:105;;;:::o;35942:126::-;;36019:42;36012:5;36008:54;35997:65;;35987:81;;;:::o;36074:77::-;;36140:5;36129:16;;36119:32;;;:::o;36157:154::-;36241:6;36236:3;36231;36218:30;36303:1;36294:6;36289:3;36285:16;36278:27;36208:103;;;:::o;36317:307::-;36385:1;36395:113;36409:6;36406:1;36403:13;36395:113;;;36494:1;36489:3;36485:11;36479:18;36475:1;36470:3;36466:11;36459:39;36431:2;36428:1;36424:10;36419:15;;36395:113;;;36526:6;36523:1;36520:13;36517:2;;;36606:1;36597:6;36592:3;36588:16;36581:27;36517:2;36366:258;;;;:::o;36630:320::-;;36711:1;36705:4;36701:12;36691:22;;36758:1;36752:4;36748:12;36779:18;36769:2;;36835:4;36827:6;36823:17;36813:27;;36769:2;36897;36889:6;36886:14;36866:18;36863:38;36860:2;;;36916:18;;:::i;:::-;36860:2;36681:269;;;;:::o;36956:233::-;;37018:24;37036:5;37018:24;:::i;:::-;37009:33;;37064:66;37057:5;37054:77;37051:2;;;37134:18;;:::i;:::-;37051:2;37181:1;37174:5;37170:13;37163:20;;36999:190;;;:::o;37195:176::-;;37244:20;37262:1;37244:20;:::i;:::-;37239:25;;37278:20;37296:1;37278:20;:::i;:::-;37273:25;;37317:1;37307:2;;37322:18;;:::i;:::-;37307:2;37363:1;37360;37356:9;37351:14;;37229:142;;;;:::o;37377:180::-;37425:77;37422:1;37415:88;37522:4;37519:1;37512:15;37546:4;37543:1;37536:15;37563:180;37611:77;37608:1;37601:88;37708:4;37705:1;37698:15;37732:4;37729:1;37722:15;37749:180;37797:77;37794:1;37787:88;37894:4;37891:1;37884:15;37918:4;37915:1;37908:15;37935:180;37983:77;37980:1;37973:88;38080:4;38077:1;38070:15;38104:4;38101:1;38094:15;38121:102;;38213:2;38209:7;38204:2;38197:5;38193:14;38189:28;38179:38;;38169:54;;;:::o;38229:122::-;38302:24;38320:5;38302:24;:::i;:::-;38295:5;38292:35;38282:2;;38341:1;38338;38331:12;38282:2;38272:79;:::o;38357:116::-;38427:21;38442:5;38427:21;:::i;:::-;38420:5;38417:32;38407:2;;38463:1;38460;38453:12;38407:2;38397:76;:::o;38479:120::-;38551:23;38568:5;38551:23;:::i;:::-;38544:5;38541:34;38531:2;;38589:1;38586;38579:12;38531:2;38521:78;:::o;38605:122::-;38678:24;38696:5;38678:24;:::i;:::-;38671:5;38668:35;38658:2;;38717:1;38714;38707:12;38658:2;38648:79;:::o

Swarm Source

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