ETH Price: $2,414.60 (+0.53%)

Token

Enchanted Golems Rock Society (EGRS)
 

Overview

Max Total Supply

20 EGRS

Holders

14

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
limpeh.eth
Balance
1 EGRS
0x654d556ab8104da43aba8ef8592691967d7f1c28
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:
EnchantedGolemsRockSociety

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-10-22
*/

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



pragma solidity ^0.8.0;

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

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

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

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

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

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



pragma solidity ^0.8.0;

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

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

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



pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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



pragma solidity ^0.8.0;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    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/IERC721Receiver.sol



pragma solidity ^0.8.0;

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

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



pragma solidity ^0.8.0;

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

// File: @openzeppelin/contracts/token/ERC1155/IERC1155.sol



pragma solidity ^0.8.0;


/**
 * @dev Required interface of an ERC1155 compliant contract, as defined in the
 * https://eips.ethereum.org/EIPS/eip-1155[EIP].
 *
 * _Available since v3.1._
 */
interface IERC1155 is IERC165 {
    /**
     * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`.
     */
    event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);

    /**
     * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all
     * transfers.
     */
    event TransferBatch(
        address indexed operator,
        address indexed from,
        address indexed to,
        uint256[] ids,
        uint256[] values
    );

    /**
     * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to
     * `approved`.
     */
    event ApprovalForAll(address indexed account, address indexed operator, bool approved);

    /**
     * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI.
     *
     * If an {URI} event was emitted for `id`, the standard
     * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value
     * returned by {IERC1155MetadataURI-uri}.
     */
    event URI(string value, uint256 indexed id);

    /**
     * @dev Returns the amount of tokens of token type `id` owned by `account`.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function balanceOf(address account, uint256 id) external view returns (uint256);

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}.
     *
     * Requirements:
     *
     * - `accounts` and `ids` must have the same length.
     */
    function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids)
        external
        view
        returns (uint256[] memory);

    /**
     * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`,
     *
     * Emits an {ApprovalForAll} event.
     *
     * Requirements:
     *
     * - `operator` cannot be the caller.
     */
    function setApprovalForAll(address operator, bool approved) external;

    /**
     * @dev Returns true if `operator` is approved to transfer ``account``'s tokens.
     *
     * See {setApprovalForAll}.
     */
    function isApprovedForAll(address account, address operator) external view returns (bool);

    /**
     * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}.
     * - `from` must have a balance of tokens of type `id` of at least `amount`.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes calldata data
    ) external;

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}.
     *
     * Emits a {TransferBatch} event.
     *
     * Requirements:
     *
     * - `ids` and `amounts` must have the same length.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
     * acceptance magic value.
     */
    function safeBatchTransferFrom(
        address from,
        address to,
        uint256[] calldata ids,
        uint256[] calldata amounts,
        bytes calldata data
    ) external;
}

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



pragma solidity ^0.8.0;


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

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



pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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

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

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

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

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



pragma solidity ^0.8.0;


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

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

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

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



pragma solidity ^0.8.0;


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

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

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

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



pragma solidity ^0.8.0;








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

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

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

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

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

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

        _transfer(from, to, tokenId);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _beforeTokenTransfer(from, to, tokenId);

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

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

        emit Transfer(from, to, tokenId);
    }

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

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

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

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



pragma solidity ^0.8.0;



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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// File: EnchantedGolemsRockSociety.sol



pragma solidity ^0.8.0;




