ERC-721
Overview
Max Total Supply
177 WTS
Holders
90
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
1 WTSLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Source Code Verified (Exact Match)
Contract Name:
Woolsters
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-01-04 */ // SPDX-License-Identifier: MIT // File: @openzeppelin/contracts/utils/Counters.sol // OpenZeppelin Contracts v4.4.1 (utils/Counters.sol) pragma solidity ^0.8.0; /** * @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; } } // File: @openzeppelin/contracts/utils/math/Math.sol // OpenZeppelin Contracts (last updated v4.8.0) (utils/math/Math.sol) pragma solidity ^0.8.0; /** * @dev Standard math utilities missing in the Solidity language. */ library Math { enum Rounding { Down, // Toward negative infinity Up, // Toward infinity Zero // Toward zero } /** * @dev Returns the largest of two numbers. */ function max(uint256 a, uint256 b) internal pure returns (uint256) { return a > b ? a : b; } /** * @dev Returns the smallest of two numbers. */ function min(uint256 a, uint256 b) internal pure returns (uint256) { return a < b ? a : b; } /** * @dev Returns the average of two numbers. The result is rounded towards * zero. */ function average(uint256 a, uint256 b) internal pure returns (uint256) { // (a + b) / 2 can overflow. return (a & b) + (a ^ b) / 2; } /** * @dev Returns the ceiling of the division of two numbers. * * This differs from standard division with `/` in that it rounds up instead * of rounding down. */ function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) { // (a + b - 1) / b can overflow on addition, so we distribute. return a == 0 ? 0 : (a - 1) / b + 1; } /** * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0 * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv) * with further edits by Uniswap Labs also under MIT license. */ function mulDiv( uint256 x, uint256 y, uint256 denominator ) internal pure returns (uint256 result) { unchecked { // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256 // variables such that product = prod1 * 2^256 + prod0. uint256 prod0; // Least significant 256 bits of the product uint256 prod1; // Most significant 256 bits of the product assembly { let mm := mulmod(x, y, not(0)) prod0 := mul(x, y) prod1 := sub(sub(mm, prod0), lt(mm, prod0)) } // Handle non-overflow cases, 256 by 256 division. if (prod1 == 0) { return prod0 / denominator; } // Make sure the result is less than 2^256. Also prevents denominator == 0. require(denominator > prod1); /////////////////////////////////////////////// // 512 by 256 division. /////////////////////////////////////////////// // Make division exact by subtracting the remainder from [prod1 prod0]. uint256 remainder; assembly { // Compute remainder using mulmod. remainder := mulmod(x, y, denominator) // Subtract 256 bit number from 512 bit number. prod1 := sub(prod1, gt(remainder, prod0)) prod0 := sub(prod0, remainder) } // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1. // See https://cs.stackexchange.com/q/138556/92363. // Does not overflow because the denominator cannot be zero at this stage in the function. uint256 twos = denominator & (~denominator + 1); assembly { // Divide denominator by twos. denominator := div(denominator, twos) // Divide [prod1 prod0] by twos. prod0 := div(prod0, twos) // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one. twos := add(div(sub(0, twos), twos), 1) } // Shift in bits from prod1 into prod0. prod0 |= prod1 * twos; // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for // four bits. That is, denominator * inv = 1 mod 2^4. uint256 inverse = (3 * denominator) ^ 2; // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works // in modular arithmetic, doubling the correct bits in each step. inverse *= 2 - denominator * inverse; // inverse mod 2^8 inverse *= 2 - denominator * inverse; // inverse mod 2^16 inverse *= 2 - denominator * inverse; // inverse mod 2^32 inverse *= 2 - denominator * inverse; // inverse mod 2^64 inverse *= 2 - denominator * inverse; // inverse mod 2^128 inverse *= 2 - denominator * inverse; // inverse mod 2^256 // Because the division is now exact we can divide by multiplying with the modular inverse of denominator. // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1 // is no longer required. result = prod0 * inverse; return result; } } /** * @notice Calculates x * y / denominator with full precision, following the selected rounding direction. */ function mulDiv( uint256 x, uint256 y, uint256 denominator, Rounding rounding ) internal pure returns (uint256) { uint256 result = mulDiv(x, y, denominator); if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) { result += 1; } return result; } /** * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down. * * Inspired by Henry S. Warren, Jr.'s "Hacker's Delight" (Chapter 11). */ function sqrt(uint256 a) internal pure returns (uint256) { if (a == 0) { return 0; } // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target. // // We know that the "msb" (most significant bit) of our target number `a` is a power of 2 such that we have // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`. // // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)` // → `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))` // → `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)` // // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit. uint256 result = 1 << (log2(a) >> 1); // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128, // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision // into the expected uint128 result. unchecked { result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; return min(result, a / result); } } /** * @notice Calculates sqrt(a), following the selected rounding direction. */ function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = sqrt(a); return result + (rounding == Rounding.Up && result * result < a ? 1 : 0); } } /** * @dev Return the log in base 2, rounded down, of a positive value. * Returns 0 if given 0. */ function log2(uint256 value) internal pure returns (uint256) { uint256 result = 0; unchecked { if (value >> 128 > 0) { value >>= 128; result += 128; } if (value >> 64 > 0) { value >>= 64; result += 64; } if (value >> 32 > 0) { value >>= 32; result += 32; } if (value >> 16 > 0) { value >>= 16; result += 16; } if (value >> 8 > 0) { value >>= 8; result += 8; } if (value >> 4 > 0) { value >>= 4; result += 4; } if (value >> 2 > 0) { value >>= 2; result += 2; } if (value >> 1 > 0) { result += 1; } } return result; } /** * @dev Return the log in base 2, following the selected rounding direction, of a positive value. * Returns 0 if given 0. */ function log2(uint256 value, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = log2(value); return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0); } } /** * @dev Return the log in base 10, rounded down, of a positive value. * Returns 0 if given 0. */ function log10(uint256 value) internal pure returns (uint256) { uint256 result = 0; unchecked { if (value >= 10**64) { value /= 10**64; result += 64; } if (value >= 10**32) { value /= 10**32; result += 32; } if (value >= 10**16) { value /= 10**16; result += 16; } if (value >= 10**8) { value /= 10**8; result += 8; } if (value >= 10**4) { value /= 10**4; result += 4; } if (value >= 10**2) { value /= 10**2; result += 2; } if (value >= 10**1) { result += 1; } } return result; } /** * @dev Return the log in base 10, following the selected rounding direction, of a positive value. * Returns 0 if given 0. */ function log10(uint256 value, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = log10(value); return result + (rounding == Rounding.Up && 10**result < value ? 1 : 0); } } /** * @dev Return the log in base 256, rounded down, of a positive value. * Returns 0 if given 0. * * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string. */ function log256(uint256 value) internal pure returns (uint256) { uint256 result = 0; unchecked { if (value >> 128 > 0) { value >>= 128; result += 16; } if (value >> 64 > 0) { value >>= 64; result += 8; } if (value >> 32 > 0) { value >>= 32; result += 4; } if (value >> 16 > 0) { value >>= 16; result += 2; } if (value >> 8 > 0) { result += 1; } } return result; } /** * @dev Return the log in base 10, following the selected rounding direction, of a positive value. * Returns 0 if given 0. */ function log256(uint256 value, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = log256(value); return result + (rounding == Rounding.Up && 1 << (result * 8) < value ? 1 : 0); } } } // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts (last updated v4.8.0) (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _SYMBOLS = "0123456789abcdef"; uint8 private constant _ADDRESS_LENGTH = 20; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { unchecked { uint256 length = Math.log10(value) + 1; string memory buffer = new string(length); uint256 ptr; /// @solidity memory-safe-assembly assembly { ptr := add(buffer, add(32, length)) } while (true) { ptr--; /// @solidity memory-safe-assembly assembly { mstore8(ptr, byte(mod(value, 10), _SYMBOLS)) } value /= 10; if (value == 0) break; } return buffer; } } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { unchecked { return toHexString(value, Math.log256(value) + 1); } } /** * @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] = _SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } /** * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation. */ function toHexString(address addr) internal pure returns (string memory) { return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH); } } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, "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"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResultFromTarget(target, 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) { (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResultFromTarget(target, 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) { (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResultFromTarget(target, success, returndata, errorMessage); } /** * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract. * * _Available since v4.8._ */ function verifyCallResultFromTarget( address target, bool success, bytes memory returndata, string memory errorMessage ) internal view returns (bytes memory) { if (success) { if (returndata.length == 0) { // only check isContract if the call was successful and the return data is empty // otherwise we already know that it was a contract require(isContract(target), "Address: call to non-contract"); } return returndata; } else { _revert(returndata, errorMessage); } } /** * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason or 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 { _revert(returndata, errorMessage); } } function _revert(bytes memory returndata, string memory errorMessage) private pure { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly /// @solidity memory-safe-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol // OpenZeppelin Contracts (last updated v4.8.0) (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Note that the caller is responsible to confirm that the recipient is capable of receiving ERC721 * or else they may be permanently lost. Usage of {safeTransferFrom} prevents loss, though the caller must * understand this adds an external call which potentially creates a reentrancy vulnerability. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: @openzeppelin/contracts/token/ERC721/ERC721.sol // OpenZeppelin Contracts (last updated v4.8.0) (token/ERC721/ERC721.sol) pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: address zero is not a valid owner"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _ownerOf(tokenId); require(owner != address(0), "ERC721: invalid token ID"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { _requireMinted(tokenId); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overridden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not token owner or approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { _requireMinted(tokenId); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: caller is not token owner or approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: caller is not token owner or 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 the owner of the `tokenId`. Does NOT revert if token doesn't exist */ function _ownerOf(uint256 tokenId) internal view virtual returns (address) { return _owners[tokenId]; } /** * @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 _ownerOf(tokenId) != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { address owner = ERC721.ownerOf(tokenId); return (spender == owner || isApprovedForAll(owner, spender) || getApproved(tokenId) == spender); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId, 1); // Check that tokenId was not minted by `_beforeTokenTransfer` hook require(!_exists(tokenId), "ERC721: token already minted"); unchecked { // Will not overflow unless all 2**256 token ids are minted to the same owner. // Given that tokens are minted one by one, it is impossible in practice that // this ever happens. Might change if we allow batch minting. // The ERC fails to describe this case. _balances[to] += 1; } _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); _afterTokenTransfer(address(0), to, tokenId, 1); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * This is an internal function that does not check if the sender is authorized to operate on the token. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId, 1); // Update ownership in case tokenId was transferred by `_beforeTokenTransfer` hook owner = ERC721.ownerOf(tokenId); // Clear approvals delete _tokenApprovals[tokenId]; unchecked { // Cannot overflow, as that would require more tokens to be burned/transferred // out than the owner initially received through minting and transferring in. _balances[owner] -= 1; } delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); _afterTokenTransfer(owner, address(0), tokenId, 1); } /** * @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, 1); // Check that tokenId was not transferred by `_beforeTokenTransfer` hook require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer from incorrect owner"); // Clear approvals from the previous owner delete _tokenApprovals[tokenId]; unchecked { // `_balances[from]` cannot overflow for the same reason as described in `_burn`: // `from`'s balance is the number of token held, which is at least one before the current // transfer. // `_balances[to]` could overflow in the conditions described in `_mint`. That would require // all 2**256 token ids to be minted, which in practice is impossible. _balances[from] -= 1; _balances[to] += 1; } _owners[tokenId] = to; emit Transfer(from, to, tokenId); _afterTokenTransfer(from, to, tokenId, 1); } /** * @dev Approve `to` to operate on `tokenId` * * Emits an {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits an {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC721: approve to caller"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Reverts if the `tokenId` has not been minted yet. */ function _requireMinted(uint256 tokenId) internal view virtual { require(_exists(tokenId), "ERC721: invalid token ID"); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { /// @solidity memory-safe-assembly assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting and burning. If {ERC721Consecutive} is * used, the hook may be called as part of a consecutive (batch) mint, as indicated by `batchSize` greater than 1. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s tokens will be transferred to `to`. * - When `from` is zero, the tokens will be minted for `to`. * - When `to` is zero, ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * - `batchSize` is non-zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256, /* firstTokenId */ uint256 batchSize ) internal virtual { if (batchSize > 1) { if (from != address(0)) { _balances[from] -= batchSize; } if (to != address(0)) { _balances[to] += batchSize; } } } /** * @dev Hook that is called after any token transfer. This includes minting and burning. If {ERC721Consecutive} is * used, the hook may be called as part of a consecutive (batch) mint, as indicated by `batchSize` greater than 1. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s tokens were transferred to `to`. * - When `from` is zero, the tokens were minted for `to`. * - When `to` is zero, ``from``'s tokens were burned. * - `from` and `to` are never both zero. * - `batchSize` is non-zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 firstTokenId, uint256 batchSize ) internal virtual {} } // File: contracts/Woolsters.sol // First mint free and remaining is paid per wallet, low gas contract pragma solidity >=0.7.0 <0.9.0; contract Woolsters is ERC721, Ownable { using Strings for uint256; using Counters for Counters.Counter; Counters.Counter private supply; string public uriPrefix = "ipfs://bafybeifgv54weomnggaf7qgiyxbhgnusvske76cxo7hsd5a2jfbgsg7xsa/"; string public uriSuffix = ".json"; string public hiddenMetadataUri; uint256 public cost = 0.0055 ether; uint256 public maxSupply = 777; uint256 public maxMintAmountPerTx = 10; bool public paused = true; bool public revealed = true; constructor() ERC721("Woolsters", "WTS") { } modifier mintCompliance(uint256 _mintAmount) { require(_mintAmount > 0 && _mintAmount <= maxMintAmountPerTx, "Invalid mint amount!"); require(supply.current() + _mintAmount <= maxSupply, "Max supply exceeded!"); _; } //public function mint(uint256 _mintAmount) public payable { // Check that the contract is not paused require(!paused); // Check that the mint amount is greater than zero and less than or equal to the maximum mint amount require(_mintAmount > 0); require(_mintAmount <= maxMintAmountPerTx); require(walletOfOwner(msg.sender).length + _mintAmount <= 10); // Check that the total supply of NFTs will not exceed the maximum supply after this minting uint256 currentSupply = totalSupply(); require(currentSupply + _mintAmount <= maxSupply); // Check that the total number of free mints has not exceeded 177 require(currentSupply < 177); // Check if the wallet has already minted the first NFT if (walletOfOwner(msg.sender).length > 0) { require(msg.value >= .0055 ether * _mintAmount); } else if (_mintAmount > 1) { require(msg.value >= .0055 ether * (_mintAmount - 1)); } // Mint the NFTs for (uint256 i = 1; i <= _mintAmount; i++) { _safeMint(msg.sender, currentSupply + i); supply.increment(); } } function totalSupply() public view returns (uint256) { return supply.current(); } function walletOfOwner(address _owner) public view returns (uint256[] memory) { uint256 ownerTokenCount = balanceOf(_owner); uint256[] memory ownedTokenIds = new uint256[](ownerTokenCount); uint256 currentTokenId = 1; uint256 ownedTokenIndex = 0; while (ownedTokenIndex < ownerTokenCount && currentTokenId <= maxSupply) { address currentTokenOwner = ownerOf(currentTokenId); if (currentTokenOwner == _owner) { ownedTokenIds[ownedTokenIndex] = currentTokenId; ownedTokenIndex++; } currentTokenId++; } return ownedTokenIds; } function tokenURI(uint256 _tokenId) public view virtual override returns (string memory) { require( _exists(_tokenId), "ERC721Metadata: URI query for nonexistent token" ); if (revealed == false) { return hiddenMetadataUri; } string memory currentBaseURI = _baseURI(); return bytes(currentBaseURI).length > 0 ? string(abi.encodePacked(currentBaseURI, _tokenId.toString(), uriSuffix)) : ""; } function setRevealed(bool _state) public onlyOwner { revealed = _state; } function setCost(uint256 _cost) public onlyOwner { cost = _cost; } function setMaxMintAmountPerTx(uint256 _maxMintAmountPerTx) public onlyOwner { maxMintAmountPerTx = _maxMintAmountPerTx; } function setHiddenMetadataUri(string memory _hiddenMetadataUri) public onlyOwner { hiddenMetadataUri = _hiddenMetadataUri; } function setUriPrefix(string memory _uriPrefix) public onlyOwner { uriPrefix = _uriPrefix; } function setUriSuffix(string memory _uriSuffix) public onlyOwner { uriSuffix = _uriSuffix; } function setPaused(bool _state) public onlyOwner { paused = _state; } function withdraw() public onlyOwner { // This will pay 10% of the initial sale. // ============================================================================= (bool hs, ) = payable(0x3700cc3F044a3E7478Bc0C6193E9c8e105cB4E5C).call{value: address(this).balance * 10 / 100}(""); require(hs); // ============================================================================= // This will transfer the remaining contract balance to the owner. // Do not remove this otherwise you will not be able to withdraw the funds. // ============================================================================= (bool os, ) = payable(0x6641fD8f38f844c6567C52D0BFeDeFe78cB66849).call{value: address(this).balance}(""); require(os); // ============================================================================= } function _baseURI() internal view virtual override returns (string memory) { return uriPrefix; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"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":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hiddenMetadataUri","outputs":[{"internalType":"string","name":"","type":"string"}],"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":"maxMintAmountPerTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"uint256","name":"_cost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_hiddenMetadataUri","type":"string"}],"name":"setHiddenMetadataUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxMintAmountPerTx","type":"uint256"}],"name":"setMaxMintAmountPerTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setRevealed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uriPrefix","type":"string"}],"name":"setUriPrefix","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uriSuffix","type":"string"}],"name":"setUriSuffix","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uriPrefix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uriSuffix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405260405180608001604052806043815260200162003f7360439139600890805190602001906200003592919062000272565b506040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600990805190602001906200008392919062000272565b5066138a388a43c000600b55610309600c55600a600d556001600e60006101000a81548160ff0219169083151502179055506001600e60016101000a81548160ff021916908315150217905550348015620000dd57600080fd5b506040518060400160405280600981526020017f576f6f6c737465727300000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f575453000000000000000000000000000000000000000000000000000000000081525081600090805190602001906200016292919062000272565b5080600190805190602001906200017b92919062000272565b5050506200019e62000192620001a460201b60201c565b620001ac60201b60201c565b62000387565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620002809062000322565b90600052602060002090601f016020900481019282620002a45760008555620002f0565b82601f10620002bf57805160ff1916838001178555620002f0565b82800160010185558215620002f0579182015b82811115620002ef578251825591602001919060010190620002d2565b5b509050620002ff919062000303565b5090565b5b808211156200031e57600081600090555060010162000304565b5090565b600060028204905060018216806200033b57607f821691505b6020821081141562000352576200035162000358565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b613bdc80620003976000396000f3fe6080604052600436106102045760003560e01c806362b99ad411610118578063a22cb465116100a0578063c87b56dd1161006f578063c87b56dd14610720578063d5abeb011461075d578063e0a8085314610788578063e985e9c5146107b1578063f2fde38b146107ee57610204565b8063a22cb4651461067a578063a45ba8e7146106a3578063b071401b146106ce578063b88d4fde146106f757610204565b80637ec4a659116100e75780637ec4a659146105b45780638da5cb5b146105dd57806394354fd01461060857806395d89b4114610633578063a0712d681461065e57610204565b806362b99ad4146104f85780636352211e1461052357806370a0823114610560578063715018a61461059d57610204565b806323b872dd1161019b57806344a0d68a1161016a57806344a0d68a146104255780634fdd43cb1461044e57806351830227146104775780635503a0e8146104a25780635c975abb146104cd57610204565b806323b872dd1461037f5780633ccfd60b146103a857806342842e0e146103bf578063438b6300146103e857610204565b806313faede6116101d757806313faede6146102d757806316ba10e01461030257806316c38b3c1461032b57806318160ddd1461035457610204565b806301ffc9a71461020957806306fdde0314610246578063081812fc14610271578063095ea7b3146102ae575b600080fd5b34801561021557600080fd5b50610230600480360381019061022b9190612b71565b610817565b60405161023d91906130f1565b60405180910390f35b34801561025257600080fd5b5061025b6108f9565b604051610268919061310c565b60405180910390f35b34801561027d57600080fd5b5061029860048036038101906102939190612c14565b61098b565b6040516102a59190613068565b60405180910390f35b3480156102ba57600080fd5b506102d560048036038101906102d09190612b04565b6109d1565b005b3480156102e357600080fd5b506102ec610ae9565b6040516102f991906132ee565b60405180910390f35b34801561030e57600080fd5b5061032960048036038101906103249190612bcb565b610aef565b005b34801561033757600080fd5b50610352600480360381019061034d9190612b44565b610b11565b005b34801561036057600080fd5b50610369610b36565b60405161037691906132ee565b60405180910390f35b34801561038b57600080fd5b506103a660048036038101906103a191906129ee565b610b47565b005b3480156103b457600080fd5b506103bd610ba7565b005b3480156103cb57600080fd5b506103e660048036038101906103e191906129ee565b610cdf565b005b3480156103f457600080fd5b5061040f600480360381019061040a9190612981565b610cff565b60405161041c91906130cf565b60405180910390f35b34801561043157600080fd5b5061044c60048036038101906104479190612c14565b610e0a565b005b34801561045a57600080fd5b5061047560048036038101906104709190612bcb565b610e1c565b005b34801561048357600080fd5b5061048c610e3e565b60405161049991906130f1565b60405180910390f35b3480156104ae57600080fd5b506104b7610e51565b6040516104c4919061310c565b60405180910390f35b3480156104d957600080fd5b506104e2610edf565b6040516104ef91906130f1565b60405180910390f35b34801561050457600080fd5b5061050d610ef2565b60405161051a919061310c565b60405180910390f35b34801561052f57600080fd5b5061054a60048036038101906105459190612c14565b610f80565b6040516105579190613068565b60405180910390f35b34801561056c57600080fd5b5061058760048036038101906105829190612981565b611007565b60405161059491906132ee565b60405180910390f35b3480156105a957600080fd5b506105b26110bf565b005b3480156105c057600080fd5b506105db60048036038101906105d69190612bcb565b6110d3565b005b3480156105e957600080fd5b506105f26110f5565b6040516105ff9190613068565b60405180910390f35b34801561061457600080fd5b5061061d61111f565b60405161062a91906132ee565b60405180910390f35b34801561063f57600080fd5b50610648611125565b604051610655919061310c565b60405180910390f35b61067860048036038101906106739190612c14565b6111b7565b005b34801561068657600080fd5b506106a1600480360381019061069c9190612ac4565b6112f3565b005b3480156106af57600080fd5b506106b8611309565b6040516106c5919061310c565b60405180910390f35b3480156106da57600080fd5b506106f560048036038101906106f09190612c14565b611397565b005b34801561070357600080fd5b5061071e60048036038101906107199190612a41565b6113a9565b005b34801561072c57600080fd5b5061074760048036038101906107429190612c14565b61140b565b604051610754919061310c565b60405180910390f35b34801561076957600080fd5b50610772611564565b60405161077f91906132ee565b60405180910390f35b34801561079457600080fd5b506107af60048036038101906107aa9190612b44565b61156a565b005b3480156107bd57600080fd5b506107d860048036038101906107d391906129ae565b61158f565b6040516107e591906130f1565b60405180910390f35b3480156107fa57600080fd5b5061081560048036038101906108109190612981565b611623565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108e257507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806108f257506108f1826116a7565b5b9050919050565b606060008054610908906135f7565b80601f0160208091040260200160405190810160405280929190818152602001828054610934906135f7565b80156109815780601f1061095657610100808354040283529160200191610981565b820191906000526020600020905b81548152906001019060200180831161096457829003601f168201915b5050505050905090565b600061099682611711565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006109dc82610f80565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a44906132ae565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a6c61175c565b73ffffffffffffffffffffffffffffffffffffffff161480610a9b5750610a9a81610a9561175c565b61158f565b5b610ada576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad1906132ce565b60405180910390fd5b610ae48383611764565b505050565b600b5481565b610af761181d565b8060099080519060200190610b0d929190612795565b5050565b610b1961181d565b80600e60006101000a81548160ff02191690831515021790555050565b6000610b42600761189b565b905090565b610b58610b5261175c565b826118a9565b610b97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8e9061312e565b60405180910390fd5b610ba283838361193e565b505050565b610baf61181d565b6000733700cc3f044a3e7478bc0c6193e9c8e105cb4e5c73ffffffffffffffffffffffffffffffffffffffff166064600a47610beb91906134b3565b610bf59190613482565b604051610c0190613053565b60006040518083038185875af1925050503d8060008114610c3e576040519150601f19603f3d011682016040523d82523d6000602084013e610c43565b606091505b5050905080610c5157600080fd5b6000736641fd8f38f844c6567c52d0bfedefe78cb6684973ffffffffffffffffffffffffffffffffffffffff1647604051610c8b90613053565b60006040518083038185875af1925050503d8060008114610cc8576040519150601f19603f3d011682016040523d82523d6000602084013e610ccd565b606091505b5050905080610cdb57600080fd5b5050565b610cfa838383604051806020016040528060008152506113a9565b505050565b60606000610d0c83611007565b905060008167ffffffffffffffff811115610d2a57610d2961375f565b5b604051908082528060200260200182016040528015610d585781602001602082028036833780820191505090505b50905060006001905060005b8381108015610d755750600c548211155b15610dfe576000610d8583610f80565b90508673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610dea5782848381518110610dcf57610dce613730565b5b6020026020010181815250508180610de69061365a565b9250505b8280610df59061365a565b93505050610d64565b82945050505050919050565b610e1261181d565b80600b8190555050565b610e2461181d565b80600a9080519060200190610e3a929190612795565b5050565b600e60019054906101000a900460ff1681565b60098054610e5e906135f7565b80601f0160208091040260200160405190810160405280929190818152602001828054610e8a906135f7565b8015610ed75780601f10610eac57610100808354040283529160200191610ed7565b820191906000526020600020905b815481529060010190602001808311610eba57829003601f168201915b505050505081565b600e60009054906101000a900460ff1681565b60088054610eff906135f7565b80601f0160208091040260200160405190810160405280929190818152602001828054610f2b906135f7565b8015610f785780601f10610f4d57610100808354040283529160200191610f78565b820191906000526020600020905b815481529060010190602001808311610f5b57829003601f168201915b505050505081565b600080610f8c83611c38565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610ffe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff59061328e565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611078576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106f9061320e565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6110c761181d565b6110d16000611c75565b565b6110db61181d565b80600890805190602001906110f1929190612795565b5050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600d5481565b606060018054611134906135f7565b80601f0160208091040260200160405190810160405280929190818152602001828054611160906135f7565b80156111ad5780601f10611182576101008083540402835291602001916111ad565b820191906000526020600020905b81548152906001019060200180831161119057829003601f168201915b5050505050905090565b600e60009054906101000a900460ff16156111d157600080fd5b600081116111de57600080fd5b600d548111156111ed57600080fd5b600a816111f933610cff565b51611204919061342c565b111561120f57600080fd5b6000611219610b36565b9050600c54828261122a919061342c565b111561123557600080fd5b60b1811061124257600080fd5b600061124d33610cff565b511115611278578166138a388a43c00061126791906134b3565b34101561127357600080fd5b6112ae565b60018211156112ad5760018261128e919061350d565b66138a388a43c0006112a091906134b3565b3410156112ac57600080fd5b5b5b6000600190505b8281116112ee576112d13382846112cc919061342c565b611d3b565b6112db6007611d59565b80806112e69061365a565b9150506112b5565b505050565b6113056112fe61175c565b8383611d6f565b5050565b600a8054611316906135f7565b80601f0160208091040260200160405190810160405280929190818152602001828054611342906135f7565b801561138f5780601f106113645761010080835404028352916020019161138f565b820191906000526020600020905b81548152906001019060200180831161137257829003601f168201915b505050505081565b61139f61181d565b80600d8190555050565b6113ba6113b461175c565b836118a9565b6113f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f09061312e565b60405180910390fd5b61140584848484611edc565b50505050565b606061141682611f38565b611455576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144c9061326e565b60405180910390fd5b60001515600e60019054906101000a900460ff161515141561150357600a805461147e906135f7565b80601f01602080910402602001604051908101604052809291908181526020018280546114aa906135f7565b80156114f75780601f106114cc576101008083540402835291602001916114f7565b820191906000526020600020905b8154815290600101906020018083116114da57829003601f168201915b5050505050905061155f565b600061150d611f79565b9050600081511161152d576040518060200160405280600081525061155b565b806115378461200b565b600960405160200161154b93929190613022565b6040516020818303038152906040525b9150505b919050565b600c5481565b61157261181d565b80600e60016101000a81548160ff02191690831515021790555050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61162b61181d565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561169b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116929061316e565b60405180910390fd5b6116a481611c75565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61171a81611f38565b611759576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117509061328e565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166117d783610f80565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b61182561175c565b73ffffffffffffffffffffffffffffffffffffffff166118436110f5565b73ffffffffffffffffffffffffffffffffffffffff1614611899576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118909061324e565b60405180910390fd5b565b600081600001549050919050565b6000806118b583610f80565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806118f757506118f6818561158f565b5b8061193557508373ffffffffffffffffffffffffffffffffffffffff1661191d8461098b565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661195e82610f80565b73ffffffffffffffffffffffffffffffffffffffff16146119b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ab9061318e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1b906131ce565b60405180910390fd5b611a3183838360016120e3565b8273ffffffffffffffffffffffffffffffffffffffff16611a5182610f80565b73ffffffffffffffffffffffffffffffffffffffff1614611aa7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9e9061318e565b60405180910390fd5b6004600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611c338383836001612209565b505050565b60006002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611d5582826040518060200160405280600081525061220f565b5050565b6001816000016000828254019250508190555050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611dde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd5906131ee565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611ecf91906130f1565b60405180910390a3505050565b611ee784848461193e565b611ef38484848461226a565b611f32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f299061314e565b60405180910390fd5b50505050565b60008073ffffffffffffffffffffffffffffffffffffffff16611f5a83611c38565b73ffffffffffffffffffffffffffffffffffffffff1614159050919050565b606060088054611f88906135f7565b80601f0160208091040260200160405190810160405280929190818152602001828054611fb4906135f7565b80156120015780601f10611fd657610100808354040283529160200191612001565b820191906000526020600020905b815481529060010190602001808311611fe457829003601f168201915b5050505050905090565b60606000600161201a84612401565b01905060008167ffffffffffffffff8111156120395761203861375f565b5b6040519080825280601f01601f19166020018201604052801561206b5781602001600182028036833780820191505090505b509050600082602001820190505b6001156120d8578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85816120c2576120c16136d2565b5b04945060008514156120d3576120d8565b612079565b819350505050919050565b600181111561220357600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16146121775780600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461216f919061350d565b925050819055505b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146122025780600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546121fa919061342c565b925050819055505b5b50505050565b50505050565b6122198383612554565b612226600084848461226a565b612265576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161225c9061314e565b60405180910390fd5b505050565b600061228b8473ffffffffffffffffffffffffffffffffffffffff16612772565b156123f4578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026122b461175c565b8786866040518563ffffffff1660e01b81526004016122d69493929190613083565b602060405180830381600087803b1580156122f057600080fd5b505af192505050801561232157506040513d601f19601f8201168201806040525081019061231e9190612b9e565b60015b6123a4573d8060008114612351576040519150601f19603f3d011682016040523d82523d6000602084013e612356565b606091505b5060008151141561239c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123939061314e565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506123f9565b600190505b949350505050565b600080600090507a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061245f577a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008381612455576124546136d2565b5b0492506040810190505b6d04ee2d6d415b85acef8100000000831061249c576d04ee2d6d415b85acef81000000008381612492576124916136d2565b5b0492506020810190505b662386f26fc1000083106124cb57662386f26fc1000083816124c1576124c06136d2565b5b0492506010810190505b6305f5e10083106124f4576305f5e10083816124ea576124e96136d2565b5b0492506008810190505b612710831061251957612710838161250f5761250e6136d2565b5b0492506004810190505b6064831061253c5760648381612532576125316136d2565b5b0492506002810190505b600a831061254b576001810190505b80915050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156125c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125bb9061322e565b60405180910390fd5b6125cd81611f38565b1561260d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612604906131ae565b60405180910390fd5b61261b6000838360016120e3565b61262481611f38565b15612664576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161265b906131ae565b60405180910390fd5b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461276e600083836001612209565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b8280546127a1906135f7565b90600052602060002090601f0160209004810192826127c3576000855561280a565b82601f106127dc57805160ff191683800117855561280a565b8280016001018555821561280a579182015b828111156128095782518255916020019190600101906127ee565b5b509050612817919061281b565b5090565b5b8082111561283457600081600090555060010161281c565b5090565b600061284b6128468461332e565b613309565b90508281526020810184848401111561286757612866613793565b5b6128728482856135b5565b509392505050565b600061288d6128888461335f565b613309565b9050828152602081018484840111156128a9576128a8613793565b5b6128b48482856135b5565b509392505050565b6000813590506128cb81613b4a565b92915050565b6000813590506128e081613b61565b92915050565b6000813590506128f581613b78565b92915050565b60008151905061290a81613b78565b92915050565b600082601f8301126129255761292461378e565b5b8135612935848260208601612838565b91505092915050565b600082601f8301126129535761295261378e565b5b813561296384826020860161287a565b91505092915050565b60008135905061297b81613b8f565b92915050565b6000602082840312156129975761299661379d565b5b60006129a5848285016128bc565b91505092915050565b600080604083850312156129c5576129c461379d565b5b60006129d3858286016128bc565b92505060206129e4858286016128bc565b9150509250929050565b600080600060608486031215612a0757612a0661379d565b5b6000612a15868287016128bc565b9350506020612a26868287016128bc565b9250506040612a378682870161296c565b9150509250925092565b60008060008060808587031215612a5b57612a5a61379d565b5b6000612a69878288016128bc565b9450506020612a7a878288016128bc565b9350506040612a8b8782880161296c565b925050606085013567ffffffffffffffff811115612aac57612aab613798565b5b612ab887828801612910565b91505092959194509250565b60008060408385031215612adb57612ada61379d565b5b6000612ae9858286016128bc565b9250506020612afa858286016128d1565b9150509250929050565b60008060408385031215612b1b57612b1a61379d565b5b6000612b29858286016128bc565b9250506020612b3a8582860161296c565b9150509250929050565b600060208284031215612b5a57612b5961379d565b5b6000612b68848285016128d1565b91505092915050565b600060208284031215612b8757612b8661379d565b5b6000612b95848285016128e6565b91505092915050565b600060208284031215612bb457612bb361379d565b5b6000612bc2848285016128fb565b91505092915050565b600060208284031215612be157612be061379d565b5b600082013567ffffffffffffffff811115612bff57612bfe613798565b5b612c0b8482850161293e565b91505092915050565b600060208284031215612c2a57612c2961379d565b5b6000612c388482850161296c565b91505092915050565b6000612c4d8383613004565b60208301905092915050565b612c6281613541565b82525050565b6000612c73826133b5565b612c7d81856133e3565b9350612c8883613390565b8060005b83811015612cb9578151612ca08882612c41565b9750612cab836133d6565b925050600181019050612c8c565b5085935050505092915050565b612ccf81613553565b82525050565b6000612ce0826133c0565b612cea81856133f4565b9350612cfa8185602086016135c4565b612d03816137a2565b840191505092915050565b6000612d19826133cb565b612d238185613410565b9350612d338185602086016135c4565b612d3c816137a2565b840191505092915050565b6000612d52826133cb565b612d5c8185613421565b9350612d6c8185602086016135c4565b80840191505092915050565b60008154612d85816135f7565b612d8f8186613421565b94506001821660008114612daa5760018114612dbb57612dee565b60ff19831686528186019350612dee565b612dc4856133a0565b60005b83811015612de657815481890152600182019150602081019050612dc7565b838801955050505b50505092915050565b6000612e04602d83613410565b9150612e0f826137b3565b604082019050919050565b6000612e27603283613410565b9150612e3282613802565b604082019050919050565b6000612e4a602683613410565b9150612e5582613851565b604082019050919050565b6000612e6d602583613410565b9150612e78826138a0565b604082019050919050565b6000612e90601c83613410565b9150612e9b826138ef565b602082019050919050565b6000612eb3602483613410565b9150612ebe82613918565b604082019050919050565b6000612ed6601983613410565b9150612ee182613967565b602082019050919050565b6000612ef9602983613410565b9150612f0482613990565b604082019050919050565b6000612f1c602083613410565b9150612f27826139df565b602082019050919050565b6000612f3f602083613410565b9150612f4a82613a08565b602082019050919050565b6000612f62602f83613410565b9150612f6d82613a31565b604082019050919050565b6000612f85601883613410565b9150612f9082613a80565b602082019050919050565b6000612fa8602183613410565b9150612fb382613aa9565b604082019050919050565b6000612fcb600083613405565b9150612fd682613af8565b600082019050919050565b6000612fee603d83613410565b9150612ff982613afb565b604082019050919050565b61300d816135ab565b82525050565b61301c816135ab565b82525050565b600061302e8286612d47565b915061303a8285612d47565b91506130468284612d78565b9150819050949350505050565b600061305e82612fbe565b9150819050919050565b600060208201905061307d6000830184612c59565b92915050565b60006080820190506130986000830187612c59565b6130a56020830186612c59565b6130b26040830185613013565b81810360608301526130c48184612cd5565b905095945050505050565b600060208201905081810360008301526130e98184612c68565b905092915050565b60006020820190506131066000830184612cc6565b92915050565b600060208201905081810360008301526131268184612d0e565b905092915050565b6000602082019050818103600083015261314781612df7565b9050919050565b6000602082019050818103600083015261316781612e1a565b9050919050565b6000602082019050818103600083015261318781612e3d565b9050919050565b600060208201905081810360008301526131a781612e60565b9050919050565b600060208201905081810360008301526131c781612e83565b9050919050565b600060208201905081810360008301526131e781612ea6565b9050919050565b6000602082019050818103600083015261320781612ec9565b9050919050565b6000602082019050818103600083015261322781612eec565b9050919050565b6000602082019050818103600083015261324781612f0f565b9050919050565b6000602082019050818103600083015261326781612f32565b9050919050565b6000602082019050818103600083015261328781612f55565b9050919050565b600060208201905081810360008301526132a781612f78565b9050919050565b600060208201905081810360008301526132c781612f9b565b9050919050565b600060208201905081810360008301526132e781612fe1565b9050919050565b60006020820190506133036000830184613013565b92915050565b6000613313613324565b905061331f8282613629565b919050565b6000604051905090565b600067ffffffffffffffff8211156133495761334861375f565b5b613352826137a2565b9050602081019050919050565b600067ffffffffffffffff82111561337a5761337961375f565b5b613383826137a2565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000613437826135ab565b9150613442836135ab565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613477576134766136a3565b5b828201905092915050565b600061348d826135ab565b9150613498836135ab565b9250826134a8576134a76136d2565b5b828204905092915050565b60006134be826135ab565b91506134c9836135ab565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613502576135016136a3565b5b828202905092915050565b6000613518826135ab565b9150613523836135ab565b925082821015613536576135356136a3565b5b828203905092915050565b600061354c8261358b565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156135e25780820151818401526020810190506135c7565b838111156135f1576000848401525b50505050565b6000600282049050600182168061360f57607f821691505b6020821081141561362357613622613701565b5b50919050565b613632826137a2565b810181811067ffffffffffffffff821117156136515761365061375f565b5b80604052505050565b6000613665826135ab565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613698576136976136a3565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206f7220617070726f76656400000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c000000602082015250565b613b5381613541565b8114613b5e57600080fd5b50565b613b6a81613553565b8114613b7557600080fd5b50565b613b818161355f565b8114613b8c57600080fd5b50565b613b98816135ab565b8114613ba357600080fd5b5056fea26469706673582212201cec588e34e52c05d18c5faba5bed3b51ee2613efd7b6ded7e3feba0555387a764736f6c63430008070033697066733a2f2f62616679626569666776353477656f6d6e676761663771676979786268676e757376736b65373663786f376873643561326a6662677367377873612f
Deployed Bytecode
0x6080604052600436106102045760003560e01c806362b99ad411610118578063a22cb465116100a0578063c87b56dd1161006f578063c87b56dd14610720578063d5abeb011461075d578063e0a8085314610788578063e985e9c5146107b1578063f2fde38b146107ee57610204565b8063a22cb4651461067a578063a45ba8e7146106a3578063b071401b146106ce578063b88d4fde146106f757610204565b80637ec4a659116100e75780637ec4a659146105b45780638da5cb5b146105dd57806394354fd01461060857806395d89b4114610633578063a0712d681461065e57610204565b806362b99ad4146104f85780636352211e1461052357806370a0823114610560578063715018a61461059d57610204565b806323b872dd1161019b57806344a0d68a1161016a57806344a0d68a146104255780634fdd43cb1461044e57806351830227146104775780635503a0e8146104a25780635c975abb146104cd57610204565b806323b872dd1461037f5780633ccfd60b146103a857806342842e0e146103bf578063438b6300146103e857610204565b806313faede6116101d757806313faede6146102d757806316ba10e01461030257806316c38b3c1461032b57806318160ddd1461035457610204565b806301ffc9a71461020957806306fdde0314610246578063081812fc14610271578063095ea7b3146102ae575b600080fd5b34801561021557600080fd5b50610230600480360381019061022b9190612b71565b610817565b60405161023d91906130f1565b60405180910390f35b34801561025257600080fd5b5061025b6108f9565b604051610268919061310c565b60405180910390f35b34801561027d57600080fd5b5061029860048036038101906102939190612c14565b61098b565b6040516102a59190613068565b60405180910390f35b3480156102ba57600080fd5b506102d560048036038101906102d09190612b04565b6109d1565b005b3480156102e357600080fd5b506102ec610ae9565b6040516102f991906132ee565b60405180910390f35b34801561030e57600080fd5b5061032960048036038101906103249190612bcb565b610aef565b005b34801561033757600080fd5b50610352600480360381019061034d9190612b44565b610b11565b005b34801561036057600080fd5b50610369610b36565b60405161037691906132ee565b60405180910390f35b34801561038b57600080fd5b506103a660048036038101906103a191906129ee565b610b47565b005b3480156103b457600080fd5b506103bd610ba7565b005b3480156103cb57600080fd5b506103e660048036038101906103e191906129ee565b610cdf565b005b3480156103f457600080fd5b5061040f600480360381019061040a9190612981565b610cff565b60405161041c91906130cf565b60405180910390f35b34801561043157600080fd5b5061044c60048036038101906104479190612c14565b610e0a565b005b34801561045a57600080fd5b5061047560048036038101906104709190612bcb565b610e1c565b005b34801561048357600080fd5b5061048c610e3e565b60405161049991906130f1565b60405180910390f35b3480156104ae57600080fd5b506104b7610e51565b6040516104c4919061310c565b60405180910390f35b3480156104d957600080fd5b506104e2610edf565b6040516104ef91906130f1565b60405180910390f35b34801561050457600080fd5b5061050d610ef2565b60405161051a919061310c565b60405180910390f35b34801561052f57600080fd5b5061054a60048036038101906105459190612c14565b610f80565b6040516105579190613068565b60405180910390f35b34801561056c57600080fd5b5061058760048036038101906105829190612981565b611007565b60405161059491906132ee565b60405180910390f35b3480156105a957600080fd5b506105b26110bf565b005b3480156105c057600080fd5b506105db60048036038101906105d69190612bcb565b6110d3565b005b3480156105e957600080fd5b506105f26110f5565b6040516105ff9190613068565b60405180910390f35b34801561061457600080fd5b5061061d61111f565b60405161062a91906132ee565b60405180910390f35b34801561063f57600080fd5b50610648611125565b604051610655919061310c565b60405180910390f35b61067860048036038101906106739190612c14565b6111b7565b005b34801561068657600080fd5b506106a1600480360381019061069c9190612ac4565b6112f3565b005b3480156106af57600080fd5b506106b8611309565b6040516106c5919061310c565b60405180910390f35b3480156106da57600080fd5b506106f560048036038101906106f09190612c14565b611397565b005b34801561070357600080fd5b5061071e60048036038101906107199190612a41565b6113a9565b005b34801561072c57600080fd5b5061074760048036038101906107429190612c14565b61140b565b604051610754919061310c565b60405180910390f35b34801561076957600080fd5b50610772611564565b60405161077f91906132ee565b60405180910390f35b34801561079457600080fd5b506107af60048036038101906107aa9190612b44565b61156a565b005b3480156107bd57600080fd5b506107d860048036038101906107d391906129ae565b61158f565b6040516107e591906130f1565b60405180910390f35b3480156107fa57600080fd5b5061081560048036038101906108109190612981565b611623565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108e257507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806108f257506108f1826116a7565b5b9050919050565b606060008054610908906135f7565b80601f0160208091040260200160405190810160405280929190818152602001828054610934906135f7565b80156109815780601f1061095657610100808354040283529160200191610981565b820191906000526020600020905b81548152906001019060200180831161096457829003601f168201915b5050505050905090565b600061099682611711565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006109dc82610f80565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a44906132ae565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a6c61175c565b73ffffffffffffffffffffffffffffffffffffffff161480610a9b5750610a9a81610a9561175c565b61158f565b5b610ada576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad1906132ce565b60405180910390fd5b610ae48383611764565b505050565b600b5481565b610af761181d565b8060099080519060200190610b0d929190612795565b5050565b610b1961181d565b80600e60006101000a81548160ff02191690831515021790555050565b6000610b42600761189b565b905090565b610b58610b5261175c565b826118a9565b610b97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8e9061312e565b60405180910390fd5b610ba283838361193e565b505050565b610baf61181d565b6000733700cc3f044a3e7478bc0c6193e9c8e105cb4e5c73ffffffffffffffffffffffffffffffffffffffff166064600a47610beb91906134b3565b610bf59190613482565b604051610c0190613053565b60006040518083038185875af1925050503d8060008114610c3e576040519150601f19603f3d011682016040523d82523d6000602084013e610c43565b606091505b5050905080610c5157600080fd5b6000736641fd8f38f844c6567c52d0bfedefe78cb6684973ffffffffffffffffffffffffffffffffffffffff1647604051610c8b90613053565b60006040518083038185875af1925050503d8060008114610cc8576040519150601f19603f3d011682016040523d82523d6000602084013e610ccd565b606091505b5050905080610cdb57600080fd5b5050565b610cfa838383604051806020016040528060008152506113a9565b505050565b60606000610d0c83611007565b905060008167ffffffffffffffff811115610d2a57610d2961375f565b5b604051908082528060200260200182016040528015610d585781602001602082028036833780820191505090505b50905060006001905060005b8381108015610d755750600c548211155b15610dfe576000610d8583610f80565b90508673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610dea5782848381518110610dcf57610dce613730565b5b6020026020010181815250508180610de69061365a565b9250505b8280610df59061365a565b93505050610d64565b82945050505050919050565b610e1261181d565b80600b8190555050565b610e2461181d565b80600a9080519060200190610e3a929190612795565b5050565b600e60019054906101000a900460ff1681565b60098054610e5e906135f7565b80601f0160208091040260200160405190810160405280929190818152602001828054610e8a906135f7565b8015610ed75780601f10610eac57610100808354040283529160200191610ed7565b820191906000526020600020905b815481529060010190602001808311610eba57829003601f168201915b505050505081565b600e60009054906101000a900460ff1681565b60088054610eff906135f7565b80601f0160208091040260200160405190810160405280929190818152602001828054610f2b906135f7565b8015610f785780601f10610f4d57610100808354040283529160200191610f78565b820191906000526020600020905b815481529060010190602001808311610f5b57829003601f168201915b505050505081565b600080610f8c83611c38565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610ffe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff59061328e565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611078576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106f9061320e565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6110c761181d565b6110d16000611c75565b565b6110db61181d565b80600890805190602001906110f1929190612795565b5050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600d5481565b606060018054611134906135f7565b80601f0160208091040260200160405190810160405280929190818152602001828054611160906135f7565b80156111ad5780601f10611182576101008083540402835291602001916111ad565b820191906000526020600020905b81548152906001019060200180831161119057829003601f168201915b5050505050905090565b600e60009054906101000a900460ff16156111d157600080fd5b600081116111de57600080fd5b600d548111156111ed57600080fd5b600a816111f933610cff565b51611204919061342c565b111561120f57600080fd5b6000611219610b36565b9050600c54828261122a919061342c565b111561123557600080fd5b60b1811061124257600080fd5b600061124d33610cff565b511115611278578166138a388a43c00061126791906134b3565b34101561127357600080fd5b6112ae565b60018211156112ad5760018261128e919061350d565b66138a388a43c0006112a091906134b3565b3410156112ac57600080fd5b5b5b6000600190505b8281116112ee576112d13382846112cc919061342c565b611d3b565b6112db6007611d59565b80806112e69061365a565b9150506112b5565b505050565b6113056112fe61175c565b8383611d6f565b5050565b600a8054611316906135f7565b80601f0160208091040260200160405190810160405280929190818152602001828054611342906135f7565b801561138f5780601f106113645761010080835404028352916020019161138f565b820191906000526020600020905b81548152906001019060200180831161137257829003601f168201915b505050505081565b61139f61181d565b80600d8190555050565b6113ba6113b461175c565b836118a9565b6113f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f09061312e565b60405180910390fd5b61140584848484611edc565b50505050565b606061141682611f38565b611455576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144c9061326e565b60405180910390fd5b60001515600e60019054906101000a900460ff161515141561150357600a805461147e906135f7565b80601f01602080910402602001604051908101604052809291908181526020018280546114aa906135f7565b80156114f75780601f106114cc576101008083540402835291602001916114f7565b820191906000526020600020905b8154815290600101906020018083116114da57829003601f168201915b5050505050905061155f565b600061150d611f79565b9050600081511161152d576040518060200160405280600081525061155b565b806115378461200b565b600960405160200161154b93929190613022565b6040516020818303038152906040525b9150505b919050565b600c5481565b61157261181d565b80600e60016101000a81548160ff02191690831515021790555050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61162b61181d565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561169b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116929061316e565b60405180910390fd5b6116a481611c75565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61171a81611f38565b611759576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117509061328e565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166117d783610f80565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b61182561175c565b73ffffffffffffffffffffffffffffffffffffffff166118436110f5565b73ffffffffffffffffffffffffffffffffffffffff1614611899576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118909061324e565b60405180910390fd5b565b600081600001549050919050565b6000806118b583610f80565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806118f757506118f6818561158f565b5b8061193557508373ffffffffffffffffffffffffffffffffffffffff1661191d8461098b565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661195e82610f80565b73ffffffffffffffffffffffffffffffffffffffff16146119b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ab9061318e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1b906131ce565b60405180910390fd5b611a3183838360016120e3565b8273ffffffffffffffffffffffffffffffffffffffff16611a5182610f80565b73ffffffffffffffffffffffffffffffffffffffff1614611aa7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9e9061318e565b60405180910390fd5b6004600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611c338383836001612209565b505050565b60006002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611d5582826040518060200160405280600081525061220f565b5050565b6001816000016000828254019250508190555050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611dde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd5906131ee565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611ecf91906130f1565b60405180910390a3505050565b611ee784848461193e565b611ef38484848461226a565b611f32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f299061314e565b60405180910390fd5b50505050565b60008073ffffffffffffffffffffffffffffffffffffffff16611f5a83611c38565b73ffffffffffffffffffffffffffffffffffffffff1614159050919050565b606060088054611f88906135f7565b80601f0160208091040260200160405190810160405280929190818152602001828054611fb4906135f7565b80156120015780601f10611fd657610100808354040283529160200191612001565b820191906000526020600020905b815481529060010190602001808311611fe457829003601f168201915b5050505050905090565b60606000600161201a84612401565b01905060008167ffffffffffffffff8111156120395761203861375f565b5b6040519080825280601f01601f19166020018201604052801561206b5781602001600182028036833780820191505090505b509050600082602001820190505b6001156120d8578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85816120c2576120c16136d2565b5b04945060008514156120d3576120d8565b612079565b819350505050919050565b600181111561220357600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16146121775780600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461216f919061350d565b925050819055505b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146122025780600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546121fa919061342c565b925050819055505b5b50505050565b50505050565b6122198383612554565b612226600084848461226a565b612265576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161225c9061314e565b60405180910390fd5b505050565b600061228b8473ffffffffffffffffffffffffffffffffffffffff16612772565b156123f4578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026122b461175c565b8786866040518563ffffffff1660e01b81526004016122d69493929190613083565b602060405180830381600087803b1580156122f057600080fd5b505af192505050801561232157506040513d601f19601f8201168201806040525081019061231e9190612b9e565b60015b6123a4573d8060008114612351576040519150601f19603f3d011682016040523d82523d6000602084013e612356565b606091505b5060008151141561239c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123939061314e565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506123f9565b600190505b949350505050565b600080600090507a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061245f577a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008381612455576124546136d2565b5b0492506040810190505b6d04ee2d6d415b85acef8100000000831061249c576d04ee2d6d415b85acef81000000008381612492576124916136d2565b5b0492506020810190505b662386f26fc1000083106124cb57662386f26fc1000083816124c1576124c06136d2565b5b0492506010810190505b6305f5e10083106124f4576305f5e10083816124ea576124e96136d2565b5b0492506008810190505b612710831061251957612710838161250f5761250e6136d2565b5b0492506004810190505b6064831061253c5760648381612532576125316136d2565b5b0492506002810190505b600a831061254b576001810190505b80915050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156125c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125bb9061322e565b60405180910390fd5b6125cd81611f38565b1561260d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612604906131ae565b60405180910390fd5b61261b6000838360016120e3565b61262481611f38565b15612664576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161265b906131ae565b60405180910390fd5b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461276e600083836001612209565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b8280546127a1906135f7565b90600052602060002090601f0160209004810192826127c3576000855561280a565b82601f106127dc57805160ff191683800117855561280a565b8280016001018555821561280a579182015b828111156128095782518255916020019190600101906127ee565b5b509050612817919061281b565b5090565b5b8082111561283457600081600090555060010161281c565b5090565b600061284b6128468461332e565b613309565b90508281526020810184848401111561286757612866613793565b5b6128728482856135b5565b509392505050565b600061288d6128888461335f565b613309565b9050828152602081018484840111156128a9576128a8613793565b5b6128b48482856135b5565b509392505050565b6000813590506128cb81613b4a565b92915050565b6000813590506128e081613b61565b92915050565b6000813590506128f581613b78565b92915050565b60008151905061290a81613b78565b92915050565b600082601f8301126129255761292461378e565b5b8135612935848260208601612838565b91505092915050565b600082601f8301126129535761295261378e565b5b813561296384826020860161287a565b91505092915050565b60008135905061297b81613b8f565b92915050565b6000602082840312156129975761299661379d565b5b60006129a5848285016128bc565b91505092915050565b600080604083850312156129c5576129c461379d565b5b60006129d3858286016128bc565b92505060206129e4858286016128bc565b9150509250929050565b600080600060608486031215612a0757612a0661379d565b5b6000612a15868287016128bc565b9350506020612a26868287016128bc565b9250506040612a378682870161296c565b9150509250925092565b60008060008060808587031215612a5b57612a5a61379d565b5b6000612a69878288016128bc565b9450506020612a7a878288016128bc565b9350506040612a8b8782880161296c565b925050606085013567ffffffffffffffff811115612aac57612aab613798565b5b612ab887828801612910565b91505092959194509250565b60008060408385031215612adb57612ada61379d565b5b6000612ae9858286016128bc565b9250506020612afa858286016128d1565b9150509250929050565b60008060408385031215612b1b57612b1a61379d565b5b6000612b29858286016128bc565b9250506020612b3a8582860161296c565b9150509250929050565b600060208284031215612b5a57612b5961379d565b5b6000612b68848285016128d1565b91505092915050565b600060208284031215612b8757612b8661379d565b5b6000612b95848285016128e6565b91505092915050565b600060208284031215612bb457612bb361379d565b5b6000612bc2848285016128fb565b91505092915050565b600060208284031215612be157612be061379d565b5b600082013567ffffffffffffffff811115612bff57612bfe613798565b5b612c0b8482850161293e565b91505092915050565b600060208284031215612c2a57612c2961379d565b5b6000612c388482850161296c565b91505092915050565b6000612c4d8383613004565b60208301905092915050565b612c6281613541565b82525050565b6000612c73826133b5565b612c7d81856133e3565b9350612c8883613390565b8060005b83811015612cb9578151612ca08882612c41565b9750612cab836133d6565b925050600181019050612c8c565b5085935050505092915050565b612ccf81613553565b82525050565b6000612ce0826133c0565b612cea81856133f4565b9350612cfa8185602086016135c4565b612d03816137a2565b840191505092915050565b6000612d19826133cb565b612d238185613410565b9350612d338185602086016135c4565b612d3c816137a2565b840191505092915050565b6000612d52826133cb565b612d5c8185613421565b9350612d6c8185602086016135c4565b80840191505092915050565b60008154612d85816135f7565b612d8f8186613421565b94506001821660008114612daa5760018114612dbb57612dee565b60ff19831686528186019350612dee565b612dc4856133a0565b60005b83811015612de657815481890152600182019150602081019050612dc7565b838801955050505b50505092915050565b6000612e04602d83613410565b9150612e0f826137b3565b604082019050919050565b6000612e27603283613410565b9150612e3282613802565b604082019050919050565b6000612e4a602683613410565b9150612e5582613851565b604082019050919050565b6000612e6d602583613410565b9150612e78826138a0565b604082019050919050565b6000612e90601c83613410565b9150612e9b826138ef565b602082019050919050565b6000612eb3602483613410565b9150612ebe82613918565b604082019050919050565b6000612ed6601983613410565b9150612ee182613967565b602082019050919050565b6000612ef9602983613410565b9150612f0482613990565b604082019050919050565b6000612f1c602083613410565b9150612f27826139df565b602082019050919050565b6000612f3f602083613410565b9150612f4a82613a08565b602082019050919050565b6000612f62602f83613410565b9150612f6d82613a31565b604082019050919050565b6000612f85601883613410565b9150612f9082613a80565b602082019050919050565b6000612fa8602183613410565b9150612fb382613aa9565b604082019050919050565b6000612fcb600083613405565b9150612fd682613af8565b600082019050919050565b6000612fee603d83613410565b9150612ff982613afb565b604082019050919050565b61300d816135ab565b82525050565b61301c816135ab565b82525050565b600061302e8286612d47565b915061303a8285612d47565b91506130468284612d78565b9150819050949350505050565b600061305e82612fbe565b9150819050919050565b600060208201905061307d6000830184612c59565b92915050565b60006080820190506130986000830187612c59565b6130a56020830186612c59565b6130b26040830185613013565b81810360608301526130c48184612cd5565b905095945050505050565b600060208201905081810360008301526130e98184612c68565b905092915050565b60006020820190506131066000830184612cc6565b92915050565b600060208201905081810360008301526131268184612d0e565b905092915050565b6000602082019050818103600083015261314781612df7565b9050919050565b6000602082019050818103600083015261316781612e1a565b9050919050565b6000602082019050818103600083015261318781612e3d565b9050919050565b600060208201905081810360008301526131a781612e60565b9050919050565b600060208201905081810360008301526131c781612e83565b9050919050565b600060208201905081810360008301526131e781612ea6565b9050919050565b6000602082019050818103600083015261320781612ec9565b9050919050565b6000602082019050818103600083015261322781612eec565b9050919050565b6000602082019050818103600083015261324781612f0f565b9050919050565b6000602082019050818103600083015261326781612f32565b9050919050565b6000602082019050818103600083015261328781612f55565b9050919050565b600060208201905081810360008301526132a781612f78565b9050919050565b600060208201905081810360008301526132c781612f9b565b9050919050565b600060208201905081810360008301526132e781612fe1565b9050919050565b60006020820190506133036000830184613013565b92915050565b6000613313613324565b905061331f8282613629565b919050565b6000604051905090565b600067ffffffffffffffff8211156133495761334861375f565b5b613352826137a2565b9050602081019050919050565b600067ffffffffffffffff82111561337a5761337961375f565b5b613383826137a2565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000613437826135ab565b9150613442836135ab565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613477576134766136a3565b5b828201905092915050565b600061348d826135ab565b9150613498836135ab565b9250826134a8576134a76136d2565b5b828204905092915050565b60006134be826135ab565b91506134c9836135ab565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613502576135016136a3565b5b828202905092915050565b6000613518826135ab565b9150613523836135ab565b925082821015613536576135356136a3565b5b828203905092915050565b600061354c8261358b565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156135e25780820151818401526020810190506135c7565b838111156135f1576000848401525b50505050565b6000600282049050600182168061360f57607f821691505b6020821081141561362357613622613701565b5b50919050565b613632826137a2565b810181811067ffffffffffffffff821117156136515761365061375f565b5b80604052505050565b6000613665826135ab565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613698576136976136a3565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206f7220617070726f76656400000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c000000602082015250565b613b5381613541565b8114613b5e57600080fd5b50565b613b6a81613553565b8114613b7557600080fd5b50565b613b818161355f565b8114613b8c57600080fd5b50565b613b98816135ab565b8114613ba357600080fd5b5056fea26469706673582212201cec588e34e52c05d18c5faba5bed3b51ee2613efd7b6ded7e3feba0555387a764736f6c63430008070033
Deployed Bytecode Sourcemap
56040:4938:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40044:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40972:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42484:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42002:416;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;56371:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;59809:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;59915:77;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;58024:89;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43184:335;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;59998:861;;;;;;;;;;;;;:::i;:::-;;43590:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;58121:635;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;59349:74;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;59565:132;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;56522:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;56293:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;56492:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;56193:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40682:223;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40413:207;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19475:103;;;;;;;;;;;;;:::i;:::-;;59703:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18827:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;56445:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41141:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;56866:1152;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42727:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;56331:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;59429:130;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43846:322;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;58762:494;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;56410:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;59262:81;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42953:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19733:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40044:305;40146:4;40198:25;40183:40;;;:11;:40;;;;:105;;;;40255:33;40240:48;;;:11;:48;;;;40183:105;:158;;;;40305:36;40329:11;40305:23;:36::i;:::-;40183:158;40163:178;;40044:305;;;:::o;40972:100::-;41026:13;41059:5;41052:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40972:100;:::o;42484:171::-;42560:7;42580:23;42595:7;42580:14;:23::i;:::-;42623:15;:24;42639:7;42623:24;;;;;;;;;;;;;;;;;;;;;42616:31;;42484:171;;;:::o;42002:416::-;42083:13;42099:23;42114:7;42099:14;:23::i;:::-;42083:39;;42147:5;42141:11;;:2;:11;;;;42133:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;42241:5;42225:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;42250:37;42267:5;42274:12;:10;:12::i;:::-;42250:16;:37::i;:::-;42225:62;42203:173;;;;;;;;;;;;:::i;:::-;;;;;;;;;42389:21;42398:2;42402:7;42389:8;:21::i;:::-;42072:346;42002:416;;:::o;56371:34::-;;;;:::o;59809:100::-;18713:13;:11;:13::i;:::-;59893:10:::1;59881:9;:22;;;;;;;;;;;;:::i;:::-;;59809:100:::0;:::o;59915:77::-;18713:13;:11;:13::i;:::-;59980:6:::1;59971;;:15;;;;;;;;;;;;;;;;;;59915:77:::0;:::o;58024:89::-;58068:7;58091:16;:6;:14;:16::i;:::-;58084:23;;58024:89;:::o;43184:335::-;43379:41;43398:12;:10;:12::i;:::-;43412:7;43379:18;:41::i;:::-;43371:99;;;;;;;;;;;;:::i;:::-;;;;;;;;;43483:28;43493:4;43499:2;43503:7;43483:9;:28::i;:::-;43184:335;;;:::o;59998:861::-;18713:13;:11;:13::i;:::-;60177:7:::1;60198:42;60190:56;;60283:3;60278:2;60254:21;:26;;;;:::i;:::-;:32;;;;:::i;:::-;60190:101;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;60176:115;;;60306:2;60298:11;;;::::0;::::1;;60646:7;60667:42;60659:56;;60723:21;60659:90;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;60645:104;;;60764:2;60756:11;;;::::0;::::1;;60035:824;;59998:861::o:0;43590:185::-;43728:39;43745:4;43751:2;43755:7;43728:39;;;;;;;;;;;;:16;:39::i;:::-;43590:185;;;:::o;58121:635::-;58196:16;58224:23;58250:17;58260:6;58250:9;:17::i;:::-;58224:43;;58274:30;58321:15;58307:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;58274:63;;58344:22;58369:1;58344:26;;58377:23;58413:309;58438:15;58420;:33;:64;;;;;58475:9;;58457:14;:27;;58420:64;58413:309;;;58495:25;58523:23;58531:14;58523:7;:23::i;:::-;58495:51;;58582:6;58561:27;;:17;:27;;;58557:131;;;58634:14;58601:13;58615:15;58601:30;;;;;;;;:::i;:::-;;;;;;;:47;;;;;58661:17;;;;;:::i;:::-;;;;58557:131;58698:16;;;;;:::i;:::-;;;;58486:236;58413:309;;;58737:13;58730:20;;;;;;58121:635;;;:::o;59349:74::-;18713:13;:11;:13::i;:::-;59412:5:::1;59405:4;:12;;;;59349:74:::0;:::o;59565:132::-;18713:13;:11;:13::i;:::-;59673:18:::1;59653:17;:38;;;;;;;;;;;;:::i;:::-;;59565:132:::0;:::o;56522:27::-;;;;;;;;;;;;;:::o;56293:33::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;56492:25::-;;;;;;;;;;;;;:::o;56193:95::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;40682:223::-;40754:7;40774:13;40790:17;40799:7;40790:8;:17::i;:::-;40774:33;;40843:1;40826:19;;:5;:19;;;;40818:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;40892:5;40885:12;;;40682:223;;;:::o;40413:207::-;40485:7;40530:1;40513:19;;:5;:19;;;;40505:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;40596:9;:16;40606:5;40596:16;;;;;;;;;;;;;;;;40589:23;;40413:207;;;:::o;19475:103::-;18713:13;:11;:13::i;:::-;19540:30:::1;19567:1;19540:18;:30::i;:::-;19475:103::o:0;59703:100::-;18713:13;:11;:13::i;:::-;59787:10:::1;59775:9;:22;;;;;;;;;;;;:::i;:::-;;59703:100:::0;:::o;18827:87::-;18873:7;18900:6;;;;;;;;;;;18893:13;;18827:87;:::o;56445:38::-;;;;:::o;41141:104::-;41197:13;41230:7;41223:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41141:104;:::o;56866:1152::-;56978:6;;;;;;;;;;;56977:7;56969:16;;;;;;57122:1;57108:11;:15;57100:24;;;;;;57154:18;;57139:11;:33;;57131:42;;;;;;57246:2;57231:11;57196:25;57210:10;57196:13;:25::i;:::-;:32;:46;;;;:::i;:::-;:52;;57188:61;;;;;;57356:21;57380:13;:11;:13::i;:::-;57356:37;;57439:9;;57424:11;57408:13;:27;;;;:::i;:::-;:40;;57400:49;;;;;;57553:3;57537:13;:19;57529:28;;;;;;57668:1;57633:25;57647:10;57633:13;:25::i;:::-;:32;:36;57629:227;;;57727:11;57713;:25;;;;:::i;:::-;57700:9;:38;;57692:47;;;;;;57629:227;;;57771:1;57757:11;:15;57753:103;;;57845:1;57831:11;:15;;;;:::i;:::-;57816:11;:31;;;;:::i;:::-;57803:9;:44;;57795:53;;;;;;57753:103;57629:227;57891:9;57903:1;57891:13;;57886:127;57911:11;57906:1;:16;57886:127;;57938:40;57948:10;57976:1;57960:13;:17;;;;:::i;:::-;57938:9;:40::i;:::-;57987:18;:6;:16;:18::i;:::-;57924:3;;;;;:::i;:::-;;;;57886:127;;;;56916:1102;56866:1152;:::o;42727:155::-;42822:52;42841:12;:10;:12::i;:::-;42855:8;42865;42822:18;:52::i;:::-;42727:155;;:::o;56331:31::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;59429:130::-;18713:13;:11;:13::i;:::-;59534:19:::1;59513:18;:40;;;;59429:130:::0;:::o;43846:322::-;44020:41;44039:12;:10;:12::i;:::-;44053:7;44020:18;:41::i;:::-;44012:99;;;;;;;;;;;;:::i;:::-;;;;;;;;;44122:38;44136:4;44142:2;44146:7;44155:4;44122:13;:38::i;:::-;43846:322;;;;:::o;58762:494::-;58861:13;58902:17;58910:8;58902:7;:17::i;:::-;58886:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;59009:5;58997:17;;:8;;;;;;;;;;;:17;;;58993:64;;;59032:17;59025:24;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;58993:64;59065:28;59096:10;:8;:10::i;:::-;59065:41;;59151:1;59126:14;59120:28;:32;:130;;;;;;;;;;;;;;;;;59188:14;59204:19;:8;:17;:19::i;:::-;59225:9;59171:64;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;59120:130;59113:137;;;58762:494;;;;:::o;56410:30::-;;;;:::o;59262:81::-;18713:13;:11;:13::i;:::-;59331:6:::1;59320:8;;:17;;;;;;;;;;;;;;;;;;59262:81:::0;:::o;42953:164::-;43050:4;43074:18;:25;43093:5;43074:25;;;;;;;;;;;;;;;:35;43100:8;43074:35;;;;;;;;;;;;;;;;;;;;;;;;;43067:42;;42953:164;;;;:::o;19733:201::-;18713:13;:11;:13::i;:::-;19842:1:::1;19822:22;;:8;:22;;;;19814:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;19898:28;19917:8;19898:18;:28::i;:::-;19733:201:::0;:::o;32556:157::-;32641:4;32680:25;32665:40;;;:11;:40;;;;32658:47;;32556:157;;;:::o;52303:135::-;52385:16;52393:7;52385;:16::i;:::-;52377:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;52303:135;:::o;17378:98::-;17431:7;17458:10;17451:17;;17378:98;:::o;51582:174::-;51684:2;51657:15;:24;51673:7;51657:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;51740:7;51736:2;51702:46;;51711:23;51726:7;51711:14;:23::i;:::-;51702:46;;;;;;;;;;;;51582:174;;:::o;18992:132::-;19067:12;:10;:12::i;:::-;19056:23;;:7;:5;:7::i;:::-;:23;;;19048:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18992:132::o;907:114::-;972:7;999;:14;;;992:21;;907:114;;;:::o;46201:264::-;46294:4;46311:13;46327:23;46342:7;46327:14;:23::i;:::-;46311:39;;46380:5;46369:16;;:7;:16;;;:52;;;;46389:32;46406:5;46413:7;46389:16;:32::i;:::-;46369:52;:87;;;;46449:7;46425:31;;:20;46437:7;46425:11;:20::i;:::-;:31;;;46369:87;46361:96;;;46201:264;;;;:::o;50200:1263::-;50359:4;50332:31;;:23;50347:7;50332:14;:23::i;:::-;:31;;;50324:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;50438:1;50424:16;;:2;:16;;;;50416:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;50494:42;50515:4;50521:2;50525:7;50534:1;50494:20;:42::i;:::-;50666:4;50639:31;;:23;50654:7;50639:14;:23::i;:::-;:31;;;50631:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;50784:15;:24;50800:7;50784:24;;;;;;;;;;;;50777:31;;;;;;;;;;;51279:1;51260:9;:15;51270:4;51260:15;;;;;;;;;;;;;;;;:20;;;;;;;;;;;51312:1;51295:9;:13;51305:2;51295:13;;;;;;;;;;;;;;;;:18;;;;;;;;;;;51354:2;51335:7;:16;51343:7;51335:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;51393:7;51389:2;51374:27;;51383:4;51374:27;;;;;;;;;;;;51414:41;51434:4;51440:2;51444:7;51453:1;51414:19;:41::i;:::-;50200:1263;;;:::o;45476:117::-;45542:7;45569;:16;45577:7;45569:16;;;;;;;;;;;;;;;;;;;;;45562:23;;45476:117;;;:::o;20094:191::-;20168:16;20187:6;;;;;;;;;;;20168:25;;20213:8;20204:6;;:17;;;;;;;;;;;;;;;;;;20268:8;20237:40;;20258:8;20237:40;;;;;;;;;;;;20157:128;20094:191;:::o;46807:110::-;46883:26;46893:2;46897:7;46883:26;;;;;;;;;;;;:9;:26::i;:::-;46807:110;;:::o;1029:127::-;1136:1;1118:7;:14;;;:19;;;;;;;;;;;1029:127;:::o;51899:315::-;52054:8;52045:17;;:5;:17;;;;52037:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;52141:8;52103:18;:25;52122:5;52103:25;;;;;;;;;;;;;;;:35;52129:8;52103:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;52187:8;52165:41;;52180:5;52165:41;;;52197:8;52165:41;;;;;;:::i;:::-;;;;;;;;51899:315;;;:::o;45049:313::-;45205:28;45215:4;45221:2;45225:7;45205:9;:28::i;:::-;45252:47;45275:4;45281:2;45285:7;45294:4;45252:22;:47::i;:::-;45244:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;45049:313;;;;:::o;45906:128::-;45971:4;46024:1;45995:31;;:17;46004:7;45995:8;:17::i;:::-;:31;;;;45988:38;;45906:128;;;:::o;60871:104::-;60931:13;60960:9;60953:16;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;60871:104;:::o;14805:716::-;14861:13;14912:14;14949:1;14929:17;14940:5;14929:10;:17::i;:::-;:21;14912:38;;14965:20;14999:6;14988:18;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14965:41;;15021:11;15150:6;15146:2;15142:15;15134:6;15130:28;15123:35;;15187:288;15194:4;15187:288;;;15219:5;;;;;;;;15361:8;15356:2;15349:5;15345:14;15340:30;15335:3;15327:44;15417:2;15408:11;;;;;;:::i;:::-;;;;;15451:1;15442:5;:10;15438:21;;;15454:5;;15438:21;15187:288;;;15496:6;15489:13;;;;;14805:716;;;:::o;54587:410::-;54777:1;54765:9;:13;54761:229;;;54815:1;54799:18;;:4;:18;;;54795:87;;54857:9;54838;:15;54848:4;54838:15;;;;;;;;;;;;;;;;:28;;;;;;;:::i;:::-;;;;;;;;54795:87;54914:1;54900:16;;:2;:16;;;54896:83;;54954:9;54937;:13;54947:2;54937:13;;;;;;;;;;;;;;;;:26;;;;;;;:::i;:::-;;;;;;;;54896:83;54761:229;54587:410;;;;:::o;55719:158::-;;;;;:::o;47144:319::-;47273:18;47279:2;47283:7;47273:5;:18::i;:::-;47324:53;47355:1;47359:2;47363:7;47372:4;47324:22;:53::i;:::-;47302:153;;;;;;;;;;;;:::i;:::-;;;;;;;;;47144:319;;;:::o;53002:853::-;53156:4;53177:15;:2;:13;;;:15::i;:::-;53173:675;;;53229:2;53213:36;;;53250:12;:10;:12::i;:::-;53264:4;53270:7;53279:4;53213:71;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;53209:584;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53471:1;53454:6;:13;:18;53450:328;;;53497:60;;;;;;;;;;:::i;:::-;;;;;;;;53450:328;53728:6;53722:13;53713:6;53709:2;53705:15;53698:38;53209:584;53345:41;;;53335:51;;;:6;:51;;;;53328:58;;;;;53173:675;53832:4;53825:11;;53002:853;;;;;;;:::o;11671:922::-;11724:7;11744:14;11761:1;11744:18;;11811:6;11802:5;:15;11798:102;;11847:6;11838:15;;;;;;:::i;:::-;;;;;11882:2;11872:12;;;;11798:102;11927:6;11918:5;:15;11914:102;;11963:6;11954:15;;;;;;:::i;:::-;;;;;11998:2;11988:12;;;;11914:102;12043:6;12034:5;:15;12030:102;;12079:6;12070:15;;;;;;:::i;:::-;;;;;12114:2;12104:12;;;;12030:102;12159:5;12150;:14;12146:99;;12194:5;12185:14;;;;;;:::i;:::-;;;;;12228:1;12218:11;;;;12146:99;12272:5;12263;:14;12259:99;;12307:5;12298:14;;;;;;:::i;:::-;;;;;12341:1;12331:11;;;;12259:99;12385:5;12376;:14;12372:99;;12420:5;12411:14;;;;;;:::i;:::-;;;;;12454:1;12444:11;;;;12372:99;12498:5;12489;:14;12485:66;;12534:1;12524:11;;;;12485:66;12579:6;12572:13;;;11671:922;;;:::o;47799:942::-;47893:1;47879:16;;:2;:16;;;;47871:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;47952:16;47960:7;47952;:16::i;:::-;47951:17;47943:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;48014:48;48043:1;48047:2;48051:7;48060:1;48014:20;:48::i;:::-;48161:16;48169:7;48161;:16::i;:::-;48160:17;48152:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;48576:1;48559:9;:13;48569:2;48559:13;;;;;;;;;;;;;;;;:18;;;;;;;;;;;48620:2;48601:7;:16;48609:7;48601:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;48665:7;48661:2;48640:33;;48657:1;48640:33;;;;;;;;;;;;48686:47;48714:1;48718:2;48722:7;48731:1;48686:19;:47::i;:::-;47799:942;;:::o;21525:326::-;21585:4;21842:1;21820:7;:19;;;:23;21813:30;;21525:326;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;986:133::-;1029:5;1067:6;1054:20;1045:29;;1083:30;1107:5;1083:30;:::i;:::-;986:133;;;;:::o;1125:137::-;1170:5;1208:6;1195:20;1186:29;;1224:32;1250:5;1224:32;:::i;:::-;1125:137;;;;:::o;1268:141::-;1324:5;1355:6;1349:13;1340:22;;1371:32;1397:5;1371:32;:::i;:::-;1268:141;;;;:::o;1428:338::-;1483:5;1532:3;1525:4;1517:6;1513:17;1509:27;1499:122;;1540:79;;:::i;:::-;1499:122;1657:6;1644:20;1682:78;1756:3;1748:6;1741:4;1733:6;1729:17;1682:78;:::i;:::-;1673:87;;1489:277;1428:338;;;;:::o;1786:340::-;1842:5;1891:3;1884:4;1876:6;1872:17;1868:27;1858:122;;1899:79;;:::i;:::-;1858:122;2016:6;2003:20;2041:79;2116:3;2108:6;2101:4;2093:6;2089:17;2041:79;:::i;:::-;2032:88;;1848:278;1786:340;;;;:::o;2132:139::-;2178:5;2216:6;2203:20;2194:29;;2232:33;2259:5;2232:33;:::i;:::-;2132:139;;;;:::o;2277:329::-;2336:6;2385:2;2373:9;2364:7;2360:23;2356:32;2353:119;;;2391:79;;:::i;:::-;2353:119;2511:1;2536:53;2581:7;2572:6;2561:9;2557:22;2536:53;:::i;:::-;2526:63;;2482:117;2277:329;;;;:::o;2612:474::-;2680:6;2688;2737:2;2725:9;2716:7;2712:23;2708:32;2705:119;;;2743:79;;:::i;:::-;2705:119;2863:1;2888:53;2933:7;2924:6;2913:9;2909:22;2888:53;:::i;:::-;2878:63;;2834:117;2990:2;3016:53;3061:7;3052:6;3041:9;3037:22;3016:53;:::i;:::-;3006:63;;2961:118;2612:474;;;;;:::o;3092:619::-;3169:6;3177;3185;3234:2;3222:9;3213:7;3209:23;3205:32;3202:119;;;3240:79;;:::i;:::-;3202:119;3360:1;3385:53;3430:7;3421:6;3410:9;3406:22;3385:53;:::i;:::-;3375:63;;3331:117;3487:2;3513:53;3558:7;3549:6;3538:9;3534:22;3513:53;:::i;:::-;3503:63;;3458:118;3615:2;3641:53;3686:7;3677:6;3666:9;3662:22;3641:53;:::i;:::-;3631:63;;3586:118;3092:619;;;;;:::o;3717:943::-;3812:6;3820;3828;3836;3885:3;3873:9;3864:7;3860:23;3856:33;3853:120;;;3892:79;;:::i;:::-;3853:120;4012:1;4037:53;4082:7;4073:6;4062:9;4058:22;4037:53;:::i;:::-;4027:63;;3983:117;4139:2;4165:53;4210:7;4201:6;4190:9;4186:22;4165:53;:::i;:::-;4155:63;;4110:118;4267:2;4293:53;4338:7;4329:6;4318:9;4314:22;4293:53;:::i;:::-;4283:63;;4238:118;4423:2;4412:9;4408:18;4395:32;4454:18;4446:6;4443:30;4440:117;;;4476:79;;:::i;:::-;4440:117;4581:62;4635:7;4626:6;4615:9;4611:22;4581:62;:::i;:::-;4571:72;;4366:287;3717:943;;;;;;;:::o;4666:468::-;4731:6;4739;4788:2;4776:9;4767:7;4763:23;4759:32;4756:119;;;4794:79;;:::i;:::-;4756:119;4914:1;4939:53;4984:7;4975:6;4964:9;4960:22;4939:53;:::i;:::-;4929:63;;4885:117;5041:2;5067:50;5109:7;5100:6;5089:9;5085:22;5067:50;:::i;:::-;5057:60;;5012:115;4666:468;;;;;:::o;5140:474::-;5208:6;5216;5265:2;5253:9;5244:7;5240:23;5236:32;5233:119;;;5271:79;;:::i;:::-;5233:119;5391:1;5416:53;5461:7;5452:6;5441:9;5437:22;5416:53;:::i;:::-;5406:63;;5362:117;5518:2;5544:53;5589:7;5580:6;5569:9;5565:22;5544:53;:::i;:::-;5534:63;;5489:118;5140:474;;;;;:::o;5620:323::-;5676:6;5725:2;5713:9;5704:7;5700:23;5696:32;5693:119;;;5731:79;;:::i;:::-;5693:119;5851:1;5876:50;5918:7;5909:6;5898:9;5894:22;5876:50;:::i;:::-;5866:60;;5822:114;5620:323;;;;:::o;5949:327::-;6007:6;6056:2;6044:9;6035:7;6031:23;6027:32;6024:119;;;6062:79;;:::i;:::-;6024:119;6182:1;6207:52;6251:7;6242:6;6231:9;6227:22;6207:52;:::i;:::-;6197:62;;6153:116;5949:327;;;;:::o;6282:349::-;6351:6;6400:2;6388:9;6379:7;6375:23;6371:32;6368:119;;;6406:79;;:::i;:::-;6368:119;6526:1;6551:63;6606:7;6597:6;6586:9;6582:22;6551:63;:::i;:::-;6541:73;;6497:127;6282:349;;;;:::o;6637:509::-;6706:6;6755:2;6743:9;6734:7;6730:23;6726:32;6723:119;;;6761:79;;:::i;:::-;6723:119;6909:1;6898:9;6894:17;6881:31;6939:18;6931:6;6928:30;6925:117;;;6961:79;;:::i;:::-;6925:117;7066:63;7121:7;7112:6;7101:9;7097:22;7066:63;:::i;:::-;7056:73;;6852:287;6637:509;;;;:::o;7152:329::-;7211:6;7260:2;7248:9;7239:7;7235:23;7231:32;7228:119;;;7266:79;;:::i;:::-;7228:119;7386:1;7411:53;7456:7;7447:6;7436:9;7432:22;7411:53;:::i;:::-;7401:63;;7357:117;7152:329;;;;:::o;7487:179::-;7556:10;7577:46;7619:3;7611:6;7577:46;:::i;:::-;7655:4;7650:3;7646:14;7632:28;;7487:179;;;;:::o;7672:118::-;7759:24;7777:5;7759:24;:::i;:::-;7754:3;7747:37;7672:118;;:::o;7826:732::-;7945:3;7974:54;8022:5;7974:54;:::i;:::-;8044:86;8123:6;8118:3;8044:86;:::i;:::-;8037:93;;8154:56;8204:5;8154:56;:::i;:::-;8233:7;8264:1;8249:284;8274:6;8271:1;8268:13;8249:284;;;8350:6;8344:13;8377:63;8436:3;8421:13;8377:63;:::i;:::-;8370:70;;8463:60;8516:6;8463:60;:::i;:::-;8453:70;;8309:224;8296:1;8293;8289:9;8284:14;;8249:284;;;8253:14;8549:3;8542:10;;7950:608;;;7826:732;;;;:::o;8564:109::-;8645:21;8660:5;8645:21;:::i;:::-;8640:3;8633:34;8564:109;;:::o;8679:360::-;8765:3;8793:38;8825:5;8793:38;:::i;:::-;8847:70;8910:6;8905:3;8847:70;:::i;:::-;8840:77;;8926:52;8971:6;8966:3;8959:4;8952:5;8948:16;8926:52;:::i;:::-;9003:29;9025:6;9003:29;:::i;:::-;8998:3;8994:39;8987:46;;8769:270;8679:360;;;;:::o;9045:364::-;9133:3;9161:39;9194:5;9161:39;:::i;:::-;9216:71;9280:6;9275:3;9216:71;:::i;:::-;9209:78;;9296:52;9341:6;9336:3;9329:4;9322:5;9318:16;9296:52;:::i;:::-;9373:29;9395:6;9373:29;:::i;:::-;9368:3;9364:39;9357:46;;9137:272;9045:364;;;;:::o;9415:377::-;9521:3;9549:39;9582:5;9549:39;:::i;:::-;9604:89;9686:6;9681:3;9604:89;:::i;:::-;9597:96;;9702:52;9747:6;9742:3;9735:4;9728:5;9724:16;9702:52;:::i;:::-;9779:6;9774:3;9770:16;9763:23;;9525:267;9415:377;;;;:::o;9822:845::-;9925:3;9962:5;9956:12;9991:36;10017:9;9991:36;:::i;:::-;10043:89;10125:6;10120:3;10043:89;:::i;:::-;10036:96;;10163:1;10152:9;10148:17;10179:1;10174:137;;;;10325:1;10320:341;;;;10141:520;;10174:137;10258:4;10254:9;10243;10239:25;10234:3;10227:38;10294:6;10289:3;10285:16;10278:23;;10174:137;;10320:341;10387:38;10419:5;10387:38;:::i;:::-;10447:1;10461:154;10475:6;10472:1;10469:13;10461:154;;;10549:7;10543:14;10539:1;10534:3;10530:11;10523:35;10599:1;10590:7;10586:15;10575:26;;10497:4;10494:1;10490:12;10485:17;;10461:154;;;10644:6;10639:3;10635:16;10628:23;;10327:334;;10141:520;;9929:738;;9822:845;;;;:::o;10673:366::-;10815:3;10836:67;10900:2;10895:3;10836:67;:::i;:::-;10829:74;;10912:93;11001:3;10912:93;:::i;:::-;11030:2;11025:3;11021:12;11014:19;;10673:366;;;:::o;11045:::-;11187:3;11208:67;11272:2;11267:3;11208:67;:::i;:::-;11201:74;;11284:93;11373:3;11284:93;:::i;:::-;11402:2;11397:3;11393:12;11386:19;;11045:366;;;:::o;11417:::-;11559:3;11580:67;11644:2;11639:3;11580:67;:::i;:::-;11573:74;;11656:93;11745:3;11656:93;:::i;:::-;11774:2;11769:3;11765:12;11758:19;;11417:366;;;:::o;11789:::-;11931:3;11952:67;12016:2;12011:3;11952:67;:::i;:::-;11945:74;;12028:93;12117:3;12028:93;:::i;:::-;12146:2;12141:3;12137:12;12130:19;;11789:366;;;:::o;12161:::-;12303:3;12324:67;12388:2;12383:3;12324:67;:::i;:::-;12317:74;;12400:93;12489:3;12400:93;:::i;:::-;12518:2;12513:3;12509:12;12502:19;;12161:366;;;:::o;12533:::-;12675:3;12696:67;12760:2;12755:3;12696:67;:::i;:::-;12689:74;;12772:93;12861:3;12772:93;:::i;:::-;12890:2;12885:3;12881:12;12874:19;;12533:366;;;:::o;12905:::-;13047:3;13068:67;13132:2;13127:3;13068:67;:::i;:::-;13061:74;;13144:93;13233:3;13144:93;:::i;:::-;13262:2;13257:3;13253:12;13246:19;;12905:366;;;:::o;13277:::-;13419:3;13440:67;13504:2;13499:3;13440:67;:::i;:::-;13433:74;;13516:93;13605:3;13516:93;:::i;:::-;13634:2;13629:3;13625:12;13618:19;;13277:366;;;:::o;13649:::-;13791:3;13812:67;13876:2;13871:3;13812:67;:::i;:::-;13805:74;;13888:93;13977:3;13888:93;:::i;:::-;14006:2;14001:3;13997:12;13990:19;;13649:366;;;:::o;14021:::-;14163:3;14184:67;14248:2;14243:3;14184:67;:::i;:::-;14177:74;;14260:93;14349:3;14260:93;:::i;:::-;14378:2;14373:3;14369:12;14362:19;;14021:366;;;:::o;14393:::-;14535:3;14556:67;14620:2;14615:3;14556:67;:::i;:::-;14549:74;;14632:93;14721:3;14632:93;:::i;:::-;14750:2;14745:3;14741:12;14734:19;;14393:366;;;:::o;14765:::-;14907:3;14928:67;14992:2;14987:3;14928:67;:::i;:::-;14921:74;;15004:93;15093:3;15004:93;:::i;:::-;15122:2;15117:3;15113:12;15106:19;;14765:366;;;:::o;15137:::-;15279:3;15300:67;15364:2;15359:3;15300:67;:::i;:::-;15293:74;;15376:93;15465:3;15376:93;:::i;:::-;15494:2;15489:3;15485:12;15478:19;;15137:366;;;:::o;15509:398::-;15668:3;15689:83;15770:1;15765:3;15689:83;:::i;:::-;15682:90;;15781:93;15870:3;15781:93;:::i;:::-;15899:1;15894:3;15890:11;15883:18;;15509:398;;;:::o;15913:366::-;16055:3;16076:67;16140:2;16135:3;16076:67;:::i;:::-;16069:74;;16152:93;16241:3;16152:93;:::i;:::-;16270:2;16265:3;16261:12;16254:19;;15913:366;;;:::o;16285:108::-;16362:24;16380:5;16362:24;:::i;:::-;16357:3;16350:37;16285:108;;:::o;16399:118::-;16486:24;16504:5;16486:24;:::i;:::-;16481:3;16474:37;16399:118;;:::o;16523:589::-;16748:3;16770:95;16861:3;16852:6;16770:95;:::i;:::-;16763:102;;16882:95;16973:3;16964:6;16882:95;:::i;:::-;16875:102;;16994:92;17082:3;17073:6;16994:92;:::i;:::-;16987:99;;17103:3;17096:10;;16523:589;;;;;;:::o;17118:379::-;17302:3;17324:147;17467:3;17324:147;:::i;:::-;17317:154;;17488:3;17481:10;;17118:379;;;:::o;17503:222::-;17596:4;17634:2;17623:9;17619:18;17611:26;;17647:71;17715:1;17704:9;17700:17;17691:6;17647:71;:::i;:::-;17503:222;;;;:::o;17731:640::-;17926:4;17964:3;17953:9;17949:19;17941:27;;17978:71;18046:1;18035:9;18031:17;18022:6;17978:71;:::i;:::-;18059:72;18127:2;18116:9;18112:18;18103:6;18059:72;:::i;:::-;18141;18209:2;18198:9;18194:18;18185:6;18141:72;:::i;:::-;18260:9;18254:4;18250:20;18245:2;18234:9;18230:18;18223:48;18288:76;18359:4;18350:6;18288:76;:::i;:::-;18280:84;;17731:640;;;;;;;:::o;18377:373::-;18520:4;18558:2;18547:9;18543:18;18535:26;;18607:9;18601:4;18597:20;18593:1;18582:9;18578:17;18571:47;18635:108;18738:4;18729:6;18635:108;:::i;:::-;18627:116;;18377:373;;;;:::o;18756:210::-;18843:4;18881:2;18870:9;18866:18;18858:26;;18894:65;18956:1;18945:9;18941:17;18932:6;18894:65;:::i;:::-;18756:210;;;;:::o;18972:313::-;19085:4;19123:2;19112:9;19108:18;19100:26;;19172:9;19166:4;19162:20;19158:1;19147:9;19143:17;19136:47;19200:78;19273:4;19264:6;19200:78;:::i;:::-;19192:86;;18972:313;;;;:::o;19291:419::-;19457:4;19495:2;19484:9;19480:18;19472:26;;19544:9;19538:4;19534:20;19530:1;19519:9;19515:17;19508:47;19572:131;19698:4;19572:131;:::i;:::-;19564:139;;19291:419;;;:::o;19716:::-;19882:4;19920:2;19909:9;19905:18;19897:26;;19969:9;19963:4;19959:20;19955:1;19944:9;19940:17;19933:47;19997:131;20123:4;19997:131;:::i;:::-;19989:139;;19716:419;;;:::o;20141:::-;20307:4;20345:2;20334:9;20330:18;20322:26;;20394:9;20388:4;20384:20;20380:1;20369:9;20365:17;20358:47;20422:131;20548:4;20422:131;:::i;:::-;20414:139;;20141:419;;;:::o;20566:::-;20732:4;20770:2;20759:9;20755:18;20747:26;;20819:9;20813:4;20809:20;20805:1;20794:9;20790:17;20783:47;20847:131;20973:4;20847:131;:::i;:::-;20839:139;;20566:419;;;:::o;20991:::-;21157:4;21195:2;21184:9;21180:18;21172:26;;21244:9;21238:4;21234:20;21230:1;21219:9;21215:17;21208:47;21272:131;21398:4;21272:131;:::i;:::-;21264:139;;20991:419;;;:::o;21416:::-;21582:4;21620:2;21609:9;21605:18;21597:26;;21669:9;21663:4;21659:20;21655:1;21644:9;21640:17;21633:47;21697:131;21823:4;21697:131;:::i;:::-;21689:139;;21416:419;;;:::o;21841:::-;22007:4;22045:2;22034:9;22030:18;22022:26;;22094:9;22088:4;22084:20;22080:1;22069:9;22065:17;22058:47;22122:131;22248:4;22122:131;:::i;:::-;22114:139;;21841:419;;;:::o;22266:::-;22432:4;22470:2;22459:9;22455:18;22447:26;;22519:9;22513:4;22509:20;22505:1;22494:9;22490:17;22483:47;22547:131;22673:4;22547:131;:::i;:::-;22539:139;;22266:419;;;:::o;22691:::-;22857:4;22895:2;22884:9;22880:18;22872:26;;22944:9;22938:4;22934:20;22930:1;22919:9;22915:17;22908:47;22972:131;23098:4;22972:131;:::i;:::-;22964:139;;22691:419;;;:::o;23116:::-;23282:4;23320:2;23309:9;23305:18;23297:26;;23369:9;23363:4;23359:20;23355:1;23344:9;23340:17;23333:47;23397:131;23523:4;23397:131;:::i;:::-;23389:139;;23116:419;;;:::o;23541:::-;23707:4;23745:2;23734:9;23730:18;23722:26;;23794:9;23788:4;23784:20;23780:1;23769:9;23765:17;23758:47;23822:131;23948:4;23822:131;:::i;:::-;23814:139;;23541:419;;;:::o;23966:::-;24132:4;24170:2;24159:9;24155:18;24147:26;;24219:9;24213:4;24209:20;24205:1;24194:9;24190:17;24183:47;24247:131;24373:4;24247:131;:::i;:::-;24239:139;;23966:419;;;:::o;24391:::-;24557:4;24595:2;24584:9;24580:18;24572:26;;24644:9;24638:4;24634:20;24630:1;24619:9;24615:17;24608:47;24672:131;24798:4;24672:131;:::i;:::-;24664:139;;24391:419;;;:::o;24816:::-;24982:4;25020:2;25009:9;25005:18;24997:26;;25069:9;25063:4;25059:20;25055:1;25044:9;25040:17;25033:47;25097:131;25223:4;25097:131;:::i;:::-;25089:139;;24816:419;;;:::o;25241:222::-;25334:4;25372:2;25361:9;25357:18;25349:26;;25385:71;25453:1;25442:9;25438:17;25429:6;25385:71;:::i;:::-;25241:222;;;;:::o;25469:129::-;25503:6;25530:20;;:::i;:::-;25520:30;;25559:33;25587:4;25579:6;25559:33;:::i;:::-;25469:129;;;:::o;25604:75::-;25637:6;25670:2;25664:9;25654:19;;25604:75;:::o;25685:307::-;25746:4;25836:18;25828:6;25825:30;25822:56;;;25858:18;;:::i;:::-;25822:56;25896:29;25918:6;25896:29;:::i;:::-;25888:37;;25980:4;25974;25970:15;25962:23;;25685:307;;;:::o;25998:308::-;26060:4;26150:18;26142:6;26139:30;26136:56;;;26172:18;;:::i;:::-;26136:56;26210:29;26232:6;26210:29;:::i;:::-;26202:37;;26294:4;26288;26284:15;26276:23;;25998:308;;;:::o;26312:132::-;26379:4;26402:3;26394:11;;26432:4;26427:3;26423:14;26415:22;;26312:132;;;:::o;26450:141::-;26499:4;26522:3;26514:11;;26545:3;26542:1;26535:14;26579:4;26576:1;26566:18;26558:26;;26450:141;;;:::o;26597:114::-;26664:6;26698:5;26692:12;26682:22;;26597:114;;;:::o;26717:98::-;26768:6;26802:5;26796:12;26786:22;;26717:98;;;:::o;26821:99::-;26873:6;26907:5;26901:12;26891:22;;26821:99;;;:::o;26926:113::-;26996:4;27028;27023:3;27019:14;27011:22;;26926:113;;;:::o;27045:184::-;27144:11;27178:6;27173:3;27166:19;27218:4;27213:3;27209:14;27194:29;;27045:184;;;;:::o;27235:168::-;27318:11;27352:6;27347:3;27340:19;27392:4;27387:3;27383:14;27368:29;;27235:168;;;;:::o;27409:147::-;27510:11;27547:3;27532:18;;27409:147;;;;:::o;27562:169::-;27646:11;27680:6;27675:3;27668:19;27720:4;27715:3;27711:14;27696:29;;27562:169;;;;:::o;27737:148::-;27839:11;27876:3;27861:18;;27737:148;;;;:::o;27891:305::-;27931:3;27950:20;27968:1;27950:20;:::i;:::-;27945:25;;27984:20;28002:1;27984:20;:::i;:::-;27979:25;;28138:1;28070:66;28066:74;28063:1;28060:81;28057:107;;;28144:18;;:::i;:::-;28057:107;28188:1;28185;28181:9;28174:16;;27891:305;;;;:::o;28202:185::-;28242:1;28259:20;28277:1;28259:20;:::i;:::-;28254:25;;28293:20;28311:1;28293:20;:::i;:::-;28288:25;;28332:1;28322:35;;28337:18;;:::i;:::-;28322:35;28379:1;28376;28372:9;28367:14;;28202:185;;;;:::o;28393:348::-;28433:7;28456:20;28474:1;28456:20;:::i;:::-;28451:25;;28490:20;28508:1;28490:20;:::i;:::-;28485:25;;28678:1;28610:66;28606:74;28603:1;28600:81;28595:1;28588:9;28581:17;28577:105;28574:131;;;28685:18;;:::i;:::-;28574:131;28733:1;28730;28726:9;28715:20;;28393:348;;;;:::o;28747:191::-;28787:4;28807:20;28825:1;28807:20;:::i;:::-;28802:25;;28841:20;28859:1;28841:20;:::i;:::-;28836:25;;28880:1;28877;28874:8;28871:34;;;28885:18;;:::i;:::-;28871:34;28930:1;28927;28923:9;28915:17;;28747:191;;;;:::o;28944:96::-;28981:7;29010:24;29028:5;29010:24;:::i;:::-;28999:35;;28944:96;;;:::o;29046:90::-;29080:7;29123:5;29116:13;29109:21;29098:32;;29046:90;;;:::o;29142:149::-;29178:7;29218:66;29211:5;29207:78;29196:89;;29142:149;;;:::o;29297:126::-;29334:7;29374:42;29367:5;29363:54;29352:65;;29297:126;;;:::o;29429:77::-;29466:7;29495:5;29484:16;;29429:77;;;:::o;29512:154::-;29596:6;29591:3;29586;29573:30;29658:1;29649:6;29644:3;29640:16;29633:27;29512:154;;;:::o;29672:307::-;29740:1;29750:113;29764:6;29761:1;29758:13;29750:113;;;29849:1;29844:3;29840:11;29834:18;29830:1;29825:3;29821:11;29814:39;29786:2;29783:1;29779:10;29774:15;;29750:113;;;29881:6;29878:1;29875:13;29872:101;;;29961:1;29952:6;29947:3;29943:16;29936:27;29872:101;29721:258;29672:307;;;:::o;29985:320::-;30029:6;30066:1;30060:4;30056:12;30046:22;;30113:1;30107:4;30103:12;30134:18;30124:81;;30190:4;30182:6;30178:17;30168:27;;30124:81;30252:2;30244:6;30241:14;30221:18;30218:38;30215:84;;;30271:18;;:::i;:::-;30215:84;30036:269;29985:320;;;:::o;30311:281::-;30394:27;30416:4;30394:27;:::i;:::-;30386:6;30382:40;30524:6;30512:10;30509:22;30488:18;30476:10;30473:34;30470:62;30467:88;;;30535:18;;:::i;:::-;30467:88;30575:10;30571:2;30564:22;30354:238;30311:281;;:::o;30598:233::-;30637:3;30660:24;30678:5;30660:24;:::i;:::-;30651:33;;30706:66;30699:5;30696:77;30693:103;;;30776:18;;:::i;:::-;30693:103;30823:1;30816:5;30812:13;30805:20;;30598:233;;;:::o;30837:180::-;30885:77;30882:1;30875:88;30982:4;30979:1;30972:15;31006:4;31003:1;30996:15;31023:180;31071:77;31068:1;31061:88;31168:4;31165:1;31158:15;31192:4;31189:1;31182:15;31209:180;31257:77;31254:1;31247:88;31354:4;31351:1;31344:15;31378:4;31375:1;31368:15;31395:180;31443:77;31440:1;31433:88;31540:4;31537:1;31530:15;31564:4;31561:1;31554:15;31581:180;31629:77;31626:1;31619:88;31726:4;31723:1;31716:15;31750:4;31747:1;31740:15;31767:117;31876:1;31873;31866:12;31890:117;31999:1;31996;31989:12;32013:117;32122:1;32119;32112:12;32136:117;32245:1;32242;32235:12;32259:102;32300:6;32351:2;32347:7;32342:2;32335:5;32331:14;32327:28;32317:38;;32259:102;;;:::o;32367:232::-;32507:34;32503:1;32495:6;32491:14;32484:58;32576:15;32571:2;32563:6;32559:15;32552:40;32367:232;:::o;32605:237::-;32745:34;32741:1;32733:6;32729:14;32722:58;32814:20;32809:2;32801:6;32797:15;32790:45;32605:237;:::o;32848:225::-;32988:34;32984:1;32976:6;32972:14;32965:58;33057:8;33052:2;33044:6;33040:15;33033:33;32848:225;:::o;33079:224::-;33219:34;33215:1;33207:6;33203:14;33196:58;33288:7;33283:2;33275:6;33271:15;33264:32;33079:224;:::o;33309:178::-;33449:30;33445:1;33437:6;33433:14;33426:54;33309:178;:::o;33493:223::-;33633:34;33629:1;33621:6;33617:14;33610:58;33702:6;33697:2;33689:6;33685:15;33678:31;33493:223;:::o;33722:175::-;33862:27;33858:1;33850:6;33846:14;33839:51;33722:175;:::o;33903:228::-;34043:34;34039:1;34031:6;34027:14;34020:58;34112:11;34107:2;34099:6;34095:15;34088:36;33903:228;:::o;34137:182::-;34277:34;34273:1;34265:6;34261:14;34254:58;34137:182;:::o;34325:::-;34465:34;34461:1;34453:6;34449:14;34442:58;34325:182;:::o;34513:234::-;34653:34;34649:1;34641:6;34637:14;34630:58;34722:17;34717:2;34709:6;34705:15;34698:42;34513:234;:::o;34753:174::-;34893:26;34889:1;34881:6;34877:14;34870:50;34753:174;:::o;34933:220::-;35073:34;35069:1;35061:6;35057:14;35050:58;35142:3;35137:2;35129:6;35125:15;35118:28;34933:220;:::o;35159:114::-;;:::o;35279:248::-;35419:34;35415:1;35407:6;35403:14;35396:58;35488:31;35483:2;35475:6;35471:15;35464:56;35279:248;:::o;35533:122::-;35606:24;35624:5;35606:24;:::i;:::-;35599:5;35596:35;35586:63;;35645:1;35642;35635:12;35586:63;35533:122;:::o;35661:116::-;35731:21;35746:5;35731:21;:::i;:::-;35724:5;35721:32;35711:60;;35767:1;35764;35757:12;35711:60;35661:116;:::o;35783:120::-;35855:23;35872:5;35855:23;:::i;:::-;35848:5;35845:34;35835:62;;35893:1;35890;35883:12;35835:62;35783:120;:::o;35909:122::-;35982:24;36000:5;35982:24;:::i;:::-;35975:5;35972:35;35962:63;;36021:1;36018;36011:12;35962:63;35909:122;:::o
Swarm Source
ipfs://1cec588e34e52c05d18c5faba5bed3b51ee2613efd7b6ded7e3feba0555387a7
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.