More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 121 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Safe Transfer Fr... | 15646852 | 818 days ago | IN | 0 ETH | 0.00101697 | ||||
Transfer From | 15100145 | 903 days ago | IN | 0 ETH | 0.00061353 | ||||
Transfer From | 15100143 | 903 days ago | IN | 0 ETH | 0.00070908 | ||||
Transfer From | 15100142 | 903 days ago | IN | 0 ETH | 0.00101136 | ||||
Set Approval For... | 15048116 | 911 days ago | IN | 0 ETH | 0.00228487 | ||||
Withdraw | 14879054 | 940 days ago | IN | 0 ETH | 0.00173616 | ||||
Transfer From | 14658455 | 976 days ago | IN | 0 ETH | 0.00191014 | ||||
Set Approval For... | 14562302 | 991 days ago | IN | 0 ETH | 0.00124717 | ||||
Set Approval For... | 14492355 | 1002 days ago | IN | 0 ETH | 0.00094542 | ||||
Set Approval For... | 14492295 | 1002 days ago | IN | 0 ETH | 0.00080373 | ||||
Set Approval For... | 14414538 | 1014 days ago | IN | 0 ETH | 0.00142259 | ||||
Mint | 14414320 | 1014 days ago | IN | 0.1 ETH | 0.00273248 | ||||
Mint Gift As Own... | 14410867 | 1014 days ago | IN | 0 ETH | 0.00415249 | ||||
Mint Gift As Own... | 14410866 | 1014 days ago | IN | 0 ETH | 0.00370566 | ||||
Mint Gift As Own... | 14410866 | 1014 days ago | IN | 0 ETH | 0.00370566 | ||||
Mint Gift As Own... | 14410865 | 1014 days ago | IN | 0 ETH | 0.0035379 | ||||
Mint Gift As Own... | 14410863 | 1014 days ago | IN | 0 ETH | 0.00315075 | ||||
Mint Gift As Own... | 14410858 | 1014 days ago | IN | 0 ETH | 0.00369136 | ||||
Mint Gift As Own... | 14410855 | 1014 days ago | IN | 0 ETH | 0.00259014 | ||||
Mint Gift As Own... | 14410854 | 1014 days ago | IN | 0 ETH | 0.00234413 | ||||
Mint Gift As Own... | 14410853 | 1014 days ago | IN | 0 ETH | 0.00209818 | ||||
Safe Transfer Fr... | 14394489 | 1017 days ago | IN | 0 ETH | 0.00186017 | ||||
Safe Transfer Fr... | 14394232 | 1017 days ago | IN | 0 ETH | 0.00223399 | ||||
Set Approval For... | 14358669 | 1023 days ago | IN | 0 ETH | 0.00103499 | ||||
Mint Gift As Own... | 14291104 | 1033 days ago | IN | 0 ETH | 0.00402195 |
Latest 1 internal transaction
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|
14879054 | 940 days ago | 5.95 ETH |
Loading...
Loading
Contract Name:
Cryptopumps
Compiler Version
v0.8.4+commit.c7e474f2
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-02-07 */ // 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/Strings.sol // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/contracts/utils/cryptography/ECDSA.sol // OpenZeppelin Contracts v4.4.1 (utils/cryptography/ECDSA.sol) pragma solidity ^0.8.0; /** * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations. * * These functions can be used to verify that a message was signed by the holder * of the private keys of a given address. */ library ECDSA { enum RecoverError { NoError, InvalidSignature, InvalidSignatureLength, InvalidSignatureS, InvalidSignatureV } function _throwError(RecoverError error) private pure { if (error == RecoverError.NoError) { return; // no error: do nothing } else if (error == RecoverError.InvalidSignature) { revert("ECDSA: invalid signature"); } else if (error == RecoverError.InvalidSignatureLength) { revert("ECDSA: invalid signature length"); } else if (error == RecoverError.InvalidSignatureS) { revert("ECDSA: invalid signature 's' value"); } else if (error == RecoverError.InvalidSignatureV) { revert("ECDSA: invalid signature 'v' value"); } } /** * @dev Returns the address that signed a hashed message (`hash`) with * `signature` or error string. This address can then be used for verification purposes. * * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures: * this function rejects them by requiring the `s` value to be in the lower * half order, and the `v` value to be either 27 or 28. * * IMPORTANT: `hash` _must_ be the result of a hash operation for the * verification to be secure: it is possible to craft signatures that * recover to arbitrary addresses for non-hashed data. A safe way to ensure * this is by receiving a hash of the original message (which may otherwise * be too long), and then calling {toEthSignedMessageHash} on it. * * Documentation for signature generation: * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js] * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers] * * _Available since v4.3._ */ function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) { // Check the signature length // - case 65: r,s,v signature (standard) // - case 64: r,vs signature (cf https://eips.ethereum.org/EIPS/eip-2098) _Available since v4.1._ if (signature.length == 65) { bytes32 r; bytes32 s; uint8 v; // ecrecover takes the signature parameters, and the only way to get them // currently is to use assembly. assembly { r := mload(add(signature, 0x20)) s := mload(add(signature, 0x40)) v := byte(0, mload(add(signature, 0x60))) } return tryRecover(hash, v, r, s); } else if (signature.length == 64) { bytes32 r; bytes32 vs; // ecrecover takes the signature parameters, and the only way to get them // currently is to use assembly. assembly { r := mload(add(signature, 0x20)) vs := mload(add(signature, 0x40)) } return tryRecover(hash, r, vs); } else { return (address(0), RecoverError.InvalidSignatureLength); } } /** * @dev Returns the address that signed a hashed message (`hash`) with * `signature`. This address can then be used for verification purposes. * * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures: * this function rejects them by requiring the `s` value to be in the lower * half order, and the `v` value to be either 27 or 28. * * IMPORTANT: `hash` _must_ be the result of a hash operation for the * verification to be secure: it is possible to craft signatures that * recover to arbitrary addresses for non-hashed data. A safe way to ensure * this is by receiving a hash of the original message (which may otherwise * be too long), and then calling {toEthSignedMessageHash} on it. */ function recover(bytes32 hash, bytes memory signature) internal pure returns (address) { (address recovered, RecoverError error) = tryRecover(hash, signature); _throwError(error); return recovered; } /** * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately. * * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures] * * _Available since v4.3._ */ function tryRecover( bytes32 hash, bytes32 r, bytes32 vs ) internal pure returns (address, RecoverError) { bytes32 s; uint8 v; assembly { s := and(vs, 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) v := add(shr(255, vs), 27) } return tryRecover(hash, v, r, s); } /** * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately. * * _Available since v4.2._ */ function recover( bytes32 hash, bytes32 r, bytes32 vs ) internal pure returns (address) { (address recovered, RecoverError error) = tryRecover(hash, r, vs); _throwError(error); return recovered; } /** * @dev Overload of {ECDSA-tryRecover} that receives the `v`, * `r` and `s` signature fields separately. * * _Available since v4.3._ */ function tryRecover( bytes32 hash, uint8 v, bytes32 r, bytes32 s ) internal pure returns (address, RecoverError) { // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines // the valid range for s in (301): 0 < s < secp256k1n ÷ 2 + 1, and for v in (302): v ∈ {27, 28}. Most // signatures from current libraries generate a unique signature with an s-value in the lower half order. // // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept // these malleable signatures as well. if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) { return (address(0), RecoverError.InvalidSignatureS); } if (v != 27 && v != 28) { return (address(0), RecoverError.InvalidSignatureV); } // If the signature is valid (and not malleable), return the signer address address signer = ecrecover(hash, v, r, s); if (signer == address(0)) { return (address(0), RecoverError.InvalidSignature); } return (signer, RecoverError.NoError); } /** * @dev Overload of {ECDSA-recover} that receives the `v`, * `r` and `s` signature fields separately. */ function recover( bytes32 hash, uint8 v, bytes32 r, bytes32 s ) internal pure returns (address) { (address recovered, RecoverError error) = tryRecover(hash, v, r, s); _throwError(error); return recovered; } /** * @dev Returns an Ethereum Signed Message, created from a `hash`. This * produces hash corresponding to the one signed with the * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`] * JSON-RPC method as part of EIP-191. * * See {recover}. */ function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) { // 32 is the length in bytes of hash, // enforced by the type signature above return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", hash)); } /** * @dev Returns an Ethereum Signed Message, created from `s`. This * produces hash corresponding to the one signed with the * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`] * JSON-RPC method as part of EIP-191. * * See {recover}. */ function toEthSignedMessageHash(bytes memory s) internal pure returns (bytes32) { return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n", Strings.toString(s.length), s)); } /** * @dev Returns an Ethereum Signed Typed Data, created from a * `domainSeparator` and a `structHash`. This produces hash corresponding * to the one signed with the * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`] * JSON-RPC method as part of EIP-712. * * See {recover}. */ function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32) { return keccak256(abi.encodePacked("\x19\x01", domainSeparator, structHash)); } } // 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 v4.4.1 (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 Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts v4.4.1 (utils/Address.sol) pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // 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 v4.4.1 (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } // File: @openzeppelin/contracts/token/ERC721/extensions/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 v4.4.1 (token/ERC721/ERC721.sol) pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits a {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC721: approve to caller"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File: contracts/NFT.sol pragma solidity ^0.8.0; contract Cryptopumps is ERC721, Ownable { using Strings for uint256; using Counters for Counters.Counter; uint256 public NFT_MAX_SUPPLY = 8888; uint256 public NFT_PRICE = 0.05 ether; uint256 public NFTS_PER_MINT = 10; string private _contractURI; string private _tokenBaseURI; string public _mysteryURI; uint256 public currentBalance = address(this).balance; address private withdrawAddress = 0xcA1Aa204A9200e2CbB49AF9bc66b84da0f298132; bool public revealed = false; bool public saleLive = false; bool public giftLive = false; Counters.Counter private supply; constructor() ERC721("CRYPTOPUMPS", "PUMPS") { _tokenBaseURI = "ipfs://QmZKcba9WEWuUh7JUsKsJX16MhcFMdH1qi6ja8KrtXoJia/"; _mysteryURI = "ipfs://QmcPU8CBoYQbdGo3dSRTk5BGbPARcts39WKthiBXaH1PK9/"; } modifier mintCompliance(uint256 _mintAmount) { require(supply.current() < NFT_MAX_SUPPLY, "OUT_OF_STOCK"); require( supply.current() + _mintAmount <= NFT_MAX_SUPPLY, "EXCEED_STOCK" ); require(_mintAmount <= NFTS_PER_MINT, "EXCEED_NFTS_PER_MINT"); _; } function mintGiftAsOwner(uint256 tokenQuantity, address wallet) external onlyOwner mintCompliance(tokenQuantity) { require(giftLive, "GIFTING_CLOSED"); _mintLoop(wallet, tokenQuantity); } function mint(uint256 tokenQuantity) external payable mintCompliance(tokenQuantity) { require(saleLive, "SALE_CLOSED"); require(msg.value >= NFT_PRICE * tokenQuantity, "INSUFFICIENT_ETH"); require(msg.sender != owner(), "Owner can not mint an NFT"); _mintLoop(msg.sender, tokenQuantity); } function _mintLoop(address _receiver, uint256 _mintAmount) internal { for (uint256 i = 0; i < _mintAmount; i++) { supply.increment(); _safeMint(_receiver, supply.current()); } } function totalSupply() public view returns (uint256) { return supply.current(); } function withdraw() external onlyOwner { // payable(owner()).transfer(currentBalance); (bool os, ) = payable(withdrawAddress).call{ value: address(this).balance }(""); require(os); } function toggleSaleStatus() external onlyOwner { saleLive = !saleLive; } function toggleSaleGiftStatus() external onlyOwner { giftLive = !giftLive; } function toggleReveal() public onlyOwner { revealed = !revealed; } function setNftsPerMint(uint quantity) public onlyOwner { NFTS_PER_MINT = quantity; } function setMysteryURI(string calldata URI) public onlyOwner { _mysteryURI = URI; } function contractBalance() public view returns (uint256) { return address(this).balance; } function setPriceOfNFT(uint256 price) external onlyOwner { // 70000000000000000 = .07 eth NFT_PRICE = price; } function setNFTMax(uint256 max) external onlyOwner { NFT_MAX_SUPPLY = max; } function setContractURI(string calldata URI) external onlyOwner { _contractURI = URI; } function setBaseURI(string calldata URI) external onlyOwner { _tokenBaseURI = URI; } function contractURI() public view returns (string memory) { return _contractURI; } function tokenURI(uint256 tokenId) public view override(ERC721) returns (string memory) { require(_exists(tokenId), "Cannot query non-existent token"); if (revealed == false) { return _mysteryURI; } return string( abi.encodePacked(_tokenBaseURI, tokenId.toString(), ".json") ); } function fromBoolToString(bool _data) public pure returns (string memory) { if (_data == true) { return "true"; } else { return "false"; } } function getContractValuesInObject() public view returns (string memory) { return string( bytes( abi.encodePacked( '{"saleLive":"', fromBoolToString(saleLive), '", "revealed":"', fromBoolToString(revealed), '", "giftLive":"', fromBoolToString(giftLive), '", "Supply":"', currentSupply(), '", "mysteryURI":"', _mysteryURI, '", "currentBalance":"', currentBalance, '","NFT_PRICE":"', NFT_PRICE.toString(), '", "NFT_MAX_SUPPLY":"', NFT_MAX_SUPPLY.toString(), '", "NFTS_PER_MINT":"', NFTS_PER_MINT.toString(), '" }' ) ) ); } function currentSupply() public view returns (string memory) { return supply.current().toString(); } }
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":[],"name":"NFTS_PER_MINT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"NFT_MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"NFT_PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_mysteryURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentSupply","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_data","type":"bool"}],"name":"fromBoolToString","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getContractValuesInObject","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"giftLive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenQuantity","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenQuantity","type":"uint256"},{"internalType":"address","name":"wallet","type":"address"}],"name":"mintGiftAsOwner","outputs":[],"stateMutability":"nonpayable","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":"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":[],"name":"saleLive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"URI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"URI","type":"string"}],"name":"setContractURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"URI","type":"string"}],"name":"setMysteryURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"max","type":"uint256"}],"name":"setNFTMax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"setNftsPerMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"price","type":"uint256"}],"name":"setPriceOfNFT","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":[],"name":"toggleReveal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"toggleSaleGiftStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"toggleSaleStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526122b860075566b1a2bc2ec50000600855600a60095547600d5573ca1aa204a9200e2cbb49af9bc66b84da0f298132600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600e60146101000a81548160ff0219169083151502179055506000600e60156101000a81548160ff0219169083151502179055506000600e60166101000a81548160ff021916908315150217905550348015620000d157600080fd5b506040518060400160405280600b81526020017f43525950544f50554d50530000000000000000000000000000000000000000008152506040518060400160405280600581526020017f50554d5053000000000000000000000000000000000000000000000000000000815250816000908051906020019062000156929190620002ca565b5080600190805190602001906200016f929190620002ca565b5050506200019262000186620001fc60201b60201c565b6200020460201b60201c565b60405180606001604052806036815260200162004c8460369139600b9080519060200190620001c3929190620002ca565b5060405180606001604052806036815260200162004cba60369139600c9080519060200190620001f5929190620002ca565b50620003df565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620002d8906200037a565b90600052602060002090601f016020900481019282620002fc576000855562000348565b82601f106200031757805160ff191683800117855562000348565b8280016001018555821562000348579182015b82811115620003475782518255916020019190600101906200032a565b5b5090506200035791906200035b565b5090565b5b80821115620003765760008160009055506001016200035c565b5090565b600060028204905060018216806200039357607f821691505b60208210811415620003aa57620003a9620003b0565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b61489580620003ef6000396000f3fe6080604052600436106102515760003560e01c8063715018a611610139578063b88d4fde116100b6578063e423a5111161007a578063e423a51114610847578063e72be68a14610870578063e8a3d48514610899578063e985e9c5146108c4578063f2fde38b14610901578063fcb93c211461092a57610251565b8063b88d4fde14610774578063c87b56dd1461079d578063cb908cce146107da578063ce845d1d146107f1578063e081b7811461081c57610251565b8063938e3d7b116100fd578063938e3d7b146106b057806395d89b41146106d9578063a0712d6814610704578063a22cb46514610720578063a4f8eaeb1461074957610251565b8063715018a6146105ed57806372bfb1af14610604578063771282f61461062f5780638b7afe2e1461065a5780638da5cb5b1461068557610251565b80633cac3505116101d257806355f804b31161019657806355f804b3146104df5780635b0c52fd146105085780635b8ad429146105315780636352211e14610548578063676dd5631461058557806370a08231146105b057610251565b80633cac35051461040e5780633ccfd60b1461043757806342842e0e1461044e5780634e9920aa1461047757806351830227146104b457610251565b806318160ddd1161021957806318160ddd1461033b5780631bd98e721461036657806323b872dd1461038f5780632b241e1b146103b85780632cff9e06146103e357610251565b806301ffc9a714610256578063049c5c491461029357806306fdde03146102aa578063081812fc146102d5578063095ea7b314610312575b600080fd5b34801561026257600080fd5b5061027d600480360381019061027891906130b5565b610955565b60405161028a919061397c565b60405180910390f35b34801561029f57600080fd5b506102a8610a37565b005b3480156102b657600080fd5b506102bf610adf565b6040516102cc9190613997565b60405180910390f35b3480156102e157600080fd5b506102fc60048036038101906102f7919061314c565b610b71565b6040516103099190613915565b60405180910390f35b34801561031e57600080fd5b5061033960048036038101906103349190613050565b610bf6565b005b34801561034757600080fd5b50610350610d0e565b60405161035d9190613c99565b60405180910390f35b34801561037257600080fd5b5061038d60048036038101906103889190613175565b610d1f565b005b34801561039b57600080fd5b506103b660048036038101906103b19190612f4a565b610ee5565b005b3480156103c457600080fd5b506103cd610f45565b6040516103da9190613c99565b60405180910390f35b3480156103ef57600080fd5b506103f8610f4b565b604051610405919061397c565b60405180910390f35b34801561041a57600080fd5b506104356004803603810190610430919061314c565b610f5e565b005b34801561044357600080fd5b5061044c610fe4565b005b34801561045a57600080fd5b5061047560048036038101906104709190612f4a565b6110fb565b005b34801561048357600080fd5b5061049e6004803603810190610499919061308c565b61111b565b6040516104ab9190613997565b60405180910390f35b3480156104c057600080fd5b506104c96111a5565b6040516104d6919061397c565b60405180910390f35b3480156104eb57600080fd5b5061050660048036038101906105019190613107565b6111b8565b005b34801561051457600080fd5b5061052f600480360381019061052a919061314c565b61124a565b005b34801561053d57600080fd5b506105466112d0565b005b34801561055457600080fd5b5061056f600480360381019061056a919061314c565b611378565b60405161057c9190613915565b60405180910390f35b34801561059157600080fd5b5061059a61142a565b6040516105a79190613c99565b60405180910390f35b3480156105bc57600080fd5b506105d760048036038101906105d29190612ee5565b611430565b6040516105e49190613c99565b60405180910390f35b3480156105f957600080fd5b506106026114e8565b005b34801561061057600080fd5b50610619611570565b6040516106269190613c99565b60405180910390f35b34801561063b57600080fd5b50610644611576565b6040516106519190613997565b60405180910390f35b34801561066657600080fd5b5061066f61158f565b60405161067c9190613c99565b60405180910390f35b34801561069157600080fd5b5061069a611597565b6040516106a79190613915565b60405180910390f35b3480156106bc57600080fd5b506106d760048036038101906106d29190613107565b6115c1565b005b3480156106e557600080fd5b506106ee611653565b6040516106fb9190613997565b60405180910390f35b61071e6004803603810190610719919061314c565b6116e5565b005b34801561072c57600080fd5b5061074760048036038101906107429190613014565b6118f4565b005b34801561075557600080fd5b5061075e61190a565b60405161076b9190613997565b60405180910390f35b34801561078057600080fd5b5061079b60048036038101906107969190612f99565b611998565b005b3480156107a957600080fd5b506107c460048036038101906107bf919061314c565b6119fa565b6040516107d19190613997565b60405180910390f35b3480156107e657600080fd5b506107ef611b25565b005b3480156107fd57600080fd5b50610806611bcd565b6040516108139190613c99565b60405180910390f35b34801561082857600080fd5b50610831611bd3565b60405161083e919061397c565b60405180910390f35b34801561085357600080fd5b5061086e6004803603810190610869919061314c565b611be6565b005b34801561087c57600080fd5b5061089760048036038101906108929190613107565b611c6c565b005b3480156108a557600080fd5b506108ae611cfe565b6040516108bb9190613997565b60405180910390f35b3480156108d057600080fd5b506108eb60048036038101906108e69190612f0e565b611d90565b6040516108f8919061397c565b60405180910390f35b34801561090d57600080fd5b5061092860048036038101906109239190612ee5565b611e24565b005b34801561093657600080fd5b5061093f611f1c565b60405161094c9190613997565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a2057507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a305750610a2f82611fc0565b5b9050919050565b610a3f61202a565b73ffffffffffffffffffffffffffffffffffffffff16610a5d611597565b73ffffffffffffffffffffffffffffffffffffffff1614610ab3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aaa90613b79565b60405180910390fd5b600e60159054906101000a900460ff1615600e60156101000a81548160ff021916908315150217905550565b606060008054610aee90613f38565b80601f0160208091040260200160405190810160405280929190818152602001828054610b1a90613f38565b8015610b675780601f10610b3c57610100808354040283529160200191610b67565b820191906000526020600020905b815481529060010190602001808311610b4a57829003601f168201915b5050505050905090565b6000610b7c82612032565b610bbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb290613b59565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610c0182611378565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6990613bd9565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c9161202a565b73ffffffffffffffffffffffffffffffffffffffff161480610cc05750610cbf81610cba61202a565b611d90565b5b610cff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf690613ad9565b60405180910390fd5b610d09838361209e565b505050565b6000610d1a600f612157565b905090565b610d2761202a565b73ffffffffffffffffffffffffffffffffffffffff16610d45611597565b73ffffffffffffffffffffffffffffffffffffffff1614610d9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9290613b79565b60405180910390fd5b81600754610da9600f612157565b10610de9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de090613a79565b60405180910390fd5b60075481610df7600f612157565b610e019190613d6d565b1115610e42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e39906139f9565b60405180910390fd5b600954811115610e87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7e90613c39565b60405180910390fd5b600e60169054906101000a900460ff16610ed6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ecd90613c79565b60405180910390fd5b610ee08284612165565b505050565b610ef6610ef061202a565b826121a5565b610f35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2c90613c19565b60405180910390fd5b610f40838383612283565b505050565b60075481565b600e60169054906101000a900460ff1681565b610f6661202a565b73ffffffffffffffffffffffffffffffffffffffff16610f84611597565b73ffffffffffffffffffffffffffffffffffffffff1614610fda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd190613b79565b60405180910390fd5b8060098190555050565b610fec61202a565b73ffffffffffffffffffffffffffffffffffffffff1661100a611597565b73ffffffffffffffffffffffffffffffffffffffff1614611060576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105790613b79565b60405180910390fd5b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516110a890613900565b60006040518083038185875af1925050503d80600081146110e5576040519150601f19603f3d011682016040523d82523d6000602084013e6110ea565b606091505b50509050806110f857600080fd5b50565b61111683838360405180602001604052806000815250611998565b505050565b6060600115158215151415611167576040518060400160405280600481526020017f747275650000000000000000000000000000000000000000000000000000000081525090506111a0565b6040518060400160405280600581526020017f66616c736500000000000000000000000000000000000000000000000000000081525090505b919050565b600e60149054906101000a900460ff1681565b6111c061202a565b73ffffffffffffffffffffffffffffffffffffffff166111de611597565b73ffffffffffffffffffffffffffffffffffffffff1614611234576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122b90613b79565b60405180910390fd5b8181600b9190611245929190612d27565b505050565b61125261202a565b73ffffffffffffffffffffffffffffffffffffffff16611270611597565b73ffffffffffffffffffffffffffffffffffffffff16146112c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112bd90613b79565b60405180910390fd5b8060078190555050565b6112d861202a565b73ffffffffffffffffffffffffffffffffffffffff166112f6611597565b73ffffffffffffffffffffffffffffffffffffffff161461134c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134390613b79565b60405180910390fd5b600e60149054906101000a900460ff1615600e60146101000a81548160ff021916908315150217905550565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611421576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141890613b19565b60405180910390fd5b80915050919050565b60085481565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156114a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149890613af9565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6114f061202a565b73ffffffffffffffffffffffffffffffffffffffff1661150e611597565b73ffffffffffffffffffffffffffffffffffffffff1614611564576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155b90613b79565b60405180910390fd5b61156e60006124df565b565b60095481565b606061158a611585600f612157565b6125a5565b905090565b600047905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6115c961202a565b73ffffffffffffffffffffffffffffffffffffffff166115e7611597565b73ffffffffffffffffffffffffffffffffffffffff161461163d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163490613b79565b60405180910390fd5b8181600a919061164e929190612d27565b505050565b60606001805461166290613f38565b80601f016020809104026020016040519081016040528092919081815260200182805461168e90613f38565b80156116db5780601f106116b0576101008083540402835291602001916116db565b820191906000526020600020905b8154815290600101906020018083116116be57829003601f168201915b5050505050905090565b806007546116f3600f612157565b10611733576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172a90613a79565b60405180910390fd5b60075481611741600f612157565b61174b9190613d6d565b111561178c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611783906139f9565b60405180910390fd5b6009548111156117d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c890613c39565b60405180910390fd5b600e60159054906101000a900460ff16611820576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181790613a99565b60405180910390fd5b8160085461182e9190613df4565b341015611870576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186790613c59565b60405180910390fd5b611878611597565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156118e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118dd90613bf9565b60405180910390fd5b6118f03383612165565b5050565b6119066118ff61202a565b8383612752565b5050565b600c805461191790613f38565b80601f016020809104026020016040519081016040528092919081815260200182805461194390613f38565b80156119905780601f1061196557610100808354040283529160200191611990565b820191906000526020600020905b81548152906001019060200180831161197357829003601f168201915b505050505081565b6119a96119a361202a565b836121a5565b6119e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119df90613c19565b60405180910390fd5b6119f4848484846128bf565b50505050565b6060611a0582612032565b611a44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3b90613bb9565b60405180910390fd5b60001515600e60149054906101000a900460ff1615151415611af257600c8054611a6d90613f38565b80601f0160208091040260200160405190810160405280929190818152602001828054611a9990613f38565b8015611ae65780601f10611abb57610100808354040283529160200191611ae6565b820191906000526020600020905b815481529060010190602001808311611ac957829003601f168201915b50505050509050611b20565b600b611afd836125a5565b604051602001611b0e9291906137e0565b60405160208183030381529060405290505b919050565b611b2d61202a565b73ffffffffffffffffffffffffffffffffffffffff16611b4b611597565b73ffffffffffffffffffffffffffffffffffffffff1614611ba1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9890613b79565b60405180910390fd5b600e60169054906101000a900460ff1615600e60166101000a81548160ff021916908315150217905550565b600d5481565b600e60159054906101000a900460ff1681565b611bee61202a565b73ffffffffffffffffffffffffffffffffffffffff16611c0c611597565b73ffffffffffffffffffffffffffffffffffffffff1614611c62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5990613b79565b60405180910390fd5b8060088190555050565b611c7461202a565b73ffffffffffffffffffffffffffffffffffffffff16611c92611597565b73ffffffffffffffffffffffffffffffffffffffff1614611ce8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cdf90613b79565b60405180910390fd5b8181600c9190611cf9929190612d27565b505050565b6060600a8054611d0d90613f38565b80601f0160208091040260200160405190810160405280929190818152602001828054611d3990613f38565b8015611d865780601f10611d5b57610100808354040283529160200191611d86565b820191906000526020600020905b815481529060010190602001808311611d6957829003601f168201915b5050505050905090565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611e2c61202a565b73ffffffffffffffffffffffffffffffffffffffff16611e4a611597565b73ffffffffffffffffffffffffffffffffffffffff1614611ea0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9790613b79565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611f10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f07906139d9565b60405180910390fd5b611f19816124df565b50565b6060611f36600e60159054906101000a900460ff1661111b565b611f4e600e60149054906101000a900460ff1661111b565b611f66600e60169054906101000a900460ff1661111b565b611f6e611576565b600c600d54611f7e6008546125a5565b611f896007546125a5565b611f946009546125a5565b604051602001611fac9998979695949392919061380f565b604051602081830303815290604052905090565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661211183611378565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600081600001549050919050565b60005b818110156121a05761217a600f61291b565b61218d83612188600f612157565b612931565b808061219890613f9b565b915050612168565b505050565b60006121b082612032565b6121ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121e690613ab9565b60405180910390fd5b60006121fa83611378565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061226957508373ffffffffffffffffffffffffffffffffffffffff1661225184610b71565b73ffffffffffffffffffffffffffffffffffffffff16145b8061227a57506122798185611d90565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166122a382611378565b73ffffffffffffffffffffffffffffffffffffffff16146122f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122f090613b99565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612369576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236090613a39565b60405180910390fd5b61237483838361294f565b61237f60008261209e565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546123cf9190613e4e565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124269190613d6d565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b606060008214156125ed576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061274d565b600082905060005b6000821461261f57808061260890613f9b565b915050600a826126189190613dc3565b91506125f5565b60008167ffffffffffffffff811115612661577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156126935781602001600182028036833780820191505090505b5090505b60008514612746576001826126ac9190613e4e565b9150600a856126bb9190613fee565b60306126c79190613d6d565b60f81b818381518110612703577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561273f9190613dc3565b9450612697565b8093505050505b919050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156127c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127b890613a59565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516128b2919061397c565b60405180910390a3505050565b6128ca848484612283565b6128d684848484612954565b612915576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161290c906139b9565b60405180910390fd5b50505050565b6001816000016000828254019250508190555050565b61294b828260405180602001604052806000815250612aeb565b5050565b505050565b60006129758473ffffffffffffffffffffffffffffffffffffffff16612b46565b15612ade578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261299e61202a565b8786866040518563ffffffff1660e01b81526004016129c09493929190613930565b602060405180830381600087803b1580156129da57600080fd5b505af1925050508015612a0b57506040513d601f19601f82011682018060405250810190612a0891906130de565b60015b612a8e573d8060008114612a3b576040519150601f19603f3d011682016040523d82523d6000602084013e612a40565b606091505b50600081511415612a86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a7d906139b9565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612ae3565b600190505b949350505050565b612af58383612b59565b612b026000848484612954565b612b41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b38906139b9565b60405180910390fd5b505050565b600080823b905060008111915050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612bc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bc090613b39565b60405180910390fd5b612bd281612032565b15612c12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c0990613a19565b60405180910390fd5b612c1e6000838361294f565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612c6e9190613d6d565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b828054612d3390613f38565b90600052602060002090601f016020900481019282612d555760008555612d9c565b82601f10612d6e57803560ff1916838001178555612d9c565b82800160010185558215612d9c579182015b82811115612d9b578235825591602001919060010190612d80565b5b509050612da99190612dad565b5090565b5b80821115612dc6576000816000905550600101612dae565b5090565b6000612ddd612dd884613cd9565b613cb4565b905082815260208101848484011115612df557600080fd5b612e00848285613ef6565b509392505050565b600081359050612e1781614803565b92915050565b600081359050612e2c8161481a565b92915050565b600081359050612e4181614831565b92915050565b600081519050612e5681614831565b92915050565b600082601f830112612e6d57600080fd5b8135612e7d848260208601612dca565b91505092915050565b60008083601f840112612e9857600080fd5b8235905067ffffffffffffffff811115612eb157600080fd5b602083019150836001820283011115612ec957600080fd5b9250929050565b600081359050612edf81614848565b92915050565b600060208284031215612ef757600080fd5b6000612f0584828501612e08565b91505092915050565b60008060408385031215612f2157600080fd5b6000612f2f85828601612e08565b9250506020612f4085828601612e08565b9150509250929050565b600080600060608486031215612f5f57600080fd5b6000612f6d86828701612e08565b9350506020612f7e86828701612e08565b9250506040612f8f86828701612ed0565b9150509250925092565b60008060008060808587031215612faf57600080fd5b6000612fbd87828801612e08565b9450506020612fce87828801612e08565b9350506040612fdf87828801612ed0565b925050606085013567ffffffffffffffff811115612ffc57600080fd5b61300887828801612e5c565b91505092959194509250565b6000806040838503121561302757600080fd5b600061303585828601612e08565b925050602061304685828601612e1d565b9150509250929050565b6000806040838503121561306357600080fd5b600061307185828601612e08565b925050602061308285828601612ed0565b9150509250929050565b60006020828403121561309e57600080fd5b60006130ac84828501612e1d565b91505092915050565b6000602082840312156130c757600080fd5b60006130d584828501612e32565b91505092915050565b6000602082840312156130f057600080fd5b60006130fe84828501612e47565b91505092915050565b6000806020838503121561311a57600080fd5b600083013567ffffffffffffffff81111561313457600080fd5b61314085828601612e86565b92509250509250929050565b60006020828403121561315e57600080fd5b600061316c84828501612ed0565b91505092915050565b6000806040838503121561318857600080fd5b600061319685828601612ed0565b92505060206131a785828601612e08565b9150509250929050565b6131ba81613e82565b82525050565b6131c981613e94565b82525050565b60006131da82613d1f565b6131e48185613d35565b93506131f4818560208601613f05565b6131fd816140db565b840191505092915050565b600061321382613d2a565b61321d8185613d51565b935061322d818560208601613f05565b613236816140db565b840191505092915050565b600061324c82613d2a565b6132568185613d62565b9350613266818560208601613f05565b80840191505092915050565b6000815461327f81613f38565b6132898186613d62565b945060018216600081146132a457600181146132b5576132e8565b60ff198316865281860193506132e8565b6132be85613d0a565b60005b838110156132e0578154818901526001820191506020810190506132c1565b838801955050505b50505092915050565b60006132fe601583613d62565b9150613309826140ec565b601582019050919050565b6000613321600d83613d62565b915061332c82614115565b600d82019050919050565b6000613344601483613d62565b915061334f8261413e565b601482019050919050565b6000613367603283613d51565b915061337282614167565b604082019050919050565b600061338a602683613d51565b9150613395826141b6565b604082019050919050565b60006133ad600c83613d51565b91506133b882614205565b602082019050919050565b60006133d0601c83613d51565b91506133db8261422e565b602082019050919050565b60006133f3600d83613d62565b91506133fe82614257565b600d82019050919050565b6000613416602483613d51565b915061342182614280565b604082019050919050565b6000613439601983613d51565b9150613444826142cf565b602082019050919050565b600061345c600c83613d51565b9150613467826142f8565b602082019050919050565b600061347f600383613d62565b915061348a82614321565b600382019050919050565b60006134a2600b83613d51565b91506134ad8261434a565b602082019050919050565b60006134c5602c83613d51565b91506134d082614373565b604082019050919050565b60006134e8600f83613d62565b91506134f3826143c2565b600f82019050919050565b600061350b600f83613d62565b9150613516826143eb565b600f82019050919050565b600061352e603883613d51565b915061353982614414565b604082019050919050565b6000613551602a83613d51565b915061355c82614463565b604082019050919050565b6000613574602983613d51565b915061357f826144b2565b604082019050919050565b6000613597602083613d51565b91506135a282614501565b602082019050919050565b60006135ba602c83613d51565b91506135c58261452a565b604082019050919050565b60006135dd600583613d62565b91506135e882614579565b600582019050919050565b6000613600602083613d51565b915061360b826145a2565b602082019050919050565b6000613623602983613d51565b915061362e826145cb565b604082019050919050565b6000613646601f83613d51565b91506136518261461a565b602082019050919050565b6000613669602183613d51565b915061367482614643565b604082019050919050565b600061368c601983613d51565b915061369782614692565b602082019050919050565b60006136af600083613d46565b91506136ba826146bb565b600082019050919050565b60006136d2603183613d51565b91506136dd826146be565b604082019050919050565b60006136f5600f83613d62565b91506137008261470d565b600f82019050919050565b6000613718601183613d62565b915061372382614736565b601182019050919050565b600061373b601583613d62565b91506137468261475f565b601582019050919050565b600061375e601483613d51565b915061376982614788565b602082019050919050565b6000613781601083613d51565b915061378c826147b1565b602082019050919050565b60006137a4600e83613d51565b91506137af826147da565b602082019050919050565b6137c381613eec565b82525050565b6137da6137d582613eec565b613fe4565b82525050565b60006137ec8285613272565b91506137f88284613241565b9150613803826135d0565b91508190509392505050565b600061381a826133e6565b9150613826828c613241565b9150613831826136e8565b915061383d828b613241565b9150613848826134db565b9150613854828a613241565b915061385f82613314565b915061386b8289613241565b91506138768261370b565b91506138828288613272565b915061388d826132f1565b915061389982876137c9565b6020820191506138a8826134fe565b91506138b48286613241565b91506138bf8261372e565b91506138cb8285613241565b91506138d682613337565b91506138e28284613241565b91506138ed82613472565b91508190509a9950505050505050505050565b600061390b826136a2565b9150819050919050565b600060208201905061392a60008301846131b1565b92915050565b600060808201905061394560008301876131b1565b61395260208301866131b1565b61395f60408301856137ba565b818103606083015261397181846131cf565b905095945050505050565b600060208201905061399160008301846131c0565b92915050565b600060208201905081810360008301526139b18184613208565b905092915050565b600060208201905081810360008301526139d28161335a565b9050919050565b600060208201905081810360008301526139f28161337d565b9050919050565b60006020820190508181036000830152613a12816133a0565b9050919050565b60006020820190508181036000830152613a32816133c3565b9050919050565b60006020820190508181036000830152613a5281613409565b9050919050565b60006020820190508181036000830152613a728161342c565b9050919050565b60006020820190508181036000830152613a928161344f565b9050919050565b60006020820190508181036000830152613ab281613495565b9050919050565b60006020820190508181036000830152613ad2816134b8565b9050919050565b60006020820190508181036000830152613af281613521565b9050919050565b60006020820190508181036000830152613b1281613544565b9050919050565b60006020820190508181036000830152613b3281613567565b9050919050565b60006020820190508181036000830152613b528161358a565b9050919050565b60006020820190508181036000830152613b72816135ad565b9050919050565b60006020820190508181036000830152613b92816135f3565b9050919050565b60006020820190508181036000830152613bb281613616565b9050919050565b60006020820190508181036000830152613bd281613639565b9050919050565b60006020820190508181036000830152613bf28161365c565b9050919050565b60006020820190508181036000830152613c128161367f565b9050919050565b60006020820190508181036000830152613c32816136c5565b9050919050565b60006020820190508181036000830152613c5281613751565b9050919050565b60006020820190508181036000830152613c7281613774565b9050919050565b60006020820190508181036000830152613c9281613797565b9050919050565b6000602082019050613cae60008301846137ba565b92915050565b6000613cbe613ccf565b9050613cca8282613f6a565b919050565b6000604051905090565b600067ffffffffffffffff821115613cf457613cf36140ac565b5b613cfd826140db565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000613d7882613eec565b9150613d8383613eec565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613db857613db761401f565b5b828201905092915050565b6000613dce82613eec565b9150613dd983613eec565b925082613de957613de861404e565b5b828204905092915050565b6000613dff82613eec565b9150613e0a83613eec565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613e4357613e4261401f565b5b828202905092915050565b6000613e5982613eec565b9150613e6483613eec565b925082821015613e7757613e7661401f565b5b828203905092915050565b6000613e8d82613ecc565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613f23578082015181840152602081019050613f08565b83811115613f32576000848401525b50505050565b60006002820490506001821680613f5057607f821691505b60208210811415613f6457613f6361407d565b5b50919050565b613f73826140db565b810181811067ffffffffffffffff82111715613f9257613f916140ac565b5b80604052505050565b6000613fa682613eec565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613fd957613fd861401f565b5b600182019050919050565b6000819050919050565b6000613ff982613eec565b915061400483613eec565b9250826140145761401361404e565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f222c202263757272656e7442616c616e6365223a220000000000000000000000600082015250565b7f222c2022537570706c79223a2200000000000000000000000000000000000000600082015250565b7f222c20224e4654535f5045525f4d494e54223a22000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4558434545445f53544f434b0000000000000000000000000000000000000000600082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f7b2273616c654c697665223a2200000000000000000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4f55545f4f465f53544f434b0000000000000000000000000000000000000000600082015250565b7f22207d0000000000000000000000000000000000000000000000000000000000600082015250565b7f53414c455f434c4f534544000000000000000000000000000000000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f222c2022676966744c697665223a220000000000000000000000000000000000600082015250565b7f222c224e46545f5052494345223a220000000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f43616e6e6f74207175657279206e6f6e2d6578697374656e7420746f6b656e00600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e65722063616e206e6f74206d696e7420616e204e465400000000000000600082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f222c202272657665616c6564223a220000000000000000000000000000000000600082015250565b7f222c20226d797374657279555249223a22000000000000000000000000000000600082015250565b7f222c20224e46545f4d41585f535550504c59223a220000000000000000000000600082015250565b7f4558434545445f4e4654535f5045525f4d494e54000000000000000000000000600082015250565b7f494e53554646494349454e545f45544800000000000000000000000000000000600082015250565b7f47494654494e475f434c4f534544000000000000000000000000000000000000600082015250565b61480c81613e82565b811461481757600080fd5b50565b61482381613e94565b811461482e57600080fd5b50565b61483a81613ea0565b811461484557600080fd5b50565b61485181613eec565b811461485c57600080fd5b5056fea264697066735822122054f70a700f9ab1927dc48f6d7b90f925bc8934ffa42cd9aa42300f56ea2530a464736f6c63430008040033697066733a2f2f516d5a4b63626139574557755568374a55734b734a5831364d6863464d6448317169366a61384b7274586f4a69612f697066733a2f2f516d6350553843426f59516264476f33645352546b354247625041526374733339574b7468694258614831504b392f
Deployed Bytecode
0x6080604052600436106102515760003560e01c8063715018a611610139578063b88d4fde116100b6578063e423a5111161007a578063e423a51114610847578063e72be68a14610870578063e8a3d48514610899578063e985e9c5146108c4578063f2fde38b14610901578063fcb93c211461092a57610251565b8063b88d4fde14610774578063c87b56dd1461079d578063cb908cce146107da578063ce845d1d146107f1578063e081b7811461081c57610251565b8063938e3d7b116100fd578063938e3d7b146106b057806395d89b41146106d9578063a0712d6814610704578063a22cb46514610720578063a4f8eaeb1461074957610251565b8063715018a6146105ed57806372bfb1af14610604578063771282f61461062f5780638b7afe2e1461065a5780638da5cb5b1461068557610251565b80633cac3505116101d257806355f804b31161019657806355f804b3146104df5780635b0c52fd146105085780635b8ad429146105315780636352211e14610548578063676dd5631461058557806370a08231146105b057610251565b80633cac35051461040e5780633ccfd60b1461043757806342842e0e1461044e5780634e9920aa1461047757806351830227146104b457610251565b806318160ddd1161021957806318160ddd1461033b5780631bd98e721461036657806323b872dd1461038f5780632b241e1b146103b85780632cff9e06146103e357610251565b806301ffc9a714610256578063049c5c491461029357806306fdde03146102aa578063081812fc146102d5578063095ea7b314610312575b600080fd5b34801561026257600080fd5b5061027d600480360381019061027891906130b5565b610955565b60405161028a919061397c565b60405180910390f35b34801561029f57600080fd5b506102a8610a37565b005b3480156102b657600080fd5b506102bf610adf565b6040516102cc9190613997565b60405180910390f35b3480156102e157600080fd5b506102fc60048036038101906102f7919061314c565b610b71565b6040516103099190613915565b60405180910390f35b34801561031e57600080fd5b5061033960048036038101906103349190613050565b610bf6565b005b34801561034757600080fd5b50610350610d0e565b60405161035d9190613c99565b60405180910390f35b34801561037257600080fd5b5061038d60048036038101906103889190613175565b610d1f565b005b34801561039b57600080fd5b506103b660048036038101906103b19190612f4a565b610ee5565b005b3480156103c457600080fd5b506103cd610f45565b6040516103da9190613c99565b60405180910390f35b3480156103ef57600080fd5b506103f8610f4b565b604051610405919061397c565b60405180910390f35b34801561041a57600080fd5b506104356004803603810190610430919061314c565b610f5e565b005b34801561044357600080fd5b5061044c610fe4565b005b34801561045a57600080fd5b5061047560048036038101906104709190612f4a565b6110fb565b005b34801561048357600080fd5b5061049e6004803603810190610499919061308c565b61111b565b6040516104ab9190613997565b60405180910390f35b3480156104c057600080fd5b506104c96111a5565b6040516104d6919061397c565b60405180910390f35b3480156104eb57600080fd5b5061050660048036038101906105019190613107565b6111b8565b005b34801561051457600080fd5b5061052f600480360381019061052a919061314c565b61124a565b005b34801561053d57600080fd5b506105466112d0565b005b34801561055457600080fd5b5061056f600480360381019061056a919061314c565b611378565b60405161057c9190613915565b60405180910390f35b34801561059157600080fd5b5061059a61142a565b6040516105a79190613c99565b60405180910390f35b3480156105bc57600080fd5b506105d760048036038101906105d29190612ee5565b611430565b6040516105e49190613c99565b60405180910390f35b3480156105f957600080fd5b506106026114e8565b005b34801561061057600080fd5b50610619611570565b6040516106269190613c99565b60405180910390f35b34801561063b57600080fd5b50610644611576565b6040516106519190613997565b60405180910390f35b34801561066657600080fd5b5061066f61158f565b60405161067c9190613c99565b60405180910390f35b34801561069157600080fd5b5061069a611597565b6040516106a79190613915565b60405180910390f35b3480156106bc57600080fd5b506106d760048036038101906106d29190613107565b6115c1565b005b3480156106e557600080fd5b506106ee611653565b6040516106fb9190613997565b60405180910390f35b61071e6004803603810190610719919061314c565b6116e5565b005b34801561072c57600080fd5b5061074760048036038101906107429190613014565b6118f4565b005b34801561075557600080fd5b5061075e61190a565b60405161076b9190613997565b60405180910390f35b34801561078057600080fd5b5061079b60048036038101906107969190612f99565b611998565b005b3480156107a957600080fd5b506107c460048036038101906107bf919061314c565b6119fa565b6040516107d19190613997565b60405180910390f35b3480156107e657600080fd5b506107ef611b25565b005b3480156107fd57600080fd5b50610806611bcd565b6040516108139190613c99565b60405180910390f35b34801561082857600080fd5b50610831611bd3565b60405161083e919061397c565b60405180910390f35b34801561085357600080fd5b5061086e6004803603810190610869919061314c565b611be6565b005b34801561087c57600080fd5b5061089760048036038101906108929190613107565b611c6c565b005b3480156108a557600080fd5b506108ae611cfe565b6040516108bb9190613997565b60405180910390f35b3480156108d057600080fd5b506108eb60048036038101906108e69190612f0e565b611d90565b6040516108f8919061397c565b60405180910390f35b34801561090d57600080fd5b5061092860048036038101906109239190612ee5565b611e24565b005b34801561093657600080fd5b5061093f611f1c565b60405161094c9190613997565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a2057507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a305750610a2f82611fc0565b5b9050919050565b610a3f61202a565b73ffffffffffffffffffffffffffffffffffffffff16610a5d611597565b73ffffffffffffffffffffffffffffffffffffffff1614610ab3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aaa90613b79565b60405180910390fd5b600e60159054906101000a900460ff1615600e60156101000a81548160ff021916908315150217905550565b606060008054610aee90613f38565b80601f0160208091040260200160405190810160405280929190818152602001828054610b1a90613f38565b8015610b675780601f10610b3c57610100808354040283529160200191610b67565b820191906000526020600020905b815481529060010190602001808311610b4a57829003601f168201915b5050505050905090565b6000610b7c82612032565b610bbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb290613b59565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610c0182611378565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6990613bd9565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c9161202a565b73ffffffffffffffffffffffffffffffffffffffff161480610cc05750610cbf81610cba61202a565b611d90565b5b610cff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf690613ad9565b60405180910390fd5b610d09838361209e565b505050565b6000610d1a600f612157565b905090565b610d2761202a565b73ffffffffffffffffffffffffffffffffffffffff16610d45611597565b73ffffffffffffffffffffffffffffffffffffffff1614610d9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9290613b79565b60405180910390fd5b81600754610da9600f612157565b10610de9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de090613a79565b60405180910390fd5b60075481610df7600f612157565b610e019190613d6d565b1115610e42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e39906139f9565b60405180910390fd5b600954811115610e87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7e90613c39565b60405180910390fd5b600e60169054906101000a900460ff16610ed6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ecd90613c79565b60405180910390fd5b610ee08284612165565b505050565b610ef6610ef061202a565b826121a5565b610f35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2c90613c19565b60405180910390fd5b610f40838383612283565b505050565b60075481565b600e60169054906101000a900460ff1681565b610f6661202a565b73ffffffffffffffffffffffffffffffffffffffff16610f84611597565b73ffffffffffffffffffffffffffffffffffffffff1614610fda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd190613b79565b60405180910390fd5b8060098190555050565b610fec61202a565b73ffffffffffffffffffffffffffffffffffffffff1661100a611597565b73ffffffffffffffffffffffffffffffffffffffff1614611060576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105790613b79565b60405180910390fd5b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516110a890613900565b60006040518083038185875af1925050503d80600081146110e5576040519150601f19603f3d011682016040523d82523d6000602084013e6110ea565b606091505b50509050806110f857600080fd5b50565b61111683838360405180602001604052806000815250611998565b505050565b6060600115158215151415611167576040518060400160405280600481526020017f747275650000000000000000000000000000000000000000000000000000000081525090506111a0565b6040518060400160405280600581526020017f66616c736500000000000000000000000000000000000000000000000000000081525090505b919050565b600e60149054906101000a900460ff1681565b6111c061202a565b73ffffffffffffffffffffffffffffffffffffffff166111de611597565b73ffffffffffffffffffffffffffffffffffffffff1614611234576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122b90613b79565b60405180910390fd5b8181600b9190611245929190612d27565b505050565b61125261202a565b73ffffffffffffffffffffffffffffffffffffffff16611270611597565b73ffffffffffffffffffffffffffffffffffffffff16146112c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112bd90613b79565b60405180910390fd5b8060078190555050565b6112d861202a565b73ffffffffffffffffffffffffffffffffffffffff166112f6611597565b73ffffffffffffffffffffffffffffffffffffffff161461134c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134390613b79565b60405180910390fd5b600e60149054906101000a900460ff1615600e60146101000a81548160ff021916908315150217905550565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611421576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141890613b19565b60405180910390fd5b80915050919050565b60085481565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156114a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149890613af9565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6114f061202a565b73ffffffffffffffffffffffffffffffffffffffff1661150e611597565b73ffffffffffffffffffffffffffffffffffffffff1614611564576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155b90613b79565b60405180910390fd5b61156e60006124df565b565b60095481565b606061158a611585600f612157565b6125a5565b905090565b600047905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6115c961202a565b73ffffffffffffffffffffffffffffffffffffffff166115e7611597565b73ffffffffffffffffffffffffffffffffffffffff161461163d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163490613b79565b60405180910390fd5b8181600a919061164e929190612d27565b505050565b60606001805461166290613f38565b80601f016020809104026020016040519081016040528092919081815260200182805461168e90613f38565b80156116db5780601f106116b0576101008083540402835291602001916116db565b820191906000526020600020905b8154815290600101906020018083116116be57829003601f168201915b5050505050905090565b806007546116f3600f612157565b10611733576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172a90613a79565b60405180910390fd5b60075481611741600f612157565b61174b9190613d6d565b111561178c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611783906139f9565b60405180910390fd5b6009548111156117d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c890613c39565b60405180910390fd5b600e60159054906101000a900460ff16611820576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181790613a99565b60405180910390fd5b8160085461182e9190613df4565b341015611870576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186790613c59565b60405180910390fd5b611878611597565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156118e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118dd90613bf9565b60405180910390fd5b6118f03383612165565b5050565b6119066118ff61202a565b8383612752565b5050565b600c805461191790613f38565b80601f016020809104026020016040519081016040528092919081815260200182805461194390613f38565b80156119905780601f1061196557610100808354040283529160200191611990565b820191906000526020600020905b81548152906001019060200180831161197357829003601f168201915b505050505081565b6119a96119a361202a565b836121a5565b6119e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119df90613c19565b60405180910390fd5b6119f4848484846128bf565b50505050565b6060611a0582612032565b611a44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3b90613bb9565b60405180910390fd5b60001515600e60149054906101000a900460ff1615151415611af257600c8054611a6d90613f38565b80601f0160208091040260200160405190810160405280929190818152602001828054611a9990613f38565b8015611ae65780601f10611abb57610100808354040283529160200191611ae6565b820191906000526020600020905b815481529060010190602001808311611ac957829003601f168201915b50505050509050611b20565b600b611afd836125a5565b604051602001611b0e9291906137e0565b60405160208183030381529060405290505b919050565b611b2d61202a565b73ffffffffffffffffffffffffffffffffffffffff16611b4b611597565b73ffffffffffffffffffffffffffffffffffffffff1614611ba1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9890613b79565b60405180910390fd5b600e60169054906101000a900460ff1615600e60166101000a81548160ff021916908315150217905550565b600d5481565b600e60159054906101000a900460ff1681565b611bee61202a565b73ffffffffffffffffffffffffffffffffffffffff16611c0c611597565b73ffffffffffffffffffffffffffffffffffffffff1614611c62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5990613b79565b60405180910390fd5b8060088190555050565b611c7461202a565b73ffffffffffffffffffffffffffffffffffffffff16611c92611597565b73ffffffffffffffffffffffffffffffffffffffff1614611ce8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cdf90613b79565b60405180910390fd5b8181600c9190611cf9929190612d27565b505050565b6060600a8054611d0d90613f38565b80601f0160208091040260200160405190810160405280929190818152602001828054611d3990613f38565b8015611d865780601f10611d5b57610100808354040283529160200191611d86565b820191906000526020600020905b815481529060010190602001808311611d6957829003601f168201915b5050505050905090565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611e2c61202a565b73ffffffffffffffffffffffffffffffffffffffff16611e4a611597565b73ffffffffffffffffffffffffffffffffffffffff1614611ea0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9790613b79565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611f10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f07906139d9565b60405180910390fd5b611f19816124df565b50565b6060611f36600e60159054906101000a900460ff1661111b565b611f4e600e60149054906101000a900460ff1661111b565b611f66600e60169054906101000a900460ff1661111b565b611f6e611576565b600c600d54611f7e6008546125a5565b611f896007546125a5565b611f946009546125a5565b604051602001611fac9998979695949392919061380f565b604051602081830303815290604052905090565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661211183611378565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600081600001549050919050565b60005b818110156121a05761217a600f61291b565b61218d83612188600f612157565b612931565b808061219890613f9b565b915050612168565b505050565b60006121b082612032565b6121ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121e690613ab9565b60405180910390fd5b60006121fa83611378565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061226957508373ffffffffffffffffffffffffffffffffffffffff1661225184610b71565b73ffffffffffffffffffffffffffffffffffffffff16145b8061227a57506122798185611d90565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166122a382611378565b73ffffffffffffffffffffffffffffffffffffffff16146122f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122f090613b99565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612369576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236090613a39565b60405180910390fd5b61237483838361294f565b61237f60008261209e565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546123cf9190613e4e565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124269190613d6d565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b606060008214156125ed576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061274d565b600082905060005b6000821461261f57808061260890613f9b565b915050600a826126189190613dc3565b91506125f5565b60008167ffffffffffffffff811115612661577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156126935781602001600182028036833780820191505090505b5090505b60008514612746576001826126ac9190613e4e565b9150600a856126bb9190613fee565b60306126c79190613d6d565b60f81b818381518110612703577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561273f9190613dc3565b9450612697565b8093505050505b919050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156127c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127b890613a59565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516128b2919061397c565b60405180910390a3505050565b6128ca848484612283565b6128d684848484612954565b612915576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161290c906139b9565b60405180910390fd5b50505050565b6001816000016000828254019250508190555050565b61294b828260405180602001604052806000815250612aeb565b5050565b505050565b60006129758473ffffffffffffffffffffffffffffffffffffffff16612b46565b15612ade578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261299e61202a565b8786866040518563ffffffff1660e01b81526004016129c09493929190613930565b602060405180830381600087803b1580156129da57600080fd5b505af1925050508015612a0b57506040513d601f19601f82011682018060405250810190612a0891906130de565b60015b612a8e573d8060008114612a3b576040519150601f19603f3d011682016040523d82523d6000602084013e612a40565b606091505b50600081511415612a86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a7d906139b9565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612ae3565b600190505b949350505050565b612af58383612b59565b612b026000848484612954565b612b41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b38906139b9565b60405180910390fd5b505050565b600080823b905060008111915050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612bc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bc090613b39565b60405180910390fd5b612bd281612032565b15612c12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c0990613a19565b60405180910390fd5b612c1e6000838361294f565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612c6e9190613d6d565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b828054612d3390613f38565b90600052602060002090601f016020900481019282612d555760008555612d9c565b82601f10612d6e57803560ff1916838001178555612d9c565b82800160010185558215612d9c579182015b82811115612d9b578235825591602001919060010190612d80565b5b509050612da99190612dad565b5090565b5b80821115612dc6576000816000905550600101612dae565b5090565b6000612ddd612dd884613cd9565b613cb4565b905082815260208101848484011115612df557600080fd5b612e00848285613ef6565b509392505050565b600081359050612e1781614803565b92915050565b600081359050612e2c8161481a565b92915050565b600081359050612e4181614831565b92915050565b600081519050612e5681614831565b92915050565b600082601f830112612e6d57600080fd5b8135612e7d848260208601612dca565b91505092915050565b60008083601f840112612e9857600080fd5b8235905067ffffffffffffffff811115612eb157600080fd5b602083019150836001820283011115612ec957600080fd5b9250929050565b600081359050612edf81614848565b92915050565b600060208284031215612ef757600080fd5b6000612f0584828501612e08565b91505092915050565b60008060408385031215612f2157600080fd5b6000612f2f85828601612e08565b9250506020612f4085828601612e08565b9150509250929050565b600080600060608486031215612f5f57600080fd5b6000612f6d86828701612e08565b9350506020612f7e86828701612e08565b9250506040612f8f86828701612ed0565b9150509250925092565b60008060008060808587031215612faf57600080fd5b6000612fbd87828801612e08565b9450506020612fce87828801612e08565b9350506040612fdf87828801612ed0565b925050606085013567ffffffffffffffff811115612ffc57600080fd5b61300887828801612e5c565b91505092959194509250565b6000806040838503121561302757600080fd5b600061303585828601612e08565b925050602061304685828601612e1d565b9150509250929050565b6000806040838503121561306357600080fd5b600061307185828601612e08565b925050602061308285828601612ed0565b9150509250929050565b60006020828403121561309e57600080fd5b60006130ac84828501612e1d565b91505092915050565b6000602082840312156130c757600080fd5b60006130d584828501612e32565b91505092915050565b6000602082840312156130f057600080fd5b60006130fe84828501612e47565b91505092915050565b6000806020838503121561311a57600080fd5b600083013567ffffffffffffffff81111561313457600080fd5b61314085828601612e86565b92509250509250929050565b60006020828403121561315e57600080fd5b600061316c84828501612ed0565b91505092915050565b6000806040838503121561318857600080fd5b600061319685828601612ed0565b92505060206131a785828601612e08565b9150509250929050565b6131ba81613e82565b82525050565b6131c981613e94565b82525050565b60006131da82613d1f565b6131e48185613d35565b93506131f4818560208601613f05565b6131fd816140db565b840191505092915050565b600061321382613d2a565b61321d8185613d51565b935061322d818560208601613f05565b613236816140db565b840191505092915050565b600061324c82613d2a565b6132568185613d62565b9350613266818560208601613f05565b80840191505092915050565b6000815461327f81613f38565b6132898186613d62565b945060018216600081146132a457600181146132b5576132e8565b60ff198316865281860193506132e8565b6132be85613d0a565b60005b838110156132e0578154818901526001820191506020810190506132c1565b838801955050505b50505092915050565b60006132fe601583613d62565b9150613309826140ec565b601582019050919050565b6000613321600d83613d62565b915061332c82614115565b600d82019050919050565b6000613344601483613d62565b915061334f8261413e565b601482019050919050565b6000613367603283613d51565b915061337282614167565b604082019050919050565b600061338a602683613d51565b9150613395826141b6565b604082019050919050565b60006133ad600c83613d51565b91506133b882614205565b602082019050919050565b60006133d0601c83613d51565b91506133db8261422e565b602082019050919050565b60006133f3600d83613d62565b91506133fe82614257565b600d82019050919050565b6000613416602483613d51565b915061342182614280565b604082019050919050565b6000613439601983613d51565b9150613444826142cf565b602082019050919050565b600061345c600c83613d51565b9150613467826142f8565b602082019050919050565b600061347f600383613d62565b915061348a82614321565b600382019050919050565b60006134a2600b83613d51565b91506134ad8261434a565b602082019050919050565b60006134c5602c83613d51565b91506134d082614373565b604082019050919050565b60006134e8600f83613d62565b91506134f3826143c2565b600f82019050919050565b600061350b600f83613d62565b9150613516826143eb565b600f82019050919050565b600061352e603883613d51565b915061353982614414565b604082019050919050565b6000613551602a83613d51565b915061355c82614463565b604082019050919050565b6000613574602983613d51565b915061357f826144b2565b604082019050919050565b6000613597602083613d51565b91506135a282614501565b602082019050919050565b60006135ba602c83613d51565b91506135c58261452a565b604082019050919050565b60006135dd600583613d62565b91506135e882614579565b600582019050919050565b6000613600602083613d51565b915061360b826145a2565b602082019050919050565b6000613623602983613d51565b915061362e826145cb565b604082019050919050565b6000613646601f83613d51565b91506136518261461a565b602082019050919050565b6000613669602183613d51565b915061367482614643565b604082019050919050565b600061368c601983613d51565b915061369782614692565b602082019050919050565b60006136af600083613d46565b91506136ba826146bb565b600082019050919050565b60006136d2603183613d51565b91506136dd826146be565b604082019050919050565b60006136f5600f83613d62565b91506137008261470d565b600f82019050919050565b6000613718601183613d62565b915061372382614736565b601182019050919050565b600061373b601583613d62565b91506137468261475f565b601582019050919050565b600061375e601483613d51565b915061376982614788565b602082019050919050565b6000613781601083613d51565b915061378c826147b1565b602082019050919050565b60006137a4600e83613d51565b91506137af826147da565b602082019050919050565b6137c381613eec565b82525050565b6137da6137d582613eec565b613fe4565b82525050565b60006137ec8285613272565b91506137f88284613241565b9150613803826135d0565b91508190509392505050565b600061381a826133e6565b9150613826828c613241565b9150613831826136e8565b915061383d828b613241565b9150613848826134db565b9150613854828a613241565b915061385f82613314565b915061386b8289613241565b91506138768261370b565b91506138828288613272565b915061388d826132f1565b915061389982876137c9565b6020820191506138a8826134fe565b91506138b48286613241565b91506138bf8261372e565b91506138cb8285613241565b91506138d682613337565b91506138e28284613241565b91506138ed82613472565b91508190509a9950505050505050505050565b600061390b826136a2565b9150819050919050565b600060208201905061392a60008301846131b1565b92915050565b600060808201905061394560008301876131b1565b61395260208301866131b1565b61395f60408301856137ba565b818103606083015261397181846131cf565b905095945050505050565b600060208201905061399160008301846131c0565b92915050565b600060208201905081810360008301526139b18184613208565b905092915050565b600060208201905081810360008301526139d28161335a565b9050919050565b600060208201905081810360008301526139f28161337d565b9050919050565b60006020820190508181036000830152613a12816133a0565b9050919050565b60006020820190508181036000830152613a32816133c3565b9050919050565b60006020820190508181036000830152613a5281613409565b9050919050565b60006020820190508181036000830152613a728161342c565b9050919050565b60006020820190508181036000830152613a928161344f565b9050919050565b60006020820190508181036000830152613ab281613495565b9050919050565b60006020820190508181036000830152613ad2816134b8565b9050919050565b60006020820190508181036000830152613af281613521565b9050919050565b60006020820190508181036000830152613b1281613544565b9050919050565b60006020820190508181036000830152613b3281613567565b9050919050565b60006020820190508181036000830152613b528161358a565b9050919050565b60006020820190508181036000830152613b72816135ad565b9050919050565b60006020820190508181036000830152613b92816135f3565b9050919050565b60006020820190508181036000830152613bb281613616565b9050919050565b60006020820190508181036000830152613bd281613639565b9050919050565b60006020820190508181036000830152613bf28161365c565b9050919050565b60006020820190508181036000830152613c128161367f565b9050919050565b60006020820190508181036000830152613c32816136c5565b9050919050565b60006020820190508181036000830152613c5281613751565b9050919050565b60006020820190508181036000830152613c7281613774565b9050919050565b60006020820190508181036000830152613c9281613797565b9050919050565b6000602082019050613cae60008301846137ba565b92915050565b6000613cbe613ccf565b9050613cca8282613f6a565b919050565b6000604051905090565b600067ffffffffffffffff821115613cf457613cf36140ac565b5b613cfd826140db565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000613d7882613eec565b9150613d8383613eec565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613db857613db761401f565b5b828201905092915050565b6000613dce82613eec565b9150613dd983613eec565b925082613de957613de861404e565b5b828204905092915050565b6000613dff82613eec565b9150613e0a83613eec565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613e4357613e4261401f565b5b828202905092915050565b6000613e5982613eec565b9150613e6483613eec565b925082821015613e7757613e7661401f565b5b828203905092915050565b6000613e8d82613ecc565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613f23578082015181840152602081019050613f08565b83811115613f32576000848401525b50505050565b60006002820490506001821680613f5057607f821691505b60208210811415613f6457613f6361407d565b5b50919050565b613f73826140db565b810181811067ffffffffffffffff82111715613f9257613f916140ac565b5b80604052505050565b6000613fa682613eec565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613fd957613fd861401f565b5b600182019050919050565b6000819050919050565b6000613ff982613eec565b915061400483613eec565b9250826140145761401361404e565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f222c202263757272656e7442616c616e6365223a220000000000000000000000600082015250565b7f222c2022537570706c79223a2200000000000000000000000000000000000000600082015250565b7f222c20224e4654535f5045525f4d494e54223a22000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4558434545445f53544f434b0000000000000000000000000000000000000000600082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f7b2273616c654c697665223a2200000000000000000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4f55545f4f465f53544f434b0000000000000000000000000000000000000000600082015250565b7f22207d0000000000000000000000000000000000000000000000000000000000600082015250565b7f53414c455f434c4f534544000000000000000000000000000000000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f222c2022676966744c697665223a220000000000000000000000000000000000600082015250565b7f222c224e46545f5052494345223a220000000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f43616e6e6f74207175657279206e6f6e2d6578697374656e7420746f6b656e00600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e65722063616e206e6f74206d696e7420616e204e465400000000000000600082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f222c202272657665616c6564223a220000000000000000000000000000000000600082015250565b7f222c20226d797374657279555249223a22000000000000000000000000000000600082015250565b7f222c20224e46545f4d41585f535550504c59223a220000000000000000000000600082015250565b7f4558434545445f4e4654535f5045525f4d494e54000000000000000000000000600082015250565b7f494e53554646494349454e545f45544800000000000000000000000000000000600082015250565b7f47494654494e475f434c4f534544000000000000000000000000000000000000600082015250565b61480c81613e82565b811461481757600080fd5b50565b61482381613e94565b811461482e57600080fd5b50565b61483a81613ea0565b811461484557600080fd5b50565b61485181613eec565b811461485c57600080fd5b5056fea264697066735822122054f70a700f9ab1927dc48f6d7b90f925bc8934ffa42cd9aa42300f56ea2530a464736f6c63430008040033
Deployed Bytecode Sourcemap
47282:5440:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34773:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49684:86;;;;;;;;;;;;;:::i;:::-;;35718:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37277:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36800:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49337:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48483:242;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38027:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47405:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47846:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49964:99;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49440:236;;;;;;;;;;;;;:::i;:::-;;38437:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51280:198;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47776:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50636:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50429:90;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49876:80;;;;;;;;;;;;;:::i;:::-;;35412:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47448:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35142:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15761:103;;;;;;;;;;;;;:::i;:::-;;47492:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52605:114;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50176:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15110:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50527:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35887:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48733:362;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37570:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47601:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38693:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50851:421;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49778:90;;;;;;;;;;;;;:::i;:::-;;47633:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47811:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50288:133;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50071:97;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50746;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37796:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16019:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51486:1111;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34773:305;34875:4;34927:25;34912:40;;;:11;:40;;;;:105;;;;34984:33;34969:48;;;:11;:48;;;;34912:105;:158;;;;35034:36;35058:11;35034:23;:36::i;:::-;34912:158;34892:178;;34773:305;;;:::o;49684:86::-;15341:12;:10;:12::i;:::-;15330:23;;:7;:5;:7::i;:::-;:23;;;15322:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49754:8:::1;;;;;;;;;;;49753:9;49742:8;;:20;;;;;;;;;;;;;;;;;;49684:86::o:0;35718:100::-;35772:13;35805:5;35798:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35718:100;:::o;37277:221::-;37353:7;37381:16;37389:7;37381;:16::i;:::-;37373:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;37466:15;:24;37482:7;37466:24;;;;;;;;;;;;;;;;;;;;;37459:31;;37277:221;;;:::o;36800:411::-;36881:13;36897:23;36912:7;36897:14;:23::i;:::-;36881:39;;36945:5;36939:11;;:2;:11;;;;36931:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;37039:5;37023:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;37048:37;37065:5;37072:12;:10;:12::i;:::-;37048:16;:37::i;:::-;37023:62;37001:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;37182:21;37191:2;37195:7;37182:8;:21::i;:::-;36800:411;;;:::o;49337:95::-;49381:7;49408:16;:6;:14;:16::i;:::-;49401:23;;49337:95;:::o;48483:242::-;15341:12;:10;:12::i;:::-;15330:23;;:7;:5;:7::i;:::-;:23;;;15322:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48608:13:::1;48231:14;;48212:16;:6;:14;:16::i;:::-;:33;48204:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;48329:14;;48314:11;48295:16;:6;:14;:16::i;:::-;:30;;;;:::i;:::-;:48;;48273:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;48417:13;;48402:11;:28;;48394:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;48647:8:::2;;;;;;;;;;;48639:35;;;;;;;;;;;;:::i;:::-;;;;;;;;;48685:32;48695:6;48703:13;48685:9;:32::i;:::-;15401:1:::1;48483:242:::0;;:::o;38027:339::-;38222:41;38241:12;:10;:12::i;:::-;38255:7;38222:18;:41::i;:::-;38214:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;38330:28;38340:4;38346:2;38350:7;38330:9;:28::i;:::-;38027:339;;;:::o;47405:36::-;;;;:::o;47846:28::-;;;;;;;;;;;;;:::o;49964:99::-;15341:12;:10;:12::i;:::-;15330:23;;:7;:5;:7::i;:::-;:23;;;15322:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50047:8:::1;50031:13;:24;;;;49964:99:::0;:::o;49440:236::-;15341:12;:10;:12::i;:::-;15330:23;;:7;:5;:7::i;:::-;:23;;;15322:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49546:7:::1;49567:15;;;;;;;;;;;49559:29;;49610:21;49559:87;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49545:101;;;49665:2;49657:11;;;::::0;::::1;;15401:1;49440:236::o:0;38437:185::-;38575:39;38592:4;38598:2;38602:7;38575:39;;;;;;;;;;;;:16;:39::i;:::-;38437:185;;;:::o;51280:198::-;51339:13;51378:4;51369:13;;:5;:13;;;51365:106;;;51399:13;;;;;;;;;;;;;;;;;;;;;51365:106;51445:14;;;;;;;;;;;;;;;;;;;51280:198;;;;:::o;47776:28::-;;;;;;;;;;;;;:::o;50636:98::-;15341:12;:10;:12::i;:::-;15330:23;;:7;:5;:7::i;:::-;:23;;;15322:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50723:3:::1;;50707:13;:19;;;;;;;:::i;:::-;;50636:98:::0;;:::o;50429:90::-;15341:12;:10;:12::i;:::-;15330:23;;:7;:5;:7::i;:::-;:23;;;15322:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50508:3:::1;50491:14;:20;;;;50429:90:::0;:::o;49876:80::-;15341:12;:10;:12::i;:::-;15330:23;;:7;:5;:7::i;:::-;:23;;;15322:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49940:8:::1;;;;;;;;;;;49939:9;49928:8;;:20;;;;;;;;;;;;;;;;;;49876:80::o:0;35412:239::-;35484:7;35504:13;35520:7;:16;35528:7;35520:16;;;;;;;;;;;;;;;;;;;;;35504:32;;35572:1;35555:19;;:5;:19;;;;35547:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;35638:5;35631:12;;;35412:239;;;:::o;47448:37::-;;;;:::o;35142:208::-;35214:7;35259:1;35242:19;;:5;:19;;;;35234:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;35326:9;:16;35336:5;35326:16;;;;;;;;;;;;;;;;35319:23;;35142:208;;;:::o;15761:103::-;15341:12;:10;:12::i;:::-;15330:23;;:7;:5;:7::i;:::-;:23;;;15322:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15826:30:::1;15853:1;15826:18;:30::i;:::-;15761:103::o:0;47492:33::-;;;;:::o;52605:114::-;52651:13;52684:27;:16;:6;:14;:16::i;:::-;:25;:27::i;:::-;52677:34;;52605:114;:::o;50176:104::-;50224:7;50251:21;50244:28;;50176:104;:::o;15110:87::-;15156:7;15183:6;;;;;;;;;;;15176:13;;15110:87;:::o;50527:101::-;15341:12;:10;:12::i;:::-;15330:23;;:7;:5;:7::i;:::-;:23;;;15322:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50617:3:::1;;50602:12;:18;;;;;;;:::i;:::-;;50527:101:::0;;:::o;35887:104::-;35943:13;35976:7;35969:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35887:104;:::o;48733:362::-;48829:13;48231:14;;48212:16;:6;:14;:16::i;:::-;:33;48204:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;48329:14;;48314:11;48295:16;:6;:14;:16::i;:::-;:30;;;;:::i;:::-;:48;;48273:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;48417:13;;48402:11;:28;;48394:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;48868:8:::1;;;;;;;;;;;48860:32;;;;;;;;;;;;:::i;:::-;;;;;;;;;48936:13;48924:9;;:25;;;;:::i;:::-;48911:9;:38;;48903:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;49003:7;:5;:7::i;:::-;48989:21;;:10;:21;;;;48981:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;49051:36;49061:10;49073:13;49051:9;:36::i;:::-;48733:362:::0;;:::o;37570:155::-;37665:52;37684:12;:10;:12::i;:::-;37698:8;37708;37665:18;:52::i;:::-;37570:155;;:::o;47601:25::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;38693:328::-;38868:41;38887:12;:10;:12::i;:::-;38901:7;38868:18;:41::i;:::-;38860:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;38974:39;38988:4;38994:2;38998:7;39007:5;38974:13;:39::i;:::-;38693:328;;;;:::o;50851:421::-;50960:13;50999:16;51007:7;50999;:16::i;:::-;50991:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;51080:5;51068:17;;:8;;;;;;;;;;;:17;;;51064:68;;;51109:11;51102:18;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51064:68;51206:13;51221:18;:7;:16;:18::i;:::-;51189:60;;;;;;;;;:::i;:::-;;;;;;;;;;;;;51144:120;;50851:421;;;;:::o;49778:90::-;15341:12;:10;:12::i;:::-;15330:23;;:7;:5;:7::i;:::-;:23;;;15322:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49852:8:::1;;;;;;;;;;;49851:9;49840:8;;:20;;;;;;;;;;;;;;;;;;49778:90::o:0;47633:53::-;;;;:::o;47811:28::-;;;;;;;;;;;;;:::o;50288:133::-;15341:12;:10;:12::i;:::-;15330:23;;:7;:5;:7::i;:::-;:23;;;15322:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50408:5:::1;50396:9;:17;;;;50288:133:::0;:::o;50071:97::-;15341:12;:10;:12::i;:::-;15330:23;;:7;:5;:7::i;:::-;:23;;;15322:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50157:3:::1;;50143:11;:17;;;;;;;:::i;:::-;;50071:97:::0;;:::o;50746:::-;50790:13;50823:12;50816:19;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50746:97;:::o;37796:164::-;37893:4;37917:18;:25;37936:5;37917:25;;;;;;;;;;;;;;;:35;37943:8;37917:35;;;;;;;;;;;;;;;;;;;;;;;;;37910:42;;37796:164;;;;:::o;16019:201::-;15341:12;:10;:12::i;:::-;15330:23;;:7;:5;:7::i;:::-;:23;;;15322:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16128:1:::1;16108:22;;:8;:22;;;;16100:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;16184:28;16203:8;16184:18;:28::i;:::-;16019:201:::0;:::o;51486:1111::-;51544:13;51728:26;51745:8;;;;;;;;;;;51728:16;:26::i;:::-;51825;51842:8;;;;;;;;;;;51825:16;:26::i;:::-;51922;51939:8;;;;;;;;;;;51922:16;:26::i;:::-;52017:15;:13;:15::i;:::-;52105:11;52193:14;;52278:20;:9;;:18;:20::i;:::-;52375:25;:14;;:23;:25::i;:::-;52476:24;:13;;:22;:24::i;:::-;51643:912;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;51570:1019;;51486:1111;:::o;27542:157::-;27627:4;27666:25;27651:40;;;:11;:40;;;;27644:47;;27542:157;;;:::o;13834:98::-;13887:7;13914:10;13907:17;;13834:98;:::o;40531:127::-;40596:4;40648:1;40620:30;;:7;:16;40628:7;40620:16;;;;;;;;;;;;;;;;;;;;;:30;;;;40613:37;;40531:127;;;:::o;44513:174::-;44615:2;44588:15;:24;44604:7;44588:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;44671:7;44667:2;44633:46;;44642:23;44657:7;44642:14;:23::i;:::-;44633:46;;;;;;;;;;;;44513:174;;:::o;872:114::-;937:7;964;:14;;;957:21;;872:114;;;:::o;49103:226::-;49187:9;49182:140;49206:11;49202:1;:15;49182:140;;;49239:18;:6;:16;:18::i;:::-;49272:38;49282:9;49293:16;:6;:14;:16::i;:::-;49272:9;:38::i;:::-;49219:3;;;;;:::i;:::-;;;;49182:140;;;;49103:226;;:::o;40825:348::-;40918:4;40943:16;40951:7;40943;:16::i;:::-;40935:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;41019:13;41035:23;41050:7;41035:14;:23::i;:::-;41019:39;;41088:5;41077:16;;:7;:16;;;:51;;;;41121:7;41097:31;;:20;41109:7;41097:11;:20::i;:::-;:31;;;41077:51;:87;;;;41132:32;41149:5;41156:7;41132:16;:32::i;:::-;41077:87;41069:96;;;40825:348;;;;:::o;43817:578::-;43976:4;43949:31;;:23;43964:7;43949:14;:23::i;:::-;:31;;;43941:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;44059:1;44045:16;;:2;:16;;;;44037:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;44115:39;44136:4;44142:2;44146:7;44115:20;:39::i;:::-;44219:29;44236:1;44240:7;44219:8;:29::i;:::-;44280:1;44261:9;:15;44271:4;44261:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;44309:1;44292:9;:13;44302:2;44292:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;44340:2;44321:7;:16;44329:7;44321:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;44379:7;44375:2;44360:27;;44369:4;44360:27;;;;;;;;;;;;43817:578;;;:::o;16380:191::-;16454:16;16473:6;;;;;;;;;;;16454:25;;16499:8;16490:6;;:17;;;;;;;;;;;;;;;;;;16554:8;16523:40;;16544:8;16523:40;;;;;;;;;;;;16380:191;;:::o;1830:723::-;1886:13;2116:1;2107:5;:10;2103:53;;;2134:10;;;;;;;;;;;;;;;;;;;;;2103:53;2166:12;2181:5;2166:20;;2197:14;2222:78;2237:1;2229:4;:9;2222:78;;2255:8;;;;;:::i;:::-;;;;2286:2;2278:10;;;;;:::i;:::-;;;2222:78;;;2310:19;2342:6;2332:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2310:39;;2360:154;2376:1;2367:5;:10;2360:154;;2404:1;2394:11;;;;;:::i;:::-;;;2471:2;2463:5;:10;;;;:::i;:::-;2450:2;:24;;;;:::i;:::-;2437:39;;2420:6;2427;2420:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;2500:2;2491:11;;;;;:::i;:::-;;;2360:154;;;2538:6;2524:21;;;;;1830:723;;;;:::o;44829:315::-;44984:8;44975:17;;:5;:17;;;;44967:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;45071:8;45033:18;:25;45052:5;45033:25;;;;;;;;;;;;;;;:35;45059:8;45033:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;45117:8;45095:41;;45110:5;45095:41;;;45127:8;45095:41;;;;;;:::i;:::-;;;;;;;;44829:315;;;:::o;39903:::-;40060:28;40070:4;40076:2;40080:7;40060:9;:28::i;:::-;40107:48;40130:4;40136:2;40140:7;40149:5;40107:22;:48::i;:::-;40099:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;39903:315;;;;:::o;994:127::-;1101:1;1083:7;:14;;;:19;;;;;;;;;;;994:127;:::o;41515:110::-;41591:26;41601:2;41605:7;41591:26;;;;;;;;;;;;:9;:26::i;:::-;41515:110;;:::o;47080:126::-;;;;:::o;45709:799::-;45864:4;45885:15;:2;:13;;;:15::i;:::-;45881:620;;;45937:2;45921:36;;;45958:12;:10;:12::i;:::-;45972:4;45978:7;45987:5;45921:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;45917:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46180:1;46163:6;:13;:18;46159:272;;;46206:60;;;;;;;;;;:::i;:::-;;;;;;;;46159:272;46381:6;46375:13;46366:6;46362:2;46358:15;46351:38;45917:529;46054:41;;;46044:51;;;:6;:51;;;;46037:58;;;;;45881:620;46485:4;46478:11;;45709:799;;;;;;;:::o;41852:321::-;41982:18;41988:2;41992:7;41982:5;:18::i;:::-;42033:54;42064:1;42068:2;42072:7;42081:5;42033:22;:54::i;:::-;42011:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;41852:321;;;:::o;17398:387::-;17458:4;17666:12;17733:7;17721:20;17713:28;;17776:1;17769:4;:8;17762:15;;;17398:387;;;:::o;42509:382::-;42603:1;42589:16;;:2;:16;;;;42581:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;42662:16;42670:7;42662;:16::i;:::-;42661:17;42653:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;42724:45;42753:1;42757:2;42761:7;42724:20;:45::i;:::-;42799:1;42782:9;:13;42792:2;42782:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;42830:2;42811:7;:16;42819:7;42811:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;42875:7;42871:2;42850:33;;42867:1;42850:33;;;;;;;;;;;;42509:382;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:343: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:2;;;290:1;287;280:12;249:2;303:41;337:6;332:3;327;303:41;:::i;:::-;90:260;;;;;;:::o;356:139::-;402:5;440:6;427:20;418:29;;456:33;483:5;456:33;:::i;:::-;408:87;;;;:::o;501:133::-;544:5;582:6;569:20;560:29;;598:30;622:5;598:30;:::i;:::-;550:84;;;;:::o;640:137::-;685:5;723:6;710:20;701:29;;739:32;765:5;739:32;:::i;:::-;691:86;;;;:::o;783:141::-;839:5;870:6;864:13;855:22;;886:32;912:5;886:32;:::i;:::-;845:79;;;;:::o;943:271::-;998:5;1047:3;1040:4;1032:6;1028:17;1024:27;1014:2;;1065:1;1062;1055:12;1014:2;1105:6;1092:20;1130:78;1204:3;1196:6;1189:4;1181:6;1177:17;1130:78;:::i;:::-;1121:87;;1004:210;;;;;:::o;1234:352::-;1292:8;1302:6;1352:3;1345:4;1337:6;1333:17;1329:27;1319:2;;1370:1;1367;1360:12;1319:2;1406:6;1393:20;1383:30;;1436:18;1428:6;1425:30;1422:2;;;1468:1;1465;1458:12;1422:2;1505:4;1497:6;1493:17;1481:29;;1559:3;1551:4;1543:6;1539:17;1529:8;1525:32;1522:41;1519:2;;;1576:1;1573;1566:12;1519:2;1309:277;;;;;:::o;1592:139::-;1638:5;1676:6;1663:20;1654:29;;1692:33;1719:5;1692:33;:::i;:::-;1644:87;;;;:::o;1737:262::-;1796:6;1845:2;1833:9;1824:7;1820:23;1816:32;1813:2;;;1861:1;1858;1851:12;1813:2;1904:1;1929:53;1974:7;1965:6;1954:9;1950:22;1929:53;:::i;:::-;1919:63;;1875:117;1803:196;;;;:::o;2005:407::-;2073:6;2081;2130:2;2118:9;2109:7;2105:23;2101:32;2098:2;;;2146:1;2143;2136:12;2098:2;2189:1;2214:53;2259:7;2250:6;2239:9;2235:22;2214:53;:::i;:::-;2204:63;;2160:117;2316:2;2342:53;2387:7;2378:6;2367:9;2363:22;2342:53;:::i;:::-;2332:63;;2287:118;2088:324;;;;;:::o;2418:552::-;2495:6;2503;2511;2560:2;2548:9;2539:7;2535:23;2531:32;2528:2;;;2576:1;2573;2566:12;2528:2;2619:1;2644:53;2689:7;2680:6;2669:9;2665:22;2644:53;:::i;:::-;2634:63;;2590:117;2746:2;2772:53;2817:7;2808:6;2797:9;2793:22;2772:53;:::i;:::-;2762:63;;2717:118;2874:2;2900:53;2945:7;2936:6;2925:9;2921:22;2900:53;:::i;:::-;2890:63;;2845:118;2518:452;;;;;:::o;2976:809::-;3071:6;3079;3087;3095;3144:3;3132:9;3123:7;3119:23;3115:33;3112:2;;;3161:1;3158;3151:12;3112:2;3204:1;3229:53;3274:7;3265:6;3254:9;3250:22;3229:53;:::i;:::-;3219:63;;3175:117;3331:2;3357:53;3402:7;3393:6;3382:9;3378:22;3357:53;:::i;:::-;3347:63;;3302:118;3459:2;3485:53;3530:7;3521:6;3510:9;3506:22;3485:53;:::i;:::-;3475:63;;3430:118;3615:2;3604:9;3600:18;3587:32;3646:18;3638:6;3635:30;3632:2;;;3678:1;3675;3668:12;3632:2;3706:62;3760:7;3751:6;3740:9;3736:22;3706:62;:::i;:::-;3696:72;;3558:220;3102:683;;;;;;;:::o;3791:401::-;3856:6;3864;3913:2;3901:9;3892:7;3888:23;3884:32;3881:2;;;3929:1;3926;3919:12;3881:2;3972:1;3997:53;4042:7;4033:6;4022:9;4018:22;3997:53;:::i;:::-;3987:63;;3943:117;4099:2;4125:50;4167:7;4158:6;4147:9;4143:22;4125:50;:::i;:::-;4115:60;;4070:115;3871:321;;;;;:::o;4198:407::-;4266:6;4274;4323:2;4311:9;4302:7;4298:23;4294:32;4291:2;;;4339:1;4336;4329:12;4291:2;4382:1;4407:53;4452:7;4443:6;4432:9;4428:22;4407:53;:::i;:::-;4397:63;;4353:117;4509:2;4535:53;4580:7;4571:6;4560:9;4556:22;4535:53;:::i;:::-;4525:63;;4480:118;4281:324;;;;;:::o;4611:256::-;4667:6;4716:2;4704:9;4695:7;4691:23;4687:32;4684:2;;;4732:1;4729;4722:12;4684:2;4775:1;4800:50;4842:7;4833:6;4822:9;4818:22;4800:50;:::i;:::-;4790:60;;4746:114;4674:193;;;;:::o;4873:260::-;4931:6;4980:2;4968:9;4959:7;4955:23;4951:32;4948:2;;;4996:1;4993;4986:12;4948:2;5039:1;5064:52;5108:7;5099:6;5088:9;5084:22;5064:52;:::i;:::-;5054:62;;5010:116;4938:195;;;;:::o;5139:282::-;5208:6;5257:2;5245:9;5236:7;5232:23;5228:32;5225:2;;;5273:1;5270;5263:12;5225:2;5316:1;5341:63;5396:7;5387:6;5376:9;5372:22;5341:63;:::i;:::-;5331:73;;5287:127;5215:206;;;;:::o;5427:395::-;5498:6;5506;5555:2;5543:9;5534:7;5530:23;5526:32;5523:2;;;5571:1;5568;5561:12;5523:2;5642:1;5631:9;5627:17;5614:31;5672:18;5664:6;5661:30;5658:2;;;5704:1;5701;5694:12;5658:2;5740:65;5797:7;5788:6;5777:9;5773:22;5740:65;:::i;:::-;5722:83;;;;5585:230;5513:309;;;;;:::o;5828:262::-;5887:6;5936:2;5924:9;5915:7;5911:23;5907:32;5904:2;;;5952:1;5949;5942:12;5904:2;5995:1;6020:53;6065:7;6056:6;6045:9;6041:22;6020:53;:::i;:::-;6010:63;;5966:117;5894:196;;;;:::o;6096:407::-;6164:6;6172;6221:2;6209:9;6200:7;6196:23;6192:32;6189:2;;;6237:1;6234;6227:12;6189:2;6280:1;6305:53;6350:7;6341:6;6330:9;6326:22;6305:53;:::i;:::-;6295:63;;6251:117;6407:2;6433:53;6478:7;6469:6;6458:9;6454:22;6433:53;:::i;:::-;6423:63;;6378:118;6179:324;;;;;:::o;6509:118::-;6596:24;6614:5;6596:24;:::i;:::-;6591:3;6584:37;6574:53;;:::o;6633:109::-;6714:21;6729:5;6714:21;:::i;:::-;6709:3;6702:34;6692:50;;:::o;6748:360::-;6834:3;6862:38;6894:5;6862:38;:::i;:::-;6916:70;6979:6;6974:3;6916:70;:::i;:::-;6909:77;;6995:52;7040:6;7035:3;7028:4;7021:5;7017:16;6995:52;:::i;:::-;7072:29;7094:6;7072:29;:::i;:::-;7067:3;7063:39;7056:46;;6838:270;;;;;:::o;7114:364::-;7202:3;7230:39;7263:5;7230:39;:::i;:::-;7285:71;7349:6;7344:3;7285:71;:::i;:::-;7278:78;;7365:52;7410:6;7405:3;7398:4;7391:5;7387:16;7365:52;:::i;:::-;7442:29;7464:6;7442:29;:::i;:::-;7437:3;7433:39;7426:46;;7206:272;;;;;:::o;7484:377::-;7590:3;7618:39;7651:5;7618:39;:::i;:::-;7673:89;7755:6;7750:3;7673:89;:::i;:::-;7666:96;;7771:52;7816:6;7811:3;7804:4;7797:5;7793:16;7771:52;:::i;:::-;7848:6;7843:3;7839:16;7832:23;;7594:267;;;;;:::o;7891:845::-;7994:3;8031:5;8025:12;8060:36;8086:9;8060:36;:::i;:::-;8112:89;8194:6;8189:3;8112:89;:::i;:::-;8105:96;;8232:1;8221:9;8217:17;8248:1;8243:137;;;;8394:1;8389:341;;;;8210:520;;8243:137;8327:4;8323:9;8312;8308:25;8303:3;8296:38;8363:6;8358:3;8354:16;8347:23;;8243:137;;8389:341;8456:38;8488:5;8456:38;:::i;:::-;8516:1;8530:154;8544:6;8541:1;8538:13;8530:154;;;8618:7;8612:14;8608:1;8603:3;8599:11;8592:35;8668:1;8659:7;8655:15;8644:26;;8566:4;8563:1;8559:12;8554:17;;8530:154;;;8713:6;8708:3;8704:16;8697:23;;8396:334;;8210:520;;7998:738;;;;;;:::o;8742:402::-;8902:3;8923:85;9005:2;9000:3;8923:85;:::i;:::-;8916:92;;9017:93;9106:3;9017:93;:::i;:::-;9135:2;9130:3;9126:12;9119:19;;8906:238;;;:::o;9150:402::-;9310:3;9331:85;9413:2;9408:3;9331:85;:::i;:::-;9324:92;;9425:93;9514:3;9425:93;:::i;:::-;9543:2;9538:3;9534:12;9527:19;;9314:238;;;:::o;9558:402::-;9718:3;9739:85;9821:2;9816:3;9739:85;:::i;:::-;9732:92;;9833:93;9922:3;9833:93;:::i;:::-;9951:2;9946:3;9942:12;9935:19;;9722:238;;;:::o;9966:366::-;10108:3;10129:67;10193:2;10188:3;10129:67;:::i;:::-;10122:74;;10205:93;10294:3;10205:93;:::i;:::-;10323:2;10318:3;10314:12;10307:19;;10112:220;;;:::o;10338:366::-;10480:3;10501:67;10565:2;10560:3;10501:67;:::i;:::-;10494:74;;10577:93;10666:3;10577:93;:::i;:::-;10695:2;10690:3;10686:12;10679:19;;10484:220;;;:::o;10710:366::-;10852:3;10873:67;10937:2;10932:3;10873:67;:::i;:::-;10866:74;;10949:93;11038:3;10949:93;:::i;:::-;11067:2;11062:3;11058:12;11051:19;;10856:220;;;:::o;11082:366::-;11224:3;11245:67;11309:2;11304:3;11245:67;:::i;:::-;11238:74;;11321:93;11410:3;11321:93;:::i;:::-;11439:2;11434:3;11430:12;11423:19;;11228:220;;;:::o;11454:402::-;11614:3;11635:85;11717:2;11712:3;11635:85;:::i;:::-;11628:92;;11729:93;11818:3;11729:93;:::i;:::-;11847:2;11842:3;11838:12;11831:19;;11618:238;;;:::o;11862:366::-;12004:3;12025:67;12089:2;12084:3;12025:67;:::i;:::-;12018:74;;12101:93;12190:3;12101:93;:::i;:::-;12219:2;12214:3;12210:12;12203:19;;12008:220;;;:::o;12234:366::-;12376:3;12397:67;12461:2;12456:3;12397:67;:::i;:::-;12390:74;;12473:93;12562:3;12473:93;:::i;:::-;12591:2;12586:3;12582:12;12575:19;;12380:220;;;:::o;12606:366::-;12748:3;12769:67;12833:2;12828:3;12769:67;:::i;:::-;12762:74;;12845:93;12934:3;12845:93;:::i;:::-;12963:2;12958:3;12954:12;12947:19;;12752:220;;;:::o;12978:400::-;13138:3;13159:84;13241:1;13236:3;13159:84;:::i;:::-;13152:91;;13252:93;13341:3;13252:93;:::i;:::-;13370:1;13365:3;13361:11;13354:18;;13142:236;;;:::o;13384:366::-;13526:3;13547:67;13611:2;13606:3;13547:67;:::i;:::-;13540:74;;13623:93;13712:3;13623:93;:::i;:::-;13741:2;13736:3;13732:12;13725:19;;13530:220;;;:::o;13756:366::-;13898:3;13919:67;13983:2;13978:3;13919:67;:::i;:::-;13912:74;;13995:93;14084:3;13995:93;:::i;:::-;14113:2;14108:3;14104:12;14097:19;;13902:220;;;:::o;14128:402::-;14288:3;14309:85;14391:2;14386:3;14309:85;:::i;:::-;14302:92;;14403:93;14492:3;14403:93;:::i;:::-;14521:2;14516:3;14512:12;14505:19;;14292:238;;;:::o;14536:402::-;14696:3;14717:85;14799:2;14794:3;14717:85;:::i;:::-;14710:92;;14811:93;14900:3;14811:93;:::i;:::-;14929:2;14924:3;14920:12;14913:19;;14700:238;;;:::o;14944:366::-;15086:3;15107:67;15171:2;15166:3;15107:67;:::i;:::-;15100:74;;15183:93;15272:3;15183:93;:::i;:::-;15301:2;15296:3;15292:12;15285:19;;15090:220;;;:::o;15316:366::-;15458:3;15479:67;15543:2;15538:3;15479:67;:::i;:::-;15472:74;;15555:93;15644:3;15555:93;:::i;:::-;15673:2;15668:3;15664:12;15657:19;;15462:220;;;:::o;15688:366::-;15830:3;15851:67;15915:2;15910:3;15851:67;:::i;:::-;15844:74;;15927:93;16016:3;15927:93;:::i;:::-;16045:2;16040:3;16036:12;16029:19;;15834:220;;;:::o;16060:366::-;16202:3;16223:67;16287:2;16282:3;16223:67;:::i;:::-;16216:74;;16299:93;16388:3;16299:93;:::i;:::-;16417:2;16412:3;16408:12;16401:19;;16206:220;;;:::o;16432:366::-;16574:3;16595:67;16659:2;16654:3;16595:67;:::i;:::-;16588:74;;16671:93;16760:3;16671:93;:::i;:::-;16789:2;16784:3;16780:12;16773:19;;16578:220;;;:::o;16804:400::-;16964:3;16985:84;17067:1;17062:3;16985:84;:::i;:::-;16978:91;;17078:93;17167:3;17078:93;:::i;:::-;17196:1;17191:3;17187:11;17180:18;;16968:236;;;:::o;17210:366::-;17352:3;17373:67;17437:2;17432:3;17373:67;:::i;:::-;17366:74;;17449:93;17538:3;17449:93;:::i;:::-;17567:2;17562:3;17558:12;17551:19;;17356:220;;;:::o;17582:366::-;17724:3;17745:67;17809:2;17804:3;17745:67;:::i;:::-;17738:74;;17821:93;17910:3;17821:93;:::i;:::-;17939:2;17934:3;17930:12;17923:19;;17728:220;;;:::o;17954:366::-;18096:3;18117:67;18181:2;18176:3;18117:67;:::i;:::-;18110:74;;18193:93;18282:3;18193:93;:::i;:::-;18311:2;18306:3;18302:12;18295:19;;18100:220;;;:::o;18326:366::-;18468:3;18489:67;18553:2;18548:3;18489:67;:::i;:::-;18482:74;;18565:93;18654:3;18565:93;:::i;:::-;18683:2;18678:3;18674:12;18667:19;;18472:220;;;:::o;18698:366::-;18840:3;18861:67;18925:2;18920:3;18861:67;:::i;:::-;18854:74;;18937:93;19026:3;18937:93;:::i;:::-;19055:2;19050:3;19046:12;19039:19;;18844:220;;;:::o;19070:398::-;19229:3;19250:83;19331:1;19326:3;19250:83;:::i;:::-;19243:90;;19342:93;19431:3;19342:93;:::i;:::-;19460:1;19455:3;19451:11;19444:18;;19233:235;;;:::o;19474:366::-;19616:3;19637:67;19701:2;19696:3;19637:67;:::i;:::-;19630:74;;19713:93;19802:3;19713:93;:::i;:::-;19831:2;19826:3;19822:12;19815:19;;19620:220;;;:::o;19846:402::-;20006:3;20027:85;20109:2;20104:3;20027:85;:::i;:::-;20020:92;;20121:93;20210:3;20121:93;:::i;:::-;20239:2;20234:3;20230:12;20223:19;;20010:238;;;:::o;20254:402::-;20414:3;20435:85;20517:2;20512:3;20435:85;:::i;:::-;20428:92;;20529:93;20618:3;20529:93;:::i;:::-;20647:2;20642:3;20638:12;20631:19;;20418:238;;;:::o;20662:402::-;20822:3;20843:85;20925:2;20920:3;20843:85;:::i;:::-;20836:92;;20937:93;21026:3;20937:93;:::i;:::-;21055:2;21050:3;21046:12;21039:19;;20826:238;;;:::o;21070:366::-;21212:3;21233:67;21297:2;21292:3;21233:67;:::i;:::-;21226:74;;21309:93;21398:3;21309:93;:::i;:::-;21427:2;21422:3;21418:12;21411:19;;21216:220;;;:::o;21442:366::-;21584:3;21605:67;21669:2;21664:3;21605:67;:::i;:::-;21598:74;;21681:93;21770:3;21681:93;:::i;:::-;21799:2;21794:3;21790:12;21783:19;;21588:220;;;:::o;21814:366::-;21956:3;21977:67;22041:2;22036:3;21977:67;:::i;:::-;21970:74;;22053:93;22142:3;22053:93;:::i;:::-;22171:2;22166:3;22162:12;22155:19;;21960:220;;;:::o;22186:118::-;22273:24;22291:5;22273:24;:::i;:::-;22268:3;22261:37;22251:53;;:::o;22310:157::-;22415:45;22435:24;22453:5;22435:24;:::i;:::-;22415:45;:::i;:::-;22410:3;22403:58;22393:74;;:::o;22473:695::-;22751:3;22773:92;22861:3;22852:6;22773:92;:::i;:::-;22766:99;;22882:95;22973:3;22964:6;22882:95;:::i;:::-;22875:102;;22994:148;23138:3;22994:148;:::i;:::-;22987:155;;23159:3;23152:10;;22755:413;;;;;:::o;23174:4190::-;24677:3;24699:148;24843:3;24699:148;:::i;:::-;24692:155;;24864:95;24955:3;24946:6;24864:95;:::i;:::-;24857:102;;24976:148;25120:3;24976:148;:::i;:::-;24969:155;;25141:95;25232:3;25223:6;25141:95;:::i;:::-;25134:102;;25253:148;25397:3;25253:148;:::i;:::-;25246:155;;25418:95;25509:3;25500:6;25418:95;:::i;:::-;25411:102;;25530:148;25674:3;25530:148;:::i;:::-;25523:155;;25695:95;25786:3;25777:6;25695:95;:::i;:::-;25688:102;;25807:148;25951:3;25807:148;:::i;:::-;25800:155;;25972:92;26060:3;26051:6;25972:92;:::i;:::-;25965:99;;26081:148;26225:3;26081:148;:::i;:::-;26074:155;;26239:75;26310:3;26301:6;26239:75;:::i;:::-;26339:2;26334:3;26330:12;26323:19;;26359:148;26503:3;26359:148;:::i;:::-;26352:155;;26524:95;26615:3;26606:6;26524:95;:::i;:::-;26517:102;;26636:148;26780:3;26636:148;:::i;:::-;26629:155;;26801:95;26892:3;26883:6;26801:95;:::i;:::-;26794:102;;26913:148;27057:3;26913:148;:::i;:::-;26906:155;;27078:95;27169:3;27160:6;27078:95;:::i;:::-;27071:102;;27190:148;27334:3;27190:148;:::i;:::-;27183:155;;27355:3;27348:10;;24681:2683;;;;;;;;;;;;:::o;27370:379::-;27554:3;27576:147;27719:3;27576:147;:::i;:::-;27569:154;;27740:3;27733:10;;27558:191;;;:::o;27755:222::-;27848:4;27886:2;27875:9;27871:18;27863:26;;27899:71;27967:1;27956:9;27952:17;27943:6;27899:71;:::i;:::-;27853:124;;;;:::o;27983:640::-;28178:4;28216:3;28205:9;28201:19;28193:27;;28230:71;28298:1;28287:9;28283:17;28274:6;28230:71;:::i;:::-;28311:72;28379:2;28368:9;28364:18;28355:6;28311:72;:::i;:::-;28393;28461:2;28450:9;28446:18;28437:6;28393:72;:::i;:::-;28512:9;28506:4;28502:20;28497:2;28486:9;28482:18;28475:48;28540:76;28611:4;28602:6;28540:76;:::i;:::-;28532:84;;28183:440;;;;;;;:::o;28629:210::-;28716:4;28754:2;28743:9;28739:18;28731:26;;28767:65;28829:1;28818:9;28814:17;28805:6;28767:65;:::i;:::-;28721:118;;;;:::o;28845:313::-;28958:4;28996:2;28985:9;28981:18;28973:26;;29045:9;29039:4;29035:20;29031:1;29020:9;29016:17;29009:47;29073:78;29146:4;29137:6;29073:78;:::i;:::-;29065:86;;28963:195;;;;:::o;29164:419::-;29330:4;29368:2;29357:9;29353:18;29345:26;;29417:9;29411:4;29407:20;29403:1;29392:9;29388:17;29381:47;29445:131;29571:4;29445:131;:::i;:::-;29437:139;;29335:248;;;:::o;29589:419::-;29755:4;29793:2;29782:9;29778:18;29770:26;;29842:9;29836:4;29832:20;29828:1;29817:9;29813:17;29806:47;29870:131;29996:4;29870:131;:::i;:::-;29862:139;;29760:248;;;:::o;30014:419::-;30180:4;30218:2;30207:9;30203:18;30195:26;;30267:9;30261:4;30257:20;30253:1;30242:9;30238:17;30231:47;30295:131;30421:4;30295:131;:::i;:::-;30287:139;;30185:248;;;:::o;30439:419::-;30605:4;30643:2;30632:9;30628:18;30620:26;;30692:9;30686:4;30682:20;30678:1;30667:9;30663:17;30656:47;30720:131;30846:4;30720:131;:::i;:::-;30712:139;;30610:248;;;:::o;30864:419::-;31030:4;31068:2;31057:9;31053:18;31045:26;;31117:9;31111:4;31107:20;31103:1;31092:9;31088:17;31081:47;31145:131;31271:4;31145:131;:::i;:::-;31137:139;;31035:248;;;:::o;31289:419::-;31455:4;31493:2;31482:9;31478:18;31470:26;;31542:9;31536:4;31532:20;31528:1;31517:9;31513:17;31506:47;31570:131;31696:4;31570:131;:::i;:::-;31562:139;;31460:248;;;:::o;31714:419::-;31880:4;31918:2;31907:9;31903:18;31895:26;;31967:9;31961:4;31957:20;31953:1;31942:9;31938:17;31931:47;31995:131;32121:4;31995:131;:::i;:::-;31987:139;;31885:248;;;:::o;32139:419::-;32305:4;32343:2;32332:9;32328:18;32320:26;;32392:9;32386:4;32382:20;32378:1;32367:9;32363:17;32356:47;32420:131;32546:4;32420:131;:::i;:::-;32412:139;;32310:248;;;:::o;32564:419::-;32730:4;32768:2;32757:9;32753:18;32745:26;;32817:9;32811:4;32807:20;32803:1;32792:9;32788:17;32781:47;32845:131;32971:4;32845:131;:::i;:::-;32837:139;;32735:248;;;:::o;32989:419::-;33155:4;33193:2;33182:9;33178:18;33170:26;;33242:9;33236:4;33232:20;33228:1;33217:9;33213:17;33206:47;33270:131;33396:4;33270:131;:::i;:::-;33262:139;;33160:248;;;:::o;33414:419::-;33580:4;33618:2;33607:9;33603:18;33595:26;;33667:9;33661:4;33657:20;33653:1;33642:9;33638:17;33631:47;33695:131;33821:4;33695:131;:::i;:::-;33687:139;;33585:248;;;:::o;33839:419::-;34005:4;34043:2;34032:9;34028:18;34020:26;;34092:9;34086:4;34082:20;34078:1;34067:9;34063:17;34056:47;34120:131;34246:4;34120:131;:::i;:::-;34112:139;;34010:248;;;:::o;34264:419::-;34430:4;34468:2;34457:9;34453:18;34445:26;;34517:9;34511:4;34507:20;34503:1;34492:9;34488:17;34481:47;34545:131;34671:4;34545:131;:::i;:::-;34537:139;;34435:248;;;:::o;34689:419::-;34855:4;34893:2;34882:9;34878:18;34870:26;;34942:9;34936:4;34932:20;34928:1;34917:9;34913:17;34906:47;34970:131;35096:4;34970:131;:::i;:::-;34962:139;;34860:248;;;:::o;35114:419::-;35280:4;35318:2;35307:9;35303:18;35295:26;;35367:9;35361:4;35357:20;35353:1;35342:9;35338:17;35331:47;35395:131;35521:4;35395:131;:::i;:::-;35387:139;;35285:248;;;:::o;35539:419::-;35705:4;35743:2;35732:9;35728:18;35720:26;;35792:9;35786:4;35782:20;35778:1;35767:9;35763:17;35756:47;35820:131;35946:4;35820:131;:::i;:::-;35812:139;;35710:248;;;:::o;35964:419::-;36130:4;36168:2;36157:9;36153:18;36145:26;;36217:9;36211:4;36207:20;36203:1;36192:9;36188:17;36181:47;36245:131;36371:4;36245:131;:::i;:::-;36237:139;;36135:248;;;:::o;36389:419::-;36555:4;36593:2;36582:9;36578:18;36570:26;;36642:9;36636:4;36632:20;36628:1;36617:9;36613:17;36606:47;36670:131;36796:4;36670:131;:::i;:::-;36662:139;;36560:248;;;:::o;36814:419::-;36980:4;37018:2;37007:9;37003:18;36995:26;;37067:9;37061:4;37057:20;37053:1;37042:9;37038:17;37031:47;37095:131;37221:4;37095:131;:::i;:::-;37087:139;;36985:248;;;:::o;37239:419::-;37405:4;37443:2;37432:9;37428:18;37420:26;;37492:9;37486:4;37482:20;37478:1;37467:9;37463:17;37456:47;37520:131;37646:4;37520:131;:::i;:::-;37512:139;;37410:248;;;:::o;37664:419::-;37830:4;37868:2;37857:9;37853:18;37845:26;;37917:9;37911:4;37907:20;37903:1;37892:9;37888:17;37881:47;37945:131;38071:4;37945:131;:::i;:::-;37937:139;;37835:248;;;:::o;38089:419::-;38255:4;38293:2;38282:9;38278:18;38270:26;;38342:9;38336:4;38332:20;38328:1;38317:9;38313:17;38306:47;38370:131;38496:4;38370:131;:::i;:::-;38362:139;;38260:248;;;:::o;38514:419::-;38680:4;38718:2;38707:9;38703:18;38695:26;;38767:9;38761:4;38757:20;38753:1;38742:9;38738:17;38731:47;38795:131;38921:4;38795:131;:::i;:::-;38787:139;;38685:248;;;:::o;38939:222::-;39032:4;39070:2;39059:9;39055:18;39047:26;;39083:71;39151:1;39140:9;39136:17;39127:6;39083:71;:::i;:::-;39037:124;;;;:::o;39167:129::-;39201:6;39228:20;;:::i;:::-;39218:30;;39257:33;39285:4;39277:6;39257:33;:::i;:::-;39208:88;;;:::o;39302:75::-;39335:6;39368:2;39362:9;39352:19;;39342:35;:::o;39383:307::-;39444:4;39534:18;39526:6;39523:30;39520:2;;;39556:18;;:::i;:::-;39520:2;39594:29;39616:6;39594:29;:::i;:::-;39586:37;;39678:4;39672;39668:15;39660:23;;39449:241;;;:::o;39696:141::-;39745:4;39768:3;39760:11;;39791:3;39788:1;39781:14;39825:4;39822:1;39812:18;39804:26;;39750:87;;;:::o;39843:98::-;39894:6;39928:5;39922:12;39912:22;;39901:40;;;:::o;39947:99::-;39999:6;40033:5;40027:12;40017:22;;40006:40;;;:::o;40052:168::-;40135:11;40169:6;40164:3;40157:19;40209:4;40204:3;40200:14;40185:29;;40147:73;;;;:::o;40226:147::-;40327:11;40364:3;40349:18;;40339:34;;;;:::o;40379:169::-;40463:11;40497:6;40492:3;40485:19;40537:4;40532:3;40528:14;40513:29;;40475:73;;;;:::o;40554:148::-;40656:11;40693:3;40678:18;;40668:34;;;;:::o;40708:305::-;40748:3;40767:20;40785:1;40767:20;:::i;:::-;40762:25;;40801:20;40819:1;40801:20;:::i;:::-;40796:25;;40955:1;40887:66;40883:74;40880:1;40877:81;40874:2;;;40961:18;;:::i;:::-;40874:2;41005:1;41002;40998:9;40991:16;;40752:261;;;;:::o;41019:185::-;41059:1;41076:20;41094:1;41076:20;:::i;:::-;41071:25;;41110:20;41128:1;41110:20;:::i;:::-;41105:25;;41149:1;41139:2;;41154:18;;:::i;:::-;41139:2;41196:1;41193;41189:9;41184:14;;41061:143;;;;:::o;41210:348::-;41250:7;41273:20;41291:1;41273:20;:::i;:::-;41268:25;;41307:20;41325:1;41307:20;:::i;:::-;41302:25;;41495:1;41427:66;41423:74;41420:1;41417:81;41412:1;41405:9;41398:17;41394:105;41391:2;;;41502:18;;:::i;:::-;41391:2;41550:1;41547;41543:9;41532:20;;41258:300;;;;:::o;41564:191::-;41604:4;41624:20;41642:1;41624:20;:::i;:::-;41619:25;;41658:20;41676:1;41658:20;:::i;:::-;41653:25;;41697:1;41694;41691:8;41688:2;;;41702:18;;:::i;:::-;41688:2;41747:1;41744;41740:9;41732:17;;41609:146;;;;:::o;41761:96::-;41798:7;41827:24;41845:5;41827:24;:::i;:::-;41816:35;;41806:51;;;:::o;41863:90::-;41897:7;41940:5;41933:13;41926:21;41915:32;;41905:48;;;:::o;41959:149::-;41995:7;42035:66;42028:5;42024:78;42013:89;;42003:105;;;:::o;42114:126::-;42151:7;42191:42;42184:5;42180:54;42169:65;;42159:81;;;:::o;42246:77::-;42283:7;42312:5;42301:16;;42291:32;;;:::o;42329:154::-;42413:6;42408:3;42403;42390:30;42475:1;42466:6;42461:3;42457:16;42450:27;42380:103;;;:::o;42489:307::-;42557:1;42567:113;42581:6;42578:1;42575:13;42567:113;;;42666:1;42661:3;42657:11;42651:18;42647:1;42642:3;42638:11;42631:39;42603:2;42600:1;42596:10;42591:15;;42567:113;;;42698:6;42695:1;42692:13;42689:2;;;42778:1;42769:6;42764:3;42760:16;42753:27;42689:2;42538:258;;;;:::o;42802:320::-;42846:6;42883:1;42877:4;42873:12;42863:22;;42930:1;42924:4;42920:12;42951:18;42941:2;;43007:4;42999:6;42995:17;42985:27;;42941:2;43069;43061:6;43058:14;43038:18;43035:38;43032:2;;;43088:18;;:::i;:::-;43032:2;42853:269;;;;:::o;43128:281::-;43211:27;43233:4;43211:27;:::i;:::-;43203:6;43199:40;43341:6;43329:10;43326:22;43305:18;43293:10;43290:34;43287:62;43284:2;;;43352:18;;:::i;:::-;43284:2;43392:10;43388:2;43381:22;43171:238;;;:::o;43415:233::-;43454:3;43477:24;43495:5;43477:24;:::i;:::-;43468:33;;43523:66;43516:5;43513:77;43510:2;;;43593:18;;:::i;:::-;43510:2;43640:1;43633:5;43629:13;43622:20;;43458:190;;;:::o;43654:79::-;43693:7;43722:5;43711:16;;43701:32;;;:::o;43739:176::-;43771:1;43788:20;43806:1;43788:20;:::i;:::-;43783:25;;43822:20;43840:1;43822:20;:::i;:::-;43817:25;;43861:1;43851:2;;43866:18;;:::i;:::-;43851:2;43907:1;43904;43900:9;43895:14;;43773:142;;;;:::o;43921:180::-;43969:77;43966:1;43959:88;44066:4;44063:1;44056:15;44090:4;44087:1;44080:15;44107:180;44155:77;44152:1;44145:88;44252:4;44249:1;44242:15;44276:4;44273:1;44266:15;44293:180;44341:77;44338:1;44331:88;44438:4;44435:1;44428:15;44462:4;44459:1;44452:15;44479:180;44527:77;44524:1;44517:88;44624:4;44621:1;44614:15;44648:4;44645:1;44638:15;44665:102;44706:6;44757:2;44753:7;44748:2;44741:5;44737:14;44733:28;44723:38;;44713:54;;;:::o;44773:214::-;44913:66;44909:1;44901:6;44897:14;44890:90;44879:108;:::o;44993:214::-;45133:66;45129:1;45121:6;45117:14;45110:90;45099:108;:::o;45213:214::-;45353:66;45349:1;45341:6;45337:14;45330:90;45319:108;:::o;45433:237::-;45573:34;45569:1;45561:6;45557:14;45550:58;45642:20;45637:2;45629:6;45625:15;45618:45;45539:131;:::o;45676:225::-;45816:34;45812:1;45804:6;45800:14;45793:58;45885:8;45880:2;45872:6;45868:15;45861:33;45782:119;:::o;45907:162::-;46047:14;46043:1;46035:6;46031:14;46024:38;46013:56;:::o;46075:178::-;46215:30;46211:1;46203:6;46199:14;46192:54;46181:72;:::o;46259:214::-;46399:66;46395:1;46387:6;46383:14;46376:90;46365:108;:::o;46479:223::-;46619:34;46615:1;46607:6;46603:14;46596:58;46688:6;46683:2;46675:6;46671:15;46664:31;46585:117;:::o;46708:175::-;46848:27;46844:1;46836:6;46832:14;46825:51;46814:69;:::o;46889:162::-;47029:14;47025:1;47017:6;47013:14;47006:38;46995:56;:::o;47057:214::-;47197:66;47193:1;47185:6;47181:14;47174:90;47163:108;:::o;47277:161::-;47417:13;47413:1;47405:6;47401:14;47394:37;47383:55;:::o;47444:231::-;47584:34;47580:1;47572:6;47568:14;47561:58;47653:14;47648:2;47640:6;47636:15;47629:39;47550:125;:::o;47681:214::-;47821:66;47817:1;47809:6;47805:14;47798:90;47787:108;:::o;47901:214::-;48041:66;48037:1;48029:6;48025:14;48018:90;48007:108;:::o;48121:243::-;48261:34;48257:1;48249:6;48245:14;48238:58;48330:26;48325:2;48317:6;48313:15;48306:51;48227:137;:::o;48370:229::-;48510:34;48506:1;48498:6;48494:14;48487:58;48579:12;48574:2;48566:6;48562:15;48555:37;48476:123;:::o;48605:228::-;48745:34;48741:1;48733:6;48729:14;48722:58;48814:11;48809:2;48801:6;48797:15;48790:36;48711:122;:::o;48839:182::-;48979:34;48975:1;48967:6;48963:14;48956:58;48945:76;:::o;49027:231::-;49167:34;49163:1;49155:6;49151:14;49144:58;49236:14;49231:2;49223:6;49219:15;49212:39;49133:125;:::o;49264:155::-;49404:7;49400:1;49392:6;49388:14;49381:31;49370:49;:::o;49425:182::-;49565:34;49561:1;49553:6;49549:14;49542:58;49531:76;:::o;49613:228::-;49753:34;49749:1;49741:6;49737:14;49730:58;49822:11;49817:2;49809:6;49805:15;49798:36;49719:122;:::o;49847:181::-;49987:33;49983:1;49975:6;49971:14;49964:57;49953:75;:::o;50034:220::-;50174:34;50170:1;50162:6;50158:14;50151:58;50243:3;50238:2;50230:6;50226:15;50219:28;50140:114;:::o;50260:175::-;50400:27;50396:1;50388:6;50384:14;50377:51;50366:69;:::o;50441:114::-;50547:8;:::o;50561:236::-;50701:34;50697:1;50689:6;50685:14;50678:58;50770:19;50765:2;50757:6;50753:15;50746:44;50667:130;:::o;50803:214::-;50943:66;50939:1;50931:6;50927:14;50920:90;50909:108;:::o;51023:214::-;51163:66;51159:1;51151:6;51147:14;51140:90;51129:108;:::o;51243:214::-;51383:66;51379:1;51371:6;51367:14;51360:90;51349:108;:::o;51463:170::-;51603:22;51599:1;51591:6;51587:14;51580:46;51569:64;:::o;51639:166::-;51779:18;51775:1;51767:6;51763:14;51756:42;51745:60;:::o;51811:164::-;51951:16;51947:1;51939:6;51935:14;51928:40;51917:58;:::o;51981:122::-;52054:24;52072:5;52054:24;:::i;:::-;52047:5;52044:35;52034:2;;52093:1;52090;52083:12;52034:2;52024:79;:::o;52109:116::-;52179:21;52194:5;52179:21;:::i;:::-;52172:5;52169:32;52159:2;;52215:1;52212;52205:12;52159:2;52149:76;:::o;52231:120::-;52303:23;52320:5;52303:23;:::i;:::-;52296:5;52293:34;52283:2;;52341:1;52338;52331:12;52283:2;52273:78;:::o;52357:122::-;52430:24;52448:5;52430:24;:::i;:::-;52423:5;52420:35;52410:2;;52469:1;52466;52459:12;52410:2;52400:79;:::o
Swarm Source
ipfs://54f70a700f9ab1927dc48f6d7b90f925bc8934ffa42cd9aa42300f56ea2530a4
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
POL | 100.00% | $0.496542 | 0.301 | $0.149459 |
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.