contract EnchantedGolemsRockSociety is ERC721Enumerable, Ownable {
    using Address for address;
    using Strings for uint256;
    
    string public baseURI = "";
    string public ipfsBaseURI = "";
    mapping (uint256 => string) public tokenIdToIpfsHash;
    IERC1155 public WhitelistContract;
    uint256 public constant MAX_SUPPLY = 10000;
    uint256 public constant MAX_PER_TX = 15;
    
    bool public ipfsLocked = false;
    bool public manualMintDisabled = false;
    bool public publicSaleStarted = false;
    bool public presaleEnded = false;
    
    uint256 public mintedByOwner = 0;
    uint256 public constant RESERVED_FOR_OWNER = 160;
    
    /**
     * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.
     */
    constructor(string memory _uri, address _whitelist)
        ERC721("Enchanted Golems Rock Society", "EGRS")
    {
        baseURI = _uri;
        WhitelistContract = IERC1155(_whitelist);
    }
    
    /**
     * ------------ METADATA ------------ 
     */

    /**
     * @dev Gets base metadata URI
     */
    function _baseURI() internal view override returns (string memory) {
        return baseURI;
    }
    
    /**
     * @dev Gets ipfs metadata URI
     */
    function _ipfsBaseURI() internal view returns (string memory) {
        return ipfsBaseURI;
    }
    
    /**
     * @dev Sets base metadata URI, callable by owner
     */
    function setBaseUri(string memory _uri) external onlyOwner {
        baseURI = _uri;
    }
    
    /**
     * @dev Sets ipfs metadata URI, callable by owner
     */
    function setIpfsBaseUri(string memory _uri) external onlyOwner {
        require(ipfsLocked == false);
        ipfsBaseURI = _uri;
    }
    
    /**
     * @dev Lock ipfs metadata URI and hashes, callable by owner
     */
    function lockIpfsMetadata() external onlyOwner {
        require(ipfsLocked == false);
        ipfsLocked = true;
    }
    
    /**
     * @dev Set manual ipfs hash for token, callable by owner
     */
    function setIpfsHash(uint256 tokenId, string memory hash) external onlyOwner {
        require(ipfsLocked == false);
        tokenIdToIpfsHash[tokenId] = hash;
    }
    
    /**
     * @dev See {IERC721Metadata-tokenURI}.
     */
    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        require(_exists(tokenId), "ERC721URIStorage: URI query for nonexistent token");
        
        string memory base = _baseURI();
        string memory ipfsBase = _ipfsBaseURI();
        
        string memory ipfsHash = tokenIdToIpfsHash[tokenId];
        
        if (bytes(ipfsBase).length == 0) {
            return string(abi.encodePacked(base, tokenId.toString()));
        } else {
            if (bytes(ipfsHash).length == 0) {
                return string(abi.encodePacked(ipfsBase, tokenId.toString()));
            } else {
                return string(abi.encodePacked(ipfsBase, ipfsHash));
            }
        }
    }
    
    /**
     * ------------ SALE AND PRESALE ------------ 
     */
     
    /**
     * @dev Starts public sale, callable by owner
     */
    function startPublicSale() external onlyOwner {
        publicSaleStarted = true;
    }
    
    /**
     * @dev Ends the presale, callable by owner
     */
    function endPresale() external onlyOwner {
        presaleEnded = true;
    }
    
    /**
     * @dev Sets the whitelist contract applicable during presale, callable by owner
     */
    function setWhitelistContract(address _contract) external onlyOwner {
        WhitelistContract = IERC1155(_contract);
    }
     
    /**
     * ------------ MINTING ------------ 
     */
    
    /**
     * @dev Mints `count` tokens to `to` address, internal
     */
    function mintInternal(address to, uint256 count) internal {
        for (uint256 i = 0; i < count; i++) {
            _mint(to, totalSupply());
        }
    }
    
    /**
     * @dev Disables manual minting by owner, callable by owner
     */
    function disableManualMint() public onlyOwner {
        manualMintDisabled = true;
    }
    
    /**
     * @dev Manual minting by owner, callable by owner
     */
    function mintOwner(address[] calldata owners, uint256[] calldata counts) public onlyOwner {
        require(!manualMintDisabled, "Not allowed");
        require(owners.length == counts.length, "Bad length");
         
        for (uint256 i = 0; i < counts.length; i++) {
            require(totalSupply() + counts[i] <= MAX_SUPPLY, "Supply exceeded");
            
            mintInternal(owners[i], counts[i]);
            mintedByOwner += counts[i];
        }
    }
    
    /**
     * @dev Gets the price tier from token count
     */
    function getPrice(uint256 count) public pure returns (uint256) {
        if (count <= 3) {
            return 0.0678 ether;
        } else if (count <= 8) {
            return 0.0654 ether;
        } else {
            return 0.0612 ether;
        }
    }
    
    /**
     * @dev Public minting
     */
    function mint(uint256 count) public payable{
        require(publicSaleStarted, "Sale not started");
        require(count <= MAX_PER_TX, "Too many tokens");
        require(msg.value == count * getPrice(count), "Ether value incorrect");
        require((totalSupply() + (RESERVED_FOR_OWNER - mintedByOwner) + count) <= MAX_SUPPLY, "Supply exceeded");
        
        if (!presaleEnded) {
            require(WhitelistContract.balanceOf(msg.sender, 0) > 0, "You need to be whitelisted to mint during presale");
        }
        
        mintInternal(msg.sender, count);
    }
    
    /**
     * @dev Withdraw ether from this contract, callable by owner
     */
    function withdraw() external onlyOwner {
        uint256 balance = address(this).balance;
        payable(msg.sender).transfer(balance);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_uri","type":"string"},{"internalType":"address","name":"_whitelist","type":"address"}],"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":[],"name":"MAX_PER_TX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"RESERVED_FOR_OWNER","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WhitelistContract","outputs":[{"internalType":"contract IERC1155","name":"","type":"address"}],"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":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableManualMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"endPresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"count","type":"uint256"}],"name":"getPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"ipfsBaseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ipfsLocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"lockIpfsMetadata","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualMintDisabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"count","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address[]","name":"owners","type":"address[]"},{"internalType":"uint256[]","name":"counts","type":"uint256[]"}],"name":"mintOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"mintedByOwner","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presaleEnded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicSaleStarted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uri","type":"string"}],"name":"setBaseUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uri","type":"string"}],"name":"setIpfsBaseUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"string","name":"hash","type":"string"}],"name":"setIpfsHash","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_contract","type":"address"}],"name":"setWhitelistContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startPublicSale","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":"uint256","name":"","type":"uint256"}],"name":"tokenIdToIpfsHash","outputs":[{"internalType":"string","name":"","type":"string"}],"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":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405260405180602001604052806000815250600b90805190602001906200002b929190620002e8565b5060405180602001604052806000815250600c908051906020019062000053929190620002e8565b506000600e60146101000a81548160ff0219169083151502179055506000600e60156101000a81548160ff0219169083151502179055506000600e60166101000a81548160ff0219169083151502179055506000600e60176101000a81548160ff0219169083151502179055506000600f55348015620000d257600080fd5b5060405162005551380380620055518339818101604052810190620000f891906200042d565b6040518060400160405280601d81526020017f456e6368616e74656420476f6c656d7320526f636b20536f63696574790000008152506040518060400160405280600481526020017f454752530000000000000000000000000000000000000000000000000000000081525081600090805190602001906200017c929190620002e8565b50806001908051906020019062000195929190620002e8565b505050620001b8620001ac6200021a60201b60201c565b6200022260201b60201c565b81600b9080519060200190620001d0929190620002e8565b5080600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505062000665565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620002f6906200055c565b90600052602060002090601f0160209004810192826200031a576000855562000366565b82601f106200033557805160ff191683800117855562000366565b8280016001018555821562000366579182015b828111156200036557825182559160200191906001019062000348565b5b50905062000375919062000379565b5090565b5b80821115620003945760008160009055506001016200037a565b5090565b6000620003af620003a984620004bc565b62000493565b905082815260208101848484011115620003ce57620003cd6200062b565b5b620003db84828562000526565b509392505050565b600081519050620003f4816200064b565b92915050565b600082601f83011262000412576200041162000626565b5b81516200042484826020860162000398565b91505092915050565b6000806040838503121562000447576200044662000635565b5b600083015167ffffffffffffffff81111562000468576200046762000630565b5b6200047685828601620003fa565b92505060206200048985828601620003e3565b9150509250929050565b60006200049f620004b2565b9050620004ad828262000592565b919050565b6000604051905090565b600067ffffffffffffffff821115620004da57620004d9620005f7565b5b620004e5826200063a565b9050602081019050919050565b6000620004ff8262000506565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60005b838110156200054657808201518184015260208101905062000529565b8381111562000556576000848401525b50505050565b600060028204905060018216806200057557607f821691505b602082108114156200058c576200058b620005c8565b5b50919050565b6200059d826200063a565b810181811067ffffffffffffffff82111715620005bf57620005be620005f7565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b6200065681620004f2565b81146200066257600080fd5b50565b614edc80620006756000396000f3fe60806040526004361061025c5760003560e01c806370a0823111610144578063bc9c2474116100b6578063e75722301161007a578063e75722301461087b578063e985e9c5146108b8578063f0c5bbaa146108f5578063f0fb21b014610932578063f2fde38b1461095d578063f43a22dc146109865761025c565b8063bc9c247414610794578063c6979c0a146107bf578063c87b56dd146107ea578063d8fa316814610827578063e580b2b0146108505761025c565b8063a0bcfc7f11610108578063a0bcfc7f146106ac578063a22cb465146106d5578063a2e91477146106fe578063a43be57b14610729578063aec621b614610740578063b88d4fde1461076b5761025c565b806370a08231146105e6578063715018a6146106235780638da5cb5b1461063a57806395d89b4114610665578063a0712d68146106905761025c565b806312f26140116101dd57806332cb6b0c116101a157806332cb6b0c146104d65780633ccfd60b1461050157806342842e0e146105185780634f6ccce7146105415780636352211e1461057e5780636c0360eb146105bb5761025c565b806312f26140146103f357806318160ddd1461041c5780631fb3060f1461044757806323b872dd146104705780632f745c59146104995761025c565b8063095ea7b311610224578063095ea7b31461035a5780630af90ea6146103835780630c1c972a146103ae5780630f52b76e146103c5578063123ac9a9146103dc5761025c565b806301ffc9a7146102615780630385c0de1461029e578063067b22ad146102c757806306fdde03146102f2578063081812fc1461031d575b600080fd5b34801561026d57600080fd5b5061028860048036038101906102839190613913565b6109b1565b6040516102959190613f79565b60405180910390f35b3480156102aa57600080fd5b506102c560048036038101906102c09190613a10565b610a2b565b005b3480156102d357600080fd5b506102dc610af3565b6040516102e99190613f79565b60405180910390f35b3480156102fe57600080fd5b50610307610b06565b6040516103149190613faf565b60405180910390f35b34801561032957600080fd5b50610344600480360381019061033f91906139b6565b610b98565b6040516103519190613ee9565b60405180910390f35b34801561036657600080fd5b50610381600480360381019061037c9190613852565b610c1d565b005b34801561038f57600080fd5b50610398610d35565b6040516103a59190613f79565b60405180910390f35b3480156103ba57600080fd5b506103c3610d48565b005b3480156103d157600080fd5b506103da610de1565b005b3480156103e857600080fd5b506103f1610e7a565b005b3480156103ff57600080fd5b5061041a600480360381019061041591906136cf565b610f33565b005b34801561042857600080fd5b50610431610ff3565b60405161043e91906142f1565b60405180910390f35b34801561045357600080fd5b5061046e6004803603810190610469919061396d565b611000565b005b34801561047c57600080fd5b506104976004803603810190610492919061373c565b6110b6565b005b3480156104a557600080fd5b506104c060048036038101906104bb9190613852565b611116565b6040516104cd91906142f1565b60405180910390f35b3480156104e257600080fd5b506104eb6111bb565b6040516104f891906142f1565b60405180910390f35b34801561050d57600080fd5b506105166111c1565b005b34801561052457600080fd5b5061053f600480360381019061053a919061373c565b61128c565b005b34801561054d57600080fd5b50610568600480360381019061056391906139b6565b6112ac565b60405161057591906142f1565b60405180910390f35b34801561058a57600080fd5b506105a560048036038101906105a091906139b6565b61131d565b6040516105b29190613ee9565b60405180910390f35b3480156105c757600080fd5b506105d06113cf565b6040516105dd9190613faf565b60405180910390f35b3480156105f257600080fd5b5061060d600480360381019061060891906136cf565b61145d565b60405161061a91906142f1565b60405180910390f35b34801561062f57600080fd5b50610638611515565b005b34801561064657600080fd5b5061064f61159d565b60405161065c9190613ee9565b60405180910390f35b34801561067157600080fd5b5061067a6115c7565b6040516106879190613faf565b60405180910390f35b6106aa60048036038101906106a591906139b6565b611659565b005b3480156106b857600080fd5b506106d360048036038101906106ce919061396d565b6118c2565b005b3480156106e157600080fd5b506106fc60048036038101906106f79190613812565b611958565b005b34801561070a57600080fd5b50610713611ad9565b6040516107209190613f79565b60405180910390f35b34801561073557600080fd5b5061073e611aec565b005b34801561074c57600080fd5b50610755611b85565b60405161076291906142f1565b60405180910390f35b34801561077757600080fd5b50610792600480360381019061078d919061378f565b611b8a565b005b3480156107a057600080fd5b506107a9611bec565b6040516107b691906142f1565b60405180910390f35b3480156107cb57600080fd5b506107d4611bf2565b6040516107e19190613f94565b60405180910390f35b3480156107f657600080fd5b50610811600480360381019061080c91906139b6565b611c18565b60405161081e9190613faf565b60405180910390f35b34801561083357600080fd5b5061084e60048036038101906108499190613892565b611dc3565b005b34801561085c57600080fd5b50610865611feb565b6040516108729190613f79565b60405180910390f35b34801561088757600080fd5b506108a2600480360381019061089d91906139b6565b611ffe565b6040516108af91906142f1565b60405180910390f35b3480156108c457600080fd5b506108df60048036038101906108da91906136fc565b61203e565b6040516108ec9190613f79565b60405180910390f35b34801561090157600080fd5b5061091c600480360381019061091791906139b6565b6120d2565b6040516109299190613faf565b60405180910390f35b34801561093e57600080fd5b50610947612172565b6040516109549190613faf565b60405180910390f35b34801561096957600080fd5b50610984600480360381019061097f91906136cf565b612200565b005b34801561099257600080fd5b5061099b6122f8565b6040516109a891906142f1565b60405180910390f35b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a245750610a23826122fd565b5b9050919050565b610a336123df565b73ffffffffffffffffffffffffffffffffffffffff16610a5161159d565b73ffffffffffffffffffffffffffffffffffffffff1614610aa7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9e90614211565b60405180910390fd5b60001515600e60149054906101000a900460ff16151514610ac757600080fd5b80600d60008481526020019081526020016000209080519060200190610aee929190613422565b505050565b600e60159054906101000a900460ff1681565b606060008054610b15906145e9565b80601f0160208091040260200160405190810160405280929190818152602001828054610b41906145e9565b8015610b8e5780601f10610b6357610100808354040283529160200191610b8e565b820191906000526020600020905b815481529060010190602001808311610b7157829003601f168201915b5050505050905090565b6000610ba3826123e7565b610be2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd9906141b1565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610c288261131d565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9090614251565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610cb86123df565b73ffffffffffffffffffffffffffffffffffffffff161480610ce75750610ce681610ce16123df565b61203e565b5b610d26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1d90614111565b60405180910390fd5b610d308383612453565b505050565b600e60149054906101000a900460ff1681565b610d506123df565b73ffffffffffffffffffffffffffffffffffffffff16610d6e61159d565b73ffffffffffffffffffffffffffffffffffffffff1614610dc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dbb90614211565b60405180910390fd5b6001600e60166101000a81548160ff021916908315150217905550565b610de96123df565b73ffffffffffffffffffffffffffffffffffffffff16610e0761159d565b73ffffffffffffffffffffffffffffffffffffffff1614610e5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5490614211565b60405180910390fd5b6001600e60156101000a81548160ff021916908315150217905550565b610e826123df565b73ffffffffffffffffffffffffffffffffffffffff16610ea061159d565b73ffffffffffffffffffffffffffffffffffffffff1614610ef6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eed90614211565b60405180910390fd5b60001515600e60149054906101000a900460ff16151514610f1657600080fd5b6001600e60146101000a81548160ff021916908315150217905550565b610f3b6123df565b73ffffffffffffffffffffffffffffffffffffffff16610f5961159d565b73ffffffffffffffffffffffffffffffffffffffff1614610faf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa690614211565b60405180910390fd5b80600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600880549050905090565b6110086123df565b73ffffffffffffffffffffffffffffffffffffffff1661102661159d565b73ffffffffffffffffffffffffffffffffffffffff161461107c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107390614211565b60405180910390fd5b60001515600e60149054906101000a900460ff1615151461109c57600080fd5b80600c90805190602001906110b2929190613422565b5050565b6110c76110c16123df565b8261250c565b611106576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110fd90614271565b60405180910390fd5b6111118383836125ea565b505050565b60006111218361145d565b8210611162576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115990613fd1565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b61271081565b6111c96123df565b73ffffffffffffffffffffffffffffffffffffffff166111e761159d565b73ffffffffffffffffffffffffffffffffffffffff161461123d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123490614211565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611288573d6000803e3d6000fd5b5050565b6112a783838360405180602001604052806000815250611b8a565b505050565b60006112b6610ff3565b82106112f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ee90614291565b60405180910390fd5b6008828154811061130b5761130a614782565b5b90600052602060002001549050919050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156113c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113bd90614151565b60405180910390fd5b80915050919050565b600b80546113dc906145e9565b80601f0160208091040260200160405190810160405280929190818152602001828054611408906145e9565b80156114555780601f1061142a57610100808354040283529160200191611455565b820191906000526020600020905b81548152906001019060200180831161143857829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156114ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c590614131565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61151d6123df565b73ffffffffffffffffffffffffffffffffffffffff1661153b61159d565b73ffffffffffffffffffffffffffffffffffffffff1614611591576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158890614211565b60405180910390fd5b61159b6000612846565b565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546115d6906145e9565b80601f0160208091040260200160405190810160405280929190818152602001828054611602906145e9565b801561164f5780601f106116245761010080835404028352916020019161164f565b820191906000526020600020905b81548152906001019060200180831161163257829003601f168201915b5050505050905090565b600e60169054906101000a900460ff166116a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169f906140f1565b60405180910390fd5b600f8111156116ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e390614031565b60405180910390fd5b6116f581611ffe565b81611700919061445d565b3414611741576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611738906142d1565b60405180910390fd5b61271081600f5460a061175491906144b7565b61175c610ff3565b61176691906143d6565b61177091906143d6565b11156117b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a8906140d1565b60405180910390fd5b600e60179054906101000a900460ff166118b5576000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1662fdd58e3360006040518363ffffffff1660e01b8152600401611824929190613f50565b60206040518083038186803b15801561183c57600080fd5b505afa158015611850573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061187491906139e3565b116118b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ab906142b1565b60405180910390fd5b5b6118bf338261290c565b50565b6118ca6123df565b73ffffffffffffffffffffffffffffffffffffffff166118e861159d565b73ffffffffffffffffffffffffffffffffffffffff161461193e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193590614211565b60405180910390fd5b80600b9080519060200190611954929190613422565b5050565b6119606123df565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156119ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c590614091565b60405180910390fd5b80600560006119db6123df565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611a886123df565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611acd9190613f79565b60405180910390a35050565b600e60169054906101000a900460ff1681565b611af46123df565b73ffffffffffffffffffffffffffffffffffffffff16611b1261159d565b73ffffffffffffffffffffffffffffffffffffffff1614611b68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5f90614211565b60405180910390fd5b6001600e60176101000a81548160ff021916908315150217905550565b60a081565b611b9b611b956123df565b8361250c565b611bda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd190614271565b60405180910390fd5b611be684848484612940565b50505050565b600f5481565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6060611c23826123e7565b611c62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5990614191565b60405180910390fd5b6000611c6c61299c565b90506000611c78612a2e565b90506000600d60008681526020019081526020016000208054611c9a906145e9565b80601f0160208091040260200160405190810160405280929190818152602001828054611cc6906145e9565b8015611d135780601f10611ce857610100808354040283529160200191611d13565b820191906000526020600020905b815481529060010190602001808311611cf657829003601f168201915b50505050509050600082511415611d585782611d2e86612ac0565b604051602001611d3f929190613ec5565b6040516020818303038152906040529350505050611dbe565b600081511415611d965781611d6c86612ac0565b604051602001611d7d929190613ec5565b6040516020818303038152906040529350505050611dbe565b8181604051602001611da9929190613ec5565b60405160208183030381529060405293505050505b919050565b611dcb6123df565b73ffffffffffffffffffffffffffffffffffffffff16611de961159d565b73ffffffffffffffffffffffffffffffffffffffff1614611e3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3690614211565b60405180910390fd5b600e60159054906101000a900460ff1615611e8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e86906141f1565b60405180910390fd5b818190508484905014611ed7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ece906141d1565b60405180910390fd5b60005b82829050811015611fe457612710838383818110611efb57611efa614782565b5b90506020020135611f0a610ff3565b611f1491906143d6565b1115611f55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4c906140d1565b60405180910390fd5b611f9f858583818110611f6b57611f6a614782565b5b9050602002016020810190611f8091906136cf565b848484818110611f9357611f92614782565b5b9050602002013561290c565b828282818110611fb257611fb1614782565b5b90506020020135600f6000828254611fca91906143d6565b925050819055508080611fdc9061464c565b915050611eda565b5050505050565b600e60179054906101000a900460ff1681565b6000600382116120175766f0dfbda3c580009050612039565b6008821161202e5766e858f4184f80009050612039565b66d96d136441000090505b919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600d60205280600052604060002060009150905080546120f1906145e9565b80601f016020809104026020016040519081016040528092919081815260200182805461211d906145e9565b801561216a5780601f1061213f5761010080835404028352916020019161216a565b820191906000526020600020905b81548152906001019060200180831161214d57829003601f168201915b505050505081565b600c805461217f906145e9565b80601f01602080910402602001604051908101604052809291908181526020018280546121ab906145e9565b80156121f85780601f106121cd576101008083540402835291602001916121f8565b820191906000526020600020905b8154815290600101906020018083116121db57829003601f168201915b505050505081565b6122086123df565b73ffffffffffffffffffffffffffffffffffffffff1661222661159d565b73ffffffffffffffffffffffffffffffffffffffff161461227c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227390614211565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156122ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122e390614011565b60405180910390fd5b6122f581612846565b50565b600f81565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806123c857507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806123d857506123d782612c21565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166124c68361131d565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000612517826123e7565b612556576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254d906140b1565b60405180910390fd5b60006125618361131d565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806125d057508373ffffffffffffffffffffffffffffffffffffffff166125b884610b98565b73ffffffffffffffffffffffffffffffffffffffff16145b806125e157506125e0818561203e565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661260a8261131d565b73ffffffffffffffffffffffffffffffffffffffff1614612660576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161265790614231565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156126d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126c790614071565b60405180910390fd5b6126db838383612c8b565b6126e6600082612453565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461273691906144b7565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461278d91906143d6565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60005b8181101561293b5761292883612923610ff3565b612d9f565b80806129339061464c565b91505061290f565b505050565b61294b8484846125ea565b61295784848484612f6d565b612996576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161298d90613ff1565b60405180910390fd5b50505050565b6060600b80546129ab906145e9565b80601f01602080910402602001604051908101604052809291908181526020018280546129d7906145e9565b8015612a245780601f106129f957610100808354040283529160200191612a24565b820191906000526020600020905b815481529060010190602001808311612a0757829003601f168201915b5050505050905090565b6060600c8054612a3d906145e9565b80601f0160208091040260200160405190810160405280929190818152602001828054612a69906145e9565b8015612ab65780601f10612a8b57610100808354040283529160200191612ab6565b820191906000526020600020905b815481529060010190602001808311612a9957829003601f168201915b5050505050905090565b60606000821415612b08576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612c1c565b600082905060005b60008214612b3a578080612b239061464c565b915050600a82612b33919061442c565b9150612b10565b60008167ffffffffffffffff811115612b5657612b556147b1565b5b6040519080825280601f01601f191660200182016040528015612b885781602001600182028036833780820191505090505b5090505b60008514612c1557600182612ba191906144b7565b9150600a85612bb09190614695565b6030612bbc91906143d6565b60f81b818381518110612bd257612bd1614782565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612c0e919061442c565b9450612b8c565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612c96838383613104565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612cd957612cd481613109565b612d18565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612d1757612d168382613152565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612d5b57612d56816132bf565b612d9a565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612d9957612d988282613390565b5b5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612e0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e0690614171565b60405180910390fd5b612e18816123e7565b15612e58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e4f90614051565b60405180910390fd5b612e6460008383612c8b565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612eb491906143d6565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000612f8e8473ffffffffffffffffffffffffffffffffffffffff1661340f565b156130f7578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612fb76123df565b8786866040518563ffffffff1660e01b8152600401612fd99493929190613f04565b602060405180830381600087803b158015612ff357600080fd5b505af192505050801561302457506040513d601f19601f820116820180604052508101906130219190613940565b60015b6130a7573d8060008114613054576040519150601f19603f3d011682016040523d82523d6000602084013e613059565b606091505b5060008151141561309f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161309690613ff1565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506130fc565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161315f8461145d565b61316991906144b7565b905060006007600084815260200190815260200160002054905081811461324e576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506132d391906144b7565b905060006009600084815260200190815260200160002054905060006008838154811061330357613302614782565b5b90600052602060002001549050806008838154811061332557613324614782565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548061337457613373614753565b5b6001900381819060005260206000200160009055905550505050565b600061339b8361145d565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600080823b905060008111915050919050565b82805461342e906145e9565b90600052602060002090601f0160209004810192826134505760008555613497565b82601f1061346957805160ff1916838001178555613497565b82800160010185558215613497579182015b8281111561349657825182559160200191906001019061347b565b5b5090506134a491906134a8565b5090565b5b808211156134c15760008160009055506001016134a9565b5090565b60006134d86134d384614331565b61430c565b9050828152602081018484840111156134f4576134f36147ef565b5b6134ff8482856145a7565b509392505050565b600061351a61351584614362565b61430c565b905082815260208101848484011115613536576135356147ef565b5b6135418482856145a7565b509392505050565b60008135905061355881614e4a565b92915050565b60008083601f840112613574576135736147e5565b5b8235905067ffffffffffffffff811115613591576135906147e0565b5b6020830191508360208202830111156135ad576135ac6147ea565b5b9250929050565b60008083601f8401126135ca576135c96147e5565b5b8235905067ffffffffffffffff8111156135e7576135e66147e0565b5b602083019150836020820283011115613603576136026147ea565b5b9250929050565b60008135905061361981614e61565b92915050565b60008135905061362e81614e78565b92915050565b60008151905061364381614e78565b92915050565b600082601f83011261365e5761365d6147e5565b5b813561366e8482602086016134c5565b91505092915050565b600082601f83011261368c5761368b6147e5565b5b813561369c848260208601613507565b91505092915050565b6000813590506136b481614e8f565b92915050565b6000815190506136c981614e8f565b92915050565b6000602082840312156136e5576136e46147f9565b5b60006136f384828501613549565b91505092915050565b60008060408385031215613713576137126147f9565b5b600061372185828601613549565b925050602061373285828601613549565b9150509250929050565b600080600060608486031215613755576137546147f9565b5b600061376386828701613549565b935050602061377486828701613549565b9250506040613785868287016136a5565b9150509250925092565b600080600080608085870312156137a9576137a86147f9565b5b60006137b787828801613549565b94505060206137c887828801613549565b93505060406137d9878288016136a5565b925050606085013567ffffffffffffffff8111156137fa576137f96147f4565b5b61380687828801613649565b91505092959194509250565b60008060408385031215613829576138286147f9565b5b600061383785828601613549565b92505060206138488582860161360a565b9150509250929050565b60008060408385031215613869576138686147f9565b5b600061387785828601613549565b9250506020613888858286016136a5565b9150509250929050565b600080600080604085870312156138ac576138ab6147f9565b5b600085013567ffffffffffffffff8111156138ca576138c96147f4565b5b6138d68782880161355e565b9450945050602085013567ffffffffffffffff8111156138f9576138f86147f4565b5b613905878288016135b4565b925092505092959194509250565b600060208284031215613929576139286147f9565b5b60006139378482850161361f565b91505092915050565b600060208284031215613956576139556147f9565b5b600061396484828501613634565b91505092915050565b600060208284031215613983576139826147f9565b5b600082013567ffffffffffffffff8111156139a1576139a06147f4565b5b6139ad84828501613677565b91505092915050565b6000602082840312156139cc576139cb6147f9565b5b60006139da848285016136a5565b91505092915050565b6000602082840312156139f9576139f86147f9565b5b6000613a07848285016136ba565b91505092915050565b60008060408385031215613a2757613a266147f9565b5b6000613a35858286016136a5565b925050602083013567ffffffffffffffff811115613a5657613a556147f4565b5b613a6285828601613677565b9150509250929050565b613a75816144eb565b82525050565b613a84816144fd565b82525050565b6000613a9582614393565b613a9f81856143a9565b9350613aaf8185602086016145b6565b613ab8816147fe565b840191505092915050565b613acc8161455f565b82525050565b613adb81614571565b82525050565b6000613aec8261439e565b613af681856143ba565b9350613b068185602086016145b6565b613b0f816147fe565b840191505092915050565b6000613b258261439e565b613b2f81856143cb565b9350613b3f8185602086016145b6565b80840191505092915050565b6000613b58602b836143ba565b9150613b638261480f565b604082019050919050565b6000613b7b6032836143ba565b9150613b868261485e565b604082019050919050565b6000613b9e6026836143ba565b9150613ba9826148ad565b604082019050919050565b6000613bc1600f836143ba565b9150613bcc826148fc565b602082019050919050565b6000613be4601c836143ba565b9150613bef82614925565b602082019050919050565b6000613c076024836143ba565b9150613c128261494e565b604082019050919050565b6000613c2a6019836143ba565b9150613c358261499d565b602082019050919050565b6000613c4d602c836143ba565b9150613c58826149c6565b604082019050919050565b6000613c70600f836143ba565b9150613c7b82614a15565b602082019050919050565b6000613c936010836143ba565b9150613c9e82614a3e565b602082019050919050565b6000613cb66038836143ba565b9150613cc182614a67565b604082019050919050565b6000613cd9602a836143ba565b9150613ce482614ab6565b604082019050919050565b6000613cfc6029836143ba565b9150613d0782614b05565b604082019050919050565b6000613d1f6020836143ba565b9150613d2a82614b54565b602082019050919050565b6000613d426031836143ba565b9150613d4d82614b7d565b604082019050919050565b6000613d65602c836143ba565b9150613d7082614bcc565b604082019050919050565b6000613d88600a836143ba565b9150613d9382614c1b565b602082019050919050565b6000613dab600b836143ba565b9150613db682614c44565b602082019050919050565b6000613dce6020836143ba565b9150613dd982614c6d565b602082019050919050565b6000613df16029836143ba565b9150613dfc82614c96565b604082019050919050565b6000613e146021836143ba565b9150613e1f82614ce5565b604082019050919050565b6000613e376031836143ba565b9150613e4282614d34565b604082019050919050565b6000613e5a602c836143ba565b9150613e6582614d83565b604082019050919050565b6000613e7d6031836143ba565b9150613e8882614dd2565b604082019050919050565b6000613ea06015836143ba565b9150613eab82614e21565b602082019050919050565b613ebf81614555565b82525050565b6000613ed18285613b1a565b9150613edd8284613b1a565b91508190509392505050565b6000602082019050613efe6000830184613a6c565b92915050565b6000608082019050613f196000830187613a6c565b613f266020830186613a6c565b613f336040830185613eb6565b8181036060830152613f458184613a8a565b905095945050505050565b6000604082019050613f656000830185613a6c565b613f726020830184613ad2565b9392505050565b6000602082019050613f8e6000830184613a7b565b92915050565b6000602082019050613fa96000830184613ac3565b92915050565b60006020820190508181036000830152613fc98184613ae1565b905092915050565b60006020820190508181036000830152613fea81613b4b565b9050919050565b6000602082019050818103600083015261400a81613b6e565b9050919050565b6000602082019050818103600083015261402a81613b91565b9050919050565b6000602082019050818103600083015261404a81613bb4565b9050919050565b6000602082019050818103600083015261406a81613bd7565b9050919050565b6000602082019050818103600083015261408a81613bfa565b9050919050565b600060208201905081810360008301526140aa81613c1d565b9050919050565b600060208201905081810360008301526140ca81613c40565b9050919050565b600060208201905081810360008301526140ea81613c63565b9050919050565b6000602082019050818103600083015261410a81613c86565b9050919050565b6000602082019050818103600083015261412a81613ca9565b9050919050565b6000602082019050818103600083015261414a81613ccc565b9050919050565b6000602082019050818103600083015261416a81613cef565b9050919050565b6000602082019050818103600083015261418a81613d12565b9050919050565b600060208201905081810360008301526141aa81613d35565b9050919050565b600060208201905081810360008301526141ca81613d58565b9050919050565b600060208201905081810360008301526141ea81613d7b565b9050919050565b6000602082019050818103600083015261420a81613d9e565b9050919050565b6000602082019050818103600083015261422a81613dc1565b9050919050565b6000602082019050818103600083015261424a81613de4565b9050919050565b6000602082019050818103600083015261426a81613e07565b9050919050565b6000602082019050818103600083015261428a81613e2a565b9050919050565b600060208201905081810360008301526142aa81613e4d565b9050919050565b600060208201905081810360008301526142ca81613e70565b9050919050565b600060208201905081810360008301526142ea81613e93565b9050919050565b60006020820190506143066000830184613eb6565b92915050565b6000614316614327565b9050614322828261461b565b919050565b6000604051905090565b600067ffffffffffffffff82111561434c5761434b6147b1565b5b614355826147fe565b9050602081019050919050565b600067ffffffffffffffff82111561437d5761437c6147b1565b5b614386826147fe565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006143e182614555565b91506143ec83614555565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614421576144206146c6565b5b828201905092915050565b600061443782614555565b915061444283614555565b925082614452576144516146f5565b5b828204905092915050565b600061446882614555565b915061447383614555565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156144ac576144ab6146c6565b5b828202905092915050565b60006144c282614555565b91506144cd83614555565b9250828210156144e0576144df6146c6565b5b828203905092915050565b60006144f682614535565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600061456a82614583565b9050919050565b600061457c82614555565b9050919050565b600061458e82614595565b9050919050565b60006145a082614535565b9050919050565b82818337600083830152505050565b60005b838110156145d45780820151818401526020810190506145b9565b838111156145e3576000848401525b50505050565b6000600282049050600182168061460157607f821691505b6020821081141561461557614614614724565b5b50919050565b614624826147fe565b810181811067ffffffffffffffff82111715614643576146426147b1565b5b80604052505050565b600061465782614555565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561468a576146896146c6565b5b600182019050919050565b60006146a082614555565b91506146ab83614555565b9250826146bb576146ba6146f5565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f546f6f206d616e7920746f6b656e730000000000000000000000000000000000600082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f537570706c792065786365656465640000000000000000000000000000000000600082015250565b7f53616c65206e6f74207374617274656400000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f45524337323155524953746f726167653a2055524920717565727920666f722060008201527f6e6f6e6578697374656e7420746f6b656e000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f426164206c656e67746800000000000000000000000000000000000000000000600082015250565b7f4e6f7420616c6c6f776564000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f596f75206e65656420746f2062652077686974656c697374656420746f206d6960008201527f6e7420647572696e672070726573616c65000000000000000000000000000000602082015250565b7f45746865722076616c756520696e636f72726563740000000000000000000000600082015250565b614e53816144eb565b8114614e5e57600080fd5b50565b614e6a816144fd565b8114614e7557600080fd5b50565b614e8181614509565b8114614e8c57600080fd5b50565b614e9881614555565b8114614ea357600080fd5b5056fea264697066735822122090a6941c06a0d99bb57846b658e17f7d0897991b7774a4efc6481fd4a3019a3464736f6c6343000807003300000000000000000000000000000000000000000000000000000000000000400000000000000000000000007fe1355e9954abe013a36cbe40a820d31c7e7324000000000000000000000000000000000000000000000000000000000000002868747470733a2f2f6170692e6272696768746d696e6473676f6c656d732e636f6d2f746f6b656e2f000000000000000000000000000000000000000000000000

