ERC-721
Overview
Max Total Supply
555 DG
Holders
145
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
1 DGLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
DisgustingGentleman
Compiler Version
v0.8.4+commit.c7e474f2
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-04-01 */ // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: erc721a/contracts/ERC721A.sol // Creator: Chiru Labs pragma solidity ^0.8.4; 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: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: contracts/DisgustingGentleman.sol /* BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB######BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB###BBGGGPPPP5PPPGGBBB####BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB#BBPYJ7!~~~^^^^^^^~~~~!!7?J5PGB##BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB BBBBBBBBBBBBBBBBBBBBBBBBBBBBBB#BPY7~~~~~~~~~~!!!!!!!!!!!!!~~~~!?YPB#BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB BBBBBBBBBBBBBBBBBBBBBBBBBBBBBGY7~~~~!!?JJJJJJJ??!!!!!!!!!7???????77YGBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB BBBBBBBBBBBBBBBBBBBBBBB#BGBBY7!~!!!!!?BBBBBBBBBBJ!!!!!!7YBBBBBBBBG7!7JG#BBBBBBBBBBBBBBBBBBBBBBBBBBBB BBBBBBBBBBBBBBBBB#BBB#G7::??!!!!!!!777Y555YYYJJ?7!!!!!!7?JJYY55PPY7777?P#BBBBBBBBBBBBBBBBBBBBBBBBBBB BBBBBBBBBBBBBBBB#5~^7J^.^!???777777!!~~~~~~~~~~~!!!!!!!!~~~~~~!!!!!777775BBBBBBBBBBBBBBBBBBBBBBBBBBB BBBBBBBBBBBBBBBBG~:^!!~7?7~^~!!777!!~~^^^^^^^^~~~!77!!7!~~~~~~~~~~~!!7777YBBBBBBBBBBBBBBBBBBBBBBBBBB BBBBBBBBBBBBBBB#J^~!7~^7~::^:.:!777777?JY5PPPP5YJ???77777!7?J5PGGGPP5YJ?77P#BBBBBBBBBBBBBBBBBBBBBBBB BBBBBBBBBBBBBBBBJ~~~!~~77PGGPJ?PGGBB#&@@@@&&&&&@@&&#G55PGB#&@&&&&&&@@@&&#B#&#BBBBBBBBBBBBBBBBBBBBBBB BBBBBBBBBBBBBBB#Y~~~~~~?5555JYG&@@@@@@&##BBBBBBB##&@@@@@@@&#BBBBBBBB#&@@@@&B#BBBBBBBBBBBBBBBBBBBBBBB BBBBBBBBBBBBBB#P~:::^!77??!^::~JY#@@@#BBBBBBBBBBBB#&@@&@@&BBBBBBBBBBBB&@@@5JBBBBBBBBBBBBBBBBBBBBBBBB BBBBBBBBBBBBB#P^::::^~7!::^:^~??7Y@@@#BBBBBBBBBBBBB&@#P@@#BBBBBBBBBBB#&@@P7?GBBBBBBBBBBBBBBBBBBBBBBB BBBBBBBBBBBBBB!::::^^~77~^^^7J?7775@@&#BBBBBBBBBB#&@&Y7G@&#BBBBBBBBB#&@&57??P#BBBBBBBBBBBBBBBBBBBBBB BBBBBBBBBBBB#5~^^^^^~!?7777??777777YB@@&##BBBB##&@@BJ77?P&@&&#####&@@&GJ7???P#BBBBBBBBBBBBBBBBBBBBBB BBBBBBBBBBBG?^^^^^~~7YYYJ?77777777777YG#@@@@@@@&#GJ777777?5B#&&&&&#B5J7?????P#BBBB###BBBBBBBBBBBBBBB BBBBBBBBBBBB57~^::^~JB5Y?777777777777777?YY55YJ?7!!7777777777????77!77???77?GBBBBBPJJPBBBBBBBBBBBBBB BBBBBBBBBBBB##BGP5JJYB5Y?77777????77!!!!!!!!!!!!!!!!!!!!!!!!!!!!!777???7777JBBBBBG!:.!BBBBBBBBBBBBBB BBBBBBBBBBBBBBBB#####BPJJ?7777777777!!!!~~!!!!!7!7777!7777!77777777777!!!7?PBBBB#P!^:~GBBBBBBBBBBBBB BBBBBBBBBBBBBBBBBBBBBBBYJJ?777!!!777777!!~77777?7777?7?YPGPY?7!7777?77777?YBBBBB#5!~^:?B####BBBBBBBB BBBBBBBBBBBBBBBBBBBBBBBGYJJ?7777777??77!!~!~!!!7!!!!7!!!7JPB#PJ!7??77777?YBBBB##B?~~^:.^!?YPGBBBBBBB BBBBBBBBBBBBBBBBBBBBBBBBGYJJ?777777?????77!!!!!7!!!77!!!!!!7P&&GY?77777?YBBBBBPJJ!!~7~^:. .:!PBBBBB BBBBBBBBBBBBBBBBBBBBBBBBBG5JJ??7777777??J???777!!!!!!!!!77???5#&#P?77?JPBBBB#J.^!!!!77~^^:::::7BBBBB BBBBBBBBBBBBBBBBBBBBBBBBBBBPYJJ??77777777??JJJJJJJ????JJJJJJ?7Y##G5JJPBGPPPGG?~!~~!!77~^::^^^:~BBBBB BBBBBBBBBBBBBBBBBBBBBBBBBBBBBPYJJ???777777777?????????????????7JP55Y5PGPP5555P?~!~~~77~^^:^^^^7BBBBB BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBGPYJJ???????????????????????????J5GP555PGPPP55PP5YY??7^~~~~~~^^Y#BBBB BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBGP5YJJ????????????????JJJYY5GBBBBGPPGGPPPPPPG###BG?^^:::::^?BBBBBB BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBGGPP555555PPPPPGGGBBBB#BBBBBBGGGGPPPPPPBBBBBBGY?7!7?JPBBBBBBB BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB##BBBBB#####BBBBBBBBBBBBBBBBBBBGGGPGBBBBBBBB##BBB###BBBBBBB BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB */ pragma solidity ^0.8.4; interface IFractionalGentleman { function mint(address to) external; } /// @title Disgusting Gentleman /// @notice Controls minting of the Disgusting Gentleman NFT's /// @dev Utilizes Azuki ERC721A standard to reduce gas for minting multiple tokens. contract DisgustingGentleman is Ownable, ERC721A { using Strings for uint256; uint8 public constant MAX_CLUB_CARD_MINTS = 3; uint8 public constant MAX_MINTS_PER_REQUEST = 7; uint256 public constant TOTAL_SUPPLY = 7777; uint256 public constant MINT_FEE = 0.069 ether; uint256 public immutable devMintAmount; IERC721 public DGCC; IFractionalGentleman public FG; string public baseUri; string public PROVENANCE; bool public publicMintStarted; bool public whitelistMintStarted; /// @notice Tracks the number of uses a DGCC NFT has for DGCC whitelist minting. mapping(uint256 => uint8) DGCCRegister; constructor( address _DGCCAddress, address _FGAddress, uint256 _devMintAmount ) ERC721A("DisgustingGentleman", "DG") { devMintAmount = _devMintAmount; DGCC = IERC721(_DGCCAddress); FG = IFractionalGentleman(_FGAddress); } /// @notice Ensures that enough ether was paid for a mint to occur and that minting does not exceed the total supply modifier canMint(uint256 _quantity) { uint256 totalFee = MINT_FEE * _quantity; require( totalSupply() + _quantity <= TOTAL_SUPPLY, "You cannot mint more than the total supply!" ); require(tx.origin == msg.sender, "The caller is another contract"); require(msg.value >= totalFee, "not enough ether was given"); _; } /// @notice Minting of the DG NFT for those wanting to be disgusting. /// @dev restricts the number of mints that can be made per transaction. /// @param _quantity the amount of DG's to bulk mint. function publicMint(uint256 _quantity) external payable canMint(_quantity) { require(publicMintStarted, "public mint has not started"); require( _quantity <= MAX_MINTS_PER_REQUEST, "You cannot mint this many DG's in one request!" ); _mint(msg.sender, _quantity, "", false); if (_quantity == MAX_MINTS_PER_REQUEST) { FG.mint(msg.sender); } } /// @notice Mints DG NFT using the DGCC NFT as a whitelist. (you're real disgusting if you can mint from here) /// @param _DGCCId the DGCC NFT id that is being used to whitelist mint. /// @param _quantity the number of DG's to mint. function whitelistMint(uint256 _DGCCId, uint8 _quantity) external payable canMint(_quantity) { require(whitelistMintStarted, "whitelist mint has not started"); require( DGCC.ownerOf(_DGCCId) == msg.sender, "You do not own this DGCC" ); uint8 _registered = DGCCRegister[_DGCCId]; require( _registered + _quantity <= MAX_CLUB_CARD_MINTS, "You do not have enough mints left on this DGCC" ); DGCCRegister[_DGCCId] = _registered + _quantity; _mint(msg.sender, _quantity, "", false); if (_quantity == MAX_CLUB_CARD_MINTS) { FG.mint(msg.sender); } } function numOfMintsLeftOnDGCC(uint256 _dgccId) external view returns (uint8) { return MAX_CLUB_CARD_MINTS - DGCCRegister[_dgccId]; } function devMint() external onlyOwner { require( totalSupply() + devMintAmount <= TOTAL_SUPPLY, "You cannot mint more than the total supply!" ); _mint(msg.sender, devMintAmount, "", false); } function withdraw() external onlyOwner { (bool os, ) = payable(owner()).call{value: address(this).balance}(""); require(os); } function _baseURI() internal view override returns (string memory) { return baseUri; } function setBaseURI(string memory _baseUri) external onlyOwner { baseUri = _baseUri; } function setProvenance(string memory _provenance) public onlyOwner { PROVENANCE = _provenance; } function setPublicMintStarted(bool _publicMintStarted) external onlyOwner { publicMintStarted = _publicMintStarted; } function setWhitelistMintStarted(bool _whitelistMintStarted) external onlyOwner { whitelistMintStarted = _whitelistMintStarted; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_DGCCAddress","type":"address"},{"internalType":"address","name":"_FGAddress","type":"address"},{"internalType":"uint256","name":"_devMintAmount","type":"uint256"}],"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"},{"inputs":[],"name":"URIQueryForNonexistentToken","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":[],"name":"DGCC","outputs":[{"internalType":"contract IERC721","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"FG","outputs":[{"internalType":"contract IFractionalGentleman","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_CLUB_CARD_MINTS","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_MINTS_PER_REQUEST","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MINT_FEE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PROVENANCE","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TOTAL_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devMintAmount","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":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_dgccId","type":"uint256"}],"name":"numOfMintsLeftOnDGCC","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_quantity","type":"uint256"}],"name":"publicMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"publicMintStarted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_baseUri","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_provenance","type":"string"}],"name":"setProvenance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_publicMintStarted","type":"bool"}],"name":"setPublicMintStarted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_whitelistMintStarted","type":"bool"}],"name":"setWhitelistMintStarted","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":[{"internalType":"uint256","name":"_DGCCId","type":"uint256"},{"internalType":"uint8","name":"_quantity","type":"uint8"}],"name":"whitelistMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"whitelistMintStarted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60a06040523480156200001157600080fd5b50604051620024fb380380620024fb83398101604081905262000034916200021e565b6040518060400160405280601381526020017f44697367757374696e6747656e746c656d616e0000000000000000000000000081525060405180604001604052806002815260200161444760f01b8152506200009f620000996200010760201b60201c565b6200010b565b8151620000b49060039060208501906200015b565b508051620000ca9060049060208401906200015b565b5060006001555050608052600980546001600160a01b039384166001600160a01b031991821617909155600a80549290931691161790556200029b565b3390565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b82805462000169906200025e565b90600052602060002090601f0160209004810192826200018d5760008555620001d8565b82601f10620001a857805160ff1916838001178555620001d8565b82800160010185558215620001d8579182015b82811115620001d8578251825591602001919060010190620001bb565b50620001e6929150620001ea565b5090565b5b80821115620001e65760008155600101620001eb565b80516001600160a01b03811681146200021957600080fd5b919050565b60008060006060848603121562000233578283fd5b6200023e8462000201565b92506200024e6020850162000201565b9150604084015190509250925092565b600181811c908216806200027357607f821691505b602082108114156200029557634e487b7160e01b600052602260045260246000fd5b50919050565b608051612236620002c5600039600081816105f70152818161108501526110df01526122366000f3fe6080604052600436106102195760003560e01c806370a0823111610123578063b88d4fde116100ab578063e07dcd141161006f578063e07dcd14146105e5578063e985e9c514610619578063ec68844c14610662578063f2fde38b14610677578063ffe630b51461069757600080fd5b8063b88d4fde1461054a578063bb866a591461056a578063c0e37e061461058a578063c87b56dd146105aa578063d7bf81a3146105ca57600080fd5b80638da5cb5b116100f25780638da5cb5b146104cc578063902d55a5146104ea57806395d89b41146105005780639abc832014610515578063a22cb4651461052a57600080fd5b806370a0823114610462578063715018a614610482578063759a6c27146104975780637c69e207146104b757600080fd5b806321494de3116101a657806342842e0e1161017557806342842e0e146103cd57806355f804b3146103ed5780635f771eee1461040d5780636352211e1461042d5780636373a6b11461044d57600080fd5b806321494de31461037257806323b872dd146103855780632db11544146103a55780633ccfd60b146103b857600080fd5b8063081812fc116101ed578063081812fc146102b6578063095ea7b3146102ee5780631266375f1461031057806318160ddd146103305780631cfddb1f1461035357600080fd5b806217cf2e1461021e57806301ffc9a71461024a578063035240051461027a57806306fdde0314610294575b600080fd5b34801561022a57600080fd5b50610233600381565b60405160ff90911681526020015b60405180910390f35b34801561025657600080fd5b5061026a610265366004611e69565b6106b7565b6040519015158152602001610241565b34801561028657600080fd5b50600d5461026a9060ff1681565b3480156102a057600080fd5b506102a9610709565b6040516102419190611fc0565b3480156102c257600080fd5b506102d66102d1366004611ee7565b61079b565b6040516001600160a01b039091168152602001610241565b3480156102fa57600080fd5b5061030e610309366004611e24565b6107df565b005b34801561031c57600080fd5b5061030e61032b366004611e4f565b61086d565b34801561033c57600080fd5b50600254600154035b604051908152602001610241565b34801561035f57600080fd5b50600d5461026a90610100900460ff1681565b61030e610380366004611eff565b6108ba565b34801561039157600080fd5b5061030e6103a0366004611d33565b610c0e565b61030e6103b3366004611ee7565b610c19565b3480156103c457600080fd5b5061030e610e48565b3480156103d957600080fd5b5061030e6103e8366004611d33565b610ed5565b3480156103f957600080fd5b5061030e610408366004611ea1565b610ef0565b34801561041957600080fd5b506009546102d6906001600160a01b031681565b34801561043957600080fd5b506102d6610448366004611ee7565b610f31565b34801561045957600080fd5b506102a9610f43565b34801561046e57600080fd5b5061034561047d366004611cc3565b610fd1565b34801561048e57600080fd5b5061030e611020565b3480156104a357600080fd5b50600a546102d6906001600160a01b031681565b3480156104c357600080fd5b5061030e611056565b3480156104d857600080fd5b506000546001600160a01b03166102d6565b3480156104f657600080fd5b50610345611e6181565b34801561050c57600080fd5b506102a9611115565b34801561052157600080fd5b506102a9611124565b34801561053657600080fd5b5061030e610545366004611df0565b611131565b34801561055657600080fd5b5061030e610565366004611d73565b6111c7565b34801561057657600080fd5b5061030e610585366004611e4f565b611218565b34801561059657600080fd5b506102336105a5366004611ee7565b611255565b3480156105b657600080fd5b506102a96105c5366004611ee7565b611272565b3480156105d657600080fd5b5061034566f523226980800081565b3480156105f157600080fd5b506103457f000000000000000000000000000000000000000000000000000000000000000081565b34801561062557600080fd5b5061026a610634366004611cfb565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205460ff1690565b34801561066e57600080fd5b50610233600781565b34801561068357600080fd5b5061030e610692366004611cc3565b6112f7565b3480156106a357600080fd5b5061030e6106b2366004611ea1565b61138f565b60006001600160e01b031982166380ac58cd60e01b14806106e857506001600160e01b03198216635b5e139f60e01b145b8061070357506301ffc9a760e01b6001600160e01b03198316145b92915050565b60606003805461071890612129565b80601f016020809104026020016040519081016040528092919081815260200182805461074490612129565b80156107915780601f1061076657610100808354040283529160200191610791565b820191906000526020600020905b81548152906001019060200180831161077457829003601f168201915b5050505050905090565b60006107a6826113cc565b6107c3576040516333d1c03960e21b815260040160405180910390fd5b506000908152600760205260409020546001600160a01b031690565b60006107ea82610f31565b9050806001600160a01b0316836001600160a01b0316141561081f5760405163250fdee360e21b815260040160405180910390fd5b336001600160a01b0382161480159061083f575061083d8133610634565b155b1561085d576040516367d9dca160e11b815260040160405180910390fd5b6108688383836113f8565b505050565b6000546001600160a01b031633146108a05760405162461bcd60e51b81526004016108979061201e565b60405180910390fd5b600d80549115156101000261ff0019909216919091179055565b60ff811660006108d18266f52322698080006120a4565b9050611e61826108e46002546001540390565b6108ee9190612053565b111561090c5760405162461bcd60e51b815260040161089790611fd3565b32331461095b5760405162461bcd60e51b815260206004820152601e60248201527f5468652063616c6c657220697320616e6f7468657220636f6e747261637400006044820152606401610897565b803410156109ab5760405162461bcd60e51b815260206004820152601a60248201527f6e6f7420656e6f7567682065746865722077617320676976656e0000000000006044820152606401610897565b600d54610100900460ff16610a025760405162461bcd60e51b815260206004820152601e60248201527f77686974656c697374206d696e7420686173206e6f74207374617274656400006044820152606401610897565b6009546040516331a9108f60e11b81526004810186905233916001600160a01b031690636352211e9060240160206040518083038186803b158015610a4657600080fd5b505afa158015610a5a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a7e9190611cdf565b6001600160a01b031614610ad45760405162461bcd60e51b815260206004820152601860248201527f596f7520646f206e6f74206f776e2074686973204447434300000000000000006044820152606401610897565b6000848152600e602052604090205460ff166003610af2858361206b565b60ff161115610b5a5760405162461bcd60e51b815260206004820152602e60248201527f596f7520646f206e6f74206861766520656e6f756768206d696e7473206c656660448201526d74206f6e2074686973204447434360901b6064820152608401610897565b610b64848261206b565b6000868152600e60209081526040808320805460ff191660ff95861617905580519182019052818152610b9d9233929088169190611454565b60ff841660031415610c0757600a546040516335313c2160e11b81523360048201526001600160a01b0390911690636a62784290602401600060405180830381600087803b158015610bee57600080fd5b505af1158015610c02573d6000803e3d6000fd5b505050505b5050505050565b610868838383611625565b806000610c2d8266f52322698080006120a4565b9050611e6182610c406002546001540390565b610c4a9190612053565b1115610c685760405162461bcd60e51b815260040161089790611fd3565b323314610cb75760405162461bcd60e51b815260206004820152601e60248201527f5468652063616c6c657220697320616e6f7468657220636f6e747261637400006044820152606401610897565b80341015610d075760405162461bcd60e51b815260206004820152601a60248201527f6e6f7420656e6f7567682065746865722077617320676976656e0000000000006044820152606401610897565b600d5460ff16610d595760405162461bcd60e51b815260206004820152601b60248201527f7075626c6963206d696e7420686173206e6f74207374617274656400000000006044820152606401610897565b6007831115610dc15760405162461bcd60e51b815260206004820152602e60248201527f596f752063616e6e6f74206d696e742074686973206d616e792044472773206960448201526d6e206f6e6520726571756573742160901b6064820152608401610897565b610ddd3384604051806020016040528060008152506000611454565b600783141561086857600a546040516335313c2160e11b81523360048201526001600160a01b0390911690636a62784290602401600060405180830381600087803b158015610e2b57600080fd5b505af1158015610e3f573d6000803e3d6000fd5b50505050505050565b6000546001600160a01b03163314610e725760405162461bcd60e51b81526004016108979061201e565b600080546040516001600160a01b039091169047908381818185875af1925050503d8060008114610ebf576040519150601f19603f3d011682016040523d82523d6000602084013e610ec4565b606091505b5050905080610ed257600080fd5b50565b610868838383604051806020016040528060008152506111c7565b6000546001600160a01b03163314610f1a5760405162461bcd60e51b81526004016108979061201e565b8051610f2d90600b906020840190611b9f565b5050565b6000610f3c82611812565b5192915050565b600c8054610f5090612129565b80601f0160208091040260200160405190810160405280929190818152602001828054610f7c90612129565b8015610fc95780601f10610f9e57610100808354040283529160200191610fc9565b820191906000526020600020905b815481529060010190602001808311610fac57829003601f168201915b505050505081565b60006001600160a01b038216610ffa576040516323d3ad8160e21b815260040160405180910390fd5b506001600160a01b031660009081526006602052604090205467ffffffffffffffff1690565b6000546001600160a01b0316331461104a5760405162461bcd60e51b81526004016108979061201e565b611054600061192e565b565b6000546001600160a01b031633146110805760405162461bcd60e51b81526004016108979061201e565b611e617f00000000000000000000000000000000000000000000000000000000000000006110b16002546001540390565b6110bb9190612053565b11156110d95760405162461bcd60e51b815260040161089790611fd3565b611054337f0000000000000000000000000000000000000000000000000000000000000000604051806020016040528060008152506000611454565b60606004805461071890612129565b600b8054610f5090612129565b6001600160a01b03821633141561115b5760405163b06307db60e01b815260040160405180910390fd5b3360008181526008602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6111d2848484611625565b6001600160a01b0383163b151580156111f457506111f28484848461197e565b155b15611212576040516368d2bf6b60e11b815260040160405180910390fd5b50505050565b6000546001600160a01b031633146112425760405162461bcd60e51b81526004016108979061201e565b600d805460ff1916911515919091179055565b6000818152600e60205260408120546107039060ff1660036120da565b606061127d826113cc565b61129a57604051630a14c4b560e41b815260040160405180910390fd5b60006112a4611a76565b90508051600014156112c557604051806020016040528060008152506112f0565b806112cf84611a85565b6040516020016112e0929190611f54565b6040516020818303038152906040525b9392505050565b6000546001600160a01b031633146113215760405162461bcd60e51b81526004016108979061201e565b6001600160a01b0381166113865760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610897565b610ed28161192e565b6000546001600160a01b031633146113b95760405162461bcd60e51b81526004016108979061201e565b8051610f2d90600c906020840190611b9f565b600060015482108015610703575050600090815260056020526040902054600160e01b900460ff161590565b60008281526007602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b6001546001600160a01b03851661147d57604051622e076360e81b815260040160405180910390fd5b8361149b5760405163b562e8dd60e01b815260040160405180910390fd5b6001600160a01b038516600081815260066020908152604080832080546fffffffffffffffffffffffffffffffff19811667ffffffffffffffff8083168c0181169182176801000000000000000067ffffffffffffffff1990941690921783900481168c01811690920217909155858452600590925290912080546001600160e01b031916909217600160a01b42909216919091021790558080850183801561154d57506001600160a01b0387163b15155b156115d6575b60405182906001600160a01b038916906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a461159e600088848060010195508861197e565b6115bb576040516368d2bf6b60e11b815260040160405180910390fd5b808214156115535782600154146115d157600080fd5b61161c565b5b6040516001830192906001600160a01b038916906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4808214156115d7575b50600155610c07565b600061163082611812565b9050836001600160a01b031681600001516001600160a01b0316146116675760405162a1148160e81b815260040160405180910390fd5b6000336001600160a01b038616148061168557506116858533610634565b806116a05750336116958461079b565b6001600160a01b0316145b9050806116c057604051632ce44b5f60e11b815260040160405180910390fd5b6001600160a01b0384166116e757604051633a954ecd60e21b815260040160405180910390fd5b6116f3600084876113f8565b6001600160a01b038581166000908152600660209081526040808320805467ffffffffffffffff1980821667ffffffffffffffff92831660001901831617909255898616808652838620805493841693831660019081018416949094179055898652600590945282852080546001600160e01b031916909417600160a01b429092169190910217835587018084529220805491939091166117c95760015482146117c9578054602086015167ffffffffffffffff16600160a01b026001600160e01b03199091166001600160a01b038a16171781555b50505082846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4610c07565b60408051606081018252600080825260208201819052918101919091528160015481101561191557600081815260056020908152604091829020825160608101845290546001600160a01b0381168252600160a01b810467ffffffffffffffff1692820192909252600160e01b90910460ff161515918101829052906119135780516001600160a01b0316156118a9579392505050565b5060001901600081815260056020908152604091829020825160608101845290546001600160a01b038116808352600160a01b820467ffffffffffffffff1693830193909352600160e01b900460ff161515928101929092521561190e579392505050565b6118a9565b505b604051636f96cda160e11b815260040160405180910390fd5b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b604051630a85bd0160e11b81526000906001600160a01b0385169063150b7a02906119b3903390899088908890600401611f83565b602060405180830381600087803b1580156119cd57600080fd5b505af19250505080156119fd575060408051601f3d908101601f191682019092526119fa91810190611e85565b60015b611a58573d808015611a2b576040519150601f19603f3d011682016040523d82523d6000602084013e611a30565b606091505b508051611a50576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490505b949350505050565b6060600b805461071890612129565b606081611aa95750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611ad35780611abd81612164565b9150611acc9050600a83612090565b9150611aad565b60008167ffffffffffffffff811115611afc57634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611b26576020820181803683370190505b5090505b8415611a6e57611b3b6001836120c3565b9150611b48600a8661217f565b611b53906030612053565b60f81b818381518110611b7657634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350611b98600a86612090565b9450611b2a565b828054611bab90612129565b90600052602060002090601f016020900481019282611bcd5760008555611c13565b82601f10611be657805160ff1916838001178555611c13565b82800160010185558215611c13579182015b82811115611c13578251825591602001919060010190611bf8565b50611c1f929150611c23565b5090565b5b80821115611c1f5760008155600101611c24565b600067ffffffffffffffff80841115611c5357611c536121bf565b604051601f8501601f19908116603f01168101908282118183101715611c7b57611c7b6121bf565b81604052809350858152868686011115611c9457600080fd5b858560208301376000602087830101525050509392505050565b80358015158114611cbe57600080fd5b919050565b600060208284031215611cd4578081fd5b81356112f0816121d5565b600060208284031215611cf0578081fd5b81516112f0816121d5565b60008060408385031215611d0d578081fd5b8235611d18816121d5565b91506020830135611d28816121d5565b809150509250929050565b600080600060608486031215611d47578081fd5b8335611d52816121d5565b92506020840135611d62816121d5565b929592945050506040919091013590565b60008060008060808587031215611d88578081fd5b8435611d93816121d5565b93506020850135611da3816121d5565b925060408501359150606085013567ffffffffffffffff811115611dc5578182fd5b8501601f81018713611dd5578182fd5b611de487823560208401611c38565b91505092959194509250565b60008060408385031215611e02578182fd5b8235611e0d816121d5565b9150611e1b60208401611cae565b90509250929050565b60008060408385031215611e36578182fd5b8235611e41816121d5565b946020939093013593505050565b600060208284031215611e60578081fd5b6112f082611cae565b600060208284031215611e7a578081fd5b81356112f0816121ea565b600060208284031215611e96578081fd5b81516112f0816121ea565b600060208284031215611eb2578081fd5b813567ffffffffffffffff811115611ec8578182fd5b8201601f81018413611ed8578182fd5b611a6e84823560208401611c38565b600060208284031215611ef8578081fd5b5035919050565b60008060408385031215611f11578182fd5b82359150602083013560ff81168114611d28578182fd5b60008151808452611f408160208601602086016120fd565b601f01601f19169290920160200192915050565b60008351611f668184602088016120fd565b835190830190611f7a8183602088016120fd565b01949350505050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090611fb690830184611f28565b9695505050505050565b6020815260006112f06020830184611f28565b6020808252602b908201527f596f752063616e6e6f74206d696e74206d6f7265207468616e2074686520746f60408201526a74616c20737570706c792160a81b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6000821982111561206657612066612193565b500190565b600060ff821660ff84168060ff0382111561208857612088612193565b019392505050565b60008261209f5761209f6121a9565b500490565b60008160001904831182151516156120be576120be612193565b500290565b6000828210156120d5576120d5612193565b500390565b600060ff821660ff8416808210156120f4576120f4612193565b90039392505050565b60005b83811015612118578181015183820152602001612100565b838111156112125750506000910152565b600181811c9082168061213d57607f821691505b6020821081141561215e57634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561217857612178612193565b5060010190565b60008261218e5761218e6121a9565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114610ed257600080fd5b6001600160e01b031981168114610ed257600080fdfea26469706673582212206eba2c8f7ff5c15aa5ce923dc54a93f6d05268f414b0d749b3e9396e9fc4931664736f6c634300080400330000000000000000000000007efa8b4c1d67c00bf570fb9c06a8a47f85d1a321000000000000000000000000e6a95f68ac155270922354474b3eded6bb3030310000000000000000000000000000000000000000000000000000000000000064
Deployed Bytecode
0x6080604052600436106102195760003560e01c806370a0823111610123578063b88d4fde116100ab578063e07dcd141161006f578063e07dcd14146105e5578063e985e9c514610619578063ec68844c14610662578063f2fde38b14610677578063ffe630b51461069757600080fd5b8063b88d4fde1461054a578063bb866a591461056a578063c0e37e061461058a578063c87b56dd146105aa578063d7bf81a3146105ca57600080fd5b80638da5cb5b116100f25780638da5cb5b146104cc578063902d55a5146104ea57806395d89b41146105005780639abc832014610515578063a22cb4651461052a57600080fd5b806370a0823114610462578063715018a614610482578063759a6c27146104975780637c69e207146104b757600080fd5b806321494de3116101a657806342842e0e1161017557806342842e0e146103cd57806355f804b3146103ed5780635f771eee1461040d5780636352211e1461042d5780636373a6b11461044d57600080fd5b806321494de31461037257806323b872dd146103855780632db11544146103a55780633ccfd60b146103b857600080fd5b8063081812fc116101ed578063081812fc146102b6578063095ea7b3146102ee5780631266375f1461031057806318160ddd146103305780631cfddb1f1461035357600080fd5b806217cf2e1461021e57806301ffc9a71461024a578063035240051461027a57806306fdde0314610294575b600080fd5b34801561022a57600080fd5b50610233600381565b60405160ff90911681526020015b60405180910390f35b34801561025657600080fd5b5061026a610265366004611e69565b6106b7565b6040519015158152602001610241565b34801561028657600080fd5b50600d5461026a9060ff1681565b3480156102a057600080fd5b506102a9610709565b6040516102419190611fc0565b3480156102c257600080fd5b506102d66102d1366004611ee7565b61079b565b6040516001600160a01b039091168152602001610241565b3480156102fa57600080fd5b5061030e610309366004611e24565b6107df565b005b34801561031c57600080fd5b5061030e61032b366004611e4f565b61086d565b34801561033c57600080fd5b50600254600154035b604051908152602001610241565b34801561035f57600080fd5b50600d5461026a90610100900460ff1681565b61030e610380366004611eff565b6108ba565b34801561039157600080fd5b5061030e6103a0366004611d33565b610c0e565b61030e6103b3366004611ee7565b610c19565b3480156103c457600080fd5b5061030e610e48565b3480156103d957600080fd5b5061030e6103e8366004611d33565b610ed5565b3480156103f957600080fd5b5061030e610408366004611ea1565b610ef0565b34801561041957600080fd5b506009546102d6906001600160a01b031681565b34801561043957600080fd5b506102d6610448366004611ee7565b610f31565b34801561045957600080fd5b506102a9610f43565b34801561046e57600080fd5b5061034561047d366004611cc3565b610fd1565b34801561048e57600080fd5b5061030e611020565b3480156104a357600080fd5b50600a546102d6906001600160a01b031681565b3480156104c357600080fd5b5061030e611056565b3480156104d857600080fd5b506000546001600160a01b03166102d6565b3480156104f657600080fd5b50610345611e6181565b34801561050c57600080fd5b506102a9611115565b34801561052157600080fd5b506102a9611124565b34801561053657600080fd5b5061030e610545366004611df0565b611131565b34801561055657600080fd5b5061030e610565366004611d73565b6111c7565b34801561057657600080fd5b5061030e610585366004611e4f565b611218565b34801561059657600080fd5b506102336105a5366004611ee7565b611255565b3480156105b657600080fd5b506102a96105c5366004611ee7565b611272565b3480156105d657600080fd5b5061034566f523226980800081565b3480156105f157600080fd5b506103457f000000000000000000000000000000000000000000000000000000000000006481565b34801561062557600080fd5b5061026a610634366004611cfb565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205460ff1690565b34801561066e57600080fd5b50610233600781565b34801561068357600080fd5b5061030e610692366004611cc3565b6112f7565b3480156106a357600080fd5b5061030e6106b2366004611ea1565b61138f565b60006001600160e01b031982166380ac58cd60e01b14806106e857506001600160e01b03198216635b5e139f60e01b145b8061070357506301ffc9a760e01b6001600160e01b03198316145b92915050565b60606003805461071890612129565b80601f016020809104026020016040519081016040528092919081815260200182805461074490612129565b80156107915780601f1061076657610100808354040283529160200191610791565b820191906000526020600020905b81548152906001019060200180831161077457829003601f168201915b5050505050905090565b60006107a6826113cc565b6107c3576040516333d1c03960e21b815260040160405180910390fd5b506000908152600760205260409020546001600160a01b031690565b60006107ea82610f31565b9050806001600160a01b0316836001600160a01b0316141561081f5760405163250fdee360e21b815260040160405180910390fd5b336001600160a01b0382161480159061083f575061083d8133610634565b155b1561085d576040516367d9dca160e11b815260040160405180910390fd5b6108688383836113f8565b505050565b6000546001600160a01b031633146108a05760405162461bcd60e51b81526004016108979061201e565b60405180910390fd5b600d80549115156101000261ff0019909216919091179055565b60ff811660006108d18266f52322698080006120a4565b9050611e61826108e46002546001540390565b6108ee9190612053565b111561090c5760405162461bcd60e51b815260040161089790611fd3565b32331461095b5760405162461bcd60e51b815260206004820152601e60248201527f5468652063616c6c657220697320616e6f7468657220636f6e747261637400006044820152606401610897565b803410156109ab5760405162461bcd60e51b815260206004820152601a60248201527f6e6f7420656e6f7567682065746865722077617320676976656e0000000000006044820152606401610897565b600d54610100900460ff16610a025760405162461bcd60e51b815260206004820152601e60248201527f77686974656c697374206d696e7420686173206e6f74207374617274656400006044820152606401610897565b6009546040516331a9108f60e11b81526004810186905233916001600160a01b031690636352211e9060240160206040518083038186803b158015610a4657600080fd5b505afa158015610a5a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a7e9190611cdf565b6001600160a01b031614610ad45760405162461bcd60e51b815260206004820152601860248201527f596f7520646f206e6f74206f776e2074686973204447434300000000000000006044820152606401610897565b6000848152600e602052604090205460ff166003610af2858361206b565b60ff161115610b5a5760405162461bcd60e51b815260206004820152602e60248201527f596f7520646f206e6f74206861766520656e6f756768206d696e7473206c656660448201526d74206f6e2074686973204447434360901b6064820152608401610897565b610b64848261206b565b6000868152600e60209081526040808320805460ff191660ff95861617905580519182019052818152610b9d9233929088169190611454565b60ff841660031415610c0757600a546040516335313c2160e11b81523360048201526001600160a01b0390911690636a62784290602401600060405180830381600087803b158015610bee57600080fd5b505af1158015610c02573d6000803e3d6000fd5b505050505b5050505050565b610868838383611625565b806000610c2d8266f52322698080006120a4565b9050611e6182610c406002546001540390565b610c4a9190612053565b1115610c685760405162461bcd60e51b815260040161089790611fd3565b323314610cb75760405162461bcd60e51b815260206004820152601e60248201527f5468652063616c6c657220697320616e6f7468657220636f6e747261637400006044820152606401610897565b80341015610d075760405162461bcd60e51b815260206004820152601a60248201527f6e6f7420656e6f7567682065746865722077617320676976656e0000000000006044820152606401610897565b600d5460ff16610d595760405162461bcd60e51b815260206004820152601b60248201527f7075626c6963206d696e7420686173206e6f74207374617274656400000000006044820152606401610897565b6007831115610dc15760405162461bcd60e51b815260206004820152602e60248201527f596f752063616e6e6f74206d696e742074686973206d616e792044472773206960448201526d6e206f6e6520726571756573742160901b6064820152608401610897565b610ddd3384604051806020016040528060008152506000611454565b600783141561086857600a546040516335313c2160e11b81523360048201526001600160a01b0390911690636a62784290602401600060405180830381600087803b158015610e2b57600080fd5b505af1158015610e3f573d6000803e3d6000fd5b50505050505050565b6000546001600160a01b03163314610e725760405162461bcd60e51b81526004016108979061201e565b600080546040516001600160a01b039091169047908381818185875af1925050503d8060008114610ebf576040519150601f19603f3d011682016040523d82523d6000602084013e610ec4565b606091505b5050905080610ed257600080fd5b50565b610868838383604051806020016040528060008152506111c7565b6000546001600160a01b03163314610f1a5760405162461bcd60e51b81526004016108979061201e565b8051610f2d90600b906020840190611b9f565b5050565b6000610f3c82611812565b5192915050565b600c8054610f5090612129565b80601f0160208091040260200160405190810160405280929190818152602001828054610f7c90612129565b8015610fc95780601f10610f9e57610100808354040283529160200191610fc9565b820191906000526020600020905b815481529060010190602001808311610fac57829003601f168201915b505050505081565b60006001600160a01b038216610ffa576040516323d3ad8160e21b815260040160405180910390fd5b506001600160a01b031660009081526006602052604090205467ffffffffffffffff1690565b6000546001600160a01b0316331461104a5760405162461bcd60e51b81526004016108979061201e565b611054600061192e565b565b6000546001600160a01b031633146110805760405162461bcd60e51b81526004016108979061201e565b611e617f00000000000000000000000000000000000000000000000000000000000000646110b16002546001540390565b6110bb9190612053565b11156110d95760405162461bcd60e51b815260040161089790611fd3565b611054337f0000000000000000000000000000000000000000000000000000000000000064604051806020016040528060008152506000611454565b60606004805461071890612129565b600b8054610f5090612129565b6001600160a01b03821633141561115b5760405163b06307db60e01b815260040160405180910390fd5b3360008181526008602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6111d2848484611625565b6001600160a01b0383163b151580156111f457506111f28484848461197e565b155b15611212576040516368d2bf6b60e11b815260040160405180910390fd5b50505050565b6000546001600160a01b031633146112425760405162461bcd60e51b81526004016108979061201e565b600d805460ff1916911515919091179055565b6000818152600e60205260408120546107039060ff1660036120da565b606061127d826113cc565b61129a57604051630a14c4b560e41b815260040160405180910390fd5b60006112a4611a76565b90508051600014156112c557604051806020016040528060008152506112f0565b806112cf84611a85565b6040516020016112e0929190611f54565b6040516020818303038152906040525b9392505050565b6000546001600160a01b031633146113215760405162461bcd60e51b81526004016108979061201e565b6001600160a01b0381166113865760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610897565b610ed28161192e565b6000546001600160a01b031633146113b95760405162461bcd60e51b81526004016108979061201e565b8051610f2d90600c906020840190611b9f565b600060015482108015610703575050600090815260056020526040902054600160e01b900460ff161590565b60008281526007602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b6001546001600160a01b03851661147d57604051622e076360e81b815260040160405180910390fd5b8361149b5760405163b562e8dd60e01b815260040160405180910390fd5b6001600160a01b038516600081815260066020908152604080832080546fffffffffffffffffffffffffffffffff19811667ffffffffffffffff8083168c0181169182176801000000000000000067ffffffffffffffff1990941690921783900481168c01811690920217909155858452600590925290912080546001600160e01b031916909217600160a01b42909216919091021790558080850183801561154d57506001600160a01b0387163b15155b156115d6575b60405182906001600160a01b038916906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a461159e600088848060010195508861197e565b6115bb576040516368d2bf6b60e11b815260040160405180910390fd5b808214156115535782600154146115d157600080fd5b61161c565b5b6040516001830192906001600160a01b038916906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4808214156115d7575b50600155610c07565b600061163082611812565b9050836001600160a01b031681600001516001600160a01b0316146116675760405162a1148160e81b815260040160405180910390fd5b6000336001600160a01b038616148061168557506116858533610634565b806116a05750336116958461079b565b6001600160a01b0316145b9050806116c057604051632ce44b5f60e11b815260040160405180910390fd5b6001600160a01b0384166116e757604051633a954ecd60e21b815260040160405180910390fd5b6116f3600084876113f8565b6001600160a01b038581166000908152600660209081526040808320805467ffffffffffffffff1980821667ffffffffffffffff92831660001901831617909255898616808652838620805493841693831660019081018416949094179055898652600590945282852080546001600160e01b031916909417600160a01b429092169190910217835587018084529220805491939091166117c95760015482146117c9578054602086015167ffffffffffffffff16600160a01b026001600160e01b03199091166001600160a01b038a16171781555b50505082846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4610c07565b60408051606081018252600080825260208201819052918101919091528160015481101561191557600081815260056020908152604091829020825160608101845290546001600160a01b0381168252600160a01b810467ffffffffffffffff1692820192909252600160e01b90910460ff161515918101829052906119135780516001600160a01b0316156118a9579392505050565b5060001901600081815260056020908152604091829020825160608101845290546001600160a01b038116808352600160a01b820467ffffffffffffffff1693830193909352600160e01b900460ff161515928101929092521561190e579392505050565b6118a9565b505b604051636f96cda160e11b815260040160405180910390fd5b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b604051630a85bd0160e11b81526000906001600160a01b0385169063150b7a02906119b3903390899088908890600401611f83565b602060405180830381600087803b1580156119cd57600080fd5b505af19250505080156119fd575060408051601f3d908101601f191682019092526119fa91810190611e85565b60015b611a58573d808015611a2b576040519150601f19603f3d011682016040523d82523d6000602084013e611a30565b606091505b508051611a50576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490505b949350505050565b6060600b805461071890612129565b606081611aa95750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611ad35780611abd81612164565b9150611acc9050600a83612090565b9150611aad565b60008167ffffffffffffffff811115611afc57634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611b26576020820181803683370190505b5090505b8415611a6e57611b3b6001836120c3565b9150611b48600a8661217f565b611b53906030612053565b60f81b818381518110611b7657634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350611b98600a86612090565b9450611b2a565b828054611bab90612129565b90600052602060002090601f016020900481019282611bcd5760008555611c13565b82601f10611be657805160ff1916838001178555611c13565b82800160010185558215611c13579182015b82811115611c13578251825591602001919060010190611bf8565b50611c1f929150611c23565b5090565b5b80821115611c1f5760008155600101611c24565b600067ffffffffffffffff80841115611c5357611c536121bf565b604051601f8501601f19908116603f01168101908282118183101715611c7b57611c7b6121bf565b81604052809350858152868686011115611c9457600080fd5b858560208301376000602087830101525050509392505050565b80358015158114611cbe57600080fd5b919050565b600060208284031215611cd4578081fd5b81356112f0816121d5565b600060208284031215611cf0578081fd5b81516112f0816121d5565b60008060408385031215611d0d578081fd5b8235611d18816121d5565b91506020830135611d28816121d5565b809150509250929050565b600080600060608486031215611d47578081fd5b8335611d52816121d5565b92506020840135611d62816121d5565b929592945050506040919091013590565b60008060008060808587031215611d88578081fd5b8435611d93816121d5565b93506020850135611da3816121d5565b925060408501359150606085013567ffffffffffffffff811115611dc5578182fd5b8501601f81018713611dd5578182fd5b611de487823560208401611c38565b91505092959194509250565b60008060408385031215611e02578182fd5b8235611e0d816121d5565b9150611e1b60208401611cae565b90509250929050565b60008060408385031215611e36578182fd5b8235611e41816121d5565b946020939093013593505050565b600060208284031215611e60578081fd5b6112f082611cae565b600060208284031215611e7a578081fd5b81356112f0816121ea565b600060208284031215611e96578081fd5b81516112f0816121ea565b600060208284031215611eb2578081fd5b813567ffffffffffffffff811115611ec8578182fd5b8201601f81018413611ed8578182fd5b611a6e84823560208401611c38565b600060208284031215611ef8578081fd5b5035919050565b60008060408385031215611f11578182fd5b82359150602083013560ff81168114611d28578182fd5b60008151808452611f408160208601602086016120fd565b601f01601f19169290920160200192915050565b60008351611f668184602088016120fd565b835190830190611f7a8183602088016120fd565b01949350505050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090611fb690830184611f28565b9695505050505050565b6020815260006112f06020830184611f28565b6020808252602b908201527f596f752063616e6e6f74206d696e74206d6f7265207468616e2074686520746f60408201526a74616c20737570706c792160a81b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6000821982111561206657612066612193565b500190565b600060ff821660ff84168060ff0382111561208857612088612193565b019392505050565b60008261209f5761209f6121a9565b500490565b60008160001904831182151516156120be576120be612193565b500290565b6000828210156120d5576120d5612193565b500390565b600060ff821660ff8416808210156120f4576120f4612193565b90039392505050565b60005b83811015612118578181015183820152602001612100565b838111156112125750506000910152565b600181811c9082168061213d57607f821691505b6020821081141561215e57634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561217857612178612193565b5060010190565b60008261218e5761218e6121a9565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114610ed257600080fd5b6001600160e01b031981168114610ed257600080fdfea26469706673582212206eba2c8f7ff5c15aa5ce923dc54a93f6d05268f414b0d749b3e9396e9fc4931664736f6c63430008040033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000007efa8b4c1d67c00bf570fb9c06a8a47f85d1a321000000000000000000000000e6a95f68ac155270922354474b3eded6bb3030310000000000000000000000000000000000000000000000000000000000000064
-----Decoded View---------------
Arg [0] : _DGCCAddress (address): 0x7efA8b4c1D67C00bf570fB9C06a8a47F85d1A321
Arg [1] : _FGAddress (address): 0xE6A95F68AC155270922354474b3edeD6BB303031
Arg [2] : _devMintAmount (uint256): 100
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 0000000000000000000000007efa8b4c1d67c00bf570fb9c06a8a47f85d1a321
Arg [1] : 000000000000000000000000e6a95f68ac155270922354474b3eded6bb303031
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000064
Deployed Bytecode Sourcemap
48855:4414:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48945:45;;;;;;;;;;;;48989:1;48945:45;;;;;12137:4:1;12125:17;;;12107:36;;12095:2;12080:18;48945:45:0;;;;;;;;24442:305;;;;;;;;;;-1:-1:-1;24442:305:0;;;;;:::i;:::-;;:::i;:::-;;;7280:14:1;;7273:22;7255:41;;7243:2;7228:18;24442:305:0;7210:92:1;49329:29:0;;;;;;;;;;-1:-1:-1;49329:29:0;;;;;;;;27555:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;29058:204::-;;;;;;;;;;-1:-1:-1;29058:204:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;6578:32:1;;;6560:51;;6548:2;6533:18;29058:204:0;6515:102:1;28621:371:0;;;;;;;;;;-1:-1:-1;28621:371:0;;;;;:::i;:::-;;:::i;:::-;;53100:166;;;;;;;;;;-1:-1:-1;53100:166:0;;;;;:::i;:::-;;:::i;23691:303::-;;;;;;;;;;-1:-1:-1;23945:12:0;;23929:13;;:28;23691:303;;;11929:25:1;;;11917:2;11902:18;23691:303:0;11884:76:1;49365:32:0;;;;;;;;;;-1:-1:-1;49365:32:0;;;;;;;;;;;51275:742;;;;;;:::i;:::-;;:::i;29923:170::-;;;;;;;;;;-1:-1:-1;29923:170:0;;;;;:::i;:::-;;:::i;50577:442::-;;;;;;:::i;:::-;;:::i;52470:149::-;;;;;;;;;;;;;:::i;30164:185::-;;;;;;;;;;-1:-1:-1;30164:185:0;;;;;:::i;:::-;;:::i;52735:100::-;;;;;;;;;;-1:-1:-1;52735:100:0;;;;;:::i;:::-;;:::i;49203:19::-;;;;;;;;;;-1:-1:-1;49203:19:0;;;;-1:-1:-1;;;;;49203:19:0;;;27363:125;;;;;;;;;;-1:-1:-1;27363:125:0;;;;;:::i;:::-;;:::i;49296:24::-;;;;;;;;;;;;;:::i;24811:206::-;;;;;;;;;;-1:-1:-1;24811:206:0;;;;;:::i;:::-;;:::i;43913:103::-;;;;;;;;;;;;;:::i;49229:30::-;;;;;;;;;;-1:-1:-1;49229:30:0;;;;-1:-1:-1;;;;;49229:30:0;;;52211:251;;;;;;;;;;;;;:::i;43262:87::-;;;;;;;;;;-1:-1:-1;43308:7:0;43335:6;-1:-1:-1;;;;;43335:6:0;43262:87;;49051:43;;;;;;;;;;;;49090:4;49051:43;;27724:104;;;;;;;;;;;;;:::i;49268:21::-;;;;;;;;;;;;;:::i;29334:287::-;;;;;;;;;;-1:-1:-1;29334:287:0;;;;;:::i;:::-;;:::i;30420:369::-;;;;;;;;;;-1:-1:-1;30420:369:0;;;;;:::i;:::-;;:::i;52961:131::-;;;;;;;;;;-1:-1:-1;52961:131:0;;;;;:::i;:::-;;:::i;52025:178::-;;;;;;;;;;-1:-1:-1;52025:178:0;;;;;:::i;:::-;;:::i;27899:318::-;;;;;;;;;;-1:-1:-1;27899:318:0;;;;;:::i;:::-;;:::i;49101:46::-;;;;;;;;;;;;49136:11;49101:46;;49156:38;;;;;;;;;;;;;;;29692:164;;;;;;;;;;-1:-1:-1;29692:164:0;;;;;:::i;:::-;-1:-1:-1;;;;;29813:25:0;;;29789:4;29813:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;29692:164;48997:47;;;;;;;;;;;;49043:1;48997:47;;44171:201;;;;;;;;;;-1:-1:-1;44171:201:0;;;;;:::i;:::-;;:::i;52843:110::-;;;;;;;;;;-1:-1:-1;52843:110:0;;;;;:::i;:::-;;:::i;24442:305::-;24544:4;-1:-1:-1;;;;;;24581:40:0;;-1:-1:-1;;;24581:40:0;;:105;;-1:-1:-1;;;;;;;24638:48:0;;-1:-1:-1;;;24638:48:0;24581:105;:158;;;-1:-1:-1;;;;;;;;;;13549:40:0;;;24703:36;24561:178;24442:305;-1:-1:-1;;24442:305:0:o;27555:100::-;27609:13;27642:5;27635:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27555:100;:::o;29058:204::-;29126:7;29151:16;29159:7;29151;:16::i;:::-;29146:64;;29176:34;;-1:-1:-1;;;29176:34:0;;;;;;;;;;;29146:64;-1:-1:-1;29230:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;29230:24:0;;29058:204::o;28621:371::-;28694:13;28710:24;28726:7;28710:15;:24::i;:::-;28694:40;;28755:5;-1:-1:-1;;;;;28749:11:0;:2;-1:-1:-1;;;;;28749:11:0;;28745:48;;;28769:24;;-1:-1:-1;;;28769:24:0;;;;;;;;;;;28745:48;20038:10;-1:-1:-1;;;;;28810:21:0;;;;;;:63;;-1:-1:-1;28836:37:0;28853:5;20038:10;29692:164;:::i;28836:37::-;28835:38;28810:63;28806:138;;;28897:35;;-1:-1:-1;;;28897:35:0;;;;;;;;;;;28806:138;28956:28;28965:2;28969:7;28978:5;28956:8;:28::i;:::-;28621:371;;;:::o;53100:166::-;43308:7;43335:6;-1:-1:-1;;;;;43335:6:0;20038:10;43482:23;43474:68;;;;-1:-1:-1;;;43474:68:0;;;;;;;:::i;:::-;;;;;;;;;53214:20:::1;:44:::0;;;::::1;;;;-1:-1:-1::0;;53214:44:0;;::::1;::::0;;;::::1;::::0;;53100:166::o;51275:742::-;49956:401;;;50003:16;50022:20;49956:401;49136:11;50022:20;:::i;:::-;50003:39;;49090:4;50091:9;50075:13;23945:12;;23929:13;;:28;;23691:303;50075:13;:25;;;;:::i;:::-;:41;;50053:134;;;;-1:-1:-1;;;50053:134:0;;;;;;;:::i;:::-;50206:9;50219:10;50206:23;50198:66;;;;-1:-1:-1;;;50198:66:0;;9367:2:1;50198:66:0;;;9349:21:1;9406:2;9386:18;;;9379:30;9445:32;9425:18;;;9418:60;9495:18;;50198:66:0;9339:180:1;50198:66:0;50296:8;50283:9;:21;;50275:60;;;;-1:-1:-1;;;50275:60:0;;9012:2:1;50275:60:0;;;8994:21:1;9051:2;9031:18;;;9024:30;9090:28;9070:18;;;9063:56;9136:18;;50275:60:0;8984:176:1;50275:60:0;51419:20:::1;::::0;::::1;::::0;::::1;;;51411:63;;;::::0;-1:-1:-1;;;51411:63:0;;11273:2:1;51411:63:0::1;::::0;::::1;11255:21:1::0;11312:2;11292:18;;;11285:30;11351:32;11331:18;;;11324:60;11401:18;;51411:63:0::1;11245:180:1::0;51411:63:0::1;51507:4;::::0;:21:::1;::::0;-1:-1:-1;;;51507:21:0;;::::1;::::0;::::1;11929:25:1::0;;;51532:10:0::1;::::0;-1:-1:-1;;;;;51507:4:0::1;::::0;:12:::1;::::0;11902:18:1;;51507:21:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;51507:35:0::1;;51485:109;;;::::0;-1:-1:-1;;;51485:109:0;;11632:2:1;51485:109:0::1;::::0;::::1;11614:21:1::0;11671:2;11651:18;;;11644:30;11710:26;11690:18;;;11683:54;11754:18;;51485:109:0::1;11604:174:1::0;51485:109:0::1;51607:17;51627:21:::0;;;:12:::1;:21;::::0;;;;;::::1;;48989:1;51683:23;51697:9:::0;51627:21;51683:23:::1;:::i;:::-;:46;;;;51661:142;;;::::0;-1:-1:-1;;;51661:142:0;;10087:2:1;51661:142:0::1;::::0;::::1;10069:21:1::0;10126:2;10106:18;;;10099:30;10165:34;10145:18;;;10138:62;-1:-1:-1;;;10216:18:1;;;10209:44;10270:19;;51661:142:0::1;10059:236:1::0;51661:142:0::1;51840:23;51854:9:::0;51840:11;:23:::1;:::i;:::-;51816:21;::::0;;;:12:::1;:21;::::0;;;;;;;:47;;-1:-1:-1;;51816:47:0::1;;::::0;;::::1;;::::0;;51874:39;;;;::::1;::::0;;;;;::::1;::::0;51880:10:::1;::::0;51874:39;;::::1;::::0;;:5:::1;:39::i;:::-;51930:32;::::0;::::1;48989:1;51930:32;51926:84;;;51979:2;::::0;:19:::1;::::0;-1:-1:-1;;;51979:19:0;;51987:10:::1;51979:19;::::0;::::1;6560:51:1::0;-1:-1:-1;;;;;51979:2:0;;::::1;::::0;:7:::1;::::0;6533:18:1;;51979:19:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;51926:84;50348:1;51275:742:::0;;;;:::o;29923:170::-;30057:28;30067:4;30073:2;30077:7;30057:9;:28::i;50577:442::-;50641:9;50003:16;50022:20;50641:9;49136:11;50022:20;:::i;:::-;50003:39;;49090:4;50091:9;50075:13;23945:12;;23929:13;;:28;;23691:303;50075:13;:25;;;;:::i;:::-;:41;;50053:134;;;;-1:-1:-1;;;50053:134:0;;;;;;;:::i;:::-;50206:9;50219:10;50206:23;50198:66;;;;-1:-1:-1;;;50198:66:0;;9367:2:1;50198:66:0;;;9349:21:1;9406:2;9386:18;;;9379:30;9445:32;9425:18;;;9418:60;9495:18;;50198:66:0;9339:180:1;50198:66:0;50296:8;50283:9;:21;;50275:60;;;;-1:-1:-1;;;50275:60:0;;9012:2:1;50275:60:0;;;8994:21:1;9051:2;9031:18;;;9024:30;9090:28;9070:18;;;9063:56;9136:18;;50275:60:0;8984:176:1;50275:60:0;50671:17:::1;::::0;::::1;;50663:57;;;::::0;-1:-1:-1;;;50663:57:0;;10502:2:1;50663:57:0::1;::::0;::::1;10484:21:1::0;10541:2;10521:18;;;10514:30;10580:29;10560:18;;;10553:57;10627:18;;50663:57:0::1;10474:177:1::0;50663:57:0::1;49043:1;50753:34:::0;::::1;;50731:130;;;::::0;-1:-1:-1;;;50731:130:0;;10858:2:1;50731:130:0::1;::::0;::::1;10840:21:1::0;10897:2;10877:18;;;10870:30;10936:34;10916:18;;;10909:62;-1:-1:-1;;;10987:18:1;;;10980:44;11041:19;;50731:130:0::1;10830:236:1::0;50731:130:0::1;50874:39;50880:10;50892:9;50874:39;;;;;;;;;;;::::0;50907:5:::1;50874;:39::i;:::-;49043:1;50930:34:::0;::::1;50926:86;;;50981:2;::::0;:19:::1;::::0;-1:-1:-1;;;50981:19:0;;50989:10:::1;50981:19;::::0;::::1;6560:51:1::0;-1:-1:-1;;;;;50981:2:0;;::::1;::::0;:7:::1;::::0;6533:18:1;;50981:19:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;50577:442:::0;;;:::o;52470:149::-;43308:7;43335:6;-1:-1:-1;;;;;43335:6:0;20038:10;43482:23;43474:68;;;;-1:-1:-1;;;43474:68:0;;;;;;;:::i;:::-;52521:7:::1;43335:6:::0;;52534:55:::1;::::0;-1:-1:-1;;;;;43335:6:0;;;;52563:21:::1;::::0;52521:7;52534:55;52521:7;52534:55;52563:21;43335:6;52534:55:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52520:69;;;52608:2;52600:11;;;::::0;::::1;;43553:1;52470:149::o:0;30164:185::-;30302:39;30319:4;30325:2;30329:7;30302:39;;;;;;;;;;;;:16;:39::i;52735:100::-;43308:7;43335:6;-1:-1:-1;;;;;43335:6:0;20038:10;43482:23;43474:68;;;;-1:-1:-1;;;43474:68:0;;;;;;;:::i;:::-;52809:18;;::::1;::::0;:7:::1;::::0;:18:::1;::::0;::::1;::::0;::::1;:::i;:::-;;52735:100:::0;:::o;27363:125::-;27427:7;27454:21;27467:7;27454:12;:21::i;:::-;:26;;27363:125;-1:-1:-1;;27363:125:0:o;49296:24::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;24811:206::-;24875:7;-1:-1:-1;;;;;24899:19:0;;24895:60;;24927:28;;-1:-1:-1;;;24927:28:0;;;;;;;;;;;24895:60;-1:-1:-1;;;;;;24981:19:0;;;;;:12;:19;;;;;:27;;;;24811:206::o;43913:103::-;43308:7;43335:6;-1:-1:-1;;;;;43335:6:0;20038:10;43482:23;43474:68;;;;-1:-1:-1;;;43474:68:0;;;;;;;:::i;:::-;43978:30:::1;44005:1;43978:18;:30::i;:::-;43913:103::o:0;52211:251::-;43308:7;43335:6;-1:-1:-1;;;;;43335:6:0;20038:10;43482:23;43474:68;;;;-1:-1:-1;;;43474:68:0;;;;;;;:::i;:::-;49090:4:::1;52298:13;52282;23945:12:::0;;23929:13;;:28;;23691:303;52282:13:::1;:29;;;;:::i;:::-;:45;;52260:138;;;;-1:-1:-1::0;;;52260:138:0::1;;;;;;;:::i;:::-;52411:43;52417:10;52429:13;52411:43;;;;;;;;;;;::::0;52448:5:::1;52411;:43::i;27724:104::-:0;27780:13;27813:7;27806:14;;;;;:::i;49268:21::-;;;;;;;:::i;29334:287::-;-1:-1:-1;;;;;29433:24:0;;20038:10;29433:24;29429:54;;;29466:17;;-1:-1:-1;;;29466:17:0;;;;;;;;;;;29429:54;20038:10;29496:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;29496:42:0;;;;;;;;;;;;:53;;-1:-1:-1;;29496:53:0;;;;;;;;;;29565:48;;7255:41:1;;;29496:42:0;;20038:10;29565:48;;7228:18:1;29565:48:0;;;;;;;29334:287;;:::o;30420:369::-;30587:28;30597:4;30603:2;30607:7;30587:9;:28::i;:::-;-1:-1:-1;;;;;30630:13:0;;3652:19;:23;;30630:76;;;;;30650:56;30681:4;30687:2;30691:7;30700:5;30650:30;:56::i;:::-;30649:57;30630:76;30626:156;;;30730:40;;-1:-1:-1;;;30730:40:0;;;;;;;;;;;30626:156;30420:369;;;;:::o;52961:131::-;43308:7;43335:6;-1:-1:-1;;;;;43335:6:0;20038:10;43482:23;43474:68;;;;-1:-1:-1;;;43474:68:0;;;;;;;:::i;:::-;53046:17:::1;:38:::0;;-1:-1:-1;;53046:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;52961:131::o;52025:178::-;52122:5;52174:21;;;:12;:21;;;;;;52152:43;;52174:21;;48989:1;52152:43;:::i;27899:318::-;27972:13;28003:16;28011:7;28003;:16::i;:::-;27998:59;;28028:29;;-1:-1:-1;;;28028:29:0;;;;;;;;;;;27998:59;28070:21;28094:10;:8;:10::i;:::-;28070:34;;28128:7;28122:21;28147:1;28122:26;;:87;;;;;;;;;;;;;;;;;28175:7;28184:18;:7;:16;:18::i;:::-;28158:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;28122:87;28115:94;27899:318;-1:-1:-1;;;27899:318:0:o;44171:201::-;43308:7;43335:6;-1:-1:-1;;;;;43335:6:0;20038:10;43482:23;43474:68;;;;-1:-1:-1;;;43474:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;44260:22:0;::::1;44252:73;;;::::0;-1:-1:-1;;;44252:73:0;;8193:2:1;44252:73:0::1;::::0;::::1;8175:21:1::0;8232:2;8212:18;;;8205:30;8271:34;8251:18;;;8244:62;-1:-1:-1;;;8322:18:1;;;8315:36;8368:19;;44252:73:0::1;8165:228:1::0;44252:73:0::1;44336:28;44355:8;44336:18;:28::i;52843:110::-:0;43308:7;43335:6;-1:-1:-1;;;;;43335:6:0;20038:10;43482:23;43474:68;;;;-1:-1:-1;;;43474:68:0;;;;;;;:::i;:::-;52921:24;;::::1;::::0;:10:::1;::::0;:24:::1;::::0;::::1;::::0;::::1;:::i;31044:187::-:0;31101:4;31165:13;;31155:7;:23;31125:98;;;;-1:-1:-1;;31196:20:0;;;;:11;:20;;;;;:27;-1:-1:-1;;;31196:27:0;;;;31195:28;;31044:187::o;39214:196::-;39329:24;;;;:15;:24;;;;;;:29;;-1:-1:-1;;;;;;39329:29:0;-1:-1:-1;;;;;39329:29:0;;;;;;;;;39374:28;;39329:24;;39374:28;;;;;;;39214:196;;;:::o;32128:1775::-;32290:13;;-1:-1:-1;;;;;32318:16:0;;32314:48;;32343:19;;-1:-1:-1;;;32343:19:0;;;;;;;;;;;32314:48;32377:13;32373:44;;32399:18;;-1:-1:-1;;;32399:18:0;;;;;;;;;;;32373:44;-1:-1:-1;;;;;32768:16:0;;;;;;:12;:16;;;;;;;;:44;;-1:-1:-1;;32827:49:0;;32768:44;;;;;;;;32827:49;;;;-1:-1:-1;;32768:44:0;;;;;;32827:49;;;;;;;;;;;;;;;;32893:25;;;:11;:25;;;;;;:35;;-1:-1:-1;;;;;;32943:66:0;;;;-1:-1:-1;;;32993:15:0;32943:66;;;;;;;;;;32893:25;33090:23;;;33134:4;:23;;;;-1:-1:-1;;;;;;33142:13:0;;3652:19;:23;;33142:15;33130:641;;;33178:314;33209:38;;33234:12;;-1:-1:-1;;;;;33209:38:0;;;33226:1;;33209:38;;33226:1;;33209:38;33275:69;33314:1;33318:2;33322:14;;;;;;33338:5;33275:30;:69::i;:::-;33270:174;;33380:40;;-1:-1:-1;;;33380:40:0;;;;;;;;;;;33270:174;33487:3;33471:12;:19;;33178:314;;33573:12;33556:13;;:29;33552:43;;33587:8;;;33552:43;33130:641;;;33636:120;33667:40;;33692:14;;;;;-1:-1:-1;;;;;33667:40:0;;;33684:1;;33667:40;;33684:1;;33667:40;33751:3;33735:12;:19;;33636:120;;33130:641;-1:-1:-1;33785:13:0;:28;33835:60;30420:369;34157:2130;34272:35;34310:21;34323:7;34310:12;:21::i;:::-;34272:59;;34370:4;-1:-1:-1;;;;;34348:26:0;:13;:18;;;-1:-1:-1;;;;;34348:26:0;;34344:67;;34383:28;;-1:-1:-1;;;34383:28:0;;;;;;;;;;;34344:67;34424:22;20038:10;-1:-1:-1;;;;;34450:20:0;;;;:73;;-1:-1:-1;34487:36:0;34504:4;20038:10;29692:164;:::i;34487:36::-;34450:126;;;-1:-1:-1;20038:10:0;34540:20;34552:7;34540:11;:20::i;:::-;-1:-1:-1;;;;;34540:36:0;;34450:126;34424:153;;34595:17;34590:66;;34621:35;;-1:-1:-1;;;34621:35:0;;;;;;;;;;;34590:66;-1:-1:-1;;;;;34671:16:0;;34667:52;;34696:23;;-1:-1:-1;;;34696:23:0;;;;;;;;;;;34667:52;34840:35;34857:1;34861:7;34870:4;34840:8;:35::i;:::-;-1:-1:-1;;;;;35171:18:0;;;;;;;:12;:18;;;;;;;;:31;;-1:-1:-1;;35171:31:0;;;;;;;-1:-1:-1;;35171:31:0;;;;;;;35217:16;;;;;;;;;:29;;;;;;;;-1:-1:-1;35217:29:0;;;;;;;;;;;35297:20;;;:11;:20;;;;;;35332:18;;-1:-1:-1;;;;;;35365:49:0;;;;-1:-1:-1;;;35398:15:0;35365:49;;;;;;;;;;35688:11;;35748:24;;;;;35791:13;;35297:20;;35748:24;;35791:13;35787:384;;36001:13;;35986:11;:28;35982:174;;36039:20;;36108:28;;;;36082:54;;-1:-1:-1;;;36082:54:0;-1:-1:-1;;;;;;36082:54:0;;;-1:-1:-1;;;;;36039:20:0;;36082:54;;;;35982:174;34157:2130;;;36218:7;36214:2;-1:-1:-1;;;;;36199:27:0;36208:4;-1:-1:-1;;;;;36199:27:0;;;;;;;;;;;36237:42;30420:369;26192:1109;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;26303:7:0;26386:13;;26379:4;:20;26348:886;;;26420:31;26454:17;;;:11;:17;;;;;;;;;26420:51;;;;;;;;;-1:-1:-1;;;;;26420:51:0;;;;-1:-1:-1;;;26420:51:0;;;;;;;;;;;-1:-1:-1;;;26420:51:0;;;;;;;;;;;;;;26490:729;;26540:14;;-1:-1:-1;;;;;26540:28:0;;26536:101;;26604:9;26192:1109;-1:-1:-1;;;26192:1109:0:o;26536:101::-;-1:-1:-1;;;26979:6:0;27024:17;;;;:11;:17;;;;;;;;;27012:29;;;;;;;;;-1:-1:-1;;;;;27012:29:0;;;;;-1:-1:-1;;;27012:29:0;;;;;;;;;;;-1:-1:-1;;;27012:29:0;;;;;;;;;;;;;27072:28;27068:109;;27140:9;26192:1109;-1:-1:-1;;;26192:1109:0:o;27068:109::-;26939:261;;;26348:886;;27262:31;;-1:-1:-1;;;27262:31:0;;;;;;;;;;;44532:191;44606:16;44625:6;;-1:-1:-1;;;;;44642:17:0;;;-1:-1:-1;;;;;;44642:17:0;;;;;;44675:40;;44625:6;;;;;;;44675:40;;44606:16;44675:40;44532:191;;:::o;39902:667::-;40086:72;;-1:-1:-1;;;40086:72:0;;40065:4;;-1:-1:-1;;;;;40086:36:0;;;;;:72;;20038:10;;40137:4;;40143:7;;40152:5;;40086:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;40086:72:0;;;;;;;;-1:-1:-1;;40086:72:0;;;;;;;;;;;;:::i;:::-;;;40082:480;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;40320:13:0;;40316:235;;40366:40;;-1:-1:-1;;;40366:40:0;;;;;;;;;;;40316:235;40509:6;40503:13;40494:6;40490:2;40486:15;40479:38;40082:480;-1:-1:-1;;;;;;40205:55:0;-1:-1:-1;;;40205:55:0;;-1:-1:-1;40082:480:0;39902:667;;;;;;:::o;52627:100::-;52679:13;52712:7;52705:14;;;;;:::i;365:723::-;421:13;642:10;638:53;;-1:-1:-1;;669:10:0;;;;;;;;;;;;-1:-1:-1;;;669:10:0;;;;;365:723::o;638:53::-;716:5;701:12;757:78;764:9;;757:78;;790:8;;;;:::i;:::-;;-1:-1:-1;813:10:0;;-1:-1:-1;821:2:0;813:10;;:::i;:::-;;;757:78;;;845:19;877:6;867:17;;;;;;-1:-1:-1;;;867:17:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;867:17:0;;845:39;;895:154;902:10;;895:154;;929:11;939:1;929:11;;:::i;:::-;;-1:-1:-1;998:10:0;1006:2;998:5;:10;:::i;:::-;985:24;;:2;:24;:::i;:::-;972:39;;955:6;962;955:14;;;;;;-1:-1:-1;;;955:14:0;;;;;;;;;;;;:56;-1:-1:-1;;;;;955:56:0;;;;;;;;-1:-1:-1;1026:11:0;1035:2;1026:11;;:::i;:::-;;;895:154;;-1:-1:-1;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:631:1;78:5;108:18;149:2;141:6;138:14;135:2;;;155:18;;:::i;:::-;230:2;224:9;198:2;284:15;;-1:-1:-1;;280:24:1;;;306:2;276:33;272:42;260:55;;;330:18;;;350:22;;;327:46;324:2;;;376:18;;:::i;:::-;416:10;412:2;405:22;445:6;436:15;;475:6;467;460:22;515:3;506:6;501:3;497:16;494:25;491:2;;;532:1;529;522:12;491:2;582:6;577:3;570:4;562:6;558:17;545:44;637:1;630:4;621:6;613;609:19;605:30;598:41;;;;88:557;;;;;:::o;650:160::-;715:20;;771:13;;764:21;754:32;;744:2;;800:1;797;790:12;744:2;696:114;;;:::o;815:257::-;874:6;927:2;915:9;906:7;902:23;898:32;895:2;;;948:6;940;933:22;895:2;992:9;979:23;1011:31;1036:5;1011:31;:::i;1077:261::-;1147:6;1200:2;1188:9;1179:7;1175:23;1171:32;1168:2;;;1221:6;1213;1206:22;1168:2;1258:9;1252:16;1277:31;1302:5;1277:31;:::i;1343:398::-;1411:6;1419;1472:2;1460:9;1451:7;1447:23;1443:32;1440:2;;;1493:6;1485;1478:22;1440:2;1537:9;1524:23;1556:31;1581:5;1556:31;:::i;:::-;1606:5;-1:-1:-1;1663:2:1;1648:18;;1635:32;1676:33;1635:32;1676:33;:::i;:::-;1728:7;1718:17;;;1430:311;;;;;:::o;1746:466::-;1823:6;1831;1839;1892:2;1880:9;1871:7;1867:23;1863:32;1860:2;;;1913:6;1905;1898:22;1860:2;1957:9;1944:23;1976:31;2001:5;1976:31;:::i;:::-;2026:5;-1:-1:-1;2083:2:1;2068:18;;2055:32;2096:33;2055:32;2096:33;:::i;:::-;1850:362;;2148:7;;-1:-1:-1;;;2202:2:1;2187:18;;;;2174:32;;1850:362::o;2217:824::-;2312:6;2320;2328;2336;2389:3;2377:9;2368:7;2364:23;2360:33;2357:2;;;2411:6;2403;2396:22;2357:2;2455:9;2442:23;2474:31;2499:5;2474:31;:::i;:::-;2524:5;-1:-1:-1;2581:2:1;2566:18;;2553:32;2594:33;2553:32;2594:33;:::i;:::-;2646:7;-1:-1:-1;2700:2:1;2685:18;;2672:32;;-1:-1:-1;2755:2:1;2740:18;;2727:32;2782:18;2771:30;;2768:2;;;2819:6;2811;2804:22;2768:2;2847:22;;2900:4;2892:13;;2888:27;-1:-1:-1;2878:2:1;;2934:6;2926;2919:22;2878:2;2962:73;3027:7;3022:2;3009:16;3004:2;3000;2996:11;2962:73;:::i;:::-;2952:83;;;2347:694;;;;;;;:::o;3046:325::-;3111:6;3119;3172:2;3160:9;3151:7;3147:23;3143:32;3140:2;;;3193:6;3185;3178:22;3140:2;3237:9;3224:23;3256:31;3281:5;3256:31;:::i;:::-;3306:5;-1:-1:-1;3330:35:1;3361:2;3346:18;;3330:35;:::i;:::-;3320:45;;3130:241;;;;;:::o;3376:325::-;3444:6;3452;3505:2;3493:9;3484:7;3480:23;3476:32;3473:2;;;3526:6;3518;3511:22;3473:2;3570:9;3557:23;3589:31;3614:5;3589:31;:::i;:::-;3639:5;3691:2;3676:18;;;;3663:32;;-1:-1:-1;;;3463:238:1:o;3706:190::-;3762:6;3815:2;3803:9;3794:7;3790:23;3786:32;3783:2;;;3836:6;3828;3821:22;3783:2;3864:26;3880:9;3864:26;:::i;3901:255::-;3959:6;4012:2;4000:9;3991:7;3987:23;3983:32;3980:2;;;4033:6;4025;4018:22;3980:2;4077:9;4064:23;4096:30;4120:5;4096:30;:::i;4161:259::-;4230:6;4283:2;4271:9;4262:7;4258:23;4254:32;4251:2;;;4304:6;4296;4289:22;4251:2;4341:9;4335:16;4360:30;4384:5;4360:30;:::i;4425:480::-;4494:6;4547:2;4535:9;4526:7;4522:23;4518:32;4515:2;;;4568:6;4560;4553:22;4515:2;4613:9;4600:23;4646:18;4638:6;4635:30;4632:2;;;4683:6;4675;4668:22;4632:2;4711:22;;4764:4;4756:13;;4752:27;-1:-1:-1;4742:2:1;;4798:6;4790;4783:22;4742:2;4826:73;4891:7;4886:2;4873:16;4868:2;4864;4860:11;4826:73;:::i;4910:190::-;4969:6;5022:2;5010:9;5001:7;4997:23;4993:32;4990:2;;;5043:6;5035;5028:22;4990:2;-1:-1:-1;5071:23:1;;4980:120;-1:-1:-1;4980:120:1:o;5105:357::-;5171:6;5179;5232:2;5220:9;5211:7;5207:23;5203:32;5200:2;;;5253:6;5245;5238:22;5200:2;5294:9;5281:23;5271:33;;5354:2;5343:9;5339:18;5326:32;5398:4;5391:5;5387:16;5380:5;5377:27;5367:2;;5423:6;5415;5408:22;5467:257;5508:3;5546:5;5540:12;5573:6;5568:3;5561:19;5589:63;5645:6;5638:4;5633:3;5629:14;5622:4;5615:5;5611:16;5589:63;:::i;:::-;5706:2;5685:15;-1:-1:-1;;5681:29:1;5672:39;;;;5713:4;5668:50;;5516:208;-1:-1:-1;;5516:208:1:o;5729:470::-;5908:3;5946:6;5940:13;5962:53;6008:6;6003:3;5996:4;5988:6;5984:17;5962:53;:::i;:::-;6078:13;;6037:16;;;;6100:57;6078:13;6037:16;6134:4;6122:17;;6100:57;:::i;:::-;6173:20;;5916:283;-1:-1:-1;;;;5916:283:1:o;6622:488::-;-1:-1:-1;;;;;6891:15:1;;;6873:34;;6943:15;;6938:2;6923:18;;6916:43;6990:2;6975:18;;6968:34;;;7038:3;7033:2;7018:18;;7011:31;;;6816:4;;7059:45;;7084:19;;7076:6;7059:45;:::i;:::-;7051:53;6825:285;-1:-1:-1;;;;;;6825:285:1:o;7767:219::-;7916:2;7905:9;7898:21;7879:4;7936:44;7976:2;7965:9;7961:18;7953:6;7936:44;:::i;8398:407::-;8600:2;8582:21;;;8639:2;8619:18;;;8612:30;8678:34;8673:2;8658:18;;8651:62;-1:-1:-1;;;8744:2:1;8729:18;;8722:41;8795:3;8780:19;;8572:233::o;9524:356::-;9726:2;9708:21;;;9745:18;;;9738:30;9804:34;9799:2;9784:18;;9777:62;9871:2;9856:18;;9698:182::o;12154:128::-;12194:3;12225:1;12221:6;12218:1;12215:13;12212:2;;;12231:18;;:::i;:::-;-1:-1:-1;12267:9:1;;12202:80::o;12287:204::-;12325:3;12361:4;12358:1;12354:12;12393:4;12390:1;12386:12;12428:3;12422:4;12418:14;12413:3;12410:23;12407:2;;;12436:18;;:::i;:::-;12472:13;;12333:158;-1:-1:-1;;;12333:158:1:o;12496:120::-;12536:1;12562;12552:2;;12567:18;;:::i;:::-;-1:-1:-1;12601:9:1;;12542:74::o;12621:168::-;12661:7;12727:1;12723;12719:6;12715:14;12712:1;12709:21;12704:1;12697:9;12690:17;12686:45;12683:2;;;12734:18;;:::i;:::-;-1:-1:-1;12774:9:1;;12673:116::o;12794:125::-;12834:4;12862:1;12859;12856:8;12853:2;;;12867:18;;:::i;:::-;-1:-1:-1;12904:9:1;;12843:76::o;12924:195::-;12962:4;12999;12996:1;12992:12;13031:4;13028:1;13024:12;13056:3;13051;13048:12;13045:2;;;13063:18;;:::i;:::-;13100:13;;;12971:148;-1:-1:-1;;;12971:148:1:o;13124:258::-;13196:1;13206:113;13220:6;13217:1;13214:13;13206:113;;;13296:11;;;13290:18;13277:11;;;13270:39;13242:2;13235:10;13206:113;;;13337:6;13334:1;13331:13;13328:2;;;-1:-1:-1;;13372:1:1;13354:16;;13347:27;13177:205::o;13387:380::-;13466:1;13462:12;;;;13509;;;13530:2;;13584:4;13576:6;13572:17;13562:27;;13530:2;13637;13629:6;13626:14;13606:18;13603:38;13600:2;;;13683:10;13678:3;13674:20;13671:1;13664:31;13718:4;13715:1;13708:15;13746:4;13743:1;13736:15;13600:2;;13442:325;;;:::o;13772:135::-;13811:3;-1:-1:-1;;13832:17:1;;13829:2;;;13852:18;;:::i;:::-;-1:-1:-1;13899:1:1;13888:13;;13819:88::o;13912:112::-;13944:1;13970;13960:2;;13975:18;;:::i;:::-;-1:-1:-1;14009:9:1;;13950:74::o;14029:127::-;14090:10;14085:3;14081:20;14078:1;14071:31;14121:4;14118:1;14111:15;14145:4;14142:1;14135:15;14161:127;14222:10;14217:3;14213:20;14210:1;14203:31;14253:4;14250:1;14243:15;14277:4;14274:1;14267:15;14293:127;14354:10;14349:3;14345:20;14342:1;14335:31;14385:4;14382:1;14375:15;14409:4;14406:1;14399:15;14425:131;-1:-1:-1;;;;;14500:31:1;;14490:42;;14480:2;;14546:1;14543;14536:12;14561:131;-1:-1:-1;;;;;;14635:32:1;;14625:43;;14615:2;;14682:1;14679;14672:12
Swarm Source
ipfs://6eba2c8f7ff5c15aa5ce923dc54a93f6d05268f414b0d749b3e9396e9fc49316
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.