ERC-721
Overview
Max Total Supply
100 HSPP
Holders
70
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
1 HSPPLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
HSPP
Compiler Version
v0.8.4+commit.c7e474f2
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-01-22 */ // 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/Address.sol // OpenZeppelin Contracts v4.4.1 (utils/Address.sol) pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Enumerable.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: @openzeppelin/contracts/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/token/ERC721/ERC721.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/ERC721.sol) pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits a {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC721: approve to caller"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File: @openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/ERC721Enumerable.sol) pragma solidity ^0.8.0; /** * @dev This implements an optional extension of {ERC721} defined in the EIP that adds * enumerability of all the token ids in the contract as well as all token ids owned by each * account. */ abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => mapping(uint256 => uint256)) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds"); return _ownedTokens[owner][index]; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds"); return _allTokens[index]; } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` cannot be the zero address. * - `to` cannot be the zero address. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array delete _allTokensIndex[tokenId]; _allTokens.pop(); } } // File: @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: contracts/HSPPG.sol pragma solidity >=0.7.0 <0.9.0; // This for the Sauce ERC-20 Reward Tokens interface SauceToken { function balanceOf(address owner) external view returns (uint256 balance); function allowance(address owner, address spender) external view returns (uint256); function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); } contract HSPP is ERC721Enumerable, Ownable { using Strings for uint256; address private MixContract; string _baseTokenURI; string public baseExtension = ".json"; uint256 public _maxperTX = 3; // Max per mint uint256 public _maxperWalletWaitList = 1; // Waitlist max mint per wallet uint256 public _maxperWalletMint = 3; // Mint max Mint per wallet uint256 public _limit = 100; // Supply of token uint256 public _price = 0.2 ether; // Price uint256 public waitlist_count = 0; // Start count for waitlist address public fundWallet; // Fund Wallet bool public _presaleWLPaused = true; // Contract is paused bool public _PublicPaused = true; // Contract is paused mapping (address => uint256) public perWallet; // Mapping per wallet mapping (address => bool) public waitlist; // Mapping per waitlist SauceToken public TokenContract; // Token functions address payable public payments; // Payable bool public isBurningActive = false; // Paused for Burning Function // Constructor for the token constructor(string memory initbaseURI, address _fundWallet) ERC721("HS Pepper Party Genesis", "HSPP") { require(_fundWallet != address(0), "Zero address error"); setBaseURI(initbaseURI); fundWallet = _fundWallet; } // Internal URI function _baseURI() internal view virtual override returns (string memory) { return _baseTokenURI; } // Token Public only owner functions function setSauceToken (SauceToken _TokenContract) public onlyOwner{ // require(_TokenContract != address(0), "Contract address can't be zero address"); TokenContract = _TokenContract; } // Public view token function getSauceToken(address __address) public view returns(uint256) { require(__address != address(0), "Contract address can't be zero address"); return TokenContract.balanceOf(__address); } // Get Allowance public view function getSauceAllowance(address __address) public view returns(uint256) { require(__address != address(0), "Contract address can't be zero address"); return TokenContract.allowance(__address, address(this)); } // Mint Function public payable function MINT(uint256 num) public payable { uint256 supply = totalSupply(); require( !_PublicPaused, "Sale paused" ); require( num <= _maxperTX, "You are exceeding limit of per transaction TLM" ); require( perWallet[msg.sender] + num <= _maxperWalletMint, "You are exceeding limit of per wallet TLM" ); require( num > 0); require( supply + num <= _limit, "Exceeds maximum HSPP supply" ); require( msg.value >= _price * num, "Ether sent is not correct" ); for(uint256 i = 1 ; i <= num; i++){ _safeMint( msg.sender, supply + i ); } perWallet[msg.sender] += num; } // Mint Function external onlyOwner function mintForAddress(address _to, uint256 _amount) external onlyOwner() { require( _to != address(0), "Zero address error"); require( _amount <= _limit, "Exceeds Limit supply"); uint256 supply = totalSupply(); for(uint256 i; i < _amount; i++){ _safeMint( _to, supply + i ); } _limit -= _amount; } // Internal memory with public view for the wallet of owner function walletOfOwner(address _owner) public view returns(uint256[] memory) { uint256 tokenCount = balanceOf(_owner); uint256[] memory tokensId = new uint256[](tokenCount); for(uint256 i; i < tokenCount; i++){ tokensId[i] = tokenOfOwnerByIndex(_owner, i); } return tokensId; } // Waitlist Mint public payable only for the waitlisted people function WAITLIST_MINT(uint256 num) public payable { uint256 supply = totalSupply(); require( !_presaleWLPaused, "Sale paused" ); require( waitlist[msg.sender] == true, "Only WAITLIST can mint" ); require( perWallet[msg.sender] + num <= _maxperWalletWaitList, "You are exceeding limit of per wallet HSPP" ); require( supply + num <= _limit, "Exceeds maximum HSPP supply" ); require( msg.value >= _price * num, "Ether sent is not correct" ); for(uint256 i; i < num; i++){ _safeMint( msg.sender, supply + i ); } perWallet[msg.sender] += num; } // Bulk Waitlist wallets function bulk_waitlist(address[] memory addresses) public onlyOwner() { for(uint i=0; i < addresses.length; i++){ address addr = addresses[i]; if(waitlist[addr] != true && addr != address(0)){ waitlist[addr] = true; waitlist_count++; } } } // Function remove Waitlist wallet / only owner function remove_waitlist(address _address) public onlyOwner() { require(_address != address(0), "Zero address error"); waitlist[_address] = false; waitlist_count--; } // Just in case Eth does some crazy stuff ( Change price ) only owner function setPrice(uint256 _newPrice) public onlyOwner() { _price = _newPrice; } // Set FundWallet function setFundWallet(address _fundWallet) public onlyOwner() { require(_fundWallet != address(0), "Zero address error"); fundWallet = _fundWallet; } // Max per wallet function setMaxPerWallet(uint256 limit) public onlyOwner { _maxperTX = limit; } // Token URI function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require( _exists(tokenId), "ERC721Metadata: URI query for nonexistent token" ); string memory currentBaseTokenURI = _baseURI(); return bytes(currentBaseTokenURI).length > 0 ? string(abi.encodePacked(currentBaseTokenURI, tokenId.toString(), baseExtension)) : ""; } // Burn Function used for the HSPP Kitchen function burnForMint(uint256 _tokenId) public { require(isBurningActive, "Burning not active"); require(ownerOf(_tokenId) == msg.sender); //Burn token _transfer( msg.sender, 0x000000000000000000000000000000000000dEaD, _tokenId ); } // Pause Burn function toggleBurningActive() public onlyOwner { isBurningActive = !isBurningActive; } // Price Show Public function getPrice() public view returns (uint256){ return _price; } // Public Set URI if Needed function setBaseURI(string memory baseURI) public onlyOwner { _baseTokenURI = baseURI; } // Pause Contract public only owner function PublicPaused() public onlyOwner { _PublicPaused = !_PublicPaused; } // Pause Contract presaleWL only owner function presaleWLPaused() public onlyOwner { _presaleWLPaused = !_presaleWLPaused; } // Withdraw Fund function withdrawAll() public payable onlyOwner { require(payable(fundWallet).send(address(this).balance)); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"initbaseURI","type":"string"},{"internalType":"address","name":"_fundWallet","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"uint256","name":"num","type":"uint256"}],"name":"MINT","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"PublicPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"TokenContract","outputs":[{"internalType":"contract SauceToken","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"num","type":"uint256"}],"name":"WAITLIST_MINT","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"_PublicPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_limit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxperTX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxperWalletMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxperWalletWaitList","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_presaleWLPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"bulk_waitlist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"burnForMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"fundWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"__address","type":"address"}],"name":"getSauceAllowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"__address","type":"address"}],"name":"getSauceToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"isBurningActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mintForAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"payments","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"perWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presaleWLPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"remove_waitlist","outputs":[],"stateMutability":"nonpayable","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":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_fundWallet","type":"address"}],"name":"setFundWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"limit","type":"uint256"}],"name":"setMaxPerWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPrice","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract SauceToken","name":"_TokenContract","type":"address"}],"name":"setSauceToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"toggleBurningActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"waitlist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"waitlist_count","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawAll","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
60c06040526005608081905264173539b7b760d91b60a09081526200002891600d919062000282565b506003600e8190556001600f5560105560646011556702c68af0bb14000060125560006013556014805461ffff60a01b191661010160a01b1790556018805460ff60a01b191690553480156200007d57600080fd5b506040516200349c3803806200349c833981016040819052620000a09162000345565b604080518082018252601781527f4853205065707065722050617274792047656e657369730000000000000000006020808301918252835180850190945260048452630485350560e41b908401528151919291620001019160009162000282565b5080516200011790600190602084019062000282565b505050620001346200012e620001b760201b60201c565b620001bb565b6001600160a01b038116620001855760405162461bcd60e51b81526020600482015260126024820152712d32b9379030b2323932b9b99032b93937b960711b60448201526064015b60405180910390fd5b62000190826200020d565b601480546001600160a01b0319166001600160a01b03929092169190911790555062000483565b3390565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600a546001600160a01b03163314620002695760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016200017c565b80516200027e90600c90602084019062000282565b5050565b828054620002909062000430565b90600052602060002090601f016020900481019282620002b45760008555620002ff565b82601f10620002cf57805160ff1916838001178555620002ff565b82800160010185558215620002ff579182015b82811115620002ff578251825591602001919060010190620002e2565b506200030d92915062000311565b5090565b5b808211156200030d576000815560010162000312565b80516001600160a01b03811681146200034057600080fd5b919050565b6000806040838503121562000358578182fd5b82516001600160401b03808211156200036f578384fd5b818501915085601f83011262000383578384fd5b8151818111156200039857620003986200046d565b604051601f8201601f19908116603f01168101908382118183101715620003c357620003c36200046d565b81604052828152602093508884848701011115620003df578687fd5b8691505b82821015620004025784820184015181830185015290830190620003e3565b828211156200041357868484830101525b95506200042591505085820162000328565b925050509250929050565b600181811c908216806200044557607f821691505b602082108114156200046757634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b61300980620004936000396000f3fe60806040526004361061031a5760003560e01c8063715018a6116101ab578063a6d23e10116100f7578063df2fb92c11610095578063eb84e1f41161006f578063eb84e1f414610908578063f254933d14610928578063f2fde38b14610948578063f54251771461096857600080fd5b8063df2fb92c14610889578063e268e4d31461089f578063e985e9c5146108bf57600080fd5b8063c6682862116100d1578063c66828621461080f578063c87b56dd14610824578063d7f0169314610844578063da79ce811461085957600080fd5b8063a6d23e10146107af578063b88d4fde146107cf578063c4ef71c7146107ef57600080fd5b806391b7f5ed11610164578063972364791161013e578063972364791461074457806398d5fdca14610764578063a22cb46514610779578063a52933811461079957600080fd5b806391b7f5ed146106ef57806395d89b411461070f5780639688738b1461072457600080fd5b8063715018a614610667578063728eafa51461067c578063808bdf7114610692578063853828b6146106a85780638b327800146106b05780638da5cb5b146106d157600080fd5b8063438b63001161026a578063571272471161022357806365543320116101fd5780636554332014610601578063664a1ad6146106145780636729df9a1461063457806370a082311461064757600080fd5b806357127247146105a05780636125c358146105c15780636352211e146105e157600080fd5b8063438b6300146104dc5780634e7cd562146105095780634f6ccce71461051f578063553260f01461053f57806355ce3b9a1461056057806355f804b31461058057600080fd5b80630e9e533d116102d757806323b872dd116102b157806323b872dd1461044f5780632d47d29a1461046f5780632f745c591461049c57806342842e0e146104bc57600080fd5b80630e9e533d1461040557806318160ddd1461041a578063235b6ea11461043957600080fd5b806301ffc9a71461031f57806306fdde0314610354578063081812fc1461037657806308974d95146103ae57806308bfdae2146103d0578063095ea7b3146103e5575b600080fd5b34801561032b57600080fd5b5061033f61033a366004612aac565b610988565b60405190151581526020015b60405180910390f35b34801561036057600080fd5b506103696109b3565b60405161034b9190612cc9565b34801561038257600080fd5b50610396610391366004612b2a565b610a45565b6040516001600160a01b03909116815260200161034b565b3480156103ba57600080fd5b506103ce6103c936600461288b565b610adf565b005b3480156103dc57600080fd5b506103ce610b65565b3480156103f157600080fd5b506103ce6104003660046129cd565b610bb0565b34801561041157600080fd5b506103ce610cc6565b34801561042657600080fd5b506008545b60405190815260200161034b565b34801561044557600080fd5b5061042b60125481565b34801561045b57600080fd5b506103ce61046a3660046128df565b610d11565b34801561047b57600080fd5b5061042b61048a36600461288b565b60156020526000908152604090205481565b3480156104a857600080fd5b5061042b6104b73660046129cd565b610d42565b3480156104c857600080fd5b506103ce6104d73660046128df565b610dd8565b3480156104e857600080fd5b506104fc6104f736600461288b565b610df3565b60405161034b9190612c85565b34801561051557600080fd5b5061042b60105481565b34801561052b57600080fd5b5061042b61053a366004612b2a565b610eb1565b34801561054b57600080fd5b5060145461033f90600160a01b900460ff1681565b34801561056c57600080fd5b506103ce61057b36600461288b565b610f52565b34801561058c57600080fd5b506103ce61059b366004612ae4565b610fc4565b3480156105ac57600080fd5b5060185461033f90600160a01b900460ff1681565b3480156105cd57600080fd5b506103ce6105dc3660046129f8565b611005565b3480156105ed57600080fd5b506103966105fc366004612b2a565b6110f2565b6103ce61060f366004612b2a565b611169565b34801561062057600080fd5b50601454610396906001600160a01b031681565b6103ce610642366004612b2a565b6113bf565b34801561065357600080fd5b5061042b61066236600461288b565b6115d0565b34801561067357600080fd5b506103ce611657565b34801561068857600080fd5b5061042b60135481565b34801561069e57600080fd5b5061042b600e5481565b6103ce61168d565b3480156106bc57600080fd5b5060145461033f90600160a81b900460ff1681565b3480156106dd57600080fd5b50600a546001600160a01b0316610396565b3480156106fb57600080fd5b506103ce61070a366004612b2a565b6116e8565b34801561071b57600080fd5b50610369611717565b34801561073057600080fd5b50601754610396906001600160a01b031681565b34801561075057600080fd5b506103ce61075f36600461288b565b611726565b34801561077057600080fd5b5060125461042b565b34801561078557600080fd5b506103ce61079436600461299c565b611772565b3480156107a557600080fd5b5061042b600f5481565b3480156107bb57600080fd5b50601854610396906001600160a01b031681565b3480156107db57600080fd5b506103ce6107ea36600461291f565b61177d565b3480156107fb57600080fd5b506103ce61080a366004612b2a565b6117b5565b34801561081b57600080fd5b50610369611830565b34801561083057600080fd5b5061036961083f366004612b2a565b6118be565b34801561085057600080fd5b506103ce61199c565b34801561086557600080fd5b5061033f61087436600461288b565b60166020526000908152604090205460ff1681565b34801561089557600080fd5b5061042b60115481565b3480156108ab57600080fd5b506103ce6108ba366004612b2a565b6119e7565b3480156108cb57600080fd5b5061033f6108da3660046128a7565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b34801561091457600080fd5b5061042b61092336600461288b565b611a16565b34801561093457600080fd5b506103ce6109433660046129cd565b611ac2565b34801561095457600080fd5b506103ce61096336600461288b565b611bb1565b34801561097457600080fd5b5061042b61098336600461288b565b611c49565b60006001600160e01b0319821663780e9d6360e01b14806109ad57506109ad82611ca3565b92915050565b6060600080546109c290612efc565b80601f01602080910402602001604051908101604052809291908181526020018280546109ee90612efc565b8015610a3b5780601f10610a1057610100808354040283529160200191610a3b565b820191906000526020600020905b815481529060010190602001808311610a1e57829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b0316610ac35760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b600a546001600160a01b03163314610b095760405162461bcd60e51b8152600401610aba90612da0565b6001600160a01b038116610b2f5760405162461bcd60e51b8152600401610aba90612d74565b6001600160a01b0381166000908152601660205260408120805460ff191690556013805491610b5d83612ee5565b919050555050565b600a546001600160a01b03163314610b8f5760405162461bcd60e51b8152600401610aba90612da0565b6014805460ff60a01b198116600160a01b9182900460ff1615909102179055565b6000610bbb826110f2565b9050806001600160a01b0316836001600160a01b03161415610c295760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610aba565b336001600160a01b0382161480610c455750610c4581336108da565b610cb75760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610aba565b610cc18383611cf3565b505050565b600a546001600160a01b03163314610cf05760405162461bcd60e51b8152600401610aba90612da0565b6014805460ff60a81b198116600160a81b9182900460ff1615909102179055565b610d1b3382611d61565b610d375760405162461bcd60e51b8152600401610aba90612dd5565b610cc1838383611e58565b6000610d4d836115d0565b8210610daf5760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b6064820152608401610aba565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b610cc18383836040518060200160405280600081525061177d565b60606000610e00836115d0565b905060008167ffffffffffffffff811115610e2b57634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015610e54578160200160208202803683370190505b50905060005b82811015610ea957610e6c8582610d42565b828281518110610e8c57634e487b7160e01b600052603260045260246000fd5b602090810291909101015280610ea181612f37565b915050610e5a565b509392505050565b6000610ebc60085490565b8210610f1f5760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b6064820152608401610aba565b60088281548110610f4057634e487b7160e01b600052603260045260246000fd5b90600052602060002001549050919050565b600a546001600160a01b03163314610f7c5760405162461bcd60e51b8152600401610aba90612da0565b6001600160a01b038116610fa25760405162461bcd60e51b8152600401610aba90612d74565b601480546001600160a01b0319166001600160a01b0392909216919091179055565b600a546001600160a01b03163314610fee5760405162461bcd60e51b8152600401610aba90612da0565b805161100190600c90602084019061279a565b5050565b600a546001600160a01b0316331461102f5760405162461bcd60e51b8152600401610aba90612da0565b60005b815181101561100157600082828151811061105d57634e487b7160e01b600052603260045260246000fd5b6020908102919091018101516001600160a01b0381166000908152601690925260409091205490915060ff1615156001148015906110a357506001600160a01b03811615155b156110df576001600160a01b0381166000908152601660205260408120805460ff1916600117905560138054916110d983612f37565b91905055505b50806110ea81612f37565b915050611032565b6000818152600260205260408120546001600160a01b0316806109ad5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610aba565b600061117460085490565b601454909150600160a81b900460ff16156111bf5760405162461bcd60e51b815260206004820152600b60248201526a14d85b19481c185d5cd95960aa1b6044820152606401610aba565b600e548211156112285760405162461bcd60e51b815260206004820152602e60248201527f596f752061726520657863656564696e67206c696d6974206f6620706572207460448201526d72616e73616374696f6e20544c4d60901b6064820152608401610aba565b60105433600090815260156020526040902054611246908490612e57565b11156112a65760405162461bcd60e51b815260206004820152602960248201527f596f752061726520657863656564696e67206c696d6974206f66207065722077604482015268616c6c657420544c4d60b81b6064820152608401610aba565b600082116112b357600080fd5b6011546112c08383612e57565b111561130e5760405162461bcd60e51b815260206004820152601b60248201527f45786365656473206d6178696d756d204853505020737570706c7900000000006044820152606401610aba565b8160125461131c9190612e83565b3410156113675760405162461bcd60e51b8152602060048201526019602482015278115d1a195c881cd95b9d081a5cc81b9bdd0818dbdc9c9958dd603a1b6044820152606401610aba565b60015b828111611396576113843361137f8385612e57565b612003565b8061138e81612f37565b91505061136a565b5033600090815260156020526040812080548492906113b6908490612e57565b90915550505050565b60006113ca60085490565b601454909150600160a01b900460ff16156114155760405162461bcd60e51b815260206004820152600b60248201526a14d85b19481c185d5cd95960aa1b6044820152606401610aba565b3360009081526016602052604090205460ff1615156001146114725760405162461bcd60e51b815260206004820152601660248201527513db9b1e4815d05255131254d50818d85b881b5a5b9d60521b6044820152606401610aba565b600f5433600090815260156020526040902054611490908490612e57565b11156114f15760405162461bcd60e51b815260206004820152602a60248201527f596f752061726520657863656564696e67206c696d6974206f662070657220776044820152690616c6c657420485350560b41b6064820152608401610aba565b6011546114fe8383612e57565b111561154c5760405162461bcd60e51b815260206004820152601b60248201527f45786365656473206d6178696d756d204853505020737570706c7900000000006044820152606401610aba565b8160125461155a9190612e83565b3410156115a55760405162461bcd60e51b8152602060048201526019602482015278115d1a195c881cd95b9d081a5cc81b9bdd0818dbdc9c9958dd603a1b6044820152606401610aba565b60005b82811015611396576115be3361137f8385612e57565b806115c881612f37565b9150506115a8565b60006001600160a01b03821661163b5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610aba565b506001600160a01b031660009081526003602052604090205490565b600a546001600160a01b031633146116815760405162461bcd60e51b8152600401610aba90612da0565b61168b600061201d565b565b600a546001600160a01b031633146116b75760405162461bcd60e51b8152600401610aba90612da0565b6014546040516001600160a01b03909116904780156108fc02916000818181858888f1935050505061168b57600080fd5b600a546001600160a01b031633146117125760405162461bcd60e51b8152600401610aba90612da0565b601255565b6060600180546109c290612efc565b600a546001600160a01b031633146117505760405162461bcd60e51b8152600401610aba90612da0565b601780546001600160a01b0319166001600160a01b0392909216919091179055565b61100133838361206f565b6117873383611d61565b6117a35760405162461bcd60e51b8152600401610aba90612dd5565b6117af8484848461213e565b50505050565b601854600160a01b900460ff166118035760405162461bcd60e51b81526020600482015260126024820152714275726e696e67206e6f742061637469766560701b6044820152606401610aba565b3361180d826110f2565b6001600160a01b03161461182057600080fd5b61182d3361dead83611e58565b50565b600d805461183d90612efc565b80601f016020809104026020016040519081016040528092919081815260200182805461186990612efc565b80156118b65780601f1061188b576101008083540402835291602001916118b6565b820191906000526020600020905b81548152906001019060200180831161189957829003601f168201915b505050505081565b6000818152600260205260409020546060906001600160a01b031661193d5760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610aba565b6000611947612171565b905060008151116119675760405180602001604052806000815250611995565b8061197184612180565b600d60405160200161198593929190612b86565b6040516020818303038152906040525b9392505050565b600a546001600160a01b031633146119c65760405162461bcd60e51b8152600401610aba90612da0565b6018805460ff60a01b198116600160a01b9182900460ff1615909102179055565b600a546001600160a01b03163314611a115760405162461bcd60e51b8152600401610aba90612da0565b600e55565b60006001600160a01b038216611a3e5760405162461bcd60e51b8152600401610aba90612d2e565b601754604051636eb1769f60e11b81526001600160a01b0384811660048301523060248301529091169063dd62ed3e906044015b60206040518083038186803b158015611a8a57600080fd5b505afa158015611a9e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ad9190612b42565b600a546001600160a01b03163314611aec5760405162461bcd60e51b8152600401610aba90612da0565b6001600160a01b038216611b125760405162461bcd60e51b8152600401610aba90612d74565b601154811115611b5c5760405162461bcd60e51b815260206004820152601560248201527445786365656473204c696d69742020737570706c7960581b6044820152606401610aba565b6000611b6760085490565b905060005b82811015611b9457611b828461137f8385612e57565b80611b8c81612f37565b915050611b6c565b508160116000828254611ba79190612ea2565b9091555050505050565b600a546001600160a01b03163314611bdb5760405162461bcd60e51b8152600401610aba90612da0565b6001600160a01b038116611c405760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610aba565b61182d8161201d565b60006001600160a01b038216611c715760405162461bcd60e51b8152600401610aba90612d2e565b6017546040516370a0823160e01b81526001600160a01b038481166004830152909116906370a0823190602401611a72565b60006001600160e01b031982166380ac58cd60e01b1480611cd457506001600160e01b03198216635b5e139f60e01b145b806109ad57506301ffc9a760e01b6001600160e01b03198316146109ad565b600081815260046020526040902080546001600160a01b0319166001600160a01b0384169081179091558190611d28826110f2565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600260205260408120546001600160a01b0316611dda5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610aba565b6000611de5836110f2565b9050806001600160a01b0316846001600160a01b03161480611e205750836001600160a01b0316611e1584610a45565b6001600160a01b0316145b80611e5057506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b0316611e6b826110f2565b6001600160a01b031614611ed35760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401610aba565b6001600160a01b038216611f355760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610aba565b611f4083838361229a565b611f4b600082611cf3565b6001600160a01b0383166000908152600360205260408120805460019290611f74908490612ea2565b90915550506001600160a01b0382166000908152600360205260408120805460019290611fa2908490612e57565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b611001828260405180602001604052806000815250612352565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b816001600160a01b0316836001600160a01b031614156120d15760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610aba565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b612149848484611e58565b61215584848484612385565b6117af5760405162461bcd60e51b8152600401610aba90612cdc565b6060600c80546109c290612efc565b6060816121a45750506040805180820190915260018152600360fc1b602082015290565b8160005b81156121ce57806121b881612f37565b91506121c79050600a83612e6f565b91506121a8565b60008167ffffffffffffffff8111156121f757634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015612221576020820181803683370190505b5090505b8415611e5057612236600183612ea2565b9150612243600a86612f52565b61224e906030612e57565b60f81b81838151811061227157634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350612293600a86612e6f565b9450612225565b6001600160a01b0383166122f5576122f081600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b612318565b816001600160a01b0316836001600160a01b031614612318576123188382612492565b6001600160a01b03821661232f57610cc18161252f565b826001600160a01b0316826001600160a01b031614610cc157610cc18282612608565b61235c838361264c565b6123696000848484612385565b610cc15760405162461bcd60e51b8152600401610aba90612cdc565b60006001600160a01b0384163b1561248757604051630a85bd0160e11b81526001600160a01b0385169063150b7a02906123c9903390899088908890600401612c48565b602060405180830381600087803b1580156123e357600080fd5b505af1925050508015612413575060408051601f3d908101601f1916820190925261241091810190612ac8565b60015b61246d573d808015612441576040519150601f19603f3d011682016040523d82523d6000602084013e612446565b606091505b5080516124655760405162461bcd60e51b8152600401610aba90612cdc565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611e50565b506001949350505050565b6000600161249f846115d0565b6124a99190612ea2565b6000838152600760205260409020549091508082146124fc576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b60085460009061254190600190612ea2565b6000838152600960205260408120546008805493945090928490811061257757634e487b7160e01b600052603260045260246000fd5b9060005260206000200154905080600883815481106125a657634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101929092558281526009909152604080822084905585825281205560088054806125ec57634e487b7160e01b600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b6000612613836115d0565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b6001600160a01b0382166126a25760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610aba565b6000818152600260205260409020546001600160a01b0316156127075760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610aba565b6127136000838361229a565b6001600160a01b038216600090815260036020526040812080546001929061273c908490612e57565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b8280546127a690612efc565b90600052602060002090601f0160209004810192826127c8576000855561280e565b82601f106127e157805160ff191683800117855561280e565b8280016001018555821561280e579182015b8281111561280e5782518255916020019190600101906127f3565b5061281a92915061281e565b5090565b5b8082111561281a576000815560010161281f565b600067ffffffffffffffff83111561284d5761284d612f92565b612860601f8401601f1916602001612e26565b905082815283838301111561287457600080fd5b828260208301376000602084830101529392505050565b60006020828403121561289c578081fd5b813561199581612fa8565b600080604083850312156128b9578081fd5b82356128c481612fa8565b915060208301356128d481612fa8565b809150509250929050565b6000806000606084860312156128f3578081fd5b83356128fe81612fa8565b9250602084013561290e81612fa8565b929592945050506040919091013590565b60008060008060808587031215612934578081fd5b843561293f81612fa8565b9350602085013561294f81612fa8565b925060408501359150606085013567ffffffffffffffff811115612971578182fd5b8501601f81018713612981578182fd5b61299087823560208401612833565b91505092959194509250565b600080604083850312156129ae578182fd5b82356129b981612fa8565b9150602083013580151581146128d4578182fd5b600080604083850312156129df578182fd5b82356129ea81612fa8565b946020939093013593505050565b60006020808385031215612a0a578182fd5b823567ffffffffffffffff80821115612a21578384fd5b818501915085601f830112612a34578384fd5b813581811115612a4657612a46612f92565b8060051b9150612a57848301612e26565b8181528481019084860184860187018a1015612a71578788fd5b8795505b83861015612a9f5780359450612a8a85612fa8565b84835260019590950194918601918601612a75565b5098975050505050505050565b600060208284031215612abd578081fd5b813561199581612fbd565b600060208284031215612ad9578081fd5b815161199581612fbd565b600060208284031215612af5578081fd5b813567ffffffffffffffff811115612b0b578182fd5b8201601f81018413612b1b578182fd5b611e5084823560208401612833565b600060208284031215612b3b578081fd5b5035919050565b600060208284031215612b53578081fd5b5051919050565b60008151808452612b72816020860160208601612eb9565b601f01601f19169290920160200192915050565b600084516020612b998285838a01612eb9565b855191840191612bac8184848a01612eb9565b85549201918390600181811c9080831680612bc857607f831692505b858310811415612be657634e487b7160e01b88526022600452602488fd5b808015612bfa5760018114612c0b57612c37565b60ff19851688528388019550612c37565b60008b815260209020895b85811015612c2f5781548a820152908401908801612c16565b505083880195505b50939b9a5050505050505050505050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612c7b90830184612b5a565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b81811015612cbd57835183529284019291840191600101612ca1565b50909695505050505050565b6020815260006119956020830184612b5a565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60208082526026908201527f436f6e747261637420616464726573732063616e2774206265207a65726f206160408201526564647265737360d01b606082015260800190565b6020808252601290820152712d32b9379030b2323932b9b99032b93937b960711b604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b604051601f8201601f1916810167ffffffffffffffff81118282101715612e4f57612e4f612f92565b604052919050565b60008219821115612e6a57612e6a612f66565b500190565b600082612e7e57612e7e612f7c565b500490565b6000816000190483118215151615612e9d57612e9d612f66565b500290565b600082821015612eb457612eb4612f66565b500390565b60005b83811015612ed4578181015183820152602001612ebc565b838111156117af5750506000910152565b600081612ef457612ef4612f66565b506000190190565b600181811c90821680612f1057607f821691505b60208210811415612f3157634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415612f4b57612f4b612f66565b5060010190565b600082612f6157612f61612f7c565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461182d57600080fd5b6001600160e01b03198116811461182d57600080fdfea26469706673582212209997738bd3671ce0bea89b28ac668598a813577eb6805d7f25eac5e9435c599f64736f6c634300080400330000000000000000000000000000000000000000000000000000000000000040000000000000000000000000a2a245ec0b41f7eaf1966a40f3e68185316533eb0000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d6539725a646e777977354b484c3964564868566b4e314135507744456178464c4d35476143703171486e47642f00000000000000000000
Deployed Bytecode
0x60806040526004361061031a5760003560e01c8063715018a6116101ab578063a6d23e10116100f7578063df2fb92c11610095578063eb84e1f41161006f578063eb84e1f414610908578063f254933d14610928578063f2fde38b14610948578063f54251771461096857600080fd5b8063df2fb92c14610889578063e268e4d31461089f578063e985e9c5146108bf57600080fd5b8063c6682862116100d1578063c66828621461080f578063c87b56dd14610824578063d7f0169314610844578063da79ce811461085957600080fd5b8063a6d23e10146107af578063b88d4fde146107cf578063c4ef71c7146107ef57600080fd5b806391b7f5ed11610164578063972364791161013e578063972364791461074457806398d5fdca14610764578063a22cb46514610779578063a52933811461079957600080fd5b806391b7f5ed146106ef57806395d89b411461070f5780639688738b1461072457600080fd5b8063715018a614610667578063728eafa51461067c578063808bdf7114610692578063853828b6146106a85780638b327800146106b05780638da5cb5b146106d157600080fd5b8063438b63001161026a578063571272471161022357806365543320116101fd5780636554332014610601578063664a1ad6146106145780636729df9a1461063457806370a082311461064757600080fd5b806357127247146105a05780636125c358146105c15780636352211e146105e157600080fd5b8063438b6300146104dc5780634e7cd562146105095780634f6ccce71461051f578063553260f01461053f57806355ce3b9a1461056057806355f804b31461058057600080fd5b80630e9e533d116102d757806323b872dd116102b157806323b872dd1461044f5780632d47d29a1461046f5780632f745c591461049c57806342842e0e146104bc57600080fd5b80630e9e533d1461040557806318160ddd1461041a578063235b6ea11461043957600080fd5b806301ffc9a71461031f57806306fdde0314610354578063081812fc1461037657806308974d95146103ae57806308bfdae2146103d0578063095ea7b3146103e5575b600080fd5b34801561032b57600080fd5b5061033f61033a366004612aac565b610988565b60405190151581526020015b60405180910390f35b34801561036057600080fd5b506103696109b3565b60405161034b9190612cc9565b34801561038257600080fd5b50610396610391366004612b2a565b610a45565b6040516001600160a01b03909116815260200161034b565b3480156103ba57600080fd5b506103ce6103c936600461288b565b610adf565b005b3480156103dc57600080fd5b506103ce610b65565b3480156103f157600080fd5b506103ce6104003660046129cd565b610bb0565b34801561041157600080fd5b506103ce610cc6565b34801561042657600080fd5b506008545b60405190815260200161034b565b34801561044557600080fd5b5061042b60125481565b34801561045b57600080fd5b506103ce61046a3660046128df565b610d11565b34801561047b57600080fd5b5061042b61048a36600461288b565b60156020526000908152604090205481565b3480156104a857600080fd5b5061042b6104b73660046129cd565b610d42565b3480156104c857600080fd5b506103ce6104d73660046128df565b610dd8565b3480156104e857600080fd5b506104fc6104f736600461288b565b610df3565b60405161034b9190612c85565b34801561051557600080fd5b5061042b60105481565b34801561052b57600080fd5b5061042b61053a366004612b2a565b610eb1565b34801561054b57600080fd5b5060145461033f90600160a01b900460ff1681565b34801561056c57600080fd5b506103ce61057b36600461288b565b610f52565b34801561058c57600080fd5b506103ce61059b366004612ae4565b610fc4565b3480156105ac57600080fd5b5060185461033f90600160a01b900460ff1681565b3480156105cd57600080fd5b506103ce6105dc3660046129f8565b611005565b3480156105ed57600080fd5b506103966105fc366004612b2a565b6110f2565b6103ce61060f366004612b2a565b611169565b34801561062057600080fd5b50601454610396906001600160a01b031681565b6103ce610642366004612b2a565b6113bf565b34801561065357600080fd5b5061042b61066236600461288b565b6115d0565b34801561067357600080fd5b506103ce611657565b34801561068857600080fd5b5061042b60135481565b34801561069e57600080fd5b5061042b600e5481565b6103ce61168d565b3480156106bc57600080fd5b5060145461033f90600160a81b900460ff1681565b3480156106dd57600080fd5b50600a546001600160a01b0316610396565b3480156106fb57600080fd5b506103ce61070a366004612b2a565b6116e8565b34801561071b57600080fd5b50610369611717565b34801561073057600080fd5b50601754610396906001600160a01b031681565b34801561075057600080fd5b506103ce61075f36600461288b565b611726565b34801561077057600080fd5b5060125461042b565b34801561078557600080fd5b506103ce61079436600461299c565b611772565b3480156107a557600080fd5b5061042b600f5481565b3480156107bb57600080fd5b50601854610396906001600160a01b031681565b3480156107db57600080fd5b506103ce6107ea36600461291f565b61177d565b3480156107fb57600080fd5b506103ce61080a366004612b2a565b6117b5565b34801561081b57600080fd5b50610369611830565b34801561083057600080fd5b5061036961083f366004612b2a565b6118be565b34801561085057600080fd5b506103ce61199c565b34801561086557600080fd5b5061033f61087436600461288b565b60166020526000908152604090205460ff1681565b34801561089557600080fd5b5061042b60115481565b3480156108ab57600080fd5b506103ce6108ba366004612b2a565b6119e7565b3480156108cb57600080fd5b5061033f6108da3660046128a7565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b34801561091457600080fd5b5061042b61092336600461288b565b611a16565b34801561093457600080fd5b506103ce6109433660046129cd565b611ac2565b34801561095457600080fd5b506103ce61096336600461288b565b611bb1565b34801561097457600080fd5b5061042b61098336600461288b565b611c49565b60006001600160e01b0319821663780e9d6360e01b14806109ad57506109ad82611ca3565b92915050565b6060600080546109c290612efc565b80601f01602080910402602001604051908101604052809291908181526020018280546109ee90612efc565b8015610a3b5780601f10610a1057610100808354040283529160200191610a3b565b820191906000526020600020905b815481529060010190602001808311610a1e57829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b0316610ac35760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b600a546001600160a01b03163314610b095760405162461bcd60e51b8152600401610aba90612da0565b6001600160a01b038116610b2f5760405162461bcd60e51b8152600401610aba90612d74565b6001600160a01b0381166000908152601660205260408120805460ff191690556013805491610b5d83612ee5565b919050555050565b600a546001600160a01b03163314610b8f5760405162461bcd60e51b8152600401610aba90612da0565b6014805460ff60a01b198116600160a01b9182900460ff1615909102179055565b6000610bbb826110f2565b9050806001600160a01b0316836001600160a01b03161415610c295760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610aba565b336001600160a01b0382161480610c455750610c4581336108da565b610cb75760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610aba565b610cc18383611cf3565b505050565b600a546001600160a01b03163314610cf05760405162461bcd60e51b8152600401610aba90612da0565b6014805460ff60a81b198116600160a81b9182900460ff1615909102179055565b610d1b3382611d61565b610d375760405162461bcd60e51b8152600401610aba90612dd5565b610cc1838383611e58565b6000610d4d836115d0565b8210610daf5760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b6064820152608401610aba565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b610cc18383836040518060200160405280600081525061177d565b60606000610e00836115d0565b905060008167ffffffffffffffff811115610e2b57634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015610e54578160200160208202803683370190505b50905060005b82811015610ea957610e6c8582610d42565b828281518110610e8c57634e487b7160e01b600052603260045260246000fd5b602090810291909101015280610ea181612f37565b915050610e5a565b509392505050565b6000610ebc60085490565b8210610f1f5760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b6064820152608401610aba565b60088281548110610f4057634e487b7160e01b600052603260045260246000fd5b90600052602060002001549050919050565b600a546001600160a01b03163314610f7c5760405162461bcd60e51b8152600401610aba90612da0565b6001600160a01b038116610fa25760405162461bcd60e51b8152600401610aba90612d74565b601480546001600160a01b0319166001600160a01b0392909216919091179055565b600a546001600160a01b03163314610fee5760405162461bcd60e51b8152600401610aba90612da0565b805161100190600c90602084019061279a565b5050565b600a546001600160a01b0316331461102f5760405162461bcd60e51b8152600401610aba90612da0565b60005b815181101561100157600082828151811061105d57634e487b7160e01b600052603260045260246000fd5b6020908102919091018101516001600160a01b0381166000908152601690925260409091205490915060ff1615156001148015906110a357506001600160a01b03811615155b156110df576001600160a01b0381166000908152601660205260408120805460ff1916600117905560138054916110d983612f37565b91905055505b50806110ea81612f37565b915050611032565b6000818152600260205260408120546001600160a01b0316806109ad5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610aba565b600061117460085490565b601454909150600160a81b900460ff16156111bf5760405162461bcd60e51b815260206004820152600b60248201526a14d85b19481c185d5cd95960aa1b6044820152606401610aba565b600e548211156112285760405162461bcd60e51b815260206004820152602e60248201527f596f752061726520657863656564696e67206c696d6974206f6620706572207460448201526d72616e73616374696f6e20544c4d60901b6064820152608401610aba565b60105433600090815260156020526040902054611246908490612e57565b11156112a65760405162461bcd60e51b815260206004820152602960248201527f596f752061726520657863656564696e67206c696d6974206f66207065722077604482015268616c6c657420544c4d60b81b6064820152608401610aba565b600082116112b357600080fd5b6011546112c08383612e57565b111561130e5760405162461bcd60e51b815260206004820152601b60248201527f45786365656473206d6178696d756d204853505020737570706c7900000000006044820152606401610aba565b8160125461131c9190612e83565b3410156113675760405162461bcd60e51b8152602060048201526019602482015278115d1a195c881cd95b9d081a5cc81b9bdd0818dbdc9c9958dd603a1b6044820152606401610aba565b60015b828111611396576113843361137f8385612e57565b612003565b8061138e81612f37565b91505061136a565b5033600090815260156020526040812080548492906113b6908490612e57565b90915550505050565b60006113ca60085490565b601454909150600160a01b900460ff16156114155760405162461bcd60e51b815260206004820152600b60248201526a14d85b19481c185d5cd95960aa1b6044820152606401610aba565b3360009081526016602052604090205460ff1615156001146114725760405162461bcd60e51b815260206004820152601660248201527513db9b1e4815d05255131254d50818d85b881b5a5b9d60521b6044820152606401610aba565b600f5433600090815260156020526040902054611490908490612e57565b11156114f15760405162461bcd60e51b815260206004820152602a60248201527f596f752061726520657863656564696e67206c696d6974206f662070657220776044820152690616c6c657420485350560b41b6064820152608401610aba565b6011546114fe8383612e57565b111561154c5760405162461bcd60e51b815260206004820152601b60248201527f45786365656473206d6178696d756d204853505020737570706c7900000000006044820152606401610aba565b8160125461155a9190612e83565b3410156115a55760405162461bcd60e51b8152602060048201526019602482015278115d1a195c881cd95b9d081a5cc81b9bdd0818dbdc9c9958dd603a1b6044820152606401610aba565b60005b82811015611396576115be3361137f8385612e57565b806115c881612f37565b9150506115a8565b60006001600160a01b03821661163b5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610aba565b506001600160a01b031660009081526003602052604090205490565b600a546001600160a01b031633146116815760405162461bcd60e51b8152600401610aba90612da0565b61168b600061201d565b565b600a546001600160a01b031633146116b75760405162461bcd60e51b8152600401610aba90612da0565b6014546040516001600160a01b03909116904780156108fc02916000818181858888f1935050505061168b57600080fd5b600a546001600160a01b031633146117125760405162461bcd60e51b8152600401610aba90612da0565b601255565b6060600180546109c290612efc565b600a546001600160a01b031633146117505760405162461bcd60e51b8152600401610aba90612da0565b601780546001600160a01b0319166001600160a01b0392909216919091179055565b61100133838361206f565b6117873383611d61565b6117a35760405162461bcd60e51b8152600401610aba90612dd5565b6117af8484848461213e565b50505050565b601854600160a01b900460ff166118035760405162461bcd60e51b81526020600482015260126024820152714275726e696e67206e6f742061637469766560701b6044820152606401610aba565b3361180d826110f2565b6001600160a01b03161461182057600080fd5b61182d3361dead83611e58565b50565b600d805461183d90612efc565b80601f016020809104026020016040519081016040528092919081815260200182805461186990612efc565b80156118b65780601f1061188b576101008083540402835291602001916118b6565b820191906000526020600020905b81548152906001019060200180831161189957829003601f168201915b505050505081565b6000818152600260205260409020546060906001600160a01b031661193d5760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610aba565b6000611947612171565b905060008151116119675760405180602001604052806000815250611995565b8061197184612180565b600d60405160200161198593929190612b86565b6040516020818303038152906040525b9392505050565b600a546001600160a01b031633146119c65760405162461bcd60e51b8152600401610aba90612da0565b6018805460ff60a01b198116600160a01b9182900460ff1615909102179055565b600a546001600160a01b03163314611a115760405162461bcd60e51b8152600401610aba90612da0565b600e55565b60006001600160a01b038216611a3e5760405162461bcd60e51b8152600401610aba90612d2e565b601754604051636eb1769f60e11b81526001600160a01b0384811660048301523060248301529091169063dd62ed3e906044015b60206040518083038186803b158015611a8a57600080fd5b505afa158015611a9e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ad9190612b42565b600a546001600160a01b03163314611aec5760405162461bcd60e51b8152600401610aba90612da0565b6001600160a01b038216611b125760405162461bcd60e51b8152600401610aba90612d74565b601154811115611b5c5760405162461bcd60e51b815260206004820152601560248201527445786365656473204c696d69742020737570706c7960581b6044820152606401610aba565b6000611b6760085490565b905060005b82811015611b9457611b828461137f8385612e57565b80611b8c81612f37565b915050611b6c565b508160116000828254611ba79190612ea2565b9091555050505050565b600a546001600160a01b03163314611bdb5760405162461bcd60e51b8152600401610aba90612da0565b6001600160a01b038116611c405760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610aba565b61182d8161201d565b60006001600160a01b038216611c715760405162461bcd60e51b8152600401610aba90612d2e565b6017546040516370a0823160e01b81526001600160a01b038481166004830152909116906370a0823190602401611a72565b60006001600160e01b031982166380ac58cd60e01b1480611cd457506001600160e01b03198216635b5e139f60e01b145b806109ad57506301ffc9a760e01b6001600160e01b03198316146109ad565b600081815260046020526040902080546001600160a01b0319166001600160a01b0384169081179091558190611d28826110f2565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600260205260408120546001600160a01b0316611dda5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610aba565b6000611de5836110f2565b9050806001600160a01b0316846001600160a01b03161480611e205750836001600160a01b0316611e1584610a45565b6001600160a01b0316145b80611e5057506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b0316611e6b826110f2565b6001600160a01b031614611ed35760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401610aba565b6001600160a01b038216611f355760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610aba565b611f4083838361229a565b611f4b600082611cf3565b6001600160a01b0383166000908152600360205260408120805460019290611f74908490612ea2565b90915550506001600160a01b0382166000908152600360205260408120805460019290611fa2908490612e57565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b611001828260405180602001604052806000815250612352565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b816001600160a01b0316836001600160a01b031614156120d15760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610aba565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b612149848484611e58565b61215584848484612385565b6117af5760405162461bcd60e51b8152600401610aba90612cdc565b6060600c80546109c290612efc565b6060816121a45750506040805180820190915260018152600360fc1b602082015290565b8160005b81156121ce57806121b881612f37565b91506121c79050600a83612e6f565b91506121a8565b60008167ffffffffffffffff8111156121f757634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015612221576020820181803683370190505b5090505b8415611e5057612236600183612ea2565b9150612243600a86612f52565b61224e906030612e57565b60f81b81838151811061227157634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350612293600a86612e6f565b9450612225565b6001600160a01b0383166122f5576122f081600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b612318565b816001600160a01b0316836001600160a01b031614612318576123188382612492565b6001600160a01b03821661232f57610cc18161252f565b826001600160a01b0316826001600160a01b031614610cc157610cc18282612608565b61235c838361264c565b6123696000848484612385565b610cc15760405162461bcd60e51b8152600401610aba90612cdc565b60006001600160a01b0384163b1561248757604051630a85bd0160e11b81526001600160a01b0385169063150b7a02906123c9903390899088908890600401612c48565b602060405180830381600087803b1580156123e357600080fd5b505af1925050508015612413575060408051601f3d908101601f1916820190925261241091810190612ac8565b60015b61246d573d808015612441576040519150601f19603f3d011682016040523d82523d6000602084013e612446565b606091505b5080516124655760405162461bcd60e51b8152600401610aba90612cdc565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611e50565b506001949350505050565b6000600161249f846115d0565b6124a99190612ea2565b6000838152600760205260409020549091508082146124fc576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b60085460009061254190600190612ea2565b6000838152600960205260408120546008805493945090928490811061257757634e487b7160e01b600052603260045260246000fd5b9060005260206000200154905080600883815481106125a657634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101929092558281526009909152604080822084905585825281205560088054806125ec57634e487b7160e01b600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b6000612613836115d0565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b6001600160a01b0382166126a25760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610aba565b6000818152600260205260409020546001600160a01b0316156127075760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610aba565b6127136000838361229a565b6001600160a01b038216600090815260036020526040812080546001929061273c908490612e57565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b8280546127a690612efc565b90600052602060002090601f0160209004810192826127c8576000855561280e565b82601f106127e157805160ff191683800117855561280e565b8280016001018555821561280e579182015b8281111561280e5782518255916020019190600101906127f3565b5061281a92915061281e565b5090565b5b8082111561281a576000815560010161281f565b600067ffffffffffffffff83111561284d5761284d612f92565b612860601f8401601f1916602001612e26565b905082815283838301111561287457600080fd5b828260208301376000602084830101529392505050565b60006020828403121561289c578081fd5b813561199581612fa8565b600080604083850312156128b9578081fd5b82356128c481612fa8565b915060208301356128d481612fa8565b809150509250929050565b6000806000606084860312156128f3578081fd5b83356128fe81612fa8565b9250602084013561290e81612fa8565b929592945050506040919091013590565b60008060008060808587031215612934578081fd5b843561293f81612fa8565b9350602085013561294f81612fa8565b925060408501359150606085013567ffffffffffffffff811115612971578182fd5b8501601f81018713612981578182fd5b61299087823560208401612833565b91505092959194509250565b600080604083850312156129ae578182fd5b82356129b981612fa8565b9150602083013580151581146128d4578182fd5b600080604083850312156129df578182fd5b82356129ea81612fa8565b946020939093013593505050565b60006020808385031215612a0a578182fd5b823567ffffffffffffffff80821115612a21578384fd5b818501915085601f830112612a34578384fd5b813581811115612a4657612a46612f92565b8060051b9150612a57848301612e26565b8181528481019084860184860187018a1015612a71578788fd5b8795505b83861015612a9f5780359450612a8a85612fa8565b84835260019590950194918601918601612a75565b5098975050505050505050565b600060208284031215612abd578081fd5b813561199581612fbd565b600060208284031215612ad9578081fd5b815161199581612fbd565b600060208284031215612af5578081fd5b813567ffffffffffffffff811115612b0b578182fd5b8201601f81018413612b1b578182fd5b611e5084823560208401612833565b600060208284031215612b3b578081fd5b5035919050565b600060208284031215612b53578081fd5b5051919050565b60008151808452612b72816020860160208601612eb9565b601f01601f19169290920160200192915050565b600084516020612b998285838a01612eb9565b855191840191612bac8184848a01612eb9565b85549201918390600181811c9080831680612bc857607f831692505b858310811415612be657634e487b7160e01b88526022600452602488fd5b808015612bfa5760018114612c0b57612c37565b60ff19851688528388019550612c37565b60008b815260209020895b85811015612c2f5781548a820152908401908801612c16565b505083880195505b50939b9a5050505050505050505050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612c7b90830184612b5a565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b81811015612cbd57835183529284019291840191600101612ca1565b50909695505050505050565b6020815260006119956020830184612b5a565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60208082526026908201527f436f6e747261637420616464726573732063616e2774206265207a65726f206160408201526564647265737360d01b606082015260800190565b6020808252601290820152712d32b9379030b2323932b9b99032b93937b960711b604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b604051601f8201601f1916810167ffffffffffffffff81118282101715612e4f57612e4f612f92565b604052919050565b60008219821115612e6a57612e6a612f66565b500190565b600082612e7e57612e7e612f7c565b500490565b6000816000190483118215151615612e9d57612e9d612f66565b500290565b600082821015612eb457612eb4612f66565b500390565b60005b83811015612ed4578181015183820152602001612ebc565b838111156117af5750506000910152565b600081612ef457612ef4612f66565b506000190190565b600181811c90821680612f1057607f821691505b60208210811415612f3157634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415612f4b57612f4b612f66565b5060010190565b600082612f6157612f61612f7c565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461182d57600080fd5b6001600160e01b03198116811461182d57600080fdfea26469706673582212209997738bd3671ce0bea89b28ac668598a813577eb6805d7f25eac5e9435c599f64736f6c63430008040033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000a2a245ec0b41f7eaf1966a40f3e68185316533eb0000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d6539725a646e777977354b484c3964564868566b4e314135507744456178464c4d35476143703171486e47642f00000000000000000000
-----Decoded View---------------
Arg [0] : initbaseURI (string): ipfs://Qme9rZdnwyw5KHL9dVHhVkN1A5PwDEaxFLM5GaCp1qHnGd/
Arg [1] : _fundWallet (address): 0xA2a245ec0b41f7EaF1966A40f3e68185316533Eb
-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 000000000000000000000000a2a245ec0b41f7eaf1966a40f3e68185316533eb
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [3] : 697066733a2f2f516d6539725a646e777977354b484c3964564868566b4e3141
Arg [4] : 35507744456178464c4d35476143703171486e47642f00000000000000000000
Deployed Bytecode Sourcemap
44857:7831:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35736:224;;;;;;;;;;-1:-1:-1;35736:224:0;;;;;:::i;:::-;;:::i;:::-;;;9764:14:1;;9757:22;9739:41;;9727:2;9712:18;35736:224:0;;;;;;;;23230:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;24789:221::-;;;;;;;;;;-1:-1:-1;24789:221:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;7889:32:1;;;7871:51;;7859:2;7844:18;24789:221:0;7826:102:1;50303:198:0;;;;;;;;;;-1:-1:-1;50303:198:0;;;;;:::i;:::-;;:::i;:::-;;52429:99;;;;;;;;;;;;;:::i;24312:411::-;;;;;;;;;;-1:-1:-1;24312:411:0;;;;;:::i;:::-;;:::i;52288:90::-;;;;;;;;;;;;;:::i;36376:113::-;;;;;;;;;;-1:-1:-1;36464:10:0;:17;36376:113;;;21683:25:1;;;21671:2;21656:18;36376:113:0;21638:76:1;45359:33:0;;;;;;;;;;;;;;;;25539:339;;;;;;;;;;-1:-1:-1;25539:339:0;;;;;:::i;:::-;;:::i;45728:45::-;;;;;;;;;;-1:-1:-1;45728:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;36044:256;;;;;;;;;;-1:-1:-1;36044:256:0;;;;;:::i;:::-;;:::i;25949:185::-;;;;;;;;;;-1:-1:-1;25949:185:0;;;;;:::i;:::-;;:::i;48674:342::-;;;;;;;;;;-1:-1:-1;48674:342:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;45203:36::-;;;;;;;;;;;;;;;;36566:233;;;;;;;;;;-1:-1:-1;36566:233:0;;;;;:::i;:::-;;:::i;45574:35::-;;;;;;;;;;-1:-1:-1;45574:35:0;;;;-1:-1:-1;;;45574:35:0;;;;;;50717:173;;;;;;;;;;-1:-1:-1;50717:173:0;;;;;:::i;:::-;;:::i;52138:102::-;;;;;;;;;;-1:-1:-1;52138:102:0;;;;;:::i;:::-;;:::i;46021:35::-;;;;;;;;;;-1:-1:-1;46021:35:0;;;;-1:-1:-1;;;46021:35:0;;;;;;49906:335;;;;;;;;;;-1:-1:-1;49906:335:0;;;;;:::i;:::-;;:::i;22924:239::-;;;;;;;;;;-1:-1:-1;22924:239:0;;;;;:::i;:::-;;:::i;47373:798::-;;;;;;:::i;:::-;;:::i;45505:25::-;;;;;;;;;;-1:-1:-1;45505:25:0;;;;-1:-1:-1;;;;;45505:25:0;;;49093:774;;;;;;:::i;:::-;;:::i;22654:208::-;;;;;;;;;;-1:-1:-1;22654:208:0;;;;;:::i;:::-;;:::i;43597:103::-;;;;;;;;;;;;;:::i;45423:35::-;;;;;;;;;;;;;;;;45047:28;;;;;;;;;;;;;;;;52562:123;;;:::i;45651:32::-;;;;;;;;;;-1:-1:-1;45651:32:0;;;;-1:-1:-1;;;45651:32:0;;;;;;42946:87;;;;;;;;;;-1:-1:-1;43019:6:0;;-1:-1:-1;;;;;43019:6:0;42946:87;;50593:93;;;;;;;;;;-1:-1:-1;50593:93:0;;;;;:::i;:::-;;:::i;23399:104::-;;;;;;;;;;;;;:::i;45882:31::-;;;;;;;;;;-1:-1:-1;45882:31:0;;;;-1:-1:-1;;;;;45882:31:0;;;46587:205;;;;;;;;;;-1:-1:-1;46587:205:0;;;;;:::i;:::-;;:::i;52016:81::-;;;;;;;;;;-1:-1:-1;52083:6:0;;52016:81;;25082:155;;;;;;;;;;-1:-1:-1;25082:155:0;;;;;:::i;:::-;;:::i;45117:40::-;;;;;;;;;;;;;;;;45955:31;;;;;;;;;;-1:-1:-1;45955:31:0;;;;-1:-1:-1;;;;;45955:31:0;;;26205:328;;;;;;;;;;-1:-1:-1;26205:328:0;;;;;:::i;:::-;;:::i;51535:320::-;;;;;;;;;;-1:-1:-1;51535:320:0;;;;;:::i;:::-;;:::i;45003:37::-;;;;;;;;;;;;;:::i;51039:440::-;;;;;;;;;;-1:-1:-1;51039:440:0;;;;;:::i;:::-;;:::i;51881:101::-;;;;;;;;;;;;;:::i;45804:41::-;;;;;;;;;;-1:-1:-1;45804:41:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;45285:27;;;;;;;;;;;;;;;;50921:93;;;;;;;;;;-1:-1:-1;50921:93:0;;;;;:::i;:::-;;:::i;25308:164::-;;;;;;;;;;-1:-1:-1;25308:164:0;;;;;:::i;:::-;-1:-1:-1;;;;;25429:25:0;;;25405:4;25429:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;25308:164;47087:235;;;;;;;;;;-1:-1:-1;47087:235:0;;;;;:::i;:::-;;:::i;48221:379::-;;;;;;;;;;-1:-1:-1;48221:379:0;;;;;:::i;:::-;;:::i;43855:201::-;;;;;;;;;;-1:-1:-1;43855:201:0;;;;;:::i;:::-;;:::i;46827:216::-;;;;;;;;;;-1:-1:-1;46827:216:0;;;;;:::i;:::-;;:::i;35736:224::-;35838:4;-1:-1:-1;;;;;;35862:50:0;;-1:-1:-1;;;35862:50:0;;:90;;;35916:36;35940:11;35916:23;:36::i;:::-;35855:97;35736:224;-1:-1:-1;;35736:224:0:o;23230:100::-;23284:13;23317:5;23310:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23230:100;:::o;24789:221::-;24865:7;28132:16;;;:7;:16;;;;;;-1:-1:-1;;;;;28132:16:0;24885:73;;;;-1:-1:-1;;;24885:73:0;;18552:2:1;24885:73:0;;;18534:21:1;18591:2;18571:18;;;18564:30;18630:34;18610:18;;;18603:62;-1:-1:-1;;;18681:18:1;;;18674:42;18733:19;;24885:73:0;;;;;;;;;-1:-1:-1;24978:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;24978:24:0;;24789:221::o;50303:198::-;43019:6;;-1:-1:-1;;;;;43019:6:0;20759:10;43166:23;43158:68;;;;-1:-1:-1;;;43158:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;50384:22:0;::::1;50376:53;;;;-1:-1:-1::0;;;50376:53:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;50440:18:0;::::1;50461:5;50440:18:::0;;;:8:::1;:18;::::0;;;;:26;;-1:-1:-1;;50440:26:0::1;::::0;;50477:14:::1;:16:::0;;;::::1;::::0;::::1;:::i;:::-;;;;;;50303:198:::0;:::o;52429:99::-;43019:6;;-1:-1:-1;;;;;43019:6:0;20759:10;43166:23;43158:68;;;;-1:-1:-1;;;43158:68:0;;;;;;;:::i;:::-;52504:16:::1;::::0;;-1:-1:-1;;;;52484:36:0;::::1;-1:-1:-1::0;;;52504:16:0;;;::::1;;;52503:17;52484:36:::0;;::::1;;::::0;;52429:99::o;24312:411::-;24393:13;24409:23;24424:7;24409:14;:23::i;:::-;24393:39;;24457:5;-1:-1:-1;;;;;24451:11:0;:2;-1:-1:-1;;;;;24451:11:0;;;24443:57;;;;-1:-1:-1;;;24443:57:0;;20152:2:1;24443:57:0;;;20134:21:1;20191:2;20171:18;;;20164:30;20230:34;20210:18;;;20203:62;-1:-1:-1;;;20281:18:1;;;20274:31;20322:19;;24443:57:0;20124:223:1;24443:57:0;20759:10;-1:-1:-1;;;;;24535:21:0;;;;:62;;-1:-1:-1;24560:37:0;24577:5;20759:10;25308:164;:::i;24560:37::-;24513:168;;;;-1:-1:-1;;;24513:168:0;;15773:2:1;24513:168:0;;;15755:21:1;15812:2;15792:18;;;15785:30;15851:34;15831:18;;;15824:62;15922:26;15902:18;;;15895:54;15966:19;;24513:168:0;15745:246:1;24513:168:0;24694:21;24703:2;24707:7;24694:8;:21::i;:::-;24312:411;;;:::o;52288:90::-;43019:6;;-1:-1:-1;;;;;43019:6:0;20759:10;43166:23;43158:68;;;;-1:-1:-1;;;43158:68:0;;;;;;;:::i;:::-;52357:13:::1;::::0;;-1:-1:-1;;;;52340:30:0;::::1;-1:-1:-1::0;;;52357:13:0;;;::::1;;;52356:14;52340:30:::0;;::::1;;::::0;;52288:90::o;25539:339::-;25734:41;20759:10;25767:7;25734:18;:41::i;:::-;25726:103;;;;-1:-1:-1;;;25726:103:0;;;;;;;:::i;:::-;25842:28;25852:4;25858:2;25862:7;25842:9;:28::i;36044:256::-;36141:7;36177:23;36194:5;36177:16;:23::i;:::-;36169:5;:31;36161:87;;;;-1:-1:-1;;;36161:87:0;;11545:2:1;36161:87:0;;;11527:21:1;11584:2;11564:18;;;11557:30;11623:34;11603:18;;;11596:62;-1:-1:-1;;;11674:18:1;;;11667:41;11725:19;;36161:87:0;11517:233:1;36161:87:0;-1:-1:-1;;;;;;36266:19:0;;;;;;;;:12;:19;;;;;;;;:26;;;;;;;;;36044:256::o;25949:185::-;26087:39;26104:4;26110:2;26114:7;26087:39;;;;;;;;;;;;:16;:39::i;48674:342::-;48733:16;48762:18;48783:17;48793:6;48783:9;:17::i;:::-;48762:38;;48813:25;48855:10;48841:25;;;;;;-1:-1:-1;;;48841:25:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;48841:25:0;;48813:53;;48881:9;48877:106;48896:10;48892:1;:14;48877:106;;;48941:30;48961:6;48969:1;48941:19;:30::i;:::-;48927:8;48936:1;48927:11;;;;;;-1:-1:-1;;;48927:11:0;;;;;;;;;;;;;;;;;;:44;48908:3;;;;:::i;:::-;;;;48877:106;;;-1:-1:-1;49000:8:0;48674:342;-1:-1:-1;;;48674:342:0:o;36566:233::-;36641:7;36677:30;36464:10;:17;;36376:113;36677:30;36669:5;:38;36661:95;;;;-1:-1:-1;;;36661:95:0;;21326:2:1;36661:95:0;;;21308:21:1;21365:2;21345:18;;;21338:30;21404:34;21384:18;;;21377:62;-1:-1:-1;;;21455:18:1;;;21448:42;21507:19;;36661:95:0;21298:234:1;36661:95:0;36774:10;36785:5;36774:17;;;;;;-1:-1:-1;;;36774:17:0;;;;;;;;;;;;;;;;;36767:24;;36566:233;;;:::o;50717:173::-;43019:6;;-1:-1:-1;;;;;43019:6:0;20759:10;43166:23;43158:68;;;;-1:-1:-1;;;43158:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;50799:25:0;::::1;50791:56;;;;-1:-1:-1::0;;;50791:56:0::1;;;;;;;:::i;:::-;50858:10;:24:::0;;-1:-1:-1;;;;;;50858:24:0::1;-1:-1:-1::0;;;;;50858:24:0;;;::::1;::::0;;;::::1;::::0;;50717:173::o;52138:102::-;43019:6;;-1:-1:-1;;;;;43019:6:0;20759:10;43166:23;43158:68;;;;-1:-1:-1;;;43158:68:0;;;;;;;:::i;:::-;52209:23;;::::1;::::0;:13:::1;::::0;:23:::1;::::0;::::1;::::0;::::1;:::i;:::-;;52138:102:::0;:::o;49906:335::-;43019:6;;-1:-1:-1;;;;;43019:6:0;20759:10;43166:23;43158:68;;;;-1:-1:-1;;;43158:68:0;;;;;;;:::i;:::-;49991:6:::1;49987:247;50005:9;:16;50001:1;:20;49987:247;;;50042:12;50057:9;50067:1;50057:12;;;;;;-1:-1:-1::0;;;50057:12:0::1;;;;;;;;;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;50087:14:0;::::1;;::::0;;;:8:::1;:14:::0;;;;;;;;50057:12;;-1:-1:-1;50087:14:0::1;;:22;;:14:::0;:22:::1;::::0;::::1;::::0;:44:::1;;-1:-1:-1::0;;;;;;50113:18:0;::::1;::::0;::::1;50087:44;50084:139;;;-1:-1:-1::0;;;;;50151:14:0;::::1;;::::0;;;:8:::1;:14;::::0;;;;:21;;-1:-1:-1;;50151:21:0::1;50168:4;50151:21;::::0;;50191:14:::1;:16:::0;;;::::1;::::0;::::1;:::i;:::-;;;;;;50084:139;-1:-1:-1::0;50023:3:0;::::1;::::0;::::1;:::i;:::-;;;;49987:247;;22924:239:::0;22996:7;23032:16;;;:7;:16;;;;;;-1:-1:-1;;;;;23032:16:0;23067:19;23059:73;;;;-1:-1:-1;;;23059:73:0;;16609:2:1;23059:73:0;;;16591:21:1;16648:2;16628:18;;;16621:30;16687:34;16667:18;;;16660:62;-1:-1:-1;;;16738:18:1;;;16731:39;16787:19;;23059:73:0;16581:231:1;47373:798:0;47426:14;47443:13;36464:10;:17;;36376:113;47443:13;47477;;47426:30;;-1:-1:-1;;;;47477:13:0;;;;47476:14;47467:76;;;;-1:-1:-1;;;47467:76:0;;10444:2:1;47467:76:0;;;10426:21:1;10483:2;10463:18;;;10456:30;-1:-1:-1;;;10502:18:1;;;10495:41;10553:18;;47467:76:0;10416:161:1;47467:76:0;47570:9;;47563:3;:16;;47554:111;;;;-1:-1:-1;;;47554:111:0;;17776:2:1;47554:111:0;;;17758:21:1;17815:2;17795:18;;;17788:30;17854:34;17834:18;;;17827:62;-1:-1:-1;;;17905:18:1;;;17898:44;17959:19;;47554:111:0;17748:236:1;47554:111:0;47716:17;;47695:10;47685:21;;;;:9;:21;;;;;;:27;;47709:3;;47685:27;:::i;:::-;:48;;47676:106;;;;-1:-1:-1;;;47676:106:0;;17019:2:1;47676:106:0;;;17001:21:1;17058:2;17038:18;;;17031:30;17097:34;17077:18;;;17070:62;-1:-1:-1;;;17148:18:1;;;17141:39;17197:19;;47676:106:0;16991:231:1;47676:106:0;47808:1;47802:3;:7;47793:17;;;;;;47846:6;;47830:12;47839:3;47830:6;:12;:::i;:::-;:22;;47821:92;;;;-1:-1:-1;;;47821:92:0;;13547:2:1;47821:92:0;;;13529:21:1;13586:2;13566:18;;;13559:30;13625:29;13605:18;;;13598:57;13672:18;;47821:92:0;13519:177:1;47821:92:0;47955:3;47946:6;;:12;;;;:::i;:::-;47933:9;:25;;47924:90;;;;-1:-1:-1;;;47924:90:0;;20554:2:1;47924:90:0;;;20536:21:1;20593:2;20573:18;;;20566:30;-1:-1:-1;;;20612:18:1;;;20605:55;20677:18;;47924:90:0;20526:175:1;47924:90:0;48043:1;48027:96;48052:3;48047:1;:8;48027:96;;48076:35;48087:10;48099;48108:1;48099:6;:10;:::i;:::-;48076:9;:35::i;:::-;48057:3;;;;:::i;:::-;;;;48027:96;;;-1:-1:-1;48143:10:0;48133:21;;;;:9;:21;;;;;:28;;48158:3;;48133:21;:28;;48158:3;;48133:28;:::i;:::-;;;;-1:-1:-1;;;;47373:798:0:o;49093:774::-;49155:14;49172:13;36464:10;:17;;36376:113;49172:13;49206:16;;49155:30;;-1:-1:-1;;;;49206:16:0;;;;49205:17;49196:81;;;;-1:-1:-1;;;49196:81:0;;10444:2:1;49196:81:0;;;10426:21:1;10483:2;10463:18;;;10456:30;-1:-1:-1;;;10502:18:1;;;10495:41;10553:18;;49196:81:0;10416:161:1;49196:81:0;49307:10;49298:20;;;;:8;:20;;;;;;;;:28;;:20;:28;49289:92;;;;-1:-1:-1;;;49289:92:0;;15009:2:1;49289:92:0;;;14991:21:1;15048:2;15028:18;;;15021:30;-1:-1:-1;;;15067:18:1;;;15060:52;15129:18;;49289:92:0;14981:172:1;49289:92:0;49432:21;;49411:10;49401:21;;;;:9;:21;;;;;;:27;;49425:3;;49401:27;:::i;:::-;:52;;49392:112;;;;-1:-1:-1;;;49392:112:0;;11134:2:1;49392:112:0;;;11116:21:1;11173:2;11153:18;;;11146:30;11212:34;11192:18;;;11185:62;-1:-1:-1;;;11263:18:1;;;11256:40;11313:19;;49392:112:0;11106:232:1;49392:112:0;49540:6;;49524:12;49533:3;49524:6;:12;:::i;:::-;:22;;49515:97;;;;-1:-1:-1;;;49515:97:0;;13547:2:1;49515:97:0;;;13529:21:1;13586:2;13566:18;;;13559:30;13625:29;13605:18;;;13598:57;13672:18;;49515:97:0;13519:177:1;49515:97:0;49654:3;49645:6;;:12;;;;:::i;:::-;49632:9;:25;;49623:95;;;;-1:-1:-1;;;49623:95:0;;20554:2:1;49623:95:0;;;20536:21:1;20593:2;20573:18;;;20566:30;-1:-1:-1;;;20612:18:1;;;20605:55;20677:18;;49623:95:0;20526:175:1;49623:95:0;49735:9;49731:90;49750:3;49746:1;:7;49731:90;;;49774:35;49785:10;49797;49806:1;49797:6;:10;:::i;49774:35::-;49755:3;;;;:::i;:::-;;;;49731:90;;22654:208;22726:7;-1:-1:-1;;;;;22754:19:0;;22746:74;;;;-1:-1:-1;;;22746:74:0;;16198:2:1;22746:74:0;;;16180:21:1;16237:2;16217:18;;;16210:30;16276:34;16256:18;;;16249:62;-1:-1:-1;;;16327:18:1;;;16320:40;16377:19;;22746:74:0;16170:232:1;22746:74:0;-1:-1:-1;;;;;;22838:16:0;;;;;:9;:16;;;;;;;22654:208::o;43597:103::-;43019:6;;-1:-1:-1;;;;;43019:6:0;20759:10;43166:23;43158:68;;;;-1:-1:-1;;;43158:68:0;;;;;;;:::i;:::-;43662:30:::1;43689:1;43662:18;:30::i;:::-;43597:103::o:0;52562:123::-;43019:6;;-1:-1:-1;;;;;43019:6:0;20759:10;43166:23;43158:68;;;;-1:-1:-1;;;43158:68:0;;;;;;;:::i;:::-;52637:10:::1;::::0;52629:47:::1;::::0;-1:-1:-1;;;;;52637:10:0;;::::1;::::0;52654:21:::1;52629:47:::0;::::1;;;::::0;52637:10:::1;52629:47:::0;52637:10;52629:47;52654:21;52637:10;52629:47;::::1;;;;;;52621:56;;;::::0;::::1;50593:93:::0;43019:6;;-1:-1:-1;;;;;43019:6:0;20759:10;43166:23;43158:68;;;;-1:-1:-1;;;43158:68:0;;;;;;;:::i;:::-;50660:6:::1;:18:::0;50593:93::o;23399:104::-;23455:13;23488:7;23481:14;;;;;:::i;46587:205::-;43019:6;;-1:-1:-1;;;;;43019:6:0;20759:10;43166:23;43158:68;;;;-1:-1:-1;;;43158:68:0;;;;;;;:::i;:::-;46754:13:::1;:30:::0;;-1:-1:-1;;;;;;46754:30:0::1;-1:-1:-1::0;;;;;46754:30:0;;;::::1;::::0;;;::::1;::::0;;46587:205::o;25082:155::-;25177:52;20759:10;25210:8;25220;25177:18;:52::i;26205:328::-;26380:41;20759:10;26413:7;26380:18;:41::i;:::-;26372:103;;;;-1:-1:-1;;;26372:103:0;;;;;;;:::i;:::-;26486:39;26500:4;26506:2;26510:7;26519:5;26486:13;:39::i;:::-;26205:328;;;;:::o;51535:320::-;51600:15;;-1:-1:-1;;;51600:15:0;;;;51592:46;;;;-1:-1:-1;;;51592:46:0;;17429:2:1;51592:46:0;;;17411:21:1;17468:2;17448:18;;;17441:30;-1:-1:-1;;;17487:18:1;;;17480:48;17545:18;;51592:46:0;17401:168:1;51592:46:0;51678:10;51657:17;51665:8;51657:7;:17::i;:::-;-1:-1:-1;;;;;51657:31:0;;51649:40;;;;;;51722:125;51746:10;51771:42;51828:8;51722:9;:125::i;:::-;51535:320;:::o;45003:37::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;51039:440::-;28108:4;28132:16;;;:7;:16;;;;;;51137:13;;-1:-1:-1;;;;;28132:16:0;51164:97;;;;-1:-1:-1;;;51164:97:0;;19736:2:1;51164:97:0;;;19718:21:1;19775:2;19755:18;;;19748:30;19814:34;19794:18;;;19787:62;-1:-1:-1;;;19865:18:1;;;19858:45;19920:19;;51164:97:0;19708:237:1;51164:97:0;51268:33;51304:10;:8;:10::i;:::-;51268:46;;51364:1;51334:19;51328:33;:37;:143;;;;;;;;;;;;;;;;;51401:19;51422:18;:7;:16;:18::i;:::-;51442:13;51384:72;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;51328:143;51321:150;51039:440;-1:-1:-1;;;51039:440:0:o;51881:101::-;43019:6;;-1:-1:-1;;;;;43019:6:0;20759:10;43166:23;43158:68;;;;-1:-1:-1;;;43158:68:0;;;;;;;:::i;:::-;51959:15:::1;::::0;;-1:-1:-1;;;;51940:34:0;::::1;-1:-1:-1::0;;;51959:15:0;;;::::1;;;51958:16;51940:34:::0;;::::1;;::::0;;51881:101::o;50921:93::-;43019:6;;-1:-1:-1;;;;;43019:6:0;20759:10;43166:23;43158:68;;;;-1:-1:-1;;;43158:68:0;;;;;;;:::i;:::-;50989:9:::1;:17:::0;50921:93::o;47087:235::-;47153:7;-1:-1:-1;;;;;47181:23:0;;47173:74;;;;-1:-1:-1;;;47173:74:0;;;;;;;:::i;:::-;47265:13;;:49;;-1:-1:-1;;;47265:49:0;;-1:-1:-1;;;;;8387:15:1;;;47265:49:0;;;8369:34:1;47308:4:0;8419:18:1;;;8412:43;47265:13:0;;;;:23;;8304:18:1;;47265:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;48221:379::-;43019:6;;-1:-1:-1;;;;;43019:6:0;20759:10;43166:23;43158:68;;;;-1:-1:-1;;;43158:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;48316:18:0;::::1;48307:50;;;;-1:-1:-1::0;;;48307:50:0::1;;;;;;;:::i;:::-;48388:6;;48377:7;:17;;48368:52;;;::::0;-1:-1:-1;;;48368:52:0;;10784:2:1;48368:52:0::1;::::0;::::1;10766:21:1::0;10823:2;10803:18;;;10796:30;-1:-1:-1;;;10842:18:1;;;10835:51;10903:18;;48368:52:0::1;10756:171:1::0;48368:52:0::1;48431:14;48448:13;36464:10:::0;:17;;36376:113;48448:13:::1;48431:30;;48476:9;48472:87;48491:7;48487:1;:11;48472:87;;;48519:28;48530:3:::0;48535:10:::1;48544:1:::0;48535:6;:10:::1;:::i;48519:28::-;48500:3:::0;::::1;::::0;::::1;:::i;:::-;;;;48472:87;;;;48579:7;48569:6;;:17;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;;;;48221:379:0:o;43855:201::-;43019:6;;-1:-1:-1;;;;;43019:6:0;20759:10;43166:23;43158:68;;;;-1:-1:-1;;;43158:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;43944:22:0;::::1;43936:73;;;::::0;-1:-1:-1;;;43936:73:0;;12376:2:1;43936:73:0::1;::::0;::::1;12358:21:1::0;12415:2;12395:18;;;12388:30;12454:34;12434:18;;;12427:62;-1:-1:-1;;;12505:18:1;;;12498:36;12551:19;;43936:73:0::1;12348:228:1::0;43936:73:0::1;44020:28;44039:8;44020:18;:28::i;46827:216::-:0;46889:7;-1:-1:-1;;;;;46917:23:0;;46909:74;;;;-1:-1:-1;;;46909:74:0;;;;;;;:::i;:::-;47001:13;;:34;;-1:-1:-1;;;47001:34:0;;-1:-1:-1;;;;;7889:32:1;;;47001:34:0;;;7871:51:1;47001:13:0;;;;:23;;7844:18:1;;47001:34:0;7826:102:1;22285:305:0;22387:4;-1:-1:-1;;;;;;22424:40:0;;-1:-1:-1;;;22424:40:0;;:105;;-1:-1:-1;;;;;;;22481:48:0;;-1:-1:-1;;;22481:48:0;22424:105;:158;;;-1:-1:-1;;;;;;;;;;13197:40:0;;;22546:36;13088:157;32025:174;32100:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;32100:29:0;-1:-1:-1;;;;;32100:29:0;;;;;;;;:24;;32154:23;32100:24;32154:14;:23::i;:::-;-1:-1:-1;;;;;32145:46:0;;;;;;;;;;;32025:174;;:::o;28337:348::-;28430:4;28132:16;;;:7;:16;;;;;;-1:-1:-1;;;;;28132:16:0;28447:73;;;;-1:-1:-1;;;28447:73:0;;15360:2:1;28447:73:0;;;15342:21:1;15399:2;15379:18;;;15372:30;15438:34;15418:18;;;15411:62;-1:-1:-1;;;15489:18:1;;;15482:42;15541:19;;28447:73:0;15332:234:1;28447:73:0;28531:13;28547:23;28562:7;28547:14;:23::i;:::-;28531:39;;28600:5;-1:-1:-1;;;;;28589:16:0;:7;-1:-1:-1;;;;;28589:16:0;;:51;;;;28633:7;-1:-1:-1;;;;;28609:31:0;:20;28621:7;28609:11;:20::i;:::-;-1:-1:-1;;;;;28609:31:0;;28589:51;:87;;;-1:-1:-1;;;;;;25429:25:0;;;25405:4;25429:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;28644:32;28581:96;28337:348;-1:-1:-1;;;;28337:348:0:o;31329:578::-;31488:4;-1:-1:-1;;;;;31461:31:0;:23;31476:7;31461:14;:23::i;:::-;-1:-1:-1;;;;;31461:31:0;;31453:85;;;;-1:-1:-1;;;31453:85:0;;19326:2:1;31453:85:0;;;19308:21:1;19365:2;19345:18;;;19338:30;19404:34;19384:18;;;19377:62;-1:-1:-1;;;19455:18:1;;;19448:39;19504:19;;31453:85:0;19298:231:1;31453:85:0;-1:-1:-1;;;;;31557:16:0;;31549:65;;;;-1:-1:-1;;;31549:65:0;;14250:2:1;31549:65:0;;;14232:21:1;14289:2;14269:18;;;14262:30;14328:34;14308:18;;;14301:62;-1:-1:-1;;;14379:18:1;;;14372:34;14423:19;;31549:65:0;14222:226:1;31549:65:0;31627:39;31648:4;31654:2;31658:7;31627:20;:39::i;:::-;31731:29;31748:1;31752:7;31731:8;:29::i;:::-;-1:-1:-1;;;;;31773:15:0;;;;;;:9;:15;;;;;:20;;31792:1;;31773:15;:20;;31792:1;;31773:20;:::i;:::-;;;;-1:-1:-1;;;;;;;31804:13:0;;;;;;:9;:13;;;;;:18;;31821:1;;31804:13;:18;;31821:1;;31804:18;:::i;:::-;;;;-1:-1:-1;;31833:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;31833:21:0;-1:-1:-1;;;;;31833:21:0;;;;;;;;;31872:27;;31833:16;;31872:27;;;;;;;31329:578;;;:::o;29027:110::-;29103:26;29113:2;29117:7;29103:26;;;;;;;;;;;;:9;:26::i;44216:191::-;44309:6;;;-1:-1:-1;;;;;44326:17:0;;;-1:-1:-1;;;;;;44326:17:0;;;;;;;44359:40;;44309:6;;;44326:17;44309:6;;44359:40;;44290:16;;44359:40;44216:191;;:::o;32341:315::-;32496:8;-1:-1:-1;;;;;32487:17:0;:5;-1:-1:-1;;;;;32487:17:0;;;32479:55;;;;-1:-1:-1;;;32479:55:0;;14655:2:1;32479:55:0;;;14637:21:1;14694:2;14674:18;;;14667:30;14733:27;14713:18;;;14706:55;14778:18;;32479:55:0;14627:175:1;32479:55:0;-1:-1:-1;;;;;32545:25:0;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;:46;;-1:-1:-1;;32545:46:0;;;;;;;;;;32607:41;;9739::1;;;32607::0;;9712:18:1;32607:41:0;;;;;;;32341:315;;;:::o;27415:::-;27572:28;27582:4;27588:2;27592:7;27572:9;:28::i;:::-;27619:48;27642:4;27648:2;27652:7;27661:5;27619:22;:48::i;:::-;27611:111;;;;-1:-1:-1;;;27611:111:0;;;;;;;:::i;46422:114::-;46482:13;46515;46508:20;;;;;:::i;365:723::-;421:13;642:10;638:53;;-1:-1:-1;;669:10:0;;;;;;;;;;;;-1:-1:-1;;;669:10:0;;;;;365:723::o;638:53::-;716:5;701:12;757:78;764:9;;757:78;;790:8;;;;:::i;:::-;;-1:-1:-1;813:10:0;;-1:-1:-1;821:2:0;813:10;;:::i;:::-;;;757:78;;;845:19;877:6;867:17;;;;;;-1:-1:-1;;;867:17:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;867:17:0;;845:39;;895:154;902:10;;895:154;;929:11;939:1;929:11;;:::i;:::-;;-1:-1:-1;998:10:0;1006:2;998:5;:10;:::i;:::-;985:24;;:2;:24;:::i;:::-;972:39;;955:6;962;955:14;;;;;;-1:-1:-1;;;955:14:0;;;;;;;;;;;;:56;-1:-1:-1;;;;;955:56:0;;;;;;;;-1:-1:-1;1026:11:0;1035:2;1026:11;;:::i;:::-;;;895:154;;37412:589;-1:-1:-1;;;;;37618:18:0;;37614:187;;37653:40;37685:7;38828:10;:17;;38801:24;;;;:15;:24;;;;;:44;;;38856:24;;;;;;;;;;;;38724:164;37653:40;37614:187;;;37723:2;-1:-1:-1;;;;;37715:10:0;:4;-1:-1:-1;;;;;37715:10:0;;37711:90;;37742:47;37775:4;37781:7;37742:32;:47::i;:::-;-1:-1:-1;;;;;37815:16:0;;37811:183;;37848:45;37885:7;37848:36;:45::i;37811:183::-;37921:4;-1:-1:-1;;;;;37915:10:0;:2;-1:-1:-1;;;;;37915:10:0;;37911:83;;37942:40;37970:2;37974:7;37942:27;:40::i;29364:321::-;29494:18;29500:2;29504:7;29494:5;:18::i;:::-;29545:54;29576:1;29580:2;29584:7;29593:5;29545:22;:54::i;:::-;29523:154;;;;-1:-1:-1;;;29523:154:0;;;;;;;:::i;33221:799::-;33376:4;-1:-1:-1;;;;;33397:13:0;;3267:20;3315:8;33393:620;;33433:72;;-1:-1:-1;;;33433:72:0;;-1:-1:-1;;;;;33433:36:0;;;;;:72;;20759:10;;33484:4;;33490:7;;33499:5;;33433:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33433:72:0;;;;;;;;-1:-1:-1;;33433:72:0;;;;;;;;;;;;:::i;:::-;;;33429:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33675:13:0;;33671:272;;33718:60;;-1:-1:-1;;;33718:60:0;;;;;;;:::i;33671:272::-;33893:6;33887:13;33878:6;33874:2;33870:15;33863:38;33429:529;-1:-1:-1;;;;;;33556:51:0;-1:-1:-1;;;33556:51:0;;-1:-1:-1;33549:58:0;;33393:620;-1:-1:-1;33997:4:0;33221:799;;;;;;:::o;39515:988::-;39781:22;39831:1;39806:22;39823:4;39806:16;:22::i;:::-;:26;;;;:::i;:::-;39843:18;39864:26;;;:17;:26;;;;;;39781:51;;-1:-1:-1;39997:28:0;;;39993:328;;-1:-1:-1;;;;;40064:18:0;;40042:19;40064:18;;;:12;:18;;;;;;;;:34;;;;;;;;;40115:30;;;;;;:44;;;40232:30;;:17;:30;;;;;:43;;;39993:328;-1:-1:-1;40417:26:0;;;;:17;:26;;;;;;;;40410:33;;;-1:-1:-1;;;;;40461:18:0;;;;;:12;:18;;;;;:34;;;;;;;40454:41;39515:988::o;40798:1079::-;41076:10;:17;41051:22;;41076:21;;41096:1;;41076:21;:::i;:::-;41108:18;41129:24;;;:15;:24;;;;;;41502:10;:26;;41051:46;;-1:-1:-1;41129:24:0;;41051:46;;41502:26;;;;-1:-1:-1;;;41502:26:0;;;;;;;;;;;;;;;;;41480:48;;41566:11;41541:10;41552;41541:22;;;;;;-1:-1:-1;;;41541:22:0;;;;;;;;;;;;;;;;;;;;:36;;;;41646:28;;;:15;:28;;;;;;;:41;;;41818:24;;;;;41811:31;41853:10;:16;;;;;-1:-1:-1;;;41853:16:0;;;;;;;;;;;;;;;;;;;;;;;;;;40798:1079;;;;:::o;38302:221::-;38387:14;38404:20;38421:2;38404:16;:20::i;:::-;-1:-1:-1;;;;;38435:16:0;;;;;;;:12;:16;;;;;;;;:24;;;;;;;;:34;;;38480:26;;;:17;:26;;;;;;:35;;;;-1:-1:-1;38302:221:0:o;30021:382::-;-1:-1:-1;;;;;30101:16:0;;30093:61;;;;-1:-1:-1;;;30093:61:0;;18191:2:1;30093:61:0;;;18173:21:1;;;18210:18;;;18203:30;18269:34;18249:18;;;18242:62;18321:18;;30093:61:0;18163:182:1;30093:61:0;28108:4;28132:16;;;:7;:16;;;;;;-1:-1:-1;;;;;28132:16:0;:30;30165:58;;;;-1:-1:-1;;;30165:58:0;;13190:2:1;30165:58:0;;;13172:21:1;13229:2;13209:18;;;13202:30;13268;13248:18;;;13241:58;13316:18;;30165:58:0;13162:178:1;30165:58:0;30236:45;30265:1;30269:2;30273:7;30236:20;:45::i;:::-;-1:-1:-1;;;;;30294:13:0;;;;;;:9;:13;;;;;:18;;30311:1;;30294:13;:18;;30311:1;;30294:18;:::i;:::-;;;;-1:-1:-1;;30323:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;30323:21:0;-1:-1:-1;;;;;30323:21:0;;;;;;;;30362:33;;30323:16;;;30362:33;;30323:16;;30362:33;30021:382;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:406:1;78:5;112:18;104:6;101:30;98:2;;;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:2;;;309:1;306;299:12;268:2;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;88:332;;;;;:::o;425:257::-;484:6;537:2;525:9;516:7;512:23;508:32;505:2;;;558:6;550;543:22;505:2;602:9;589:23;621:31;646:5;621:31;:::i;687:398::-;755:6;763;816:2;804:9;795:7;791:23;787:32;784:2;;;837:6;829;822:22;784:2;881:9;868:23;900:31;925:5;900:31;:::i;:::-;950:5;-1:-1:-1;1007:2:1;992:18;;979:32;1020:33;979:32;1020:33;:::i;:::-;1072:7;1062:17;;;774:311;;;;;:::o;1090:466::-;1167:6;1175;1183;1236:2;1224:9;1215:7;1211:23;1207:32;1204:2;;;1257:6;1249;1242:22;1204:2;1301:9;1288:23;1320:31;1345:5;1320:31;:::i;:::-;1370:5;-1:-1:-1;1427:2:1;1412:18;;1399:32;1440:33;1399:32;1440:33;:::i;:::-;1194:362;;1492:7;;-1:-1:-1;;;1546:2:1;1531:18;;;;1518:32;;1194:362::o;1561:824::-;1656:6;1664;1672;1680;1733:3;1721:9;1712:7;1708:23;1704:33;1701:2;;;1755:6;1747;1740:22;1701:2;1799:9;1786:23;1818:31;1843:5;1818:31;:::i;:::-;1868:5;-1:-1:-1;1925:2:1;1910:18;;1897:32;1938:33;1897:32;1938:33;:::i;:::-;1990:7;-1:-1:-1;2044:2:1;2029:18;;2016:32;;-1:-1:-1;2099:2:1;2084:18;;2071:32;2126:18;2115:30;;2112:2;;;2163:6;2155;2148:22;2112:2;2191:22;;2244:4;2236:13;;2232:27;-1:-1:-1;2222:2:1;;2278:6;2270;2263:22;2222:2;2306:73;2371:7;2366:2;2353:16;2348:2;2344;2340:11;2306:73;:::i;:::-;2296:83;;;1691:694;;;;;;;:::o;2390:436::-;2455:6;2463;2516:2;2504:9;2495:7;2491:23;2487:32;2484:2;;;2537:6;2529;2522:22;2484:2;2581:9;2568:23;2600:31;2625:5;2600:31;:::i;:::-;2650:5;-1:-1:-1;2707:2:1;2692:18;;2679:32;2749:15;;2742:23;2730:36;;2720:2;;2785:6;2777;2770:22;2831:325;2899:6;2907;2960:2;2948:9;2939:7;2935:23;2931:32;2928:2;;;2981:6;2973;2966:22;2928:2;3025:9;3012:23;3044:31;3069:5;3044:31;:::i;:::-;3094:5;3146:2;3131:18;;;;3118:32;;-1:-1:-1;;;2918:238:1:o;3161:1077::-;3245:6;3276:2;3319;3307:9;3298:7;3294:23;3290:32;3287:2;;;3340:6;3332;3325:22;3287:2;3385:9;3372:23;3414:18;3455:2;3447:6;3444:14;3441:2;;;3476:6;3468;3461:22;3441:2;3519:6;3508:9;3504:22;3494:32;;3564:7;3557:4;3553:2;3549:13;3545:27;3535:2;;3591:6;3583;3576:22;3535:2;3632;3619:16;3654:2;3650;3647:10;3644:2;;;3660:18;;:::i;:::-;3706:2;3703:1;3699:10;3689:20;;3729:28;3753:2;3749;3745:11;3729:28;:::i;:::-;3791:15;;;3822:12;;;;3854:11;;;3884;;;3880:20;;3877:33;-1:-1:-1;3874:2:1;;;3928:6;3920;3913:22;3874:2;3955:6;3946:15;;3970:238;3984:2;3981:1;3978:9;3970:238;;;4055:3;4042:17;4029:30;;4072:31;4097:5;4072:31;:::i;:::-;4116:18;;;4002:1;3995:9;;;;;4154:12;;;;4186;;3970:238;;;-1:-1:-1;4227:5:1;3256:982;-1:-1:-1;;;;;;;;3256:982:1:o;4243:255::-;4301:6;4354:2;4342:9;4333:7;4329:23;4325:32;4322:2;;;4375:6;4367;4360:22;4322:2;4419:9;4406:23;4438:30;4462:5;4438:30;:::i;4503:259::-;4572:6;4625:2;4613:9;4604:7;4600:23;4596:32;4593:2;;;4646:6;4638;4631:22;4593:2;4683:9;4677:16;4702:30;4726:5;4702:30;:::i;5048:480::-;5117:6;5170:2;5158:9;5149:7;5145:23;5141:32;5138:2;;;5191:6;5183;5176:22;5138:2;5236:9;5223:23;5269:18;5261:6;5258:30;5255:2;;;5306:6;5298;5291:22;5255:2;5334:22;;5387:4;5379:13;;5375:27;-1:-1:-1;5365:2:1;;5421:6;5413;5406:22;5365:2;5449:73;5514:7;5509:2;5496:16;5491:2;5487;5483:11;5449:73;:::i;5533:190::-;5592:6;5645:2;5633:9;5624:7;5620:23;5616:32;5613:2;;;5666:6;5658;5651:22;5613:2;-1:-1:-1;5694:23:1;;5603:120;-1:-1:-1;5603:120:1:o;5728:194::-;5798:6;5851:2;5839:9;5830:7;5826:23;5822:32;5819:2;;;5872:6;5864;5857:22;5819:2;-1:-1:-1;5900:16:1;;5809:113;-1:-1:-1;5809:113:1:o;5927:257::-;5968:3;6006:5;6000:12;6033:6;6028:3;6021:19;6049:63;6105:6;6098:4;6093:3;6089:14;6082:4;6075:5;6071:16;6049:63;:::i;:::-;6166:2;6145:15;-1:-1:-1;;6141:29:1;6132:39;;;;6173:4;6128:50;;5976:208;-1:-1:-1;;5976:208:1:o;6189:1531::-;6413:3;6451:6;6445:13;6477:4;6490:51;6534:6;6529:3;6524:2;6516:6;6512:15;6490:51;:::i;:::-;6604:13;;6563:16;;;;6626:55;6604:13;6563:16;6648:15;;;6626:55;:::i;:::-;6772:13;;6703:20;;;6743:3;;6832:1;6854:18;;;;6907;;;;6934:2;;7012:4;7002:8;6998:19;6986:31;;6934:2;7075;7065:8;7062:16;7042:18;7039:40;7036:2;;;-1:-1:-1;;;7102:33:1;;7158:4;7155:1;7148:15;7188:4;7109:3;7176:17;7036:2;7219:18;7246:110;;;;7370:1;7365:330;;;;7212:483;;7246:110;-1:-1:-1;;7281:24:1;;7267:39;;7326:20;;;;-1:-1:-1;7246:110:1;;7365:330;22046:4;22065:17;;;22115:4;22099:21;;7460:3;7476:169;7490:8;7487:1;7484:15;7476:169;;;7572:14;;7557:13;;;7550:37;7615:16;;;;7507:10;;7476:169;;;7480:3;;7676:8;7669:5;7665:20;7658:27;;7212:483;-1:-1:-1;7711:3:1;;6421:1299;-1:-1:-1;;;;;;;;;;;6421:1299:1:o;8466:488::-;-1:-1:-1;;;;;8735:15:1;;;8717:34;;8787:15;;8782:2;8767:18;;8760:43;8834:2;8819:18;;8812:34;;;8882:3;8877:2;8862:18;;8855:31;;;8660:4;;8903:45;;8928:19;;8920:6;8903:45;:::i;:::-;8895:53;8669:285;-1:-1:-1;;;;;;8669:285:1:o;8959:635::-;9130:2;9182:21;;;9252:13;;9155:18;;;9274:22;;;9101:4;;9130:2;9353:15;;;;9327:2;9312:18;;;9101:4;9399:169;9413:6;9410:1;9407:13;9399:169;;;9474:13;;9462:26;;9543:15;;;;9508:12;;;;9435:1;9428:9;9399:169;;;-1:-1:-1;9585:3:1;;9110:484;-1:-1:-1;;;;;;9110:484:1:o;10018:219::-;10167:2;10156:9;10149:21;10130:4;10187:44;10227:2;10216:9;10212:18;10204:6;10187:44;:::i;11755:414::-;11957:2;11939:21;;;11996:2;11976:18;;;11969:30;12035:34;12030:2;12015:18;;12008:62;-1:-1:-1;;;12101:2:1;12086:18;;12079:48;12159:3;12144:19;;11929:240::o;12581:402::-;12783:2;12765:21;;;12822:2;12802:18;;;12795:30;12861:34;12856:2;12841:18;;12834:62;-1:-1:-1;;;12927:2:1;12912:18;;12905:36;12973:3;12958:19;;12755:228::o;13701:342::-;13903:2;13885:21;;;13942:2;13922:18;;;13915:30;-1:-1:-1;;;13976:2:1;13961:18;;13954:48;14034:2;14019:18;;13875:168::o;18763:356::-;18965:2;18947:21;;;18984:18;;;18977:30;19043:34;19038:2;19023:18;;19016:62;19110:2;19095:18;;18937:182::o;20706:413::-;20908:2;20890:21;;;20947:2;20927:18;;;20920:30;20986:34;20981:2;20966:18;;20959:62;-1:-1:-1;;;21052:2:1;21037:18;;21030:47;21109:3;21094:19;;20880:239::o;21719:275::-;21790:2;21784:9;21855:2;21836:13;;-1:-1:-1;;21832:27:1;21820:40;;21890:18;21875:34;;21911:22;;;21872:62;21869:2;;;21937:18;;:::i;:::-;21973:2;21966:22;21764:230;;-1:-1:-1;21764:230:1:o;22131:128::-;22171:3;22202:1;22198:6;22195:1;22192:13;22189:2;;;22208:18;;:::i;:::-;-1:-1:-1;22244:9:1;;22179:80::o;22264:120::-;22304:1;22330;22320:2;;22335:18;;:::i;:::-;-1:-1:-1;22369:9:1;;22310:74::o;22389:168::-;22429:7;22495:1;22491;22487:6;22483:14;22480:1;22477:21;22472:1;22465:9;22458:17;22454:45;22451:2;;;22502:18;;:::i;:::-;-1:-1:-1;22542:9:1;;22441:116::o;22562:125::-;22602:4;22630:1;22627;22624:8;22621:2;;;22635:18;;:::i;:::-;-1:-1:-1;22672:9:1;;22611:76::o;22692:258::-;22764:1;22774:113;22788:6;22785:1;22782:13;22774:113;;;22864:11;;;22858:18;22845:11;;;22838:39;22810:2;22803:10;22774:113;;;22905:6;22902:1;22899:13;22896:2;;;-1:-1:-1;;22940:1:1;22922:16;;22915:27;22745:205::o;22955:136::-;22994:3;23022:5;23012:2;;23031:18;;:::i;:::-;-1:-1:-1;;;23067:18:1;;23002:89::o;23096:380::-;23175:1;23171:12;;;;23218;;;23239:2;;23293:4;23285:6;23281:17;23271:27;;23239:2;23346;23338:6;23335:14;23315:18;23312:38;23309:2;;;23392:10;23387:3;23383:20;23380:1;23373:31;23427:4;23424:1;23417:15;23455:4;23452:1;23445:15;23309:2;;23151:325;;;:::o;23481:135::-;23520:3;-1:-1:-1;;23541:17:1;;23538:2;;;23561:18;;:::i;:::-;-1:-1:-1;23608:1:1;23597:13;;23528:88::o;23621:112::-;23653:1;23679;23669:2;;23684:18;;:::i;:::-;-1:-1:-1;23718:9:1;;23659:74::o;23738:127::-;23799:10;23794:3;23790:20;23787:1;23780:31;23830:4;23827:1;23820:15;23854:4;23851:1;23844:15;23870:127;23931:10;23926:3;23922:20;23919:1;23912:31;23962:4;23959:1;23952:15;23986:4;23983:1;23976:15;24002:127;24063:10;24058:3;24054:20;24051:1;24044:31;24094:4;24091:1;24084:15;24118:4;24115:1;24108:15;24134:131;-1:-1:-1;;;;;24209:31:1;;24199:42;;24189:2;;24255:1;24252;24245:12;24270:131;-1:-1:-1;;;;;;24344:32:1;;24334:43;;24324:2;;24391:1;24388;24381:12
Swarm Source
ipfs://9997738bd3671ce0bea89b28ac668598a813577eb6805d7f25eac5e9435c599f
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.