Deployed Bytecode

0x60806040526004361061025c5760003560e01c806370a0823111610144578063bc9c2474116100b6578063e75722301161007a578063e75722301461087b578063e985e9c5146108b8578063f0c5bbaa146108f5578063f0fb21b014610932578063f2fde38b1461095d578063f43a22dc146109865761025c565b8063bc9c247414610794578063c6979c0a146107bf578063c87b56dd146107ea578063d8fa316814610827578063e580b2b0146108505761025c565b8063a0bcfc7f11610108578063a0bcfc7f146106ac578063a22cb465146106d5578063a2e91477146106fe578063a43be57b14610729578063aec621b614610740578063b88d4fde1461076b5761025c565b806370a08231146105e6578063715018a6146106235780638da5cb5b1461063a57806395d89b4114610665578063a0712d68146106905761025c565b806312f26140116101dd57806332cb6b0c116101a157806332cb6b0c146104d65780633ccfd60b1461050157806342842e0e146105185780634f6ccce7146105415780636352211e1461057e5780636c0360eb146105bb5761025c565b806312f26140146103f357806318160ddd1461041c5780631fb3060f1461044757806323b872dd146104705780632f745c59146104995761025c565b8063095ea7b311610224578063095ea7b31461035a5780630af90ea6146103835780630c1c972a146103ae5780630f52b76e146103c5578063123ac9a9146103dc5761025c565b806301ffc9a7146102615780630385c0de1461029e578063067b22ad146102c757806306fdde03146102f2578063081812fc1461031d575b600080fd5b34801561026d57600080fd5b5061028860048036038101906102839190613913565b6109b1565b6040516102959190613f79565b60405180910390f35b3480156102aa57600080fd5b506102c560048036038101906102c09190613a10565b610a2b565b005b3480156102d357600080fd5b506102dc610af3565b6040516102e99190613f79565b60405180910390f35b3480156102fe57600080fd5b50610307610b06565b6040516103149190613faf565b60405180910390f35b34801561032957600080fd5b50610344600480360381019061033f91906139b6565b610b98565b6040516103519190613ee9565b60405180910390f35b34801561036657600080fd5b50610381600480360381019061037c9190613852565b610c1d565b005b34801561038f57600080fd5b50610398610d35565b6040516103a59190613f79565b60405180910390f35b3480156103ba57600080fd5b506103c3610d48565b005b3480156103d157600080fd5b506103da610de1565b005b3480156103e857600080fd5b506103f1610e7a565b005b3480156103ff57600080fd5b5061041a600480360381019061041591906136cf565b610f33565b005b34801561042857600080fd5b50610431610ff3565b60405161043e91906142f1565b60405180910390f35b34801561045357600080fd5b5061046e6004803603810190610469919061396d565b611000565b005b34801561047c57600080fd5b506104976004803603810190610492919061373c565b6110b6565b005b3480156104a557600080fd5b506104c060048036038101906104bb9190613852565b611116565b6040516104cd91906142f1565b60405180910390f35b3480156104e257600080fd5b506104eb6111bb565b6040516104f891906142f1565b60405180910390f35b34801561050d57600080fd5b506105166111c1565b005b34801561052457600080fd5b5061053f600480360381019061053a919061373c565b61128c565b005b34801561054d57600080fd5b50610568600480360381019061056391906139b6565b6112ac565b60405161057591906142f1565b60405180910390f35b34801561058a57600080fd5b506105a560048036038101906105a091906139b6565b61131d565b6040516105b29190613ee9565b60405180910390f35b3480156105c757600080fd5b506105d06113cf565b6040516105dd9190613faf565b60405180910390f35b3480156105f257600080fd5b5061060d600480360381019061060891906136cf565b61145d565b60405161061a91906142f1565b60405180910390f35b34801561062f57600080fd5b50610638611515565b005b34801561064657600080fd5b5061064f61159d565b60405161065c9190613ee9565b60405180910390f35b34801561067157600080fd5b5061067a6115c7565b6040516106879190613faf565b60405180910390f35b6106aa60048036038101906106a591906139b6565b611659565b005b3480156106b857600080fd5b506106d360048036038101906106ce919061396d565b6118c2565b005b3480156106e157600080fd5b506106fc60048036038101906106f79190613812565b611958565b005b34801561070a57600080fd5b50610713611ad9565b6040516107209190613f79565b60405180910390f35b34801561073557600080fd5b5061073e611aec565b005b34801561074c57600080fd5b50610755611b85565b60405161076291906142f1565b60405180910390f35b34801561077757600080fd5b50610792600480360381019061078d919061378f565b611b8a565b005b3480156107a057600080fd5b506107a9611bec565b6040516107b691906142f1565b60405180910390f35b3480156107cb57600080fd5b506107d4611bf2565b6040516107e19190613f94565b60405180910390f35b3480156107f657600080fd5b50610811600480360381019061080c91906139b6565b611c18565b60405161081e9190613faf565b60405180910390f35b34801561083357600080fd5b5061084e60048036038101906108499190613892565b611dc3565b005b34801561085c57600080fd5b50610865611feb565b6040516108729190613f79565b60405180910390f35b34801561088757600080fd5b506108a2600480360381019061089d91906139b6565b611ffe565b6040516108af91906142f1565b60405180910390f35b3480156108c457600080fd5b506108df60048036038101906108da91906136fc565b61203e565b6040516108ec9190613f79565b60405180910390f35b34801561090157600080fd5b5061091c600480360381019061091791906139b6565b6120d2565b6040516109299190613faf565b60405180910390f35b34801561093e57600080fd5b50610947612172565b6040516109549190613faf565b60405180910390f35b34801561096957600080fd5b50610984600480360381019061097f91906136cf565b612200565b005b34801561099257600080fd5b5061099b6122f8565b6040516109a891906142f1565b60405180910390f35b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a245750610a23826122fd565b5b9050919050565b610a336123df565b73ffffffffffffffffffffffffffffffffffffffff16610a5161159d565b73ffffffffffffffffffffffffffffffffffffffff1614610aa7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9e90614211565b60405180910390fd5b60001515600e60149054906101000a900460ff16151514610ac757600080fd5b80600d60008481526020019081526020016000209080519060200190610aee929190613422565b505050565b600e60159054906101000a900460ff1681565b606060008054610b15906145e9565b80601f0160208091040260200160405190810160405280929190818152602001828054610b41906145e9565b8015610b8e5780601f10610b6357610100808354040283529160200191610b8e565b820191906000526020600020905b815481529060010190602001808311610b7157829003601f168201915b5050505050905090565b6000610ba3826123e7565b610be2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd9906141b1565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610c288261131d565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9090614251565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610cb86123df565b73ffffffffffffffffffffffffffffffffffffffff161480610ce75750610ce681610ce16123df565b61203e565b5b610d26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1d90614111565b60405180910390fd5b610d308383612453565b505050565b600e60149054906101000a900460ff1681565b610d506123df565b73ffffffffffffffffffffffffffffffffffffffff16610d6e61159d565b73ffffffffffffffffffffffffffffffffffffffff1614610dc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dbb90614211565b60405180910390fd5b6001600e60166101000a81548160ff021916908315150217905550565b610de96123df565b73ffffffffffffffffffffffffffffffffffffffff16610e0761159d565b73ffffffffffffffffffffffffffffffffffffffff1614610e5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5490614211565b60405180910390fd5b6001600e60156101000a81548160ff021916908315150217905550565b610e826123df565b73ffffffffffffffffffffffffffffffffffffffff16610ea061159d565b73ffffffffffffffffffffffffffffffffffffffff1614610ef6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eed90614211565b60405180910390fd5b60001515600e60149054906101000a900460ff16151514610f1657600080fd5b6001600e60146101000a81548160ff021916908315150217905550565b610f3b6123df565b73ffffffffffffffffffffffffffffffffffffffff16610f5961159d565b73ffffffffffffffffffffffffffffffffffffffff1614610faf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa690614211565b60405180910390fd5b80600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600880549050905090565b6110086123df565b73ffffffffffffffffffffffffffffffffffffffff1661102661159d565b73ffffffffffffffffffffffffffffffffffffffff161461107c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107390614211565b60405180910390fd5b60001515600e60149054906101000a900460ff1615151461109c57600080fd5b80600c90805190602001906110b2929190613422565b5050565b6110c76110c16123df565b8261250c565b611106576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110fd90614271565b60405180910390fd5b6111118383836125ea565b505050565b60006111218361145d565b8210611162576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115990613fd1565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b61271081565b6111c96123df565b73ffffffffffffffffffffffffffffffffffffffff166111e761159d565b73ffffffffffffffffffffffffffffffffffffffff161461123d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123490614211565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611288573d6000803e3d6000fd5b5050565b6112a783838360405180602001604052806000815250611b8a565b505050565b60006112b6610ff3565b82106112f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ee90614291565b60405180910390fd5b6008828154811061130b5761130a614782565b5b90600052602060002001549050919050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156113c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113bd90614151565b60405180910390fd5b80915050919050565b600b80546113dc906145e9565b80601f0160208091040260200160405190810160405280929190818152602001828054611408906145e9565b80156114555780601f1061142a57610100808354040283529160200191611455565b820191906000526020600020905b81548152906001019060200180831161143857829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156114ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c590614131565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61151d6123df565b73ffffffffffffffffffffffffffffffffffffffff1661153b61159d565b73ffffffffffffffffffffffffffffffffffffffff1614611591576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158890614211565b60405180910390fd5b61159b6000612846565b565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546115d6906145e9565b80601f0160208091040260200160405190810160405280929190818152602001828054611602906145e9565b801561164f5780601f106116245761010080835404028352916020019161164f565b820191906000526020600020905b81548152906001019060200180831161163257829003601f168201915b5050505050905090565b600e60169054906101000a900460ff166116a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169f906140f1565b60405180910390fd5b600f8111156116ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e390614031565b60405180910390fd5b6116f581611ffe565b81611700919061445d565b3414611741576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611738906142d1565b60405180910390fd5b61271081600f5460a061175491906144b7565b61175c610ff3565b61176691906143d6565b61177091906143d6565b11156117b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a8906140d1565b60405180910390fd5b600e60179054906101000a900460ff166118b5576000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1662fdd58e3360006040518363ffffffff1660e01b8152600401611824929190613f50565b60206040518083038186803b15801561183c57600080fd5b505afa158015611850573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061187491906139e3565b116118b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ab906142b1565b60405180910390fd5b5b6118bf338261290c565b50565b6118ca6123df565b73ffffffffffffffffffffffffffffffffffffffff166118e861159d565b73ffffffffffffffffffffffffffffffffffffffff161461193e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193590614211565b60405180910390fd5b80600b9080519060200190611954929190613422565b5050565b6119606123df565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156119ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c590614091565b60405180910390fd5b80600560006119db6123df565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611a886123df565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611acd9190613f79565b60405180910390a35050565b600e60169054906101000a900460ff1681565b611af46123df565b73ffffffffffffffffffffffffffffffffffffffff16611b1261159d565b73ffffffffffffffffffffffffffffffffffffffff1614611b68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5f90614211565b60405180910390fd5b6001600e60176101000a81548160ff021916908315150217905550565b60a081565b611b9b611b956123df565b8361250c565b611bda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd190614271565b60405180910390fd5b611be684848484612940565b50505050565b600f5481565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6060611c23826123e7565b611c62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5990614191565b60405180910390fd5b6000611c6c61299c565b90506000611c78612a2e565b90506000600d60008681526020019081526020016000208054611c9a906145e9565b80601f0160208091040260200160405190810160405280929190818152602001828054611cc6906145e9565b8015611d135780601f10611ce857610100808354040283529160200191611d13565b820191906000526020600020905b815481529060010190602001808311611cf657829003601f168201915b50505050509050600082511415611d585782611d2e86612ac0565b604051602001611d3f929190613ec5565b6040516020818303038152906040529350505050611dbe565b600081511415611d965781611d6c86612ac0565b604051602001611d7d929190613ec5565b6040516020818303038152906040529350505050611dbe565b8181604051602001611da9929190613ec5565b60405160208183030381529060405293505050505b919050565b611dcb6123df565b73ffffffffffffffffffffffffffffffffffffffff16611de961159d565b73ffffffffffffffffffffffffffffffffffffffff1614611e3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3690614211565b60405180910390fd5b600e60159054906101000a900460ff1615611e8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e86906141f1565b60405180910390fd5b818190508484905014611ed7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ece906141d1565b60405180910390fd5b60005b82829050811015611fe457612710838383818110611efb57611efa614782565b5b90506020020135611f0a610ff3565b611f1491906143d6565b1115611f55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4c906140d1565b60405180910390fd5b611f9f858583818110611f6b57611f6a614782565b5b9050602002016020810190611f8091906136cf565b848484818110611f9357611f92614782565b5b9050602002013561290c565b828282818110611fb257611fb1614782565b5b90506020020135600f6000828254611fca91906143d6565b925050819055508080611fdc9061464c565b915050611eda565b5050505050565b600e60179054906101000a900460ff1681565b6000600382116120175766f0dfbda3c580009050612039565b6008821161202e5766e858f4184f80009050612039565b66d96d136441000090505b919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600d60205280600052604060002060009150905080546120f1906145e9565b80601f016020809104026020016040519081016040528092919081815260200182805461211d906145e9565b801561216a5780601f1061213f5761010080835404028352916020019161216a565b820191906000526020600020905b81548152906001019060200180831161214d57829003601f168201915b505050505081565b600c805461217f906145e9565b80601f01602080910402602001604051908101604052809291908181526020018280546121ab906145e9565b80156121f85780601f106121cd576101008083540402835291602001916121f8565b820191906000526020600020905b8154815290600101906020018083116121db57829003601f168201915b505050505081565b6122086123df565b73ffffffffffffffffffffffffffffffffffffffff1661222661159d565b73ffffffffffffffffffffffffffffffffffffffff161461227c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227390614211565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156122ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122e390614011565b60405180910390fd5b6122f581612846565b50565b600f81565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806123c857507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806123d857506123d782612c21565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166124c68361131d565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000612517826123e7565b612556576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254d906140b1565b60405180910390fd5b60006125618361131d565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806125d057508373ffffffffffffffffffffffffffffffffffffffff166125b884610b98565b73ffffffffffffffffffffffffffffffffffffffff16145b806125e157506125e0818561203e565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661260a8261131d565b73ffffffffffffffffffffffffffffffffffffffff1614612660576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161265790614231565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156126d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126c790614071565b60405180910390fd5b6126db838383612c8b565b6126e6600082612453565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461273691906144b7565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461278d91906143d6565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60005b8181101561293b5761292883612923610ff3565b612d9f565b80806129339061464c565b91505061290f565b505050565b61294b8484846125ea565b61295784848484612f6d565b612996576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161298d90613ff1565b60405180910390fd5b50505050565b6060600b80546129ab906145e9565b80601f01602080910402602001604051908101604052809291908181526020018280546129d7906145e9565b8015612a245780601f106129f957610100808354040283529160200191612a24565b820191906000526020600020905b815481529060010190602001808311612a0757829003601f168201915b5050505050905090565b6060600c8054612a3d906145e9565b80601f0160208091040260200160405190810160405280929190818152602001828054612a69906145e9565b8015612ab65780601f10612a8b57610100808354040283529160200191612ab6565b820191906000526020600020905b815481529060010190602001808311612a9957829003601f168201915b5050505050905090565b60606000821415612b08576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612c1c565b600082905060005b60008214612b3a578080612b239061464c565b915050600a82612b33919061442c565b9150612b10565b60008167ffffffffffffffff811115612b5657612b556147b1565b5b6040519080825280601f01601f191660200182016040528015612b885781602001600182028036833780820191505090505b5090505b60008514612c1557600182612ba191906144b7565b9150600a85612bb09190614695565b6030612bbc91906143d6565b60f81b818381518110612bd257612bd1614782565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612c0e919061442c565b9450612b8c565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612c96838383613104565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612cd957612cd481613109565b612d18565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612d1757612d168382613152565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612d5b57612d56816132bf565b612d9a565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612d9957612d988282613390565b5b5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612e0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e0690614171565b60405180910390fd5b612e18816123e7565b15612e58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e4f90614051565b60405180910390fd5b612e6460008383612c8b565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612eb491906143d6565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000612f8e8473ffffffffffffffffffffffffffffffffffffffff1661340f565b156130f7578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612fb76123df565b8786866040518563ffffffff1660e01b8152600401612fd99493929190613f04565b602060405180830381600087803b158015612ff357600080fd5b505af192505050801561302457506040513d601f19601f820116820180604052508101906130219190613940565b60015b6130a7573d8060008114613054576040519150601f19603f3d011682016040523d82523d6000602084013e613059565b606091505b5060008151141561309f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161309690613ff1565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506130fc565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161315f8461145d565b61316991906144b7565b905060006007600084815260200190815260200160002054905081811461324e576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506132d391906144b7565b905060006009600084815260200190815260200160002054905060006008838154811061330357613302614782565b5b90600052602060002001549050806008838154811061332557613324614782565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548061337457613373614753565b5b6001900381819060005260206000200160009055905550505050565b600061339b8361145d565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600080823b905060008111915050919050565b82805461342e906145e9565b90600052602060002090601f0160209004810192826134505760008555613497565b82601f1061346957805160ff1916838001178555613497565b82800160010185558215613497579182015b8281111561349657825182559160200191906001019061347b565b5b5090506134a491906134a8565b5090565b5b808211156134c15760008160009055506001016134a9565b5090565b60006134d86134d384614331565b61430c565b9050828152602081018484840111156134f4576134f36147ef565b5b6134ff8482856145a7565b509392505050565b600061351a61351584614362565b61430c565b905082815260208101848484011115613536576135356147ef565b5b6135418482856145a7565b509392505050565b60008135905061355881614e4a565b92915050565b60008083601f840112613574576135736147e5565b5b8235905067ffffffffffffffff811115613591576135906147e0565b5b6020830191508360208202830111156135ad576135ac6147ea565b5b9250929050565b60008083601f8401126135ca576135c96147e5565b5b8235905067ffffffffffffffff8111156135e7576135e66147e0565b5b602083019150836020820283011115613603576136026147ea565b5b9250929050565b60008135905061361981614e61565b92915050565b60008135905061362e81614e78565b92915050565b60008151905061364381614e78565b92915050565b600082601f83011261365e5761365d6147e5565b5b813561366e8482602086016134c5565b91505092915050565b600082601f83011261368c5761368b6147e5565b5b813561369c848260208601613507565b91505092915050565b6000813590506136b481614e8f565b92915050565b6000815190506136c981614e8f565b92915050565b6000602082840312156136e5576136e46147f9565b5b60006136f384828501613549565b91505092915050565b60008060408385031215613713576137126147f9565b5b600061372185828601613549565b925050602061373285828601613549565b9150509250929050565b600080600060608486031215613755576137546147f9565b5b600061376386828701613549565b935050602061377486828701613549565b9250506040613785868287016136a5565b9150509250925092565b600080600080608085870312156137a9576137a86147f9565b5b60006137b787828801613549565b94505060206137c887828801613549565b93505060406137d9878288016136a5565b925050606085013567ffffffffffffffff8111156137fa576137f96147f4565b5b61380687828801613649565b91505092959194509250565b60008060408385031215613829576138286147f9565b5b600061383785828601613549565b92505060206138488582860161360a565b9150509250929050565b60008060408385031215613869576138686147f9565b5b600061387785828601613549565b9250506020613888858286016136a5565b9150509250929050565b600080600080604085870312156138ac576138ab6147f9565b5b600085013567ffffffffffffffff8111156138ca576138c96147f4565b5b6138d68782880161355e565b9450945050602085013567ffffffffffffffff8111156138f9576138f86147f4565b5b613905878288016135b4565b925092505092959194509250565b600060208284031215613929576139286147f9565b5b60006139378482850161361f565b91505092915050565b600060208284031215613956576139556147f9565b5b600061396484828501613634565b91505092915050565b600060208284031215613983576139826147f9565b5b600082013567ffffffffffffffff8111156139a1576139a06147f4565b5b6139ad84828501613677565b91505092915050565b6000602082840312156139cc576139cb6147f9565b5b60006139da848285016136a5565b91505092915050565b6000602082840312156139f9576139f86147f9565b5b6000613a07848285016136ba565b91505092915050565b60008060408385031215613a2757613a266147f9565b5b6000613a35858286016136a5565b925050602083013567ffffffffffffffff811115613a5657613a556147f4565b5b613a6285828601613677565b9150509250929050565b613a75816144eb565b82525050565b613a84816144fd565b82525050565b6000613a9582614393565b613a9f81856143a9565b9350613aaf8185602086016145b6565b613ab8816147fe565b840191505092915050565b613acc8161455f565b82525050565b613adb81614571565b82525050565b6000613aec8261439e565b613af681856143ba565b9350613b068185602086016145b6565b613b0f816147fe565b840191505092915050565b6000613b258261439e565b613b2f81856143cb565b9350613b3f8185602086016145b6565b80840191505092915050565b6000613b58602b836143ba565b9150613b638261480f565b604082019050919050565b6000613b7b6032836143ba565b9150613b868261485e565b604082019050919050565b6000613b9e6026836143ba565b9150613ba9826148ad565b604082019050919050565b6000613bc1600f836143ba565b9150613bcc826148fc565b602082019050919050565b6000613be4601c836143ba565b9150613bef82614925565b602082019050919050565b6000613c076024836143ba565b9150613c128261494e565b604082019050919050565b6000613c2a6019836143ba565b9150613c358261499d565b602082019050919050565b6000613c4d602c836143ba565b9150613c58826149c6565b604082019050919050565b6000613c70600f836143ba565b9150613c7b82614a15565b602082019050919050565b6000613c936010836143ba565b9150613c9e82614a3e565b602082019050919050565b6000613cb66038836143ba565b9150613cc182614a67565b604082019050919050565b6000613cd9602a836143ba565b9150613ce482614ab6565b604082019050919050565b6000613cfc6029836143ba565b9150613d0782614b05565b604082019050919050565b6000613d1f6020836143ba565b9150613d2a82614b54565b602082019050919050565b6000613d426031836143ba565b9150613d4d82614b7d565b604082019050919050565b6000613d65602c836143ba565b9150613d7082614bcc565b604082019050919050565b6000613d88600a836143ba565b9150613d9382614c1b565b602082019050919050565b6000613dab600b836143ba565b9150613db682614c44565b602082019050919050565b6000613dce6020836143ba565b9150613dd982614c6d565b602082019050919050565b6000613df16029836143ba565b9150613dfc82614c96565b604082019050919050565b6000613e146021836143ba565b9150613e1f82614ce5565b604082019050919050565b6000613e376031836143ba565b9150613e4282614d34565b604082019050919050565b6000613e5a602c836143ba565b9150613e6582614d83565b604082019050919050565b6000613e7d6031836143ba565b9150613e8882614dd2565b604082019050919050565b6000613ea06015836143ba565b9150613eab82614e21565b602082019050919050565b613ebf81614555565b82525050565b6000613ed18285613b1a565b9150613edd8284613b1a565b91508190509392505050565b6000602082019050613efe6000830184613a6c565b92915050565b6000608082019050613f196000830187613a6c565b613f266020830186613a6c565b613f336040830185613eb6565b8181036060830152613f458184613a8a565b905095945050505050565b6000604082019050613f656000830185613a6c565b613f726020830184613ad2565b9392505050565b6000602082019050613f8e6000830184613a7b565b92915050565b6000602082019050613fa96000830184613ac3565b92915050565b60006020820190508181036000830152613fc98184613ae1565b905092915050565b60006020820190508181036000830152613fea81613b4b565b9050919050565b6000602082019050818103600083015261400a81613b6e565b9050919050565b6000602082019050818103600083015261402a81613b91565b9050919050565b6000602082019050818103600083015261404a81613bb4565b9050919050565b6000602082019050818103600083015261406a81613bd7565b9050919050565b6000602082019050818103600083015261408a81613bfa565b9050919050565b600060208201905081810360008301526140aa81613c1d565b9050919050565b600060208201905081810360008301526140ca81613c40565b9050919050565b600060208201905081810360008301526140ea81613c63565b9050919050565b6000602082019050818103600083015261410a81613c86565b9050919050565b6000602082019050818103600083015261412a81613ca9565b9050919050565b6000602082019050818103600083015261414a81613ccc565b9050919050565b6000602082019050818103600083015261416a81613cef565b9050919050565b6000602082019050818103600083015261418a81613d12565b9050919050565b600060208201905081810360008301526141aa81613d35565b9050919050565b600060208201905081810360008301526141ca81613d58565b9050919050565b600060208201905081810360008301526141ea81613d7b565b9050919050565b6000602082019050818103600083015261420a81613d9e565b9050919050565b6000602082019050818103600083015261422a81613dc1565b9050919050565b6000602082019050818103600083015261424a81613de4565b9050919050565b6000602082019050818103600083015261426a81613e07565b9050919050565b6000602082019050818103600083015261428a81613e2a565b9050919050565b600060208201905081810360008301526142aa81613e4d565b9050919050565b600060208201905081810360008301526142ca81613e70565b9050919050565b600060208201905081810360008301526142ea81613e93565b9050919050565b60006020820190506143066000830184613eb6565b92915050565b6000614316614327565b9050614322828261461b565b919050565b6000604051905090565b600067ffffffffffffffff82111561434c5761434b6147b1565b5b614355826147fe565b9050602081019050919050565b600067ffffffffffffffff82111561437d5761437c6147b1565b5b614386826147fe565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006143e182614555565b91506143ec83614555565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614421576144206146c6565b5b828201905092915050565b600061443782614555565b915061444283614555565b925082614452576144516146f5565b5b828204905092915050565b600061446882614555565b915061447383614555565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156144ac576144ab6146c6565b5b828202905092915050565b60006144c282614555565b91506144cd83614555565b9250828210156144e0576144df6146c6565b5b828203905092915050565b60006144f682614535565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600061456a82614583565b9050919050565b600061457c82614555565b9050919050565b600061458e82614595565b9050919050565b60006145a082614535565b9050919050565b82818337600083830152505050565b60005b838110156145d45780820151818401526020810190506145b9565b838111156145e3576000848401525b50505050565b6000600282049050600182168061460157607f821691505b6020821081141561461557614614614724565b5b50919050565b614624826147fe565b810181811067ffffffffffffffff82111715614643576146426147b1565b5b80604052505050565b600061465782614555565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561468a576146896146c6565b5b600182019050919050565b60006146a082614555565b91506146ab83614555565b9250826146bb576146ba6146f5565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f546f6f206d616e7920746f6b656e730000000000000000000000000000000000600082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f537570706c792065786365656465640000000000000000000000000000000000600082015250565b7f53616c65206e6f74207374617274656400000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f45524337323155524953746f726167653a2055524920717565727920666f722060008201527f6e6f6e6578697374656e7420746f6b656e000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f426164206c656e67746800000000000000000000000000000000000000000000600082015250565b7f4e6f7420616c6c6f776564000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f596f75206e65656420746f2062652077686974656c697374656420746f206d6960008201527f6e7420647572696e672070726573616c65000000000000000000000000000000602082015250565b7f45746865722076616c756520696e636f72726563740000000000000000000000600082015250565b614e53816144eb565b8114614e5e57600080fd5b50565b614e6a816144fd565b8114614e7557600080fd5b50565b614e8181614509565b8114614e8c57600080fd5b50565b614e9881614555565b8114614ea357600080fd5b5056fea264697066735822122090a6941c06a0d99bb57846b658e17f7d0897991b7774a4efc6481fd4a3019a3464736f6c63430008070033

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

