Feature Tip: Add private address tag to any address under My Name Tag !
ERC-721
Overview
Max Total Supply
3,888 MNN
Holders
1,068
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
12 MNNLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
MineNations
Compiler Version
v0.8.0+commit.c7dfd78e
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-03-27 */ pragma solidity ^0.8.0; // SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Counters.sol) /** * @title Counters * @author Matt Condon (@shrugs) * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number * of elements in a mapping, issuing ERC721 ids, or counting request ids. * * Include with `using Counters for Counters.Counter;` */ library Counters { struct Counter { // This variable should never be directly accessed by users of the library: interactions must be restricted to // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add // this feature: see https://github.com/ethereum/solidity/issues/4637 uint256 _value; // default: 0 } function current(Counter storage counter) internal view returns (uint256) { return counter._value; } function increment(Counter storage counter) internal { unchecked { counter._value += 1; } } function decrement(Counter storage counter) internal { uint256 value = counter._value; require(value > 0, "Counter: decrement overflow"); unchecked { counter._value = value - 1; } } function reset(Counter storage counter) internal { counter._value = 0; } } // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // OpenZeppelin Contracts v4.4.1 (utils/math/SafeMath.sol) // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol) /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol) /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol) /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/ERC721.sol) /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); _afterTokenTransfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); _afterTokenTransfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer from incorrect owner"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); _afterTokenTransfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits a {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC721: approve to caller"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/ERC721URIStorage.sol) /** * @dev ERC721 token with storage based token URI management. */ abstract contract ERC721URIStorage is ERC721 { using Strings for uint256; // Optional mapping for token URIs mapping(uint256 => string) private _tokenURIs; /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721URIStorage: URI query for nonexistent token"); string memory _tokenURI = _tokenURIs[tokenId]; string memory base = _baseURI(); // If there is no base URI, return the token URI. if (bytes(base).length == 0) { return _tokenURI; } // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked). if (bytes(_tokenURI).length > 0) { return string(abi.encodePacked(base, _tokenURI)); } return super.tokenURI(tokenId); } /** * @dev Sets `_tokenURI` as the tokenURI of `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual { require(_exists(tokenId), "ERC721URIStorage: URI set of nonexistent token"); _tokenURIs[tokenId] = _tokenURI; } /** * @dev 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 override { super._burn(tokenId); if (bytes(_tokenURIs[tokenId]).length != 0) { delete _tokenURIs[tokenId]; } } } // OpenZeppelin Contracts (last updated v4.5.0) (utils/cryptography/MerkleProof.sol) /** * @dev These functions deal with verification of Merkle Trees proofs. * * The proofs can be generated using the JavaScript library * https://github.com/miguelmota/merkletreejs[merkletreejs]. * Note: the hashing algorithm should be keccak256 and pair sorting should be enabled. * * See `test/utils/cryptography/MerkleProof.test.js` for some examples. */ library MerkleProof { /** * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree * defined by `root`. For this, a `proof` must be provided, containing * sibling hashes on the branch from the leaf to the root of the tree. Each * pair of leaves and each pair of pre-images are assumed to be sorted. */ function verify( bytes32[] memory proof, bytes32 root, bytes32 leaf ) internal pure returns (bool) { return processProof(proof, leaf) == root; } /** * @dev Returns the rebuilt hash obtained by traversing a Merklee tree up * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt * hash matches the root of the tree. When processing the proof, the pairs * of leafs & pre-images are assumed to be sorted. * * _Available since v4.4._ */ function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) { bytes32 computedHash = leaf; for (uint256 i = 0; i < proof.length; i++) { bytes32 proofElement = proof[i]; if (computedHash <= proofElement) { // Hash(current computed hash + current element of the proof) computedHash = _efficientHash(computedHash, proofElement); } else { // Hash(current element of the proof + current computed hash) computedHash = _efficientHash(proofElement, computedHash); } } return computedHash; } function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) { assembly { mstore(0x00, a) mstore(0x20, b) value := keccak256(0x00, 0x40) } } } contract MineNations is ERC721URIStorage, Ownable { using SafeMath for uint256; using Counters for Counters.Counter; Counters.Counter private _tokenIds; string private baseURI; string public notRevealedURI; string public baseExtension = ".json"; bytes32 public merkleRoot; address public community = 0x26F6fbe9b2888De3A36870Ddf241e28Fa134A3D6; bool public revealed = false; uint256 public presaleEnded; uint256 public publicPrice = 0.06 ether; uint256 public whitelistPrice = 0.05 ether; mapping (address => uint) public ownWallet; constructor(string memory _name, string memory _symbol, string memory _initBaseURI, string memory _initNotRevealedURI) ERC721(_name, _symbol) { baseURI = _initBaseURI; notRevealedURI = _initNotRevealedURI; mintItem(community, 35); } /* ****************** */ /* INTERNAL FUNCTIONS */ /* ****************** */ function _baseURI() internal view virtual override returns (string memory) { if(revealed == false){ return notRevealedURI; } return baseURI; } /* **************** */ /* PUBLIC FUNCTIONS */ /* **************** */ function totalSupply() public view returns (uint256) { return _tokenIds.current(); } function tokenURI (uint256 tokenId) public view virtual override returns(string memory){ require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory currentBaseURI = _baseURI(); if(revealed == false){ return bytes(currentBaseURI).length > 0 ? string( abi.encodePacked( currentBaseURI, Strings.toString(1), baseExtension ) ) : ""; } return bytes(currentBaseURI).length > 0 ? string( abi.encodePacked( currentBaseURI, Strings.toString(tokenId), baseExtension ) ) : ""; } function whitelistMint(address _to, uint _count, bytes32[] memory _merkleProof) public payable { bytes32 leaf = keccak256(abi.encodePacked(msg.sender)); require(MerkleProof.verify(_merkleProof, merkleRoot, leaf), "Invalid proof"); require(totalSupply() + _count <= 10000, "Can't mint anymore"); require(presaleEnded > 0, "Can't mint the nft"); if(block.timestamp < presaleEnded) { require(ownWallet[msg.sender] + _count <= 2, "Maxium is 2 during pre-sale step"); require(msg.value >= _count * whitelistPrice, "Not match balance"); } else { require(ownWallet[msg.sender] + _count <= 5, "Maxium is 5"); require(msg.value >= _count * publicPrice, "Not match balance"); } for(uint i = 0; i < _count; i++) { _tokenIds.increment(); ownWallet[_to]++; _safeMint(_to, _tokenIds.current()); } } function mintItem(address _to, uint _count) public payable { require(totalSupply() + _count <= 10000, "Can't mint anymore"); if(msg.sender != owner() && msg.sender !=community) { require(presaleEnded > 0, "Can't mint the nft"); require(block.timestamp >= presaleEnded, "Only whitelists can be mint during the pre-sale step"); require(msg.value >= _count * publicPrice, "Not match balance"); require(ownWallet[msg.sender] + _count <= 3, "Maxium is 3"); } for(uint i = 0; i < _count; i++) { _tokenIds.increment(); ownWallet[_to]++; _safeMint(_to, _tokenIds.current()); } } function status() public view returns (bool) { return block.timestamp < presaleEnded; } /* *************** */ /* OWNER FUNCTIONS */ /* *************** */ function setBaseURI(string memory _newBaseURI) public onlyOwner { baseURI = _newBaseURI; } function setNotRevealedURI(string memory _newNotRevealedURI) public onlyOwner { notRevealedURI = _newNotRevealedURI; } function setBaseExtension(string memory _newBaseExtension) public onlyOwner { baseExtension = _newBaseExtension; } function setMerkleRoot(bytes32 _merkleRoot) external onlyOwner{ merkleRoot = _merkleRoot; } function startReveal() public onlyOwner { revealed = true; } function startPresale() public onlyOwner { presaleEnded = block.timestamp + 1 days; } function setPublicPrice(uint256 _newPublicPrice) public onlyOwner { publicPrice = _newPublicPrice; } function setWhitelistPrice(uint256 _newWhitelistPrice) public onlyOwner { whitelistPrice = _newWhitelistPrice; } function isPresale() public view returns (bool) { return block.timestamp < presaleEnded; } function isWhitelist(bytes32[] memory _merkleProof) public view returns (bool) { bytes32 leaf = keccak256(abi.encodePacked(msg.sender)); return MerkleProof.verify(_merkleProof, merkleRoot, leaf); } function withdraw() external onlyOwner { address _owner = owner(); payable(_owner).transfer( address(this).balance ); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"string","name":"_initBaseURI","type":"string"},{"internalType":"string","name":"_initNotRevealedURI","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"community","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isPresale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"_merkleProof","type":"bytes32[]"}],"name":"isWhitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"merkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_count","type":"uint256"}],"name":"mintItem","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"notRevealedURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"ownWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presaleEnded","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseExtension","type":"string"}],"name":"setBaseExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_merkleRoot","type":"bytes32"}],"name":"setMerkleRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newNotRevealedURI","type":"string"}],"name":"setNotRevealedURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPublicPrice","type":"uint256"}],"name":"setPublicPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newWhitelistPrice","type":"uint256"}],"name":"setWhitelistPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startPresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startReveal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"status","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_count","type":"uint256"},{"internalType":"bytes32[]","name":"_merkleProof","type":"bytes32[]"}],"name":"whitelistMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"whitelistPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600b90805190602001906200005192919062000b43565b507326f6fbe9b2888de3a36870ddf241e28fa134a3d6600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600d60146101000a81548160ff02191690831515021790555066d529ae9e860000600f5566b1a2bc2ec50000601055348015620000e557600080fd5b5060405162005cd638038062005cd683398181016040528101906200010b919062000ca8565b838381600090805190602001906200012592919062000b43565b5080600190805190602001906200013e92919062000b43565b5050506200016162000155620001d260201b60201c565b620001da60201b60201c565b81600990805190602001906200017992919062000b43565b5080600a90805190602001906200019292919062000b43565b50620001c8600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166023620002a060201b60201c565b50505050620014c9565b600033905090565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61271081620002b4620005da60201b60201c565b620002c091906200122f565b111562000304576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002fb9062001113565b60405180910390fd5b62000314620005f860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141580156200039e5750600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b156200051d576000600e5411620003ec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003e39062001179565b60405180910390fd5b600e5442101562000434576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200042b9062001157565b60405180910390fd5b600f54816200044491906200128c565b34101562000489576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200048090620010f1565b60405180910390fd5b600381601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054620004d891906200122f565b11156200051c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200051390620010ad565b60405180910390fd5b5b60005b81811015620005d5576200054060086200062260201b620020031760201c565b601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906200059290620013c3565b9190505550620005bf83620005b360086200063860201b620020191760201c565b6200064660201b60201c565b8080620005cc90620013c3565b91505062000520565b505050565b6000620005f360086200063860201b620020191760201c565b905090565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6001816000016000828254019250508190555050565b600081600001549050919050565b620006688282604051806020016040528060008152506200066c60201b60201c565b5050565b6200067e8383620006da60201b60201c565b620006936000848484620008d460201b60201c565b620006d5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006cc906200108b565b60405180910390fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156200074d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007449062001135565b60405180910390fd5b6200075e8162000a8e60201b60201c565b15620007a1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200079890620010cf565b60405180910390fd5b620007b56000838362000afa60201b60201c565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546200080791906200122f565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4620008d06000838362000aff60201b60201c565b5050565b6000620009028473ffffffffffffffffffffffffffffffffffffffff1662000b0460201b620020271760201c565b1562000a81578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0262000934620001d260201b60201c565b8786866040518563ffffffff1660e01b815260040162000958949392919062001037565b602060405180830381600087803b1580156200097357600080fd5b505af1925050508015620009a757506040513d601f19601f82011682018060405250810190620009a4919062000c7c565b60015b62000a30573d8060008114620009da576040519150601f19603f3d011682016040523d82523d6000602084013e620009df565b606091505b5060008151141562000a28576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a1f906200108b565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505062000a86565b600190505b949350505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b505050565b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff16803b806020016040519081016040528181526000908060200190933c51119050919050565b82805462000b51906200138d565b90600052602060002090601f01602090048101928262000b75576000855562000bc1565b82601f1062000b9057805160ff191683800117855562000bc1565b8280016001018555821562000bc1579182015b8281111562000bc057825182559160200191906001019062000ba3565b5b50905062000bd0919062000bd4565b5090565b5b8082111562000bef57600081600090555060010162000bd5565b5090565b600062000c0a62000c0484620011cf565b6200119b565b90508281526020810184848401111562000c2357600080fd5b62000c3084828562001357565b509392505050565b60008151905062000c4981620014af565b92915050565b600082601f83011262000c6157600080fd5b815162000c7384826020860162000bf3565b91505092915050565b60006020828403121562000c8f57600080fd5b600062000c9f8482850162000c38565b91505092915050565b6000806000806080858703121562000cbf57600080fd5b600085015167ffffffffffffffff81111562000cda57600080fd5b62000ce88782880162000c4f565b945050602085015167ffffffffffffffff81111562000d0657600080fd5b62000d148782880162000c4f565b935050604085015167ffffffffffffffff81111562000d3257600080fd5b62000d408782880162000c4f565b925050606085015167ffffffffffffffff81111562000d5e57600080fd5b62000d6c8782880162000c4f565b91505092959194509250565b62000d8381620012ed565b82525050565b600062000d968262001202565b62000da281856200120d565b935062000db481856020860162001357565b62000dbf816200149e565b840191505092915050565b600062000dd96032836200121e565b91507f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008301527f63656976657220696d706c656d656e74657200000000000000000000000000006020830152604082019050919050565b600062000e41600b836200121e565b91507f4d617869756d20697320330000000000000000000000000000000000000000006000830152602082019050919050565b600062000e83601c836200121e565b91507f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006000830152602082019050919050565b600062000ec56011836200121e565b91507f4e6f74206d617463682062616c616e63650000000000000000000000000000006000830152602082019050919050565b600062000f076012836200121e565b91507f43616e2774206d696e7420616e796d6f726500000000000000000000000000006000830152602082019050919050565b600062000f496020836200121e565b91507f4552433732313a206d696e7420746f20746865207a65726f20616464726573736000830152602082019050919050565b600062000f8b6034836200121e565b91507f4f6e6c792077686974656c697374732063616e206265206d696e74206475726960008301527f6e6720746865207072652d73616c6520737465700000000000000000000000006020830152604082019050919050565b600062000ff36012836200121e565b91507f43616e2774206d696e7420746865206e667400000000000000000000000000006000830152602082019050919050565b62001031816200134d565b82525050565b60006080820190506200104e600083018762000d78565b6200105d602083018662000d78565b6200106c604083018562001026565b818103606083015262001080818462000d89565b905095945050505050565b60006020820190508181036000830152620010a68162000dca565b9050919050565b60006020820190508181036000830152620010c88162000e32565b9050919050565b60006020820190508181036000830152620010ea8162000e74565b9050919050565b600060208201905081810360008301526200110c8162000eb6565b9050919050565b600060208201905081810360008301526200112e8162000ef8565b9050919050565b60006020820190508181036000830152620011508162000f3a565b9050919050565b60006020820190508181036000830152620011728162000f7c565b9050919050565b60006020820190508181036000830152620011948162000fe4565b9050919050565b6000604051905081810181811067ffffffffffffffff82111715620011c557620011c46200146f565b5b8060405250919050565b600067ffffffffffffffff821115620011ed57620011ec6200146f565b5b601f19601f8301169050602081019050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b60006200123c826200134d565b915062001249836200134d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562001281576200128062001411565b5b828201905092915050565b600062001299826200134d565b9150620012a6836200134d565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615620012e257620012e162001411565b5b828202905092915050565b6000620012fa826200132d565b9050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b83811015620013775780820151818401526020810190506200135a565b8381111562001387576000848401525b50505050565b60006002820490506001821680620013a657607f821691505b60208210811415620013bd57620013bc62001440565b5b50919050565b6000620013d0826200134d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141562001406576200140562001411565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b620014ba8162001301565b8114620014c657600080fd5b50565b6147fd80620014d96000396000f3fe60806040526004361061023b5760003560e01c80637cb647591161012e578063c87b56dd116100ab578063ed475f631161006f578063ed475f631461082c578063f2c4ce1e14610869578063f2fde38b14610892578063f6a4a3fd146108bb578063fc1a1c36146108d75761023b565b8063c87b56dd14610733578063da3ef23f14610770578063dc1fb5a514610799578063e580b2b0146107c4578063e985e9c5146107ef5761023b565b8063a945bf80116100f2578063a945bf8014610674578063ad72202b1461069f578063b88d4fde146106b6578063c6275255146106df578063c6682862146107085761023b565b80637cb64759146105a15780638da5cb5b146105ca57806395364a84146105f557806395d89b4114610620578063a22cb4651461064b5761023b565b806342842e0e116101bc5780636352211e116101805780636352211e146104bc57806370a08231146104f9578063715018a614610536578063717d57d31461054d57806372250380146105765761023b565b806342842e0e146103e65780634b11faaf1461040f578063518302271461042b57806355f804b3146104565780635d7cf6a31461047f5761023b565b806318160ddd1161020357806318160ddd14610325578063200d2ed21461035057806323b872dd1461037b5780632eb4a7ab146103a45780633ccfd60b146103cf5761023b565b806301ffc9a71461024057806304c98b2b1461027d57806306fdde0314610294578063081812fc146102bf578063095ea7b3146102fc575b600080fd5b34801561024c57600080fd5b506102676004803603810190610262919061347b565b610902565b6040516102749190613f4d565b60405180910390f35b34801561028957600080fd5b506102926109e4565b005b3480156102a057600080fd5b506102a9610a77565b6040516102b69190613f83565b60405180910390f35b3480156102cb57600080fd5b506102e660048036038101906102e1919061350e565b610b09565b6040516102f39190613ee6565b60405180910390f35b34801561030857600080fd5b50610323600480360381019061031e919061336e565b610b8e565b005b34801561033157600080fd5b5061033a610ca6565b60405161034791906142a5565b60405180910390f35b34801561035c57600080fd5b50610365610cb7565b6040516103729190613f4d565b60405180910390f35b34801561038757600080fd5b506103a2600480360381019061039d9190613268565b610cc3565b005b3480156103b057600080fd5b506103b9610d23565b6040516103c69190613f68565b60405180910390f35b3480156103db57600080fd5b506103e4610d29565b005b3480156103f257600080fd5b5061040d60048036038101906104089190613268565b610dfb565b005b610429600480360381019061042491906133aa565b610e1b565b005b34801561043757600080fd5b50610440611191565b60405161044d9190613f4d565b60405180910390f35b34801561046257600080fd5b5061047d600480360381019061047891906134cd565b6111a4565b005b34801561048b57600080fd5b506104a660048036038101906104a19190613203565b61123a565b6040516104b391906142a5565b60405180910390f35b3480156104c857600080fd5b506104e360048036038101906104de919061350e565b611252565b6040516104f09190613ee6565b60405180910390f35b34801561050557600080fd5b50610520600480360381019061051b9190613203565b611304565b60405161052d91906142a5565b60405180910390f35b34801561054257600080fd5b5061054b6113bc565b005b34801561055957600080fd5b50610574600480360381019061056f919061350e565b611444565b005b34801561058257600080fd5b5061058b6114ca565b6040516105989190613f83565b60405180910390f35b3480156105ad57600080fd5b506105c860048036038101906105c39190613452565b611558565b005b3480156105d657600080fd5b506105df6115de565b6040516105ec9190613ee6565b60405180910390f35b34801561060157600080fd5b5061060a611608565b6040516106179190613f4d565b60405180910390f35b34801561062c57600080fd5b50610635611614565b6040516106429190613f83565b60405180910390f35b34801561065757600080fd5b50610672600480360381019061066d9190613332565b6116a6565b005b34801561068057600080fd5b506106896116bc565b60405161069691906142a5565b60405180910390f35b3480156106ab57600080fd5b506106b46116c2565b005b3480156106c257600080fd5b506106dd60048036038101906106d891906132b7565b61175b565b005b3480156106eb57600080fd5b506107066004803603810190610701919061350e565b6117bd565b005b34801561071457600080fd5b5061071d611843565b60405161072a9190613f83565b60405180910390f35b34801561073f57600080fd5b5061075a6004803603810190610755919061350e565b6118d1565b6040516107679190613f83565b60405180910390f35b34801561077c57600080fd5b50610797600480360381019061079291906134cd565b6119ed565b005b3480156107a557600080fd5b506107ae611a83565b6040516107bb9190613ee6565b60405180910390f35b3480156107d057600080fd5b506107d9611aa9565b6040516107e691906142a5565b60405180910390f35b3480156107fb57600080fd5b506108166004803603810190610811919061322c565b611aaf565b6040516108239190613f4d565b60405180910390f35b34801561083857600080fd5b50610853600480360381019061084e9190613411565b611b43565b6040516108609190613f4d565b60405180910390f35b34801561087557600080fd5b50610890600480360381019061088b91906134cd565b611b84565b005b34801561089e57600080fd5b506108b960048036038101906108b49190613203565b611c1a565b005b6108d560048036038101906108d0919061336e565b611d12565b005b3480156108e357600080fd5b506108ec611ffd565b6040516108f991906142a5565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109cd57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109dd57506109dc82612066565b5b9050919050565b6109ec6120d0565b73ffffffffffffffffffffffffffffffffffffffff16610a0a6115de565b73ffffffffffffffffffffffffffffffffffffffff1614610a60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a57906141c5565b60405180910390fd5b6201518042610a6f91906143d5565b600e81905550565b606060008054610a86906145aa565b80601f0160208091040260200160405190810160405280929190818152602001828054610ab2906145aa565b8015610aff5780601f10610ad457610100808354040283529160200191610aff565b820191906000526020600020905b815481529060010190602001808311610ae257829003601f168201915b5050505050905090565b6000610b14826120d8565b610b53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4a906141a5565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b9982611252565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0190614205565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c296120d0565b73ffffffffffffffffffffffffffffffffffffffff161480610c585750610c5781610c526120d0565b611aaf565b5b610c97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8e90614105565b60405180910390fd5b610ca18383612144565b505050565b6000610cb26008612019565b905090565b6000600e544210905090565b610cd4610cce6120d0565b826121fd565b610d13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0a90614245565b60405180910390fd5b610d1e8383836122db565b505050565b600c5481565b610d316120d0565b73ffffffffffffffffffffffffffffffffffffffff16610d4f6115de565b73ffffffffffffffffffffffffffffffffffffffff1614610da5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9c906141c5565b60405180910390fd5b6000610daf6115de565b90508073ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610df7573d6000803e3d6000fd5b5050565b610e168383836040518060200160405280600081525061175b565b505050565b600033604051602001610e2e9190613e9a565b604051602081830303815290604052805190602001209050610e5382600c5483612542565b610e92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8990614265565b60405180910390fd5b61271083610e9e610ca6565b610ea891906143d5565b1115610ee9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee090614125565b60405180910390fd5b6000600e5411610f2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2590614285565b60405180910390fd5b600e5442101561101b57600283601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610f8591906143d5565b1115610fc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fbd906140a5565b60405180910390fd5b60105483610fd4919061445c565b341015611016576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100d906140e5565b60405180910390fd5b6110fa565b600583601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461106891906143d5565b11156110a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a090614045565b60405180910390fd5b600f54836110b7919061445c565b3410156110f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f0906140e5565b60405180910390fd5b5b60005b8381101561118a5761110f6008612003565b601160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081548092919061115f906145dc565b9190505550611177856111726008612019565b612559565b8080611182906145dc565b9150506110fd565b5050505050565b600d60149054906101000a900460ff1681565b6111ac6120d0565b73ffffffffffffffffffffffffffffffffffffffff166111ca6115de565b73ffffffffffffffffffffffffffffffffffffffff1614611220576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611217906141c5565b60405180910390fd5b8060099080519060200190611236929190612f7c565b5050565b60116020528060005260406000206000915090505481565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156112fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f290614165565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611375576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136c90614145565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6113c46120d0565b73ffffffffffffffffffffffffffffffffffffffff166113e26115de565b73ffffffffffffffffffffffffffffffffffffffff1614611438576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142f906141c5565b60405180910390fd5b6114426000612577565b565b61144c6120d0565b73ffffffffffffffffffffffffffffffffffffffff1661146a6115de565b73ffffffffffffffffffffffffffffffffffffffff16146114c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b7906141c5565b60405180910390fd5b8060108190555050565b600a80546114d7906145aa565b80601f0160208091040260200160405190810160405280929190818152602001828054611503906145aa565b80156115505780601f1061152557610100808354040283529160200191611550565b820191906000526020600020905b81548152906001019060200180831161153357829003601f168201915b505050505081565b6115606120d0565b73ffffffffffffffffffffffffffffffffffffffff1661157e6115de565b73ffffffffffffffffffffffffffffffffffffffff16146115d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115cb906141c5565b60405180910390fd5b80600c8190555050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600e544210905090565b606060018054611623906145aa565b80601f016020809104026020016040519081016040528092919081815260200182805461164f906145aa565b801561169c5780601f106116715761010080835404028352916020019161169c565b820191906000526020600020905b81548152906001019060200180831161167f57829003601f168201915b5050505050905090565b6116b86116b16120d0565b838361263d565b5050565b600f5481565b6116ca6120d0565b73ffffffffffffffffffffffffffffffffffffffff166116e86115de565b73ffffffffffffffffffffffffffffffffffffffff161461173e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611735906141c5565b60405180910390fd5b6001600d60146101000a81548160ff021916908315150217905550565b61176c6117666120d0565b836121fd565b6117ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a290614245565b60405180910390fd5b6117b7848484846127aa565b50505050565b6117c56120d0565b73ffffffffffffffffffffffffffffffffffffffff166117e36115de565b73ffffffffffffffffffffffffffffffffffffffff1614611839576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611830906141c5565b60405180910390fd5b80600f8190555050565b600b8054611850906145aa565b80601f016020809104026020016040519081016040528092919081815260200182805461187c906145aa565b80156118c95780601f1061189e576101008083540402835291602001916118c9565b820191906000526020600020905b8154815290600101906020018083116118ac57829003601f168201915b505050505081565b60606118dc826120d8565b61191b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611912906141e5565b60405180910390fd5b6000611925612806565b905060001515600d60149054906101000a900460ff16151514156119985760008151116119615760405180602001604052806000815250611990565b8061196c6001612947565b600b60405160200161198093929190613eb5565b6040516020818303038152906040525b9150506119e8565b60008151116119b657604051806020016040528060008152506119e4565b806119c084612947565b600b6040516020016119d493929190613eb5565b6040516020818303038152906040525b9150505b919050565b6119f56120d0565b73ffffffffffffffffffffffffffffffffffffffff16611a136115de565b73ffffffffffffffffffffffffffffffffffffffff1614611a69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a60906141c5565b60405180910390fd5b80600b9080519060200190611a7f929190612f7c565b5050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e5481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60008033604051602001611b579190613e9a565b604051602081830303815290604052805190602001209050611b7c83600c5483612542565b915050919050565b611b8c6120d0565b73ffffffffffffffffffffffffffffffffffffffff16611baa6115de565b73ffffffffffffffffffffffffffffffffffffffff1614611c00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf7906141c5565b60405180910390fd5b80600a9080519060200190611c16929190612f7c565b5050565b611c226120d0565b73ffffffffffffffffffffffffffffffffffffffff16611c406115de565b73ffffffffffffffffffffffffffffffffffffffff1614611c96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8d906141c5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611d06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cfd90613fe5565b60405180910390fd5b611d0f81612577565b50565b61271081611d1e610ca6565b611d2891906143d5565b1115611d69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6090614125565b60405180910390fd5b611d716115de565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614158015611dfa5750600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b15611f68576000600e5411611e44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3b90614285565b60405180910390fd5b600e54421015611e89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8090614225565b60405180910390fd5b600f5481611e97919061445c565b341015611ed9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed0906140e5565b60405180910390fd5b600381601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611f2691906143d5565b1115611f67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5e90613fc5565b60405180910390fd5b5b60005b81811015611ff857611f7d6008612003565b601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190611fcd906145dc565b9190505550611fe583611fe06008612019565b612559565b8080611ff0906145dc565b915050611f6b565b505050565b60105481565b6001816000016000828254019250508190555050565b600081600001549050919050565b6000808273ffffffffffffffffffffffffffffffffffffffff16803b806020016040519081016040528181526000908060200190933c51119050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166121b783611252565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000612208826120d8565b612247576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223e906140c5565b60405180910390fd5b600061225283611252565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806122c157508373ffffffffffffffffffffffffffffffffffffffff166122a984610b09565b73ffffffffffffffffffffffffffffffffffffffff16145b806122d257506122d18185611aaf565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166122fb82611252565b73ffffffffffffffffffffffffffffffffffffffff1614612351576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234890614005565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156123c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b890614065565b60405180910390fd5b6123cc838383612af4565b6123d7600082612144565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461242791906144b6565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461247e91906143d5565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461253d838383612af9565b505050565b60008261254f8584612afe565b1490509392505050565b612573828260405180602001604052806000815250612b99565b5050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156126ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126a390614085565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161279d9190613f4d565b60405180910390a3505050565b6127b58484846122db565b6127c184848484612bf4565b612800576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127f790613fa5565b60405180910390fd5b50505050565b606060001515600d60149054906101000a900460ff16151514156128b657600a8054612831906145aa565b80601f016020809104026020016040519081016040528092919081815260200182805461285d906145aa565b80156128aa5780601f1061287f576101008083540402835291602001916128aa565b820191906000526020600020905b81548152906001019060200180831161288d57829003601f168201915b50505050509050612944565b600980546128c3906145aa565b80601f01602080910402602001604051908101604052809291908181526020018280546128ef906145aa565b801561293c5780601f106129115761010080835404028352916020019161293c565b820191906000526020600020905b81548152906001019060200180831161291f57829003601f168201915b505050505090505b90565b6060600082141561298f576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612aef565b600082905060005b600082146129c15780806129aa906145dc565b915050600a826129ba919061442b565b9150612997565b60008167ffffffffffffffff811115612a03577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015612a355781602001600182028036833780820191505090505b5090505b60008514612ae857600182612a4e91906144b6565b9150600a85612a5d9190614649565b6030612a6991906143d5565b60f81b818381518110612aa5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612ae1919061442b565b9450612a39565b8093505050505b919050565b505050565b505050565b60008082905060005b8451811015612b8e576000858281518110612b4b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101519050808311612b6d57612b668382612d8b565b9250612b7a565b612b778184612d8b565b92505b508080612b86906145dc565b915050612b07565b508091505092915050565b612ba38383612da2565b612bb06000848484612bf4565b612bef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612be690613fa5565b60405180910390fd5b505050565b6000612c158473ffffffffffffffffffffffffffffffffffffffff16612027565b15612d7e578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612c3e6120d0565b8786866040518563ffffffff1660e01b8152600401612c609493929190613f01565b602060405180830381600087803b158015612c7a57600080fd5b505af1925050508015612cab57506040513d601f19601f82011682018060405250810190612ca891906134a4565b60015b612d2e573d8060008114612cdb576040519150601f19603f3d011682016040523d82523d6000602084013e612ce0565b606091505b50600081511415612d26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d1d90613fa5565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612d83565b600190505b949350505050565b600082600052816020526040600020905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612e12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e0990614185565b60405180910390fd5b612e1b816120d8565b15612e5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e5290614025565b60405180910390fd5b612e6760008383612af4565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612eb791906143d5565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612f7860008383612af9565b5050565b828054612f88906145aa565b90600052602060002090601f016020900481019282612faa5760008555612ff1565b82601f10612fc357805160ff1916838001178555612ff1565b82800160010185558215612ff1579182015b82811115612ff0578251825591602001919060010190612fd5565b5b509050612ffe9190613002565b5090565b5b8082111561301b576000816000905550600101613003565b5090565b600061303261302d846142f1565b6142c0565b9050808382526020820190508285602086028201111561305157600080fd5b60005b858110156130815781613067888261315b565b845260208401935060208301925050600181019050613054565b5050509392505050565b600061309e6130998461431d565b6142c0565b9050828152602081018484840111156130b657600080fd5b6130c1848285614568565b509392505050565b60006130dc6130d78461434d565b6142c0565b9050828152602081018484840111156130f457600080fd5b6130ff848285614568565b509392505050565b60008135905061311681614754565b92915050565b600082601f83011261312d57600080fd5b813561313d84826020860161301f565b91505092915050565b6000813590506131558161476b565b92915050565b60008135905061316a81614782565b92915050565b60008135905061317f81614799565b92915050565b60008151905061319481614799565b92915050565b600082601f8301126131ab57600080fd5b81356131bb84826020860161308b565b91505092915050565b600082601f8301126131d557600080fd5b81356131e58482602086016130c9565b91505092915050565b6000813590506131fd816147b0565b92915050565b60006020828403121561321557600080fd5b600061322384828501613107565b91505092915050565b6000806040838503121561323f57600080fd5b600061324d85828601613107565b925050602061325e85828601613107565b9150509250929050565b60008060006060848603121561327d57600080fd5b600061328b86828701613107565b935050602061329c86828701613107565b92505060406132ad868287016131ee565b9150509250925092565b600080600080608085870312156132cd57600080fd5b60006132db87828801613107565b94505060206132ec87828801613107565b93505060406132fd878288016131ee565b925050606085013567ffffffffffffffff81111561331a57600080fd5b6133268782880161319a565b91505092959194509250565b6000806040838503121561334557600080fd5b600061335385828601613107565b925050602061336485828601613146565b9150509250929050565b6000806040838503121561338157600080fd5b600061338f85828601613107565b92505060206133a0858286016131ee565b9150509250929050565b6000806000606084860312156133bf57600080fd5b60006133cd86828701613107565b93505060206133de868287016131ee565b925050604084013567ffffffffffffffff8111156133fb57600080fd5b6134078682870161311c565b9150509250925092565b60006020828403121561342357600080fd5b600082013567ffffffffffffffff81111561343d57600080fd5b6134498482850161311c565b91505092915050565b60006020828403121561346457600080fd5b60006134728482850161315b565b91505092915050565b60006020828403121561348d57600080fd5b600061349b84828501613170565b91505092915050565b6000602082840312156134b657600080fd5b60006134c484828501613185565b91505092915050565b6000602082840312156134df57600080fd5b600082013567ffffffffffffffff8111156134f957600080fd5b613505848285016131c4565b91505092915050565b60006020828403121561352057600080fd5b600061352e848285016131ee565b91505092915050565b613540816144ea565b82525050565b613557613552826144ea565b614625565b82525050565b613566816144fc565b82525050565b61357581614508565b82525050565b600061358682614392565b61359081856143a8565b93506135a0818560208601614577565b6135a981614736565b840191505092915050565b60006135bf8261439d565b6135c981856143b9565b93506135d9818560208601614577565b6135e281614736565b840191505092915050565b60006135f88261439d565b61360281856143ca565b9350613612818560208601614577565b80840191505092915050565b6000815461362b816145aa565b61363581866143ca565b94506001821660008114613650576001811461366157613694565b60ff19831686528186019350613694565b61366a8561437d565b60005b8381101561368c5781548189015260018201915060208101905061366d565b838801955050505b50505092915050565b60006136aa6032836143b9565b91507f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008301527f63656976657220696d706c656d656e74657200000000000000000000000000006020830152604082019050919050565b6000613710600b836143b9565b91507f4d617869756d20697320330000000000000000000000000000000000000000006000830152602082019050919050565b60006137506026836143b9565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006137b66025836143b9565b91507f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008301527f6f776e65720000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061381c601c836143b9565b91507f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006000830152602082019050919050565b600061385c600b836143b9565b91507f4d617869756d20697320350000000000000000000000000000000000000000006000830152602082019050919050565b600061389c6024836143b9565b91507f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006139026019836143b9565b91507f4552433732313a20617070726f766520746f2063616c6c6572000000000000006000830152602082019050919050565b60006139426020836143b9565b91507f4d617869756d206973203220647572696e67207072652d73616c6520737465706000830152602082019050919050565b6000613982602c836143b9565b91507f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b60006139e86011836143b9565b91507f4e6f74206d617463682062616c616e63650000000000000000000000000000006000830152602082019050919050565b6000613a286038836143b9565b91507f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008301527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006020830152604082019050919050565b6000613a8e6012836143b9565b91507f43616e2774206d696e7420616e796d6f726500000000000000000000000000006000830152602082019050919050565b6000613ace602a836143b9565b91507f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008301527f726f2061646472657373000000000000000000000000000000000000000000006020830152604082019050919050565b6000613b346029836143b9565b91507f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008301527f656e7420746f6b656e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000613b9a6020836143b9565b91507f4552433732313a206d696e7420746f20746865207a65726f20616464726573736000830152602082019050919050565b6000613bda602c836143b9565b91507f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000613c406020836143b9565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000613c80602f836143b9565b91507f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008301527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006020830152604082019050919050565b6000613ce66021836143b9565b91507f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008301527f72000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613d4c6034836143b9565b91507f4f6e6c792077686974656c697374732063616e206265206d696e74206475726960008301527f6e6720746865207072652d73616c6520737465700000000000000000000000006020830152604082019050919050565b6000613db26031836143b9565b91507f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008301527f776e6572206e6f7220617070726f7665640000000000000000000000000000006020830152604082019050919050565b6000613e18600d836143b9565b91507f496e76616c69642070726f6f66000000000000000000000000000000000000006000830152602082019050919050565b6000613e586012836143b9565b91507f43616e2774206d696e7420746865206e667400000000000000000000000000006000830152602082019050919050565b613e948161455e565b82525050565b6000613ea68284613546565b60148201915081905092915050565b6000613ec182866135ed565b9150613ecd82856135ed565b9150613ed9828461361e565b9150819050949350505050565b6000602082019050613efb6000830184613537565b92915050565b6000608082019050613f166000830187613537565b613f236020830186613537565b613f306040830185613e8b565b8181036060830152613f42818461357b565b905095945050505050565b6000602082019050613f62600083018461355d565b92915050565b6000602082019050613f7d600083018461356c565b92915050565b60006020820190508181036000830152613f9d81846135b4565b905092915050565b60006020820190508181036000830152613fbe8161369d565b9050919050565b60006020820190508181036000830152613fde81613703565b9050919050565b60006020820190508181036000830152613ffe81613743565b9050919050565b6000602082019050818103600083015261401e816137a9565b9050919050565b6000602082019050818103600083015261403e8161380f565b9050919050565b6000602082019050818103600083015261405e8161384f565b9050919050565b6000602082019050818103600083015261407e8161388f565b9050919050565b6000602082019050818103600083015261409e816138f5565b9050919050565b600060208201905081810360008301526140be81613935565b9050919050565b600060208201905081810360008301526140de81613975565b9050919050565b600060208201905081810360008301526140fe816139db565b9050919050565b6000602082019050818103600083015261411e81613a1b565b9050919050565b6000602082019050818103600083015261413e81613a81565b9050919050565b6000602082019050818103600083015261415e81613ac1565b9050919050565b6000602082019050818103600083015261417e81613b27565b9050919050565b6000602082019050818103600083015261419e81613b8d565b9050919050565b600060208201905081810360008301526141be81613bcd565b9050919050565b600060208201905081810360008301526141de81613c33565b9050919050565b600060208201905081810360008301526141fe81613c73565b9050919050565b6000602082019050818103600083015261421e81613cd9565b9050919050565b6000602082019050818103600083015261423e81613d3f565b9050919050565b6000602082019050818103600083015261425e81613da5565b9050919050565b6000602082019050818103600083015261427e81613e0b565b9050919050565b6000602082019050818103600083015261429e81613e4b565b9050919050565b60006020820190506142ba6000830184613e8b565b92915050565b6000604051905081810181811067ffffffffffffffff821117156142e7576142e6614707565b5b8060405250919050565b600067ffffffffffffffff82111561430c5761430b614707565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561433857614337614707565b5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff82111561436857614367614707565b5b601f19601f8301169050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006143e08261455e565b91506143eb8361455e565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156144205761441f61467a565b5b828201905092915050565b60006144368261455e565b91506144418361455e565b925082614451576144506146a9565b5b828204905092915050565b60006144678261455e565b91506144728361455e565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156144ab576144aa61467a565b5b828202905092915050565b60006144c18261455e565b91506144cc8361455e565b9250828210156144df576144de61467a565b5b828203905092915050565b60006144f58261453e565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561459557808201518184015260208101905061457a565b838111156145a4576000848401525b50505050565b600060028204905060018216806145c257607f821691505b602082108114156145d6576145d56146d8565b5b50919050565b60006145e78261455e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561461a5761461961467a565b5b600182019050919050565b600061463082614637565b9050919050565b600061464282614747565b9050919050565b60006146548261455e565b915061465f8361455e565b92508261466f5761466e6146a9565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b61475d816144ea565b811461476857600080fd5b50565b614774816144fc565b811461477f57600080fd5b50565b61478b81614508565b811461479657600080fd5b50565b6147a281614512565b81146147ad57600080fd5b50565b6147b98161455e565b81146147c457600080fd5b5056fea26469706673582212206e79576a088a5ac990d7f7a87e31c221c12de91c08415f3bdb604e581c44d34864736f6c63430008000033000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000000e4d696e654e6174696f6e734e465400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034d4e4e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005768747470733a2f2f6d696e656e6174696f6e732e6d7970696e6174612e636c6f75642f697066732f516d616b55617565315576754644347248466d5166754c5842666a557569324a6f4164483838663736474d47554e2f000000000000000000
Deployed Bytecode
0x60806040526004361061023b5760003560e01c80637cb647591161012e578063c87b56dd116100ab578063ed475f631161006f578063ed475f631461082c578063f2c4ce1e14610869578063f2fde38b14610892578063f6a4a3fd146108bb578063fc1a1c36146108d75761023b565b8063c87b56dd14610733578063da3ef23f14610770578063dc1fb5a514610799578063e580b2b0146107c4578063e985e9c5146107ef5761023b565b8063a945bf80116100f2578063a945bf8014610674578063ad72202b1461069f578063b88d4fde146106b6578063c6275255146106df578063c6682862146107085761023b565b80637cb64759146105a15780638da5cb5b146105ca57806395364a84146105f557806395d89b4114610620578063a22cb4651461064b5761023b565b806342842e0e116101bc5780636352211e116101805780636352211e146104bc57806370a08231146104f9578063715018a614610536578063717d57d31461054d57806372250380146105765761023b565b806342842e0e146103e65780634b11faaf1461040f578063518302271461042b57806355f804b3146104565780635d7cf6a31461047f5761023b565b806318160ddd1161020357806318160ddd14610325578063200d2ed21461035057806323b872dd1461037b5780632eb4a7ab146103a45780633ccfd60b146103cf5761023b565b806301ffc9a71461024057806304c98b2b1461027d57806306fdde0314610294578063081812fc146102bf578063095ea7b3146102fc575b600080fd5b34801561024c57600080fd5b506102676004803603810190610262919061347b565b610902565b6040516102749190613f4d565b60405180910390f35b34801561028957600080fd5b506102926109e4565b005b3480156102a057600080fd5b506102a9610a77565b6040516102b69190613f83565b60405180910390f35b3480156102cb57600080fd5b506102e660048036038101906102e1919061350e565b610b09565b6040516102f39190613ee6565b60405180910390f35b34801561030857600080fd5b50610323600480360381019061031e919061336e565b610b8e565b005b34801561033157600080fd5b5061033a610ca6565b60405161034791906142a5565b60405180910390f35b34801561035c57600080fd5b50610365610cb7565b6040516103729190613f4d565b60405180910390f35b34801561038757600080fd5b506103a2600480360381019061039d9190613268565b610cc3565b005b3480156103b057600080fd5b506103b9610d23565b6040516103c69190613f68565b60405180910390f35b3480156103db57600080fd5b506103e4610d29565b005b3480156103f257600080fd5b5061040d60048036038101906104089190613268565b610dfb565b005b610429600480360381019061042491906133aa565b610e1b565b005b34801561043757600080fd5b50610440611191565b60405161044d9190613f4d565b60405180910390f35b34801561046257600080fd5b5061047d600480360381019061047891906134cd565b6111a4565b005b34801561048b57600080fd5b506104a660048036038101906104a19190613203565b61123a565b6040516104b391906142a5565b60405180910390f35b3480156104c857600080fd5b506104e360048036038101906104de919061350e565b611252565b6040516104f09190613ee6565b60405180910390f35b34801561050557600080fd5b50610520600480360381019061051b9190613203565b611304565b60405161052d91906142a5565b60405180910390f35b34801561054257600080fd5b5061054b6113bc565b005b34801561055957600080fd5b50610574600480360381019061056f919061350e565b611444565b005b34801561058257600080fd5b5061058b6114ca565b6040516105989190613f83565b60405180910390f35b3480156105ad57600080fd5b506105c860048036038101906105c39190613452565b611558565b005b3480156105d657600080fd5b506105df6115de565b6040516105ec9190613ee6565b60405180910390f35b34801561060157600080fd5b5061060a611608565b6040516106179190613f4d565b60405180910390f35b34801561062c57600080fd5b50610635611614565b6040516106429190613f83565b60405180910390f35b34801561065757600080fd5b50610672600480360381019061066d9190613332565b6116a6565b005b34801561068057600080fd5b506106896116bc565b60405161069691906142a5565b60405180910390f35b3480156106ab57600080fd5b506106b46116c2565b005b3480156106c257600080fd5b506106dd60048036038101906106d891906132b7565b61175b565b005b3480156106eb57600080fd5b506107066004803603810190610701919061350e565b6117bd565b005b34801561071457600080fd5b5061071d611843565b60405161072a9190613f83565b60405180910390f35b34801561073f57600080fd5b5061075a6004803603810190610755919061350e565b6118d1565b6040516107679190613f83565b60405180910390f35b34801561077c57600080fd5b50610797600480360381019061079291906134cd565b6119ed565b005b3480156107a557600080fd5b506107ae611a83565b6040516107bb9190613ee6565b60405180910390f35b3480156107d057600080fd5b506107d9611aa9565b6040516107e691906142a5565b60405180910390f35b3480156107fb57600080fd5b506108166004803603810190610811919061322c565b611aaf565b6040516108239190613f4d565b60405180910390f35b34801561083857600080fd5b50610853600480360381019061084e9190613411565b611b43565b6040516108609190613f4d565b60405180910390f35b34801561087557600080fd5b50610890600480360381019061088b91906134cd565b611b84565b005b34801561089e57600080fd5b506108b960048036038101906108b49190613203565b611c1a565b005b6108d560048036038101906108d0919061336e565b611d12565b005b3480156108e357600080fd5b506108ec611ffd565b6040516108f991906142a5565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109cd57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109dd57506109dc82612066565b5b9050919050565b6109ec6120d0565b73ffffffffffffffffffffffffffffffffffffffff16610a0a6115de565b73ffffffffffffffffffffffffffffffffffffffff1614610a60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a57906141c5565b60405180910390fd5b6201518042610a6f91906143d5565b600e81905550565b606060008054610a86906145aa565b80601f0160208091040260200160405190810160405280929190818152602001828054610ab2906145aa565b8015610aff5780601f10610ad457610100808354040283529160200191610aff565b820191906000526020600020905b815481529060010190602001808311610ae257829003601f168201915b5050505050905090565b6000610b14826120d8565b610b53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4a906141a5565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b9982611252565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0190614205565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c296120d0565b73ffffffffffffffffffffffffffffffffffffffff161480610c585750610c5781610c526120d0565b611aaf565b5b610c97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8e90614105565b60405180910390fd5b610ca18383612144565b505050565b6000610cb26008612019565b905090565b6000600e544210905090565b610cd4610cce6120d0565b826121fd565b610d13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0a90614245565b60405180910390fd5b610d1e8383836122db565b505050565b600c5481565b610d316120d0565b73ffffffffffffffffffffffffffffffffffffffff16610d4f6115de565b73ffffffffffffffffffffffffffffffffffffffff1614610da5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9c906141c5565b60405180910390fd5b6000610daf6115de565b90508073ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610df7573d6000803e3d6000fd5b5050565b610e168383836040518060200160405280600081525061175b565b505050565b600033604051602001610e2e9190613e9a565b604051602081830303815290604052805190602001209050610e5382600c5483612542565b610e92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8990614265565b60405180910390fd5b61271083610e9e610ca6565b610ea891906143d5565b1115610ee9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee090614125565b60405180910390fd5b6000600e5411610f2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2590614285565b60405180910390fd5b600e5442101561101b57600283601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610f8591906143d5565b1115610fc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fbd906140a5565b60405180910390fd5b60105483610fd4919061445c565b341015611016576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100d906140e5565b60405180910390fd5b6110fa565b600583601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461106891906143d5565b11156110a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a090614045565b60405180910390fd5b600f54836110b7919061445c565b3410156110f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f0906140e5565b60405180910390fd5b5b60005b8381101561118a5761110f6008612003565b601160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081548092919061115f906145dc565b9190505550611177856111726008612019565b612559565b8080611182906145dc565b9150506110fd565b5050505050565b600d60149054906101000a900460ff1681565b6111ac6120d0565b73ffffffffffffffffffffffffffffffffffffffff166111ca6115de565b73ffffffffffffffffffffffffffffffffffffffff1614611220576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611217906141c5565b60405180910390fd5b8060099080519060200190611236929190612f7c565b5050565b60116020528060005260406000206000915090505481565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156112fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f290614165565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611375576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136c90614145565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6113c46120d0565b73ffffffffffffffffffffffffffffffffffffffff166113e26115de565b73ffffffffffffffffffffffffffffffffffffffff1614611438576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142f906141c5565b60405180910390fd5b6114426000612577565b565b61144c6120d0565b73ffffffffffffffffffffffffffffffffffffffff1661146a6115de565b73ffffffffffffffffffffffffffffffffffffffff16146114c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b7906141c5565b60405180910390fd5b8060108190555050565b600a80546114d7906145aa565b80601f0160208091040260200160405190810160405280929190818152602001828054611503906145aa565b80156115505780601f1061152557610100808354040283529160200191611550565b820191906000526020600020905b81548152906001019060200180831161153357829003601f168201915b505050505081565b6115606120d0565b73ffffffffffffffffffffffffffffffffffffffff1661157e6115de565b73ffffffffffffffffffffffffffffffffffffffff16146115d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115cb906141c5565b60405180910390fd5b80600c8190555050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600e544210905090565b606060018054611623906145aa565b80601f016020809104026020016040519081016040528092919081815260200182805461164f906145aa565b801561169c5780601f106116715761010080835404028352916020019161169c565b820191906000526020600020905b81548152906001019060200180831161167f57829003601f168201915b5050505050905090565b6116b86116b16120d0565b838361263d565b5050565b600f5481565b6116ca6120d0565b73ffffffffffffffffffffffffffffffffffffffff166116e86115de565b73ffffffffffffffffffffffffffffffffffffffff161461173e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611735906141c5565b60405180910390fd5b6001600d60146101000a81548160ff021916908315150217905550565b61176c6117666120d0565b836121fd565b6117ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a290614245565b60405180910390fd5b6117b7848484846127aa565b50505050565b6117c56120d0565b73ffffffffffffffffffffffffffffffffffffffff166117e36115de565b73ffffffffffffffffffffffffffffffffffffffff1614611839576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611830906141c5565b60405180910390fd5b80600f8190555050565b600b8054611850906145aa565b80601f016020809104026020016040519081016040528092919081815260200182805461187c906145aa565b80156118c95780601f1061189e576101008083540402835291602001916118c9565b820191906000526020600020905b8154815290600101906020018083116118ac57829003601f168201915b505050505081565b60606118dc826120d8565b61191b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611912906141e5565b60405180910390fd5b6000611925612806565b905060001515600d60149054906101000a900460ff16151514156119985760008151116119615760405180602001604052806000815250611990565b8061196c6001612947565b600b60405160200161198093929190613eb5565b6040516020818303038152906040525b9150506119e8565b60008151116119b657604051806020016040528060008152506119e4565b806119c084612947565b600b6040516020016119d493929190613eb5565b6040516020818303038152906040525b9150505b919050565b6119f56120d0565b73ffffffffffffffffffffffffffffffffffffffff16611a136115de565b73ffffffffffffffffffffffffffffffffffffffff1614611a69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a60906141c5565b60405180910390fd5b80600b9080519060200190611a7f929190612f7c565b5050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e5481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60008033604051602001611b579190613e9a565b604051602081830303815290604052805190602001209050611b7c83600c5483612542565b915050919050565b611b8c6120d0565b73ffffffffffffffffffffffffffffffffffffffff16611baa6115de565b73ffffffffffffffffffffffffffffffffffffffff1614611c00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf7906141c5565b60405180910390fd5b80600a9080519060200190611c16929190612f7c565b5050565b611c226120d0565b73ffffffffffffffffffffffffffffffffffffffff16611c406115de565b73ffffffffffffffffffffffffffffffffffffffff1614611c96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8d906141c5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611d06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cfd90613fe5565b60405180910390fd5b611d0f81612577565b50565b61271081611d1e610ca6565b611d2891906143d5565b1115611d69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6090614125565b60405180910390fd5b611d716115de565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614158015611dfa5750600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b15611f68576000600e5411611e44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3b90614285565b60405180910390fd5b600e54421015611e89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8090614225565b60405180910390fd5b600f5481611e97919061445c565b341015611ed9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed0906140e5565b60405180910390fd5b600381601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611f2691906143d5565b1115611f67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5e90613fc5565b60405180910390fd5b5b60005b81811015611ff857611f7d6008612003565b601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190611fcd906145dc565b9190505550611fe583611fe06008612019565b612559565b8080611ff0906145dc565b915050611f6b565b505050565b60105481565b6001816000016000828254019250508190555050565b600081600001549050919050565b6000808273ffffffffffffffffffffffffffffffffffffffff16803b806020016040519081016040528181526000908060200190933c51119050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166121b783611252565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000612208826120d8565b612247576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223e906140c5565b60405180910390fd5b600061225283611252565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806122c157508373ffffffffffffffffffffffffffffffffffffffff166122a984610b09565b73ffffffffffffffffffffffffffffffffffffffff16145b806122d257506122d18185611aaf565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166122fb82611252565b73ffffffffffffffffffffffffffffffffffffffff1614612351576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234890614005565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156123c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b890614065565b60405180910390fd5b6123cc838383612af4565b6123d7600082612144565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461242791906144b6565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461247e91906143d5565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461253d838383612af9565b505050565b60008261254f8584612afe565b1490509392505050565b612573828260405180602001604052806000815250612b99565b5050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156126ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126a390614085565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161279d9190613f4d565b60405180910390a3505050565b6127b58484846122db565b6127c184848484612bf4565b612800576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127f790613fa5565b60405180910390fd5b50505050565b606060001515600d60149054906101000a900460ff16151514156128b657600a8054612831906145aa565b80601f016020809104026020016040519081016040528092919081815260200182805461285d906145aa565b80156128aa5780601f1061287f576101008083540402835291602001916128aa565b820191906000526020600020905b81548152906001019060200180831161288d57829003601f168201915b50505050509050612944565b600980546128c3906145aa565b80601f01602080910402602001604051908101604052809291908181526020018280546128ef906145aa565b801561293c5780601f106129115761010080835404028352916020019161293c565b820191906000526020600020905b81548152906001019060200180831161291f57829003601f168201915b505050505090505b90565b6060600082141561298f576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612aef565b600082905060005b600082146129c15780806129aa906145dc565b915050600a826129ba919061442b565b9150612997565b60008167ffffffffffffffff811115612a03577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015612a355781602001600182028036833780820191505090505b5090505b60008514612ae857600182612a4e91906144b6565b9150600a85612a5d9190614649565b6030612a6991906143d5565b60f81b818381518110612aa5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612ae1919061442b565b9450612a39565b8093505050505b919050565b505050565b505050565b60008082905060005b8451811015612b8e576000858281518110612b4b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101519050808311612b6d57612b668382612d8b565b9250612b7a565b612b778184612d8b565b92505b508080612b86906145dc565b915050612b07565b508091505092915050565b612ba38383612da2565b612bb06000848484612bf4565b612bef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612be690613fa5565b60405180910390fd5b505050565b6000612c158473ffffffffffffffffffffffffffffffffffffffff16612027565b15612d7e578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612c3e6120d0565b8786866040518563ffffffff1660e01b8152600401612c609493929190613f01565b602060405180830381600087803b158015612c7a57600080fd5b505af1925050508015612cab57506040513d601f19601f82011682018060405250810190612ca891906134a4565b60015b612d2e573d8060008114612cdb576040519150601f19603f3d011682016040523d82523d6000602084013e612ce0565b606091505b50600081511415612d26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d1d90613fa5565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612d83565b600190505b949350505050565b600082600052816020526040600020905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612e12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e0990614185565b60405180910390fd5b612e1b816120d8565b15612e5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e5290614025565b60405180910390fd5b612e6760008383612af4565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612eb791906143d5565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612f7860008383612af9565b5050565b828054612f88906145aa565b90600052602060002090601f016020900481019282612faa5760008555612ff1565b82601f10612fc357805160ff1916838001178555612ff1565b82800160010185558215612ff1579182015b82811115612ff0578251825591602001919060010190612fd5565b5b509050612ffe9190613002565b5090565b5b8082111561301b576000816000905550600101613003565b5090565b600061303261302d846142f1565b6142c0565b9050808382526020820190508285602086028201111561305157600080fd5b60005b858110156130815781613067888261315b565b845260208401935060208301925050600181019050613054565b5050509392505050565b600061309e6130998461431d565b6142c0565b9050828152602081018484840111156130b657600080fd5b6130c1848285614568565b509392505050565b60006130dc6130d78461434d565b6142c0565b9050828152602081018484840111156130f457600080fd5b6130ff848285614568565b509392505050565b60008135905061311681614754565b92915050565b600082601f83011261312d57600080fd5b813561313d84826020860161301f565b91505092915050565b6000813590506131558161476b565b92915050565b60008135905061316a81614782565b92915050565b60008135905061317f81614799565b92915050565b60008151905061319481614799565b92915050565b600082601f8301126131ab57600080fd5b81356131bb84826020860161308b565b91505092915050565b600082601f8301126131d557600080fd5b81356131e58482602086016130c9565b91505092915050565b6000813590506131fd816147b0565b92915050565b60006020828403121561321557600080fd5b600061322384828501613107565b91505092915050565b6000806040838503121561323f57600080fd5b600061324d85828601613107565b925050602061325e85828601613107565b9150509250929050565b60008060006060848603121561327d57600080fd5b600061328b86828701613107565b935050602061329c86828701613107565b92505060406132ad868287016131ee565b9150509250925092565b600080600080608085870312156132cd57600080fd5b60006132db87828801613107565b94505060206132ec87828801613107565b93505060406132fd878288016131ee565b925050606085013567ffffffffffffffff81111561331a57600080fd5b6133268782880161319a565b91505092959194509250565b6000806040838503121561334557600080fd5b600061335385828601613107565b925050602061336485828601613146565b9150509250929050565b6000806040838503121561338157600080fd5b600061338f85828601613107565b92505060206133a0858286016131ee565b9150509250929050565b6000806000606084860312156133bf57600080fd5b60006133cd86828701613107565b93505060206133de868287016131ee565b925050604084013567ffffffffffffffff8111156133fb57600080fd5b6134078682870161311c565b9150509250925092565b60006020828403121561342357600080fd5b600082013567ffffffffffffffff81111561343d57600080fd5b6134498482850161311c565b91505092915050565b60006020828403121561346457600080fd5b60006134728482850161315b565b91505092915050565b60006020828403121561348d57600080fd5b600061349b84828501613170565b91505092915050565b6000602082840312156134b657600080fd5b60006134c484828501613185565b91505092915050565b6000602082840312156134df57600080fd5b600082013567ffffffffffffffff8111156134f957600080fd5b613505848285016131c4565b91505092915050565b60006020828403121561352057600080fd5b600061352e848285016131ee565b91505092915050565b613540816144ea565b82525050565b613557613552826144ea565b614625565b82525050565b613566816144fc565b82525050565b61357581614508565b82525050565b600061358682614392565b61359081856143a8565b93506135a0818560208601614577565b6135a981614736565b840191505092915050565b60006135bf8261439d565b6135c981856143b9565b93506135d9818560208601614577565b6135e281614736565b840191505092915050565b60006135f88261439d565b61360281856143ca565b9350613612818560208601614577565b80840191505092915050565b6000815461362b816145aa565b61363581866143ca565b94506001821660008114613650576001811461366157613694565b60ff19831686528186019350613694565b61366a8561437d565b60005b8381101561368c5781548189015260018201915060208101905061366d565b838801955050505b50505092915050565b60006136aa6032836143b9565b91507f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008301527f63656976657220696d706c656d656e74657200000000000000000000000000006020830152604082019050919050565b6000613710600b836143b9565b91507f4d617869756d20697320330000000000000000000000000000000000000000006000830152602082019050919050565b60006137506026836143b9565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006137b66025836143b9565b91507f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008301527f6f776e65720000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061381c601c836143b9565b91507f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006000830152602082019050919050565b600061385c600b836143b9565b91507f4d617869756d20697320350000000000000000000000000000000000000000006000830152602082019050919050565b600061389c6024836143b9565b91507f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006139026019836143b9565b91507f4552433732313a20617070726f766520746f2063616c6c6572000000000000006000830152602082019050919050565b60006139426020836143b9565b91507f4d617869756d206973203220647572696e67207072652d73616c6520737465706000830152602082019050919050565b6000613982602c836143b9565b91507f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b60006139e86011836143b9565b91507f4e6f74206d617463682062616c616e63650000000000000000000000000000006000830152602082019050919050565b6000613a286038836143b9565b91507f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008301527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006020830152604082019050919050565b6000613a8e6012836143b9565b91507f43616e2774206d696e7420616e796d6f726500000000000000000000000000006000830152602082019050919050565b6000613ace602a836143b9565b91507f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008301527f726f2061646472657373000000000000000000000000000000000000000000006020830152604082019050919050565b6000613b346029836143b9565b91507f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008301527f656e7420746f6b656e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000613b9a6020836143b9565b91507f4552433732313a206d696e7420746f20746865207a65726f20616464726573736000830152602082019050919050565b6000613bda602c836143b9565b91507f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000613c406020836143b9565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000613c80602f836143b9565b91507f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008301527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006020830152604082019050919050565b6000613ce66021836143b9565b91507f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008301527f72000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613d4c6034836143b9565b91507f4f6e6c792077686974656c697374732063616e206265206d696e74206475726960008301527f6e6720746865207072652d73616c6520737465700000000000000000000000006020830152604082019050919050565b6000613db26031836143b9565b91507f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008301527f776e6572206e6f7220617070726f7665640000000000000000000000000000006020830152604082019050919050565b6000613e18600d836143b9565b91507f496e76616c69642070726f6f66000000000000000000000000000000000000006000830152602082019050919050565b6000613e586012836143b9565b91507f43616e2774206d696e7420746865206e667400000000000000000000000000006000830152602082019050919050565b613e948161455e565b82525050565b6000613ea68284613546565b60148201915081905092915050565b6000613ec182866135ed565b9150613ecd82856135ed565b9150613ed9828461361e565b9150819050949350505050565b6000602082019050613efb6000830184613537565b92915050565b6000608082019050613f166000830187613537565b613f236020830186613537565b613f306040830185613e8b565b8181036060830152613f42818461357b565b905095945050505050565b6000602082019050613f62600083018461355d565b92915050565b6000602082019050613f7d600083018461356c565b92915050565b60006020820190508181036000830152613f9d81846135b4565b905092915050565b60006020820190508181036000830152613fbe8161369d565b9050919050565b60006020820190508181036000830152613fde81613703565b9050919050565b60006020820190508181036000830152613ffe81613743565b9050919050565b6000602082019050818103600083015261401e816137a9565b9050919050565b6000602082019050818103600083015261403e8161380f565b9050919050565b6000602082019050818103600083015261405e8161384f565b9050919050565b6000602082019050818103600083015261407e8161388f565b9050919050565b6000602082019050818103600083015261409e816138f5565b9050919050565b600060208201905081810360008301526140be81613935565b9050919050565b600060208201905081810360008301526140de81613975565b9050919050565b600060208201905081810360008301526140fe816139db565b9050919050565b6000602082019050818103600083015261411e81613a1b565b9050919050565b6000602082019050818103600083015261413e81613a81565b9050919050565b6000602082019050818103600083015261415e81613ac1565b9050919050565b6000602082019050818103600083015261417e81613b27565b9050919050565b6000602082019050818103600083015261419e81613b8d565b9050919050565b600060208201905081810360008301526141be81613bcd565b9050919050565b600060208201905081810360008301526141de81613c33565b9050919050565b600060208201905081810360008301526141fe81613c73565b9050919050565b6000602082019050818103600083015261421e81613cd9565b9050919050565b6000602082019050818103600083015261423e81613d3f565b9050919050565b6000602082019050818103600083015261425e81613da5565b9050919050565b6000602082019050818103600083015261427e81613e0b565b9050919050565b6000602082019050818103600083015261429e81613e4b565b9050919050565b60006020820190506142ba6000830184613e8b565b92915050565b6000604051905081810181811067ffffffffffffffff821117156142e7576142e6614707565b5b8060405250919050565b600067ffffffffffffffff82111561430c5761430b614707565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561433857614337614707565b5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff82111561436857614367614707565b5b601f19601f8301169050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006143e08261455e565b91506143eb8361455e565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156144205761441f61467a565b5b828201905092915050565b60006144368261455e565b91506144418361455e565b925082614451576144506146a9565b5b828204905092915050565b60006144678261455e565b91506144728361455e565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156144ab576144aa61467a565b5b828202905092915050565b60006144c18261455e565b91506144cc8361455e565b9250828210156144df576144de61467a565b5b828203905092915050565b60006144f58261453e565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561459557808201518184015260208101905061457a565b838111156145a4576000848401525b50505050565b600060028204905060018216806145c257607f821691505b602082108114156145d6576145d56146d8565b5b50919050565b60006145e78261455e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561461a5761461961467a565b5b600182019050919050565b600061463082614637565b9050919050565b600061464282614747565b9050919050565b60006146548261455e565b915061465f8361455e565b92508261466f5761466e6146a9565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b61475d816144ea565b811461476857600080fd5b50565b614774816144fc565b811461477f57600080fd5b50565b61478b81614508565b811461479657600080fd5b50565b6147a281614512565b81146147ad57600080fd5b50565b6147b98161455e565b81146147c457600080fd5b5056fea26469706673582212206e79576a088a5ac990d7f7a87e31c221c12de91c08415f3bdb604e581c44d34864736f6c63430008000033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000000e4d696e654e6174696f6e734e465400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034d4e4e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005768747470733a2f2f6d696e656e6174696f6e732e6d7970696e6174612e636c6f75642f697066732f516d616b55617565315576754644347248466d5166754c5842666a557569324a6f4164483838663736474d47554e2f000000000000000000
-----Decoded View---------------
Arg [0] : _name (string): MineNationsNFT
Arg [1] : _symbol (string): MNN
Arg [2] : _initBaseURI (string):
Arg [3] : _initNotRevealedURI (string): https://minenations.mypinata.cloud/ipfs/QmakUaue1UvuFD4rHFmQfuLXBfjUui2JoAdH88f76GMGUN/
-----Encoded View---------------
13 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000120
Arg [4] : 000000000000000000000000000000000000000000000000000000000000000e
Arg [5] : 4d696e654e6174696f6e734e4654000000000000000000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [7] : 4d4e4e0000000000000000000000000000000000000000000000000000000000
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [9] : 0000000000000000000000000000000000000000000000000000000000000057
Arg [10] : 68747470733a2f2f6d696e656e6174696f6e732e6d7970696e6174612e636c6f
Arg [11] : 75642f697066732f516d616b55617565315576754644347248466d5166754c58
Arg [12] : 42666a557569324a6f4164483838663736474d47554e2f000000000000000000
Deployed Bytecode Sourcemap
48850:5401:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31552:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53409:99;;;;;;;;;;;;;:::i;:::-;;32497:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34056:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33579:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50083:98;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52638:99;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34806:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49133:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54110:138;;;;;;;;;;;;;:::i;:::-;;35216:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51030:917;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49241:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52826:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49407:42;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32191:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31921:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3878:103;;;;;;;;;;;;;:::i;:::-;;53638:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49054:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53214:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3227:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53772:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32666;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34349:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49310:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53327:74;;;;;;;;;;;;;:::i;:::-;;35472:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53516:114;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49089:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50189:833;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53078:128;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49165:69;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49276:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34575:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53884:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52938:132;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4136:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51955:675;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49356:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31552:305;31654:4;31706:25;31691:40;;;:11;:40;;;;:105;;;;31763:33;31748:48;;;:11;:48;;;;31691:105;:158;;;;31813:36;31837:11;31813:23;:36::i;:::-;31691:158;31671:178;;31552:305;;;:::o;53409:99::-;3458:12;:10;:12::i;:::-;3447:23;;:7;:5;:7::i;:::-;:23;;;3439:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53494:6:::1;53476:15;:24;;;;:::i;:::-;53461:12;:39;;;;53409:99::o:0;32497:100::-;32551:13;32584:5;32577:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32497:100;:::o;34056:221::-;34132:7;34160:16;34168:7;34160;:16::i;:::-;34152:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;34245:15;:24;34261:7;34245:24;;;;;;;;;;;;;;;;;;;;;34238:31;;34056:221;;;:::o;33579:411::-;33660:13;33676:23;33691:7;33676:14;:23::i;:::-;33660:39;;33724:5;33718:11;;:2;:11;;;;33710:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;33818:5;33802:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;33827:37;33844:5;33851:12;:10;:12::i;:::-;33827:16;:37::i;:::-;33802:62;33780:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;33961:21;33970:2;33974:7;33961:8;:21::i;:::-;33579:411;;;:::o;50083:98::-;50127:7;50154:19;:9;:17;:19::i;:::-;50147:26;;50083:98;:::o;52638:99::-;52677:4;52717:12;;52699:15;:30;52692:37;;52638:99;:::o;34806:339::-;35001:41;35020:12;:10;:12::i;:::-;35034:7;35001:18;:41::i;:::-;34993:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;35109:28;35119:4;35125:2;35129:7;35109:9;:28::i;:::-;34806:339;;;:::o;49133:25::-;;;;:::o;54110:138::-;3458:12;:10;:12::i;:::-;3447:23;;:7;:5;:7::i;:::-;:23;;;3439:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54158:14:::1;54175:7;:5;:7::i;:::-;54158:24;;54199:6;54191:24;;:49;54217:21;54191:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;3518:1;54110:138::o:0;35216:185::-;35354:39;35371:4;35377:2;35381:7;35354:39;;;;;;;;;;;;:16;:39::i;:::-;35216:185;;;:::o;51030:917::-;51134:12;51176:10;51159:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;51149:39;;;;;;51134:54;;51205:50;51224:12;51238:10;;51250:4;51205:18;:50::i;:::-;51197:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;51316:5;51306:6;51290:13;:11;:13::i;:::-;:22;;;;:::i;:::-;:31;;51282:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;51376:1;51361:12;;:16;51353:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;51430:12;;51412:15;:30;51409:373;;;51497:1;51487:6;51463:9;:21;51473:10;51463:21;;;;;;;;;;;;;;;;:30;;;;:::i;:::-;:35;;51455:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;51576:14;;51567:6;:23;;;;:::i;:::-;51554:9;:36;;51546:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;51409:373;;;51681:1;51671:6;51647:9;:21;51657:10;51647:21;;;;;;;;;;;;;;;;:30;;;;:::i;:::-;:35;;51639:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;51739:11;;51730:6;:20;;;;:::i;:::-;51717:9;:33;;51709:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;51409:373;51796:6;51792:148;51812:6;51808:1;:10;51792:148;;;51836:21;:9;:19;:21::i;:::-;51868:9;:14;51878:3;51868:14;;;;;;;;;;;;;;;;:16;;;;;;;;;:::i;:::-;;;;;;51895:35;51905:3;51910:19;:9;:17;:19::i;:::-;51895:9;:35::i;:::-;51820:3;;;;;:::i;:::-;;;;51792:148;;;;51030:917;;;;:::o;49241:28::-;;;;;;;;;;;;;:::o;52826:104::-;3458:12;:10;:12::i;:::-;3447:23;;:7;:5;:7::i;:::-;:23;;;3439:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52911:11:::1;52901:7;:21;;;;;;;;;;;;:::i;:::-;;52826:104:::0;:::o;49407:42::-;;;;;;;;;;;;;;;;;:::o;32191:239::-;32263:7;32283:13;32299:7;:16;32307:7;32299:16;;;;;;;;;;;;;;;;;;;;;32283:32;;32351:1;32334:19;;:5;:19;;;;32326:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;32417:5;32410:12;;;32191:239;;;:::o;31921:208::-;31993:7;32038:1;32021:19;;:5;:19;;;;32013:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;32105:9;:16;32115:5;32105:16;;;;;;;;;;;;;;;;32098:23;;31921:208;;;:::o;3878:103::-;3458:12;:10;:12::i;:::-;3447:23;;:7;:5;:7::i;:::-;:23;;;3439:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3943:30:::1;3970:1;3943:18;:30::i;:::-;3878:103::o:0;53638:126::-;3458:12;:10;:12::i;:::-;3447:23;;:7;:5;:7::i;:::-;:23;;;3439:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53738:18:::1;53721:14;:35;;;;53638:126:::0;:::o;49054:28::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;53214:105::-;3458:12;:10;:12::i;:::-;3447:23;;:7;:5;:7::i;:::-;:23;;;3439:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53300:11:::1;53287:10;:24;;;;53214:105:::0;:::o;3227:87::-;3273:7;3300:6;;;;;;;;;;;3293:13;;3227:87;:::o;53772:104::-;53814:4;53856:12;;53838:15;:30;53831:37;;53772:104;:::o;32666:::-;32722:13;32755:7;32748:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32666:104;:::o;34349:155::-;34444:52;34463:12;:10;:12::i;:::-;34477:8;34487;34444:18;:52::i;:::-;34349:155;;:::o;49310:39::-;;;;:::o;53327:74::-;3458:12;:10;:12::i;:::-;3447:23;;:7;:5;:7::i;:::-;:23;;;3439:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53389:4:::1;53378:8;;:15;;;;;;;;;;;;;;;;;;53327:74::o:0;35472:328::-;35647:41;35666:12;:10;:12::i;:::-;35680:7;35647:18;:41::i;:::-;35639:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;35753:39;35767:4;35773:2;35777:7;35786:5;35753:13;:39::i;:::-;35472:328;;;;:::o;53516:114::-;3458:12;:10;:12::i;:::-;3447:23;;:7;:5;:7::i;:::-;:23;;;3439:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53607:15:::1;53593:11;:29;;;;53516:114:::0;:::o;49089:37::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;50189:833::-;50262:13;50293:16;50301:7;50293;:16::i;:::-;50285:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;50372:28;50403:10;:8;:10::i;:::-;50372:41;;50439:5;50427:17;;:8;;;;;;;;;;;:17;;;50424:305;;;50494:1;50469:14;50463:28;:32;:256;;;;;;;;;;;;;;;;;50575:14;50612:19;50629:1;50612:16;:19::i;:::-;50654:13;50536:150;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;50463:256;50456:263;;;;;50424:305;50783:1;50758:14;50752:28;:32;:262;;;;;;;;;;;;;;;;;50864:14;50901:25;50918:7;50901:16;:25::i;:::-;50949:13;50825:156;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;50752:262;50745:269;;;50189:833;;;;:::o;53078:128::-;3458:12;:10;:12::i;:::-;3447:23;;:7;:5;:7::i;:::-;:23;;;3439:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53181:17:::1;53165:13;:33;;;;;;;;;;;;:::i;:::-;;53078:128:::0;:::o;49165:69::-;;;;;;;;;;;;;:::o;49276:27::-;;;;:::o;34575:164::-;34672:4;34696:18;:25;34715:5;34696:25;;;;;;;;;;;;;;;:35;34722:8;34696:35;;;;;;;;;;;;;;;;;;;;;;;;;34689:42;;34575:164;;;;:::o;53884:218::-;53957:4;53973:12;54015:10;53998:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;53988:39;;;;;;53973:54;;54044:50;54063:12;54077:10;;54089:4;54044:18;:50::i;:::-;54037:57;;;53884:218;;;:::o;52938:132::-;3458:12;:10;:12::i;:::-;3447:23;;:7;:5;:7::i;:::-;:23;;;3439:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53044:18:::1;53027:14;:35;;;;;;;;;;;;:::i;:::-;;52938:132:::0;:::o;4136:201::-;3458:12;:10;:12::i;:::-;3447:23;;:7;:5;:7::i;:::-;:23;;;3439:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4245:1:::1;4225:22;;:8;:22;;;;4217:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;4301:28;4320:8;4301:18;:28::i;:::-;4136:201:::0;:::o;51955:675::-;52057:5;52047:6;52031:13;:11;:13::i;:::-;:22;;;;:::i;:::-;:31;;52023:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;52111:7;:5;:7::i;:::-;52097:21;;:10;:21;;;;:47;;;;;52135:9;;;;;;;;;;;52122:22;;:10;:22;;;;52097:47;52094:371;;;52180:1;52165:12;;:16;52157:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;52242:12;;52223:15;:31;;52215:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;52352:11;;52343:6;:20;;;;:::i;:::-;52330:9;:33;;52322:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;52438:1;52428:6;52404:9;:21;52414:10;52404:21;;;;;;;;;;;;;;;;:30;;;;:::i;:::-;:35;;52396:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;52094:371;52479:6;52475:148;52495:6;52491:1;:10;52475:148;;;52519:21;:9;:19;:21::i;:::-;52551:9;:14;52561:3;52551:14;;;;;;;;;;;;;;;;:16;;;;;;;;;:::i;:::-;;;;;;52578:35;52588:3;52593:19;:9;:17;:19::i;:::-;52578:9;:35::i;:::-;52503:3;;;;;:::i;:::-;;;;52475:148;;;;51955:675;;:::o;49356:42::-;;;;:::o;970:127::-;1077:1;1059:7;:14;;;:19;;;;;;;;;;;970:127;:::o;848:114::-;913:7;940;:14;;;933:21;;848:114;;;:::o;20006:326::-;20066:4;20323:1;20301:7;:12;;;;;;;;;;;;;;;;;;;;;;;;;:19;:23;20294:30;;20006:326;;;:::o;30084:157::-;30169:4;30208:25;30193:40;;;:11;:40;;;;30186:47;;30084:157;;;:::o;2037:98::-;2090:7;2117:10;2110:17;;2037:98;:::o;37310:127::-;37375:4;37427:1;37399:30;;:7;:16;37407:7;37399:16;;;;;;;;;;;;;;;;;;;;;:30;;;;37392:37;;37310:127;;;:::o;41456:174::-;41558:2;41531:15;:24;41547:7;41531:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;41614:7;41610:2;41576:46;;41585:23;41600:7;41585:14;:23::i;:::-;41576:46;;;;;;;;;;;;41456:174;;:::o;37604:348::-;37697:4;37722:16;37730:7;37722;:16::i;:::-;37714:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;37798:13;37814:23;37829:7;37814:14;:23::i;:::-;37798:39;;37867:5;37856:16;;:7;:16;;;:51;;;;37900:7;37876:31;;:20;37888:7;37876:11;:20::i;:::-;:31;;;37856:51;:87;;;;37911:32;37928:5;37935:7;37911:16;:32::i;:::-;37856:87;37848:96;;;37604:348;;;;:::o;40713:625::-;40872:4;40845:31;;:23;40860:7;40845:14;:23::i;:::-;:31;;;40837:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;40951:1;40937:16;;:2;:16;;;;40929:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;41007:39;41028:4;41034:2;41038:7;41007:20;:39::i;:::-;41111:29;41128:1;41132:7;41111:8;:29::i;:::-;41172:1;41153:9;:15;41163:4;41153:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;41201:1;41184:9;:13;41194:2;41184:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;41232:2;41213:7;:16;41221:7;41213:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;41271:7;41267:2;41252:27;;41261:4;41252:27;;;;;;;;;;;;41292:38;41312:4;41318:2;41322:7;41292:19;:38::i;:::-;40713:625;;;:::o;47382:190::-;47507:4;47560;47531:25;47544:5;47551:4;47531:12;:25::i;:::-;:33;47524:40;;47382:190;;;;;:::o;38294:110::-;38370:26;38380:2;38384:7;38370:26;;;;;;;;;;;;:9;:26::i;:::-;38294:110;;:::o;4497:191::-;4571:16;4590:6;;;;;;;;;;;4571:25;;4616:8;4607:6;;:17;;;;;;;;;;;;;;;;;;4671:8;4640:40;;4661:8;4640:40;;;;;;;;;;;;4497:191;;:::o;41772:315::-;41927:8;41918:17;;:5;:17;;;;41910:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;42014:8;41976:18;:25;41995:5;41976:25;;;;;;;;;;;;;;;:35;42002:8;41976:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;42060:8;42038:41;;42053:5;42038:41;;;42070:8;42038:41;;;;;;:::i;:::-;;;;;;;;41772:315;;;:::o;36682:::-;36839:28;36849:4;36855:2;36859:7;36839:9;:28::i;:::-;36886:48;36909:4;36915:2;36919:7;36928:5;36886:22;:48::i;:::-;36878:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;36682:315;;;;:::o;49814:177::-;49874:13;49913:5;49901:17;;:8;;;;;;;;;;;:17;;;49898:63;;;49937:14;49930:21;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49898:63;49976:7;49969:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49814:177;;:::o;27558:723::-;27614:13;27844:1;27835:5;:10;27831:53;;;27862:10;;;;;;;;;;;;;;;;;;;;;27831:53;27894:12;27909:5;27894:20;;27925:14;27950:78;27965:1;27957:4;:9;27950:78;;27983:8;;;;;:::i;:::-;;;;28014:2;28006:10;;;;;:::i;:::-;;;27950:78;;;28038:19;28070:6;28060:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28038:39;;28088:154;28104:1;28095:5;:10;28088:154;;28132:1;28122:11;;;;;:::i;:::-;;;28199:2;28191:5;:10;;;;:::i;:::-;28178:2;:24;;;;:::i;:::-;28165:39;;28148:6;28155;28148:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;28228:2;28219:11;;;;;:::i;:::-;;;28088:154;;;28266:6;28252:21;;;;;27558:723;;;;:::o;44023:126::-;;;;:::o;44534:125::-;;;;:::o;47934:675::-;48017:7;48037:20;48060:4;48037:27;;48080:9;48075:497;48099:5;:12;48095:1;:16;48075:497;;;48133:20;48156:5;48162:1;48156:8;;;;;;;;;;;;;;;;;;;;;;48133:31;;48199:12;48183;:28;48179:382;;48326:42;48341:12;48355;48326:14;:42::i;:::-;48311:57;;48179:382;;;48503:42;48518:12;48532;48503:14;:42::i;:::-;48488:57;;48179:382;48075:497;48113:3;;;;;:::i;:::-;;;;48075:497;;;;48589:12;48582:19;;;47934:675;;;;:::o;38631:321::-;38761:18;38767:2;38771:7;38761:5;:18::i;:::-;38812:54;38843:1;38847:2;38851:7;38860:5;38812:22;:54::i;:::-;38790:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;38631:321;;;:::o;42652:799::-;42807:4;42828:15;:2;:13;;;:15::i;:::-;42824:620;;;42880:2;42864:36;;;42901:12;:10;:12::i;:::-;42915:4;42921:7;42930:5;42864:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;42860:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43123:1;43106:6;:13;:18;43102:272;;;43149:60;;;;;;;;;;:::i;:::-;;;;;;;;43102:272;43324:6;43318:13;43309:6;43305:2;43301:15;43294:38;42860:529;42997:41;;;42987:51;;;:6;:51;;;;42980:58;;;;;42824:620;43428:4;43421:11;;42652:799;;;;;;;:::o;48617:224::-;48685:13;48748:1;48742:4;48735:15;48777:1;48771:4;48764:15;48818:4;48812;48802:21;48793:30;;48720:114;;;;:::o;39288:439::-;39382:1;39368:16;;:2;:16;;;;39360:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;39441:16;39449:7;39441;:16::i;:::-;39440:17;39432:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;39503:45;39532:1;39536:2;39540:7;39503:20;:45::i;:::-;39578:1;39561:9;:13;39571:2;39561:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;39609:2;39590:7;:16;39598:7;39590:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;39654:7;39650:2;39629:33;;39646:1;39629:33;;;;;;;;;;;;39675:44;39703:1;39707:2;39711:7;39675:19;:44::i;:::-;39288:439;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:622:1:-;;145:80;160:64;217:6;160:64;:::i;:::-;145:80;:::i;:::-;136:89;;245:5;273:6;266:5;259:21;299:4;292:5;288:16;281:23;;324:6;374:3;366:4;358:6;354:17;349:3;345:27;342:36;339:2;;;391:1;388;381:12;339:2;419:1;404:236;429:6;426:1;423:13;404:236;;;496:3;524:37;557:3;545:10;524:37;:::i;:::-;519:3;512:50;591:4;586:3;582:14;575:21;;625:4;620:3;616:14;609:21;;464:176;451:1;448;444:9;439:14;;404:236;;;408:14;126:520;;;;;;;:::o;652:342::-;;754:64;769:48;810:6;769:48;:::i;:::-;754:64;:::i;:::-;745:73;;841:6;834:5;827:21;879:4;872:5;868:16;917:3;908:6;903:3;899:16;896:25;893:2;;;934:1;931;924:12;893:2;947:41;981:6;976:3;971;947:41;:::i;:::-;735:259;;;;;;:::o;1000:344::-;;1103:65;1118:49;1160:6;1118:49;:::i;:::-;1103:65;:::i;:::-;1094:74;;1191:6;1184:5;1177:21;1229:4;1222:5;1218:16;1267:3;1258:6;1253:3;1249:16;1246:25;1243:2;;;1284:1;1281;1274:12;1243:2;1297:41;1331:6;1326:3;1321;1297:41;:::i;:::-;1084:260;;;;;;:::o;1350:139::-;;1434:6;1421:20;1412:29;;1450:33;1477:5;1450:33;:::i;:::-;1402:87;;;;:::o;1512:303::-;;1632:3;1625:4;1617:6;1613:17;1609:27;1599:2;;1650:1;1647;1640:12;1599:2;1690:6;1677:20;1715:94;1805:3;1797:6;1790:4;1782:6;1778:17;1715:94;:::i;:::-;1706:103;;1589:226;;;;;:::o;1821:133::-;;1902:6;1889:20;1880:29;;1918:30;1942:5;1918:30;:::i;:::-;1870:84;;;;:::o;1960:139::-;;2044:6;2031:20;2022:29;;2060:33;2087:5;2060:33;:::i;:::-;2012:87;;;;:::o;2105:137::-;;2188:6;2175:20;2166:29;;2204:32;2230:5;2204:32;:::i;:::-;2156:86;;;;:::o;2248:141::-;;2335:6;2329:13;2320:22;;2351:32;2377:5;2351:32;:::i;:::-;2310:79;;;;:::o;2408:271::-;;2512:3;2505:4;2497:6;2493:17;2489:27;2479:2;;2530:1;2527;2520:12;2479:2;2570:6;2557:20;2595:78;2669:3;2661:6;2654:4;2646:6;2642:17;2595:78;:::i;:::-;2586:87;;2469:210;;;;;:::o;2699:273::-;;2804:3;2797:4;2789:6;2785:17;2781:27;2771:2;;2822:1;2819;2812:12;2771:2;2862:6;2849:20;2887:79;2962:3;2954:6;2947:4;2939:6;2935:17;2887:79;:::i;:::-;2878:88;;2761:211;;;;;:::o;2978:139::-;;3062:6;3049:20;3040:29;;3078:33;3105:5;3078:33;:::i;:::-;3030:87;;;;:::o;3123:262::-;;3231:2;3219:9;3210:7;3206:23;3202:32;3199:2;;;3247:1;3244;3237:12;3199:2;3290:1;3315:53;3360:7;3351:6;3340:9;3336:22;3315:53;:::i;:::-;3305:63;;3261:117;3189:196;;;;:::o;3391:407::-;;;3516:2;3504:9;3495:7;3491:23;3487:32;3484:2;;;3532:1;3529;3522:12;3484:2;3575:1;3600:53;3645:7;3636:6;3625:9;3621:22;3600:53;:::i;:::-;3590:63;;3546:117;3702:2;3728:53;3773:7;3764:6;3753:9;3749:22;3728:53;:::i;:::-;3718:63;;3673:118;3474:324;;;;;:::o;3804:552::-;;;;3946:2;3934:9;3925:7;3921:23;3917:32;3914:2;;;3962:1;3959;3952:12;3914:2;4005:1;4030:53;4075:7;4066:6;4055:9;4051:22;4030:53;:::i;:::-;4020:63;;3976:117;4132:2;4158:53;4203:7;4194:6;4183:9;4179:22;4158:53;:::i;:::-;4148:63;;4103:118;4260:2;4286:53;4331:7;4322:6;4311:9;4307:22;4286:53;:::i;:::-;4276:63;;4231:118;3904:452;;;;;:::o;4362:809::-;;;;;4530:3;4518:9;4509:7;4505:23;4501:33;4498:2;;;4547:1;4544;4537:12;4498:2;4590:1;4615:53;4660:7;4651:6;4640:9;4636:22;4615:53;:::i;:::-;4605:63;;4561:117;4717:2;4743:53;4788:7;4779:6;4768:9;4764:22;4743:53;:::i;:::-;4733:63;;4688:118;4845:2;4871:53;4916:7;4907:6;4896:9;4892:22;4871:53;:::i;:::-;4861:63;;4816:118;5001:2;4990:9;4986:18;4973:32;5032:18;5024:6;5021:30;5018:2;;;5064:1;5061;5054:12;5018:2;5092:62;5146:7;5137:6;5126:9;5122:22;5092:62;:::i;:::-;5082:72;;4944:220;4488:683;;;;;;;:::o;5177:401::-;;;5299:2;5287:9;5278:7;5274:23;5270:32;5267:2;;;5315:1;5312;5305:12;5267:2;5358:1;5383:53;5428:7;5419:6;5408:9;5404:22;5383:53;:::i;:::-;5373:63;;5329:117;5485:2;5511:50;5553:7;5544:6;5533:9;5529:22;5511:50;:::i;:::-;5501:60;;5456:115;5257:321;;;;;:::o;5584:407::-;;;5709:2;5697:9;5688:7;5684:23;5680:32;5677:2;;;5725:1;5722;5715:12;5677:2;5768:1;5793:53;5838:7;5829:6;5818:9;5814:22;5793:53;:::i;:::-;5783:63;;5739:117;5895:2;5921:53;5966:7;5957:6;5946:9;5942:22;5921:53;:::i;:::-;5911:63;;5866:118;5667:324;;;;;:::o;5997:695::-;;;;6164:2;6152:9;6143:7;6139:23;6135:32;6132:2;;;6180:1;6177;6170:12;6132:2;6223:1;6248:53;6293:7;6284:6;6273:9;6269:22;6248:53;:::i;:::-;6238:63;;6194:117;6350:2;6376:53;6421:7;6412:6;6401:9;6397:22;6376:53;:::i;:::-;6366:63;;6321:118;6506:2;6495:9;6491:18;6478:32;6537:18;6529:6;6526:30;6523:2;;;6569:1;6566;6559:12;6523:2;6597:78;6667:7;6658:6;6647:9;6643:22;6597:78;:::i;:::-;6587:88;;6449:236;6122:570;;;;;:::o;6698:405::-;;6831:2;6819:9;6810:7;6806:23;6802:32;6799:2;;;6847:1;6844;6837:12;6799:2;6918:1;6907:9;6903:17;6890:31;6948:18;6940:6;6937:30;6934:2;;;6980:1;6977;6970:12;6934:2;7008:78;7078:7;7069:6;7058:9;7054:22;7008:78;:::i;:::-;6998:88;;6861:235;6789:314;;;;:::o;7109:262::-;;7217:2;7205:9;7196:7;7192:23;7188:32;7185:2;;;7233:1;7230;7223:12;7185:2;7276:1;7301:53;7346:7;7337:6;7326:9;7322:22;7301:53;:::i;:::-;7291:63;;7247:117;7175:196;;;;:::o;7377:260::-;;7484:2;7472:9;7463:7;7459:23;7455:32;7452:2;;;7500:1;7497;7490:12;7452:2;7543:1;7568:52;7612:7;7603:6;7592:9;7588:22;7568:52;:::i;:::-;7558:62;;7514:116;7442:195;;;;:::o;7643:282::-;;7761:2;7749:9;7740:7;7736:23;7732:32;7729:2;;;7777:1;7774;7767:12;7729:2;7820:1;7845:63;7900:7;7891:6;7880:9;7876:22;7845:63;:::i;:::-;7835:73;;7791:127;7719:206;;;;:::o;7931:375::-;;8049:2;8037:9;8028:7;8024:23;8020:32;8017:2;;;8065:1;8062;8055:12;8017:2;8136:1;8125:9;8121:17;8108:31;8166:18;8158:6;8155:30;8152:2;;;8198:1;8195;8188:12;8152:2;8226:63;8281:7;8272:6;8261:9;8257:22;8226:63;:::i;:::-;8216:73;;8079:220;8007:299;;;;:::o;8312:262::-;;8420:2;8408:9;8399:7;8395:23;8391:32;8388:2;;;8436:1;8433;8426:12;8388:2;8479:1;8504:53;8549:7;8540:6;8529:9;8525:22;8504:53;:::i;:::-;8494:63;;8450:117;8378:196;;;;:::o;8580:118::-;8667:24;8685:5;8667:24;:::i;:::-;8662:3;8655:37;8645:53;;:::o;8704:157::-;8809:45;8829:24;8847:5;8829:24;:::i;:::-;8809:45;:::i;:::-;8804:3;8797:58;8787:74;;:::o;8867:109::-;8948:21;8963:5;8948:21;:::i;:::-;8943:3;8936:34;8926:50;;:::o;8982:118::-;9069:24;9087:5;9069:24;:::i;:::-;9064:3;9057:37;9047:53;;:::o;9106:360::-;;9220:38;9252:5;9220:38;:::i;:::-;9274:70;9337:6;9332:3;9274:70;:::i;:::-;9267:77;;9353:52;9398:6;9393:3;9386:4;9379:5;9375:16;9353:52;:::i;:::-;9430:29;9452:6;9430:29;:::i;:::-;9425:3;9421:39;9414:46;;9196:270;;;;;:::o;9472:364::-;;9588:39;9621:5;9588:39;:::i;:::-;9643:71;9707:6;9702:3;9643:71;:::i;:::-;9636:78;;9723:52;9768:6;9763:3;9756:4;9749:5;9745:16;9723:52;:::i;:::-;9800:29;9822:6;9800:29;:::i;:::-;9795:3;9791:39;9784:46;;9564:272;;;;;:::o;9842:377::-;;9976:39;10009:5;9976:39;:::i;:::-;10031:89;10113:6;10108:3;10031:89;:::i;:::-;10024:96;;10129:52;10174:6;10169:3;10162:4;10155:5;10151:16;10129:52;:::i;:::-;10206:6;10201:3;10197:16;10190:23;;9952:267;;;;;:::o;10249:845::-;;10389:5;10383:12;10418:36;10444:9;10418:36;:::i;:::-;10470:89;10552:6;10547:3;10470:89;:::i;:::-;10463:96;;10590:1;10579:9;10575:17;10606:1;10601:137;;;;10752:1;10747:341;;;;10568:520;;10601:137;10685:4;10681:9;10670;10666:25;10661:3;10654:38;10721:6;10716:3;10712:16;10705:23;;10601:137;;10747:341;10814:38;10846:5;10814:38;:::i;:::-;10874:1;10888:154;10902:6;10899:1;10896:13;10888:154;;;10976:7;10970:14;10966:1;10961:3;10957:11;10950:35;11026:1;11017:7;11013:15;11002:26;;10924:4;10921:1;10917:12;10912:17;;10888:154;;;11071:6;11066:3;11062:16;11055:23;;10754:334;;10568:520;;10356:738;;;;;;:::o;11100:382::-;;11263:67;11327:2;11322:3;11263:67;:::i;:::-;11256:74;;11360:34;11356:1;11351:3;11347:11;11340:55;11426:20;11421:2;11416:3;11412:12;11405:42;11473:2;11468:3;11464:12;11457:19;;11246:236;;;:::o;11488:309::-;;11651:67;11715:2;11710:3;11651:67;:::i;:::-;11644:74;;11748:13;11744:1;11739:3;11735:11;11728:34;11788:2;11783:3;11779:12;11772:19;;11634:163;;;:::o;11803:370::-;;11966:67;12030:2;12025:3;11966:67;:::i;:::-;11959:74;;12063:34;12059:1;12054:3;12050:11;12043:55;12129:8;12124:2;12119:3;12115:12;12108:30;12164:2;12159:3;12155:12;12148:19;;11949:224;;;:::o;12179:369::-;;12342:67;12406:2;12401:3;12342:67;:::i;:::-;12335:74;;12439:34;12435:1;12430:3;12426:11;12419:55;12505:7;12500:2;12495:3;12491:12;12484:29;12539:2;12534:3;12530:12;12523:19;;12325:223;;;:::o;12554:326::-;;12717:67;12781:2;12776:3;12717:67;:::i;:::-;12710:74;;12814:30;12810:1;12805:3;12801:11;12794:51;12871:2;12866:3;12862:12;12855:19;;12700:180;;;:::o;12886:309::-;;13049:67;13113:2;13108:3;13049:67;:::i;:::-;13042:74;;13146:13;13142:1;13137:3;13133:11;13126:34;13186:2;13181:3;13177:12;13170:19;;13032:163;;;:::o;13201:368::-;;13364:67;13428:2;13423:3;13364:67;:::i;:::-;13357:74;;13461:34;13457:1;13452:3;13448:11;13441:55;13527:6;13522:2;13517:3;13513:12;13506:28;13560:2;13555:3;13551:12;13544:19;;13347:222;;;:::o;13575:323::-;;13738:67;13802:2;13797:3;13738:67;:::i;:::-;13731:74;;13835:27;13831:1;13826:3;13822:11;13815:48;13889:2;13884:3;13880:12;13873:19;;13721:177;;;:::o;13904:330::-;;14067:67;14131:2;14126:3;14067:67;:::i;:::-;14060:74;;14164:34;14160:1;14155:3;14151:11;14144:55;14225:2;14220:3;14216:12;14209:19;;14050:184;;;:::o;14240:376::-;;14403:67;14467:2;14462:3;14403:67;:::i;:::-;14396:74;;14500:34;14496:1;14491:3;14487:11;14480:55;14566:14;14561:2;14556:3;14552:12;14545:36;14607:2;14602:3;14598:12;14591:19;;14386:230;;;:::o;14622:315::-;;14785:67;14849:2;14844:3;14785:67;:::i;:::-;14778:74;;14882:19;14878:1;14873:3;14869:11;14862:40;14928:2;14923:3;14919:12;14912:19;;14768:169;;;:::o;14943:388::-;;15106:67;15170:2;15165:3;15106:67;:::i;:::-;15099:74;;15203:34;15199:1;15194:3;15190:11;15183:55;15269:26;15264:2;15259:3;15255:12;15248:48;15322:2;15317:3;15313:12;15306:19;;15089:242;;;:::o;15337:316::-;;15500:67;15564:2;15559:3;15500:67;:::i;:::-;15493:74;;15597:20;15593:1;15588:3;15584:11;15577:41;15644:2;15639:3;15635:12;15628:19;;15483:170;;;:::o;15659:374::-;;15822:67;15886:2;15881:3;15822:67;:::i;:::-;15815:74;;15919:34;15915:1;15910:3;15906:11;15899:55;15985:12;15980:2;15975:3;15971:12;15964:34;16024:2;16019:3;16015:12;16008:19;;15805:228;;;:::o;16039:373::-;;16202:67;16266:2;16261:3;16202:67;:::i;:::-;16195:74;;16299:34;16295:1;16290:3;16286:11;16279:55;16365:11;16360:2;16355:3;16351:12;16344:33;16403:2;16398:3;16394:12;16387:19;;16185:227;;;:::o;16418:330::-;;16581:67;16645:2;16640:3;16581:67;:::i;:::-;16574:74;;16678:34;16674:1;16669:3;16665:11;16658:55;16739:2;16734:3;16730:12;16723:19;;16564:184;;;:::o;16754:376::-;;16917:67;16981:2;16976:3;16917:67;:::i;:::-;16910:74;;17014:34;17010:1;17005:3;17001:11;16994:55;17080:14;17075:2;17070:3;17066:12;17059:36;17121:2;17116:3;17112:12;17105:19;;16900:230;;;:::o;17136:330::-;;17299:67;17363:2;17358:3;17299:67;:::i;:::-;17292:74;;17396:34;17392:1;17387:3;17383:11;17376:55;17457:2;17452:3;17448:12;17441:19;;17282:184;;;:::o;17472:379::-;;17635:67;17699:2;17694:3;17635:67;:::i;:::-;17628:74;;17732:34;17728:1;17723:3;17719:11;17712:55;17798:17;17793:2;17788:3;17784:12;17777:39;17842:2;17837:3;17833:12;17826:19;;17618:233;;;:::o;17857:365::-;;18020:67;18084:2;18079:3;18020:67;:::i;:::-;18013:74;;18117:34;18113:1;18108:3;18104:11;18097:55;18183:3;18178:2;18173:3;18169:12;18162:25;18213:2;18208:3;18204:12;18197:19;;18003:219;;;:::o;18228:384::-;;18391:67;18455:2;18450:3;18391:67;:::i;:::-;18384:74;;18488:34;18484:1;18479:3;18475:11;18468:55;18554:22;18549:2;18544:3;18540:12;18533:44;18603:2;18598:3;18594:12;18587:19;;18374:238;;;:::o;18618:381::-;;18781:67;18845:2;18840:3;18781:67;:::i;:::-;18774:74;;18878:34;18874:1;18869:3;18865:11;18858:55;18944:19;18939:2;18934:3;18930:12;18923:41;18990:2;18985:3;18981:12;18974:19;;18764:235;;;:::o;19005:311::-;;19168:67;19232:2;19227:3;19168:67;:::i;:::-;19161:74;;19265:15;19261:1;19256:3;19252:11;19245:36;19307:2;19302:3;19298:12;19291:19;;19151:165;;;:::o;19322:316::-;;19485:67;19549:2;19544:3;19485:67;:::i;:::-;19478:74;;19582:20;19578:1;19573:3;19569:11;19562:41;19629:2;19624:3;19620:12;19613:19;;19468:170;;;:::o;19644:118::-;19731:24;19749:5;19731:24;:::i;:::-;19726:3;19719:37;19709:53;;:::o;19768:256::-;;19895:75;19966:3;19957:6;19895:75;:::i;:::-;19995:2;19990:3;19986:12;19979:19;;20015:3;20008:10;;19884:140;;;;:::o;20030:589::-;;20277:95;20368:3;20359:6;20277:95;:::i;:::-;20270:102;;20389:95;20480:3;20471:6;20389:95;:::i;:::-;20382:102;;20501:92;20589:3;20580:6;20501:92;:::i;:::-;20494:99;;20610:3;20603:10;;20259:360;;;;;;:::o;20625:222::-;;20756:2;20745:9;20741:18;20733:26;;20769:71;20837:1;20826:9;20822:17;20813:6;20769:71;:::i;:::-;20723:124;;;;:::o;20853:640::-;;21086:3;21075:9;21071:19;21063:27;;21100:71;21168:1;21157:9;21153:17;21144:6;21100:71;:::i;:::-;21181:72;21249:2;21238:9;21234:18;21225:6;21181:72;:::i;:::-;21263;21331:2;21320:9;21316:18;21307:6;21263:72;:::i;:::-;21382:9;21376:4;21372:20;21367:2;21356:9;21352:18;21345:48;21410:76;21481:4;21472:6;21410:76;:::i;:::-;21402:84;;21053:440;;;;;;;:::o;21499:210::-;;21624:2;21613:9;21609:18;21601:26;;21637:65;21699:1;21688:9;21684:17;21675:6;21637:65;:::i;:::-;21591:118;;;;:::o;21715:222::-;;21846:2;21835:9;21831:18;21823:26;;21859:71;21927:1;21916:9;21912:17;21903:6;21859:71;:::i;:::-;21813:124;;;;:::o;21943:313::-;;22094:2;22083:9;22079:18;22071:26;;22143:9;22137:4;22133:20;22129:1;22118:9;22114:17;22107:47;22171:78;22244:4;22235:6;22171:78;:::i;:::-;22163:86;;22061:195;;;;:::o;22262:419::-;;22466:2;22455:9;22451:18;22443:26;;22515:9;22509:4;22505:20;22501:1;22490:9;22486:17;22479:47;22543:131;22669:4;22543:131;:::i;:::-;22535:139;;22433:248;;;:::o;22687:419::-;;22891:2;22880:9;22876:18;22868:26;;22940:9;22934:4;22930:20;22926:1;22915:9;22911:17;22904:47;22968:131;23094:4;22968:131;:::i;:::-;22960:139;;22858:248;;;:::o;23112:419::-;;23316:2;23305:9;23301:18;23293:26;;23365:9;23359:4;23355:20;23351:1;23340:9;23336:17;23329:47;23393:131;23519:4;23393:131;:::i;:::-;23385:139;;23283:248;;;:::o;23537:419::-;;23741:2;23730:9;23726:18;23718:26;;23790:9;23784:4;23780:20;23776:1;23765:9;23761:17;23754:47;23818:131;23944:4;23818:131;:::i;:::-;23810:139;;23708:248;;;:::o;23962:419::-;;24166:2;24155:9;24151:18;24143:26;;24215:9;24209:4;24205:20;24201:1;24190:9;24186:17;24179:47;24243:131;24369:4;24243:131;:::i;:::-;24235:139;;24133:248;;;:::o;24387:419::-;;24591:2;24580:9;24576:18;24568:26;;24640:9;24634:4;24630:20;24626:1;24615:9;24611:17;24604:47;24668:131;24794:4;24668:131;:::i;:::-;24660:139;;24558:248;;;:::o;24812:419::-;;25016:2;25005:9;25001:18;24993:26;;25065:9;25059:4;25055:20;25051:1;25040:9;25036:17;25029:47;25093:131;25219:4;25093:131;:::i;:::-;25085:139;;24983:248;;;:::o;25237:419::-;;25441:2;25430:9;25426:18;25418:26;;25490:9;25484:4;25480:20;25476:1;25465:9;25461:17;25454:47;25518:131;25644:4;25518:131;:::i;:::-;25510:139;;25408:248;;;:::o;25662:419::-;;25866:2;25855:9;25851:18;25843:26;;25915:9;25909:4;25905:20;25901:1;25890:9;25886:17;25879:47;25943:131;26069:4;25943:131;:::i;:::-;25935:139;;25833:248;;;:::o;26087:419::-;;26291:2;26280:9;26276:18;26268:26;;26340:9;26334:4;26330:20;26326:1;26315:9;26311:17;26304:47;26368:131;26494:4;26368:131;:::i;:::-;26360:139;;26258:248;;;:::o;26512:419::-;;26716:2;26705:9;26701:18;26693:26;;26765:9;26759:4;26755:20;26751:1;26740:9;26736:17;26729:47;26793:131;26919:4;26793:131;:::i;:::-;26785:139;;26683:248;;;:::o;26937:419::-;;27141:2;27130:9;27126:18;27118:26;;27190:9;27184:4;27180:20;27176:1;27165:9;27161:17;27154:47;27218:131;27344:4;27218:131;:::i;:::-;27210:139;;27108:248;;;:::o;27362:419::-;;27566:2;27555:9;27551:18;27543:26;;27615:9;27609:4;27605:20;27601:1;27590:9;27586:17;27579:47;27643:131;27769:4;27643:131;:::i;:::-;27635:139;;27533:248;;;:::o;27787:419::-;;27991:2;27980:9;27976:18;27968:26;;28040:9;28034:4;28030:20;28026:1;28015:9;28011:17;28004:47;28068:131;28194:4;28068:131;:::i;:::-;28060:139;;27958:248;;;:::o;28212:419::-;;28416:2;28405:9;28401:18;28393:26;;28465:9;28459:4;28455:20;28451:1;28440:9;28436:17;28429:47;28493:131;28619:4;28493:131;:::i;:::-;28485:139;;28383:248;;;:::o;28637:419::-;;28841:2;28830:9;28826:18;28818:26;;28890:9;28884:4;28880:20;28876:1;28865:9;28861:17;28854:47;28918:131;29044:4;28918:131;:::i;:::-;28910:139;;28808:248;;;:::o;29062:419::-;;29266:2;29255:9;29251:18;29243:26;;29315:9;29309:4;29305:20;29301:1;29290:9;29286:17;29279:47;29343:131;29469:4;29343:131;:::i;:::-;29335:139;;29233:248;;;:::o;29487:419::-;;29691:2;29680:9;29676:18;29668:26;;29740:9;29734:4;29730:20;29726:1;29715:9;29711:17;29704:47;29768:131;29894:4;29768:131;:::i;:::-;29760:139;;29658:248;;;:::o;29912:419::-;;30116:2;30105:9;30101:18;30093:26;;30165:9;30159:4;30155:20;30151:1;30140:9;30136:17;30129:47;30193:131;30319:4;30193:131;:::i;:::-;30185:139;;30083:248;;;:::o;30337:419::-;;30541:2;30530:9;30526:18;30518:26;;30590:9;30584:4;30580:20;30576:1;30565:9;30561:17;30554:47;30618:131;30744:4;30618:131;:::i;:::-;30610:139;;30508:248;;;:::o;30762:419::-;;30966:2;30955:9;30951:18;30943:26;;31015:9;31009:4;31005:20;31001:1;30990:9;30986:17;30979:47;31043:131;31169:4;31043:131;:::i;:::-;31035:139;;30933:248;;;:::o;31187:419::-;;31391:2;31380:9;31376:18;31368:26;;31440:9;31434:4;31430:20;31426:1;31415:9;31411:17;31404:47;31468:131;31594:4;31468:131;:::i;:::-;31460:139;;31358:248;;;:::o;31612:419::-;;31816:2;31805:9;31801:18;31793:26;;31865:9;31859:4;31855:20;31851:1;31840:9;31836:17;31829:47;31893:131;32019:4;31893:131;:::i;:::-;31885:139;;31783:248;;;:::o;32037:419::-;;32241:2;32230:9;32226:18;32218:26;;32290:9;32284:4;32280:20;32276:1;32265:9;32261:17;32254:47;32318:131;32444:4;32318:131;:::i;:::-;32310:139;;32208:248;;;:::o;32462:222::-;;32593:2;32582:9;32578:18;32570:26;;32606:71;32674:1;32663:9;32659:17;32650:6;32606:71;:::i;:::-;32560:124;;;;:::o;32690:283::-;;32756:2;32750:9;32740:19;;32798:4;32790:6;32786:17;32905:6;32893:10;32890:22;32869:18;32857:10;32854:34;32851:62;32848:2;;;32916:18;;:::i;:::-;32848:2;32956:10;32952:2;32945:22;32730:243;;;;:::o;32979:311::-;;33146:18;33138:6;33135:30;33132:2;;;33168:18;;:::i;:::-;33132:2;33218:4;33210:6;33206:17;33198:25;;33278:4;33272;33268:15;33260:23;;33061:229;;;:::o;33296:331::-;;33447:18;33439:6;33436:30;33433:2;;;33469:18;;:::i;:::-;33433:2;33554:4;33550:9;33543:4;33535:6;33531:17;33527:33;33519:41;;33615:4;33609;33605:15;33597:23;;33362:265;;;:::o;33633:332::-;;33785:18;33777:6;33774:30;33771:2;;;33807:18;;:::i;:::-;33771:2;33892:4;33888:9;33881:4;33873:6;33869:17;33865:33;33857:41;;33953:4;33947;33943:15;33935:23;;33700:265;;;:::o;33971:141::-;;34043:3;34035:11;;34066:3;34063:1;34056:14;34100:4;34097:1;34087:18;34079:26;;34025:87;;;:::o;34118:98::-;;34203:5;34197:12;34187:22;;34176:40;;;:::o;34222:99::-;;34308:5;34302:12;34292:22;;34281:40;;;:::o;34327:168::-;;34444:6;34439:3;34432:19;34484:4;34479:3;34475:14;34460:29;;34422:73;;;;:::o;34501:169::-;;34619:6;34614:3;34607:19;34659:4;34654:3;34650:14;34635:29;;34597:73;;;;:::o;34676:148::-;;34815:3;34800:18;;34790:34;;;;:::o;34830:305::-;;34889:20;34907:1;34889:20;:::i;:::-;34884:25;;34923:20;34941:1;34923:20;:::i;:::-;34918:25;;35077:1;35009:66;35005:74;35002:1;34999:81;34996:2;;;35083:18;;:::i;:::-;34996:2;35127:1;35124;35120:9;35113:16;;34874:261;;;;:::o;35141:185::-;;35198:20;35216:1;35198:20;:::i;:::-;35193:25;;35232:20;35250:1;35232:20;:::i;:::-;35227:25;;35271:1;35261:2;;35276:18;;:::i;:::-;35261:2;35318:1;35315;35311:9;35306:14;;35183:143;;;;:::o;35332:348::-;;35395:20;35413:1;35395:20;:::i;:::-;35390:25;;35429:20;35447:1;35429:20;:::i;:::-;35424:25;;35617:1;35549:66;35545:74;35542:1;35539:81;35534:1;35527:9;35520:17;35516:105;35513:2;;;35624:18;;:::i;:::-;35513:2;35672:1;35669;35665:9;35654:20;;35380:300;;;;:::o;35686:191::-;;35746:20;35764:1;35746:20;:::i;:::-;35741:25;;35780:20;35798:1;35780:20;:::i;:::-;35775:25;;35819:1;35816;35813:8;35810:2;;;35824:18;;:::i;:::-;35810:2;35869:1;35866;35862:9;35854:17;;35731:146;;;;:::o;35883:96::-;;35949:24;35967:5;35949:24;:::i;:::-;35938:35;;35928:51;;;:::o;35985:90::-;;36062:5;36055:13;36048:21;36037:32;;36027:48;;;:::o;36081:77::-;;36147:5;36136:16;;36126:32;;;:::o;36164:149::-;;36240:66;36233:5;36229:78;36218:89;;36208:105;;;:::o;36319:126::-;;36396:42;36389:5;36385:54;36374:65;;36364:81;;;:::o;36451:77::-;;36517:5;36506:16;;36496:32;;;:::o;36534:154::-;36618:6;36613:3;36608;36595:30;36680:1;36671:6;36666:3;36662:16;36655:27;36585:103;;;:::o;36694:307::-;36762:1;36772:113;36786:6;36783:1;36780:13;36772:113;;;36871:1;36866:3;36862:11;36856:18;36852:1;36847:3;36843:11;36836:39;36808:2;36805:1;36801:10;36796:15;;36772:113;;;36903:6;36900:1;36897:13;36894:2;;;36983:1;36974:6;36969:3;36965:16;36958:27;36894:2;36743:258;;;;:::o;37007:320::-;;37088:1;37082:4;37078:12;37068:22;;37135:1;37129:4;37125:12;37156:18;37146:2;;37212:4;37204:6;37200:17;37190:27;;37146:2;37274;37266:6;37263:14;37243:18;37240:38;37237:2;;;37293:18;;:::i;:::-;37237:2;37058:269;;;;:::o;37333:233::-;;37395:24;37413:5;37395:24;:::i;:::-;37386:33;;37441:66;37434:5;37431:77;37428:2;;;37511:18;;:::i;:::-;37428:2;37558:1;37551:5;37547:13;37540:20;;37376:190;;;:::o;37572:100::-;;37640:26;37660:5;37640:26;:::i;:::-;37629:37;;37619:53;;;:::o;37678:94::-;;37746:20;37760:5;37746:20;:::i;:::-;37735:31;;37725:47;;;:::o;37778:176::-;;37827:20;37845:1;37827:20;:::i;:::-;37822:25;;37861:20;37879:1;37861:20;:::i;:::-;37856:25;;37900:1;37890:2;;37905:18;;:::i;:::-;37890:2;37946:1;37943;37939:9;37934:14;;37812:142;;;;:::o;37960:180::-;38008:77;38005:1;37998:88;38105:4;38102:1;38095:15;38129:4;38126:1;38119:15;38146:180;38194:77;38191:1;38184:88;38291:4;38288:1;38281:15;38315:4;38312:1;38305:15;38332:180;38380:77;38377:1;38370:88;38477:4;38474:1;38467:15;38501:4;38498:1;38491:15;38518:180;38566:77;38563:1;38556:88;38663:4;38660:1;38653:15;38687:4;38684:1;38677:15;38704:102;;38796:2;38792:7;38787:2;38780:5;38776:14;38772:28;38762:38;;38752:54;;;:::o;38812:94::-;;38893:5;38889:2;38885:14;38864:35;;38854:52;;;:::o;38912:122::-;38985:24;39003:5;38985:24;:::i;:::-;38978:5;38975:35;38965:2;;39024:1;39021;39014:12;38965:2;38955:79;:::o;39040:116::-;39110:21;39125:5;39110:21;:::i;:::-;39103:5;39100:32;39090:2;;39146:1;39143;39136:12;39090:2;39080:76;:::o;39162:122::-;39235:24;39253:5;39235:24;:::i;:::-;39228:5;39225:35;39215:2;;39274:1;39271;39264:12;39215:2;39205:79;:::o;39290:120::-;39362:23;39379:5;39362:23;:::i;:::-;39355:5;39352:34;39342:2;;39400:1;39397;39390:12;39342:2;39332:78;:::o;39416:122::-;39489:24;39507:5;39489:24;:::i;:::-;39482:5;39479:35;39469:2;;39528:1;39525;39518:12;39469:2;39459:79;:::o
Swarm Source
ipfs://6e79576a088a5ac990d7f7a87e31c221c12de91c08415f3bdb604e581c44d348
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.