ERC-721
Overview
Max Total Supply
1,304 ZC
Holders
97
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
1 ZCLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Source Code Verified (Exact Match)
Contract Name:
ZombieNFTMint
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-04-26 */ // SPDX-License-Identifier: MIT /** ▄▄▄█████▓ ██░ ██ ▓█████▓██ ██▓ ██▀███ ▓█████ ▄████▄ ▒█████ ███▄ ▄███▓ ██▓ ███▄ █ ▄████ ▓ ██▒ ▓▒▓██░ ██▒▓█ ▀ ▒██ ██▒▓██ ▒ ██▒▓█ ▀ ▒██▀ ▀█ ▒██▒ ██▒▓██▒▀█▀ ██▒▓██▒ ██ ▀█ █ ██▒ ▀█▒ ▒ ▓██░ ▒░▒██▀▀██░▒███ ▒██ ██░▓██ ░▄█ ▒▒███ ▒▓█ ▄ ▒██░ ██▒▓██ ▓██░▒██▒▓██ ▀█ ██▒▒██░▄▄▄░ ░ ▓██▓ ░ ░▓█ ░██ ▒▓█ ▄ ░ ▐██▓░▒██▀▀█▄ ▒▓█ ▄ ▒▓▓▄ ▄██▒▒██ ██░▒██ ▒██ ░██░▓██▒ ▐▌██▒░▓█ ██▓ ▒██▒ ░ ░▓█▒░██▓░▒████▒ ░ ██▒▓░░██▓ ▒██▒░▒████▒ ▒ ▓███▀ ░░ ████▓▒░▒██▒ ░██▒░██░▒██░ ▓██░░▒▓███▀▒ ██▓ ██▓ ██▓ ▒ ░░ ▒ ░░▒░▒░░ ▒░ ░ ██▒▒▒ ░ ▒▓ ░▒▓░░░ ▒░ ░ ░ ░▒ ▒ ░░ ▒░▒░▒░ ░ ▒░ ░ ░░▓ ░ ▒░ ▒ ▒ ░▒ ▒ ▒▓▒ ▒▓▒ ▒▓▒ ░ ▒ ░▒░ ░ ░ ░ ░▓██ ░▒░ ░▒ ░ ▒░ ░ ░ ░ ░ ▒ ░ ▒ ▒░ ░ ░ ░ ▒ ░░ ░░ ░ ▒░ ░ ░ ░▒ ░▒ ░▒ ░ ░ ░░ ░ ░ ▒ ▒ ░░ ░░ ░ ░ ░ ░ ░ ░ ▒ ░ ░ ▒ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ */ // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.4; /** * @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/interfaces/[email protected] // File @openzeppelin/contracts/interfaces/[email protected] /** * @dev Interface for the NFT Royalty Standard. * * A standardized way to retrieve royalty payment information for non-fungible tokens (NFTs) to enable universal * support for royalty payments across all NFT marketplaces and ecosystem participants. * * _Available since v4.5._ */ interface IERC2981 is IERC165 { /** * @dev Returns how much royalty is owed and to whom, based on a sale price that may be denominated in any unit of * exchange. The royalty amount is denominated and should be payed in that same unit of exchange. */ function royaltyInfo(uint256 tokenId, uint256 salePrice) external view returns (address receiver, uint256 royaltyAmount); } // File @openzeppelin/contracts/utils/introspection/[email protected] /** * @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/common/[email protected] /** * @dev Implementation of the NFT Royalty Standard, a standardized way to retrieve royalty payment information. * * Royalty information can be specified globally for all token ids via {_setDefaultRoyalty}, and/or individually for * specific token ids via {_setTokenRoyalty}. The latter takes precedence over the first. * * Royalty is specified as a fraction of sale price. {_feeDenominator} is overridable but defaults to 10000, meaning the * fee is specified in basis points by default. * * IMPORTANT: ERC-2981 only specifies a way to signal royalty information and does not enforce its payment. See * https://eips.ethereum.org/EIPS/eip-2981#optional-royalty-payments[Rationale] in the EIP. Marketplaces are expected to * voluntarily pay royalties together with sales, but note that this standard is not yet widely supported. * * _Available since v4.5._ */ abstract contract ERC2981 is IERC2981, ERC165 { struct RoyaltyInfo { address receiver; uint96 royaltyFraction; } RoyaltyInfo private _defaultRoyaltyInfo; mapping(uint256 => RoyaltyInfo) private _tokenRoyaltyInfo; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC165) returns (bool) { return interfaceId == type(IERC2981).interfaceId || super.supportsInterface(interfaceId); } /** * @inheritdoc IERC2981 */ function royaltyInfo(uint256 _tokenId, uint256 _salePrice) external view virtual override returns (address, uint256) { RoyaltyInfo memory royalty = _tokenRoyaltyInfo[_tokenId]; if (royalty.receiver == address(0)) { royalty = _defaultRoyaltyInfo; } uint256 royaltyAmount = (_salePrice * royalty.royaltyFraction) / _feeDenominator(); return (royalty.receiver, royaltyAmount); } /** * @dev The denominator with which to interpret the fee set in {_setTokenRoyalty} and {_setDefaultRoyalty} as a * fraction of the sale price. Defaults to 10000 so fees are expressed in basis points, but may be customized by an * override. */ function _feeDenominator() internal pure virtual returns (uint96) { return 10000; } /** * @dev Sets the royalty information that all ids in this contract will default to. * * Requirements: * * - `receiver` cannot be the zero address. * - `feeNumerator` cannot be greater than the fee denominator. */ function _setDefaultRoyalty(address receiver, uint96 feeNumerator) internal virtual { require(feeNumerator <= _feeDenominator(), "ERC2981: royalty fee will exceed salePrice"); require(receiver != address(0), "ERC2981: invalid receiver"); _defaultRoyaltyInfo = RoyaltyInfo(receiver, feeNumerator); } /** * @dev Removes default royalty information. */ function _deleteDefaultRoyalty() internal virtual { delete _defaultRoyaltyInfo; } /** * @dev Sets the royalty information for a specific token id, overriding the global default. * * Requirements: * * - `tokenId` must be already minted. * - `receiver` cannot be the zero address. * - `feeNumerator` cannot be greater than the fee denominator. */ function _setTokenRoyalty( uint256 tokenId, address receiver, uint96 feeNumerator ) internal virtual { require(feeNumerator <= _feeDenominator(), "ERC2981: royalty fee will exceed salePrice"); require(receiver != address(0), "ERC2981: Invalid parameters"); _tokenRoyaltyInfo[tokenId] = RoyaltyInfo(receiver, feeNumerator); } /** * @dev Resets royalty information for the token id back to the global default. */ function _resetTokenRoyalty(uint256 tokenId) internal virtual { delete _tokenRoyaltyInfo[tokenId]; } } // File @openzeppelin/contracts/utils/[email protected] /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File @openzeppelin/contracts/access/[email protected] /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File @openzeppelin/contracts/security/[email protected] /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } // File @openzeppelin/contracts/token/ERC721/[email protected] /** * @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/[email protected] /** * @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/token/ERC721/extensions/[email protected] /** * @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/[email protected] /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File @openzeppelin/contracts/utils/[email protected] /** * @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 erc721a/contracts/[email protected] error ApprovalCallerNotOwnerNorApproved(); error ApprovalQueryForNonexistentToken(); error ApproveToCaller(); error ApprovalToCurrentOwner(); error BalanceQueryForZeroAddress(); error MintToZeroAddress(); error MintZeroQuantity(); error OwnerQueryForNonexistentToken(); error TransferCallerNotOwnerNorApproved(); error TransferFromIncorrectOwner(); error TransferToNonERC721ReceiverImplementer(); error TransferToZeroAddress(); error URIQueryForNonexistentToken(); /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension. Built to optimize for lower gas during batch mints. * * Assumes serials are sequentially minted starting at _startTokenId() (defaults to 0, e.g. 0, 1, 2, 3..). * * Assumes that an owner cannot have more than 2**64 - 1 (max value of uint64) of supply. * * Assumes that the maximum token id cannot exceed 2**256 - 1 (max value of uint256). */ contract ERC721A is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Compiler will pack this into a single 256bit word. struct TokenOwnership { // The address of the owner. address addr; // Keeps track of the start time of ownership with minimal overhead for tokenomics. uint64 startTimestamp; // Whether the token has been burned. bool burned; } // Compiler will pack this into a single 256bit word. struct AddressData { // Realistically, 2**64-1 is more than enough. uint64 balance; // Keeps track of mint count with minimal overhead for tokenomics. uint64 numberMinted; // Keeps track of burn count with minimal overhead for tokenomics. uint64 numberBurned; // For miscellaneous variable(s) pertaining to the address // (e.g. number of whitelist mint slots used). // If there are multiple variables, please pack them into a uint64. uint64 aux; } // The tokenId of the next token to be minted. uint256 internal _currentIndex; // The number of tokens burned. uint256 internal _burnCounter; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to ownership details // An empty struct value does not necessarily mean the token is unowned. See _ownershipOf implementation for details. mapping(uint256 => TokenOwnership) internal _ownerships; // Mapping owner address to address data mapping(address => AddressData) private _addressData; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; _currentIndex = _startTokenId(); } /** * To change the starting tokenId, please override this function. */ function _startTokenId() internal view virtual returns (uint256) { return 0; } /** * @dev Burned tokens are calculated here, use _totalMinted() if you want to count just minted tokens. */ function totalSupply() public view returns (uint256) { // Counter underflow is impossible as _burnCounter cannot be incremented // more than _currentIndex - _startTokenId() times unchecked { return _currentIndex - _burnCounter - _startTokenId(); } } /** * Returns the total amount of tokens minted in the contract. */ function _totalMinted() internal view returns (uint256) { // Counter underflow is impossible as _currentIndex does not decrement, // and it is initialized to _startTokenId() unchecked { return _currentIndex - _startTokenId(); } } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view override returns (uint256) { if (owner == address(0)) revert BalanceQueryForZeroAddress(); return uint256(_addressData[owner].balance); } /** * Returns the number of tokens minted by `owner`. */ function _numberMinted(address owner) internal view returns (uint256) { return uint256(_addressData[owner].numberMinted); } /** * Returns the number of tokens burned by or on behalf of `owner`. */ function _numberBurned(address owner) internal view returns (uint256) { return uint256(_addressData[owner].numberBurned); } /** * Returns the auxillary data for `owner`. (e.g. number of whitelist mint slots used). */ function _getAux(address owner) internal view returns (uint64) { return _addressData[owner].aux; } /** * Sets the auxillary data for `owner`. (e.g. number of whitelist mint slots used). * If there are multiple variables, please pack them into a uint64. */ function _setAux(address owner, uint64 aux) internal { _addressData[owner].aux = aux; } /** * Gas spent here starts off proportional to the maximum mint batch size. * It gradually moves to O(1) as tokens get transferred around in the collection over time. */ function _ownershipOf(uint256 tokenId) internal view returns (TokenOwnership memory) { uint256 curr = tokenId; unchecked { if (_startTokenId() <= curr && curr < _currentIndex) { TokenOwnership memory ownership = _ownerships[curr]; if (!ownership.burned) { if (ownership.addr != address(0)) { return ownership; } // Invariant: // There will always be an ownership that has an address and is not burned // before an ownership that does not have an address and is not burned. // Hence, curr will not underflow. while (true) { curr--; ownership = _ownerships[curr]; if (ownership.addr != address(0)) { return ownership; } } } } } revert OwnerQueryForNonexistentToken(); } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view override returns (address) { return _ownershipOf(tokenId).addr; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { if (!_exists(tokenId)) revert URIQueryForNonexistentToken(); string memory baseURI = _baseURI(); return bytes(baseURI).length != 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ''; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ''; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public override { address owner = ERC721A.ownerOf(tokenId); if (to == owner) revert ApprovalToCurrentOwner(); if (_msgSender() != owner && !isApprovedForAll(owner, _msgSender())) { revert ApprovalCallerNotOwnerNorApproved(); } _approve(to, tokenId, owner); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view override returns (address) { if (!_exists(tokenId)) revert ApprovalQueryForNonexistentToken(); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { if (operator == _msgSender()) revert ApproveToCaller(); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ''); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { _transfer(from, to, tokenId); if (to.isContract() && !_checkContractOnERC721Received(from, to, tokenId, _data)) { revert TransferToNonERC721ReceiverImplementer(); } } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), */ function _exists(uint256 tokenId) internal view returns (bool) { return _startTokenId() <= tokenId && tokenId < _currentIndex && !_ownerships[tokenId].burned; } function _safeMint(address to, uint256 quantity) internal { _safeMint(to, quantity, ''); } /** * @dev Safely mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called for each safe transfer. * - `quantity` must be greater than 0. * * Emits a {Transfer} event. */ function _safeMint( address to, uint256 quantity, bytes memory _data ) internal { _mint(to, quantity, _data, true); } /** * @dev Mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - `to` cannot be the zero address. * - `quantity` must be greater than 0. * * Emits a {Transfer} event. */ function _mint( address to, uint256 quantity, bytes memory _data, bool safe ) internal { uint256 startTokenId = _currentIndex; if (to == address(0)) revert MintToZeroAddress(); if (quantity == 0) revert MintZeroQuantity(); _beforeTokenTransfers(address(0), to, startTokenId, quantity); // Overflows are incredibly unrealistic. // balance or numberMinted overflow if current value of either + quantity > 1.8e19 (2**64) - 1 // updatedIndex overflows if _currentIndex + quantity > 1.2e77 (2**256) - 1 unchecked { _addressData[to].balance += uint64(quantity); _addressData[to].numberMinted += uint64(quantity); _ownerships[startTokenId].addr = to; _ownerships[startTokenId].startTimestamp = uint64(block.timestamp); uint256 updatedIndex = startTokenId; uint256 end = updatedIndex + quantity; if (safe && to.isContract()) { do { emit Transfer(address(0), to, updatedIndex); if (!_checkContractOnERC721Received(address(0), to, updatedIndex++, _data)) { revert TransferToNonERC721ReceiverImplementer(); } } while (updatedIndex != end); // Reentrancy protection if (_currentIndex != startTokenId) revert(); } else { do { emit Transfer(address(0), to, updatedIndex++); } while (updatedIndex != end); } _currentIndex = updatedIndex; } _afterTokenTransfers(address(0), to, startTokenId, quantity); } /** * @dev Transfers `tokenId` from `from` to `to`. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) private { TokenOwnership memory prevOwnership = _ownershipOf(tokenId); if (prevOwnership.addr != from) revert TransferFromIncorrectOwner(); bool isApprovedOrOwner = (_msgSender() == from || isApprovedForAll(from, _msgSender()) || getApproved(tokenId) == _msgSender()); if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved(); if (to == address(0)) revert TransferToZeroAddress(); _beforeTokenTransfers(from, to, tokenId, 1); // Clear approvals from the previous owner _approve(address(0), tokenId, from); // Underflow of the sender's balance is impossible because we check for // ownership above and the recipient's balance can't realistically overflow. // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256. unchecked { _addressData[from].balance -= 1; _addressData[to].balance += 1; TokenOwnership storage currSlot = _ownerships[tokenId]; currSlot.addr = to; currSlot.startTimestamp = uint64(block.timestamp); // If the ownership slot of tokenId+1 is not explicitly set, that means the transfer initiator owns it. // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls. uint256 nextTokenId = tokenId + 1; TokenOwnership storage nextSlot = _ownerships[nextTokenId]; if (nextSlot.addr == address(0)) { // This will suffice for checking _exists(nextTokenId), // as a burned slot cannot contain the zero address. if (nextTokenId != _currentIndex) { nextSlot.addr = from; nextSlot.startTimestamp = prevOwnership.startTimestamp; } } } emit Transfer(from, to, tokenId); _afterTokenTransfers(from, to, tokenId, 1); } /** * @dev This is equivalent to _burn(tokenId, false) */ function _burn(uint256 tokenId) internal virtual { _burn(tokenId, false); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId, bool approvalCheck) internal virtual { TokenOwnership memory prevOwnership = _ownershipOf(tokenId); address from = prevOwnership.addr; if (approvalCheck) { bool isApprovedOrOwner = (_msgSender() == from || isApprovedForAll(from, _msgSender()) || getApproved(tokenId) == _msgSender()); if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved(); } _beforeTokenTransfers(from, address(0), tokenId, 1); // Clear approvals from the previous owner _approve(address(0), tokenId, from); // Underflow of the sender's balance is impossible because we check for // ownership above and the recipient's balance can't realistically overflow. // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256. unchecked { AddressData storage addressData = _addressData[from]; addressData.balance -= 1; addressData.numberBurned += 1; // Keep track of who burned the token, and the timestamp of burning. TokenOwnership storage currSlot = _ownerships[tokenId]; currSlot.addr = from; currSlot.startTimestamp = uint64(block.timestamp); currSlot.burned = true; // If the ownership slot of tokenId+1 is not explicitly set, that means the burn initiator owns it. // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls. uint256 nextTokenId = tokenId + 1; TokenOwnership storage nextSlot = _ownerships[nextTokenId]; if (nextSlot.addr == address(0)) { // This will suffice for checking _exists(nextTokenId), // as a burned slot cannot contain the zero address. if (nextTokenId != _currentIndex) { nextSlot.addr = from; nextSlot.startTimestamp = prevOwnership.startTimestamp; } } } emit Transfer(from, address(0), tokenId); _afterTokenTransfers(from, address(0), tokenId, 1); // Overflow not possible, as _burnCounter cannot be exceed _currentIndex times. unchecked { _burnCounter++; } } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve( address to, uint256 tokenId, address owner ) private { _tokenApprovals[tokenId] = to; emit Approval(owner, to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkContractOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver(to).onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert TransferToNonERC721ReceiverImplementer(); } else { assembly { revert(add(32, reason), mload(reason)) } } } } /** * @dev Hook that is called before a set of serially-ordered token ids are about to be transferred. This includes minting. * And also called before burning one token. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * Calling conditions: * * - When `from` and `to` are both non-zero, `from`'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, `tokenId` will be burned by `from`. * - `from` and `to` are never both zero. */ function _beforeTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} /** * @dev Hook that is called after a set of serially-ordered token ids have been transferred. This includes * minting. * And also called after one token has been burned. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * Calling conditions: * * - When `from` and `to` are both non-zero, `from`'s `tokenId` has been * transferred to `to`. * - When `from` is zero, `tokenId` has been minted for `to`. * - When `to` is zero, `tokenId` has been burned by `from`. * - `from` and `to` are never both zero. */ function _afterTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} } // File contracts/NFTMint.sol contract ZombieNFTMint is ERC721A, Ownable, ERC2981, ReentrancyGuard { using Strings for uint256; address public treasury; string public baseURI; string public baseExtension = ".json"; string public notRevealedUri; uint256 public cost = 0.06 ether; uint256 public maxSupply = 2000; uint256 public maxMintAmount = 100; uint256 public minimumMintAmount = 1; bool public paused = false; bool public revealed = false; bool public isSupplyLocked = false; bool public whitelistOnly = true; mapping(address => bool) public whitelisted; mapping (address => uint256) public mintAmount; constructor( string memory _name, string memory _symbol, string memory _initBaseURI, string memory _notRevealedUri, address _treasury ) ERC721A(_name, _symbol) { require(_treasury != address(0), "Cannot set 0 as treasury"); notRevealedUri = _notRevealedUri; treasury = _treasury; setBaseURI(_initBaseURI); mint(_treasury, maxMintAmount); _setDefaultRoyalty(_treasury, 1000); } // internal function _baseURI() internal view virtual override returns (string memory) { return baseURI; } function mint(address _to, uint256 _mintAmount) public payable nonReentrant { uint256 supply = totalSupply(); require(!paused, "Contract paused"); require(_mintAmount > 0, "Must mint more than zero"); require(_mintAmount >= minimumMintAmount, "Must mint more than minimum"); require(_mintAmount <= maxMintAmount, "Cannot exceed maximum"); require(supply + _mintAmount < maxSupply, "Mint amount exceeds max supply"); uint256 currentTotalMint = mintAmount[msg.sender]; if (msg.sender != owner()) { require((currentTotalMint + _mintAmount) <= maxMintAmount, "Cannot exceed maximum total"); if(whitelisted[msg.sender] != true) { require(whitelistOnly == false, "Only whitelist can mint"); } require(msg.value >= cost * _mintAmount, "Not enough ETH to mint"); } mintAmount[msg.sender] = currentTotalMint + _mintAmount; _safeMint(_to, _mintAmount); } function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require( _exists(tokenId), "ERC721Metadata: URI query for nonexistent token" ); if(revealed == false) { return notRevealedUri; } string memory currentBaseURI = _baseURI(); return bytes(currentBaseURI).length > 0 ? string(abi.encodePacked(currentBaseURI, tokenId.toString(), baseExtension)) : ""; } //only owner function reveal() external onlyOwner { revealed = true; } function setCost(uint256 _newCost) external onlyOwner { cost = _newCost; } function setSupply(uint256 _newSupply) external onlyOwner { require(isSupplyLocked == false, "Supply is locked"); require(_newSupply > totalSupply(), "New supply must be greater than current total"); maxSupply = _newSupply; } // Locks supply for eternity. function lockSupply() external onlyOwner { isSupplyLocked = true; } function setMaxMintAmount(uint256 _newMaxMintAmount) external onlyOwner { maxMintAmount = _newMaxMintAmount; } function setMinimumMintAmount(uint256 _newMinimumMintAmount) external onlyOwner { minimumMintAmount = _newMinimumMintAmount; } function setBaseURI(string memory _newBaseURI) public onlyOwner { baseURI = _newBaseURI; } function setTreasury(address _treasury) external onlyOwner { require(_treasury != address(0), "Cannot set 0 as treasury"); treasury = _treasury; } function setNotRevealedURI(string memory _notRevealedURI) external onlyOwner { notRevealedUri = _notRevealedURI; } function setBaseExtension(string memory _newBaseExtension) external onlyOwner { baseExtension = _newBaseExtension; } function pause(bool _state) external onlyOwner { paused = _state; } function whitelistUser(address _user) public onlyOwner { whitelisted[_user] = true; } function whitelistMultipleUsers(address[] memory _users) external onlyOwner { for (uint256 i = 0; i < _users.length; i++) { whitelistUser(_users[i]); } } function removeWhitelistUser(address _user) external onlyOwner { whitelisted[_user] = false; } function setWhitelistOnly(bool _whitelistOnly) external onlyOwner { whitelistOnly = _whitelistOnly; } function isWhitelisted(address _user) external view returns (bool) { return whitelisted[_user]; } function withdraw() external payable onlyOwner { require(payable(msg.sender).send(address(this).balance)); } /** @notice Sets the contract-wide royalty info. */ function setRoyaltyInfo(address receiver, uint96 feeBasisPoints) external onlyOwner { _setDefaultRoyalty(receiver, feeBasisPoints); } function supportsInterface(bytes4 interfaceId) public view override(ERC721A, ERC2981) returns (bool) { return super.supportsInterface(interfaceId); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"string","name":"_initBaseURI","type":"string"},{"internalType":"string","name":"_notRevealedUri","type":"string"},{"internalType":"address","name":"_treasury","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ApprovalCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"ApprovalQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"ApprovalToCurrentOwner","type":"error"},{"inputs":[],"name":"ApproveToCaller","type":"error"},{"inputs":[],"name":"BalanceQueryForZeroAddress","type":"error"},{"inputs":[],"name":"MintToZeroAddress","type":"error"},{"inputs":[],"name":"MintZeroQuantity","type":"error"},{"inputs":[],"name":"OwnerQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"TransferCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"TransferFromIncorrectOwner","type":"error"},{"inputs":[],"name":"TransferToNonERC721ReceiverImplementer","type":"error"},{"inputs":[],"name":"TransferToZeroAddress","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"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":"isSupplyLocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"isWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lockSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxMintAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumMintAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"mintAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"notRevealedUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"removeWhitelistUser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reveal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint256","name":"_salePrice","type":"uint256"}],"name":"royaltyInfo","outputs":[{"internalType":"address","name":"","type":"address"},{"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":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseExtension","type":"string"}],"name":"setBaseExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newMaxMintAmount","type":"uint256"}],"name":"setMaxMintAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newMinimumMintAmount","type":"uint256"}],"name":"setMinimumMintAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_notRevealedURI","type":"string"}],"name":"setNotRevealedURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint96","name":"feeBasisPoints","type":"uint96"}],"name":"setRoyaltyInfo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newSupply","type":"uint256"}],"name":"setSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_treasury","type":"address"}],"name":"setTreasury","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_whitelistOnly","type":"bool"}],"name":"setWhitelistOnly","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasury","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_users","type":"address[]"}],"name":"whitelistMultipleUsers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"whitelistOnly","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"whitelistUser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
60c06040526005608081905264173539b7b760d91b60a09081526200002891600e919062000a07565b5066d529ae9e8600006010556107d0601155606460125560016013556014805463ffffffff191663010000001790553480156200006457600080fd5b5060405162003c2138038062003c21833981016040819052620000879162000b71565b845185908590620000a090600290602085019062000a07565b508051620000b690600390602084019062000a07565b50506000805550620000c83362000192565b6001600b556001600160a01b038116620001295760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f74207365742030206173207472656173757279000000000000000060448201526064015b60405180910390fd5b81516200013e90600f90602085019062000a07565b50600c80546001600160a01b0319166001600160a01b0383161790556200016583620001e4565b62000179816012546200025960201b60201c565b62000187816103e8620005f7565b505050505062000d79565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6008546001600160a01b03163314620002405760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640162000120565b80516200025590600d90602084019062000a07565b5050565b6002600b541415620002ae5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640162000120565b6002600b556000620002c36001546000540390565b60145490915060ff16156200030d5760405162461bcd60e51b815260206004820152600f60248201526e10dbdb9d1c9858dd081c185d5cd959608a1b604482015260640162000120565b600082116200035f5760405162461bcd60e51b815260206004820152601860248201527f4d757374206d696e74206d6f7265207468616e207a65726f0000000000000000604482015260640162000120565b601354821015620003b35760405162461bcd60e51b815260206004820152601b60248201527f4d757374206d696e74206d6f7265207468616e206d696e696d756d0000000000604482015260640162000120565b601254821115620004075760405162461bcd60e51b815260206004820152601560248201527f43616e6e6f7420657863656564206d6178696d756d0000000000000000000000604482015260640162000120565b60115462000416838362000ca4565b10620004655760405162461bcd60e51b815260206004820152601e60248201527f4d696e7420616d6f756e742065786365656473206d617820737570706c790000604482015260640162000120565b3360008181526016602052604090205460085490916001600160a01b0390911614620005c4576012546200049a848362000ca4565b1115620004ea5760405162461bcd60e51b815260206004820152601b60248201527f43616e6e6f7420657863656564206d6178696d756d20746f74616c0000000000604482015260640162000120565b3360009081526015602052604090205460ff16151560011462000563576014546301000000900460ff1615620005635760405162461bcd60e51b815260206004820152601760248201527f4f6e6c792077686974656c6973742063616e206d696e74000000000000000000604482015260640162000120565b8260105462000573919062000cbf565b341015620005c45760405162461bcd60e51b815260206004820152601660248201527f4e6f7420656e6f7567682045544820746f206d696e7400000000000000000000604482015260640162000120565b620005d0838262000ca4565b33600090815260166020526040902055620005ec8484620006f8565b50506001600b555050565b6127106001600160601b0382161115620006675760405162461bcd60e51b815260206004820152602a60248201527f455243323938313a20726f79616c7479206665652077696c6c206578636565646044820152692073616c65507269636560b01b606482015260840162000120565b6001600160a01b038216620006bf5760405162461bcd60e51b815260206004820152601960248201527f455243323938313a20696e76616c696420726563656976657200000000000000604482015260640162000120565b604080518082019091526001600160a01b039092168083526001600160601b039091166020909201829052600160a01b90910217600955565b620002558282604051806020016040528060008152506200071a60201b60201c565b6200072983838360016200072e565b505050565b6000546001600160a01b0385166200075857604051622e076360e81b815260040160405180910390fd5b83620007775760405163b562e8dd60e01b815260040160405180910390fd5b6001600160a01b038516600081815260056020908152604080832080546001600160801b031981166001600160401b038083168c018116918217680100000000000000006001600160401b031990941690921783900481168c01811690920217909155858452600490925290912080546001600160e01b031916909217600160a01b42909216919091021790558080850183801562000830575062000830876001600160a01b0316620008f760201b62001c2c1760201c565b15620008b0575b60405182906001600160a01b0389169060009060008051602062003c01833981519152908290a46001820191620008749060009089908862000906565b62000892576040516368d2bf6b60e11b815260040160405180910390fd5b8082141562000837578260005414620008aa57600080fd5b620008e6565b5b6040516001830192906001600160a01b0389169060009060008051602062003c01833981519152908290a480821415620008b1575b506000555050505050565b50505050565b6001600160a01b03163b151590565b604051630a85bd0160e11b81526000906001600160a01b0385169063150b7a02906200093d90339089908890889060040162000c4e565b602060405180830381600087803b1580156200095857600080fd5b505af19250505080156200098b575060408051601f3d908101601f19168201909252620009889181019062000b3e565b60015b620009ea573d808015620009bc576040519150601f19603f3d011682016040523d82523d6000602084013e620009c1565b606091505b508051620009e2576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050949350505050565b82805462000a159062000d10565b90600052602060002090601f01602090048101928262000a39576000855562000a84565b82601f1062000a5457805160ff191683800117855562000a84565b8280016001018555821562000a84579182015b8281111562000a8457825182559160200191906001019062000a67565b5062000a9292915062000a96565b5090565b5b8082111562000a92576000815560010162000a97565b600082601f83011262000abf57600080fd5b81516001600160401b038082111562000adc5762000adc62000d63565b604051601f8301601f19908116603f0116810190828211818310171562000b075762000b0762000d63565b8160405283815286602085880101111562000b2157600080fd5b62000b3484602083016020890162000ce1565b9695505050505050565b60006020828403121562000b5157600080fd5b81516001600160e01b03198116811462000b6a57600080fd5b9392505050565b600080600080600060a0868803121562000b8a57600080fd5b85516001600160401b038082111562000ba257600080fd5b62000bb089838a0162000aad565b9650602088015191508082111562000bc757600080fd5b62000bd589838a0162000aad565b9550604088015191508082111562000bec57600080fd5b62000bfa89838a0162000aad565b9450606088015191508082111562000c1157600080fd5b5062000c208882890162000aad565b608088015190935090506001600160a01b038116811462000c4057600080fd5b809150509295509295909350565b600060018060a01b03808716835280861660208401525083604083015260806060830152825180608084015262000c8d8160a085016020870162000ce1565b601f01601f19169190910160a00195945050505050565b6000821982111562000cba5762000cba62000d4d565b500190565b600081600019048311821515161562000cdc5762000cdc62000d4d565b500290565b60005b8381101562000cfe57818101518382015260200162000ce4565b83811115620008f15750506000910152565b600181811c9082168062000d2557607f821691505b6020821081141562000d4757634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b612e788062000d896000396000f3fe6080604052600436106103345760003560e01c806351830227116101b0578063a7149bd0116100ec578063d936547e11610095578063ea05a8c61161006f578063ea05a8c61461092d578063f0f442601461094d578063f2c4ce1e1461096d578063f2fde38b1461098d57600080fd5b8063d936547e14610894578063da3ef23f146108c4578063e985e9c5146108e457600080fd5b8063c6682862116100c6578063c668286214610849578063c87b56dd1461085e578063d5abeb011461087e57600080fd5b8063a7149bd0146107f3578063b88d4fde14610809578063b92b2da11461082957600080fd5b806370a08231116101595780638da5cb5b116101335780638da5cb5b1461078b57806395d89b41146107a9578063a22cb465146107be578063a475b5dd146107de57600080fd5b806370a0823114610741578063715018a61461076157806381eaf99b1461077657600080fd5b806361d027b31161018a57806361d027b3146106ec5780636352211e1461070c5780636c0360eb1461072c57600080fd5b8063518302271461069357806355f804b3146106b25780635c975abb146106d257600080fd5b8063239c70ae1161027f5780633ccfd60b1161022857806344a0d68a1161020257806344a0d68a146106125780634a4c560d146106325780634b4687b5146106525780634d726fed1461067357600080fd5b80633ccfd60b146105d757806340c10f19146105df57806342842e0e146105f257600080fd5b806330cc7ae01161025957806330cc7ae01461055e5780633af32abf1461057e5780633b4c4b25146105b757600080fd5b8063239c70ae146104e957806323b872dd146104ff5780632a55205a1461051f57600080fd5b8063081c8c44116102e157806309e7ba97116102bb57806309e7ba971461049a57806313faede6146104ba57806318160ddd146104d057600080fd5b8063081c8c4414610445578063088a4ed01461045a578063095ea7b31461047a57600080fd5b8063055d822c11610312578063055d822c146103b057806306fdde03146103eb578063081812fc1461040d57600080fd5b806301ffc9a71461033957806302329a291461036e57806302fa7c4714610390575b600080fd5b34801561034557600080fd5b50610359610354366004612a8e565b6109ad565b60405190151581526020015b60405180910390f35b34801561037a57600080fd5b5061038e610389366004612a73565b6109be565b005b34801561039c57600080fd5b5061038e6103ab366004612977565b610a1e565b3480156103bc57600080fd5b506103dd6103cb36600461281d565b60166020526000908152604090205481565b604051908152602001610365565b3480156103f757600080fd5b50610400610a74565b6040516103659190612c78565b34801561041957600080fd5b5061042d610428366004612b11565b610b06565b6040516001600160a01b039091168152602001610365565b34801561045157600080fd5b50610400610b63565b34801561046657600080fd5b5061038e610475366004612b11565b610bf1565b34801561048657600080fd5b5061038e61049536600461294d565b610c3e565b3480156104a657600080fd5b5061038e6104b5366004612b11565b610cfe565b3480156104c657600080fd5b506103dd60105481565b3480156104dc57600080fd5b50600154600054036103dd565b3480156104f557600080fd5b506103dd60125481565b34801561050b57600080fd5b5061038e61051a36600461286b565b610d4b565b34801561052b57600080fd5b5061053f61053a366004612b2a565b610d56565b604080516001600160a01b039093168352602083019190915201610365565b34801561056a57600080fd5b5061038e61057936600461281d565b610e11565b34801561058a57600080fd5b5061035961059936600461281d565b6001600160a01b031660009081526015602052604090205460ff1690565b3480156105c357600080fd5b5061038e6105d2366004612b11565b610e7a565b61038e610f9b565b61038e6105ed36600461294d565b611009565b3480156105fe57600080fd5b5061038e61060d36600461286b565b611396565b34801561061e57600080fd5b5061038e61062d366004612b11565b6113b1565b34801561063e57600080fd5b5061038e61064d36600461281d565b6113fe565b34801561065e57600080fd5b50601454610359906301000000900460ff1681565b34801561067f57600080fd5b5061038e61068e3660046129bf565b61146a565b34801561069f57600080fd5b5060145461035990610100900460ff1681565b3480156106be57600080fd5b5061038e6106cd366004612ac8565b6114f2565b3480156106de57600080fd5b506014546103599060ff1681565b3480156106f857600080fd5b50600c5461042d906001600160a01b031681565b34801561071857600080fd5b5061042d610727366004612b11565b61154d565b34801561073857600080fd5b5061040061155f565b34801561074d57600080fd5b506103dd61075c36600461281d565b61156c565b34801561076d57600080fd5b5061038e6115d4565b34801561078257600080fd5b5061038e611626565b34801561079757600080fd5b506008546001600160a01b031661042d565b3480156107b557600080fd5b50610400611681565b3480156107ca57600080fd5b5061038e6107d9366004612923565b611690565b3480156107ea57600080fd5b5061038e61173f565b3480156107ff57600080fd5b506103dd60135481565b34801561081557600080fd5b5061038e6108243660046128a7565b611798565b34801561083557600080fd5b506014546103599062010000900460ff1681565b34801561085557600080fd5b506104006117e9565b34801561086a57600080fd5b50610400610879366004612b11565b6117f6565b34801561088a57600080fd5b506103dd60115481565b3480156108a057600080fd5b506103596108af36600461281d565b60156020526000908152604090205460ff1681565b3480156108d057600080fd5b5061038e6108df366004612ac8565b611973565b3480156108f057600080fd5b506103596108ff366004612838565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205460ff1690565b34801561093957600080fd5b5061038e610948366004612a73565b6119ce565b34801561095957600080fd5b5061038e61096836600461281d565b611a34565b34801561097957600080fd5b5061038e610988366004612ac8565b611b01565b34801561099957600080fd5b5061038e6109a836600461281d565b611b5c565b60006109b882611c3b565b92915050565b6008546001600160a01b03163314610a0b5760405162461bcd60e51b81526020600482018190526024820152600080516020612e2383398151915260448201526064015b60405180910390fd5b6014805460ff1916911515919091179055565b6008546001600160a01b03163314610a665760405162461bcd60e51b81526020600482018190526024820152600080516020612e238339815191526044820152606401610a02565b610a708282611c79565b5050565b606060028054610a8390612d4a565b80601f0160208091040260200160405190810160405280929190818152602001828054610aaf90612d4a565b8015610afc5780601f10610ad157610100808354040283529160200191610afc565b820191906000526020600020905b815481529060010190602001808311610adf57829003601f168201915b5050505050905090565b6000610b1182611d93565b610b47576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b506000908152600660205260409020546001600160a01b031690565b600f8054610b7090612d4a565b80601f0160208091040260200160405190810160405280929190818152602001828054610b9c90612d4a565b8015610be95780601f10610bbe57610100808354040283529160200191610be9565b820191906000526020600020905b815481529060010190602001808311610bcc57829003601f168201915b505050505081565b6008546001600160a01b03163314610c395760405162461bcd60e51b81526020600482018190526024820152600080516020612e238339815191526044820152606401610a02565b601255565b6000610c498261154d565b9050806001600160a01b0316836001600160a01b03161415610c97576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b336001600160a01b03821614801590610cb75750610cb581336108ff565b155b15610cee576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610cf9838383611dbe565b505050565b6008546001600160a01b03163314610d465760405162461bcd60e51b81526020600482018190526024820152600080516020612e238339815191526044820152606401610a02565b601355565b610cf9838383611e27565b6000828152600a602090815260408083208151808301909252546001600160a01b038116808352600160a01b9091046bffffffffffffffffffffffff16928201929092528291610dd55750604080518082019091526009546001600160a01b0381168252600160a01b90046bffffffffffffffffffffffff1660208201525b602081015160009061271090610df9906bffffffffffffffffffffffff1687612ce8565b610e039190612cd4565b915196919550909350505050565b6008546001600160a01b03163314610e595760405162461bcd60e51b81526020600482018190526024820152600080516020612e238339815191526044820152606401610a02565b6001600160a01b03166000908152601560205260409020805460ff19169055565b6008546001600160a01b03163314610ec25760405162461bcd60e51b81526020600482018190526024820152600080516020612e238339815191526044820152606401610a02565b60145462010000900460ff1615610f1b5760405162461bcd60e51b815260206004820152601060248201527f537570706c79206973206c6f636b6564000000000000000000000000000000006044820152606401610a02565b600154600054038111610f965760405162461bcd60e51b815260206004820152602d60248201527f4e657720737570706c79206d7573742062652067726561746572207468616e2060448201527f63757272656e7420746f74616c000000000000000000000000000000000000006064820152608401610a02565b601155565b6008546001600160a01b03163314610fe35760405162461bcd60e51b81526020600482018190526024820152600080516020612e238339815191526044820152606401610a02565b60405133904780156108fc02916000818181858888f1935050505061100757600080fd5b565b6002600b54141561105c5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610a02565b6002600b5560006110706001546000540390565b60145490915060ff16156110c65760405162461bcd60e51b815260206004820152600f60248201527f436f6e74726163742070617573656400000000000000000000000000000000006044820152606401610a02565b600082116111165760405162461bcd60e51b815260206004820152601860248201527f4d757374206d696e74206d6f7265207468616e207a65726f00000000000000006044820152606401610a02565b6013548210156111685760405162461bcd60e51b815260206004820152601b60248201527f4d757374206d696e74206d6f7265207468616e206d696e696d756d00000000006044820152606401610a02565b6012548211156111ba5760405162461bcd60e51b815260206004820152601560248201527f43616e6e6f7420657863656564206d6178696d756d00000000000000000000006044820152606401610a02565b6011546111c78383612cbc565b106112145760405162461bcd60e51b815260206004820152601e60248201527f4d696e7420616d6f756e742065786365656473206d617820737570706c7900006044820152606401610a02565b3360008181526016602052604090205460085490916001600160a01b0390911614611367576012546112468483612cbc565b11156112945760405162461bcd60e51b815260206004820152601b60248201527f43616e6e6f7420657863656564206d6178696d756d20746f74616c00000000006044820152606401610a02565b3360009081526015602052604090205460ff16151560011461130a576014546301000000900460ff161561130a5760405162461bcd60e51b815260206004820152601760248201527f4f6e6c792077686974656c6973742063616e206d696e740000000000000000006044820152606401610a02565b826010546113189190612ce8565b3410156113675760405162461bcd60e51b815260206004820152601660248201527f4e6f7420656e6f7567682045544820746f206d696e74000000000000000000006044820152606401610a02565b6113718382612cbc565b3360009081526016602052604090205561138b8484612063565b50506001600b555050565b610cf983838360405180602001604052806000815250611798565b6008546001600160a01b031633146113f95760405162461bcd60e51b81526020600482018190526024820152600080516020612e238339815191526044820152606401610a02565b601055565b6008546001600160a01b031633146114465760405162461bcd60e51b81526020600482018190526024820152600080516020612e238339815191526044820152606401610a02565b6001600160a01b03166000908152601560205260409020805460ff19166001179055565b6008546001600160a01b031633146114b25760405162461bcd60e51b81526020600482018190526024820152600080516020612e238339815191526044820152606401610a02565b60005b8151811015610a70576114e08282815181106114d3576114d3612de0565b60200260200101516113fe565b806114ea81612d85565b9150506114b5565b6008546001600160a01b0316331461153a5760405162461bcd60e51b81526020600482018190526024820152600080516020612e238339815191526044820152606401610a02565b8051610a7090600d906020840190612700565b60006115588261207d565b5192915050565b600d8054610b7090612d4a565b60006001600160a01b0382166115ae576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b506001600160a01b031660009081526005602052604090205467ffffffffffffffff1690565b6008546001600160a01b0316331461161c5760405162461bcd60e51b81526020600482018190526024820152600080516020612e238339815191526044820152606401610a02565b61100760006121b2565b6008546001600160a01b0316331461166e5760405162461bcd60e51b81526020600482018190526024820152600080516020612e238339815191526044820152606401610a02565b6014805462ff0000191662010000179055565b606060038054610a8390612d4a565b6001600160a01b0382163314156116d3576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3360008181526007602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6008546001600160a01b031633146117875760405162461bcd60e51b81526020600482018190526024820152600080516020612e238339815191526044820152606401610a02565b6014805461ff001916610100179055565b6117a3848484611e27565b6001600160a01b0383163b151580156117c557506117c384848484612211565b155b156117e3576040516368d2bf6b60e11b815260040160405180910390fd5b50505050565b600e8054610b7090612d4a565b606061180182611d93565b6118735760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006064820152608401610a02565b601454610100900460ff1661191457600f805461188f90612d4a565b80601f01602080910402602001604051908101604052809291908181526020018280546118bb90612d4a565b80156119085780601f106118dd57610100808354040283529160200191611908565b820191906000526020600020905b8154815290600101906020018083116118eb57829003601f168201915b50505050509050919050565b600061191e612309565b9050600081511161193e576040518060200160405280600081525061196c565b8061194884612318565b600e60405160200161195c93929190612b78565b6040516020818303038152906040525b9392505050565b6008546001600160a01b031633146119bb5760405162461bcd60e51b81526020600482018190526024820152600080516020612e238339815191526044820152606401610a02565b8051610a7090600e906020840190612700565b6008546001600160a01b03163314611a165760405162461bcd60e51b81526020600482018190526024820152600080516020612e238339815191526044820152606401610a02565b6014805491151563010000000263ff00000019909216919091179055565b6008546001600160a01b03163314611a7c5760405162461bcd60e51b81526020600482018190526024820152600080516020612e238339815191526044820152606401610a02565b6001600160a01b038116611ad25760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574203020617320747265617375727900000000000000006044820152606401610a02565b600c805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6008546001600160a01b03163314611b495760405162461bcd60e51b81526020600482018190526024820152600080516020612e238339815191526044820152606401610a02565b8051610a7090600f906020840190612700565b6008546001600160a01b03163314611ba45760405162461bcd60e51b81526020600482018190526024820152600080516020612e238339815191526044820152606401610a02565b6001600160a01b038116611c205760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610a02565b611c29816121b2565b50565b6001600160a01b03163b151590565b60006001600160e01b031982167f2a55205a0000000000000000000000000000000000000000000000000000000014806109b857506109b88261244a565b6127106bffffffffffffffffffffffff82161115611cff5760405162461bcd60e51b815260206004820152602a60248201527f455243323938313a20726f79616c7479206665652077696c6c2065786365656460448201527f2073616c655072696365000000000000000000000000000000000000000000006064820152608401610a02565b6001600160a01b038216611d555760405162461bcd60e51b815260206004820152601960248201527f455243323938313a20696e76616c6964207265636569766572000000000000006044820152606401610a02565b604080518082019091526001600160a01b039092168083526bffffffffffffffffffffffff9091166020909201829052600160a01b90910217600955565b60008054821080156109b8575050600090815260046020526040902054600160e01b900460ff161590565b600082815260066020526040808220805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b6000611e328261207d565b9050836001600160a01b031681600001516001600160a01b031614611e83576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000336001600160a01b0386161480611ea15750611ea185336108ff565b80611ebc575033611eb184610b06565b6001600160a01b0316145b905080611ef5576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038416611f35576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611f4160008487611dbe565b6001600160a01b038581166000908152600560209081526040808320805467ffffffffffffffff1980821667ffffffffffffffff92831660001901831617909255898616808652838620805493841693831660019081018416949094179055898652600490945282852080546001600160e01b031916909417600160a01b42909216919091021783558701808452922080549193909116612017576000548214612017578054602086015167ffffffffffffffff16600160a01b026001600160e01b03199091166001600160a01b038a16171781555b50505082846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45b5050505050565b610a708282604051806020016040528060008152506124e5565b60408051606081018252600080825260208201819052918101919091528160005481101561218057600081815260046020908152604091829020825160608101845290546001600160a01b0381168252600160a01b810467ffffffffffffffff1692820192909252600160e01b90910460ff1615159181018290529061217e5780516001600160a01b031615612114579392505050565b5060001901600081815260046020908152604091829020825160608101845290546001600160a01b038116808352600160a01b820467ffffffffffffffff1693830193909352600160e01b900460ff1615159281019290925215612179579392505050565b612114565b505b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600880546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b604051630a85bd0160e11b81526000906001600160a01b0385169063150b7a0290612246903390899088908890600401612c3c565b602060405180830381600087803b15801561226057600080fd5b505af1925050508015612290575060408051601f3d908101601f1916820190925261228d91810190612aab565b60015b6122eb573d8080156122be576040519150601f19603f3d011682016040523d82523d6000602084013e6122c3565b606091505b5080516122e3576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490505b949350505050565b6060600d8054610a8390612d4a565b60608161235857505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115612382578061236c81612d85565b915061237b9050600a83612cd4565b915061235c565b60008167ffffffffffffffff81111561239d5761239d612df6565b6040519080825280601f01601f1916602001820160405280156123c7576020820181803683370190505b5090505b8415612301576123dc600183612d07565b91506123e9600a86612da0565b6123f4906030612cbc565b60f81b81838151811061240957612409612de0565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350612443600a86612cd4565b94506123cb565b60006001600160e01b031982167f80ac58cd0000000000000000000000000000000000000000000000000000000014806124ad57506001600160e01b031982167f5b5e139f00000000000000000000000000000000000000000000000000000000145b806109b857507f01ffc9a7000000000000000000000000000000000000000000000000000000006001600160e01b03198316146109b8565b610cf983838360016000546001600160a01b038516612530576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83612567576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038516600081815260056020908152604080832080547fffffffffffffffffffffffffffffffff00000000000000000000000000000000811667ffffffffffffffff8083168c0181169182176801000000000000000067ffffffffffffffff1990941690921783900481168c01811690920217909155858452600490925290912080546001600160e01b031916909217600160a01b42909216919091021790558080850183801561262857506001600160a01b0387163b15155b156126b1575b60405182906001600160a01b038916906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a46126796000888480600101955088612211565b612696576040516368d2bf6b60e11b815260040160405180910390fd5b8082141561262e5782600054146126ac57600080fd5b6126f7565b5b6040516001830192906001600160a01b038916906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4808214156126b2575b5060005561205c565b82805461270c90612d4a565b90600052602060002090601f01602090048101928261272e5760008555612774565b82601f1061274757805160ff1916838001178555612774565b82800160010185558215612774579182015b82811115612774578251825591602001919060010190612759565b50612780929150612784565b5090565b5b808211156127805760008155600101612785565b600067ffffffffffffffff8311156127b3576127b3612df6565b6127c6601f8401601f1916602001612c8b565b90508281528383830111156127da57600080fd5b828260208301376000602084830101529392505050565b80356001600160a01b038116811461280857600080fd5b919050565b8035801515811461280857600080fd5b60006020828403121561282f57600080fd5b61196c826127f1565b6000806040838503121561284b57600080fd5b612854836127f1565b9150612862602084016127f1565b90509250929050565b60008060006060848603121561288057600080fd5b612889846127f1565b9250612897602085016127f1565b9150604084013590509250925092565b600080600080608085870312156128bd57600080fd5b6128c6856127f1565b93506128d4602086016127f1565b925060408501359150606085013567ffffffffffffffff8111156128f757600080fd5b8501601f8101871361290857600080fd5b61291787823560208401612799565b91505092959194509250565b6000806040838503121561293657600080fd5b61293f836127f1565b91506128626020840161280d565b6000806040838503121561296057600080fd5b612969836127f1565b946020939093013593505050565b6000806040838503121561298a57600080fd5b612993836127f1565b915060208301356bffffffffffffffffffffffff811681146129b457600080fd5b809150509250929050565b600060208083850312156129d257600080fd5b823567ffffffffffffffff808211156129ea57600080fd5b818501915085601f8301126129fe57600080fd5b813581811115612a1057612a10612df6565b8060051b9150612a21848301612c8b565b8181528481019084860184860187018a1015612a3c57600080fd5b600095505b83861015612a6657612a52816127f1565b835260019590950194918601918601612a41565b5098975050505050505050565b600060208284031215612a8557600080fd5b61196c8261280d565b600060208284031215612aa057600080fd5b813561196c81612e0c565b600060208284031215612abd57600080fd5b815161196c81612e0c565b600060208284031215612ada57600080fd5b813567ffffffffffffffff811115612af157600080fd5b8201601f81018413612b0257600080fd5b61230184823560208401612799565b600060208284031215612b2357600080fd5b5035919050565b60008060408385031215612b3d57600080fd5b50508035926020909101359150565b60008151808452612b64816020860160208601612d1e565b601f01601f19169290920160200192915050565b600084516020612b8b8285838a01612d1e565b855191840191612b9e8184848a01612d1e565b8554920191600090600181811c9080831680612bbb57607f831692505b858310811415612bd957634e487b7160e01b85526022600452602485fd5b808015612bed5760018114612bfe57612c2b565b60ff19851688528388019550612c2b565b60008b81526020902060005b85811015612c235781548a820152908401908801612c0a565b505083880195505b50939b9a5050505050505050505050565b60006001600160a01b03808716835280861660208401525083604083015260806060830152612c6e6080830184612b4c565b9695505050505050565b60208152600061196c6020830184612b4c565b604051601f8201601f1916810167ffffffffffffffff81118282101715612cb457612cb4612df6565b604052919050565b60008219821115612ccf57612ccf612db4565b500190565b600082612ce357612ce3612dca565b500490565b6000816000190483118215151615612d0257612d02612db4565b500290565b600082821015612d1957612d19612db4565b500390565b60005b83811015612d39578181015183820152602001612d21565b838111156117e35750506000910152565b600181811c90821680612d5e57607f821691505b60208210811415612d7f57634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415612d9957612d99612db4565b5060010190565b600082612daf57612daf612dca565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b031981168114611c2957600080fdfe4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a264697066735822122084ed0e61cfee1d17af718a46c70525aa151c33708d0b19b664979994fa6f98b264736f6c63430008070033ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef00000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000160000000000000000000000000672248073fb06330771e7f1246aa9b82cacfcbbf00000000000000000000000000000000000000000000000000000000000000115a6f6d62696520507265736964656e747300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000025a43000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b636f6d696e672d736f6f6e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005e68747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f516d635276353145714c646657615a68627a773438796a48745a5a59433848454b6b5552545665484b5258714e462f6d657461646174612e6a736f6e0000
Deployed Bytecode
0x6080604052600436106103345760003560e01c806351830227116101b0578063a7149bd0116100ec578063d936547e11610095578063ea05a8c61161006f578063ea05a8c61461092d578063f0f442601461094d578063f2c4ce1e1461096d578063f2fde38b1461098d57600080fd5b8063d936547e14610894578063da3ef23f146108c4578063e985e9c5146108e457600080fd5b8063c6682862116100c6578063c668286214610849578063c87b56dd1461085e578063d5abeb011461087e57600080fd5b8063a7149bd0146107f3578063b88d4fde14610809578063b92b2da11461082957600080fd5b806370a08231116101595780638da5cb5b116101335780638da5cb5b1461078b57806395d89b41146107a9578063a22cb465146107be578063a475b5dd146107de57600080fd5b806370a0823114610741578063715018a61461076157806381eaf99b1461077657600080fd5b806361d027b31161018a57806361d027b3146106ec5780636352211e1461070c5780636c0360eb1461072c57600080fd5b8063518302271461069357806355f804b3146106b25780635c975abb146106d257600080fd5b8063239c70ae1161027f5780633ccfd60b1161022857806344a0d68a1161020257806344a0d68a146106125780634a4c560d146106325780634b4687b5146106525780634d726fed1461067357600080fd5b80633ccfd60b146105d757806340c10f19146105df57806342842e0e146105f257600080fd5b806330cc7ae01161025957806330cc7ae01461055e5780633af32abf1461057e5780633b4c4b25146105b757600080fd5b8063239c70ae146104e957806323b872dd146104ff5780632a55205a1461051f57600080fd5b8063081c8c44116102e157806309e7ba97116102bb57806309e7ba971461049a57806313faede6146104ba57806318160ddd146104d057600080fd5b8063081c8c4414610445578063088a4ed01461045a578063095ea7b31461047a57600080fd5b8063055d822c11610312578063055d822c146103b057806306fdde03146103eb578063081812fc1461040d57600080fd5b806301ffc9a71461033957806302329a291461036e57806302fa7c4714610390575b600080fd5b34801561034557600080fd5b50610359610354366004612a8e565b6109ad565b60405190151581526020015b60405180910390f35b34801561037a57600080fd5b5061038e610389366004612a73565b6109be565b005b34801561039c57600080fd5b5061038e6103ab366004612977565b610a1e565b3480156103bc57600080fd5b506103dd6103cb36600461281d565b60166020526000908152604090205481565b604051908152602001610365565b3480156103f757600080fd5b50610400610a74565b6040516103659190612c78565b34801561041957600080fd5b5061042d610428366004612b11565b610b06565b6040516001600160a01b039091168152602001610365565b34801561045157600080fd5b50610400610b63565b34801561046657600080fd5b5061038e610475366004612b11565b610bf1565b34801561048657600080fd5b5061038e61049536600461294d565b610c3e565b3480156104a657600080fd5b5061038e6104b5366004612b11565b610cfe565b3480156104c657600080fd5b506103dd60105481565b3480156104dc57600080fd5b50600154600054036103dd565b3480156104f557600080fd5b506103dd60125481565b34801561050b57600080fd5b5061038e61051a36600461286b565b610d4b565b34801561052b57600080fd5b5061053f61053a366004612b2a565b610d56565b604080516001600160a01b039093168352602083019190915201610365565b34801561056a57600080fd5b5061038e61057936600461281d565b610e11565b34801561058a57600080fd5b5061035961059936600461281d565b6001600160a01b031660009081526015602052604090205460ff1690565b3480156105c357600080fd5b5061038e6105d2366004612b11565b610e7a565b61038e610f9b565b61038e6105ed36600461294d565b611009565b3480156105fe57600080fd5b5061038e61060d36600461286b565b611396565b34801561061e57600080fd5b5061038e61062d366004612b11565b6113b1565b34801561063e57600080fd5b5061038e61064d36600461281d565b6113fe565b34801561065e57600080fd5b50601454610359906301000000900460ff1681565b34801561067f57600080fd5b5061038e61068e3660046129bf565b61146a565b34801561069f57600080fd5b5060145461035990610100900460ff1681565b3480156106be57600080fd5b5061038e6106cd366004612ac8565b6114f2565b3480156106de57600080fd5b506014546103599060ff1681565b3480156106f857600080fd5b50600c5461042d906001600160a01b031681565b34801561071857600080fd5b5061042d610727366004612b11565b61154d565b34801561073857600080fd5b5061040061155f565b34801561074d57600080fd5b506103dd61075c36600461281d565b61156c565b34801561076d57600080fd5b5061038e6115d4565b34801561078257600080fd5b5061038e611626565b34801561079757600080fd5b506008546001600160a01b031661042d565b3480156107b557600080fd5b50610400611681565b3480156107ca57600080fd5b5061038e6107d9366004612923565b611690565b3480156107ea57600080fd5b5061038e61173f565b3480156107ff57600080fd5b506103dd60135481565b34801561081557600080fd5b5061038e6108243660046128a7565b611798565b34801561083557600080fd5b506014546103599062010000900460ff1681565b34801561085557600080fd5b506104006117e9565b34801561086a57600080fd5b50610400610879366004612b11565b6117f6565b34801561088a57600080fd5b506103dd60115481565b3480156108a057600080fd5b506103596108af36600461281d565b60156020526000908152604090205460ff1681565b3480156108d057600080fd5b5061038e6108df366004612ac8565b611973565b3480156108f057600080fd5b506103596108ff366004612838565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205460ff1690565b34801561093957600080fd5b5061038e610948366004612a73565b6119ce565b34801561095957600080fd5b5061038e61096836600461281d565b611a34565b34801561097957600080fd5b5061038e610988366004612ac8565b611b01565b34801561099957600080fd5b5061038e6109a836600461281d565b611b5c565b60006109b882611c3b565b92915050565b6008546001600160a01b03163314610a0b5760405162461bcd60e51b81526020600482018190526024820152600080516020612e2383398151915260448201526064015b60405180910390fd5b6014805460ff1916911515919091179055565b6008546001600160a01b03163314610a665760405162461bcd60e51b81526020600482018190526024820152600080516020612e238339815191526044820152606401610a02565b610a708282611c79565b5050565b606060028054610a8390612d4a565b80601f0160208091040260200160405190810160405280929190818152602001828054610aaf90612d4a565b8015610afc5780601f10610ad157610100808354040283529160200191610afc565b820191906000526020600020905b815481529060010190602001808311610adf57829003601f168201915b5050505050905090565b6000610b1182611d93565b610b47576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b506000908152600660205260409020546001600160a01b031690565b600f8054610b7090612d4a565b80601f0160208091040260200160405190810160405280929190818152602001828054610b9c90612d4a565b8015610be95780601f10610bbe57610100808354040283529160200191610be9565b820191906000526020600020905b815481529060010190602001808311610bcc57829003601f168201915b505050505081565b6008546001600160a01b03163314610c395760405162461bcd60e51b81526020600482018190526024820152600080516020612e238339815191526044820152606401610a02565b601255565b6000610c498261154d565b9050806001600160a01b0316836001600160a01b03161415610c97576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b336001600160a01b03821614801590610cb75750610cb581336108ff565b155b15610cee576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610cf9838383611dbe565b505050565b6008546001600160a01b03163314610d465760405162461bcd60e51b81526020600482018190526024820152600080516020612e238339815191526044820152606401610a02565b601355565b610cf9838383611e27565b6000828152600a602090815260408083208151808301909252546001600160a01b038116808352600160a01b9091046bffffffffffffffffffffffff16928201929092528291610dd55750604080518082019091526009546001600160a01b0381168252600160a01b90046bffffffffffffffffffffffff1660208201525b602081015160009061271090610df9906bffffffffffffffffffffffff1687612ce8565b610e039190612cd4565b915196919550909350505050565b6008546001600160a01b03163314610e595760405162461bcd60e51b81526020600482018190526024820152600080516020612e238339815191526044820152606401610a02565b6001600160a01b03166000908152601560205260409020805460ff19169055565b6008546001600160a01b03163314610ec25760405162461bcd60e51b81526020600482018190526024820152600080516020612e238339815191526044820152606401610a02565b60145462010000900460ff1615610f1b5760405162461bcd60e51b815260206004820152601060248201527f537570706c79206973206c6f636b6564000000000000000000000000000000006044820152606401610a02565b600154600054038111610f965760405162461bcd60e51b815260206004820152602d60248201527f4e657720737570706c79206d7573742062652067726561746572207468616e2060448201527f63757272656e7420746f74616c000000000000000000000000000000000000006064820152608401610a02565b601155565b6008546001600160a01b03163314610fe35760405162461bcd60e51b81526020600482018190526024820152600080516020612e238339815191526044820152606401610a02565b60405133904780156108fc02916000818181858888f1935050505061100757600080fd5b565b6002600b54141561105c5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610a02565b6002600b5560006110706001546000540390565b60145490915060ff16156110c65760405162461bcd60e51b815260206004820152600f60248201527f436f6e74726163742070617573656400000000000000000000000000000000006044820152606401610a02565b600082116111165760405162461bcd60e51b815260206004820152601860248201527f4d757374206d696e74206d6f7265207468616e207a65726f00000000000000006044820152606401610a02565b6013548210156111685760405162461bcd60e51b815260206004820152601b60248201527f4d757374206d696e74206d6f7265207468616e206d696e696d756d00000000006044820152606401610a02565b6012548211156111ba5760405162461bcd60e51b815260206004820152601560248201527f43616e6e6f7420657863656564206d6178696d756d00000000000000000000006044820152606401610a02565b6011546111c78383612cbc565b106112145760405162461bcd60e51b815260206004820152601e60248201527f4d696e7420616d6f756e742065786365656473206d617820737570706c7900006044820152606401610a02565b3360008181526016602052604090205460085490916001600160a01b0390911614611367576012546112468483612cbc565b11156112945760405162461bcd60e51b815260206004820152601b60248201527f43616e6e6f7420657863656564206d6178696d756d20746f74616c00000000006044820152606401610a02565b3360009081526015602052604090205460ff16151560011461130a576014546301000000900460ff161561130a5760405162461bcd60e51b815260206004820152601760248201527f4f6e6c792077686974656c6973742063616e206d696e740000000000000000006044820152606401610a02565b826010546113189190612ce8565b3410156113675760405162461bcd60e51b815260206004820152601660248201527f4e6f7420656e6f7567682045544820746f206d696e74000000000000000000006044820152606401610a02565b6113718382612cbc565b3360009081526016602052604090205561138b8484612063565b50506001600b555050565b610cf983838360405180602001604052806000815250611798565b6008546001600160a01b031633146113f95760405162461bcd60e51b81526020600482018190526024820152600080516020612e238339815191526044820152606401610a02565b601055565b6008546001600160a01b031633146114465760405162461bcd60e51b81526020600482018190526024820152600080516020612e238339815191526044820152606401610a02565b6001600160a01b03166000908152601560205260409020805460ff19166001179055565b6008546001600160a01b031633146114b25760405162461bcd60e51b81526020600482018190526024820152600080516020612e238339815191526044820152606401610a02565b60005b8151811015610a70576114e08282815181106114d3576114d3612de0565b60200260200101516113fe565b806114ea81612d85565b9150506114b5565b6008546001600160a01b0316331461153a5760405162461bcd60e51b81526020600482018190526024820152600080516020612e238339815191526044820152606401610a02565b8051610a7090600d906020840190612700565b60006115588261207d565b5192915050565b600d8054610b7090612d4a565b60006001600160a01b0382166115ae576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b506001600160a01b031660009081526005602052604090205467ffffffffffffffff1690565b6008546001600160a01b0316331461161c5760405162461bcd60e51b81526020600482018190526024820152600080516020612e238339815191526044820152606401610a02565b61100760006121b2565b6008546001600160a01b0316331461166e5760405162461bcd60e51b81526020600482018190526024820152600080516020612e238339815191526044820152606401610a02565b6014805462ff0000191662010000179055565b606060038054610a8390612d4a565b6001600160a01b0382163314156116d3576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3360008181526007602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6008546001600160a01b031633146117875760405162461bcd60e51b81526020600482018190526024820152600080516020612e238339815191526044820152606401610a02565b6014805461ff001916610100179055565b6117a3848484611e27565b6001600160a01b0383163b151580156117c557506117c384848484612211565b155b156117e3576040516368d2bf6b60e11b815260040160405180910390fd5b50505050565b600e8054610b7090612d4a565b606061180182611d93565b6118735760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006064820152608401610a02565b601454610100900460ff1661191457600f805461188f90612d4a565b80601f01602080910402602001604051908101604052809291908181526020018280546118bb90612d4a565b80156119085780601f106118dd57610100808354040283529160200191611908565b820191906000526020600020905b8154815290600101906020018083116118eb57829003601f168201915b50505050509050919050565b600061191e612309565b9050600081511161193e576040518060200160405280600081525061196c565b8061194884612318565b600e60405160200161195c93929190612b78565b6040516020818303038152906040525b9392505050565b6008546001600160a01b031633146119bb5760405162461bcd60e51b81526020600482018190526024820152600080516020612e238339815191526044820152606401610a02565b8051610a7090600e906020840190612700565b6008546001600160a01b03163314611a165760405162461bcd60e51b81526020600482018190526024820152600080516020612e238339815191526044820152606401610a02565b6014805491151563010000000263ff00000019909216919091179055565b6008546001600160a01b03163314611a7c5760405162461bcd60e51b81526020600482018190526024820152600080516020612e238339815191526044820152606401610a02565b6001600160a01b038116611ad25760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574203020617320747265617375727900000000000000006044820152606401610a02565b600c805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6008546001600160a01b03163314611b495760405162461bcd60e51b81526020600482018190526024820152600080516020612e238339815191526044820152606401610a02565b8051610a7090600f906020840190612700565b6008546001600160a01b03163314611ba45760405162461bcd60e51b81526020600482018190526024820152600080516020612e238339815191526044820152606401610a02565b6001600160a01b038116611c205760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610a02565b611c29816121b2565b50565b6001600160a01b03163b151590565b60006001600160e01b031982167f2a55205a0000000000000000000000000000000000000000000000000000000014806109b857506109b88261244a565b6127106bffffffffffffffffffffffff82161115611cff5760405162461bcd60e51b815260206004820152602a60248201527f455243323938313a20726f79616c7479206665652077696c6c2065786365656460448201527f2073616c655072696365000000000000000000000000000000000000000000006064820152608401610a02565b6001600160a01b038216611d555760405162461bcd60e51b815260206004820152601960248201527f455243323938313a20696e76616c6964207265636569766572000000000000006044820152606401610a02565b604080518082019091526001600160a01b039092168083526bffffffffffffffffffffffff9091166020909201829052600160a01b90910217600955565b60008054821080156109b8575050600090815260046020526040902054600160e01b900460ff161590565b600082815260066020526040808220805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b6000611e328261207d565b9050836001600160a01b031681600001516001600160a01b031614611e83576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000336001600160a01b0386161480611ea15750611ea185336108ff565b80611ebc575033611eb184610b06565b6001600160a01b0316145b905080611ef5576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038416611f35576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611f4160008487611dbe565b6001600160a01b038581166000908152600560209081526040808320805467ffffffffffffffff1980821667ffffffffffffffff92831660001901831617909255898616808652838620805493841693831660019081018416949094179055898652600490945282852080546001600160e01b031916909417600160a01b42909216919091021783558701808452922080549193909116612017576000548214612017578054602086015167ffffffffffffffff16600160a01b026001600160e01b03199091166001600160a01b038a16171781555b50505082846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45b5050505050565b610a708282604051806020016040528060008152506124e5565b60408051606081018252600080825260208201819052918101919091528160005481101561218057600081815260046020908152604091829020825160608101845290546001600160a01b0381168252600160a01b810467ffffffffffffffff1692820192909252600160e01b90910460ff1615159181018290529061217e5780516001600160a01b031615612114579392505050565b5060001901600081815260046020908152604091829020825160608101845290546001600160a01b038116808352600160a01b820467ffffffffffffffff1693830193909352600160e01b900460ff1615159281019290925215612179579392505050565b612114565b505b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600880546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b604051630a85bd0160e11b81526000906001600160a01b0385169063150b7a0290612246903390899088908890600401612c3c565b602060405180830381600087803b15801561226057600080fd5b505af1925050508015612290575060408051601f3d908101601f1916820190925261228d91810190612aab565b60015b6122eb573d8080156122be576040519150601f19603f3d011682016040523d82523d6000602084013e6122c3565b606091505b5080516122e3576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490505b949350505050565b6060600d8054610a8390612d4a565b60608161235857505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115612382578061236c81612d85565b915061237b9050600a83612cd4565b915061235c565b60008167ffffffffffffffff81111561239d5761239d612df6565b6040519080825280601f01601f1916602001820160405280156123c7576020820181803683370190505b5090505b8415612301576123dc600183612d07565b91506123e9600a86612da0565b6123f4906030612cbc565b60f81b81838151811061240957612409612de0565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350612443600a86612cd4565b94506123cb565b60006001600160e01b031982167f80ac58cd0000000000000000000000000000000000000000000000000000000014806124ad57506001600160e01b031982167f5b5e139f00000000000000000000000000000000000000000000000000000000145b806109b857507f01ffc9a7000000000000000000000000000000000000000000000000000000006001600160e01b03198316146109b8565b610cf983838360016000546001600160a01b038516612530576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83612567576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038516600081815260056020908152604080832080547fffffffffffffffffffffffffffffffff00000000000000000000000000000000811667ffffffffffffffff8083168c0181169182176801000000000000000067ffffffffffffffff1990941690921783900481168c01811690920217909155858452600490925290912080546001600160e01b031916909217600160a01b42909216919091021790558080850183801561262857506001600160a01b0387163b15155b156126b1575b60405182906001600160a01b038916906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a46126796000888480600101955088612211565b612696576040516368d2bf6b60e11b815260040160405180910390fd5b8082141561262e5782600054146126ac57600080fd5b6126f7565b5b6040516001830192906001600160a01b038916906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4808214156126b2575b5060005561205c565b82805461270c90612d4a565b90600052602060002090601f01602090048101928261272e5760008555612774565b82601f1061274757805160ff1916838001178555612774565b82800160010185558215612774579182015b82811115612774578251825591602001919060010190612759565b50612780929150612784565b5090565b5b808211156127805760008155600101612785565b600067ffffffffffffffff8311156127b3576127b3612df6565b6127c6601f8401601f1916602001612c8b565b90508281528383830111156127da57600080fd5b828260208301376000602084830101529392505050565b80356001600160a01b038116811461280857600080fd5b919050565b8035801515811461280857600080fd5b60006020828403121561282f57600080fd5b61196c826127f1565b6000806040838503121561284b57600080fd5b612854836127f1565b9150612862602084016127f1565b90509250929050565b60008060006060848603121561288057600080fd5b612889846127f1565b9250612897602085016127f1565b9150604084013590509250925092565b600080600080608085870312156128bd57600080fd5b6128c6856127f1565b93506128d4602086016127f1565b925060408501359150606085013567ffffffffffffffff8111156128f757600080fd5b8501601f8101871361290857600080fd5b61291787823560208401612799565b91505092959194509250565b6000806040838503121561293657600080fd5b61293f836127f1565b91506128626020840161280d565b6000806040838503121561296057600080fd5b612969836127f1565b946020939093013593505050565b6000806040838503121561298a57600080fd5b612993836127f1565b915060208301356bffffffffffffffffffffffff811681146129b457600080fd5b809150509250929050565b600060208083850312156129d257600080fd5b823567ffffffffffffffff808211156129ea57600080fd5b818501915085601f8301126129fe57600080fd5b813581811115612a1057612a10612df6565b8060051b9150612a21848301612c8b565b8181528481019084860184860187018a1015612a3c57600080fd5b600095505b83861015612a6657612a52816127f1565b835260019590950194918601918601612a41565b5098975050505050505050565b600060208284031215612a8557600080fd5b61196c8261280d565b600060208284031215612aa057600080fd5b813561196c81612e0c565b600060208284031215612abd57600080fd5b815161196c81612e0c565b600060208284031215612ada57600080fd5b813567ffffffffffffffff811115612af157600080fd5b8201601f81018413612b0257600080fd5b61230184823560208401612799565b600060208284031215612b2357600080fd5b5035919050565b60008060408385031215612b3d57600080fd5b50508035926020909101359150565b60008151808452612b64816020860160208601612d1e565b601f01601f19169290920160200192915050565b600084516020612b8b8285838a01612d1e565b855191840191612b9e8184848a01612d1e565b8554920191600090600181811c9080831680612bbb57607f831692505b858310811415612bd957634e487b7160e01b85526022600452602485fd5b808015612bed5760018114612bfe57612c2b565b60ff19851688528388019550612c2b565b60008b81526020902060005b85811015612c235781548a820152908401908801612c0a565b505083880195505b50939b9a5050505050505050505050565b60006001600160a01b03808716835280861660208401525083604083015260806060830152612c6e6080830184612b4c565b9695505050505050565b60208152600061196c6020830184612b4c565b604051601f8201601f1916810167ffffffffffffffff81118282101715612cb457612cb4612df6565b604052919050565b60008219821115612ccf57612ccf612db4565b500190565b600082612ce357612ce3612dca565b500490565b6000816000190483118215151615612d0257612d02612db4565b500290565b600082821015612d1957612d19612db4565b500390565b60005b83811015612d39578181015183820152602001612d21565b838111156117e35750506000910152565b600181811c90821680612d5e57607f821691505b60208210811415612d7f57634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415612d9957612d99612db4565b5060010190565b600082612daf57612daf612dca565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b031981168114611c2957600080fdfe4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a264697066735822122084ed0e61cfee1d17af718a46c70525aa151c33708d0b19b664979994fa6f98b264736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000160000000000000000000000000672248073fb06330771e7f1246aa9b82cacfcbbf00000000000000000000000000000000000000000000000000000000000000115a6f6d62696520507265736964656e747300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000025a43000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b636f6d696e672d736f6f6e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005e68747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f516d635276353145714c646657615a68627a773438796a48745a5a59433848454b6b5552545665484b5258714e462f6d657461646174612e6a736f6e0000
-----Decoded View---------------
Arg [0] : _name (string): Zombie Presidents
Arg [1] : _symbol (string): ZC
Arg [2] : _initBaseURI (string): coming-soon
Arg [3] : _notRevealedUri (string): https://gateway.pinata.cloud/ipfs/QmcRv51EqLdfWaZhbzw48yjHtZZYC8HEKkURTVeHKRXqNF/metadata.json
Arg [4] : _treasury (address): 0x672248073fb06330771E7f1246aA9b82cAcfCBbf
-----Encoded View---------------
15 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000120
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000160
Arg [4] : 000000000000000000000000672248073fb06330771e7f1246aa9b82cacfcbbf
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000011
Arg [6] : 5a6f6d62696520507265736964656e7473000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [8] : 5a43000000000000000000000000000000000000000000000000000000000000
Arg [9] : 000000000000000000000000000000000000000000000000000000000000000b
Arg [10] : 636f6d696e672d736f6f6e000000000000000000000000000000000000000000
Arg [11] : 000000000000000000000000000000000000000000000000000000000000005e
Arg [12] : 68747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066
Arg [13] : 732f516d635276353145714c646657615a68627a773438796a48745a5a594338
Arg [14] : 48454b6b5552545665484b5258714e462f6d657461646174612e6a736f6e0000
Deployed Bytecode Sourcemap
53963:5244:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;59000:204;;;;;;;;;;-1:-1:-1;59000:204:0;;;;;:::i;:::-;;:::i;:::-;;;8755:14:1;;8748:22;8730:41;;8718:2;8703:18;59000:204:0;;;;;;;;57949:75;;;;;;;;;;-1:-1:-1;57949:75:0;;;;;:::i;:::-;;:::i;:::-;;58834:160;;;;;;;;;;-1:-1:-1;58834:160:0;;;;;:::i;:::-;;:::i;54539:46::-;;;;;;;;;;-1:-1:-1;54539:46:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;15394:25:1;;;15382:2;15367:18;54539:46:0;15248:177:1;39298:100:0;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;40801:204::-;;;;;;;;;;-1:-1:-1;40801:204:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;7705:55:1;;;7687:74;;7675:2;7660:18;40801:204:0;7541:226:1;54165:28:0;;;;;;;;;;;;;:::i;57159:118::-;;;;;;;;;;-1:-1:-1;57159:118:0;;;;;:::i;:::-;;:::i;40364:371::-;;;;;;;;;;-1:-1:-1;40364:371:0;;;;;:::i;:::-;;:::i;57283:134::-;;;;;;;;;;-1:-1:-1;57283:134:0;;;;;:::i;:::-;;:::i;54198:32::-;;;;;;;;;;;;;;;;35434:303;;;;;;;;;;-1:-1:-1;35688:12:0;;35478:7;35672:13;:28;35434:303;;54271:34;;;;;;;;;;;;;;;;41666:170;;;;;;;;;;-1:-1:-1;41666:170:0;;;;;:::i;:::-;;:::i;6563:494::-;;;;;;;;;;-1:-1:-1;6563:494:0;;;;;:::i;:::-;;:::i;:::-;;;;-1:-1:-1;;;;;8480:55:1;;;8462:74;;8567:2;8552:18;;8545:34;;;;8435:18;6563:494:0;8288:297:1;58311:102:0;;;;;;;;;;-1:-1:-1;58311:102:0;;;;;:::i;:::-;;:::i;58536:107::-;;;;;;;;;;-1:-1:-1;58536:107:0;;;;;:::i;:::-;-1:-1:-1;;;;;58619:18:0;58597:4;58619:18;;;:11;:18;;;;;;;;;58536:107;56795:243;;;;;;;;;;-1:-1:-1;56795:243:0;;;;;:::i;:::-;;:::i;58649:116::-;;;:::i;55158:955::-;;;;;;:::i;:::-;;:::i;41907:185::-;;;;;;;;;;-1:-1:-1;41907:185:0;;;;;:::i;:::-;;:::i;56707:82::-;;;;;;;;;;-1:-1:-1;56707:82:0;;;;;:::i;:::-;;:::i;58030:93::-;;;;;;;;;;-1:-1:-1;58030:93:0;;;;;:::i;:::-;;:::i;54454:32::-;;;;;;;;;;-1:-1:-1;54454:32:0;;;;;;;;;;;58129:175;;;;;;;;;;-1:-1:-1;58129:175:0;;;;;:::i;:::-;;:::i;54382:28::-;;;;;;;;;;-1:-1:-1;54382:28:0;;;;;;;;;;;57423:98;;;;;;;;;;-1:-1:-1;57423:98:0;;;;;:::i;:::-;;:::i;54351:26::-;;;;;;;;;;-1:-1:-1;54351:26:0;;;;;;;;54069:23;;;;;;;;;;-1:-1:-1;54069:23:0;;;;-1:-1:-1;;;;;54069:23:0;;;39106:125;;;;;;;;;;-1:-1:-1;39106:125:0;;;;;:::i;:::-;;:::i;54097:21::-;;;;;;;;;;;;;:::i;36554:206::-;;;;;;;;;;-1:-1:-1;36554:206:0;;;;;:::i;:::-;;:::i;11605:103::-;;;;;;;;;;;;;:::i;57078:75::-;;;;;;;;;;;;;:::i;10954:87::-;;;;;;;;;;-1:-1:-1;11027:6:0;;-1:-1:-1;;;;;11027:6:0;10954:87;;39467:104;;;;;;;;;;;;;:::i;41077:287::-;;;;;;;;;;-1:-1:-1;41077:287:0;;;;;:::i;:::-;;:::i;56634:67::-;;;;;;;;;;;;;:::i;54310:36::-;;;;;;;;;;;;;;;;42163:369;;;;;;;;;;-1:-1:-1;42163:369:0;;;;;:::i;:::-;;:::i;54415:34::-;;;;;;;;;;-1:-1:-1;54415:34:0;;;;;;;;;;;54123:37;;;;;;;;;;;;;:::i;56119:493::-;;;;;;;;;;-1:-1:-1;56119:493:0;;;;;:::i;:::-;;:::i;54235:31::-;;;;;;;;;;;;;;;;54491:43;;;;;;;;;;-1:-1:-1;54491:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;57819:124;;;;;;;;;;-1:-1:-1;57819:124:0;;;;;:::i;:::-;;:::i;41435:164::-;;;;;;;;;;-1:-1:-1;41435:164:0;;;;;:::i;:::-;-1:-1:-1;;;;;41556:25:0;;;41532:4;41556:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;41435:164;58419:111;;;;;;;;;;-1:-1:-1;58419:111:0;;;;;:::i;:::-;;:::i;57527:159::-;;;;;;;;;;-1:-1:-1;57527:159:0;;;;;:::i;:::-;;:::i;57691:122::-;;;;;;;;;;-1:-1:-1;57691:122:0;;;;;:::i;:::-;;:::i;11863:201::-;;;;;;;;;;-1:-1:-1;11863:201:0;;;;;:::i;:::-;;:::i;59000:204::-;59131:4;59160:36;59184:11;59160:23;:36::i;:::-;59153:43;59000:204;-1:-1:-1;;59000:204:0:o;57949:75::-;11027:6;;-1:-1:-1;;;;;11027:6:0;9838:10;11174:23;11166:68;;;;-1:-1:-1;;;11166:68:0;;12501:2:1;11166:68:0;;;12483:21:1;;;12520:18;;;12513:30;-1:-1:-1;;;;;;;;;;;12559:18:1;;;12552:62;12631:18;;11166:68:0;;;;;;;;;58003:6:::1;:15:::0;;-1:-1:-1;;58003:15:0::1;::::0;::::1;;::::0;;;::::1;::::0;;57949:75::o;58834:160::-;11027:6;;-1:-1:-1;;;;;11027:6:0;9838:10;11174:23;11166:68;;;;-1:-1:-1;;;11166:68:0;;12501:2:1;11166:68:0;;;12483:21:1;;;12520:18;;;12513:30;-1:-1:-1;;;;;;;;;;;12559:18:1;;;12552:62;12631:18;;11166:68:0;12299:356:1;11166:68:0;58944:44:::1;58963:8;58973:14;58944:18;:44::i;:::-;58834:160:::0;;:::o;39298:100::-;39352:13;39385:5;39378:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39298:100;:::o;40801:204::-;40869:7;40894:16;40902:7;40894;:16::i;:::-;40889:64;;40919:34;;;;;;;;;;;;;;40889:64;-1:-1:-1;40973:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;40973:24:0;;40801:204::o;54165:28::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;57159:118::-;11027:6;;-1:-1:-1;;;;;11027:6:0;9838:10;11174:23;11166:68;;;;-1:-1:-1;;;11166:68:0;;12501:2:1;11166:68:0;;;12483:21:1;;;12520:18;;;12513:30;-1:-1:-1;;;;;;;;;;;12559:18:1;;;12552:62;12631:18;;11166:68:0;12299:356:1;11166:68:0;57238:13:::1;:33:::0;57159:118::o;40364:371::-;40437:13;40453:24;40469:7;40453:15;:24::i;:::-;40437:40;;40498:5;-1:-1:-1;;;;;40492:11:0;:2;-1:-1:-1;;;;;40492:11:0;;40488:48;;;40512:24;;;;;;;;;;;;;;40488:48;9838:10;-1:-1:-1;;;;;40553:21:0;;;;;;:63;;-1:-1:-1;40579:37:0;40596:5;9838:10;41435:164;:::i;40579:37::-;40578:38;40553:63;40549:138;;;40640:35;;;;;;;;;;;;;;40549:138;40699:28;40708:2;40712:7;40721:5;40699:8;:28::i;:::-;40426:309;40364:371;;:::o;57283:134::-;11027:6;;-1:-1:-1;;;;;11027:6:0;9838:10;11174:23;11166:68;;;;-1:-1:-1;;;11166:68:0;;12501:2:1;11166:68:0;;;12483:21:1;;;12520:18;;;12513:30;-1:-1:-1;;;;;;;;;;;12559:18:1;;;12552:62;12631:18;;11166:68:0;12299:356:1;11166:68:0;57370:17:::1;:41:::0;57283:134::o;41666:170::-;41800:28;41810:4;41816:2;41820:7;41800:9;:28::i;6563:494::-;6707:7;6770:27;;;:17;:27;;;;;;;;6741:56;;;;;;;;;-1:-1:-1;;;;;6741:56:0;;;;;-1:-1:-1;;;6741:56:0;;;;;;;;;;;;6707:7;;6810:92;;-1:-1:-1;6861:29:0;;;;;;;;;6871:19;6861:29;-1:-1:-1;;;;;6861:29:0;;;;-1:-1:-1;;;6861:29:0;;;;;;;;6810:92;6952:23;;;;6914:21;;7423:5;;6939:36;;6938:58;6939:36;:10;:36;:::i;:::-;6938:58;;;;:::i;:::-;7017:16;;;;;-1:-1:-1;6563:494:0;;-1:-1:-1;;;;6563:494:0:o;58311:102::-;11027:6;;-1:-1:-1;;;;;11027:6:0;9838:10;11174:23;11166:68;;;;-1:-1:-1;;;11166:68:0;;12501:2:1;11166:68:0;;;12483:21:1;;;12520:18;;;12513:30;-1:-1:-1;;;;;;;;;;;12559:18:1;;;12552:62;12631:18;;11166:68:0;12299:356:1;11166:68:0;-1:-1:-1;;;;;58381:18:0::1;58402:5;58381:18:::0;;;:11:::1;:18;::::0;;;;:26;;-1:-1:-1;;58381:26:0::1;::::0;;58311:102::o;56795:243::-;11027:6;;-1:-1:-1;;;;;11027:6:0;9838:10;11174:23;11166:68;;;;-1:-1:-1;;;11166:68:0;;12501:2:1;11166:68:0;;;12483:21:1;;;12520:18;;;12513:30;-1:-1:-1;;;;;;;;;;;12559:18:1;;;12552:62;12631:18;;11166:68:0;12299:356:1;11166:68:0;56868:14:::1;::::0;;;::::1;;;:23;56860:52;;;::::0;-1:-1:-1;;;56860:52:0;;13278:2:1;56860:52:0::1;::::0;::::1;13260:21:1::0;13317:2;13297:18;;;13290:30;13356:18;13336;;;13329:46;13392:18;;56860:52:0::1;13076:340:1::0;56860:52:0::1;35688:12:::0;;35478:7;35672:13;:28;56927:10:::1;:26;56919:84;;;::::0;-1:-1:-1;;;56919:84:0;;10312:2:1;56919:84:0::1;::::0;::::1;10294:21:1::0;10351:2;10331:18;;;10324:30;10390:34;10370:18;;;10363:62;10461:15;10441:18;;;10434:43;10494:19;;56919:84:0::1;10110:409:1::0;56919:84:0::1;57010:9;:22:::0;56795:243::o;58649:116::-;11027:6;;-1:-1:-1;;;;;11027:6:0;9838:10;11174:23;11166:68;;;;-1:-1:-1;;;11166:68:0;;12501:2:1;11166:68:0;;;12483:21:1;;;12520:18;;;12513:30;-1:-1:-1;;;;;;;;;;;12559:18:1;;;12552:62;12631:18;;11166:68:0;12299:356:1;11166:68:0;58711:47:::1;::::0;58719:10:::1;::::0;58736:21:::1;58711:47:::0;::::1;;;::::0;::::1;::::0;;;58736:21;58719:10;58711:47;::::1;;;;;;58703:56;;;::::0;::::1;;58649:116::o:0;55158:955::-;14148:1;14746:7;;:19;;14738:63;;;;-1:-1:-1;;;14738:63:0;;14736:2:1;14738:63:0;;;14718:21:1;14775:2;14755:18;;;14748:30;14814:33;14794:18;;;14787:61;14865:18;;14738:63:0;14534:355:1;14738:63:0;14148:1;14879:7;:18;55241:14:::1;55258:13;35688:12:::0;;35478:7;35672:13;:28;;35434:303;55258:13:::1;55287:6;::::0;55241:30;;-1:-1:-1;55287:6:0::1;;55286:7;55278:35;;;::::0;-1:-1:-1;;;55278:35:0;;9968:2:1;55278:35:0::1;::::0;::::1;9950:21:1::0;10007:2;9987:18;;;9980:30;10046:17;10026:18;;;10019:45;10081:18;;55278:35:0::1;9766:339:1::0;55278:35:0::1;55342:1;55328:11;:15;55320:52;;;::::0;-1:-1:-1;;;55320:52:0;;9208:2:1;55320:52:0::1;::::0;::::1;9190:21:1::0;9247:2;9227:18;;;9220:30;9286:26;9266:18;;;9259:54;9330:18;;55320:52:0::1;9006:348:1::0;55320:52:0::1;55402:17;;55387:11;:32;;55379:72;;;::::0;-1:-1:-1;;;55379:72:0;;11430:2:1;55379:72:0::1;::::0;::::1;11412:21:1::0;11469:2;11449:18;;;11442:30;11508:29;11488:18;;;11481:57;11555:18;;55379:72:0::1;11228:351:1::0;55379:72:0::1;55481:13;;55466:11;:28;;55458:62;;;::::0;-1:-1:-1;;;55458:62:0;;14034:2:1;55458:62:0::1;::::0;::::1;14016:21:1::0;14073:2;14053:18;;;14046:30;14112:23;14092:18;;;14085:51;14153:18;;55458:62:0::1;13832:345:1::0;55458:62:0::1;55558:9;::::0;55535:20:::1;55544:11:::0;55535:6;:20:::1;:::i;:::-;:32;55527:75;;;::::0;-1:-1:-1;;;55527:75:0;;11786:2:1;55527:75:0::1;::::0;::::1;11768:21:1::0;11825:2;11805:18;;;11798:30;11864:32;11844:18;;;11837:60;11914:18;;55527:75:0::1;11584:354:1::0;55527:75:0::1;55649:10;55611:24;55638:22:::0;;;:10:::1;:22;::::0;;;;;11027:6;;55638:22;;-1:-1:-1;;;;;11027:6:0;;;55671:21:::1;55667:343;;55749:13;::::0;55714:30:::1;55733:11:::0;55714:16;:30:::1;:::i;:::-;55713:49;;55705:89;;;::::0;-1:-1:-1;;;55705:89:0;;12145:2:1;55705:89:0::1;::::0;::::1;12127:21:1::0;12184:2;12164:18;;;12157:30;12223:29;12203:18;;;12196:57;12270:18;;55705:89:0::1;11943:351:1::0;55705:89:0::1;55820:10;55808:23;::::0;;;:11:::1;:23;::::0;;;;;::::1;;:31;;:23:::0;:31:::1;55805:121;;55864:13;::::0;;;::::1;;;:22;55856:58;;;::::0;-1:-1:-1;;;55856:58:0;;14384:2:1;55856:58:0::1;::::0;::::1;14366:21:1::0;14423:2;14403:18;;;14396:30;14462:25;14442:18;;;14435:53;14505:18;;55856:58:0::1;14182:347:1::0;55856:58:0::1;55964:11;55957:4;;:18;;;;:::i;:::-;55944:9;:31;;55936:66;;;::::0;-1:-1:-1;;;55936:66:0;;11079:2:1;55936:66:0::1;::::0;::::1;11061:21:1::0;11118:2;11098:18;;;11091:30;11157:24;11137:18;;;11130:52;11199:18;;55936:66:0::1;10877:346:1::0;55936:66:0::1;56043:30;56062:11:::0;56043:16;:30:::1;:::i;:::-;56029:10;56018:22;::::0;;;:10:::1;:22;::::0;;;;:55;56080:27:::1;56090:3:::0;56095:11;56080:9:::1;:27::i;:::-;-1:-1:-1::0;;14104:1:0;15058:7;:22;-1:-1:-1;;55158:955:0:o;41907:185::-;42045:39;42062:4;42068:2;42072:7;42045:39;;;;;;;;;;;;:16;:39::i;56707:82::-;11027:6;;-1:-1:-1;;;;;11027:6:0;9838:10;11174:23;11166:68;;;;-1:-1:-1;;;11166:68:0;;12501:2:1;11166:68:0;;;12483:21:1;;;12520:18;;;12513:30;-1:-1:-1;;;;;;;;;;;12559:18:1;;;12552:62;12631:18;;11166:68:0;12299:356:1;11166:68:0;56768:4:::1;:15:::0;56707:82::o;58030:93::-;11027:6;;-1:-1:-1;;;;;11027:6:0;9838:10;11174:23;11166:68;;;;-1:-1:-1;;;11166:68:0;;12501:2:1;11166:68:0;;;12483:21:1;;;12520:18;;;12513:30;-1:-1:-1;;;;;;;;;;;12559:18:1;;;12552:62;12631:18;;11166:68:0;12299:356:1;11166:68:0;-1:-1:-1;;;;;58092:18:0::1;;::::0;;;:11:::1;:18;::::0;;;;:25;;-1:-1:-1;;58092:25:0::1;58113:4;58092:25;::::0;;58030:93::o;58129:175::-;11027:6;;-1:-1:-1;;;;;11027:6:0;9838:10;11174:23;11166:68;;;;-1:-1:-1;;;11166:68:0;;12501:2:1;11166:68:0;;;12483:21:1;;;12520:18;;;12513:30;-1:-1:-1;;;;;;;;;;;12559:18:1;;;12552:62;12631:18;;11166:68:0;12299:356:1;11166:68:0;58217:9:::1;58212:87;58236:6;:13;58232:1;:17;58212:87;;;58267:24;58281:6;58288:1;58281:9;;;;;;;;:::i;:::-;;;;;;;58267:13;:24::i;:::-;58251:3:::0;::::1;::::0;::::1;:::i;:::-;;;;58212:87;;57423:98:::0;11027:6;;-1:-1:-1;;;;;11027:6:0;9838:10;11174:23;11166:68;;;;-1:-1:-1;;;11166:68:0;;12501:2:1;11166:68:0;;;12483:21:1;;;12520:18;;;12513:30;-1:-1:-1;;;;;;;;;;;12559:18:1;;;12552:62;12631:18;;11166:68:0;12299:356:1;11166:68:0;57494:21;;::::1;::::0;:7:::1;::::0;:21:::1;::::0;::::1;::::0;::::1;:::i;39106:125::-:0;39170:7;39197:21;39210:7;39197:12;:21::i;:::-;:26;;39106:125;-1:-1:-1;;39106:125:0:o;54097:21::-;;;;;;;:::i;36554:206::-;36618:7;-1:-1:-1;;;;;36642:19:0;;36638:60;;36670:28;;;;;;;;;;;;;;36638:60;-1:-1:-1;;;;;;36724:19:0;;;;;:12;:19;;;;;:27;;;;36554:206::o;11605:103::-;11027:6;;-1:-1:-1;;;;;11027:6:0;9838:10;11174:23;11166:68;;;;-1:-1:-1;;;11166:68:0;;12501:2:1;11166:68:0;;;12483:21:1;;;12520:18;;;12513:30;-1:-1:-1;;;;;;;;;;;12559:18:1;;;12552:62;12631:18;;11166:68:0;12299:356:1;11166:68:0;11670:30:::1;11697:1;11670:18;:30::i;57078:75::-:0;11027:6;;-1:-1:-1;;;;;11027:6:0;9838:10;11174:23;11166:68;;;;-1:-1:-1;;;11166:68:0;;12501:2:1;11166:68:0;;;12483:21:1;;;12520:18;;;12513:30;-1:-1:-1;;;;;;;;;;;12559:18:1;;;12552:62;12631:18;;11166:68:0;12299:356:1;11166:68:0;57126:14:::1;:21:::0;;-1:-1:-1;;57126:21:0::1;::::0;::::1;::::0;;57078:75::o;39467:104::-;39523:13;39556:7;39549:14;;;;;:::i;41077:287::-;-1:-1:-1;;;;;41176:24:0;;9838:10;41176:24;41172:54;;;41209:17;;;;;;;;;;;;;;41172:54;9838:10;41239:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;41239:42:0;;;;;;;;;;;;:53;;-1:-1:-1;;41239:53:0;;;;;;;;;;41308:48;;8730:41:1;;;41239:42:0;;9838:10;41308:48;;8703:18:1;41308:48:0;;;;;;;41077:287;;:::o;56634:67::-;11027:6;;-1:-1:-1;;;;;11027:6:0;9838:10;11174:23;11166:68;;;;-1:-1:-1;;;11166:68:0;;12501:2:1;11166:68:0;;;12483:21:1;;;12520:18;;;12513:30;-1:-1:-1;;;;;;;;;;;12559:18:1;;;12552:62;12631:18;;11166:68:0;12299:356:1;11166:68:0;56680:8:::1;:15:::0;;-1:-1:-1;;56680:15:0::1;;;::::0;;56634:67::o;42163:369::-;42330:28;42340:4;42346:2;42350:7;42330:9;:28::i;:::-;-1:-1:-1;;;;;42373:13:0;;22954:19;:23;;42373:76;;;;;42393:56;42424:4;42430:2;42434:7;42443:5;42393:30;:56::i;:::-;42392:57;42373:76;42369:156;;;42473:40;;-1:-1:-1;;;42473:40:0;;;;;;;;;;;42369:156;42163:369;;;;:::o;54123:37::-;;;;;;;:::i;56119:493::-;56217:13;56258:16;56266:7;56258;:16::i;:::-;56242:97;;;;-1:-1:-1;;;56242:97:0;;12862:2:1;56242:97:0;;;12844:21:1;12901:2;12881:18;;;12874:30;12940:34;12920:18;;;12913:62;13011:17;12991:18;;;12984:45;13046:19;;56242:97:0;12660:411:1;56242:97:0;56351:8;;;;;;;56348:62;;56388:14;56381:21;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;56119:493;;;:::o;56348:62::-;56418:28;56449:10;:8;:10::i;:::-;56418:41;;56504:1;56479:14;56473:28;:32;:133;;;;;;;;;;;;;;;;;56541:14;56557:18;:7;:16;:18::i;:::-;56577:13;56524:67;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;56473:133;56466:140;56119:493;-1:-1:-1;;;56119:493:0:o;57819:124::-;11027:6;;-1:-1:-1;;;;;11027:6:0;9838:10;11174:23;11166:68;;;;-1:-1:-1;;;11166:68:0;;12501:2:1;11166:68:0;;;12483:21:1;;;12520:18;;;12513:30;-1:-1:-1;;;;;;;;;;;12559:18:1;;;12552:62;12631:18;;11166:68:0;12299:356:1;11166:68:0;57904:33;;::::1;::::0;:13:::1;::::0;:33:::1;::::0;::::1;::::0;::::1;:::i;58419:111::-:0;11027:6;;-1:-1:-1;;;;;11027:6:0;9838:10;11174:23;11166:68;;;;-1:-1:-1;;;11166:68:0;;12501:2:1;11166:68:0;;;12483:21:1;;;12520:18;;;12513:30;-1:-1:-1;;;;;;;;;;;12559:18:1;;;12552:62;12631:18;;11166:68:0;12299:356:1;11166:68:0;58494:13:::1;:30:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;58494:30:0;;::::1;::::0;;;::::1;::::0;;58419:111::o;57527:159::-;11027:6;;-1:-1:-1;;;;;11027:6:0;9838:10;11174:23;11166:68;;;;-1:-1:-1;;;11166:68:0;;12501:2:1;11166:68:0;;;12483:21:1;;;12520:18;;;12513:30;-1:-1:-1;;;;;;;;;;;12559:18:1;;;12552:62;12631:18;;11166:68:0;12299:356:1;11166:68:0;-1:-1:-1;;;;;57601:23:0;::::1;57593:60;;;::::0;-1:-1:-1;;;57593:60:0;;10726:2:1;57593:60:0::1;::::0;::::1;10708:21:1::0;10765:2;10745:18;;;10738:30;10804:26;10784:18;;;10777:54;10848:18;;57593:60:0::1;10524:348:1::0;57593:60:0::1;57660:8;:20:::0;;-1:-1:-1;;57660:20:0::1;-1:-1:-1::0;;;;;57660:20:0;;;::::1;::::0;;;::::1;::::0;;57527:159::o;57691:122::-;11027:6;;-1:-1:-1;;;;;11027:6:0;9838:10;11174:23;11166:68;;;;-1:-1:-1;;;11166:68:0;;12501:2:1;11166:68:0;;;12483:21:1;;;12520:18;;;12513:30;-1:-1:-1;;;;;;;;;;;12559:18:1;;;12552:62;12631:18;;11166:68:0;12299:356:1;11166:68:0;57775:32;;::::1;::::0;:14:::1;::::0;:32:::1;::::0;::::1;::::0;::::1;:::i;11863:201::-:0;11027:6;;-1:-1:-1;;;;;11027:6:0;9838:10;11174:23;11166:68;;;;-1:-1:-1;;;11166:68:0;;12501:2:1;11166:68:0;;;12483:21:1;;;12520:18;;;12513:30;-1:-1:-1;;;;;;;;;;;12559:18:1;;;12552:62;12631:18;;11166:68:0;12299:356:1;11166:68:0;-1:-1:-1;;;;;11952:22:0;::::1;11944:73;;;::::0;-1:-1:-1;;;11944:73:0;;9561:2:1;11944:73:0::1;::::0;::::1;9543:21:1::0;9600:2;9580:18;;;9573:30;9639:34;9619:18;;;9612:62;9710:8;9690:18;;;9683:36;9736:19;;11944:73:0::1;9359:402:1::0;11944:73:0::1;12028:28;12047:8;12028:18;:28::i;:::-;11863:201:::0;:::o;22659:326::-;-1:-1:-1;;;;;22954:19:0;;:23;;;22659:326::o;6293:215::-;6395:4;-1:-1:-1;;;;;;6419:41:0;;6434:26;6419:41;;:81;;;6464:36;6488:11;6464:23;:36::i;7707:332::-;7423:5;7810:33;;;;;7802:88;;;;-1:-1:-1;;;7802:88:0;;13623:2:1;7802:88:0;;;13605:21:1;13662:2;13642:18;;;13635:30;13701:34;13681:18;;;13674:62;13772:12;13752:18;;;13745:40;13802:19;;7802:88:0;13421:406:1;7802:88:0;-1:-1:-1;;;;;7909:22:0;;7901:60;;;;-1:-1:-1;;;7901:60:0;;15096:2:1;7901:60:0;;;15078:21:1;15135:2;15115:18;;;15108:30;15174:27;15154:18;;;15147:55;15219:18;;7901:60:0;14894:349:1;7901:60:0;7996:35;;;;;;;;;-1:-1:-1;;;;;7996:35:0;;;;;;;;;;;;;;;;;-1:-1:-1;;;7974:57:0;;;;:19;:57;7707:332::o;42787:174::-;42844:4;42908:13;;42898:7;:23;42868:85;;;;-1:-1:-1;;42926:20:0;;;;:11;:20;;;;;:27;-1:-1:-1;;;42926:27:0;;;;42925:28;;42787:174::o;50944:196::-;51059:24;;;;:15;:24;;;;;;:29;;-1:-1:-1;;51059:29:0;-1:-1:-1;;;;;51059:29:0;;;;;;;;;51104:28;;51059:24;;51104:28;;;;;;;50944:196;;;:::o;45887:2130::-;46002:35;46040:21;46053:7;46040:12;:21::i;:::-;46002:59;;46100:4;-1:-1:-1;;;;;46078:26:0;:13;:18;;;-1:-1:-1;;;;;46078:26:0;;46074:67;;46113:28;;;;;;;;;;;;;;46074:67;46154:22;9838:10;-1:-1:-1;;;;;46180:20:0;;;;:73;;-1:-1:-1;46217:36:0;46234:4;9838:10;41435:164;:::i;46217:36::-;46180:126;;;-1:-1:-1;9838:10:0;46270:20;46282:7;46270:11;:20::i;:::-;-1:-1:-1;;;;;46270:36:0;;46180:126;46154:153;;46325:17;46320:66;;46351:35;;;;;;;;;;;;;;46320:66;-1:-1:-1;;;;;46401:16:0;;46397:52;;46426:23;;;;;;;;;;;;;;46397:52;46570:35;46587:1;46591:7;46600:4;46570:8;:35::i;:::-;-1:-1:-1;;;;;46901:18:0;;;;;;;:12;:18;;;;;;;;:31;;-1:-1:-1;;46901:31:0;;;;;;;-1:-1:-1;;46901:31:0;;;;;;;46947:16;;;;;;;;;:29;;;;;;;;-1:-1:-1;46947:29:0;;;;;;;;;;;47027:20;;;:11;:20;;;;;;47062:18;;-1:-1:-1;;;;;;47095:49:0;;;;-1:-1:-1;;;47128:15:0;47095:49;;;;;;;;;;47418:11;;47478:24;;;;;47521:13;;47027:20;;47478:24;;47521:13;47517:384;;47731:13;;47716:11;:28;47712:174;;47769:20;;47838:28;;;;47812:54;;-1:-1:-1;;;47812:54:0;-1:-1:-1;;;;;;47812:54:0;;;-1:-1:-1;;;;;47769:20:0;;47812:54;;;;47712:174;46876:1036;;;47948:7;47944:2;-1:-1:-1;;;;;47929:27:0;47938:4;-1:-1:-1;;;;;47929:27:0;;;;;;;;;;;47967:42;45991:2026;;45887:2130;;;:::o;42969:104::-;43038:27;43048:2;43052:8;43038:27;;;;;;;;;;;;:9;:27::i;37935:1109::-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;38046:7:0;38129:13;;38122:4;:20;38091:886;;;38163:31;38197:17;;;:11;:17;;;;;;;;;38163:51;;;;;;;;;-1:-1:-1;;;;;38163:51:0;;;;-1:-1:-1;;;38163:51:0;;;;;;;;;;;-1:-1:-1;;;38163:51:0;;;;;;;;;;;;;;38233:729;;38283:14;;-1:-1:-1;;;;;38283:28:0;;38279:101;;38347:9;37935:1109;-1:-1:-1;;;37935:1109:0:o;38279:101::-;-1:-1:-1;;;38722:6:0;38767:17;;;;:11;:17;;;;;;;;;38755:29;;;;;;;;;-1:-1:-1;;;;;38755:29:0;;;;;-1:-1:-1;;;38755:29:0;;;;;;;;;;;-1:-1:-1;;;38755:29:0;;;;;;;;;;;;;38815:28;38811:109;;38883:9;37935:1109;-1:-1:-1;;;37935:1109:0:o;38811:109::-;38682:261;;;38144:833;38091:886;39005:31;;;;;;;;;;;;;;12224:191;12317:6;;;-1:-1:-1;;;;;12334:17:0;;;-1:-1:-1;;12334:17:0;;;;;;;12367:40;;12317:6;;;12334:17;12317:6;;12367:40;;12298:16;;12367:40;12287:128;12224:191;:::o;51632:667::-;51816:72;;-1:-1:-1;;;51816:72:0;;51795:4;;-1:-1:-1;;;;;51816:36:0;;;;;:72;;9838:10;;51867:4;;51873:7;;51882:5;;51816:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;51816:72:0;;;;;;;;-1:-1:-1;;51816:72:0;;;;;;;;;;;;:::i;:::-;;;51812:480;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;52050:13:0;;52046:235;;52096:40;;-1:-1:-1;;;52096:40:0;;;;;;;;;;;52046:235;52239:6;52233:13;52224:6;52220:2;52216:15;52209:38;51812:480;-1:-1:-1;;;;;;51935:55:0;-1:-1:-1;;;51935:55:0;;-1:-1:-1;51812:480:0;51632:667;;;;;;:::o;55050:102::-;55110:13;55139:7;55132:14;;;;;:::i;30217:723::-;30273:13;30494:10;30490:53;;-1:-1:-1;;30521:10:0;;;;;;;;;;;;;;;;;;30217:723::o;30490:53::-;30568:5;30553:12;30609:78;30616:9;;30609:78;;30642:8;;;;:::i;:::-;;-1:-1:-1;30665:10:0;;-1:-1:-1;30673:2:0;30665:10;;:::i;:::-;;;30609:78;;;30697:19;30729:6;30719:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30719:17:0;;30697:39;;30747:154;30754:10;;30747:154;;30781:11;30791:1;30781:11;;:::i;:::-;;-1:-1:-1;30850:10:0;30858:2;30850:5;:10;:::i;:::-;30837:24;;:2;:24;:::i;:::-;30824:39;;30807:6;30814;30807:14;;;;;;;;:::i;:::-;;;;:56;;;;;;;;;;-1:-1:-1;30878:11:0;30887:2;30878:11;;:::i;:::-;;;30747:154;;36185:305;36287:4;-1:-1:-1;;;;;;36324:40:0;;36339:25;36324:40;;:105;;-1:-1:-1;;;;;;;36381:48:0;;36396:33;36381:48;36324:105;:158;;;-1:-1:-1;4968:25:0;-1:-1:-1;;;;;;4953:40:0;;;36446:36;4844:157;43436:163;43559:32;43565:2;43569:8;43579:5;43586:4;43997:20;44020:13;-1:-1:-1;;;;;44048:16:0;;44044:48;;44073:19;;;;;;;;;;;;;;44044:48;44107:13;44103:44;;44129:18;;;;;;;;;;;;;;44103:44;-1:-1:-1;;;;;44498:16:0;;;;;;:12;:16;;;;;;;;:44;;44557:49;;;44498:44;;;;;;;;44557:49;;;;-1:-1:-1;;44498:44:0;;;;;;44557:49;;;;;;;;;;;;;;;;44623:25;;;:11;:25;;;;;;:35;;-1:-1:-1;;;;;;44673:66:0;;;;-1:-1:-1;;;44723:15:0;44673:66;;;;;;;;;;44623:25;44820:23;;;44864:4;:23;;;;-1:-1:-1;;;;;;44872:13:0;;22954:19;:23;;44872:15;44860:641;;;44908:314;44939:38;;44964:12;;-1:-1:-1;;;;;44939:38:0;;;44956:1;;44939:38;;44956:1;;44939:38;45005:69;45044:1;45048:2;45052:14;;;;;;45068:5;45005:30;:69::i;:::-;45000:174;;45110:40;;-1:-1:-1;;;45110:40:0;;;;;;;;;;;45000:174;45217:3;45201:12;:19;;44908:314;;45303:12;45286:13;;:29;45282:43;;45317:8;;;45282:43;44860:641;;;45366:120;45397:40;;45422:14;;;;;-1:-1:-1;;;;;45397:40:0;;;45414:1;;45397:40;;45414:1;;45397:40;45481:3;45465:12;:19;;45366:120;;44860:641;-1:-1:-1;45515:13:0;:28;45565:60;42163:369;-1:-1:-1;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:406:1;78:5;112:18;104:6;101:30;98:56;;;134:18;;:::i;:::-;172:57;217:2;196:15;;-1:-1:-1;;192:29:1;223:4;188:40;172:57;:::i;:::-;163:66;;252:6;245:5;238:21;292:3;283:6;278:3;274:16;271:25;268:45;;;309:1;306;299:12;268:45;358:6;353:3;346:4;339:5;335:16;322:43;412:1;405:4;396:6;389:5;385:18;381:29;374:40;14:406;;;;;:::o;425:196::-;493:20;;-1:-1:-1;;;;;542:54:1;;532:65;;522:93;;611:1;608;601:12;522:93;425:196;;;:::o;626:160::-;691:20;;747:13;;740:21;730:32;;720:60;;776:1;773;766:12;791:186;850:6;903:2;891:9;882:7;878:23;874:32;871:52;;;919:1;916;909:12;871:52;942:29;961:9;942:29;:::i;982:260::-;1050:6;1058;1111:2;1099:9;1090:7;1086:23;1082:32;1079:52;;;1127:1;1124;1117:12;1079:52;1150:29;1169:9;1150:29;:::i;:::-;1140:39;;1198:38;1232:2;1221:9;1217:18;1198:38;:::i;:::-;1188:48;;982:260;;;;;:::o;1247:328::-;1324:6;1332;1340;1393:2;1381:9;1372:7;1368:23;1364:32;1361:52;;;1409:1;1406;1399:12;1361:52;1432:29;1451:9;1432:29;:::i;:::-;1422:39;;1480:38;1514:2;1503:9;1499:18;1480:38;:::i;:::-;1470:48;;1565:2;1554:9;1550:18;1537:32;1527:42;;1247:328;;;;;:::o;1580:666::-;1675:6;1683;1691;1699;1752:3;1740:9;1731:7;1727:23;1723:33;1720:53;;;1769:1;1766;1759:12;1720:53;1792:29;1811:9;1792:29;:::i;:::-;1782:39;;1840:38;1874:2;1863:9;1859:18;1840:38;:::i;:::-;1830:48;;1925:2;1914:9;1910:18;1897:32;1887:42;;1980:2;1969:9;1965:18;1952:32;2007:18;1999:6;1996:30;1993:50;;;2039:1;2036;2029:12;1993:50;2062:22;;2115:4;2107:13;;2103:27;-1:-1:-1;2093:55:1;;2144:1;2141;2134:12;2093:55;2167:73;2232:7;2227:2;2214:16;2209:2;2205;2201:11;2167:73;:::i;:::-;2157:83;;;1580:666;;;;;;;:::o;2251:254::-;2316:6;2324;2377:2;2365:9;2356:7;2352:23;2348:32;2345:52;;;2393:1;2390;2383:12;2345:52;2416:29;2435:9;2416:29;:::i;:::-;2406:39;;2464:35;2495:2;2484:9;2480:18;2464:35;:::i;2510:254::-;2578:6;2586;2639:2;2627:9;2618:7;2614:23;2610:32;2607:52;;;2655:1;2652;2645:12;2607:52;2678:29;2697:9;2678:29;:::i;:::-;2668:39;2754:2;2739:18;;;;2726:32;;-1:-1:-1;;;2510:254:1:o;2769:366::-;2836:6;2844;2897:2;2885:9;2876:7;2872:23;2868:32;2865:52;;;2913:1;2910;2903:12;2865:52;2936:29;2955:9;2936:29;:::i;:::-;2926:39;;3015:2;3004:9;3000:18;2987:32;3059:26;3052:5;3048:38;3041:5;3038:49;3028:77;;3101:1;3098;3091:12;3028:77;3124:5;3114:15;;;2769:366;;;;;:::o;3140:963::-;3224:6;3255:2;3298;3286:9;3277:7;3273:23;3269:32;3266:52;;;3314:1;3311;3304:12;3266:52;3354:9;3341:23;3383:18;3424:2;3416:6;3413:14;3410:34;;;3440:1;3437;3430:12;3410:34;3478:6;3467:9;3463:22;3453:32;;3523:7;3516:4;3512:2;3508:13;3504:27;3494:55;;3545:1;3542;3535:12;3494:55;3581:2;3568:16;3603:2;3599;3596:10;3593:36;;;3609:18;;:::i;:::-;3655:2;3652:1;3648:10;3638:20;;3678:28;3702:2;3698;3694:11;3678:28;:::i;:::-;3740:15;;;3771:12;;;;3803:11;;;3833;;;3829:20;;3826:33;-1:-1:-1;3823:53:1;;;3872:1;3869;3862:12;3823:53;3894:1;3885:10;;3904:169;3918:2;3915:1;3912:9;3904:169;;;3975:23;3994:3;3975:23;:::i;:::-;3963:36;;3936:1;3929:9;;;;;4019:12;;;;4051;;3904:169;;;-1:-1:-1;4092:5:1;3140:963;-1:-1:-1;;;;;;;;3140:963:1:o;4108:180::-;4164:6;4217:2;4205:9;4196:7;4192:23;4188:32;4185:52;;;4233:1;4230;4223:12;4185:52;4256:26;4272:9;4256:26;:::i;4293:245::-;4351:6;4404:2;4392:9;4383:7;4379:23;4375:32;4372:52;;;4420:1;4417;4410:12;4372:52;4459:9;4446:23;4478:30;4502:5;4478:30;:::i;4543:249::-;4612:6;4665:2;4653:9;4644:7;4640:23;4636:32;4633:52;;;4681:1;4678;4671:12;4633:52;4713:9;4707:16;4732:30;4756:5;4732:30;:::i;4797:450::-;4866:6;4919:2;4907:9;4898:7;4894:23;4890:32;4887:52;;;4935:1;4932;4925:12;4887:52;4975:9;4962:23;5008:18;5000:6;4997:30;4994:50;;;5040:1;5037;5030:12;4994:50;5063:22;;5116:4;5108:13;;5104:27;-1:-1:-1;5094:55:1;;5145:1;5142;5135:12;5094:55;5168:73;5233:7;5228:2;5215:16;5210:2;5206;5202:11;5168:73;:::i;5252:180::-;5311:6;5364:2;5352:9;5343:7;5339:23;5335:32;5332:52;;;5380:1;5377;5370:12;5332:52;-1:-1:-1;5403:23:1;;5252:180;-1:-1:-1;5252:180:1:o;5437:248::-;5505:6;5513;5566:2;5554:9;5545:7;5541:23;5537:32;5534:52;;;5582:1;5579;5572:12;5534:52;-1:-1:-1;;5605:23:1;;;5675:2;5660:18;;;5647:32;;-1:-1:-1;5437:248:1:o;5690:257::-;5731:3;5769:5;5763:12;5796:6;5791:3;5784:19;5812:63;5868:6;5861:4;5856:3;5852:14;5845:4;5838:5;5834:16;5812:63;:::i;:::-;5929:2;5908:15;-1:-1:-1;;5904:29:1;5895:39;;;;5936:4;5891:50;;5690:257;-1:-1:-1;;5690:257:1:o;5952:1584::-;6176:3;6214:6;6208:13;6240:4;6253:51;6297:6;6292:3;6287:2;6279:6;6275:15;6253:51;:::i;:::-;6367:13;;6326:16;;;;6389:55;6367:13;6326:16;6411:15;;;6389:55;:::i;:::-;6533:13;;6466:20;;;6506:1;;6593;6615:18;;;;6668;;;;6695:93;;6773:4;6763:8;6759:19;6747:31;;6695:93;6836:2;6826:8;6823:16;6803:18;6800:40;6797:224;;;-1:-1:-1;;;6870:3:1;6863:90;6976:4;6973:1;6966:15;7006:4;7001:3;6994:17;6797:224;7037:18;7064:110;;;;7188:1;7183:328;;;;7030:481;;7064:110;-1:-1:-1;;7099:24:1;;7085:39;;7144:20;;;;-1:-1:-1;7064:110:1;;7183:328;15783:1;15776:14;;;15820:4;15807:18;;7278:1;7292:169;7306:8;7303:1;7300:15;7292:169;;;7388:14;;7373:13;;;7366:37;7431:16;;;;7323:10;;7292:169;;;7296:3;;7492:8;7485:5;7481:20;7474:27;;7030:481;-1:-1:-1;7527:3:1;;5952:1584;-1:-1:-1;;;;;;;;;;;5952:1584:1:o;7772:511::-;7966:4;-1:-1:-1;;;;;8076:2:1;8068:6;8064:15;8053:9;8046:34;8128:2;8120:6;8116:15;8111:2;8100:9;8096:18;8089:43;;8168:6;8163:2;8152:9;8148:18;8141:34;8211:3;8206:2;8195:9;8191:18;8184:31;8232:45;8272:3;8261:9;8257:19;8249:6;8232:45;:::i;:::-;8224:53;7772:511;-1:-1:-1;;;;;;7772:511:1:o;8782:219::-;8931:2;8920:9;8913:21;8894:4;8951:44;8991:2;8980:9;8976:18;8968:6;8951:44;:::i;15430:275::-;15501:2;15495:9;15566:2;15547:13;;-1:-1:-1;;15543:27:1;15531:40;;15601:18;15586:34;;15622:22;;;15583:62;15580:88;;;15648:18;;:::i;:::-;15684:2;15677:22;15430:275;;-1:-1:-1;15430:275:1:o;15836:128::-;15876:3;15907:1;15903:6;15900:1;15897:13;15894:39;;;15913:18;;:::i;:::-;-1:-1:-1;15949:9:1;;15836:128::o;15969:120::-;16009:1;16035;16025:35;;16040:18;;:::i;:::-;-1:-1:-1;16074:9:1;;15969:120::o;16094:168::-;16134:7;16200:1;16196;16192:6;16188:14;16185:1;16182:21;16177:1;16170:9;16163:17;16159:45;16156:71;;;16207:18;;:::i;:::-;-1:-1:-1;16247:9:1;;16094:168::o;16267:125::-;16307:4;16335:1;16332;16329:8;16326:34;;;16340:18;;:::i;:::-;-1:-1:-1;16377:9:1;;16267:125::o;16397:258::-;16469:1;16479:113;16493:6;16490:1;16487:13;16479:113;;;16569:11;;;16563:18;16550:11;;;16543:39;16515:2;16508:10;16479:113;;;16610:6;16607:1;16604:13;16601:48;;;-1:-1:-1;;16645:1:1;16627:16;;16620:27;16397:258::o;16660:437::-;16739:1;16735:12;;;;16782;;;16803:61;;16857:4;16849:6;16845:17;16835:27;;16803:61;16910:2;16902:6;16899:14;16879:18;16876:38;16873:218;;;-1:-1:-1;;;16944:1:1;16937:88;17048:4;17045:1;17038:15;17076:4;17073:1;17066:15;16873:218;;16660:437;;;:::o;17102:135::-;17141:3;-1:-1:-1;;17162:17:1;;17159:43;;;17182:18;;:::i;:::-;-1:-1:-1;17229:1:1;17218:13;;17102:135::o;17242:112::-;17274:1;17300;17290:35;;17305:18;;:::i;:::-;-1:-1:-1;17339:9:1;;17242:112::o;17359:184::-;-1:-1:-1;;;17408:1:1;17401:88;17508:4;17505:1;17498:15;17532:4;17529:1;17522:15;17548:184;-1:-1:-1;;;17597:1:1;17590:88;17697:4;17694:1;17687:15;17721:4;17718:1;17711:15;17737:184;-1:-1:-1;;;17786:1:1;17779:88;17886:4;17883:1;17876:15;17910:4;17907:1;17900:15;17926:184;-1:-1:-1;;;17975:1:1;17968:88;18075:4;18072:1;18065:15;18099:4;18096:1;18089:15;18115:177;-1:-1:-1;;;;;;18193:5:1;18189:78;18182:5;18179:89;18169:117;;18282:1;18279;18272:12
Swarm Source
ipfs://84ed0e61cfee1d17af718a46c70525aa151c33708d0b19b664979994fa6f98b2
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.