ERC-721
NFT
Overview
Max Total Supply
8,888 SPR
Holders
3,281
Market
Volume (24H)
1.8494 ETH
Min Price (24H)
$83.82 @ 0.025000 ETH
Max Price (24H)
$251.46 @ 0.075000 ETH
Other Info
Token Contract
Balance
20 SPRLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
SpaceRiders
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-03-17 */ // SPDX-License-Identifier: MIT // File: @openzeppelin/contracts/utils/cryptography/MerkleProof.sol // OpenZeppelin Contracts (last updated v4.5.0) (utils/cryptography/MerkleProof.sol) pragma solidity ^0.8.0; /** * @dev These functions deal with verification of Merkle Trees proofs. * * The proofs can be generated using the JavaScript library * https://github.com/miguelmota/merkletreejs[merkletreejs]. * Note: the hashing algorithm should be keccak256 and pair sorting should be enabled. * * See `test/utils/cryptography/MerkleProof.test.js` for some examples. */ library MerkleProof { /** * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree * defined by `root`. For this, a `proof` must be provided, containing * sibling hashes on the branch from the leaf to the root of the tree. Each * pair of leaves and each pair of pre-images are assumed to be sorted. */ function verify( bytes32[] memory proof, bytes32 root, bytes32 leaf ) internal pure returns (bool) { return processProof(proof, leaf) == root; } /** * @dev Returns the rebuilt hash obtained by traversing a Merklee tree up * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt * hash matches the root of the tree. When processing the proof, the pairs * of leafs & pre-images are assumed to be sorted. * * _Available since v4.4._ */ function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) { bytes32 computedHash = leaf; for (uint256 i = 0; i < proof.length; i++) { bytes32 proofElement = proof[i]; if (computedHash <= proofElement) { // Hash(current computed hash + current element of the proof) computedHash = _efficientHash(computedHash, proofElement); } else { // Hash(current element of the proof + current computed hash) computedHash = _efficientHash(proofElement, computedHash); } } return computedHash; } function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) { assembly { mstore(0x00, a) mstore(0x20, b) value := keccak256(0x00, 0x40) } } } // 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/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 (last updated v4.5.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require( address(this).balance >= amount, "Address: insufficient balance" ); (bool success, ) = recipient.call{value: amount}(""); require( success, "Address: unable to send value, recipient may have reverted" ); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return 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/IERC721Enumerable.sol // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/extensions/IERC721Enumerable.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol // 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: contracts/ERC721A.sol // Creator: Chiru Labs // v3.0.0 pragma solidity ^0.8.4; error ApprovalCallerNotOwnerNorApproved(); error ApprovalQueryForNonexistentToken(); error ApproveToCaller(); error ApprovalToCurrentOwner(); error BalanceQueryForZeroAddress(); error MintedQueryForZeroAddress(); error BurnedQueryForZeroAddress(); error AuxQueryForZeroAddress(); error MintToZeroAddress(); error MintZeroQuantity(); error OwnerIndexOutOfBounds(); error OwnerQueryForNonexistentToken(); error TokenIndexOutOfBounds(); error TransferCallerNotOwnerNorApproved(); error TransferFromIncorrectOwner(); error TransferToNonERC721ReceiverImplementer(); error TransferToZeroAddress(); error URIQueryForNonexistentToken(); /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension. Built to optimize for lower gas during batch mints. * * Assumes serials are sequentially minted starting at _startTokenId() (defaults to 0, e.g. 0, 1, 2, 3..). * * Assumes that an owner cannot have more than 2**64 - 1 (max value of uint64) of supply. * * Assumes that the maximum token id cannot exceed 2**256 - 1 (max value of uint256). */ contract ERC721A is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Compiler will pack this into a single 256bit word. struct TokenOwnership { // The address of the owner. address addr; // Keeps track of the start time of ownership with minimal overhead for tokenomics. uint64 startTimestamp; // Whether the token has been burned. bool burned; } // Compiler will pack this into a single 256bit word. struct AddressData { // Realistically, 2**64-1 is more than enough. uint64 balance; // Keeps track of mint count with minimal overhead for tokenomics. uint64 numberMinted; // Keeps track of burn count with minimal overhead for tokenomics. uint64 numberBurned; // For miscellaneous variable(s) pertaining to the address // (e.g. number of whitelist mint slots used). // If there are multiple variables, please pack them into a uint64. uint64 aux; } // The tokenId of the next token to be minted. uint256 internal _currentIndex; // The number of tokens burned. uint256 internal _burnCounter; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to ownership details // An empty struct value does not necessarily mean the token is unowned. See ownershipOf implementation for details. mapping(uint256 => TokenOwnership) internal _ownerships; // Mapping owner address to address data mapping(address => AddressData) private _addressData; // 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; constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; _currentIndex = _startTokenId(); } /** * To change the starting tokenId, please override this function. */ function _startTokenId() internal view virtual returns (uint256) { return 0; } /** * @dev See {IERC721Enumerable-totalSupply}. * @dev Burned tokens are calculated here, use _totalMinted() if you want to count just minted tokens. */ function totalSupply() public view returns (uint256) { // Counter underflow is impossible as _burnCounter cannot be incremented // more than _currentIndex - _startTokenId() times unchecked { return _currentIndex - _burnCounter - _startTokenId(); } } /** * Returns the total amount of tokens minted in the contract. */ function _totalMinted() internal view returns (uint256) { // Counter underflow is impossible as _currentIndex does not decrement, // and it is initialized to _startTokenId() unchecked { return _currentIndex - _startTokenId(); } } /** * @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 override returns (uint256) { if (owner == address(0)) revert BalanceQueryForZeroAddress(); return uint256(_addressData[owner].balance); } /** * Returns the number of tokens minted by `owner`. */ function _numberMinted(address owner) internal view returns (uint256) { if (owner == address(0)) revert MintedQueryForZeroAddress(); return uint256(_addressData[owner].numberMinted); } /** * Returns the number of tokens burned by or on behalf of `owner`. */ function _numberBurned(address owner) internal view returns (uint256) { if (owner == address(0)) revert BurnedQueryForZeroAddress(); return uint256(_addressData[owner].numberBurned); } /** * Returns the auxillary data for `owner`. (e.g. number of whitelist mint slots used). */ function _getAux(address owner) internal view returns (uint64) { if (owner == address(0)) revert AuxQueryForZeroAddress(); return _addressData[owner].aux; } /** * Sets the auxillary data for `owner`. (e.g. number of whitelist mint slots used). * If there are multiple variables, please pack them into a uint64. */ function _setAux(address owner, uint64 aux) internal { if (owner == address(0)) revert AuxQueryForZeroAddress(); _addressData[owner].aux = aux; } /** * Gas spent here starts off proportional to the maximum mint batch size. * It gradually moves to O(1) as tokens get transferred around in the collection over time. */ function ownershipOf(uint256 tokenId) internal view returns (TokenOwnership memory) { uint256 curr = tokenId; unchecked { if (_startTokenId() <= curr && curr < _currentIndex) { TokenOwnership memory ownership = _ownerships[curr]; if (!ownership.burned) { if (ownership.addr != address(0)) { return ownership; } // Invariant: // There will always be an ownership that has an address and is not burned // before an ownership that does not have an address and is not burned. // Hence, curr will not underflow. while (true) { curr--; ownership = _ownerships[curr]; if (ownership.addr != address(0)) { return ownership; } } } } } revert OwnerQueryForNonexistentToken(); } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view override returns (address) { return ownershipOf(tokenId).addr; } /** * @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) { if (!_exists(tokenId)) revert URIQueryForNonexistentToken(); 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 override { address owner = ERC721A.ownerOf(tokenId); if (to == owner) revert ApprovalToCurrentOwner(); if (_msgSender() != owner && !isApprovedForAll(owner, _msgSender())) { revert ApprovalCallerNotOwnerNorApproved(); } _approve(to, tokenId, owner); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view override returns (address) { if (!_exists(tokenId)) revert ApprovalQueryForNonexistentToken(); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public override { if (operator == _msgSender()) revert ApproveToCaller(); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { _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 { _transfer(from, to, tokenId); if ( to.isContract() && !_checkContractOnERC721Received(from, to, tokenId, _data) ) { revert TransferToNonERC721ReceiverImplementer(); } } /** * @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`), */ function _exists(uint256 tokenId) internal view returns (bool) { return _startTokenId() <= tokenId && tokenId < _currentIndex && !_ownerships[tokenId].burned; } function _safeMint(address to, uint256 quantity) internal { _safeMint(to, quantity, ""); } /** * @dev Safely mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called for each safe transfer. * - `quantity` must be greater than 0. * * Emits a {Transfer} event. */ function _safeMint( address to, uint256 quantity, bytes memory _data ) internal { _mint(to, quantity, _data, true); } /** * @dev Mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - `to` cannot be the zero address. * - `quantity` must be greater than 0. * * Emits a {Transfer} event. */ function _mint( address to, uint256 quantity, bytes memory _data, bool safe ) internal { uint256 startTokenId = _currentIndex; if (to == address(0)) revert MintToZeroAddress(); if (quantity == 0) revert MintZeroQuantity(); _beforeTokenTransfers(address(0), to, startTokenId, quantity); // Overflows are incredibly unrealistic. // balance or numberMinted overflow if current value of either + quantity > 1.8e19 (2**64) - 1 // updatedIndex overflows if _currentIndex + quantity > 1.2e77 (2**256) - 1 unchecked { _addressData[to].balance += uint64(quantity); _addressData[to].numberMinted += uint64(quantity); _ownerships[startTokenId].addr = to; _ownerships[startTokenId].startTimestamp = uint64(block.timestamp); uint256 updatedIndex = startTokenId; uint256 end = updatedIndex + quantity; if (safe && to.isContract()) { do { emit Transfer(address(0), to, updatedIndex); if ( !_checkContractOnERC721Received( address(0), to, updatedIndex++, _data ) ) { revert TransferToNonERC721ReceiverImplementer(); } } while (updatedIndex != end); // Reentrancy protection if (_currentIndex != startTokenId) revert(); } else { do { emit Transfer(address(0), to, updatedIndex++); } while (updatedIndex != end); } _currentIndex = updatedIndex; } _afterTokenTransfers(address(0), to, startTokenId, quantity); } /** * @dev Transfers `tokenId` from `from` to `to`. * * 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 ) private { TokenOwnership memory prevOwnership = ownershipOf(tokenId); bool isApprovedOrOwner = (_msgSender() == prevOwnership.addr || isApprovedForAll(prevOwnership.addr, _msgSender()) || getApproved(tokenId) == _msgSender()); if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved(); if (prevOwnership.addr != from) revert TransferFromIncorrectOwner(); if (to == address(0)) revert TransferToZeroAddress(); _beforeTokenTransfers(from, to, tokenId, 1); // Clear approvals from the previous owner _approve(address(0), tokenId, prevOwnership.addr); // Underflow of the sender's balance is impossible because we check for // ownership above and the recipient's balance can't realistically overflow. // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256. unchecked { _addressData[from].balance -= 1; _addressData[to].balance += 1; _ownerships[tokenId].addr = to; _ownerships[tokenId].startTimestamp = uint64(block.timestamp); // If the ownership slot of tokenId+1 is not explicitly set, that means the transfer initiator owns it. // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls. uint256 nextTokenId = tokenId + 1; if (_ownerships[nextTokenId].addr == address(0)) { // This will suffice for checking _exists(nextTokenId), // as a burned slot cannot contain the zero address. if (nextTokenId < _currentIndex) { _ownerships[nextTokenId].addr = prevOwnership.addr; _ownerships[nextTokenId].startTimestamp = prevOwnership .startTimestamp; } } } emit Transfer(from, to, tokenId); _afterTokenTransfers(from, to, tokenId, 1); } /** * @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 { TokenOwnership memory prevOwnership = ownershipOf(tokenId); _beforeTokenTransfers(prevOwnership.addr, address(0), tokenId, 1); // Clear approvals from the previous owner _approve(address(0), tokenId, prevOwnership.addr); // Underflow of the sender's balance is impossible because we check for // ownership above and the recipient's balance can't realistically overflow. // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256. unchecked { _addressData[prevOwnership.addr].balance -= 1; _addressData[prevOwnership.addr].numberBurned += 1; // Keep track of who burned the token, and the timestamp of burning. _ownerships[tokenId].addr = prevOwnership.addr; _ownerships[tokenId].startTimestamp = uint64(block.timestamp); _ownerships[tokenId].burned = true; // If the ownership slot of tokenId+1 is not explicitly set, that means the burn initiator owns it. // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls. uint256 nextTokenId = tokenId + 1; if (_ownerships[nextTokenId].addr == address(0)) { // This will suffice for checking _exists(nextTokenId), // as a burned slot cannot contain the zero address. if (nextTokenId < _currentIndex) { _ownerships[nextTokenId].addr = prevOwnership.addr; _ownerships[nextTokenId].startTimestamp = prevOwnership .startTimestamp; } } } emit Transfer(prevOwnership.addr, address(0), tokenId); _afterTokenTransfers(prevOwnership.addr, address(0), tokenId, 1); // Overflow not possible, as _burnCounter cannot be exceed _currentIndex times. unchecked { _burnCounter++; } } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve( address to, uint256 tokenId, address owner ) private { _tokenApprovals[tokenId] = to; emit Approval(owner, to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target 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 _checkContractOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { try IERC721Receiver(to).onERC721Received( _msgSender(), from, tokenId, _data ) returns (bytes4 retval) { return retval == IERC721Receiver(to).onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert TransferToNonERC721ReceiverImplementer(); } else { assembly { revert(add(32, reason), mload(reason)) } } } } /** * @dev Hook that is called before a set of serially-ordered token ids are about to be transferred. This includes minting. * And also called before burning one token. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * 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, `tokenId` will be burned by `from`. * - `from` and `to` are never both zero. */ function _beforeTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} /** * @dev Hook that is called after a set of serially-ordered token ids have been transferred. This includes * minting. * And also called after one token has been burned. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * Calling conditions: * * - When `from` and `to` are both non-zero, `from`'s `tokenId` has been * transferred to `to`. * - When `from` is zero, `tokenId` has been minted for `to`. * - When `to` is zero, `tokenId` has been burned by `from`. * - `from` and `to` are never both zero. */ function _afterTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} } // File: contracts/SpaceRiders.sol pragma solidity >=0.8.0 <0.9.0; interface StarToken { function updateRewardOnMint(address _to, uint256 _amount) external; function updateReward(address _from, address _to) external; function getReward(address _to) external; function spend(address _from, uint256 _amount) external; } contract SpaceRiders is ERC721A, Ownable { using Strings for uint256; using MerkleProof for bytes32[]; bytes32 merkleRoot; string public baseURI; string public notRevealedUri; bool public isPaused = true; bool public isRevealed = false; bool public isOnlyWhitelisted = true; uint256 public constant MAX_SUPPLY = 8888; uint256 public constant WHITELIST_MAX_MINT_AMOUNT = 2; uint256 public constant WHITELIST_MAX_TX_MINT_AMOUNT = 2; uint256 public constant MAX_TX_MINT_AMOUNT = 2; uint256 public maxMintAmount = 4; uint256 public cost = 0.05 ether; uint256 public marketingSupply = 100; StarToken public starToken; event NewSpaceRiderMinted(address sender, uint256 mintAmount); constructor( string memory _name, string memory _symbol, string memory _initNotRevealedUri ) ERC721A(_name, _symbol) { setNotRevealedURI(_initNotRevealedUri); } modifier mustPassChecks(uint256 _mintAmount) { require( (!isPaused || msg.sender == owner()) && _mintAmount > 0 && (_mintAmount <= MAX_TX_MINT_AMOUNT) && totalSupply() + _mintAmount <= MAX_SUPPLY - marketingSupply, isPaused ? "Sale is paused" : ( _mintAmount == 0 ? "You need to mint at least 1" : ( _mintAmount > MAX_TX_MINT_AMOUNT ? "Max transaction mint amount exceed" : "Supply limit exceeded" ) ) ); if (isOnlyWhitelisted == true) { require( _mintAmount <= WHITELIST_MAX_TX_MINT_AMOUNT && _numberMinted(msg.sender) + _mintAmount <= WHITELIST_MAX_MINT_AMOUNT, _mintAmount > WHITELIST_MAX_TX_MINT_AMOUNT ? "Whitelist max transaction mint amount exceed" : "Whitelist max mint amount exceed" ); } else { require( _numberMinted(msg.sender) + _mintAmount <= maxMintAmount, "Max mint amount exceed" ); } require( msg.value >= cost * _mintAmount || msg.sender == owner(), "Insufficient funds" ); _; } function _startTokenId() internal view virtual override returns (uint256) { return 1; } function _baseURI() internal view virtual override returns (string memory) { return baseURI; } function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId)); if (isRevealed == false) { return notRevealedUri; } string memory currentBaseURI = _baseURI(); return bytes(currentBaseURI).length > 0 ? string( abi.encodePacked( currentBaseURI, tokenId.toString(), ".json" ) ) : ""; } function _processMint(uint256 _mintAmount) internal { _safeMint(msg.sender, _mintAmount); emit NewSpaceRiderMinted(msg.sender, _mintAmount); starToken.updateRewardOnMint(msg.sender, _mintAmount); } function mint(uint256 _mintAmount) public payable mustPassChecks(_mintAmount) { require( isOnlyWhitelisted == false || msg.sender == owner(), "Whitelist only" ); _processMint(_mintAmount); } function presaleMint(uint256 _mintAmount, bytes32[] memory proof) public payable mustPassChecks(_mintAmount) { require( (isOnlyWhitelisted == true && proof.verify( merkleRoot, keccak256(abi.encodePacked(msg.sender)) )) || msg.sender == owner(), !isOnlyWhitelisted ? "Whitelist sale ended" : "Not whitelisted" ); _processMint(_mintAmount); } function walletOfOwner(address _owner) public view returns (uint256[] memory) { uint256 ownerTokenCount = balanceOf(_owner); uint256[] memory ownedTokenIds = new uint256[](ownerTokenCount); uint256 currentTokenId = _startTokenId(); uint256 ownedTokenIndex = 0; address latestOwnerAddress; while ( ownedTokenIndex < ownerTokenCount && currentTokenId <= MAX_SUPPLY ) { TokenOwnership memory ownership = _ownerships[currentTokenId]; if (!ownership.burned && ownership.addr != address(0)) { latestOwnerAddress = ownership.addr; } if (latestOwnerAddress == _owner) { ownedTokenIds[ownedTokenIndex] = currentTokenId; ownedTokenIndex++; } currentTokenId++; } return ownedTokenIds; } function mintedTotalOf(address _owner) public view returns (uint256) { return _numberMinted(_owner); } function toggleIsPaused() public onlyOwner { isPaused = !isPaused; } function toggleIsOnlyWhitelisted() public onlyOwner { isOnlyWhitelisted = !isOnlyWhitelisted; } function toggleIsRevealed() public onlyOwner { if (!isRevealed) require(bytes(baseURI).length > 0, "BaseURI not set"); isRevealed = !isRevealed; } function setToken(address _contract) external onlyOwner { starToken = StarToken(_contract); } function setCost(uint256 _newCost) public onlyOwner { cost = _newCost; } function setMaxMintAmount(uint256 _newMaxMintAmount) public onlyOwner { maxMintAmount = _newMaxMintAmount; } function setMarketingSupply(uint256 _newMarketingSupply) public onlyOwner { require( _newMarketingSupply <= MAX_SUPPLY - totalSupply(), "Must be less than remaining supply" ); marketingSupply = _newMarketingSupply; } function setMerkleRoot(bytes32 root) public onlyOwner { merkleRoot = root; } function setNotRevealedURI(string memory _notRevealedURI) public onlyOwner { notRevealedUri = _notRevealedURI; } function setBaseURI(string memory _newBaseURI) public onlyOwner { baseURI = _newBaseURI; } function airdrop(address[] calldata _users) public payable onlyOwner { require( marketingSupply > 0 && _users.length <= marketingSupply && _users.length > 0 && (totalSupply() + _users.length < MAX_SUPPLY - marketingSupply), marketingSupply <= 0 ? "Marketing supply empty" : ( _users.length > marketingSupply ? "Addresses exceed marketing supply" : ( _users.length == 0 ? "At least 1 address required" : "Supply limit exceeded" ) ) ); for (uint256 i = 0; i < _users.length; i++) { _safeMint(_users[i], 1); emit NewSpaceRiderMinted(_users[i], 1); --marketingSupply; starToken.updateReward(address(0), _users[i]); } } function withdraw() public payable onlyOwner { uint256 balance = address(this).balance; require(balance > 0, "No balance to withdraw"); (bool successA, ) = payable(0x077aC19FF94d46F7155Ea660C92ab53bf8868763) .call{value: (balance / 100) * 20}(""); (bool successB, ) = payable(0xCaD5307601377933A39cBd364581C57c7B7e6799) .call{value: (balance / 100) * 20}(""); (bool successC, ) = payable(0x51D8f89Fae2e82c4bAcF6Ec270f36624bc9C6D1E) .call{value: (balance / 100) * 15}(""); (bool successD, ) = payable(0x47aE9C38436D895529054A253CF55F5fCe03C369) .call{value: (balance / 100) * 5}(""); (bool successE, ) = payable(0x2A76bAA2F2cFB1b17aE672C995B3C41398e86cCD) .call{value: (balance / 100) * 40}(""); require( successA && successB && successC && successD && successE, "Withdraw failed" ); assert(address(this).balance == 0); } function claimTokens() external { starToken.updateReward(msg.sender, address(0)); starToken.getReward(msg.sender); } function spendTokens(uint256 _amount) external { starToken.spend(msg.sender, _amount); } function _beforeTokenTransfers( address from, address to, uint256 tokenId, uint256 quantity ) internal virtual override { super._beforeTokenTransfers(from, to, tokenId, quantity); if (from != address(0)) { starToken.updateReward(from, to); } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"string","name":"_initNotRevealedUri","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ApprovalCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"ApprovalQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"ApprovalToCurrentOwner","type":"error"},{"inputs":[],"name":"ApproveToCaller","type":"error"},{"inputs":[],"name":"BalanceQueryForZeroAddress","type":"error"},{"inputs":[],"name":"MintToZeroAddress","type":"error"},{"inputs":[],"name":"MintZeroQuantity","type":"error"},{"inputs":[],"name":"MintedQueryForZeroAddress","type":"error"},{"inputs":[],"name":"OwnerQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"TransferCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"TransferFromIncorrectOwner","type":"error"},{"inputs":[],"name":"TransferToNonERC721ReceiverImplementer","type":"error"},{"inputs":[],"name":"TransferToZeroAddress","type":"error"},{"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":false,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"mintAmount","type":"uint256"}],"name":"NewSpaceRiderMinted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_TX_MINT_AMOUNT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WHITELIST_MAX_MINT_AMOUNT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WHITELIST_MAX_TX_MINT_AMOUNT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_users","type":"address[]"}],"name":"airdrop","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isOnlyWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isRevealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"mintedTotalOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"notRevealedUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"},{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"}],"name":"presaleMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newMarketingSupply","type":"uint256"}],"name":"setMarketingSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newMaxMintAmount","type":"uint256"}],"name":"setMaxMintAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"root","type":"bytes32"}],"name":"setMerkleRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_notRevealedURI","type":"string"}],"name":"setNotRevealedURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_contract","type":"address"}],"name":"setToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"spendTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"starToken","outputs":[{"internalType":"contract StarToken","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"toggleIsOnlyWhitelisted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"toggleIsPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"toggleIsRevealed","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":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
6080604052600c805462ffffff1916620100011790556004600d5566b1a2bc2ec50000600e556064600f553480156200003757600080fd5b5060405162003600380380620036008339810160408190526200005a91620002d7565b825183908390620000739060029060208501906200017a565b508051620000899060039060208401906200017a565b50506001600055506200009c33620000b0565b620000a78162000102565b505050620003bb565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6008546001600160a01b03163314620001615760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640160405180910390fd5b80516200017690600b9060208401906200017a565b5050565b828054620001889062000368565b90600052602060002090601f016020900481019282620001ac5760008555620001f7565b82601f10620001c757805160ff1916838001178555620001f7565b82800160010185558215620001f7579182015b82811115620001f7578251825591602001919060010190620001da565b506200020592915062000209565b5090565b5b808211156200020557600081556001016200020a565b600082601f8301126200023257600080fd5b81516001600160401b03808211156200024f576200024f620003a5565b604051601f8301601f19908116603f011681019082821181831017156200027a576200027a620003a5565b816040528381526020925086838588010111156200029757600080fd5b600091505b83821015620002bb57858201830151818301840152908201906200029c565b83821115620002cd5760008385830101525b9695505050505050565b600080600060608486031215620002ed57600080fd5b83516001600160401b03808211156200030557600080fd5b620003138783880162000220565b945060208601519150808211156200032a57600080fd5b620003388783880162000220565b935060408601519150808211156200034f57600080fd5b506200035e8682870162000220565b9150509250925092565b600181811c908216806200037d57607f821691505b602082108114156200039f57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b61323580620003cb6000396000f3fe6080604052600436106102935760003560e01c80636352211e1161015a578063aba458b3116100c1578063e0bd29eb1161007a578063e0bd29eb1461071e578063e3e1e8ef1461073e578063e985e9c514610751578063f2c4ce1e1461079a578063f2fde38b146107ba578063f9613d7f146107da57600080fd5b8063aba458b3146103d7578063b187bd261461068f578063b7ca51e8146106a9578063b88d4fde146106c9578063c87b56dd146106e9578063cc94513f1461070957600080fd5b80638da5cb5b116101135780638da5cb5b146105e95780638e39f5151461060757806395d89b41146106275780639c7cbec61461063c578063a0712d681461065c578063a22cb4651461066f57600080fd5b80636352211e1461054c5780636c0360eb1461056c57806370a0823114610581578063715018a6146105a1578063729ad39e146105b65780637cb64759146105c957600080fd5b806323b872dd116101fe57806344a0d68a116101b757806344a0d68a146104c257806347116f3f146103d757806348c54b9d146104e257806354214f69146104f757806355f804b314610516578063624bb58f1461053657600080fd5b806323b872dd1461041757806332cb6b0c146104375780633ccfd60b1461044d57806342842e0e14610455578063438b6300146104755780634432fcd5146104a257600080fd5b806313faede61161025057806313faede61461037e578063144fa6d7146103a257806318160ddd146103c2578063199983ba146103d757806321b80420146103ec578063239c70ae1461040157600080fd5b806301ffc9a71461029857806306fdde03146102cd578063081812fc146102ef578063081c8c4414610327578063088a4ed01461033c578063095ea7b31461035e575b600080fd5b3480156102a457600080fd5b506102b86102b3366004612d5f565b6107ef565b60405190151581526020015b60405180910390f35b3480156102d957600080fd5b506102e2610841565b6040516102c49190612f85565b3480156102fb57600080fd5b5061030f61030a366004612d46565b6108d3565b6040516001600160a01b0390911681526020016102c4565b34801561033357600080fd5b506102e2610917565b34801561034857600080fd5b5061035c610357366004612d46565b6109a5565b005b34801561036a57600080fd5b5061035c610379366004612ca8565b6109dd565b34801561038a57600080fd5b50610394600e5481565b6040519081526020016102c4565b3480156103ae57600080fd5b5061035c6103bd366004612b67565b610a6b565b3480156103ce57600080fd5b50610394610ab7565b3480156103e357600080fd5b50610394600281565b3480156103f857600080fd5b5061035c610ac5565b34801561040d57600080fd5b50610394600d5481565b34801561042357600080fd5b5061035c610432366004612bb5565b610b6b565b34801561044357600080fd5b506103946122b881565b61035c610b76565b34801561046157600080fd5b5061035c610470366004612bb5565b610ea2565b34801561048157600080fd5b50610495610490366004612b67565b610ebd565b6040516102c49190612f41565b3480156104ae57600080fd5b506103946104bd366004612b67565b611004565b3480156104ce57600080fd5b5061035c6104dd366004612d46565b61100f565b3480156104ee57600080fd5b5061035c61103e565b34801561050357600080fd5b50600c546102b890610100900460ff1681565b34801561052257600080fd5b5061035c610531366004612d99565b611101565b34801561054257600080fd5b50610394600f5481565b34801561055857600080fd5b5061030f610567366004612d46565b611142565b34801561057857600080fd5b506102e2611154565b34801561058d57600080fd5b5061039461059c366004612b67565b611161565b3480156105ad57600080fd5b5061035c6111af565b61035c6105c4366004612cd2565b6111e5565b3480156105d557600080fd5b5061035c6105e4366004612d46565b6114b0565b3480156105f557600080fd5b506008546001600160a01b031661030f565b34801561061357600080fd5b5061035c610622366004612d46565b6114df565b34801561063357600080fd5b506102e2611547565b34801561064857600080fd5b50600c546102b89062010000900460ff1681565b61035c61066a366004612d46565b611556565b34801561067b57600080fd5b5061035c61068a366004612c6c565b61188d565b34801561069b57600080fd5b50600c546102b89060ff1681565b3480156106b557600080fd5b5060105461030f906001600160a01b031681565b3480156106d557600080fd5b5061035c6106e4366004612bf1565b611923565b3480156106f557600080fd5b506102e2610704366004612d46565b61196e565b34801561071557600080fd5b5061035c611a7f565b34801561072a57600080fd5b5061035c610739366004612d46565b611ac8565b61035c61074c366004612de1565b611b65565b34801561075d57600080fd5b506102b861076c366004612b82565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205460ff1690565b3480156107a657600080fd5b5061035c6107b5366004612d99565b611f41565b3480156107c657600080fd5b5061035c6107d5366004612b67565b611f7e565b3480156107e657600080fd5b5061035c612019565b60006001600160e01b031982166380ac58cd60e01b148061082057506001600160e01b03198216635b5e139f60e01b145b8061083b57506301ffc9a760e01b6001600160e01b03198316145b92915050565b606060028054610850906130a2565b80601f016020809104026020016040519081016040528092919081815260200182805461087c906130a2565b80156108c95780601f1061089e576101008083540402835291602001916108c9565b820191906000526020600020905b8154815290600101906020018083116108ac57829003601f168201915b5050505050905090565b60006108de82612057565b6108fb576040516333d1c03960e21b815260040160405180910390fd5b506000908152600660205260409020546001600160a01b031690565b600b8054610924906130a2565b80601f0160208091040260200160405190810160405280929190818152602001828054610950906130a2565b801561099d5780601f106109725761010080835404028352916020019161099d565b820191906000526020600020905b81548152906001019060200180831161098057829003601f168201915b505050505081565b6008546001600160a01b031633146109d85760405162461bcd60e51b81526004016109cf90612f98565b60405180910390fd5b600d55565b60006109e882611142565b9050806001600160a01b0316836001600160a01b03161415610a1d5760405163250fdee360e21b815260040160405180910390fd5b336001600160a01b03821614801590610a3d5750610a3b813361076c565b155b15610a5b576040516367d9dca160e11b815260040160405180910390fd5b610a66838383612090565b505050565b6008546001600160a01b03163314610a955760405162461bcd60e51b81526004016109cf90612f98565b601080546001600160a01b0319166001600160a01b0392909216919091179055565b600154600054036000190190565b6008546001600160a01b03163314610aef5760405162461bcd60e51b81526004016109cf90612f98565b600c54610100900460ff16610b4e576000600a8054610b0d906130a2565b905011610b4e5760405162461bcd60e51b815260206004820152600f60248201526e10985cd9555492481b9bdd081cd95d608a1b60448201526064016109cf565b600c805461ff001981166101009182900460ff1615909102179055565b610a668383836120ec565b6008546001600160a01b03163314610ba05760405162461bcd60e51b81526004016109cf90612f98565b4780610be75760405162461bcd60e51b81526020600482015260166024820152754e6f2062616c616e636520746f20776974686472617760501b60448201526064016109cf565b600073077ac19ff94d46f7155ea660c92ab53bf8868763610c09606484613015565b610c14906014613029565b604051600081818185875af1925050503d8060008114610c50576040519150601f19603f3d011682016040523d82523d6000602084013e610c55565b606091505b509091506000905073cad5307601377933a39cbd364581c57c7b7e6799610c7d606485613015565b610c88906014613029565b604051600081818185875af1925050503d8060008114610cc4576040519150601f19603f3d011682016040523d82523d6000602084013e610cc9565b606091505b50909150600090507351d8f89fae2e82c4bacf6ec270f36624bc9c6d1e610cf1606486613015565b610cfc90600f613029565b604051600081818185875af1925050503d8060008114610d38576040519150601f19603f3d011682016040523d82523d6000602084013e610d3d565b606091505b50909150600090507347ae9c38436d895529054a253cf55f5fce03c369610d65606487613015565b610d70906005613029565b604051600081818185875af1925050503d8060008114610dac576040519150601f19603f3d011682016040523d82523d6000602084013e610db1565b606091505b5090915060009050732a76baa2f2cfb1b17ae672c995b3c41398e86ccd610dd9606488613015565b610de4906028613029565b604051600081818185875af1925050503d8060008114610e20576040519150601f19603f3d011682016040523d82523d6000602084013e610e25565b606091505b50509050848015610e335750835b8015610e3c5750825b8015610e455750815b8015610e4e5750805b610e8c5760405162461bcd60e51b815260206004820152600f60248201526e15da5d1a191c985dc819985a5b1959608a1b60448201526064016109cf565b4715610e9a57610e9a61310c565b505050505050565b610a6683838360405180602001604052806000815250611923565b60606000610eca83611161565b90506000816001600160401b03811115610ee657610ee6613164565b604051908082528060200260200182016040528015610f0f578160200160208202803683370190505b50905060016000805b8482108015610f2957506122b88311155b15610ff957600083815260046020908152604091829020825160608101845290546001600160a01b0381168252600160a01b81046001600160401b031692820192909252600160e01b90910460ff161580159282018390529091610f96575080516001600160a01b031615155b15610fa057805191505b876001600160a01b0316826001600160a01b03161415610fe65783858481518110610fcd57610fcd61314e565b602090810291909101015282610fe2816130dd565b9350505b83610ff0816130dd565b94505050610f18565b509195945050505050565b600061083b8261230a565b6008546001600160a01b031633146110395760405162461bcd60e51b81526004016109cf90612f98565b600e55565b601054604051636918579d60e11b8152336004820152600060248201526001600160a01b039091169063d230af3a90604401600060405180830381600087803b15801561108a57600080fd5b505af115801561109e573d6000803e3d6000fd5b5050601054604051630c00007b60e41b81523360048201526001600160a01b03909116925063c00007b09150602401600060405180830381600087803b1580156110e757600080fd5b505af11580156110fb573d6000803e3d6000fd5b50505050565b6008546001600160a01b0316331461112b5760405162461bcd60e51b81526004016109cf90612f98565b805161113e90600a906020840190612a5b565b5050565b600061114d8261235f565b5192915050565b600a8054610924906130a2565b60006001600160a01b03821661118a576040516323d3ad8160e21b815260040160405180910390fd5b506001600160a01b03166000908152600560205260409020546001600160401b031690565b6008546001600160a01b031633146111d95760405162461bcd60e51b81526004016109cf90612f98565b6111e36000612486565b565b6008546001600160a01b0316331461120f5760405162461bcd60e51b81526004016109cf90612f98565b6000600f541180156112235750600f548111155b801561122e57508015155b80156112595750600f54611244906122b8613048565b8161124d610ab7565b6112579190612ffd565b105b600f54156112fc57600f5482116112de5781156112a3576040518060400160405280601581526020017414dd5c1c1b1e481b1a5b5a5d08195e18d959591959605a1b81525061132c565b6040518060400160405280601b81526020017f4174206c6561737420312061646472657373207265717569726564000000000081525061132c565b6040518060600160405280602181526020016131df6021913961132c565b604051806040016040528060168152602001754d61726b6574696e6720737570706c7920656d70747960501b8152505b9061134a5760405162461bcd60e51b81526004016109cf9190612f85565b5060005b81811015610a665761138783838381811061136b5761136b61314e565b90506020020160208101906113809190612b67565b60016124d8565b7f8133fb1b6bc303c39a6a28413898d8f2ff9918a8fea94703812c9fe07d8dd5628383838181106113ba576113ba61314e565b90506020020160208101906113cf9190612b67565b604080516001600160a01b039092168252600160208301520160405180910390a1600f600081546113ff9061308b565b909155506010546001600160a01b031663d230af3a60008585858181106114285761142861314e565b905060200201602081019061143d9190612b67565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401600060405180830381600087803b15801561148557600080fd5b505af1158015611499573d6000803e3d6000fd5b5050505080806114a8906130dd565b91505061134e565b6008546001600160a01b031633146114da5760405162461bcd60e51b81526004016109cf90612f98565b600955565b60105460405163af7d6ca360e01b8152336004820152602481018390526001600160a01b039091169063af7d6ca3906044015b600060405180830381600087803b15801561152c57600080fd5b505af1158015611540573d6000803e3d6000fd5b5050505050565b606060038054610850906130a2565b600c54819060ff16158061157457506008546001600160a01b031633145b80156115805750600081115b801561158d575060028111155b80156115b95750600f546115a3906122b8613048565b816115ac610ab7565b6115b69190612ffd565b11155b600c5460ff1661165d5781156116225760028211611604576040518060400160405280601581526020017414dd5c1c1b1e481b1a5b5a5d08195e18d959591959605a1b815250611685565b6040518060600160405280602281526020016131bd60229139611685565b6040518060400160405280601b81526020017f596f75206e65656420746f206d696e74206174206c6561737420310000000000815250611685565b6040518060400160405280600e81526020016d14d85b19481a5cc81c185d5cd95960921b8152505b906116a35760405162461bcd60e51b81526004016109cf9190612f85565b50600c5462010000900460ff1615156001141561176057600281111580156116df57506002816116d23361230a565b6116dc9190612ffd565b11155b60028211611722576040518060400160405280602081526020017f57686974656c697374206d6178206d696e7420616d6f756e742065786365656481525061173c565b6040518060600160405280602c8152602001613191602c91395b9061175a5760405162461bcd60e51b81526004016109cf9190612f85565b506117be565b600d548161176d3361230a565b6117779190612ffd565b11156117be5760405162461bcd60e51b815260206004820152601660248201527513585e081b5a5b9d08185b5bdd5b9d08195e18d9595960521b60448201526064016109cf565b80600e546117cc9190613029565b341015806117e457506008546001600160a01b031633145b6118255760405162461bcd60e51b8152602060048201526012602482015271496e73756666696369656e742066756e647360701b60448201526064016109cf565b600c5462010000900460ff16158061184757506008546001600160a01b031633145b6118845760405162461bcd60e51b815260206004820152600e60248201526d57686974656c697374206f6e6c7960901b60448201526064016109cf565b61113e826124f2565b6001600160a01b0382163314156118b75760405163b06307db60e01b815260040160405180910390fd5b3360008181526007602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b61192e8484846120ec565b6001600160a01b0383163b15158015611950575061194e8484848461256c565b155b156110fb576040516368d2bf6b60e11b815260040160405180910390fd5b606061197982612057565b61198257600080fd5b600c54610100900460ff16611a2357600b805461199e906130a2565b80601f01602080910402602001604051908101604052809291908181526020018280546119ca906130a2565b8015611a175780601f106119ec57610100808354040283529160200191611a17565b820191906000526020600020905b8154815290600101906020018083116119fa57829003601f168201915b50505050509050919050565b6000611a2d612664565b90506000815111611a4d5760405180602001604052806000815250611a78565b80611a5784612673565b604051602001611a68929190612ec5565b6040516020818303038152906040525b9392505050565b6008546001600160a01b03163314611aa95760405162461bcd60e51b81526004016109cf90612f98565b600c805462ff0000198116620100009182900460ff1615909102179055565b6008546001600160a01b03163314611af25760405162461bcd60e51b81526004016109cf90612f98565b611afa610ab7565b611b06906122b8613048565b811115611b605760405162461bcd60e51b815260206004820152602260248201527f4d757374206265206c657373207468616e2072656d61696e696e6720737570706044820152616c7960f01b60648201526084016109cf565b600f55565b600c54829060ff161580611b8357506008546001600160a01b031633145b8015611b8f5750600081115b8015611b9c575060028111155b8015611bc85750600f54611bb2906122b8613048565b81611bbb610ab7565b611bc59190612ffd565b11155b600c5460ff16611c6c578115611c315760028211611c13576040518060400160405280601581526020017414dd5c1c1b1e481b1a5b5a5d08195e18d959591959605a1b815250611c94565b6040518060600160405280602281526020016131bd60229139611c94565b6040518060400160405280601b81526020017f596f75206e65656420746f206d696e74206174206c6561737420310000000000815250611c94565b6040518060400160405280600e81526020016d14d85b19481a5cc81c185d5cd95960921b8152505b90611cb25760405162461bcd60e51b81526004016109cf9190612f85565b50600c5462010000900460ff16151560011415611d6f5760028111158015611cee5750600281611ce13361230a565b611ceb9190612ffd565b11155b60028211611d31576040518060400160405280602081526020017f57686974656c697374206d6178206d696e7420616d6f756e7420657863656564815250611d4b565b6040518060600160405280602c8152602001613191602c91395b90611d695760405162461bcd60e51b81526004016109cf9190612f85565b50611dcd565b600d5481611d7c3361230a565b611d869190612ffd565b1115611dcd5760405162461bcd60e51b815260206004820152601660248201527513585e081b5a5b9d08185b5bdd5b9d08195e18d9595960521b60448201526064016109cf565b80600e54611ddb9190613029565b34101580611df357506008546001600160a01b031633145b611e345760405162461bcd60e51b8152602060048201526012602482015271496e73756666696369656e742066756e647360701b60448201526064016109cf565b600c5462010000900460ff1615156001148015611e9857506009546040516bffffffffffffffffffffffff193360601b166020820152611e98919060340160405160208183030381529060405280519060200120846127709092919063ffffffff16565b80611ead57506008546001600160a01b031633145b600c5462010000900460ff1615611eeb576040518060400160405280600f81526020016e139bdd081dda1a5d195b1a5cdd1959608a1b815250611f19565b6040518060400160405280601481526020017315da1a5d195b1a5cdd081cd85b1948195b99195960621b8152505b90611f375760405162461bcd60e51b81526004016109cf9190612f85565b50610a66836124f2565b6008546001600160a01b03163314611f6b5760405162461bcd60e51b81526004016109cf90612f98565b805161113e90600b906020840190612a5b565b6008546001600160a01b03163314611fa85760405162461bcd60e51b81526004016109cf90612f98565b6001600160a01b03811661200d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109cf565b61201681612486565b50565b6008546001600160a01b031633146120435760405162461bcd60e51b81526004016109cf90612f98565b600c805460ff19811660ff90911615179055565b60008160011115801561206b575060005482105b801561083b575050600090815260046020526040902054600160e01b900460ff161590565b60008281526006602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b60006120f78261235f565b80519091506000906001600160a01b0316336001600160a01b0316148061212557508151612125903361076c565b80612140575033612135846108d3565b6001600160a01b0316145b90508061216057604051632ce44b5f60e11b815260040160405180910390fd5b846001600160a01b031682600001516001600160a01b0316146121955760405162a1148160e81b815260040160405180910390fd5b6001600160a01b0384166121bc57604051633a954ecd60e21b815260040160405180910390fd5b6121c98585856001612786565b6121d96000848460000151612090565b6001600160a01b038581166000908152600560209081526040808320805467ffffffffffffffff198082166001600160401b0392831660001901831617909255898616808652838620805493841693831660019081018416949094179055898652600490945282852080546001600160e01b031916909417600160a01b4290921691909102179092559086018083529120549091166122c3576000548110156122c357825160008281526004602090815260409091208054918601516001600160401b0316600160a01b026001600160e01b03199092166001600160a01b03909316929092171790555b5082846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611540565b60006001600160a01b038216612333576040516335ebb31960e01b815260040160405180910390fd5b506001600160a01b0316600090815260056020526040902054600160401b90046001600160401b031690565b6040805160608101825260008082526020820181905291810191909152818060011115801561238f575060005481105b1561246d57600081815260046020908152604091829020825160608101845290546001600160a01b0381168252600160a01b81046001600160401b031692820192909252600160e01b90910460ff1615159181018290529061246b5780516001600160a01b031615612402579392505050565b5060001901600081815260046020908152604091829020825160608101845290546001600160a01b038116808352600160a01b82046001600160401b031693830193909352600160e01b900460ff1615159281019290925215612466579392505050565b612402565b505b604051636f96cda160e11b815260040160405180910390fd5b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b61113e828260405180602001604052806000815250612802565b6124fc33826124d8565b60408051338152602081018390527f8133fb1b6bc303c39a6a28413898d8f2ff9918a8fea94703812c9fe07d8dd562910160405180910390a160105460405163cc240c0160e01b8152336004820152602481018390526001600160a01b039091169063cc240c0190604401611512565b604051630a85bd0160e11b81526000906001600160a01b0385169063150b7a02906125a1903390899088908890600401612f04565b602060405180830381600087803b1580156125bb57600080fd5b505af19250505080156125eb575060408051601f3d908101601f191682019092526125e891810190612d7c565b60015b612646573d808015612619576040519150601f19603f3d011682016040523d82523d6000602084013e61261e565b606091505b50805161263e576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490505b949350505050565b6060600a8054610850906130a2565b6060816126975750506040805180820190915260018152600360fc1b602082015290565b8160005b81156126c157806126ab816130dd565b91506126ba9050600a83613015565b915061269b565b6000816001600160401b038111156126db576126db613164565b6040519080825280601f01601f191660200182016040528015612705576020820181803683370190505b5090505b841561265c5761271a600183613048565b9150612727600a866130f8565b612732906030612ffd565b60f81b8183815181106127475761274761314e565b60200101906001600160f81b031916908160001a905350612769600a86613015565b9450612709565b60008261277d858461280f565b14949350505050565b6001600160a01b038416156110fb57601054604051636918579d60e11b81526001600160a01b03868116600483015285811660248301529091169063d230af3a90604401600060405180830381600087803b1580156127e457600080fd5b505af11580156127f8573d6000803e3d6000fd5b5050505050505050565b610a668383836001612883565b600081815b845181101561287b5760008582815181106128315761283161314e565b602002602001015190508083116128575760008381526020829052604090209250612868565b600081815260208490526040902092505b5080612873816130dd565b915050612814565b509392505050565b6000546001600160a01b0385166128ac57604051622e076360e81b815260040160405180910390fd5b836128ca5760405163b562e8dd60e01b815260040160405180910390fd5b6128d76000868387612786565b6001600160a01b038516600081815260056020908152604080832080546fffffffffffffffffffffffffffffffff1981166001600160401b038083168c018116918217600160401b67ffffffffffffffff1990941690921783900481168c01811690920217909155858452600490925290912080546001600160e01b031916909217600160a01b42909216919091021790558080850183801561298357506001600160a01b0387163b15155b15612a0c575b60405182906001600160a01b038916906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a46129d4600088848060010195508861256c565b6129f1576040516368d2bf6b60e11b815260040160405180910390fd5b80821415612989578260005414612a0757600080fd5b612a52565b5b6040516001830192906001600160a01b038916906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a480821415612a0d575b50600055611540565b828054612a67906130a2565b90600052602060002090601f016020900481019282612a895760008555612acf565b82601f10612aa257805160ff1916838001178555612acf565b82800160010185558215612acf579182015b82811115612acf578251825591602001919060010190612ab4565b50612adb929150612adf565b5090565b5b80821115612adb5760008155600101612ae0565b60006001600160401b03831115612b0d57612b0d613164565b612b20601f8401601f1916602001612fcd565b9050828152838383011115612b3457600080fd5b828260208301376000602084830101529392505050565b80356001600160a01b0381168114612b6257600080fd5b919050565b600060208284031215612b7957600080fd5b611a7882612b4b565b60008060408385031215612b9557600080fd5b612b9e83612b4b565b9150612bac60208401612b4b565b90509250929050565b600080600060608486031215612bca57600080fd5b612bd384612b4b565b9250612be160208501612b4b565b9150604084013590509250925092565b60008060008060808587031215612c0757600080fd5b612c1085612b4b565b9350612c1e60208601612b4b565b92506040850135915060608501356001600160401b03811115612c4057600080fd5b8501601f81018713612c5157600080fd5b612c6087823560208401612af4565b91505092959194509250565b60008060408385031215612c7f57600080fd5b612c8883612b4b565b915060208301358015158114612c9d57600080fd5b809150509250929050565b60008060408385031215612cbb57600080fd5b612cc483612b4b565b946020939093013593505050565b60008060208385031215612ce557600080fd5b82356001600160401b0380821115612cfc57600080fd5b818501915085601f830112612d1057600080fd5b813581811115612d1f57600080fd5b8660208260051b8501011115612d3457600080fd5b60209290920196919550909350505050565b600060208284031215612d5857600080fd5b5035919050565b600060208284031215612d7157600080fd5b8135611a788161317a565b600060208284031215612d8e57600080fd5b8151611a788161317a565b600060208284031215612dab57600080fd5b81356001600160401b03811115612dc157600080fd5b8201601f81018413612dd257600080fd5b61265c84823560208401612af4565b60008060408385031215612df457600080fd5b823591506020808401356001600160401b0380821115612e1357600080fd5b818601915086601f830112612e2757600080fd5b813581811115612e3957612e39613164565b8060051b9150612e4a848301612fcd565b8181528481019084860184860187018b1015612e6557600080fd5b600095505b83861015612e88578035835260019590950194918601918601612e6a565b508096505050505050509250929050565b60008151808452612eb181602086016020860161305f565b601f01601f19169290920160200192915050565b60008351612ed781846020880161305f565b835190830190612eeb81836020880161305f565b64173539b7b760d91b9101908152600501949350505050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612f3790830184612e99565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b81811015612f7957835183529284019291840191600101612f5d565b50909695505050505050565b602081526000611a786020830184612e99565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b604051601f8201601f191681016001600160401b0381118282101715612ff557612ff5613164565b604052919050565b6000821982111561301057613010613122565b500190565b60008261302457613024613138565b500490565b600081600019048311821515161561304357613043613122565b500290565b60008282101561305a5761305a613122565b500390565b60005b8381101561307a578181015183820152602001613062565b838111156110fb5750506000910152565b60008161309a5761309a613122565b506000190190565b600181811c908216806130b657607f821691505b602082108114156130d757634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156130f1576130f1613122565b5060010190565b60008261310757613107613138565b500690565b634e487b7160e01b600052600160045260246000fd5b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b03198116811461201657600080fdfe57686974656c697374206d6178207472616e73616374696f6e206d696e7420616d6f756e74206578636565644d6178207472616e73616374696f6e206d696e7420616d6f756e742065786365656441646472657373657320657863656564206d61726b6574696e6720737570706c79a264697066735822122096a4b54dd9ff03c08872ab04db0f6aa890bf21c2044ffb485912593e849d410f64736f6c63430008070033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000c5370616365205269646572730000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000353505200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000035697066733a2f2f516d523669354379566263716d71626468364462345875335a524762574a476e59437374473442385353676f79360000000000000000000000
Deployed Bytecode
0x6080604052600436106102935760003560e01c80636352211e1161015a578063aba458b3116100c1578063e0bd29eb1161007a578063e0bd29eb1461071e578063e3e1e8ef1461073e578063e985e9c514610751578063f2c4ce1e1461079a578063f2fde38b146107ba578063f9613d7f146107da57600080fd5b8063aba458b3146103d7578063b187bd261461068f578063b7ca51e8146106a9578063b88d4fde146106c9578063c87b56dd146106e9578063cc94513f1461070957600080fd5b80638da5cb5b116101135780638da5cb5b146105e95780638e39f5151461060757806395d89b41146106275780639c7cbec61461063c578063a0712d681461065c578063a22cb4651461066f57600080fd5b80636352211e1461054c5780636c0360eb1461056c57806370a0823114610581578063715018a6146105a1578063729ad39e146105b65780637cb64759146105c957600080fd5b806323b872dd116101fe57806344a0d68a116101b757806344a0d68a146104c257806347116f3f146103d757806348c54b9d146104e257806354214f69146104f757806355f804b314610516578063624bb58f1461053657600080fd5b806323b872dd1461041757806332cb6b0c146104375780633ccfd60b1461044d57806342842e0e14610455578063438b6300146104755780634432fcd5146104a257600080fd5b806313faede61161025057806313faede61461037e578063144fa6d7146103a257806318160ddd146103c2578063199983ba146103d757806321b80420146103ec578063239c70ae1461040157600080fd5b806301ffc9a71461029857806306fdde03146102cd578063081812fc146102ef578063081c8c4414610327578063088a4ed01461033c578063095ea7b31461035e575b600080fd5b3480156102a457600080fd5b506102b86102b3366004612d5f565b6107ef565b60405190151581526020015b60405180910390f35b3480156102d957600080fd5b506102e2610841565b6040516102c49190612f85565b3480156102fb57600080fd5b5061030f61030a366004612d46565b6108d3565b6040516001600160a01b0390911681526020016102c4565b34801561033357600080fd5b506102e2610917565b34801561034857600080fd5b5061035c610357366004612d46565b6109a5565b005b34801561036a57600080fd5b5061035c610379366004612ca8565b6109dd565b34801561038a57600080fd5b50610394600e5481565b6040519081526020016102c4565b3480156103ae57600080fd5b5061035c6103bd366004612b67565b610a6b565b3480156103ce57600080fd5b50610394610ab7565b3480156103e357600080fd5b50610394600281565b3480156103f857600080fd5b5061035c610ac5565b34801561040d57600080fd5b50610394600d5481565b34801561042357600080fd5b5061035c610432366004612bb5565b610b6b565b34801561044357600080fd5b506103946122b881565b61035c610b76565b34801561046157600080fd5b5061035c610470366004612bb5565b610ea2565b34801561048157600080fd5b50610495610490366004612b67565b610ebd565b6040516102c49190612f41565b3480156104ae57600080fd5b506103946104bd366004612b67565b611004565b3480156104ce57600080fd5b5061035c6104dd366004612d46565b61100f565b3480156104ee57600080fd5b5061035c61103e565b34801561050357600080fd5b50600c546102b890610100900460ff1681565b34801561052257600080fd5b5061035c610531366004612d99565b611101565b34801561054257600080fd5b50610394600f5481565b34801561055857600080fd5b5061030f610567366004612d46565b611142565b34801561057857600080fd5b506102e2611154565b34801561058d57600080fd5b5061039461059c366004612b67565b611161565b3480156105ad57600080fd5b5061035c6111af565b61035c6105c4366004612cd2565b6111e5565b3480156105d557600080fd5b5061035c6105e4366004612d46565b6114b0565b3480156105f557600080fd5b506008546001600160a01b031661030f565b34801561061357600080fd5b5061035c610622366004612d46565b6114df565b34801561063357600080fd5b506102e2611547565b34801561064857600080fd5b50600c546102b89062010000900460ff1681565b61035c61066a366004612d46565b611556565b34801561067b57600080fd5b5061035c61068a366004612c6c565b61188d565b34801561069b57600080fd5b50600c546102b89060ff1681565b3480156106b557600080fd5b5060105461030f906001600160a01b031681565b3480156106d557600080fd5b5061035c6106e4366004612bf1565b611923565b3480156106f557600080fd5b506102e2610704366004612d46565b61196e565b34801561071557600080fd5b5061035c611a7f565b34801561072a57600080fd5b5061035c610739366004612d46565b611ac8565b61035c61074c366004612de1565b611b65565b34801561075d57600080fd5b506102b861076c366004612b82565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205460ff1690565b3480156107a657600080fd5b5061035c6107b5366004612d99565b611f41565b3480156107c657600080fd5b5061035c6107d5366004612b67565b611f7e565b3480156107e657600080fd5b5061035c612019565b60006001600160e01b031982166380ac58cd60e01b148061082057506001600160e01b03198216635b5e139f60e01b145b8061083b57506301ffc9a760e01b6001600160e01b03198316145b92915050565b606060028054610850906130a2565b80601f016020809104026020016040519081016040528092919081815260200182805461087c906130a2565b80156108c95780601f1061089e576101008083540402835291602001916108c9565b820191906000526020600020905b8154815290600101906020018083116108ac57829003601f168201915b5050505050905090565b60006108de82612057565b6108fb576040516333d1c03960e21b815260040160405180910390fd5b506000908152600660205260409020546001600160a01b031690565b600b8054610924906130a2565b80601f0160208091040260200160405190810160405280929190818152602001828054610950906130a2565b801561099d5780601f106109725761010080835404028352916020019161099d565b820191906000526020600020905b81548152906001019060200180831161098057829003601f168201915b505050505081565b6008546001600160a01b031633146109d85760405162461bcd60e51b81526004016109cf90612f98565b60405180910390fd5b600d55565b60006109e882611142565b9050806001600160a01b0316836001600160a01b03161415610a1d5760405163250fdee360e21b815260040160405180910390fd5b336001600160a01b03821614801590610a3d5750610a3b813361076c565b155b15610a5b576040516367d9dca160e11b815260040160405180910390fd5b610a66838383612090565b505050565b6008546001600160a01b03163314610a955760405162461bcd60e51b81526004016109cf90612f98565b601080546001600160a01b0319166001600160a01b0392909216919091179055565b600154600054036000190190565b6008546001600160a01b03163314610aef5760405162461bcd60e51b81526004016109cf90612f98565b600c54610100900460ff16610b4e576000600a8054610b0d906130a2565b905011610b4e5760405162461bcd60e51b815260206004820152600f60248201526e10985cd9555492481b9bdd081cd95d608a1b60448201526064016109cf565b600c805461ff001981166101009182900460ff1615909102179055565b610a668383836120ec565b6008546001600160a01b03163314610ba05760405162461bcd60e51b81526004016109cf90612f98565b4780610be75760405162461bcd60e51b81526020600482015260166024820152754e6f2062616c616e636520746f20776974686472617760501b60448201526064016109cf565b600073077ac19ff94d46f7155ea660c92ab53bf8868763610c09606484613015565b610c14906014613029565b604051600081818185875af1925050503d8060008114610c50576040519150601f19603f3d011682016040523d82523d6000602084013e610c55565b606091505b509091506000905073cad5307601377933a39cbd364581c57c7b7e6799610c7d606485613015565b610c88906014613029565b604051600081818185875af1925050503d8060008114610cc4576040519150601f19603f3d011682016040523d82523d6000602084013e610cc9565b606091505b50909150600090507351d8f89fae2e82c4bacf6ec270f36624bc9c6d1e610cf1606486613015565b610cfc90600f613029565b604051600081818185875af1925050503d8060008114610d38576040519150601f19603f3d011682016040523d82523d6000602084013e610d3d565b606091505b50909150600090507347ae9c38436d895529054a253cf55f5fce03c369610d65606487613015565b610d70906005613029565b604051600081818185875af1925050503d8060008114610dac576040519150601f19603f3d011682016040523d82523d6000602084013e610db1565b606091505b5090915060009050732a76baa2f2cfb1b17ae672c995b3c41398e86ccd610dd9606488613015565b610de4906028613029565b604051600081818185875af1925050503d8060008114610e20576040519150601f19603f3d011682016040523d82523d6000602084013e610e25565b606091505b50509050848015610e335750835b8015610e3c5750825b8015610e455750815b8015610e4e5750805b610e8c5760405162461bcd60e51b815260206004820152600f60248201526e15da5d1a191c985dc819985a5b1959608a1b60448201526064016109cf565b4715610e9a57610e9a61310c565b505050505050565b610a6683838360405180602001604052806000815250611923565b60606000610eca83611161565b90506000816001600160401b03811115610ee657610ee6613164565b604051908082528060200260200182016040528015610f0f578160200160208202803683370190505b50905060016000805b8482108015610f2957506122b88311155b15610ff957600083815260046020908152604091829020825160608101845290546001600160a01b0381168252600160a01b81046001600160401b031692820192909252600160e01b90910460ff161580159282018390529091610f96575080516001600160a01b031615155b15610fa057805191505b876001600160a01b0316826001600160a01b03161415610fe65783858481518110610fcd57610fcd61314e565b602090810291909101015282610fe2816130dd565b9350505b83610ff0816130dd565b94505050610f18565b509195945050505050565b600061083b8261230a565b6008546001600160a01b031633146110395760405162461bcd60e51b81526004016109cf90612f98565b600e55565b601054604051636918579d60e11b8152336004820152600060248201526001600160a01b039091169063d230af3a90604401600060405180830381600087803b15801561108a57600080fd5b505af115801561109e573d6000803e3d6000fd5b5050601054604051630c00007b60e41b81523360048201526001600160a01b03909116925063c00007b09150602401600060405180830381600087803b1580156110e757600080fd5b505af11580156110fb573d6000803e3d6000fd5b50505050565b6008546001600160a01b0316331461112b5760405162461bcd60e51b81526004016109cf90612f98565b805161113e90600a906020840190612a5b565b5050565b600061114d8261235f565b5192915050565b600a8054610924906130a2565b60006001600160a01b03821661118a576040516323d3ad8160e21b815260040160405180910390fd5b506001600160a01b03166000908152600560205260409020546001600160401b031690565b6008546001600160a01b031633146111d95760405162461bcd60e51b81526004016109cf90612f98565b6111e36000612486565b565b6008546001600160a01b0316331461120f5760405162461bcd60e51b81526004016109cf90612f98565b6000600f541180156112235750600f548111155b801561122e57508015155b80156112595750600f54611244906122b8613048565b8161124d610ab7565b6112579190612ffd565b105b600f54156112fc57600f5482116112de5781156112a3576040518060400160405280601581526020017414dd5c1c1b1e481b1a5b5a5d08195e18d959591959605a1b81525061132c565b6040518060400160405280601b81526020017f4174206c6561737420312061646472657373207265717569726564000000000081525061132c565b6040518060600160405280602181526020016131df6021913961132c565b604051806040016040528060168152602001754d61726b6574696e6720737570706c7920656d70747960501b8152505b9061134a5760405162461bcd60e51b81526004016109cf9190612f85565b5060005b81811015610a665761138783838381811061136b5761136b61314e565b90506020020160208101906113809190612b67565b60016124d8565b7f8133fb1b6bc303c39a6a28413898d8f2ff9918a8fea94703812c9fe07d8dd5628383838181106113ba576113ba61314e565b90506020020160208101906113cf9190612b67565b604080516001600160a01b039092168252600160208301520160405180910390a1600f600081546113ff9061308b565b909155506010546001600160a01b031663d230af3a60008585858181106114285761142861314e565b905060200201602081019061143d9190612b67565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401600060405180830381600087803b15801561148557600080fd5b505af1158015611499573d6000803e3d6000fd5b5050505080806114a8906130dd565b91505061134e565b6008546001600160a01b031633146114da5760405162461bcd60e51b81526004016109cf90612f98565b600955565b60105460405163af7d6ca360e01b8152336004820152602481018390526001600160a01b039091169063af7d6ca3906044015b600060405180830381600087803b15801561152c57600080fd5b505af1158015611540573d6000803e3d6000fd5b5050505050565b606060038054610850906130a2565b600c54819060ff16158061157457506008546001600160a01b031633145b80156115805750600081115b801561158d575060028111155b80156115b95750600f546115a3906122b8613048565b816115ac610ab7565b6115b69190612ffd565b11155b600c5460ff1661165d5781156116225760028211611604576040518060400160405280601581526020017414dd5c1c1b1e481b1a5b5a5d08195e18d959591959605a1b815250611685565b6040518060600160405280602281526020016131bd60229139611685565b6040518060400160405280601b81526020017f596f75206e65656420746f206d696e74206174206c6561737420310000000000815250611685565b6040518060400160405280600e81526020016d14d85b19481a5cc81c185d5cd95960921b8152505b906116a35760405162461bcd60e51b81526004016109cf9190612f85565b50600c5462010000900460ff1615156001141561176057600281111580156116df57506002816116d23361230a565b6116dc9190612ffd565b11155b60028211611722576040518060400160405280602081526020017f57686974656c697374206d6178206d696e7420616d6f756e742065786365656481525061173c565b6040518060600160405280602c8152602001613191602c91395b9061175a5760405162461bcd60e51b81526004016109cf9190612f85565b506117be565b600d548161176d3361230a565b6117779190612ffd565b11156117be5760405162461bcd60e51b815260206004820152601660248201527513585e081b5a5b9d08185b5bdd5b9d08195e18d9595960521b60448201526064016109cf565b80600e546117cc9190613029565b341015806117e457506008546001600160a01b031633145b6118255760405162461bcd60e51b8152602060048201526012602482015271496e73756666696369656e742066756e647360701b60448201526064016109cf565b600c5462010000900460ff16158061184757506008546001600160a01b031633145b6118845760405162461bcd60e51b815260206004820152600e60248201526d57686974656c697374206f6e6c7960901b60448201526064016109cf565b61113e826124f2565b6001600160a01b0382163314156118b75760405163b06307db60e01b815260040160405180910390fd5b3360008181526007602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b61192e8484846120ec565b6001600160a01b0383163b15158015611950575061194e8484848461256c565b155b156110fb576040516368d2bf6b60e11b815260040160405180910390fd5b606061197982612057565b61198257600080fd5b600c54610100900460ff16611a2357600b805461199e906130a2565b80601f01602080910402602001604051908101604052809291908181526020018280546119ca906130a2565b8015611a175780601f106119ec57610100808354040283529160200191611a17565b820191906000526020600020905b8154815290600101906020018083116119fa57829003601f168201915b50505050509050919050565b6000611a2d612664565b90506000815111611a4d5760405180602001604052806000815250611a78565b80611a5784612673565b604051602001611a68929190612ec5565b6040516020818303038152906040525b9392505050565b6008546001600160a01b03163314611aa95760405162461bcd60e51b81526004016109cf90612f98565b600c805462ff0000198116620100009182900460ff1615909102179055565b6008546001600160a01b03163314611af25760405162461bcd60e51b81526004016109cf90612f98565b611afa610ab7565b611b06906122b8613048565b811115611b605760405162461bcd60e51b815260206004820152602260248201527f4d757374206265206c657373207468616e2072656d61696e696e6720737570706044820152616c7960f01b60648201526084016109cf565b600f55565b600c54829060ff161580611b8357506008546001600160a01b031633145b8015611b8f5750600081115b8015611b9c575060028111155b8015611bc85750600f54611bb2906122b8613048565b81611bbb610ab7565b611bc59190612ffd565b11155b600c5460ff16611c6c578115611c315760028211611c13576040518060400160405280601581526020017414dd5c1c1b1e481b1a5b5a5d08195e18d959591959605a1b815250611c94565b6040518060600160405280602281526020016131bd60229139611c94565b6040518060400160405280601b81526020017f596f75206e65656420746f206d696e74206174206c6561737420310000000000815250611c94565b6040518060400160405280600e81526020016d14d85b19481a5cc81c185d5cd95960921b8152505b90611cb25760405162461bcd60e51b81526004016109cf9190612f85565b50600c5462010000900460ff16151560011415611d6f5760028111158015611cee5750600281611ce13361230a565b611ceb9190612ffd565b11155b60028211611d31576040518060400160405280602081526020017f57686974656c697374206d6178206d696e7420616d6f756e7420657863656564815250611d4b565b6040518060600160405280602c8152602001613191602c91395b90611d695760405162461bcd60e51b81526004016109cf9190612f85565b50611dcd565b600d5481611d7c3361230a565b611d869190612ffd565b1115611dcd5760405162461bcd60e51b815260206004820152601660248201527513585e081b5a5b9d08185b5bdd5b9d08195e18d9595960521b60448201526064016109cf565b80600e54611ddb9190613029565b34101580611df357506008546001600160a01b031633145b611e345760405162461bcd60e51b8152602060048201526012602482015271496e73756666696369656e742066756e647360701b60448201526064016109cf565b600c5462010000900460ff1615156001148015611e9857506009546040516bffffffffffffffffffffffff193360601b166020820152611e98919060340160405160208183030381529060405280519060200120846127709092919063ffffffff16565b80611ead57506008546001600160a01b031633145b600c5462010000900460ff1615611eeb576040518060400160405280600f81526020016e139bdd081dda1a5d195b1a5cdd1959608a1b815250611f19565b6040518060400160405280601481526020017315da1a5d195b1a5cdd081cd85b1948195b99195960621b8152505b90611f375760405162461bcd60e51b81526004016109cf9190612f85565b50610a66836124f2565b6008546001600160a01b03163314611f6b5760405162461bcd60e51b81526004016109cf90612f98565b805161113e90600b906020840190612a5b565b6008546001600160a01b03163314611fa85760405162461bcd60e51b81526004016109cf90612f98565b6001600160a01b03811661200d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109cf565b61201681612486565b50565b6008546001600160a01b031633146120435760405162461bcd60e51b81526004016109cf90612f98565b600c805460ff19811660ff90911615179055565b60008160011115801561206b575060005482105b801561083b575050600090815260046020526040902054600160e01b900460ff161590565b60008281526006602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b60006120f78261235f565b80519091506000906001600160a01b0316336001600160a01b0316148061212557508151612125903361076c565b80612140575033612135846108d3565b6001600160a01b0316145b90508061216057604051632ce44b5f60e11b815260040160405180910390fd5b846001600160a01b031682600001516001600160a01b0316146121955760405162a1148160e81b815260040160405180910390fd5b6001600160a01b0384166121bc57604051633a954ecd60e21b815260040160405180910390fd5b6121c98585856001612786565b6121d96000848460000151612090565b6001600160a01b038581166000908152600560209081526040808320805467ffffffffffffffff198082166001600160401b0392831660001901831617909255898616808652838620805493841693831660019081018416949094179055898652600490945282852080546001600160e01b031916909417600160a01b4290921691909102179092559086018083529120549091166122c3576000548110156122c357825160008281526004602090815260409091208054918601516001600160401b0316600160a01b026001600160e01b03199092166001600160a01b03909316929092171790555b5082846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611540565b60006001600160a01b038216612333576040516335ebb31960e01b815260040160405180910390fd5b506001600160a01b0316600090815260056020526040902054600160401b90046001600160401b031690565b6040805160608101825260008082526020820181905291810191909152818060011115801561238f575060005481105b1561246d57600081815260046020908152604091829020825160608101845290546001600160a01b0381168252600160a01b81046001600160401b031692820192909252600160e01b90910460ff1615159181018290529061246b5780516001600160a01b031615612402579392505050565b5060001901600081815260046020908152604091829020825160608101845290546001600160a01b038116808352600160a01b82046001600160401b031693830193909352600160e01b900460ff1615159281019290925215612466579392505050565b612402565b505b604051636f96cda160e11b815260040160405180910390fd5b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b61113e828260405180602001604052806000815250612802565b6124fc33826124d8565b60408051338152602081018390527f8133fb1b6bc303c39a6a28413898d8f2ff9918a8fea94703812c9fe07d8dd562910160405180910390a160105460405163cc240c0160e01b8152336004820152602481018390526001600160a01b039091169063cc240c0190604401611512565b604051630a85bd0160e11b81526000906001600160a01b0385169063150b7a02906125a1903390899088908890600401612f04565b602060405180830381600087803b1580156125bb57600080fd5b505af19250505080156125eb575060408051601f3d908101601f191682019092526125e891810190612d7c565b60015b612646573d808015612619576040519150601f19603f3d011682016040523d82523d6000602084013e61261e565b606091505b50805161263e576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490505b949350505050565b6060600a8054610850906130a2565b6060816126975750506040805180820190915260018152600360fc1b602082015290565b8160005b81156126c157806126ab816130dd565b91506126ba9050600a83613015565b915061269b565b6000816001600160401b038111156126db576126db613164565b6040519080825280601f01601f191660200182016040528015612705576020820181803683370190505b5090505b841561265c5761271a600183613048565b9150612727600a866130f8565b612732906030612ffd565b60f81b8183815181106127475761274761314e565b60200101906001600160f81b031916908160001a905350612769600a86613015565b9450612709565b60008261277d858461280f565b14949350505050565b6001600160a01b038416156110fb57601054604051636918579d60e11b81526001600160a01b03868116600483015285811660248301529091169063d230af3a90604401600060405180830381600087803b1580156127e457600080fd5b505af11580156127f8573d6000803e3d6000fd5b5050505050505050565b610a668383836001612883565b600081815b845181101561287b5760008582815181106128315761283161314e565b602002602001015190508083116128575760008381526020829052604090209250612868565b600081815260208490526040902092505b5080612873816130dd565b915050612814565b509392505050565b6000546001600160a01b0385166128ac57604051622e076360e81b815260040160405180910390fd5b836128ca5760405163b562e8dd60e01b815260040160405180910390fd5b6128d76000868387612786565b6001600160a01b038516600081815260056020908152604080832080546fffffffffffffffffffffffffffffffff1981166001600160401b038083168c018116918217600160401b67ffffffffffffffff1990941690921783900481168c01811690920217909155858452600490925290912080546001600160e01b031916909217600160a01b42909216919091021790558080850183801561298357506001600160a01b0387163b15155b15612a0c575b60405182906001600160a01b038916906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a46129d4600088848060010195508861256c565b6129f1576040516368d2bf6b60e11b815260040160405180910390fd5b80821415612989578260005414612a0757600080fd5b612a52565b5b6040516001830192906001600160a01b038916906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a480821415612a0d575b50600055611540565b828054612a67906130a2565b90600052602060002090601f016020900481019282612a895760008555612acf565b82601f10612aa257805160ff1916838001178555612acf565b82800160010185558215612acf579182015b82811115612acf578251825591602001919060010190612ab4565b50612adb929150612adf565b5090565b5b80821115612adb5760008155600101612ae0565b60006001600160401b03831115612b0d57612b0d613164565b612b20601f8401601f1916602001612fcd565b9050828152838383011115612b3457600080fd5b828260208301376000602084830101529392505050565b80356001600160a01b0381168114612b6257600080fd5b919050565b600060208284031215612b7957600080fd5b611a7882612b4b565b60008060408385031215612b9557600080fd5b612b9e83612b4b565b9150612bac60208401612b4b565b90509250929050565b600080600060608486031215612bca57600080fd5b612bd384612b4b565b9250612be160208501612b4b565b9150604084013590509250925092565b60008060008060808587031215612c0757600080fd5b612c1085612b4b565b9350612c1e60208601612b4b565b92506040850135915060608501356001600160401b03811115612c4057600080fd5b8501601f81018713612c5157600080fd5b612c6087823560208401612af4565b91505092959194509250565b60008060408385031215612c7f57600080fd5b612c8883612b4b565b915060208301358015158114612c9d57600080fd5b809150509250929050565b60008060408385031215612cbb57600080fd5b612cc483612b4b565b946020939093013593505050565b60008060208385031215612ce557600080fd5b82356001600160401b0380821115612cfc57600080fd5b818501915085601f830112612d1057600080fd5b813581811115612d1f57600080fd5b8660208260051b8501011115612d3457600080fd5b60209290920196919550909350505050565b600060208284031215612d5857600080fd5b5035919050565b600060208284031215612d7157600080fd5b8135611a788161317a565b600060208284031215612d8e57600080fd5b8151611a788161317a565b600060208284031215612dab57600080fd5b81356001600160401b03811115612dc157600080fd5b8201601f81018413612dd257600080fd5b61265c84823560208401612af4565b60008060408385031215612df457600080fd5b823591506020808401356001600160401b0380821115612e1357600080fd5b818601915086601f830112612e2757600080fd5b813581811115612e3957612e39613164565b8060051b9150612e4a848301612fcd565b8181528481019084860184860187018b1015612e6557600080fd5b600095505b83861015612e88578035835260019590950194918601918601612e6a565b508096505050505050509250929050565b60008151808452612eb181602086016020860161305f565b601f01601f19169290920160200192915050565b60008351612ed781846020880161305f565b835190830190612eeb81836020880161305f565b64173539b7b760d91b9101908152600501949350505050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612f3790830184612e99565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b81811015612f7957835183529284019291840191600101612f5d565b50909695505050505050565b602081526000611a786020830184612e99565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b604051601f8201601f191681016001600160401b0381118282101715612ff557612ff5613164565b604052919050565b6000821982111561301057613010613122565b500190565b60008261302457613024613138565b500490565b600081600019048311821515161561304357613043613122565b500290565b60008282101561305a5761305a613122565b500390565b60005b8381101561307a578181015183820152602001613062565b838111156110fb5750506000910152565b60008161309a5761309a613122565b506000190190565b600181811c908216806130b657607f821691505b602082108114156130d757634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156130f1576130f1613122565b5060010190565b60008261310757613107613138565b500690565b634e487b7160e01b600052600160045260246000fd5b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b03198116811461201657600080fdfe57686974656c697374206d6178207472616e73616374696f6e206d696e7420616d6f756e74206578636565644d6178207472616e73616374696f6e206d696e7420616d6f756e742065786365656441646472657373657320657863656564206d61726b6574696e6720737570706c79a264697066735822122096a4b54dd9ff03c08872ab04db0f6aa890bf21c2044ffb485912593e849d410f64736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000c5370616365205269646572730000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000353505200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000035697066733a2f2f516d523669354379566263716d71626468364462345875335a524762574a476e59437374473442385353676f79360000000000000000000000
-----Decoded View---------------
Arg [0] : _name (string): Space Riders
Arg [1] : _symbol (string): SPR
Arg [2] : _initNotRevealedUri (string): ipfs://QmR6i5CyVbcqmqbdh6Db4Xu3ZRGbWJGnYCstG4B8SSgoy6
-----Encoded View---------------
10 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [3] : 000000000000000000000000000000000000000000000000000000000000000c
Arg [4] : 5370616365205269646572730000000000000000000000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [6] : 5350520000000000000000000000000000000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000035
Arg [8] : 697066733a2f2f516d523669354379566263716d71626468364462345875335a
Arg [9] : 524762574a476e59437374473442385353676f79360000000000000000000000
Deployed Bytecode Sourcemap
50028:9491:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31507:355;;;;;;;;;;-1:-1:-1;31507:355:0;;;;;:::i;:::-;;:::i;:::-;;;9379:14:1;;9372:22;9354:41;;9342:2;9327:18;31507:355:0;;;;;;;;34974:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;36574:245::-;;;;;;;;;;-1:-1:-1;36574:245:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;7165:32:1;;;7147:51;;7135:2;7120:18;36574:245:0;7001:203:1;50203:28:0;;;;;;;;;;;;;:::i;56124:122::-;;;;;;;;;;-1:-1:-1;56124:122:0;;;;;:::i;:::-;;:::i;:::-;;36137:371;;;;;;;;;;-1:-1:-1;36137:371:0;;;;;:::i;:::-;;:::i;50619:32::-;;;;;;;;;;;;;;;;;;;13253:25:1;;;13241:2;13226:18;50619:32:0;13107:177:1;55915:107:0;;;;;;;;;;-1:-1:-1;55915:107:0;;;;;:::i;:::-;;:::i;30756:303::-;;;;;;;;;;;;;:::i;50404:53::-;;;;;;;;;;;;50456:1;50404:53;;55738:169;;;;;;;;;;;;;:::i;50580:32::-;;;;;;;;;;;;;;;;37545:170;;;;;;;;;;-1:-1:-1;37545:170:0;;;;;:::i;:::-;;:::i;50356:41::-;;;;;;;;;;;;50393:4;50356:41;;57916:1006;;;:::i;37786:185::-;;;;;;;;;;-1:-1:-1;37786:185:0;;;;;:::i;:::-;;:::i;54454:945::-;;;;;;;;;;-1:-1:-1;54454:945:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;55407:116::-;;;;;;;;;;-1:-1:-1;55407:116:0;;;;;:::i;:::-;;:::i;56030:86::-;;;;;;;;;;-1:-1:-1;56030:86:0;;;;;:::i;:::-;;:::i;58930:139::-;;;;;;;;;;;;;:::i;50274:30::-;;;;;;;;;;-1:-1:-1;50274:30:0;;;;;;;;;;;56768:104;;;;;;;;;;-1:-1:-1;56768:104:0;;;;;:::i;:::-;;:::i;50658:36::-;;;;;;;;;;;;;;;;34783:124;;;;;;;;;;-1:-1:-1;34783:124:0;;;;;:::i;:::-;;:::i;50175:21::-;;;;;;;;;;;;;:::i;31926:206::-;;;;;;;;;;-1:-1:-1;31926:206:0;;;;;:::i;:::-;;:::i;7265:103::-;;;;;;;;;;;;;:::i;56880:1028::-;;;;;;:::i;:::-;;:::i;56536:90::-;;;;;;;;;;-1:-1:-1;56536:90:0;;;;;:::i;:::-;;:::i;6614:87::-;;;;;;;;;;-1:-1:-1;6687:6:0;;-1:-1:-1;;;;;6687:6:0;6614:87;;59077:102;;;;;;;;;;-1:-1:-1;59077:102:0;;;;;:::i;:::-;;:::i;35143:104::-;;;;;;;;;;;;;:::i;50311:36::-;;;;;;;;;;-1:-1:-1;50311:36:0;;;;;;;;;;;53652:280;;;;;;:::i;:::-;;:::i;36891:302::-;;;;;;;;;;-1:-1:-1;36891:302:0;;;;;:::i;:::-;;:::i;50240:27::-;;;;;;;;;;-1:-1:-1;50240:27:0;;;;;;;;50703:26;;;;;;;;;;-1:-1:-1;50703:26:0;;;;-1:-1:-1;;;;;50703:26:0;;;38042:406;;;;;;;;;;-1:-1:-1;38042:406:0;;;;;:::i;:::-;;:::i;52778:629::-;;;;;;;;;;-1:-1:-1;52778:629:0;;;;;:::i;:::-;;:::i;55621:109::-;;;;;;;;;;;;;:::i;56254:274::-;;;;;;;;;;-1:-1:-1;56254:274:0;;;;;:::i;:::-;;:::i;53940:506::-;;;;;;:::i;:::-;;:::i;37264:214::-;;;;;;;;;;-1:-1:-1;37264:214:0;;;;;:::i;:::-;-1:-1:-1;;;;;37435:25:0;;;37406:4;37435:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;37264:214;56634:126;;;;;;;;;;-1:-1:-1;56634:126:0;;;;;:::i;:::-;;:::i;7523:238::-;;;;;;;;;;-1:-1:-1;7523:238:0;;;;;:::i;:::-;;:::i;55531:82::-;;;;;;;;;;;;;:::i;31507:355::-;31654:4;-1:-1:-1;;;;;;31696:40:0;;-1:-1:-1;;;31696:40:0;;:105;;-1:-1:-1;;;;;;;31753:48:0;;-1:-1:-1;;;31753:48:0;31696:105;:158;;;-1:-1:-1;;;;;;;;;;20051:40:0;;;31818:36;31676:178;31507:355;-1:-1:-1;;31507:355:0:o;34974:100::-;35028:13;35061:5;35054:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34974:100;:::o;36574:245::-;36678:7;36708:16;36716:7;36708;:16::i;:::-;36703:64;;36733:34;;-1:-1:-1;;;36733:34:0;;;;;;;;;;;36703:64;-1:-1:-1;36787:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;36787:24:0;;36574:245::o;50203:28::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;56124:122::-;6687:6;;-1:-1:-1;;;;;6687:6:0;5397:10;6834:23;6826:68;;;;-1:-1:-1;;;6826:68:0;;;;;;;:::i;:::-;;;;;;;;;56205:13:::1;:33:::0;56124:122::o;36137:371::-;36210:13;36226:24;36242:7;36226:15;:24::i;:::-;36210:40;;36271:5;-1:-1:-1;;;;;36265:11:0;:2;-1:-1:-1;;;;;36265:11:0;;36261:48;;;36285:24;;-1:-1:-1;;;36285:24:0;;;;;;;;;;;36261:48;5397:10;-1:-1:-1;;;;;36326:21:0;;;;;;:63;;-1:-1:-1;36352:37:0;36369:5;5397:10;37264:214;:::i;36352:37::-;36351:38;36326:63;36322:138;;;36413:35;;-1:-1:-1;;;36413:35:0;;;;;;;;;;;36322:138;36472:28;36481:2;36485:7;36494:5;36472:8;:28::i;:::-;36199:309;36137:371;;:::o;55915:107::-;6687:6;;-1:-1:-1;;;;;6687:6:0;5397:10;6834:23;6826:68;;;;-1:-1:-1;;;6826:68:0;;;;;;;:::i;:::-;55982:9:::1;:32:::0;;-1:-1:-1;;;;;;55982:32:0::1;-1:-1:-1::0;;;;;55982:32:0;;;::::1;::::0;;;::::1;::::0;;55915:107::o;30756:303::-;52645:1;31010:12;30800:7;30994:13;:28;-1:-1:-1;;30994:46:0;;30756:303::o;55738:169::-;6687:6;;-1:-1:-1;;;;;6687:6:0;5397:10;6834:23;6826:68;;;;-1:-1:-1;;;6826:68:0;;;;;;;:::i;:::-;55799:10:::1;::::0;::::1;::::0;::::1;;;55794:70;;55843:1;55825:7;55819:21;;;;;:::i;:::-;;;:25;55811:53;;;::::0;-1:-1:-1;;;55811:53:0;;11212:2:1;55811:53:0::1;::::0;::::1;11194:21:1::0;11251:2;11231:18;;;11224:30;-1:-1:-1;;;11270:18:1;;;11263:45;11325:18;;55811:53:0::1;11010:339:1::0;55811:53:0::1;55889:10;::::0;;-1:-1:-1;;55875:24:0;::::1;55889:10;::::0;;;::::1;;;55888:11;55875:24:::0;;::::1;;::::0;;55738:169::o;37545:170::-;37679:28;37689:4;37695:2;37699:7;37679:9;:28::i;57916:1006::-;6687:6;;-1:-1:-1;;;;;6687:6:0;5397:10;6834:23;6826:68;;;;-1:-1:-1;;;6826:68:0;;;;;;;:::i;:::-;57990:21:::1;58030:11:::0;58022:46:::1;;;::::0;-1:-1:-1;;;58022:46:0;;12615:2:1;58022:46:0::1;::::0;::::1;12597:21:1::0;12654:2;12634:18;;;12627:30;-1:-1:-1;;;12673:18:1;;;12666:52;12735:18;;58022:46:0::1;12413:346:1::0;58022:46:0::1;58080:13;58107:42;58178:13;58188:3;58178:7:::0;:13:::1;:::i;:::-;58177:20;::::0;58195:2:::1;58177:20;:::i;:::-;58099:103;::::0;::::1;::::0;;;;;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;58079:123:0;;-1:-1:-1;58214:13:0::1;::::0;-1:-1:-1;58241:42:0::1;58312:13;58322:3;58312:7:::0;:13:::1;:::i;:::-;58311:20;::::0;58329:2:::1;58311:20;:::i;:::-;58233:103;::::0;::::1;::::0;;;;;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;58213:123:0;;-1:-1:-1;58348:13:0::1;::::0;-1:-1:-1;58375:42:0::1;58446:13;58456:3;58446:7:::0;:13:::1;:::i;:::-;58445:20;::::0;58463:2:::1;58445:20;:::i;:::-;58367:103;::::0;::::1;::::0;;;;;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;58347:123:0;;-1:-1:-1;58482:13:0::1;::::0;-1:-1:-1;58509:42:0::1;58580:13;58590:3;58580:7:::0;:13:::1;:::i;:::-;58579:19;::::0;58597:1:::1;58579:19;:::i;:::-;58501:102;::::0;::::1;::::0;;;;;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;58481:122:0;;-1:-1:-1;58615:13:0::1;::::0;-1:-1:-1;58642:42:0::1;58713:13;58723:3;58713:7:::0;:13:::1;:::i;:::-;58712:20;::::0;58730:2:::1;58712:20;:::i;:::-;58634:103;::::0;::::1;::::0;;;;;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;58614:123;;;58770:8;:20;;;;;58782:8;58770:20;:32;;;;;58794:8;58770:32;:44;;;;;58806:8;58770:44;:56;;;;;58818:8;58770:56;58748:121;;;::::0;-1:-1:-1;;;58748:121:0;;10868:2:1;58748:121:0::1;::::0;::::1;10850:21:1::0;10907:2;10887:18;;;10880:30;-1:-1:-1;;;10926:18:1;;;10919:45;10981:18;;58748:121:0::1;10666:339:1::0;58748:121:0::1;58887:21;:26:::0;58880:34:::1;;;;:::i;:::-;57961:961;;;;;;57916:1006::o:0;37786:185::-;37924:39;37941:4;37947:2;37951:7;37924:39;;;;;;;;;;;;:16;:39::i;54454:945::-;54541:16;54575:23;54601:17;54611:6;54601:9;:17::i;:::-;54575:43;;54629:30;54676:15;-1:-1:-1;;;;;54662:30:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;54662:30:0;-1:-1:-1;54629:63:0;-1:-1:-1;52645:1:0;54703:22;;54831:530;54870:15;54852;:33;:65;;;;;50393:4;54889:14;:28;;54852:65;54831:530;;;54944:31;54978:27;;;:11;:27;;;;;;;;;54944:61;;;;;;;;;-1:-1:-1;;;;;54944:61:0;;;;-1:-1:-1;;;54944:61:0;;-1:-1:-1;;;;;54944:61:0;;;;;;;;-1:-1:-1;;;54944:61:0;;;;;;;;;;;;;;;;55026:49;;-1:-1:-1;55047:14:0;;-1:-1:-1;;;;;55047:28:0;;;55026:49;55022:125;;;55117:14;;;-1:-1:-1;55022:125:0;55189:6;-1:-1:-1;;;;;55167:28:0;:18;-1:-1:-1;;;;;55167:28:0;;55163:154;;;55249:14;55216:13;55230:15;55216:30;;;;;;;;:::i;:::-;;;;;;;;;;:47;55284:17;;;;:::i;:::-;;;;55163:154;55333:16;;;;:::i;:::-;;;;54929:432;54831:530;;;-1:-1:-1;55378:13:0;;54454:945;-1:-1:-1;;;;;54454:945:0:o;55407:116::-;55467:7;55494:21;55508:6;55494:13;:21::i;56030:86::-;6687:6;;-1:-1:-1;;;;;6687:6:0;5397:10;6834:23;6826:68;;;;-1:-1:-1;;;6826:68:0;;;;;;;:::i;:::-;56093:4:::1;:15:::0;56030:86::o;58930:139::-;58973:9;;:46;;-1:-1:-1;;;58973:46:0;;58996:10;58973:46;;;7421:34:1;58973:9:0;7471:18:1;;;7464:43;-1:-1:-1;;;;;58973:9:0;;;;:22;;7356:18:1;;58973:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;59030:9:0;;:31;;-1:-1:-1;;;59030:31:0;;59050:10;59030:31;;;7147:51:1;-1:-1:-1;;;;;59030:9:0;;;;-1:-1:-1;59030:19:0;;-1:-1:-1;7120:18:1;;59030:31:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;58930:139::o;56768:104::-;6687:6;;-1:-1:-1;;;;;6687:6:0;5397:10;6834:23;6826:68;;;;-1:-1:-1;;;6826:68:0;;;;;;;:::i;:::-;56843:21;;::::1;::::0;:7:::1;::::0;:21:::1;::::0;::::1;::::0;::::1;:::i;:::-;;56768:104:::0;:::o;34783:124::-;34847:7;34874:20;34886:7;34874:11;:20::i;:::-;:25;;34783:124;-1:-1:-1;;34783:124:0:o;50175:21::-;;;;;;;:::i;31926:206::-;31990:7;-1:-1:-1;;;;;32014:19:0;;32010:60;;32042:28;;-1:-1:-1;;;32042:28:0;;;;;;;;;;;32010:60;-1:-1:-1;;;;;;32096:19:0;;;;;:12;:19;;;;;:27;-1:-1:-1;;;;;32096:27:0;;31926:206::o;7265:103::-;6687:6;;-1:-1:-1;;;;;6687:6:0;5397:10;6834:23;6826:68;;;;-1:-1:-1;;;6826:68:0;;;;;;;:::i;:::-;7330:30:::1;7357:1;7330:18;:30::i;:::-;7265:103::o:0;56880:1028::-;6687:6;;-1:-1:-1;;;;;6687:6:0;5397:10;6834:23;6826:68;;;;-1:-1:-1;;;6826:68:0;;;;;;;:::i;:::-;57000:1:::1;56982:15;;:19;:72;;;;-1:-1:-1::0;57039:15:0::1;::::0;57022:32;::::1;;56982:72;:110;;;;-1:-1:-1::0;57075:17:0;;;56982:110:::1;:193;;;;-1:-1:-1::0;57159:15:0::1;::::0;57146:28:::1;::::0;50393:4:::1;57146:28;:::i;:::-;57130:6:::0;57114:13:::1;:11;:13::i;:::-;:29;;;;:::i;:::-;:60;56982:193;57190:15;::::0;:20;:448:::1;;57313:15;::::0;57297:31;::::1;:322;;57450:18:::0;;:142:::1;;;;;;;;;;;;;;;-1:-1:-1::0;;;57450:142:0::1;;::::0;57190:448:::1;;57450:142;;;;;;;;;;;;;;;;;::::0;57190:448:::1;;57297:322;;;;;;;;;;;;;;;;;;57190:448;;;;;;;;;;;;;;;;-1:-1:-1::0;;;57190:448:0::1;;::::0;::::1;56960:689;;;;;-1:-1:-1::0;;;56960:689:0::1;;;;;;;;:::i;:::-;;57667:9;57662:239;57682:17:::0;;::::1;57662:239;;;57721:23;57731:6;;57738:1;57731:9;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;57742:1;57721:9;:23::i;:::-;57764:33;57784:6;;57791:1;57784:9;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;57764:33;::::0;;-1:-1:-1;;;;;8211:32:1;;;8193:51;;57795:1:0::1;8275:2:1::0;8260:18;;8253:34;8166:18;57764:33:0::1;;;;;;;57814:15;;57812:17;;;;;:::i;:::-;::::0;;;-1:-1:-1;57844:9:0::1;::::0;-1:-1:-1;;;;;57844:9:0::1;:22;:9;57879:6:::0;;57886:1;57879:9;;::::1;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;57844:45;::::0;-1:-1:-1;;;;;;57844:45:0::1;::::0;;;;;;-1:-1:-1;;;;;7439:15:1;;;57844:45:0::1;::::0;::::1;7421:34:1::0;7491:15;;7471:18;;;7464:43;7356:18;;57844:45:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;57701:3;;;;;:::i;:::-;;;;57662:239;;56536:90:::0;6687:6;;-1:-1:-1;;;;;6687:6:0;5397:10;6834:23;6826:68;;;;-1:-1:-1;;;6826:68:0;;;;;;;:::i;:::-;56601:10:::1;:17:::0;56536:90::o;59077:102::-;59135:9;;:36;;-1:-1:-1;;;59135:36:0;;59151:10;59135:36;;;8193:51:1;8260:18;;;8253:34;;;-1:-1:-1;;;;;59135:9:0;;;;:15;;8166:18:1;;59135:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;59077:102;:::o;35143:104::-;35199:13;35232:7;35225:14;;;;;:::i;53652:280::-;51102:8;;53744:11;;51102:8;;51101:9;;:34;;-1:-1:-1;6687:6:0;;-1:-1:-1;;;;;6687:6:0;51114:10;:21;51101:34;51100:72;;;;;51171:1;51157:11;:15;51100:72;:128;;;;;50572:1;51194:11;:33;;51100:128;:208;;;;-1:-1:-1;51293:15:0;;51280:28;;50393:4;51280:28;:::i;:::-;51265:11;51249:13;:11;:13::i;:::-;:27;;;;:::i;:::-;:59;;51100:208;51323:8;;;;:428;;51410:16;;:322;;50572:1;51542:11;:32;:163;;;;;;;;;;;;;;;-1:-1:-1;;;51542:163:0;;;51323:428;;51542:163;;;;;;;;;;;;;;;;;;51323:428;;51410:322;;;;;;;;;;;;;;;;;;51323:428;;;;;;;;;;;;;;;;-1:-1:-1;;;51323:428:0;;;;51078:684;;;;;-1:-1:-1;;;51078:684:0;;;;;;;;:::i;:::-;-1:-1:-1;51777:17:0;;;;;;;:25;;51798:4;51777:25;51773:618;;;50519:1;51845:11;:43;;:157;;;;;50456:1;51941:11;51913:25;51927:10;51913:13;:25::i;:::-;:39;;;;:::i;:::-;:89;;51845:157;50519:1;52021:11;:42;:170;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51819:387;;;;;-1:-1:-1;;;51819:387:0;;;;;;;;:::i;:::-;;51773:618;;;52308:13;;52293:11;52265:25;52279:10;52265:13;:25::i;:::-;:39;;;;:::i;:::-;:56;;52239:140;;;;-1:-1:-1;;;52239:140:0;;11903:2:1;52239:140:0;;;11885:21:1;11942:2;11922:18;;;11915:30;-1:-1:-1;;;11961:18:1;;;11954:52;12023:18;;52239:140:0;11701:346:1;52239:140:0;52443:11;52436:4;;:18;;;;:::i;:::-;52423:9;:31;;:56;;;-1:-1:-1;6687:6:0;;-1:-1:-1;;;;;6687:6:0;52458:10;:21;52423:56;52401:124;;;;-1:-1:-1;;;52401:124:0;;11556:2:1;52401:124:0;;;11538:21:1;11595:2;11575:18;;;11568:30;-1:-1:-1;;;11614:18:1;;;11607:48;11672:18;;52401:124:0;11354:342:1;52401:124:0;53795:17:::1;::::0;;;::::1;;;:26;::::0;:51:::1;;-1:-1:-1::0;6687:6:0;;-1:-1:-1;;;;;6687:6:0;53825:10:::1;:21;53795:51;53773:115;;;::::0;-1:-1:-1;;;53773:115:0;;12966:2:1;53773:115:0::1;::::0;::::1;12948:21:1::0;13005:2;12985:18;;;12978:30;-1:-1:-1;;;13024:18:1;;;13017:44;13078:18;;53773:115:0::1;12764:338:1::0;53773:115:0::1;53899:25;53912:11;53899:12;:25::i;36891:302::-:0;-1:-1:-1;;;;;37005:24:0;;5397:10;37005:24;37001:54;;;37038:17;;-1:-1:-1;;;37038:17:0;;;;;;;;;;;37001:54;5397:10;37068:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;37068:42:0;;;;;;;;;;;;:53;;-1:-1:-1;;37068:53:0;;;;;;;;;;37137:48;;9354:41:1;;;37068:42:0;;5397:10;37137:48;;9327:18:1;37137:48:0;;;;;;;36891:302;;:::o;38042:406::-;38209:28;38219:4;38225:2;38229:7;38209:9;:28::i;:::-;-1:-1:-1;;;;;38266:13:0;;9645:19;:23;;38266:89;;;;;38299:56;38330:4;38336:2;38340:7;38349:5;38299:30;:56::i;:::-;38298:57;38266:89;38248:193;;;38389:40;;-1:-1:-1;;;38389:40:0;;;;;;;;;;;52778:629;52896:13;52935:16;52943:7;52935;:16::i;:::-;52927:25;;;;;;52967:10;;;;;;;52963:73;;53010:14;53003:21;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52778:629;;;:::o;52963:73::-;53046:28;53077:10;:8;:10::i;:::-;53046:41;;53149:1;53124:14;53118:28;:32;:281;;;;;;;;;;;;;;;;;53242:14;53283:18;:7;:16;:18::i;:::-;53199:159;;;;;;;;;:::i;:::-;;;;;;;;;;;;;53118:281;53098:301;52778:629;-1:-1:-1;;;52778:629:0:o;55621:109::-;6687:6;;-1:-1:-1;;;;;6687:6:0;5397:10;6834:23;6826:68;;;;-1:-1:-1;;;6826:68:0;;;;;;;:::i;:::-;55705:17:::1;::::0;;-1:-1:-1;;55684:38:0;::::1;55705:17:::0;;;;::::1;;;55704:18;55684:38:::0;;::::1;;::::0;;55621:109::o;56254:274::-;6687:6;;-1:-1:-1;;;;;6687:6:0;5397:10;6834:23;6826:68;;;;-1:-1:-1;;;6826:68:0;;;;;;;:::i;:::-;56397:13:::1;:11;:13::i;:::-;56384:26;::::0;50393:4:::1;56384:26;:::i;:::-;56361:19;:49;;56339:133;;;::::0;-1:-1:-1;;;56339:133:0;;10058:2:1;56339:133:0::1;::::0;::::1;10040:21:1::0;10097:2;10077:18;;;10070:30;10136:34;10116:18;;;10109:62;-1:-1:-1;;;10187:18:1;;;10180:32;10229:19;;56339:133:0::1;9856:398:1::0;56339:133:0::1;56483:15;:37:::0;56254:274::o;53940:506::-;51102:8;;54063:11;;51102:8;;51101:9;;:34;;-1:-1:-1;6687:6:0;;-1:-1:-1;;;;;6687:6:0;51114:10;:21;51101:34;51100:72;;;;;51171:1;51157:11;:15;51100:72;:128;;;;;50572:1;51194:11;:33;;51100:128;:208;;;;-1:-1:-1;51293:15:0;;51280:28;;50393:4;51280:28;:::i;:::-;51265:11;51249:13;:11;:13::i;:::-;:27;;;;:::i;:::-;:59;;51100:208;51323:8;;;;:428;;51410:16;;:322;;50572:1;51542:11;:32;:163;;;;;;;;;;;;;;;-1:-1:-1;;;51542:163:0;;;51323:428;;51542:163;;;;;;;;;;;;;;;;;;51323:428;;51410:322;;;;;;;;;;;;;;;;;;51323:428;;;;;;;;;;;;;;;;-1:-1:-1;;;51323:428:0;;;;51078:684;;;;;-1:-1:-1;;;51078:684:0;;;;;;;;:::i;:::-;-1:-1:-1;51777:17:0;;;;;;;:25;;51798:4;51777:25;51773:618;;;50519:1;51845:11;:43;;:157;;;;;50456:1;51941:11;51913:25;51927:10;51913:13;:25::i;:::-;:39;;;;:::i;:::-;:89;;51845:157;50519:1;52021:11;:42;:170;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51819:387;;;;;-1:-1:-1;;;51819:387:0;;;;;;;;:::i;:::-;;51773:618;;;52308:13;;52293:11;52265:25;52279:10;52265:13;:25::i;:::-;:39;;;;:::i;:::-;:56;;52239:140;;;;-1:-1:-1;;;52239:140:0;;11903:2:1;52239:140:0;;;11885:21:1;11942:2;11922:18;;;11915:30;-1:-1:-1;;;11961:18:1;;;11954:52;12023:18;;52239:140:0;11701:346:1;52239:140:0;52443:11;52436:4;;:18;;;;:::i;:::-;52423:9;:31;;:56;;;-1:-1:-1;6687:6:0;;-1:-1:-1;;;;;6687:6:0;52458:10;:21;52423:56;52401:124;;;;-1:-1:-1;;;52401:124:0;;11556:2:1;52401:124:0;;;11538:21:1;11595:2;11575:18;;;11568:30;-1:-1:-1;;;11614:18:1;;;11607:48;11672:18;;52401:124:0;11354:342:1;52401:124:0;54115:17:::1;::::0;;;::::1;;;:25;;54136:4;54115:25;:172:::0;::::1;;;-1:-1:-1::0;54196:10:0::1;::::0;54239:28:::1;::::0;-1:-1:-1;;54256:10:0::1;6064:2:1::0;6060:15;6056:53;54239:28:0::1;::::0;::::1;6044:66:1::0;54161:126:0::1;::::0;54196:10;6126:12:1;;54239:28:0::1;;;;;;;;;;;;54229:39;;;;;;54161:5;:12;;:126;;;;;:::i;:::-;54114:199;;;-1:-1:-1::0;6687:6:0;;-1:-1:-1;;;;;6687:6:0;54292:10:::1;:21;54114:199;54329:17;::::0;;;::::1;;;54328:18;:63;;;;;;;;;;;;;;;-1:-1:-1::0;;;54328:63:0::1;;::::0;::::1;;;;;;;;;;;;;;;;-1:-1:-1::0;;;54328:63:0::1;;::::0;::::1;54092:310;;;;;-1:-1:-1::0;;;54092:310:0::1;;;;;;;;:::i;:::-;;54413:25;54426:11;54413:12;:25::i;56634:126::-:0;6687:6;;-1:-1:-1;;;;;6687:6:0;5397:10;6834:23;6826:68;;;;-1:-1:-1;;;6826:68:0;;;;;;;:::i;:::-;56720:32;;::::1;::::0;:14:::1;::::0;:32:::1;::::0;::::1;::::0;::::1;:::i;7523:238::-:0;6687:6;;-1:-1:-1;;;;;6687:6:0;5397:10;6834:23;6826:68;;;;-1:-1:-1;;;6826:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7626:22:0;::::1;7604:110;;;::::0;-1:-1:-1;;;7604:110:0;;10461:2:1;7604:110:0::1;::::0;::::1;10443:21:1::0;10500:2;10480:18;;;10473:30;10539:34;10519:18;;;10512:62;-1:-1:-1;;;10590:18:1;;;10583:36;10636:19;;7604:110:0::1;10259:402:1::0;7604:110:0::1;7725:28;7744:8;7725:18;:28::i;:::-;7523:238:::0;:::o;55531:82::-;6687:6;;-1:-1:-1;;;;;6687:6:0;5397:10;6834:23;6826:68;;;;-1:-1:-1;;;6826:68:0;;;;;;;:::i;:::-;55597:8:::1;::::0;;-1:-1:-1;;55585:20:0;::::1;55597:8;::::0;;::::1;55596:9;55585:20;::::0;;55531:82::o;38703:213::-;38760:4;38816:7;52645:1;38797:26;;:66;;;;;38850:13;;38840:7;:23;38797:66;:111;;;;-1:-1:-1;;38881:20:0;;;;:11;:20;;;;;:27;-1:-1:-1;;;38881:27:0;;;;38880:28;;38703:213::o;46583:196::-;46698:24;;;;:15;:24;;;;;;:29;;-1:-1:-1;;;;;;46698:29:0;-1:-1:-1;;;;;46698:29:0;;;;;;;;;46743:28;;46698:24;;46743:28;;;;;;;46583:196;;;:::o;42033:2138::-;42148:35;42186:20;42198:7;42186:11;:20::i;:::-;42261:18;;42148:58;;-1:-1:-1;42219:22:0;;-1:-1:-1;;;;;42245:34:0;5397:10;-1:-1:-1;;;;;42245:34:0;;:101;;;-1:-1:-1;42313:18:0;;42296:50;;5397:10;37264:214;:::i;42296:50::-;42245:154;;;-1:-1:-1;5397:10:0;42363:20;42375:7;42363:11;:20::i;:::-;-1:-1:-1;;;;;42363:36:0;;42245:154;42219:181;;42418:17;42413:66;;42444:35;;-1:-1:-1;;;42444:35:0;;;;;;;;;;;42413:66;42516:4;-1:-1:-1;;;;;42494:26:0;:13;:18;;;-1:-1:-1;;;;;42494:26:0;;42490:67;;42529:28;;-1:-1:-1;;;42529:28:0;;;;;;;;;;;42490:67;-1:-1:-1;;;;;42572:16:0;;42568:52;;42597:23;;-1:-1:-1;;;42597:23:0;;;;;;;;;;;42568:52;42633:43;42655:4;42661:2;42665:7;42674:1;42633:21;:43::i;:::-;42741:49;42758:1;42762:7;42771:13;:18;;;42741:8;:49::i;:::-;-1:-1:-1;;;;;43086:18:0;;;;;;;:12;:18;;;;;;;;:31;;-1:-1:-1;;43086:31:0;;;-1:-1:-1;;;;;43086:31:0;;;-1:-1:-1;;43086:31:0;;;;;;;43132:16;;;;;;;;;:29;;;;;;;;-1:-1:-1;43132:29:0;;;;;;;;;;;43178:20;;;:11;:20;;;;;;:30;;-1:-1:-1;;;;;;43223:61:0;;;;-1:-1:-1;;;43268:15:0;43223:61;;;;;;;;;;;43558:11;;;43588:24;;;;;:29;43558:11;;43588:29;43584:471;;43813:13;;43799:11;:27;43795:245;;;43883:18;;;43851:24;;;:11;:24;;;;;;;;:50;;43966:54;;;;-1:-1:-1;;;;;43924:96:0;-1:-1:-1;;;43924:96:0;-1:-1:-1;;;;;;43924:96:0;;;-1:-1:-1;;;;;43851:50:0;;;43924:96;;;;;;;43795:245;43061:1005;44102:7;44098:2;-1:-1:-1;;;;;44083:27:0;44092:4;-1:-1:-1;;;;;44083:27:0;;;;;;;;;;;44121:42;58930:139;32214:207;32275:7;-1:-1:-1;;;;;32299:19:0;;32295:59;;32327:27;;-1:-1:-1;;;32327:27:0;;;;;;;;;;;32295:59;-1:-1:-1;;;;;;32380:19:0;;;;;:12;:19;;;;;:32;-1:-1:-1;;;32380:32:0;;-1:-1:-1;;;;;32380:32:0;;32214:207::o;33581:1140::-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;33723:7:0;;52645:1;33772:23;;:47;;;;;33806:13;;33799:4;:20;33772:47;33768:886;;;33840:31;33874:17;;;:11;:17;;;;;;;;;33840:51;;;;;;;;;-1:-1:-1;;;;;33840:51:0;;;;-1:-1:-1;;;33840:51:0;;-1:-1:-1;;;;;33840:51:0;;;;;;;;-1:-1:-1;;;33840:51:0;;;;;;;;;;;;;;33910:729;;33960:14;;-1:-1:-1;;;;;33960:28:0;;33956:101;;34024:9;33581:1140;-1:-1:-1;;;33581:1140:0:o;33956:101::-;-1:-1:-1;;;34399:6:0;34444:17;;;;:11;:17;;;;;;;;;34432:29;;;;;;;;;-1:-1:-1;;;;;34432:29:0;;;;;-1:-1:-1;;;34432:29:0;;-1:-1:-1;;;;;34432:29:0;;;;;;;;-1:-1:-1;;;34432:29:0;;;;;;;;;;;;;34492:28;34488:109;;34560:9;33581:1140;-1:-1:-1;;;33581:1140:0:o;34488:109::-;34359:261;;;33821:833;33768:886;34682:31;;-1:-1:-1;;;34682:31:0;;;;;;;;;;;7921:191;8014:6;;;-1:-1:-1;;;;;8031:17:0;;;-1:-1:-1;;;;;;8031:17:0;;;;;;;8064:40;;8014:6;;;8031:17;8014:6;;8064:40;;7995:16;;8064:40;7984:128;7921:191;:::o;38924:104::-;38993:27;39003:2;39007:8;38993:27;;;;;;;;;;;;:9;:27::i;53415:229::-;53478:34;53488:10;53500:11;53478:9;:34::i;:::-;53528:44;;;53548:10;8193:51:1;;8275:2;8260:18;;8253:34;;;53528:44:0;;8166:18:1;53528:44:0;;;;;;;53583:9;;:53;;-1:-1:-1;;;53583:53:0;;53612:10;53583:53;;;8193:51:1;8260:18;;;8253:34;;;-1:-1:-1;;;;;53583:9:0;;;;:28;;8166:18:1;;53583:53:0;8011:282:1;47271:772:0;47468:155;;-1:-1:-1;;;47468:155:0;;47434:4;;-1:-1:-1;;;;;47468:36:0;;;;;:155;;5397:10;;47554:4;;47577:7;;47603:5;;47468:155;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;47468:155:0;;;;;;;;-1:-1:-1;;47468:155:0;;;;;;;;;;;;:::i;:::-;;;47451:585;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;47794:13:0;;47790:235;;47840:40;;-1:-1:-1;;;47840:40:0;;;;;;;;;;;47790:235;47983:6;47977:13;47968:6;47964:2;47960:15;47953:38;47451:585;-1:-1:-1;;;;;;47679:55:0;-1:-1:-1;;;47679:55:0;;-1:-1:-1;47451:585:0;47271:772;;;;;;:::o;52662:108::-;52722:13;52755:7;52748:14;;;;;:::i;2849:723::-;2905:13;3126:10;3122:53;;-1:-1:-1;;3153:10:0;;;;;;;;;;;;-1:-1:-1;;;3153:10:0;;;;;2849:723::o;3122:53::-;3200:5;3185:12;3241:78;3248:9;;3241:78;;3274:8;;;;:::i;:::-;;-1:-1:-1;3297:10:0;;-1:-1:-1;3305:2:0;3297:10;;:::i;:::-;;;3241:78;;;3329:19;3361:6;-1:-1:-1;;;;;3351:17:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3351:17:0;;3329:39;;3379:154;3386:10;;3379:154;;3413:11;3423:1;3413:11;;:::i;:::-;;-1:-1:-1;3482:10:0;3490:2;3482:5;:10;:::i;:::-;3469:24;;:2;:24;:::i;:::-;3456:39;;3439:6;3446;3439:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;3439:56:0;;;;;;;;-1:-1:-1;3510:11:0;3519:2;3510:11;;:::i;:::-;;;3379:154;;956:190;1081:4;1134;1105:25;1118:5;1125:4;1105:12;:25::i;:::-;:33;;956:190;-1:-1:-1;;;;956:190:0:o;59187:329::-;-1:-1:-1;;;;;59430:18:0;;;59426:83;;59465:9;;:32;;-1:-1:-1;;;59465:32:0;;-1:-1:-1;;;;;7439:15:1;;;59465:32:0;;;7421:34:1;7491:15;;;7471:18;;;7464:43;59465:9:0;;;;:22;;7356:18:1;;59465:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;59187:329;;;;:::o;39391:163::-;39514:32;39520:2;39524:8;39534:5;39541:4;39514:5;:32::i;1508:707::-;1618:7;1666:4;1618:7;1681:497;1705:5;:12;1701:1;:16;1681:497;;;1739:20;1762:5;1768:1;1762:8;;;;;;;;:::i;:::-;;;;;;;1739:31;;1805:12;1789;:28;1785:382;;2318:13;2373:15;;;2409:4;2402:15;;;2456:4;2440:21;;1917:57;;1785:382;;;2318:13;2373:15;;;2409:4;2402:15;;;2456:4;2440:21;;2094:57;;1785:382;-1:-1:-1;1719:3:0;;;;:::i;:::-;;;;1681:497;;;-1:-1:-1;2195:12:0;1508:707;-1:-1:-1;;;1508:707:0:o;39813:1966::-;39952:20;39975:13;-1:-1:-1;;;;;40003:16:0;;39999:48;;40028:19;;-1:-1:-1;;;40028:19:0;;;;;;;;;;;39999:48;40062:13;40058:44;;40084:18;;-1:-1:-1;;;40084:18:0;;;;;;;;;;;40058:44;40115:61;40145:1;40149:2;40153:12;40167:8;40115:21;:61::i;:::-;-1:-1:-1;;;;;40453:16:0;;;;;;:12;:16;;;;;;;;:44;;-1:-1:-1;;40512:49:0;;-1:-1:-1;;;;;40453:44:0;;;;;;;40512:49;;;-1:-1:-1;;;;;40453:44:0;;;;;;40512:49;;;;;;;;;;;;;;;;40578:25;;;:11;:25;;;;;;:35;;-1:-1:-1;;;;;;40628:66:0;;;;-1:-1:-1;;;40678:15:0;40628:66;;;;;;;;;;40578:25;40775:23;;;40819:4;:23;;;;-1:-1:-1;;;;;;40827:13:0;;9645:19;:23;;40827:15;40815:832;;;40863:505;40894:38;;40919:12;;-1:-1:-1;;;;;40894:38:0;;;40911:1;;40894:38;;40911:1;;40894:38;40986:212;41055:1;41088:2;41121:14;;;;;;41166:5;40986:30;:212::i;:::-;40955:365;;41256:40;;-1:-1:-1;;;41256:40:0;;;;;;;;;;;40955:365;41363:3;41347:12;:19;;40863:505;;41449:12;41432:13;;:29;41428:43;;41463:8;;;41428:43;40815:832;;;41512:120;41543:40;;41568:14;;;;;-1:-1:-1;;;;;41543:40:0;;;41560:1;;41543:40;;41560:1;;41543:40;41627:3;41611:12;:19;;41512:120;;40815:832;-1:-1:-1;41661:13:0;:28;41711:60;58930:139;-1:-1:-1;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:406:1;78:5;-1:-1:-1;;;;;104:6:1;101:30;98:56;;;134:18;;:::i;:::-;172:57;217:2;196:15;;-1:-1:-1;;192:29:1;223:4;188:40;172:57;:::i;:::-;163:66;;252:6;245:5;238:21;292:3;283:6;278:3;274:16;271:25;268:45;;;309:1;306;299:12;268:45;358:6;353:3;346:4;339:5;335:16;322:43;412:1;405:4;396:6;389:5;385:18;381:29;374:40;14:406;;;;;:::o;425:173::-;493:20;;-1:-1:-1;;;;;542:31:1;;532:42;;522:70;;588:1;585;578:12;522:70;425:173;;;:::o;603:186::-;662:6;715:2;703:9;694:7;690:23;686:32;683:52;;;731:1;728;721:12;683:52;754:29;773:9;754:29;:::i;794:260::-;862:6;870;923:2;911:9;902:7;898:23;894:32;891:52;;;939:1;936;929:12;891:52;962:29;981:9;962:29;:::i;:::-;952:39;;1010:38;1044:2;1033:9;1029:18;1010:38;:::i;:::-;1000:48;;794:260;;;;;:::o;1059:328::-;1136:6;1144;1152;1205:2;1193:9;1184:7;1180:23;1176:32;1173:52;;;1221:1;1218;1211:12;1173:52;1244:29;1263:9;1244:29;:::i;:::-;1234:39;;1292:38;1326:2;1315:9;1311:18;1292:38;:::i;:::-;1282:48;;1377:2;1366:9;1362:18;1349:32;1339:42;;1059:328;;;;;:::o;1392:666::-;1487:6;1495;1503;1511;1564:3;1552:9;1543:7;1539:23;1535:33;1532:53;;;1581:1;1578;1571:12;1532:53;1604:29;1623:9;1604:29;:::i;:::-;1594:39;;1652:38;1686:2;1675:9;1671:18;1652:38;:::i;:::-;1642:48;;1737:2;1726:9;1722:18;1709:32;1699:42;;1792:2;1781:9;1777:18;1764:32;-1:-1:-1;;;;;1811:6:1;1808:30;1805:50;;;1851:1;1848;1841:12;1805:50;1874:22;;1927:4;1919:13;;1915:27;-1:-1:-1;1905:55:1;;1956:1;1953;1946:12;1905:55;1979:73;2044:7;2039:2;2026:16;2021:2;2017;2013:11;1979:73;:::i;:::-;1969:83;;;1392:666;;;;;;;:::o;2063:347::-;2128:6;2136;2189:2;2177:9;2168:7;2164:23;2160:32;2157:52;;;2205:1;2202;2195:12;2157:52;2228:29;2247:9;2228:29;:::i;:::-;2218:39;;2307:2;2296:9;2292:18;2279:32;2354:5;2347:13;2340:21;2333:5;2330:32;2320:60;;2376:1;2373;2366:12;2320:60;2399:5;2389:15;;;2063:347;;;;;:::o;2415:254::-;2483:6;2491;2544:2;2532:9;2523:7;2519:23;2515:32;2512:52;;;2560:1;2557;2550:12;2512:52;2583:29;2602:9;2583:29;:::i;:::-;2573:39;2659:2;2644:18;;;;2631:32;;-1:-1:-1;;;2415:254:1:o;2674:615::-;2760:6;2768;2821:2;2809:9;2800:7;2796:23;2792:32;2789:52;;;2837:1;2834;2827:12;2789:52;2877:9;2864:23;-1:-1:-1;;;;;2947:2:1;2939:6;2936:14;2933:34;;;2963:1;2960;2953:12;2933:34;3001:6;2990:9;2986:22;2976:32;;3046:7;3039:4;3035:2;3031:13;3027:27;3017:55;;3068:1;3065;3058:12;3017:55;3108:2;3095:16;3134:2;3126:6;3123:14;3120:34;;;3150:1;3147;3140:12;3120:34;3203:7;3198:2;3188:6;3185:1;3181:14;3177:2;3173:23;3169:32;3166:45;3163:65;;;3224:1;3221;3214:12;3163:65;3255:2;3247:11;;;;;3277:6;;-1:-1:-1;2674:615:1;;-1:-1:-1;;;;2674:615:1:o;3294:180::-;3353:6;3406:2;3394:9;3385:7;3381:23;3377:32;3374:52;;;3422:1;3419;3412:12;3374:52;-1:-1:-1;3445:23:1;;3294:180;-1:-1:-1;3294:180:1:o;3479:245::-;3537:6;3590:2;3578:9;3569:7;3565:23;3561:32;3558:52;;;3606:1;3603;3596:12;3558:52;3645:9;3632:23;3664:30;3688:5;3664:30;:::i;3729:249::-;3798:6;3851:2;3839:9;3830:7;3826:23;3822:32;3819:52;;;3867:1;3864;3857:12;3819:52;3899:9;3893:16;3918:30;3942:5;3918:30;:::i;3983:450::-;4052:6;4105:2;4093:9;4084:7;4080:23;4076:32;4073:52;;;4121:1;4118;4111:12;4073:52;4161:9;4148:23;-1:-1:-1;;;;;4186:6:1;4183:30;4180:50;;;4226:1;4223;4216:12;4180:50;4249:22;;4302:4;4294:13;;4290:27;-1:-1:-1;4280:55:1;;4331:1;4328;4321:12;4280:55;4354:73;4419:7;4414:2;4401:16;4396:2;4392;4388:11;4354:73;:::i;4623:1025::-;4716:6;4724;4777:2;4765:9;4756:7;4752:23;4748:32;4745:52;;;4793:1;4790;4783:12;4745:52;4829:9;4816:23;4806:33;;4858:2;4911;4900:9;4896:18;4883:32;-1:-1:-1;;;;;4975:2:1;4967:6;4964:14;4961:34;;;4991:1;4988;4981:12;4961:34;5029:6;5018:9;5014:22;5004:32;;5074:7;5067:4;5063:2;5059:13;5055:27;5045:55;;5096:1;5093;5086:12;5045:55;5132:2;5119:16;5154:2;5150;5147:10;5144:36;;;5160:18;;:::i;:::-;5206:2;5203:1;5199:10;5189:20;;5229:28;5253:2;5249;5245:11;5229:28;:::i;:::-;5291:15;;;5322:12;;;;5354:11;;;5384;;;5380:20;;5377:33;-1:-1:-1;5374:53:1;;;5423:1;5420;5413:12;5374:53;5445:1;5436:10;;5455:163;5469:2;5466:1;5463:9;5455:163;;;5526:17;;5514:30;;5487:1;5480:9;;;;;5564:12;;;;5596;;5455:163;;;5459:3;5637:5;5627:15;;;;;;;;4623:1025;;;;;:::o;5653:257::-;5694:3;5732:5;5726:12;5759:6;5754:3;5747:19;5775:63;5831:6;5824:4;5819:3;5815:14;5808:4;5801:5;5797:16;5775:63;:::i;:::-;5892:2;5871:15;-1:-1:-1;;5867:29:1;5858:39;;;;5899:4;5854:50;;5653:257;-1:-1:-1;;5653:257:1:o;6149:637::-;6429:3;6467:6;6461:13;6483:53;6529:6;6524:3;6517:4;6509:6;6505:17;6483:53;:::i;:::-;6599:13;;6558:16;;;;6621:57;6599:13;6558:16;6655:4;6643:17;;6621:57;:::i;:::-;-1:-1:-1;;;6700:20:1;;6729:22;;;6778:1;6767:13;;6149:637;-1:-1:-1;;;;6149:637:1:o;7518:488::-;-1:-1:-1;;;;;7787:15:1;;;7769:34;;7839:15;;7834:2;7819:18;;7812:43;7886:2;7871:18;;7864:34;;;7934:3;7929:2;7914:18;;7907:31;;;7712:4;;7955:45;;7980:19;;7972:6;7955:45;:::i;:::-;7947:53;7518:488;-1:-1:-1;;;;;;7518:488:1:o;8577:632::-;8748:2;8800:21;;;8870:13;;8773:18;;;8892:22;;;8719:4;;8748:2;8971:15;;;;8945:2;8930:18;;;8719:4;9014:169;9028:6;9025:1;9022:13;9014:169;;;9089:13;;9077:26;;9158:15;;;;9123:12;;;;9050:1;9043:9;9014:169;;;-1:-1:-1;9200:3:1;;8577:632;-1:-1:-1;;;;;;8577:632:1:o;9632:219::-;9781:2;9770:9;9763:21;9744:4;9801:44;9841:2;9830:9;9826:18;9818:6;9801:44;:::i;12052:356::-;12254:2;12236:21;;;12273:18;;;12266:30;12332:34;12327:2;12312:18;;12305:62;12399:2;12384:18;;12052:356::o;13289:275::-;13360:2;13354:9;13425:2;13406:13;;-1:-1:-1;;13402:27:1;13390:40;;-1:-1:-1;;;;;13445:34:1;;13481:22;;;13442:62;13439:88;;;13507:18;;:::i;:::-;13543:2;13536:22;13289:275;;-1:-1:-1;13289:275:1:o;13569:128::-;13609:3;13640:1;13636:6;13633:1;13630:13;13627:39;;;13646:18;;:::i;:::-;-1:-1:-1;13682:9:1;;13569:128::o;13702:120::-;13742:1;13768;13758:35;;13773:18;;:::i;:::-;-1:-1:-1;13807:9:1;;13702:120::o;13827:168::-;13867:7;13933:1;13929;13925:6;13921:14;13918:1;13915:21;13910:1;13903:9;13896:17;13892:45;13889:71;;;13940:18;;:::i;:::-;-1:-1:-1;13980:9:1;;13827:168::o;14000:125::-;14040:4;14068:1;14065;14062:8;14059:34;;;14073:18;;:::i;:::-;-1:-1:-1;14110:9:1;;14000:125::o;14130:258::-;14202:1;14212:113;14226:6;14223:1;14220:13;14212:113;;;14302:11;;;14296:18;14283:11;;;14276:39;14248:2;14241:10;14212:113;;;14343:6;14340:1;14337:13;14334:48;;;-1:-1:-1;;14378:1:1;14360:16;;14353:27;14130:258::o;14393:136::-;14432:3;14460:5;14450:39;;14469:18;;:::i;:::-;-1:-1:-1;;;14505:18:1;;14393:136::o;14534:380::-;14613:1;14609:12;;;;14656;;;14677:61;;14731:4;14723:6;14719:17;14709:27;;14677:61;14784:2;14776:6;14773:14;14753:18;14750:38;14747:161;;;14830:10;14825:3;14821:20;14818:1;14811:31;14865:4;14862:1;14855:15;14893:4;14890:1;14883:15;14747:161;;14534:380;;;:::o;14919:135::-;14958:3;-1:-1:-1;;14979:17:1;;14976:43;;;14999:18;;:::i;:::-;-1:-1:-1;15046:1:1;15035:13;;14919:135::o;15059:112::-;15091:1;15117;15107:35;;15122:18;;:::i;:::-;-1:-1:-1;15156:9:1;;15059:112::o;15176:127::-;15237:10;15232:3;15228:20;15225:1;15218:31;15268:4;15265:1;15258:15;15292:4;15289:1;15282:15;15308:127;15369:10;15364:3;15360:20;15357:1;15350:31;15400:4;15397:1;15390:15;15424:4;15421:1;15414:15;15440:127;15501:10;15496:3;15492:20;15489:1;15482:31;15532:4;15529:1;15522:15;15556:4;15553:1;15546:15;15572:127;15633:10;15628:3;15624:20;15621:1;15614:31;15664:4;15661:1;15654:15;15688:4;15685:1;15678:15;15704:127;15765:10;15760:3;15756:20;15753:1;15746:31;15796:4;15793:1;15786:15;15820:4;15817:1;15810:15;15836:131;-1:-1:-1;;;;;;15910:32:1;;15900:43;;15890:71;;15957:1;15954;15947:12
Swarm Source
ipfs://96a4b54dd9ff03c08872ab04db0f6aa890bf21c2044ffb485912593e849d410f
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.