00000000000000000000000000000000000000000000000000000000000000400000000000000000000000007fe1355e9954abe013a36cbe40a820d31c7e7324000000000000000000000000000000000000000000000000000000000000002868747470733a2f2f6170692e6272696768746d696e6473676f6c656d732e636f6d2f746f6b656e2f000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _uri (string): https://api.brightmindsgolems.com/token/
Arg [1] : _whitelist (address): 0x7Fe1355e9954abE013A36cbe40a820D31C7e7324

-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 0000000000000000000000007fe1355e9954abe013a36cbe40a820d31c7e7324
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000028
Arg [3] : 68747470733a2f2f6170692e6272696768746d696e6473676f6c656d732e636f
Arg [4] : 6d2f746f6b656e2f000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

47304:6047:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41076:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49408:168;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47753:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28968:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30527:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30050:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47716:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50558:89;;;;;;;;;;;;;:::i;:::-;;51463:90;;;;;;;;;;;;;:::i;:::-;;49193:122;;;;;;;;;;;;;:::i;:::-;;50921:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41716:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48958:139;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31417:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41384:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47615:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53203:145;;;;;;;;;;;;;:::i;:::-;;31827:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41906:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28662:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47446:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28392:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4558:94;;;;;;;;;;;;;:::i;:::-;;3907:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29137:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52519:588;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48781:92;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30820:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47798:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50726:79;;;;;;;;;;;;;:::i;:::-;;47926:48;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32083:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47887:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47575:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49651:749;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51639:479;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47842:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52198:263;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31186:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47516:52;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47479:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4807:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47664:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41076:224;41178:4;41217:35;41202:50;;;:11;:50;;;;:90;;;;41256:36;41280:11;41256:23;:36::i;:::-;41202:90;41195:97;;41076:224;;;:::o;49408:168::-;4138:12;:10;:12::i;:::-;4127:23;;:7;:5;:7::i;:::-;:23;;;4119:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49518:5:::1;49504:19;;:10;;;;;;;;;;;:19;;;49496:28;;;::::0;::::1;;49564:4;49535:17;:26;49553:7;49535:26;;;;;;;;;;;:33;;;;;;;;;;;;:::i;:::-;;49408:168:::0;;:::o;47753:38::-;;;;;;;;;;;;;:::o;28968:100::-;29022:13;29055:5;29048:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28968:100;:::o;30527:221::-;30603:7;30631:16;30639:7;30631;:16::i;:::-;30623:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;30716:15;:24;30732:7;30716:24;;;;;;;;;;;;;;;;;;;;;30709:31;;30527:221;;;:::o;30050:411::-;30131:13;30147:23;30162:7;30147:14;:23::i;:::-;30131:39;;30195:5;30189:11;;:2;:11;;;;30181:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;30289:5;30273:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;30298:37;30315:5;30322:12;:10;:12::i;:::-;30298:16;:37::i;:::-;30273:62;30251:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;30432:21;30441:2;30445:7;30432:8;:21::i;:::-;30120:341;30050:411;;:::o;47716:30::-;;;;;;;;;;;;;:::o;50558:89::-;4138:12;:10;:12::i;:::-;4127:23;;:7;:5;:7::i;:::-;:23;;;4119:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50635:4:::1;50615:17;;:24;;;;;;;;;;;;;;;;;;50558:89::o:0;51463:90::-;4138:12;:10;:12::i;:::-;4127:23;;:7;:5;:7::i;:::-;:23;;;4119:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51541:4:::1;51520:18;;:25;;;;;;;;;;;;;;;;;;51463:90::o:0;49193:122::-;4138:12;:10;:12::i;:::-;4127:23;;:7;:5;:7::i;:::-;:23;;;4119:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49273:5:::1;49259:19;;:10;;;;;;;;;;;:19;;;49251:28;;;::::0;::::1;;49303:4;49290:10;;:17;;;;;;;;;;;;;;;;;;49193:122::o:0;50921:126::-;4138:12;:10;:12::i;:::-;4127:23;;:7;:5;:7::i;:::-;:23;;;4119:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51029:9:::1;51000:17;;:39;;;;;;;;;;;;;;;;;;50921:126:::0;:::o;41716:113::-;41777:7;41804:10;:17;;;;41797:24;;41716:113;:::o;48958:139::-;4138:12;:10;:12::i;:::-;4127:23;;:7;:5;:7::i;:::-;:23;;;4119:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49054:5:::1;49040:19;;:10;;;;;;;;;;;:19;;;49032:28;;;::::0;::::1;;49085:4;49071:11;:18;;;;;;;;;;;;:::i;:::-;;48958:139:::0;:::o;31417:339::-;31612:41;31631:12;:10;:12::i;:::-;31645:7;31612:18;:41::i;:::-;31604:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;31720:28;31730:4;31736:2;31740:7;31720:9;:28::i;:::-;31417:339;;;:::o;41384:256::-;41481:7;41517:23;41534:5;41517:16;:23::i;:::-;41509:5;:31;41501:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;41606:12;:19;41619:5;41606:19;;;;;;;;;;;;;;;:26;41626:5;41606:26;;;;;;;;;;;;41599:33;;41384:256;;;;:::o;47615:42::-;47652:5;47615:42;:::o;53203:145::-;4138:12;:10;:12::i;:::-;4127:23;;:7;:5;:7::i;:::-;:23;;;4119:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53253:15:::1;53271:21;53253:39;;53311:10;53303:28;;:37;53332:7;53303:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;53242:106;53203:145::o:0;31827:185::-;31965:39;31982:4;31988:2;31992:7;31965:39;;;;;;;;;;;;:16;:39::i;:::-;31827:185;;;:::o;41906:233::-;41981:7;42017:30;:28;:30::i;:::-;42009:5;:38;42001:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;42114:10;42125:5;42114:17;;;;;;;;:::i;:::-;;;;;;;;;;42107:24;;41906:233;;;:::o;28662:239::-;28734:7;28754:13;28770:7;:16;28778:7;28770:16;;;;;;;;;;;;;;;;;;;;;28754:32;;28822:1;28805:19;;:5;:19;;;;28797:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;28888:5;28881:12;;;28662:239;;;:::o;47446:26::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;28392:208::-;28464:7;28509:1;28492:19;;:5;:19;;;;28484:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;28576:9;:16;28586:5;28576:16;;;;;;;;;;;;;;;;28569:23;;28392:208;;;:::o;4558:94::-;4138:12;:10;:12::i;:::-;4127:23;;:7;:5;:7::i;:::-;:23;;;4119:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4623:21:::1;4641:1;4623:9;:21::i;:::-;4558:94::o:0;3907:87::-;3953:7;3980:6;;;;;;;;;;;3973:13;;3907:87;:::o;29137:104::-;29193:13;29226:7;29219:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29137:104;:::o;52519:588::-;52581:17;;;;;;;;;;;52573:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;47701:2;52638:5;:19;;52630:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;52717:15;52726:5;52717:8;:15::i;:::-;52709:5;:23;;;;:::i;:::-;52696:9;:36;52688:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;47652:5;52833;52816:13;;47971:3;52795:34;;;;:::i;:::-;52778:13;:11;:13::i;:::-;:52;;;;:::i;:::-;:60;;;;:::i;:::-;52777:76;;52769:104;;;;;;;;;;;;:::i;:::-;;;;;;;;;52899:12;;;;;;;;;;;52894:154;;52981:1;52936:17;;;;;;;;;;;:27;;;52964:10;52976:1;52936:42;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:46;52928:108;;;;;;;;;;;;:::i;:::-;;;;;;;;;52894:154;53068:31;53081:10;53093:5;53068:12;:31::i;:::-;52519:588;:::o;48781:92::-;4138:12;:10;:12::i;:::-;4127:23;;:7;:5;:7::i;:::-;:23;;;4119:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48861:4:::1;48851:7;:14;;;;;;;;;;;;:::i;:::-;;48781:92:::0;:::o;30820:295::-;30935:12;:10;:12::i;:::-;30923:24;;:8;:24;;;;30915:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;31035:8;30990:18;:32;31009:12;:10;:12::i;:::-;30990:32;;;;;;;;;;;;;;;:42;31023:8;30990:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;31088:8;31059:48;;31074:12;:10;:12::i;:::-;31059:48;;;31098:8;31059:48;;;;;;:::i;:::-;;;;;;;;30820:295;;:::o;47798:37::-;;;;;;;;;;;;;:::o;50726:79::-;4138:12;:10;:12::i;:::-;4127:23;;:7;:5;:7::i;:::-;:23;;;4119:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50793:4:::1;50778:12;;:19;;;;;;;;;;;;;;;;;;50726:79::o:0;47926:48::-;47971:3;47926:48;:::o;32083:328::-;32258:41;32277:12;:10;:12::i;:::-;32291:7;32258:18;:41::i;:::-;32250:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;32364:39;32378:4;32384:2;32388:7;32397:5;32364:13;:39::i;:::-;32083:328;;;;:::o;47887:32::-;;;;:::o;47575:33::-;;;;;;;;;;;;;:::o;49651:749::-;49724:13;49758:16;49766:7;49758;:16::i;:::-;49750:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;49849:18;49870:10;:8;:10::i;:::-;49849:31;;49891:22;49916:14;:12;:14::i;:::-;49891:39;;49951:22;49976:17;:26;49994:7;49976:26;;;;;;;;;;;49951:51;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50053:1;50033:8;50027:22;:27;50023:370;;;50102:4;50108:18;:7;:16;:18::i;:::-;50085:42;;;;;;;;;:::i;:::-;;;;;;;;;;;;;50071:57;;;;;;;50023:370;50191:1;50171:8;50165:22;:27;50161:221;;;50244:8;50254:18;:7;:16;:18::i;:::-;50227:46;;;;;;;;;:::i;:::-;;;;;;;;;;;;;50213:61;;;;;;;50161:221;50346:8;50356;50329:36;;;;;;;;;:::i;:::-;;;;;;;;;;;;;50315:51;;;;;49651:749;;;;:::o;51639:479::-;4138:12;:10;:12::i;:::-;4127:23;;:7;:5;:7::i;:::-;:23;;;4119:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51749:18:::1;;;;;;;;;;;51748:19;51740:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;51819:6;;:13;;51802:6;;:13;;:30;51794:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;51874:9;51869:242;51893:6;;:13;;51889:1;:17;51869:242;;;47652:5;51952:6;;51959:1;51952:9;;;;;;;:::i;:::-;;;;;;;;51936:13;:11;:13::i;:::-;:25;;;;:::i;:::-;:39;;51928:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;52024:34;52037:6;;52044:1;52037:9;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;52048:6;;52055:1;52048:9;;;;;;;:::i;:::-;;;;;;;;52024:12;:34::i;:::-;52090:6;;52097:1;52090:9;;;;;;;:::i;:::-;;;;;;;;52073:13;;:26;;;;;;;:::i;:::-;;;;;;;;51908:3;;;;;:::i;:::-;;;;51869:242;;;;51639:479:::0;;;;:::o;47842:32::-;;;;;;;;;;;;;:::o;52198:263::-;52252:7;52285:1;52276:5;:10;52272:182;;52310:12;52303:19;;;;52272:182;52353:1;52344:5;:10;52340:114;;52378:12;52371:19;;;;52340:114;52430:12;52423:19;;52198:263;;;;:::o;31186:164::-;31283:4;31307:18;:25;31326:5;31307:25;;;;;;;;;;;;;;;:35;31333:8;31307:35;;;;;;;;;;;;;;;;;;;;;;;;;31300:42;;31186:164;;;;:::o;47516:52::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;47479:30::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;4807:192::-;4138:12;:10;:12::i;:::-;4127:23;;:7;:5;:7::i;:::-;:23;;;4119:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4916:1:::1;4896:22;;:8;:22;;;;4888:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;4972:19;4982:8;4972:9;:19::i;:::-;4807:192:::0;:::o;47664:39::-;47701:2;47664:39;:::o;28023:305::-;28125:4;28177:25;28162:40;;;:11;:40;;;;:105;;;;28234:33;28219:48;;;:11;:48;;;;28162:105;:158;;;;28284:36;28308:11;28284:23;:36::i;:::-;28162:158;28142:178;;28023:305;;;:::o;2695:98::-;2748:7;2775:10;2768:17;;2695:98;:::o;33921:127::-;33986:4;34038:1;34010:30;;:7;:16;34018:7;34010:16;;;;;;;;;;;;;;;;;;;;;:30;;;;34003:37;;33921:127;;;:::o;37903:174::-;38005:2;37978:15;:24;37994:7;37978:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;38061:7;38057:2;38023:46;;38032:23;38047:7;38032:14;:23::i;:::-;38023:46;;;;;;;;;;;;37903:174;;:::o;34215:348::-;34308:4;34333:16;34341:7;34333;:16::i;:::-;34325:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;34409:13;34425:23;34440:7;34425:14;:23::i;:::-;34409:39;;34478:5;34467:16;;:7;:16;;;:51;;;;34511:7;34487:31;;:20;34499:7;34487:11;:20::i;:::-;:31;;;34467:51;:87;;;;34522:32;34539:5;34546:7;34522:16;:32::i;:::-;34467:87;34459:96;;;34215:348;;;;:::o;37207:578::-;37366:4;37339:31;;:23;37354:7;37339:14;:23::i;:::-;:31;;;37331:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;37449:1;37435:16;;:2;:16;;;;37427:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;37505:39;37526:4;37532:2;37536:7;37505:20;:39::i;:::-;37609:29;37626:1;37630:7;37609:8;:29::i;:::-;37670:1;37651:9;:15;37661:4;37651:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;37699:1;37682:9;:13;37692:2;37682:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;37730:2;37711:7;:16;37719:7;37711:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;37769:7;37765:2;37750:27;;37759:4;37750:27;;;;;;;;;;;;37207:578;;;:::o;5007:173::-;5063:16;5082:6;;;;;;;;;;;5063:25;;5108:8;5099:6;;:17;;;;;;;;;;;;;;;;;;5163:8;5132:40;;5153:8;5132:40;;;;;;;;;;;;5052:128;5007:173;:::o;51205:163::-;51279:9;51274:87;51298:5;51294:1;:9;51274:87;;;51325:24;51331:2;51335:13;:11;:13::i;:::-;51325:5;:24::i;:::-;51305:3;;;;;:::i;:::-;;;;51274:87;;;;51205:163;;:::o;33293:315::-;33450:28;33460:4;33466:2;33470:7;33450:9;:28::i;:::-;33497:48;33520:4;33526:2;33530:7;33539:5;33497:22;:48::i;:::-;33489:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;33293:315;;;;:::o;48431:100::-;48483:13;48516:7;48509:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48431:100;:::o;48597:99::-;48644:13;48677:11;48670:18;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48597:99;:::o;311:723::-;367:13;597:1;588:5;:10;584:53;;;615:10;;;;;;;;;;;;;;;;;;;;;584:53;647:12;662:5;647:20;;678:14;703:78;718:1;710:4;:9;703:78;;736:8;;;;;:::i;:::-;;;;767:2;759:10;;;;;:::i;:::-;;;703:78;;;791:19;823:6;813:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;791:39;;841:154;857:1;848:5;:10;841:154;;885:1;875:11;;;;;:::i;:::-;;;952:2;944:5;:10;;;;:::i;:::-;931:2;:24;;;;:::i;:::-;918:39;;901:6;908;901:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;981:2;972:11;;;;;:::i;:::-;;;841:154;;;1019:6;1005:21;;;;;311:723;;;;:::o;20002:157::-;20087:4;20126:25;20111:40;;;:11;:40;;;;20104:47;;20002:157;;;:::o;42752:589::-;42896:45;42923:4;42929:2;42933:7;42896:26;:45::i;:::-;42974:1;42958:18;;:4;:18;;;42954:187;;;42993:40;43025:7;42993:31;:40::i;:::-;42954:187;;;43063:2;43055:10;;:4;:10;;;43051:90;;43082:47;43115:4;43121:7;43082:32;:47::i;:::-;43051:90;42954:187;43169:1;43155:16;;:2;:16;;;43151:183;;;43188:45;43225:7;43188:36;:45::i;:::-;43151:183;;;43261:4;43255:10;;:2;:10;;;43251:83;;43282:40;43310:2;43314:7;43282:27;:40::i;:::-;43251:83;43151:183;42752:589;;;:::o;35899:382::-;35993:1;35979:16;;:2;:16;;;;35971:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;36052:16;36060:7;36052;:16::i;:::-;36051:17;36043:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;36114:45;36143:1;36147:2;36151:7;36114:20;:45::i;:::-;36189:1;36172:9;:13;36182:2;36172:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;36220:2;36201:7;:16;36209:7;36201:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;36265:7;36261:2;36240:33;;36257:1;36240:33;;;;;;;;;;;;35899:382;;:::o;38642:799::-;38797:4;38818:15;:2;:13;;;:15::i;:::-;38814:620;;;38870:2;38854:36;;;38891:12;:10;:12::i;:::-;38905:4;38911:7;38920:5;38854:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;38850:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39113:1;39096:6;:13;:18;39092:272;;;39139:60;;;;;;;;;;:::i;:::-;;;;;;;;39092:272;39314:6;39308:13;39299:6;39295:2;39291:15;39284:38;38850:529;38987:41;;;38977:51;;;:6;:51;;;;38970:58;;;;;38814:620;39418:4;39411:11;;38642:799;;;;;;;:::o;40013:126::-;;;;:::o;44064:164::-;44168:10;:17;;;;44141:15;:24;44157:7;44141:24;;;;;;;;;;;:44;;;;44196:10;44212:7;44196:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44064:164;:::o;44855:988::-;45121:22;45171:1;45146:22;45163:4;45146:16;:22::i;:::-;:26;;;;:::i;:::-;45121:51;;45183:18;45204:17;:26;45222:7;45204:26;;;;;;;;;;;;45183:47;;45351:14;45337:10;:28;45333:328;;45382:19;45404:12;:18;45417:4;45404:18;;;;;;;;;;;;;;;:34;45423:14;45404:34;;;;;;;;;;;;45382:56;;45488:11;45455:12;:18;45468:4;45455:18;;;;;;;;;;;;;;;:30;45474:10;45455:30;;;;;;;;;;;:44;;;;45605:10;45572:17;:30;45590:11;45572:30;;;;;;;;;;;:43;;;;45367:294;45333:328;45757:17;:26;45775:7;45757:26;;;;;;;;;;;45750:33;;;45801:12;:18;45814:4;45801:18;;;;;;;;;;;;;;;:34;45820:14;45801:34;;;;;;;;;;;45794:41;;;44936:907;;44855:988;;:::o;46138:1079::-;46391:22;46436:1;46416:10;:17;;;;:21;;;;:::i;:::-;46391:46;;46448:18;46469:15;:24;46485:7;46469:24;;;;;;;;;;;;46448:45;;46820:19;46842:10;46853:14;46842:26;;;;;;;;:::i;:::-;;;;;;;;;;46820:48;;46906:11;46881:10;46892;46881:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;47017:10;46986:15;:28;47002:11;46986:28;;;;;;;;;;;:41;;;;47158:15;:24;47174:7;47158:24;;;;;;;;;;;47151:31;;;47193:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;46209:1008;;;46138:1079;:::o;43642:221::-;43727:14;43744:20;43761:2;43744:16;:20::i;:::-;43727:37;;43802:7;43775:12;:16;43788:2;43775:16;;;;;;;;;;;;;;;:24;43792:6;43775:24;;;;;;;;;;;:34;;;;43849:6;43820:17;:26;43838:7;43820:26;;;;;;;;;;;:35;;;;43716:147;43642:221;;:::o;5953:387::-;6013:4;6221:12;6288:7;6276:20;6268:28;;6331:1;6324:4;:8;6317:15;;;5953:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;1003:568::-;1076:8;1086:6;1136:3;1129:4;1121:6;1117:17;1113:27;1103:122;;1144:79;;:::i;:::-;1103:122;1257:6;1244:20;1234:30;;1287:18;1279:6;1276:30;1273:117;;;1309:79;;:::i;:::-;1273:117;1423:4;1415:6;1411:17;1399:29;;1477:3;1469:4;1461:6;1457:17;1447:8;1443:32;1440:41;1437:128;;;1484:79;;:::i;:::-;1437:128;1003:568;;;;;:::o;1594:::-;1667:8;1677:6;1727:3;1720:4;1712:6;1708:17;1704:27;1694:122;;1735:79;;:::i;:::-;1694:122;1848:6;1835:20;1825:30;;1878:18;1870:6;1867:30;1864:117;;;1900:79;;:::i;:::-;1864:117;2014:4;2006:6;2002:17;1990:29;;2068:3;2060:4;2052:6;2048:17;2038:8;2034:32;2031:41;2028:128;;;2075:79;;:::i;:::-;2028:128;1594:568;;;;;:::o;2168:133::-;2211:5;2249:6;2236:20;2227:29;;2265:30;2289:5;2265:30;:::i;:::-;2168:133;;;;:::o;2307:137::-;2352:5;2390:6;2377:20;2368:29;;2406:32;2432:5;2406:32;:::i;:::-;2307:137;;;;:::o;2450:141::-;2506:5;2537:6;2531:13;2522:22;;2553:32;2579:5;2553:32;:::i;:::-;2450:141;;;;:::o;2610:338::-;2665:5;2714:3;2707:4;2699:6;2695:17;2691:27;2681:122;;2722:79;;:::i;:::-;2681:122;2839:6;2826:20;2864:78;2938:3;2930:6;2923:4;2915:6;2911:17;2864:78;:::i;:::-;2855:87;;2671:277;2610:338;;;;:::o;2968:340::-;3024:5;3073:3;3066:4;3058:6;3054:17;3050:27;3040:122;;3081:79;;:::i;:::-;3040:122;3198:6;3185:20;3223:79;3298:3;3290:6;3283:4;3275:6;3271:17;3223:79;:::i;:::-;3214:88;;3030:278;2968:340;;;;:::o;3314:139::-;3360:5;3398:6;3385:20;3376:29;;3414:33;3441:5;3414:33;:::i;:::-;3314:139;;;;:::o;3459:143::-;3516:5;3547:6;3541:13;3532:22;;3563:33;3590:5;3563:33;:::i;:::-;3459:143;;;;:::o;3608:329::-;3667:6;3716:2;3704:9;3695:7;3691:23;3687:32;3684:119;;;3722:79;;:::i;:::-;3684:119;3842:1;3867:53;3912:7;3903:6;3892:9;3888:22;3867:53;:::i;:::-;3857:63;;3813:117;3608:329;;;;:::o;3943:474::-;4011:6;4019;4068:2;4056:9;4047:7;4043:23;4039:32;4036:119;;;4074:79;;:::i;:::-;4036:119;4194:1;4219:53;4264:7;4255:6;4244:9;4240:22;4219:53;:::i;:::-;4209:63;;4165:117;4321:2;4347:53;4392:7;4383:6;4372:9;4368:22;4347:53;:::i;:::-;4337:63;;4292:118;3943:474;;;;;:::o;4423:619::-;4500:6;4508;4516;4565:2;4553:9;4544:7;4540:23;4536:32;4533:119;;;4571:79;;:::i;:::-;4533:119;4691:1;4716:53;4761:7;4752:6;4741:9;4737:22;4716:53;:::i;:::-;4706:63;;4662:117;4818:2;4844:53;4889:7;4880:6;4869:9;4865:22;4844:53;:::i;:::-;4834:63;;4789:118;4946:2;4972:53;5017:7;5008:6;4997:9;4993:22;4972:53;:::i;:::-;4962:63;;4917:118;4423:619;;;;;:::o;5048:943::-;5143:6;5151;5159;5167;5216:3;5204:9;5195:7;5191:23;5187:33;5184:120;;;5223:79;;:::i;:::-;5184:120;5343:1;5368:53;5413:7;5404:6;5393:9;5389:22;5368:53;:::i;:::-;5358:63;;5314:117;5470:2;5496:53;5541:7;5532:6;5521:9;5517:22;5496:53;:::i;:::-;5486:63;;5441:118;5598:2;5624:53;5669:7;5660:6;5649:9;5645:22;5624:53;:::i;:::-;5614:63;;5569:118;5754:2;5743:9;5739:18;5726:32;5785:18;5777:6;5774:30;5771:117;;;5807:79;;:::i;:::-;5771:117;5912:62;5966:7;5957:6;5946:9;5942:22;5912:62;:::i;:::-;5902:72;;5697:287;5048:943;;;;;;;:::o;5997:468::-;6062:6;6070;6119:2;6107:9;6098:7;6094:23;6090:32;6087:119;;;6125:79;;:::i;:::-;6087:119;6245:1;6270:53;6315:7;6306:6;6295:9;6291:22;6270:53;:::i;:::-;6260:63;;6216:117;6372:2;6398:50;6440:7;6431:6;6420:9;6416:22;6398:50;:::i;:::-;6388:60;;6343:115;5997:468;;;;;:::o;6471:474::-;6539:6;6547;6596:2;6584:9;6575:7;6571:23;6567:32;6564:119;;;6602:79;;:::i;:::-;6564:119;6722:1;6747:53;6792:7;6783:6;6772:9;6768:22;6747:53;:::i;:::-;6737:63;;6693:117;6849:2;6875:53;6920:7;6911:6;6900:9;6896:22;6875:53;:::i;:::-;6865:63;;6820:118;6471:474;;;;;:::o;6951:934::-;7073:6;7081;7089;7097;7146:2;7134:9;7125:7;7121:23;7117:32;7114:119;;;7152:79;;:::i;:::-;7114:119;7300:1;7289:9;7285:17;7272:31;7330:18;7322:6;7319:30;7316:117;;;7352:79;;:::i;:::-;7316:117;7465:80;7537:7;7528:6;7517:9;7513:22;7465:80;:::i;:::-;7447:98;;;;7243:312;7622:2;7611:9;7607:18;7594:32;7653:18;7645:6;7642:30;7639:117;;;7675:79;;:::i;:::-;7639:117;7788:80;7860:7;7851:6;7840:9;7836:22;7788:80;:::i;:::-;7770:98;;;;7565:313;6951:934;;;;;;;:::o;7891:327::-;7949:6;7998:2;7986:9;7977:7;7973:23;7969:32;7966:119;;;8004:79;;:::i;:::-;7966:119;8124:1;8149:52;8193:7;8184:6;8173:9;8169:22;8149:52;:::i;:::-;8139:62;;8095:116;7891:327;;;;:::o;8224:349::-;8293:6;8342:2;8330:9;8321:7;8317:23;8313:32;8310:119;;;8348:79;;:::i;:::-;8310:119;8468:1;8493:63;8548:7;8539:6;8528:9;8524:22;8493:63;:::i;:::-;8483:73;;8439:127;8224:349;;;;:::o;8579:509::-;8648:6;8697:2;8685:9;8676:7;8672:23;8668:32;8665:119;;;8703:79;;:::i;:::-;8665:119;8851:1;8840:9;8836:17;8823:31;8881:18;8873:6;8870:30;8867:117;;;8903:79;;:::i;:::-;8867:117;9008:63;9063:7;9054:6;9043:9;9039:22;9008:63;:::i;:::-;8998:73;;8794:287;8579:509;;;;:::o;9094:329::-;9153:6;9202:2;9190:9;9181:7;9177:23;9173:32;9170:119;;;9208:79;;:::i;:::-;9170:119;9328:1;9353:53;9398:7;9389:6;9378:9;9374:22;9353:53;:::i;:::-;9343:63;;9299:117;9094:329;;;;:::o;9429:351::-;9499:6;9548:2;9536:9;9527:7;9523:23;9519:32;9516:119;;;9554:79;;:::i;:::-;9516:119;9674:1;9699:64;9755:7;9746:6;9735:9;9731:22;9699:64;:::i;:::-;9689:74;;9645:128;9429:351;;;;:::o;9786:654::-;9864:6;9872;9921:2;9909:9;9900:7;9896:23;9892:32;9889:119;;;9927:79;;:::i;:::-;9889:119;10047:1;10072:53;10117:7;10108:6;10097:9;10093:22;10072:53;:::i;:::-;10062:63;;10018:117;10202:2;10191:9;10187:18;10174:32;10233:18;10225:6;10222:30;10219:117;;;10255:79;;:::i;:::-;10219:117;10360:63;10415:7;10406:6;10395:9;10391:22;10360:63;:::i;:::-;10350:73;;10145:288;9786:654;;;;;:::o;10446:118::-;10533:24;10551:5;10533:24;:::i;:::-;10528:3;10521:37;10446:118;;:::o;10570:109::-;10651:21;10666:5;10651:21;:::i;:::-;10646:3;10639:34;10570:109;;:::o;10685:360::-;10771:3;10799:38;10831:5;10799:38;:::i;:::-;10853:70;10916:6;10911:3;10853:70;:::i;:::-;10846:77;;10932:52;10977:6;10972:3;10965:4;10958:5;10954:16;10932:52;:::i;:::-;11009:29;11031:6;11009:29;:::i;:::-;11004:3;11000:39;10993:46;;10775:270;10685:360;;;;:::o;11051:163::-;11154:53;11201:5;11154:53;:::i;:::-;11149:3;11142:66;11051:163;;:::o;11220:147::-;11315:45;11354:5;11315:45;:::i;:::-;11310:3;11303:58;11220:147;;:::o;11373:364::-;11461:3;11489:39;11522:5;11489:39;:::i;:::-;11544:71;11608:6;11603:3;11544:71;:::i;:::-;11537:78;;11624:52;11669:6;11664:3;11657:4;11650:5;11646:16;11624:52;:::i;:::-;11701:29;11723:6;11701:29;:::i;:::-;11696:3;11692:39;11685:46;;11465:272;11373:364;;;;:::o;11743:377::-;11849:3;11877:39;11910:5;11877:39;:::i;:::-;11932:89;12014:6;12009:3;11932:89;:::i;:::-;11925:96;;12030:52;12075:6;12070:3;12063:4;12056:5;12052:16;12030:52;:::i;:::-;12107:6;12102:3;12098:16;12091:23;;11853:267;11743:377;;;;:::o;12126:366::-;12268:3;12289:67;12353:2;12348:3;12289:67;:::i;:::-;12282:74;;12365:93;12454:3;12365:93;:::i;:::-;12483:2;12478:3;12474:12;12467:19;;12126:366;;;:::o;12498:::-;12640:3;12661:67;12725:2;12720:3;12661:67;:::i;:::-;12654:74;;12737:93;12826:3;12737:93;:::i;:::-;12855:2;12850:3;12846:12;12839:19;;12498:366;;;:::o;12870:::-;13012:3;13033:67;13097:2;13092:3;13033:67;:::i;:::-;13026:74;;13109:93;13198:3;13109:93;:::i;:::-;13227:2;13222:3;13218:12;13211:19;;12870:366;;;:::o;13242:::-;13384:3;13405:67;13469:2;13464:3;13405:67;:::i;:::-;13398:74;;13481:93;13570:3;13481:93;:::i;:::-;13599:2;13594:3;13590:12;13583:19;;13242:366;;;:::o;13614:::-;13756:3;13777:67;13841:2;13836:3;13777:67;:::i;:::-;13770:74;;13853:93;13942:3;13853:93;:::i;:::-;13971:2;13966:3;13962:12;13955:19;;13614:366;;;:::o;13986:::-;14128:3;14149:67;14213:2;14208:3;14149:67;:::i;:::-;14142:74;;14225:93;14314:3;14225:93;:::i;:::-;14343:2;14338:3;14334:12;14327:19;;13986:366;;;:::o;14358:::-;14500:3;14521:67;14585:2;14580:3;14521:67;:::i;:::-;14514:74;;14597:93;14686:3;14597:93;:::i;:::-;14715:2;14710:3;14706:12;14699:19;;14358:366;;;:::o;14730:::-;14872:3;14893:67;14957:2;14952:3;14893:67;:::i;:::-;14886:74;;14969:93;15058:3;14969:93;:::i;:::-;15087:2;15082:3;15078:12;15071:19;;14730:366;;;:::o;15102:::-;15244:3;15265:67;15329:2;15324:3;15265:67;:::i;:::-;15258:74;;15341:93;15430:3;15341:93;:::i;:::-;15459:2;15454:3;15450:12;15443:19;;15102:366;;;:::o;15474:::-;15616:3;15637:67;15701:2;15696:3;15637:67;:::i;:::-;15630:74;;15713:93;15802:3;15713:93;:::i;:::-;15831:2;15826:3;15822:12;15815:19;;15474:366;;;:::o;15846:::-;15988:3;16009:67;16073:2;16068:3;16009:67;:::i;:::-;16002:74;;16085:93;16174:3;16085:93;:::i;:::-;16203:2;16198:3;16194:12;16187:19;;15846:366;;;:::o;16218:::-;16360:3;16381:67;16445:2;16440:3;16381:67;:::i;:::-;16374:74;;16457:93;16546:3;16457:93;:::i;:::-;16575:2;16570:3;16566:12;16559:19;;16218:366;;;:::o;16590:::-;16732:3;16753:67;16817:2;16812:3;16753:67;:::i;:::-;16746:74;;16829:93;16918:3;16829:93;:::i;:::-;16947:2;16942:3;16938:12;16931:19;;16590:366;;;:::o;16962:::-;17104:3;17125:67;17189:2;17184:3;17125:67;:::i;:::-;17118:74;;17201:93;17290:3;17201:93;:::i;:::-;17319:2;17314:3;17310:12;17303:19;;16962:366;;;:::o;17334:::-;17476:3;17497:67;17561:2;17556:3;17497:67;:::i;:::-;17490:74;;17573:93;17662:3;17573:93;:::i;:::-;17691:2;17686:3;17682:12;17675:19;;17334:366;;;:::o;17706:::-;17848:3;17869:67;17933:2;17928:3;17869:67;:::i;:::-;17862:74;;17945:93;18034:3;17945:93;:::i;:::-;18063:2;18058:3;18054:12;18047:19;;17706:366;;;:::o;18078:::-;18220:3;18241:67;18305:2;18300:3;18241:67;:::i;:::-;18234:74;;18317:93;18406:3;18317:93;:::i;:::-;18435:2;18430:3;18426:12;18419:19;;18078:366;;;:::o;18450:::-;18592:3;18613:67;18677:2;18672:3;18613:67;:::i;:::-;18606:74;;18689:93;18778:3;18689:93;:::i;:::-;18807:2;18802:3;18798:12;18791:19;;18450:366;;;:::o;18822:::-;18964:3;18985:67;19049:2;19044:3;18985:67;:::i;:::-;18978:74;;19061:93;19150:3;19061:93;:::i;:::-;19179:2;19174:3;19170:12;19163:19;;18822:366;;;:::o;19194:::-;19336:3;19357:67;19421:2;19416:3;19357:67;:::i;:::-;19350:74;;19433:93;19522:3;19433:93;:::i;:::-;19551:2;19546:3;19542:12;19535:19;;19194:366;;;:::o;19566:::-;19708:3;19729:67;19793:2;19788:3;19729:67;:::i;:::-;19722:74;;19805:93;19894:3;19805:93;:::i;:::-;19923:2;19918:3;19914:12;19907:19;;19566:366;;;:::o;19938:::-;20080:3;20101:67;20165:2;20160:3;20101:67;:::i;:::-;20094:74;;20177:93;20266:3;20177:93;:::i;:::-;20295:2;20290:3;20286:12;20279:19;;19938:366;;;:::o;20310:::-;20452:3;20473:67;20537:2;20532:3;20473:67;:::i;:::-;20466:74;;20549:93;20638:3;20549:93;:::i;:::-;20667:2;20662:3;20658:12;20651:19;;20310:366;;;:::o;20682:::-;20824:3;20845:67;20909:2;20904:3;20845:67;:::i;:::-;20838:74;;20921:93;21010:3;20921:93;:::i;:::-;21039:2;21034:3;21030:12;21023:19;;20682:366;;;:::o;21054:::-;21196:3;21217:67;21281:2;21276:3;21217:67;:::i;:::-;21210:74;;21293:93;21382:3;21293:93;:::i;:::-;21411:2;21406:3;21402:12;21395:19;;21054:366;;;:::o;21426:118::-;21513:24;21531:5;21513:24;:::i;:::-;21508:3;21501:37;21426:118;;:::o;21550:435::-;21730:3;21752:95;21843:3;21834:6;21752:95;:::i;:::-;21745:102;;21864:95;21955:3;21946:6;21864:95;:::i;:::-;21857:102;;21976:3;21969:10;;21550:435;;;;;:::o;21991:222::-;22084:4;22122:2;22111:9;22107:18;22099:26;;22135:71;22203:1;22192:9;22188:17;22179:6;22135:71;:::i;:::-;21991:222;;;;:::o;22219:640::-;22414:4;22452:3;22441:9;22437:19;22429:27;;22466:71;22534:1;22523:9;22519:17;22510:6;22466:71;:::i;:::-;22547:72;22615:2;22604:9;22600:18;22591:6;22547:72;:::i;:::-;22629;22697:2;22686:9;22682:18;22673:6;22629:72;:::i;:::-;22748:9;22742:4;22738:20;22733:2;22722:9;22718:18;22711:48;22776:76;22847:4;22838:6;22776:76;:::i;:::-;22768:84;;22219:640;;;;;;;:::o;22865:348::-;22994:4;23032:2;23021:9;23017:18;23009:26;;23045:71;23113:1;23102:9;23098:17;23089:6;23045:71;:::i;:::-;23126:80;23202:2;23191:9;23187:18;23178:6;23126:80;:::i;:::-;22865:348;;;;;:::o;23219:210::-;23306:4;23344:2;23333:9;23329:18;23321:26;;23357:65;23419:1;23408:9;23404:17;23395:6;23357:65;:::i;:::-;23219:210;;;;:::o;23435:254::-;23544:4;23582:2;23571:9;23567:18;23559:26;;23595:87;23679:1;23668:9;23664:17;23655:6;23595:87;:::i;:::-;23435:254;;;;:::o;23695:313::-;23808:4;23846:2;23835:9;23831:18;23823:26;;23895:9;23889:4;23885:20;23881:1;23870:9;23866:17;23859:47;23923:78;23996:4;23987:6;23923:78;:::i;:::-;23915:86;;23695:313;;;;:::o;24014:419::-;24180:4;24218:2;24207:9;24203:18;24195:26;;24267:9;24261:4;24257:20;24253:1;24242:9;24238:17;24231:47;24295:131;24421:4;24295:131;:::i;:::-;24287:139;;24014:419;;;:::o;24439:::-;24605:4;24643:2;24632:9;24628:18;24620:26;;24692:9;24686:4;24682:20;24678:1;24667:9;24663:17;24656:47;24720:131;24846:4;24720:131;:::i;:::-;24712:139;;24439:419;;;:::o;24864:::-;25030:4;25068:2;25057:9;25053:18;25045:26;;25117:9;25111:4;25107:20;25103:1;25092:9;25088:17;25081:47;25145:131;25271:4;25145:131;:::i;:::-;25137:139;;24864:419;;;:::o;25289:::-;25455:4;25493:2;25482:9;25478:18;25470:26;;25542:9;25536:4;25532:20;25528:1;25517:9;25513:17;25506:47;25570:131;25696:4;25570:131;:::i;:::-;25562:139;;25289:419;;;:::o;25714:::-;25880:4;25918:2;25907:9;25903:18;25895:26;;25967:9;25961:4;25957:20;25953:1;25942:9;25938:17;25931:47;25995:131;26121:4;25995:131;:::i;:::-;25987:139;;25714:419;;;:::o;26139:::-;26305:4;26343:2;26332:9;26328:18;26320:26;;26392:9;26386:4;26382:20;26378:1;26367:9;26363:17;26356:47;26420:131;26546:4;26420:131;:::i;:::-;26412:139;;26139:419;;;:::o;26564:::-;26730:4;26768:2;26757:9;26753:18;26745:26;;26817:9;26811:4;26807:20;26803:1;26792:9;26788:17;26781:47;26845:131;26971:4;26845:131;:::i;:::-;26837:139;;26564:419;;;:::o;26989:::-;27155:4;27193:2;27182:9;27178:18;27170:26;;27242:9;27236:4;27232:20;27228:1;27217:9;27213:17;27206:47;27270:131;27396:4;27270:131;:::i;:::-;27262:139;;26989:419;;;:::o;27414:::-;27580:4;27618:2;27607:9;27603:18;27595:26;;27667:9;27661:4;27657:20;27653:1;27642:9;27638:17;27631:47;27695:131;27821:4;27695:131;:::i;:::-;27687:139;;27414:419;;;:::o;27839:::-;28005:4;28043:2;28032:9;28028:18;28020:26;;28092:9;28086:4;28082:20;28078:1;28067:9;28063:17;28056:47;28120:131;28246:4;28120:131;:::i;:::-;28112:139;;27839:419;;;:::o;28264:::-;28430:4;28468:2;28457:9;28453:18;28445:26;;28517:9;28511:4;28507:20;28503:1;28492:9;28488:17;28481:47;28545:131;28671:4;28545:131;:::i;:::-;28537:139;;28264:419;;;:::o;28689:::-;28855:4;28893:2;28882:9;28878:18;28870:26;;28942:9;28936:4;28932:20;28928:1;28917:9;28913:17;28906:47;28970:131;29096:4;28970:131;:::i;:::-;28962:139;;28689:419;;;:::o;29114:::-;29280:4;29318:2;29307:9;29303:18;29295:26;;29367:9;29361:4;29357:20;29353:1;29342:9;29338:17;29331:47;29395:131;29521:4;29395:131;:::i;:::-;29387:139;;29114:419;;;:::o;29539:::-;29705:4;29743:2;29732:9;29728:18;29720:26;;29792:9;29786:4;29782:20;29778:1;29767:9;29763:17;29756:47;29820:131;29946:4;29820:131;:::i;:::-;29812:139;;29539:419;;;:::o;29964:::-;30130:4;30168:2;30157:9;30153:18;30145:26;;30217:9;30211:4;30207:20;30203:1;30192:9;30188:17;30181:47;30245:131;30371:4;30245:131;:::i;:::-;30237:139;;29964:419;;;:::o;30389:::-;30555:4;30593:2;30582:9;30578:18;30570:26;;30642:9;30636:4;30632:20;30628:1;30617:9;30613:17;30606:47;30670:131;30796:4;30670:131;:::i;:::-;30662:139;;30389:419;;;:::o;30814:::-;30980:4;31018:2;31007:9;31003:18;30995:26;;31067:9;31061:4;31057:20;31053:1;31042:9;31038:17;31031:47;31095:131;31221:4;31095:131;:::i;:::-;31087:139;;30814:419;;;:::o;31239:::-;31405:4;31443:2;31432:9;31428:18;31420:26;;31492:9;31486:4;31482:20;31478:1;31467:9;31463:17;31456:47;31520:131;31646:4;31520:131;:::i;:::-;31512:139;;31239:419;;;:::o;31664:::-;31830:4;31868:2;31857:9;31853:18;31845:26;;31917:9;31911:4;31907:20;31903:1;31892:9;31888:17;31881:47;31945:131;32071:4;31945:131;:::i;:::-;31937:139;;31664:419;;;:::o;32089:::-;32255:4;32293:2;32282:9;32278:18;32270:26;;32342:9;32336:4;32332:20;32328:1;32317:9;32313:17;32306:47;32370:131;32496:4;32370:131;:::i;:::-;32362:139;;32089:419;;;:::o;32514:::-;32680:4;32718:2;32707:9;32703:18;32695:26;;32767:9;32761:4;32757:20;32753:1;32742:9;32738:17;32731:47;32795:131;32921:4;32795:131;:::i;:::-;32787:139;;32514:419;;;:::o;32939:::-;33105:4;33143:2;33132:9;33128:18;33120:26;;33192:9;33186:4;33182:20;33178:1;33167:9;33163:17;33156:47;33220:131;33346:4;33220:131;:::i;:::-;33212:139;;32939:419;;;:::o;33364:::-;33530:4;33568:2;33557:9;33553:18;33545:26;;33617:9;33611:4;33607:20;33603:1;33592:9;33588:17;33581:47;33645:131;33771:4;33645:131;:::i;:::-;33637:139;;33364:419;;;:::o;33789:::-;33955:4;33993:2;33982:9;33978:18;33970:26;;34042:9;34036:4;34032:20;34028:1;34017:9;34013:17;34006:47;34070:131;34196:4;34070:131;:::i;:::-;34062:139;;33789:419;;;:::o;34214:::-;34380:4;34418:2;34407:9;34403:18;34395:26;;34467:9;34461:4;34457:20;34453:1;34442:9;34438:17;34431:47;34495:131;34621:4;34495:131;:::i;:::-;34487:139;;34214:419;;;:::o;34639:222::-;34732:4;34770:2;34759:9;34755:18;34747:26;;34783:71;34851:1;34840:9;34836:17;34827:6;34783:71;:::i;:::-;34639:222;;;;:::o;34867:129::-;34901:6;34928:20;;:::i;:::-;34918:30;;34957:33;34985:4;34977:6;34957:33;:::i;:::-;34867:129;;;:::o;35002:75::-;35035:6;35068:2;35062:9;35052:19;;35002:75;:::o;35083:307::-;35144:4;35234:18;35226:6;35223:30;35220:56;;;35256:18;;:::i;:::-;35220:56;35294:29;35316:6;35294:29;:::i;:::-;35286:37;;35378:4;35372;35368:15;35360:23;;35083:307;;;:::o;35396:308::-;35458:4;35548:18;35540:6;35537:30;35534:56;;;35570:18;;:::i;:::-;35534:56;35608:29;35630:6;35608:29;:::i;:::-;35600:37;;35692:4;35686;35682:15;35674:23;;35396:308;;;:::o;35710:98::-;35761:6;35795:5;35789:12;35779:22;;35710:98;;;:::o;35814:99::-;35866:6;35900:5;35894:12;35884:22;;35814:99;;;:::o;35919:168::-;36002:11;36036:6;36031:3;36024:19;36076:4;36071:3;36067:14;36052:29;;35919:168;;;;:::o;36093:169::-;36177:11;36211:6;36206:3;36199:19;36251:4;36246:3;36242:14;36227:29;;36093:169;;;;:::o;36268:148::-;36370:11;36407:3;36392:18;;36268:148;;;;:::o;36422:305::-;36462:3;36481:20;36499:1;36481:20;:::i;:::-;36476:25;;36515:20;36533:1;36515:20;:::i;:::-;36510:25;;36669:1;36601:66;36597:74;36594:1;36591:81;36588:107;;;36675:18;;:::i;:::-;36588:107;36719:1;36716;36712:9;36705:16;;36422:305;;;;:::o;36733:185::-;36773:1;36790:20;36808:1;36790:20;:::i;:::-;36785:25;;36824:20;36842:1;36824:20;:::i;:::-;36819:25;;36863:1;36853:35;;36868:18;;:::i;:::-;36853:35;36910:1;36907;36903:9;36898:14;;36733:185;;;;:::o;36924:348::-;36964:7;36987:20;37005:1;36987:20;:::i;:::-;36982:25;;37021:20;37039:1;37021:20;:::i;:::-;37016:25;;37209:1;37141:66;37137:74;37134:1;37131:81;37126:1;37119:9;37112:17;37108:105;37105:131;;;37216:18;;:::i;:::-;37105:131;37264:1;37261;37257:9;37246:20;;36924:348;;;;:::o;37278:191::-;37318:4;37338:20;37356:1;37338:20;:::i;:::-;37333:25;;37372:20;37390:1;37372:20;:::i;:::-;37367:25;;37411:1;37408;37405:8;37402:34;;;37416:18;;:::i;:::-;37402:34;37461:1;37458;37454:9;37446:17;;37278:191;;;;:::o;37475:96::-;37512:7;37541:24;37559:5;37541:24;:::i;:::-;37530:35;;37475:96;;;:::o;37577:90::-;37611:7;37654:5;37647:13;37640:21;37629:32;;37577:90;;;:::o;37673:149::-;37709:7;37749:66;37742:5;37738:78;37727:89;;37673:149;;;:::o;37828:126::-;37865:7;37905:42;37898:5;37894:54;37883:65;;37828:126;;;:::o;37960:77::-;37997:7;38026:5;38015:16;;37960:77;;;:::o;38043:142::-;38109:9;38142:37;38173:5;38142:37;:::i;:::-;38129:50;;38043:142;;;:::o;38191:121::-;38249:9;38282:24;38300:5;38282:24;:::i;:::-;38269:37;;38191:121;;;:::o;38318:126::-;38368:9;38401:37;38432:5;38401:37;:::i;:::-;38388:50;;38318:126;;;:::o;38450:113::-;38500:9;38533:24;38551:5;38533:24;:::i;:::-;38520:37;;38450:113;;;:::o;38569:154::-;38653:6;38648:3;38643;38630:30;38715:1;38706:6;38701:3;38697:16;38690:27;38569:154;;;:::o;38729:307::-;38797:1;38807:113;38821:6;38818:1;38815:13;38807:113;;;38906:1;38901:3;38897:11;38891:18;38887:1;38882:3;38878:11;38871:39;38843:2;38840:1;38836:10;38831:15;;38807:113;;;38938:6;38935:1;38932:13;38929:101;;;39018:1;39009:6;39004:3;39000:16;38993:27;38929:101;38778:258;38729:307;;;:::o;39042:320::-;39086:6;39123:1;39117:4;39113:12;39103:22;;39170:1;39164:4;39160:12;39191:18;39181:81;;39247:4;39239:6;39235:17;39225:27;;39181:81;39309:2;39301:6;39298:14;39278:18;39275:38;39272:84;;;39328:18;;:::i;:::-;39272:84;39093:269;39042:320;;;:::o;39368:281::-;39451:27;39473:4;39451:27;:::i;:::-;39443:6;39439:40;39581:6;39569:10;39566:22;39545:18;39533:10;39530:34;39527:62;39524:88;;;39592:18;;:::i;:::-;39524:88;39632:10;39628:2;39621:22;39411:238;39368:281;;:::o;39655:233::-;39694:3;39717:24;39735:5;39717:24;:::i;:::-;39708:33;;39763:66;39756:5;39753:77;39750:103;;;39833:18;;:::i;:::-;39750:103;39880:1;39873:5;39869:13;39862:20;;39655:233;;;:::o;39894:176::-;39926:1;39943:20;39961:1;39943:20;:::i;:::-;39938:25;;39977:20;39995:1;39977:20;:::i;:::-;39972:25;;40016:1;40006:35;;40021:18;;:::i;:::-;40006:35;40062:1;40059;40055:9;40050:14;;39894:176;;;;:::o;40076:180::-;40124:77;40121:1;40114:88;40221:4;40218:1;40211:15;40245:4;40242:1;40235:15;40262:180;40310:77;40307:1;40300:88;40407:4;40404:1;40397:15;40431:4;40428:1;40421:15;40448:180;40496:77;40493:1;40486:88;40593:4;40590:1;40583:15;40617:4;40614:1;40607:15;40634:180;40682:77;40679:1;40672:88;40779:4;40776:1;40769:15;40803:4;40800:1;40793:15;40820:180;40868:77;40865:1;40858:88;40965:4;40962:1;40955:15;40989:4;40986:1;40979:15;41006:180;41054:77;41051:1;41044:88;41151:4;41148:1;41141:15;41175:4;41172:1;41165:15;41192:117;41301:1;41298;41291:12;41315:117;41424:1;41421;41414:12;41438:117;41547:1;41544;41537:12;41561:117;41670:1;41667;41660:12;41684:117;41793:1;41790;41783:12;41807:117;41916:1;41913;41906:12;41930:102;41971:6;42022:2;42018:7;42013:2;42006:5;42002:14;41998:28;41988:38;;41930:102;;;:::o;42038:230::-;42178:34;42174:1;42166:6;42162:14;42155:58;42247:13;42242:2;42234:6;42230:15;42223:38;42038:230;:::o;42274:237::-;42414:34;42410:1;42402:6;42398:14;42391:58;42483:20;42478:2;42470:6;42466:15;42459:45;42274:237;:::o;42517:225::-;42657:34;42653:1;42645:6;42641:14;42634:58;42726:8;42721:2;42713:6;42709:15;42702:33;42517:225;:::o;42748:165::-;42888:17;42884:1;42876:6;42872:14;42865:41;42748:165;:::o;42919:178::-;43059:30;43055:1;43047:6;43043:14;43036:54;42919:178;:::o;43103:223::-;43243:34;43239:1;43231:6;43227:14;43220:58;43312:6;43307:2;43299:6;43295:15;43288:31;43103:223;:::o;43332:175::-;43472:27;43468:1;43460:6;43456:14;43449:51;43332:175;:::o;43513:231::-;43653:34;43649:1;43641:6;43637:14;43630:58;43722:14;43717:2;43709:6;43705:15;43698:39;43513:231;:::o;43750:165::-;43890:17;43886:1;43878:6;43874:14;43867:41;43750:165;:::o;43921:166::-;44061:18;44057:1;44049:6;44045:14;44038:42;43921:166;:::o;44093:243::-;44233:34;44229:1;44221:6;44217:14;44210:58;44302:26;44297:2;44289:6;44285:15;44278:51;44093:243;:::o;44342:229::-;44482:34;44478:1;44470:6;44466:14;44459:58;44551:12;44546:2;44538:6;44534:15;44527:37;44342:229;:::o;44577:228::-;44717:34;44713:1;44705:6;44701:14;44694:58;44786:11;44781:2;44773:6;44769:15;44762:36;44577:228;:::o;44811:182::-;44951:34;44947:1;44939:6;44935:14;44928:58;44811:182;:::o;44999:236::-;45139:34;45135:1;45127:6;45123:14;45116:58;45208:19;45203:2;45195:6;45191:15;45184:44;44999:236;:::o;45241:231::-;45381:34;45377:1;45369:6;45365:14;45358:58;45450:14;45445:2;45437:6;45433:15;45426:39;45241:231;:::o;45478:160::-;45618:12;45614:1;45606:6;45602:14;45595:36;45478:160;:::o;45644:161::-;45784:13;45780:1;45772:6;45768:14;45761:37;45644:161;:::o;45811:182::-;45951:34;45947:1;45939:6;45935:14;45928:58;45811:182;:::o;45999:228::-;46139:34;46135:1;46127:6;46123:14;46116:58;46208:11;46203:2;46195:6;46191:15;46184:36;45999:228;:::o;46233:220::-;46373:34;46369:1;46361:6;46357:14;46350:58;46442:3;46437:2;46429:6;46425:15;46418:28;46233:220;:::o;46459:236::-;46599:34;46595:1;46587:6;46583:14;46576:58;46668:19;46663:2;46655:6;46651:15;46644:44;46459:236;:::o;46701:231::-;46841:34;46837:1;46829:6;46825:14;46818:58;46910:14;46905:2;46897:6;46893:15;46886:39;46701:231;:::o;46938:236::-;47078:34;47074:1;47066:6;47062:14;47055:58;47147:19;47142:2;47134:6;47130:15;47123:44;46938:236;:::o;47180:171::-;47320:23;47316:1;47308:6;47304:14;47297:47;47180:171;:::o;47357:122::-;47430:24;47448:5;47430:24;:::i;:::-;47423:5;47420:35;47410:63;;47469:1;47466;47459:12;47410:63;47357:122;:::o;47485:116::-;47555:21;47570:5;47555:21;:::i;:::-;47548:5;47545:32;47535:60;;47591:1;47588;47581:12;47535:60;47485:116;:::o;47607:120::-;47679:23;47696:5;47679:23;:::i;:::-;47672:5;47669:34;47659:62;;47717:1;47714;47707:12;47659:62;47607:120;:::o;47733:122::-;47806:24;47824:5;47806:24;:::i;:::-;47799:5;47796:35;47786:63;;47845:1;47842;47835:12;47786:63;47733:122;:::o

Swarm Source

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