ERC-721
Overview
Max Total Supply
320 BDG
Holders
67
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
1 BDGLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
BillionDollarGrippy
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-11-17 */ // SPDX-License-Identifier: MIT // File: @openzeppelin/contracts/security/ReentrancyGuard.sol // OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol) pragma solidity ^0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts (last updated v4.6.0) (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 `IERC721Receiver.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 (last updated v4.6.0) (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`. * * 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; /** * @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 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 the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @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); } // 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: erc721a/contracts/IERC721A.sol // ERC721A Contracts v3.3.0 // Creator: Chiru Labs pragma solidity ^0.8.4; /** * @dev Interface of an ERC721A compliant contract. */ interface IERC721A is IERC721, IERC721Metadata { /** * The caller must own the token or be an approved operator. */ error ApprovalCallerNotOwnerNorApproved(); /** * The token does not exist. */ error ApprovalQueryForNonexistentToken(); /** * The caller cannot approve to their own address. */ error ApproveToCaller(); /** * The caller cannot approve to the current owner. */ error ApprovalToCurrentOwner(); /** * Cannot query the balance for the zero address. */ error BalanceQueryForZeroAddress(); /** * Cannot mint to the zero address. */ error MintToZeroAddress(); /** * The quantity of tokens minted must be more than zero. */ error MintZeroQuantity(); /** * The token does not exist. */ error OwnerQueryForNonexistentToken(); /** * The caller must own the token or be an approved operator. */ error TransferCallerNotOwnerNorApproved(); /** * The token must be owned by `from`. */ error TransferFromIncorrectOwner(); /** * Cannot safely transfer to a contract that does not implement the ERC721Receiver interface. */ error TransferToNonERC721ReceiverImplementer(); /** * Cannot transfer to the zero address. */ error TransferToZeroAddress(); /** * The token does not exist. */ error URIQueryForNonexistentToken(); // 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; } /** * @dev Returns the total amount of tokens stored by the contract. * * Burned tokens are calculated here, use `_totalMinted()` if you want to count just minted tokens. */ function totalSupply() external view returns (uint256); } // File: erc721a/contracts/ERC721A.sol // ERC721A Contracts v3.3.0 // Creator: Chiru Labs pragma solidity ^0.8.4; /** * @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, IERC721A { using Address for address; using Strings for uint256; // 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 override 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) if (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(), ".json")): ""; } /** * @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) if(!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()) if(!_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; } /** * @dev Equivalent to `_safeMint(to, quantity, '')`. */ 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 { 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 (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 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) 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; 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 Equivalent to `_burn(tokenId, false)`. */ function _burn(uint256 tokenId) internal virtual { _burn(tokenId, false); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId, bool approvalCheck) internal virtual { TokenOwnership memory prevOwnership = _ownershipOf(tokenId); address from = prevOwnership.addr; if (approvalCheck) { bool isApprovedOrOwner = (_msgSender() == from || isApprovedForAll(from, _msgSender()) || getApproved(tokenId) == _msgSender()); if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved(); } _beforeTokenTransfers(from, address(0), tokenId, 1); // Clear approvals from the previous owner _approve(address(0), tokenId, from); // Underflow of the sender's balance is impossible because we check for // ownership above and the recipient's balance can't realistically overflow. // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256. unchecked { AddressData storage addressData = _addressData[from]; addressData.balance -= 1; addressData.numberBurned += 1; // Keep track of who burned the token, and the timestamp of burning. TokenOwnership storage currSlot = _ownerships[tokenId]; currSlot.addr = from; currSlot.startTimestamp = uint64(block.timestamp); currSlot.burned = true; // If the ownership slot of tokenId+1 is not explicitly set, that means the burn initiator owns it. // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls. uint256 nextTokenId = tokenId + 1; TokenOwnership storage nextSlot = _ownerships[nextTokenId]; if (nextSlot.addr == address(0)) { // This will suffice for checking _exists(nextTokenId), // as a burned slot cannot contain the zero address. if (nextTokenId != _currentIndex) { nextSlot.addr = from; nextSlot.startTimestamp = prevOwnership.startTimestamp; } } } emit Transfer(from, address(0), tokenId); _afterTokenTransfers(from, address(0), tokenId, 1); // Overflow not possible, as _burnCounter cannot be exceed _currentIndex times. unchecked { _burnCounter++; } } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve( address to, uint256 tokenId, address owner ) private { _tokenApprovals[tokenId] = to; emit Approval(owner, to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkContractOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver(to).onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert TransferToNonERC721ReceiverImplementer(); } else { assembly { revert(add(32, reason), mload(reason)) } } } } /** * @dev Hook that is called before a set of serially-ordered token ids are about to be transferred. This includes minting. * And also called before burning one token. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * Calling conditions: * * - When `from` and `to` are both non-zero, `from`'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, `tokenId` will be burned by `from`. * - `from` and `to` are never both zero. */ function _beforeTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} /** * @dev Hook that is called after a set of serially-ordered token ids have been transferred. This includes * minting. * And also called after one token has been burned. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * Calling conditions: * * - When `from` and `to` are both non-zero, `from`'s `tokenId` has been * transferred to `to`. * - When `from` is zero, `tokenId` has been minted for `to`. * - When `to` is zero, `tokenId` has been burned by `from`. * - `from` and `to` are never both zero. */ function _afterTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} } // File: contracts/gtburgers.sol pragma solidity ^0.8.4; contract BillionDollarGrippy is ERC721A, Ownable, ReentrancyGuard { using Strings for uint256; uint256 public PRICE; uint256 public MAX_SUPPLY; string private BASE_URI; uint256 public FREE_MINT_LIMIT_PER_WALLET; uint256 public MAX_MINT_AMOUNT_PER_TX; bool public IS_SALE_ACTIVE; uint256 public FREE_MINT_IS_ALLOWED_UNTIL; bool public METADATA_FROZEN; mapping(address => uint256) private freeMintCountMap; constructor( uint256 price, uint256 maxSupply, string memory baseUri, uint256 freeMintAllowance, uint256 maxMintPerTx, bool isSaleActive, uint256 freeMintIsAllowedUntil ) ERC721A("Billiondollargrippy", "BDG") { PRICE = price; MAX_SUPPLY = maxSupply; BASE_URI = baseUri; FREE_MINT_LIMIT_PER_WALLET = freeMintAllowance; MAX_MINT_AMOUNT_PER_TX = maxMintPerTx; IS_SALE_ACTIVE = isSaleActive; FREE_MINT_IS_ALLOWED_UNTIL = freeMintIsAllowedUntil; } /** FREE MINT **/ function updateFreeMintCount(address minter, uint256 count) private { freeMintCountMap[minter] += count; } /** GETTERS **/ function _baseURI() internal view virtual override returns (string memory) { return BASE_URI; } /** SETTERS **/ function setPrice(uint256 customPrice) external onlyOwner { PRICE = customPrice; } function lowerMaxSupply(uint256 newMaxSupply) external onlyOwner { require(newMaxSupply < MAX_SUPPLY, "Invalid new max supply"); require(newMaxSupply >= _currentIndex, "Invalid new max supply"); MAX_SUPPLY = newMaxSupply; } function setBaseURI(string memory customBaseURI_) external onlyOwner { require(!METADATA_FROZEN, "Metadata frozen!"); BASE_URI = customBaseURI_; } function setFreeMintAllowance(uint256 freeMintAllowance) external onlyOwner { FREE_MINT_LIMIT_PER_WALLET = freeMintAllowance; } function setMaxMintPerTx(uint256 maxMintPerTx) external onlyOwner { MAX_MINT_AMOUNT_PER_TX = maxMintPerTx; } function setSaleActive(bool saleIsActive) external onlyOwner { IS_SALE_ACTIVE = saleIsActive; } function setFreeMintAllowedUntil(uint256 freeMintIsAllowedUntil) external onlyOwner { FREE_MINT_IS_ALLOWED_UNTIL = freeMintIsAllowedUntil; } function freezeMetadata() external onlyOwner { METADATA_FROZEN = true; } /** MINT **/ modifier mintCompliance(uint256 _mintAmount) { require( _mintAmount > 0 && _mintAmount <= MAX_MINT_AMOUNT_PER_TX, "Invalid mint amount!" ); require( _currentIndex + _mintAmount <= MAX_SUPPLY, "Max supply exceeded!" ); _; } function mint(uint256 _mintAmount) public payable mintCompliance(_mintAmount) { require(IS_SALE_ACTIVE, "Sale is not active!"); uint256 price = PRICE * _mintAmount; if (_currentIndex < FREE_MINT_IS_ALLOWED_UNTIL) { uint256 remainingFreeMint = FREE_MINT_LIMIT_PER_WALLET - freeMintCountMap[msg.sender]; if (remainingFreeMint > 0) { if (_mintAmount >= remainingFreeMint) { price -= remainingFreeMint * PRICE; updateFreeMintCount(msg.sender, remainingFreeMint); } else { price -= _mintAmount * PRICE; updateFreeMintCount(msg.sender, _mintAmount); } } } require(msg.value >= price, "Insufficient funds!"); _safeMint(msg.sender, _mintAmount); } function mintOwner(address _to, uint256 _mintAmount) public mintCompliance(_mintAmount) onlyOwner { _safeMint(_to, _mintAmount); } /** PAYOUT **/ address private constant payoutAddress1 = 0x222192e401a8100ddF5BE90b825C3c095Ca1687D; function withdraw() public onlyOwner nonReentrant { uint256 balance = address(this).balance; Address.sendValue(payable(payoutAddress1), balance / 1); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"uint256","name":"maxSupply","type":"uint256"},{"internalType":"string","name":"baseUri","type":"string"},{"internalType":"uint256","name":"freeMintAllowance","type":"uint256"},{"internalType":"uint256","name":"maxMintPerTx","type":"uint256"},{"internalType":"bool","name":"isSaleActive","type":"bool"},{"internalType":"uint256","name":"freeMintIsAllowedUntil","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":"FREE_MINT_IS_ALLOWED_UNTIL","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"FREE_MINT_LIMIT_PER_WALLET","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"IS_SALE_ACTIVE","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_MINT_AMOUNT_PER_TX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"METADATA_FROZEN","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"freezeMetadata","outputs":[],"stateMutability":"nonpayable","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":[{"internalType":"uint256","name":"newMaxSupply","type":"uint256"}],"name":"lowerMaxSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mintOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"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":"customBaseURI_","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"freeMintAllowance","type":"uint256"}],"name":"setFreeMintAllowance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"freeMintIsAllowedUntil","type":"uint256"}],"name":"setFreeMintAllowedUntil","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxMintPerTx","type":"uint256"}],"name":"setMaxMintPerTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"customPrice","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"saleIsActive","type":"bool"}],"name":"setSaleActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b5060405162004505380380620045058339818101604052810190620000379190620003a7565b6040518060400160405280601381526020017f42696c6c696f6e646f6c6c6172677269707079000000000000000000000000008152506040518060400160405280600381526020017f42444700000000000000000000000000000000000000000000000000000000008152508160029080519060200190620000bb9291906200024b565b508060039080519060200190620000d49291906200024b565b50620000e56200017860201b60201c565b60008190555050506200010d620001016200017d60201b60201c565b6200018560201b60201c565b600160098190555086600a8190555085600b8190555084600c90805190602001906200013b9291906200024b565b5083600d8190555082600e8190555081600f60006101000a81548160ff021916908315150217905550806010819055505050505050505062000647565b600090565b600033905090565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620002599062000524565b90600052602060002090601f0160209004810192826200027d5760008555620002c9565b82601f106200029857805160ff1916838001178555620002c9565b82800160010185558215620002c9579182015b82811115620002c8578251825591602001919060010190620002ab565b5b509050620002d89190620002dc565b5090565b5b80821115620002f7576000816000905550600101620002dd565b5090565b6000620003126200030c84620004a2565b62000479565b905082815260208101848484011115620003315762000330620005f3565b5b6200033e848285620004ee565b509392505050565b600081519050620003578162000613565b92915050565b600082601f830112620003755762000374620005ee565b5b815162000387848260208601620002fb565b91505092915050565b600081519050620003a1816200062d565b92915050565b600080600080600080600060e0888a031215620003c957620003c8620005fd565b5b6000620003d98a828b0162000390565b9750506020620003ec8a828b0162000390565b965050604088015167ffffffffffffffff81111562000410576200040f620005f8565b5b6200041e8a828b016200035d565b9550506060620004318a828b0162000390565b9450506080620004448a828b0162000390565b93505060a0620004578a828b0162000346565b92505060c06200046a8a828b0162000390565b91505092959891949750929550565b60006200048562000498565b90506200049382826200055a565b919050565b6000604051905090565b600067ffffffffffffffff821115620004c057620004bf620005bf565b5b620004cb8262000602565b9050602081019050919050565b60008115159050919050565b6000819050919050565b60005b838110156200050e578082015181840152602081019050620004f1565b838111156200051e576000848401525b50505050565b600060028204905060018216806200053d57607f821691505b6020821081141562000554576200055362000590565b5b50919050565b620005658262000602565b810181811067ffffffffffffffff82111715620005875762000586620005bf565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b6200061e81620004d8565b81146200062a57600080fd5b50565b6200063881620004e4565b81146200064457600080fd5b50565b613eae80620006576000396000f3fe6080604052600436106102045760003560e01c8063715018a611610118578063a22cb465116100a0578063c87b56dd1161006f578063c87b56dd1461070a578063d111515d14610747578063e985e9c51461075e578063f2fde38b1461079b578063fdb4953a146107c457610204565b8063a22cb46514610666578063b0551ac41461068f578063b88d4fde146106b8578063c4e9374d146106e157610204565b80638d859f3e116100e75780638d859f3e146105a05780638da5cb5b146105cb57806391b7f5ed146105f657806395d89b411461061f578063a0712d681461064a57610204565b8063715018a61461050c57806376d02b7114610523578063841718a61461054e5780638b85e43d1461057757610204565b806332cb6b0c1161019b57806342842e0e1161016a57806342842e0e1461041757806355f804b314610440578063616cdb1e146104695780636352211e1461049257806370a08231146104cf57610204565b806332cb6b0c146103815780633ccfd60b146103ac5780634065b85f146103c3578063408cbf94146103ee57610204565b806309ef6527116101d757806309ef6527146102d757806310b0c0521461030257806318160ddd1461032d57806323b872dd1461035857610204565b806301ffc9a71461020957806306fdde0314610246578063081812fc14610271578063095ea7b3146102ae575b600080fd5b34801561021557600080fd5b50610230600480360381019061022b919061318a565b6107ef565b60405161023d919061359c565b60405180910390f35b34801561025257600080fd5b5061025b6108d1565b60405161026891906135b7565b60405180910390f35b34801561027d57600080fd5b506102986004803603810190610293919061322d565b610963565b6040516102a59190613535565b60405180910390f35b3480156102ba57600080fd5b506102d560048036038101906102d0919061311d565b6109df565b005b3480156102e357600080fd5b506102ec610ae4565b6040516102f99190613739565b60405180910390f35b34801561030e57600080fd5b50610317610aea565b6040516103249190613739565b60405180910390f35b34801561033957600080fd5b50610342610af0565b60405161034f9190613739565b60405180910390f35b34801561036457600080fd5b5061037f600480360381019061037a9190613007565b610b07565b005b34801561038d57600080fd5b50610396610b17565b6040516103a39190613739565b60405180910390f35b3480156103b857600080fd5b506103c1610b1d565b005b3480156103cf57600080fd5b506103d8610c21565b6040516103e59190613739565b60405180910390f35b3480156103fa57600080fd5b506104156004803603810190610410919061311d565b610c27565b005b34801561042357600080fd5b5061043e60048036038101906104399190613007565b610d56565b005b34801561044c57600080fd5b50610467600480360381019061046291906131e4565b610d76565b005b34801561047557600080fd5b50610490600480360381019061048b919061322d565b610e5c565b005b34801561049e57600080fd5b506104b960048036038101906104b4919061322d565b610ee2565b6040516104c69190613535565b60405180910390f35b3480156104db57600080fd5b506104f660048036038101906104f19190612f9a565b610ef8565b6040516105039190613739565b60405180910390f35b34801561051857600080fd5b50610521610fc8565b005b34801561052f57600080fd5b50610538611050565b604051610545919061359c565b60405180910390f35b34801561055a57600080fd5b506105756004803603810190610570919061315d565b611063565b005b34801561058357600080fd5b5061059e6004803603810190610599919061322d565b6110fc565b005b3480156105ac57600080fd5b506105b5611182565b6040516105c29190613739565b60405180910390f35b3480156105d757600080fd5b506105e0611188565b6040516105ed9190613535565b60405180910390f35b34801561060257600080fd5b5061061d6004803603810190610618919061322d565b6111b2565b005b34801561062b57600080fd5b50610634611238565b60405161064191906135b7565b60405180910390f35b610664600480360381019061065f919061322d565b6112ca565b005b34801561067257600080fd5b5061068d600480360381019061068891906130dd565b6114e1565b005b34801561069b57600080fd5b506106b660048036038101906106b1919061322d565b611659565b005b3480156106c457600080fd5b506106df60048036038101906106da919061305a565b6116df565b005b3480156106ed57600080fd5b506107086004803603810190610703919061322d565b611757565b005b34801561071657600080fd5b50610731600480360381019061072c919061322d565b611866565b60405161073e91906135b7565b60405180910390f35b34801561075357600080fd5b5061075c611905565b005b34801561076a57600080fd5b5061078560048036038101906107809190612fc7565b61199e565b604051610792919061359c565b60405180910390f35b3480156107a757600080fd5b506107c260048036038101906107bd9190612f9a565b611a32565b005b3480156107d057600080fd5b506107d9611b2a565b6040516107e6919061359c565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108ba57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806108ca57506108c982611b3d565b5b9050919050565b6060600280546108e0906139f4565b80601f016020809104026020016040519081016040528092919081815260200182805461090c906139f4565b80156109595780601f1061092e57610100808354040283529160200191610959565b820191906000526020600020905b81548152906001019060200180831161093c57829003601f168201915b5050505050905090565b600061096e82611ba7565b6109a4576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006109ea82610ee2565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a52576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a71611bf5565b73ffffffffffffffffffffffffffffffffffffffff1614610ad457610a9d81610a98611bf5565b61199e565b610ad3576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b610adf838383611bfd565b505050565b600e5481565b600d5481565b6000610afa611caf565b6001546000540303905090565b610b12838383611cb4565b505050565b600b5481565b610b25611bf5565b73ffffffffffffffffffffffffffffffffffffffff16610b43611188565b73ffffffffffffffffffffffffffffffffffffffff1614610b99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9090613659565b60405180910390fd5b60026009541415610bdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd6906136f9565b60405180910390fd5b60026009819055506000479050610c1673222192e401a8100ddf5be90b825c3c095ca1687d600183610c11919061387f565b61216a565b506001600981905550565b60105481565b80600081118015610c3a5750600e548111155b610c79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c70906135f9565b60405180910390fd5b600b5481600054610c8a9190613829565b1115610ccb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc2906136d9565b60405180910390fd5b610cd3611bf5565b73ffffffffffffffffffffffffffffffffffffffff16610cf1611188565b73ffffffffffffffffffffffffffffffffffffffff1614610d47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3e90613659565b60405180910390fd5b610d51838361225e565b505050565b610d71838383604051806020016040528060008152506116df565b505050565b610d7e611bf5565b73ffffffffffffffffffffffffffffffffffffffff16610d9c611188565b73ffffffffffffffffffffffffffffffffffffffff1614610df2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de990613659565b60405180910390fd5b601160009054906101000a900460ff1615610e42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e39906136b9565b60405180910390fd5b80600c9080519060200190610e58929190612d6b565b5050565b610e64611bf5565b73ffffffffffffffffffffffffffffffffffffffff16610e82611188565b73ffffffffffffffffffffffffffffffffffffffff1614610ed8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ecf90613659565b60405180910390fd5b80600e8190555050565b6000610eed8261227c565b600001519050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610f60576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b610fd0611bf5565b73ffffffffffffffffffffffffffffffffffffffff16610fee611188565b73ffffffffffffffffffffffffffffffffffffffff1614611044576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103b90613659565b60405180910390fd5b61104e6000612507565b565b600f60009054906101000a900460ff1681565b61106b611bf5565b73ffffffffffffffffffffffffffffffffffffffff16611089611188565b73ffffffffffffffffffffffffffffffffffffffff16146110df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d690613659565b60405180910390fd5b80600f60006101000a81548160ff02191690831515021790555050565b611104611bf5565b73ffffffffffffffffffffffffffffffffffffffff16611122611188565b73ffffffffffffffffffffffffffffffffffffffff1614611178576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116f90613659565b60405180910390fd5b8060108190555050565b600a5481565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6111ba611bf5565b73ffffffffffffffffffffffffffffffffffffffff166111d8611188565b73ffffffffffffffffffffffffffffffffffffffff161461122e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122590613659565b60405180910390fd5b80600a8190555050565b606060038054611247906139f4565b80601f0160208091040260200160405190810160405280929190818152602001828054611273906139f4565b80156112c05780601f10611295576101008083540402835291602001916112c0565b820191906000526020600020905b8154815290600101906020018083116112a357829003601f168201915b5050505050905090565b806000811180156112dd5750600e548111155b61131c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611313906135f9565b60405180910390fd5b600b548160005461132d9190613829565b111561136e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611365906136d9565b60405180910390fd5b600f60009054906101000a900460ff166113bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b490613679565b60405180910390fd5b600082600a546113cd91906138b0565b9050601054600054101561148f576000601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600d5461142a919061390a565b9050600081111561148d5780841061146657600a548161144a91906138b0565b82611455919061390a565b915061146133826125cd565b61148c565b600a548461147491906138b0565b8261147f919061390a565b915061148b33856125cd565b5b5b505b803410156114d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c990613719565b60405180910390fd5b6114dc338461225e565b505050565b6114e9611bf5565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561154e576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806007600061155b611bf5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611608611bf5565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161164d919061359c565b60405180910390a35050565b611661611bf5565b73ffffffffffffffffffffffffffffffffffffffff1661167f611188565b73ffffffffffffffffffffffffffffffffffffffff16146116d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116cc90613659565b60405180910390fd5b80600d8190555050565b6116ea848484611cb4565b6117098373ffffffffffffffffffffffffffffffffffffffff16612627565b156117515761171a8484848461264a565b611750576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b50505050565b61175f611bf5565b73ffffffffffffffffffffffffffffffffffffffff1661177d611188565b73ffffffffffffffffffffffffffffffffffffffff16146117d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ca90613659565b60405180910390fd5b600b548110611817576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180e90613699565b60405180910390fd5b60005481101561185c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185390613699565b60405180910390fd5b80600b8190555050565b606061187182611ba7565b6118a7576040517fa14c4b5000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006118b16127aa565b90506000815114156118d257604051806020016040528060008152506118fd565b806118dc8461283c565b6040516020016118ed9291906134f1565b6040516020818303038152906040525b915050919050565b61190d611bf5565b73ffffffffffffffffffffffffffffffffffffffff1661192b611188565b73ffffffffffffffffffffffffffffffffffffffff1614611981576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197890613659565b60405180910390fd5b6001601160006101000a81548160ff021916908315150217905550565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611a3a611bf5565b73ffffffffffffffffffffffffffffffffffffffff16611a58611188565b73ffffffffffffffffffffffffffffffffffffffff1614611aae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa590613659565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611b1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b15906135d9565b60405180910390fd5b611b2781612507565b50565b601160009054906101000a900460ff1681565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600081611bb2611caf565b11158015611bc1575060005482105b8015611bee575060046000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b600033905090565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600090565b6000611cbf8261227c565b90508373ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614611d2a576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008473ffffffffffffffffffffffffffffffffffffffff16611d4b611bf5565b73ffffffffffffffffffffffffffffffffffffffff161480611d7a5750611d7985611d74611bf5565b61199e565b5b80611dbf5750611d88611bf5565b73ffffffffffffffffffffffffffffffffffffffff16611da784610963565b73ffffffffffffffffffffffffffffffffffffffff16145b905080611df8576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611e5f576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611e6c858585600161299d565b611e7860008487611bfd565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600460008581526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550428160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060006001850190506000600460008381526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156120f85760005482146120f757878160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084602001518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b505050828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461216385858560016129a3565b5050505050565b804710156121ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a490613639565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff16826040516121d390613520565b60006040518083038185875af1925050503d8060008114612210576040519150601f19603f3d011682016040523d82523d6000602084013e612215565b606091505b5050905080612259576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161225090613619565b60405180910390fd5b505050565b6122788282604051806020016040528060008152506129a9565b5050565b612284612df1565b600082905080612292611caf565b116124d0576000548110156124cf576000600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff161515151581525050905080604001516124cd57600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146123b1578092505050612502565b5b6001156124cc57818060019003925050600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146124c7578092505050612502565b6123b2565b5b505b5b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461261c9190613829565b925050819055505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612670611bf5565b8786866040518563ffffffff1660e01b81526004016126929493929190613550565b602060405180830381600087803b1580156126ac57600080fd5b505af19250505080156126dd57506040513d601f19601f820116820180604052508101906126da91906131b7565b60015b612757573d806000811461270d576040519150601f19603f3d011682016040523d82523d6000602084013e612712565b606091505b5060008151141561274f576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b6060600c80546127b9906139f4565b80601f01602080910402602001604051908101604052809291908181526020018280546127e5906139f4565b80156128325780601f1061280757610100808354040283529160200191612832565b820191906000526020600020905b81548152906001019060200180831161281557829003601f168201915b5050505050905090565b60606000821415612884576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612998565b600082905060005b600082146128b657808061289f90613a57565b915050600a826128af919061387f565b915061288c565b60008167ffffffffffffffff8111156128d2576128d1613b8d565b5b6040519080825280601f01601f1916602001820160405280156129045781602001600182028036833780820191505090505b5090505b600085146129915760018261291d919061390a565b9150600a8561292c9190613aa0565b60306129389190613829565b60f81b81838151811061294e5761294d613b5e565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561298a919061387f565b9450612908565b8093505050505b919050565b50505050565b50505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612a16576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000831415612a51576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612a5e600085838661299d565b82600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555082600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550836004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600081905060008482019050612c1f8673ffffffffffffffffffffffffffffffffffffffff16612627565b15612ce4575b818673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612c94600087848060010195508761264a565b612cca576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b808210612c25578260005414612cdf57600080fd5b612d4f565b5b818060010192508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4808210612ce5575b816000819055505050612d6560008583866129a3565b50505050565b828054612d77906139f4565b90600052602060002090601f016020900481019282612d995760008555612de0565b82601f10612db257805160ff1916838001178555612de0565b82800160010185558215612de0579182015b82811115612ddf578251825591602001919060010190612dc4565b5b509050612ded9190612e34565b5090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b5b80821115612e4d576000816000905550600101612e35565b5090565b6000612e64612e5f84613779565b613754565b905082815260208101848484011115612e8057612e7f613bc1565b5b612e8b8482856139b2565b509392505050565b6000612ea6612ea1846137aa565b613754565b905082815260208101848484011115612ec257612ec1613bc1565b5b612ecd8482856139b2565b509392505050565b600081359050612ee481613e1c565b92915050565b600081359050612ef981613e33565b92915050565b600081359050612f0e81613e4a565b92915050565b600081519050612f2381613e4a565b92915050565b600082601f830112612f3e57612f3d613bbc565b5b8135612f4e848260208601612e51565b91505092915050565b600082601f830112612f6c57612f6b613bbc565b5b8135612f7c848260208601612e93565b91505092915050565b600081359050612f9481613e61565b92915050565b600060208284031215612fb057612faf613bcb565b5b6000612fbe84828501612ed5565b91505092915050565b60008060408385031215612fde57612fdd613bcb565b5b6000612fec85828601612ed5565b9250506020612ffd85828601612ed5565b9150509250929050565b6000806000606084860312156130205761301f613bcb565b5b600061302e86828701612ed5565b935050602061303f86828701612ed5565b925050604061305086828701612f85565b9150509250925092565b6000806000806080858703121561307457613073613bcb565b5b600061308287828801612ed5565b945050602061309387828801612ed5565b93505060406130a487828801612f85565b925050606085013567ffffffffffffffff8111156130c5576130c4613bc6565b5b6130d187828801612f29565b91505092959194509250565b600080604083850312156130f4576130f3613bcb565b5b600061310285828601612ed5565b925050602061311385828601612eea565b9150509250929050565b6000806040838503121561313457613133613bcb565b5b600061314285828601612ed5565b925050602061315385828601612f85565b9150509250929050565b60006020828403121561317357613172613bcb565b5b600061318184828501612eea565b91505092915050565b6000602082840312156131a05761319f613bcb565b5b60006131ae84828501612eff565b91505092915050565b6000602082840312156131cd576131cc613bcb565b5b60006131db84828501612f14565b91505092915050565b6000602082840312156131fa576131f9613bcb565b5b600082013567ffffffffffffffff81111561321857613217613bc6565b5b61322484828501612f57565b91505092915050565b60006020828403121561324357613242613bcb565b5b600061325184828501612f85565b91505092915050565b6132638161393e565b82525050565b61327281613950565b82525050565b6000613283826137db565b61328d81856137f1565b935061329d8185602086016139c1565b6132a681613bd0565b840191505092915050565b60006132bc826137e6565b6132c6818561380d565b93506132d68185602086016139c1565b6132df81613bd0565b840191505092915050565b60006132f5826137e6565b6132ff818561381e565b935061330f8185602086016139c1565b80840191505092915050565b600061332860268361380d565b915061333382613be1565b604082019050919050565b600061334b60148361380d565b915061335682613c30565b602082019050919050565b600061336e603a8361380d565b915061337982613c59565b604082019050919050565b6000613391601d8361380d565b915061339c82613ca8565b602082019050919050565b60006133b460058361381e565b91506133bf82613cd1565b600582019050919050565b60006133d760208361380d565b91506133e282613cfa565b602082019050919050565b60006133fa60138361380d565b915061340582613d23565b602082019050919050565b600061341d60168361380d565b915061342882613d4c565b602082019050919050565b600061344060108361380d565b915061344b82613d75565b602082019050919050565b6000613463600083613802565b915061346e82613d9e565b600082019050919050565b600061348660148361380d565b915061349182613da1565b602082019050919050565b60006134a9601f8361380d565b91506134b482613dca565b602082019050919050565b60006134cc60138361380d565b91506134d782613df3565b602082019050919050565b6134eb816139a8565b82525050565b60006134fd82856132ea565b915061350982846132ea565b9150613514826133a7565b91508190509392505050565b600061352b82613456565b9150819050919050565b600060208201905061354a600083018461325a565b92915050565b6000608082019050613565600083018761325a565b613572602083018661325a565b61357f60408301856134e2565b81810360608301526135918184613278565b905095945050505050565b60006020820190506135b16000830184613269565b92915050565b600060208201905081810360008301526135d181846132b1565b905092915050565b600060208201905081810360008301526135f28161331b565b9050919050565b600060208201905081810360008301526136128161333e565b9050919050565b6000602082019050818103600083015261363281613361565b9050919050565b6000602082019050818103600083015261365281613384565b9050919050565b60006020820190508181036000830152613672816133ca565b9050919050565b60006020820190508181036000830152613692816133ed565b9050919050565b600060208201905081810360008301526136b281613410565b9050919050565b600060208201905081810360008301526136d281613433565b9050919050565b600060208201905081810360008301526136f281613479565b9050919050565b600060208201905081810360008301526137128161349c565b9050919050565b60006020820190508181036000830152613732816134bf565b9050919050565b600060208201905061374e60008301846134e2565b92915050565b600061375e61376f565b905061376a8282613a26565b919050565b6000604051905090565b600067ffffffffffffffff82111561379457613793613b8d565b5b61379d82613bd0565b9050602081019050919050565b600067ffffffffffffffff8211156137c5576137c4613b8d565b5b6137ce82613bd0565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000613834826139a8565b915061383f836139a8565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561387457613873613ad1565b5b828201905092915050565b600061388a826139a8565b9150613895836139a8565b9250826138a5576138a4613b00565b5b828204905092915050565b60006138bb826139a8565b91506138c6836139a8565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156138ff576138fe613ad1565b5b828202905092915050565b6000613915826139a8565b9150613920836139a8565b92508282101561393357613932613ad1565b5b828203905092915050565b600061394982613988565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156139df5780820151818401526020810190506139c4565b838111156139ee576000848401525b50505050565b60006002820490506001821680613a0c57607f821691505b60208210811415613a2057613a1f613b2f565b5b50919050565b613a2f82613bd0565b810181811067ffffffffffffffff82111715613a4e57613a4d613b8d565b5b80604052505050565b6000613a62826139a8565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613a9557613a94613ad1565b5b600182019050919050565b6000613aab826139a8565b9150613ab6836139a8565b925082613ac657613ac5613b00565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f496e76616c6964206d696e7420616d6f756e7421000000000000000000000000600082015250565b7f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260008201527f6563697069656e74206d61792068617665207265766572746564000000000000602082015250565b7f416464726573733a20696e73756666696369656e742062616c616e6365000000600082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f53616c65206973206e6f74206163746976652100000000000000000000000000600082015250565b7f496e76616c6964206e6577206d617820737570706c7900000000000000000000600082015250565b7f4d657461646174612066726f7a656e2100000000000000000000000000000000600082015250565b50565b7f4d617820737570706c7920657863656564656421000000000000000000000000600082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f496e73756666696369656e742066756e64732100000000000000000000000000600082015250565b613e258161393e565b8114613e3057600080fd5b50565b613e3c81613950565b8114613e4757600080fd5b50565b613e538161395c565b8114613e5e57600080fd5b50565b613e6a816139a8565b8114613e7557600080fd5b5056fea2646970667358221220c6adb2d29560cf8fb380d8b3ddeb19fc4b1d9ab7022348f337ba9b1276544d6564736f6c634300080700330000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000000000000000000005000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d65645a396351786832477875534a666841786e51726867704c5a34444d4d424c666f78434c743837796377372f00000000000000000000
Deployed Bytecode
0x6080604052600436106102045760003560e01c8063715018a611610118578063a22cb465116100a0578063c87b56dd1161006f578063c87b56dd1461070a578063d111515d14610747578063e985e9c51461075e578063f2fde38b1461079b578063fdb4953a146107c457610204565b8063a22cb46514610666578063b0551ac41461068f578063b88d4fde146106b8578063c4e9374d146106e157610204565b80638d859f3e116100e75780638d859f3e146105a05780638da5cb5b146105cb57806391b7f5ed146105f657806395d89b411461061f578063a0712d681461064a57610204565b8063715018a61461050c57806376d02b7114610523578063841718a61461054e5780638b85e43d1461057757610204565b806332cb6b0c1161019b57806342842e0e1161016a57806342842e0e1461041757806355f804b314610440578063616cdb1e146104695780636352211e1461049257806370a08231146104cf57610204565b806332cb6b0c146103815780633ccfd60b146103ac5780634065b85f146103c3578063408cbf94146103ee57610204565b806309ef6527116101d757806309ef6527146102d757806310b0c0521461030257806318160ddd1461032d57806323b872dd1461035857610204565b806301ffc9a71461020957806306fdde0314610246578063081812fc14610271578063095ea7b3146102ae575b600080fd5b34801561021557600080fd5b50610230600480360381019061022b919061318a565b6107ef565b60405161023d919061359c565b60405180910390f35b34801561025257600080fd5b5061025b6108d1565b60405161026891906135b7565b60405180910390f35b34801561027d57600080fd5b506102986004803603810190610293919061322d565b610963565b6040516102a59190613535565b60405180910390f35b3480156102ba57600080fd5b506102d560048036038101906102d0919061311d565b6109df565b005b3480156102e357600080fd5b506102ec610ae4565b6040516102f99190613739565b60405180910390f35b34801561030e57600080fd5b50610317610aea565b6040516103249190613739565b60405180910390f35b34801561033957600080fd5b50610342610af0565b60405161034f9190613739565b60405180910390f35b34801561036457600080fd5b5061037f600480360381019061037a9190613007565b610b07565b005b34801561038d57600080fd5b50610396610b17565b6040516103a39190613739565b60405180910390f35b3480156103b857600080fd5b506103c1610b1d565b005b3480156103cf57600080fd5b506103d8610c21565b6040516103e59190613739565b60405180910390f35b3480156103fa57600080fd5b506104156004803603810190610410919061311d565b610c27565b005b34801561042357600080fd5b5061043e60048036038101906104399190613007565b610d56565b005b34801561044c57600080fd5b50610467600480360381019061046291906131e4565b610d76565b005b34801561047557600080fd5b50610490600480360381019061048b919061322d565b610e5c565b005b34801561049e57600080fd5b506104b960048036038101906104b4919061322d565b610ee2565b6040516104c69190613535565b60405180910390f35b3480156104db57600080fd5b506104f660048036038101906104f19190612f9a565b610ef8565b6040516105039190613739565b60405180910390f35b34801561051857600080fd5b50610521610fc8565b005b34801561052f57600080fd5b50610538611050565b604051610545919061359c565b60405180910390f35b34801561055a57600080fd5b506105756004803603810190610570919061315d565b611063565b005b34801561058357600080fd5b5061059e6004803603810190610599919061322d565b6110fc565b005b3480156105ac57600080fd5b506105b5611182565b6040516105c29190613739565b60405180910390f35b3480156105d757600080fd5b506105e0611188565b6040516105ed9190613535565b60405180910390f35b34801561060257600080fd5b5061061d6004803603810190610618919061322d565b6111b2565b005b34801561062b57600080fd5b50610634611238565b60405161064191906135b7565b60405180910390f35b610664600480360381019061065f919061322d565b6112ca565b005b34801561067257600080fd5b5061068d600480360381019061068891906130dd565b6114e1565b005b34801561069b57600080fd5b506106b660048036038101906106b1919061322d565b611659565b005b3480156106c457600080fd5b506106df60048036038101906106da919061305a565b6116df565b005b3480156106ed57600080fd5b506107086004803603810190610703919061322d565b611757565b005b34801561071657600080fd5b50610731600480360381019061072c919061322d565b611866565b60405161073e91906135b7565b60405180910390f35b34801561075357600080fd5b5061075c611905565b005b34801561076a57600080fd5b5061078560048036038101906107809190612fc7565b61199e565b604051610792919061359c565b60405180910390f35b3480156107a757600080fd5b506107c260048036038101906107bd9190612f9a565b611a32565b005b3480156107d057600080fd5b506107d9611b2a565b6040516107e6919061359c565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108ba57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806108ca57506108c982611b3d565b5b9050919050565b6060600280546108e0906139f4565b80601f016020809104026020016040519081016040528092919081815260200182805461090c906139f4565b80156109595780601f1061092e57610100808354040283529160200191610959565b820191906000526020600020905b81548152906001019060200180831161093c57829003601f168201915b5050505050905090565b600061096e82611ba7565b6109a4576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006109ea82610ee2565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a52576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a71611bf5565b73ffffffffffffffffffffffffffffffffffffffff1614610ad457610a9d81610a98611bf5565b61199e565b610ad3576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b610adf838383611bfd565b505050565b600e5481565b600d5481565b6000610afa611caf565b6001546000540303905090565b610b12838383611cb4565b505050565b600b5481565b610b25611bf5565b73ffffffffffffffffffffffffffffffffffffffff16610b43611188565b73ffffffffffffffffffffffffffffffffffffffff1614610b99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9090613659565b60405180910390fd5b60026009541415610bdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd6906136f9565b60405180910390fd5b60026009819055506000479050610c1673222192e401a8100ddf5be90b825c3c095ca1687d600183610c11919061387f565b61216a565b506001600981905550565b60105481565b80600081118015610c3a5750600e548111155b610c79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c70906135f9565b60405180910390fd5b600b5481600054610c8a9190613829565b1115610ccb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc2906136d9565b60405180910390fd5b610cd3611bf5565b73ffffffffffffffffffffffffffffffffffffffff16610cf1611188565b73ffffffffffffffffffffffffffffffffffffffff1614610d47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3e90613659565b60405180910390fd5b610d51838361225e565b505050565b610d71838383604051806020016040528060008152506116df565b505050565b610d7e611bf5565b73ffffffffffffffffffffffffffffffffffffffff16610d9c611188565b73ffffffffffffffffffffffffffffffffffffffff1614610df2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de990613659565b60405180910390fd5b601160009054906101000a900460ff1615610e42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e39906136b9565b60405180910390fd5b80600c9080519060200190610e58929190612d6b565b5050565b610e64611bf5565b73ffffffffffffffffffffffffffffffffffffffff16610e82611188565b73ffffffffffffffffffffffffffffffffffffffff1614610ed8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ecf90613659565b60405180910390fd5b80600e8190555050565b6000610eed8261227c565b600001519050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610f60576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b610fd0611bf5565b73ffffffffffffffffffffffffffffffffffffffff16610fee611188565b73ffffffffffffffffffffffffffffffffffffffff1614611044576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103b90613659565b60405180910390fd5b61104e6000612507565b565b600f60009054906101000a900460ff1681565b61106b611bf5565b73ffffffffffffffffffffffffffffffffffffffff16611089611188565b73ffffffffffffffffffffffffffffffffffffffff16146110df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d690613659565b60405180910390fd5b80600f60006101000a81548160ff02191690831515021790555050565b611104611bf5565b73ffffffffffffffffffffffffffffffffffffffff16611122611188565b73ffffffffffffffffffffffffffffffffffffffff1614611178576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116f90613659565b60405180910390fd5b8060108190555050565b600a5481565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6111ba611bf5565b73ffffffffffffffffffffffffffffffffffffffff166111d8611188565b73ffffffffffffffffffffffffffffffffffffffff161461122e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122590613659565b60405180910390fd5b80600a8190555050565b606060038054611247906139f4565b80601f0160208091040260200160405190810160405280929190818152602001828054611273906139f4565b80156112c05780601f10611295576101008083540402835291602001916112c0565b820191906000526020600020905b8154815290600101906020018083116112a357829003601f168201915b5050505050905090565b806000811180156112dd5750600e548111155b61131c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611313906135f9565b60405180910390fd5b600b548160005461132d9190613829565b111561136e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611365906136d9565b60405180910390fd5b600f60009054906101000a900460ff166113bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b490613679565b60405180910390fd5b600082600a546113cd91906138b0565b9050601054600054101561148f576000601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600d5461142a919061390a565b9050600081111561148d5780841061146657600a548161144a91906138b0565b82611455919061390a565b915061146133826125cd565b61148c565b600a548461147491906138b0565b8261147f919061390a565b915061148b33856125cd565b5b5b505b803410156114d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c990613719565b60405180910390fd5b6114dc338461225e565b505050565b6114e9611bf5565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561154e576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806007600061155b611bf5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611608611bf5565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161164d919061359c565b60405180910390a35050565b611661611bf5565b73ffffffffffffffffffffffffffffffffffffffff1661167f611188565b73ffffffffffffffffffffffffffffffffffffffff16146116d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116cc90613659565b60405180910390fd5b80600d8190555050565b6116ea848484611cb4565b6117098373ffffffffffffffffffffffffffffffffffffffff16612627565b156117515761171a8484848461264a565b611750576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b50505050565b61175f611bf5565b73ffffffffffffffffffffffffffffffffffffffff1661177d611188565b73ffffffffffffffffffffffffffffffffffffffff16146117d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ca90613659565b60405180910390fd5b600b548110611817576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180e90613699565b60405180910390fd5b60005481101561185c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185390613699565b60405180910390fd5b80600b8190555050565b606061187182611ba7565b6118a7576040517fa14c4b5000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006118b16127aa565b90506000815114156118d257604051806020016040528060008152506118fd565b806118dc8461283c565b6040516020016118ed9291906134f1565b6040516020818303038152906040525b915050919050565b61190d611bf5565b73ffffffffffffffffffffffffffffffffffffffff1661192b611188565b73ffffffffffffffffffffffffffffffffffffffff1614611981576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197890613659565b60405180910390fd5b6001601160006101000a81548160ff021916908315150217905550565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611a3a611bf5565b73ffffffffffffffffffffffffffffffffffffffff16611a58611188565b73ffffffffffffffffffffffffffffffffffffffff1614611aae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa590613659565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611b1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b15906135d9565b60405180910390fd5b611b2781612507565b50565b601160009054906101000a900460ff1681565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600081611bb2611caf565b11158015611bc1575060005482105b8015611bee575060046000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b600033905090565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600090565b6000611cbf8261227c565b90508373ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614611d2a576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008473ffffffffffffffffffffffffffffffffffffffff16611d4b611bf5565b73ffffffffffffffffffffffffffffffffffffffff161480611d7a5750611d7985611d74611bf5565b61199e565b5b80611dbf5750611d88611bf5565b73ffffffffffffffffffffffffffffffffffffffff16611da784610963565b73ffffffffffffffffffffffffffffffffffffffff16145b905080611df8576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611e5f576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611e6c858585600161299d565b611e7860008487611bfd565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600460008581526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550428160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060006001850190506000600460008381526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156120f85760005482146120f757878160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084602001518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b505050828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461216385858560016129a3565b5050505050565b804710156121ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a490613639565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff16826040516121d390613520565b60006040518083038185875af1925050503d8060008114612210576040519150601f19603f3d011682016040523d82523d6000602084013e612215565b606091505b5050905080612259576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161225090613619565b60405180910390fd5b505050565b6122788282604051806020016040528060008152506129a9565b5050565b612284612df1565b600082905080612292611caf565b116124d0576000548110156124cf576000600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff161515151581525050905080604001516124cd57600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146123b1578092505050612502565b5b6001156124cc57818060019003925050600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146124c7578092505050612502565b6123b2565b5b505b5b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461261c9190613829565b925050819055505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612670611bf5565b8786866040518563ffffffff1660e01b81526004016126929493929190613550565b602060405180830381600087803b1580156126ac57600080fd5b505af19250505080156126dd57506040513d601f19601f820116820180604052508101906126da91906131b7565b60015b612757573d806000811461270d576040519150601f19603f3d011682016040523d82523d6000602084013e612712565b606091505b5060008151141561274f576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b6060600c80546127b9906139f4565b80601f01602080910402602001604051908101604052809291908181526020018280546127e5906139f4565b80156128325780601f1061280757610100808354040283529160200191612832565b820191906000526020600020905b81548152906001019060200180831161281557829003601f168201915b5050505050905090565b60606000821415612884576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612998565b600082905060005b600082146128b657808061289f90613a57565b915050600a826128af919061387f565b915061288c565b60008167ffffffffffffffff8111156128d2576128d1613b8d565b5b6040519080825280601f01601f1916602001820160405280156129045781602001600182028036833780820191505090505b5090505b600085146129915760018261291d919061390a565b9150600a8561292c9190613aa0565b60306129389190613829565b60f81b81838151811061294e5761294d613b5e565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561298a919061387f565b9450612908565b8093505050505b919050565b50505050565b50505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612a16576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000831415612a51576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612a5e600085838661299d565b82600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555082600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550836004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600081905060008482019050612c1f8673ffffffffffffffffffffffffffffffffffffffff16612627565b15612ce4575b818673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612c94600087848060010195508761264a565b612cca576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b808210612c25578260005414612cdf57600080fd5b612d4f565b5b818060010192508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4808210612ce5575b816000819055505050612d6560008583866129a3565b50505050565b828054612d77906139f4565b90600052602060002090601f016020900481019282612d995760008555612de0565b82601f10612db257805160ff1916838001178555612de0565b82800160010185558215612de0579182015b82811115612ddf578251825591602001919060010190612dc4565b5b509050612ded9190612e34565b5090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b5b80821115612e4d576000816000905550600101612e35565b5090565b6000612e64612e5f84613779565b613754565b905082815260208101848484011115612e8057612e7f613bc1565b5b612e8b8482856139b2565b509392505050565b6000612ea6612ea1846137aa565b613754565b905082815260208101848484011115612ec257612ec1613bc1565b5b612ecd8482856139b2565b509392505050565b600081359050612ee481613e1c565b92915050565b600081359050612ef981613e33565b92915050565b600081359050612f0e81613e4a565b92915050565b600081519050612f2381613e4a565b92915050565b600082601f830112612f3e57612f3d613bbc565b5b8135612f4e848260208601612e51565b91505092915050565b600082601f830112612f6c57612f6b613bbc565b5b8135612f7c848260208601612e93565b91505092915050565b600081359050612f9481613e61565b92915050565b600060208284031215612fb057612faf613bcb565b5b6000612fbe84828501612ed5565b91505092915050565b60008060408385031215612fde57612fdd613bcb565b5b6000612fec85828601612ed5565b9250506020612ffd85828601612ed5565b9150509250929050565b6000806000606084860312156130205761301f613bcb565b5b600061302e86828701612ed5565b935050602061303f86828701612ed5565b925050604061305086828701612f85565b9150509250925092565b6000806000806080858703121561307457613073613bcb565b5b600061308287828801612ed5565b945050602061309387828801612ed5565b93505060406130a487828801612f85565b925050606085013567ffffffffffffffff8111156130c5576130c4613bc6565b5b6130d187828801612f29565b91505092959194509250565b600080604083850312156130f4576130f3613bcb565b5b600061310285828601612ed5565b925050602061311385828601612eea565b9150509250929050565b6000806040838503121561313457613133613bcb565b5b600061314285828601612ed5565b925050602061315385828601612f85565b9150509250929050565b60006020828403121561317357613172613bcb565b5b600061318184828501612eea565b91505092915050565b6000602082840312156131a05761319f613bcb565b5b60006131ae84828501612eff565b91505092915050565b6000602082840312156131cd576131cc613bcb565b5b60006131db84828501612f14565b91505092915050565b6000602082840312156131fa576131f9613bcb565b5b600082013567ffffffffffffffff81111561321857613217613bc6565b5b61322484828501612f57565b91505092915050565b60006020828403121561324357613242613bcb565b5b600061325184828501612f85565b91505092915050565b6132638161393e565b82525050565b61327281613950565b82525050565b6000613283826137db565b61328d81856137f1565b935061329d8185602086016139c1565b6132a681613bd0565b840191505092915050565b60006132bc826137e6565b6132c6818561380d565b93506132d68185602086016139c1565b6132df81613bd0565b840191505092915050565b60006132f5826137e6565b6132ff818561381e565b935061330f8185602086016139c1565b80840191505092915050565b600061332860268361380d565b915061333382613be1565b604082019050919050565b600061334b60148361380d565b915061335682613c30565b602082019050919050565b600061336e603a8361380d565b915061337982613c59565b604082019050919050565b6000613391601d8361380d565b915061339c82613ca8565b602082019050919050565b60006133b460058361381e565b91506133bf82613cd1565b600582019050919050565b60006133d760208361380d565b91506133e282613cfa565b602082019050919050565b60006133fa60138361380d565b915061340582613d23565b602082019050919050565b600061341d60168361380d565b915061342882613d4c565b602082019050919050565b600061344060108361380d565b915061344b82613d75565b602082019050919050565b6000613463600083613802565b915061346e82613d9e565b600082019050919050565b600061348660148361380d565b915061349182613da1565b602082019050919050565b60006134a9601f8361380d565b91506134b482613dca565b602082019050919050565b60006134cc60138361380d565b91506134d782613df3565b602082019050919050565b6134eb816139a8565b82525050565b60006134fd82856132ea565b915061350982846132ea565b9150613514826133a7565b91508190509392505050565b600061352b82613456565b9150819050919050565b600060208201905061354a600083018461325a565b92915050565b6000608082019050613565600083018761325a565b613572602083018661325a565b61357f60408301856134e2565b81810360608301526135918184613278565b905095945050505050565b60006020820190506135b16000830184613269565b92915050565b600060208201905081810360008301526135d181846132b1565b905092915050565b600060208201905081810360008301526135f28161331b565b9050919050565b600060208201905081810360008301526136128161333e565b9050919050565b6000602082019050818103600083015261363281613361565b9050919050565b6000602082019050818103600083015261365281613384565b9050919050565b60006020820190508181036000830152613672816133ca565b9050919050565b60006020820190508181036000830152613692816133ed565b9050919050565b600060208201905081810360008301526136b281613410565b9050919050565b600060208201905081810360008301526136d281613433565b9050919050565b600060208201905081810360008301526136f281613479565b9050919050565b600060208201905081810360008301526137128161349c565b9050919050565b60006020820190508181036000830152613732816134bf565b9050919050565b600060208201905061374e60008301846134e2565b92915050565b600061375e61376f565b905061376a8282613a26565b919050565b6000604051905090565b600067ffffffffffffffff82111561379457613793613b8d565b5b61379d82613bd0565b9050602081019050919050565b600067ffffffffffffffff8211156137c5576137c4613b8d565b5b6137ce82613bd0565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000613834826139a8565b915061383f836139a8565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561387457613873613ad1565b5b828201905092915050565b600061388a826139a8565b9150613895836139a8565b9250826138a5576138a4613b00565b5b828204905092915050565b60006138bb826139a8565b91506138c6836139a8565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156138ff576138fe613ad1565b5b828202905092915050565b6000613915826139a8565b9150613920836139a8565b92508282101561393357613932613ad1565b5b828203905092915050565b600061394982613988565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156139df5780820151818401526020810190506139c4565b838111156139ee576000848401525b50505050565b60006002820490506001821680613a0c57607f821691505b60208210811415613a2057613a1f613b2f565b5b50919050565b613a2f82613bd0565b810181811067ffffffffffffffff82111715613a4e57613a4d613b8d565b5b80604052505050565b6000613a62826139a8565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613a9557613a94613ad1565b5b600182019050919050565b6000613aab826139a8565b9150613ab6836139a8565b925082613ac657613ac5613b00565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f496e76616c6964206d696e7420616d6f756e7421000000000000000000000000600082015250565b7f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260008201527f6563697069656e74206d61792068617665207265766572746564000000000000602082015250565b7f416464726573733a20696e73756666696369656e742062616c616e6365000000600082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f53616c65206973206e6f74206163746976652100000000000000000000000000600082015250565b7f496e76616c6964206e6577206d617820737570706c7900000000000000000000600082015250565b7f4d657461646174612066726f7a656e2100000000000000000000000000000000600082015250565b50565b7f4d617820737570706c7920657863656564656421000000000000000000000000600082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f496e73756666696369656e742066756e64732100000000000000000000000000600082015250565b613e258161393e565b8114613e3057600080fd5b50565b613e3c81613950565b8114613e4757600080fd5b50565b613e538161395c565b8114613e5e57600080fd5b50565b613e6a816139a8565b8114613e7557600080fd5b5056fea2646970667358221220c6adb2d29560cf8fb380d8b3ddeb19fc4b1d9ab7022348f337ba9b1276544d6564736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000000000000000000005000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d65645a396351786832477875534a666841786e51726867704c5a34444d4d424c666f78434c743837796377372f00000000000000000000
-----Decoded View---------------
Arg [0] : price (uint256): 0
Arg [1] : maxSupply (uint256): 320
Arg [2] : baseUri (string): ipfs://QmedZ9cQxh2GxuSJfhAxnQrhgpLZ4DMMBLfoxCLt87ycw7/
Arg [3] : freeMintAllowance (uint256): 5
Arg [4] : maxMintPerTx (uint256): 5
Arg [5] : isSaleActive (bool): True
Arg [6] : freeMintIsAllowedUntil (uint256): 320
-----Encoded View---------------
10 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000140
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000140
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [8] : 697066733a2f2f516d65645a396351786832477875534a666841786e51726867
Arg [9] : 704c5a34444d4d424c666f78434c743837796377372f00000000000000000000
Deployed Bytecode Sourcemap
50232:4384:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31337:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34452:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35964:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35526:372;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50476:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50428:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30577:312;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36829:170;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50366:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54439:174;;;;;;;;;;;;;:::i;:::-;;50553:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54131:176;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37070:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51967:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52316:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34260:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31706:206;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7522:103;;;;;;;;;;;;;:::i;:::-;;50520:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52446:109;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52563:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50339:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6871:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51600:96;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34621:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53194:929;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36240:287;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52144:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37326:370;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51704:255;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34796:326;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52748:86;;;;;;;;;;;;;:::i;:::-;;36598:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7780:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50601:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31337:305;31439:4;31491:25;31476:40;;;:11;:40;;;;:105;;;;31548:33;31533:48;;;:11;:48;;;;31476:105;:158;;;;31598:36;31622:11;31598:23;:36::i;:::-;31476:158;31456:178;;31337:305;;;:::o;34452:100::-;34506:13;34539:5;34532:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34452:100;:::o;35964:204::-;36032:7;36057:16;36065:7;36057;:16::i;:::-;36052:64;;36082:34;;;;;;;;;;;;;;36052:64;36136:15;:24;36152:7;36136:24;;;;;;;;;;;;;;;;;;;;;36129:31;;35964:204;;;:::o;35526:372::-;35599:13;35615:24;35631:7;35615:15;:24::i;:::-;35599:40;;35660:5;35654:11;;:2;:11;;;35650:48;;;35674:24;;;;;;;;;;;;;;35650:48;35731:5;35715:21;;:12;:10;:12::i;:::-;:21;;;35711:139;;35742:37;35759:5;35766:12;:10;:12::i;:::-;35742:16;:37::i;:::-;35738:112;;35803:35;;;;;;;;;;;;;;35738:112;35711:139;35862:28;35871:2;35875:7;35884:5;35862:8;:28::i;:::-;35588:310;35526:372;;:::o;50476:37::-;;;;:::o;50428:41::-;;;;:::o;30577:312::-;30630:7;30855:15;:13;:15::i;:::-;30840:12;;30824:13;;:28;:46;30817:53;;30577:312;:::o;36829:170::-;36963:28;36973:4;36979:2;36983:7;36963:9;:28::i;:::-;36829:170;;;:::o;50366:25::-;;;;:::o;54439:174::-;7102:12;:10;:12::i;:::-;7091:23;;:7;:5;:7::i;:::-;:23;;;7083:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1845:1:::1;2443:7;;:19;;2435:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;1845:1;2576:7;:18;;;;54500:15:::2;54518:21;54500:39;;54550:55;54388:42;54603:1;54593:7;:11;;;;:::i;:::-;54550:17;:55::i;:::-;54489:124;1801:1:::1;2755:7;:22;;;;54439:174::o:0;50553:41::-;;;;:::o;54131:176::-;54224:11;52954:1;52940:11;:15;:56;;;;;52974:22;;52959:11;:37;;52940:56;52918:126;;;;;;;;;;;;:::i;:::-;;;;;;;;;53108:10;;53093:11;53077:13;;:27;;;;:::i;:::-;:41;;53055:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;7102:12:::1;:10;:12::i;:::-;7091:23;;:7;:5;:7::i;:::-;:23;;;7083:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54272:27:::2;54282:3;54287:11;54272:9;:27::i;:::-;54131:176:::0;;;:::o;37070:185::-;37208:39;37225:4;37231:2;37235:7;37208:39;;;;;;;;;;;;:16;:39::i;:::-;37070:185;;;:::o;51967:169::-;7102:12;:10;:12::i;:::-;7091:23;;:7;:5;:7::i;:::-;:23;;;7083:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52056:15:::1;;;;;;;;;;;52055:16;52047:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;52114:14;52103:8;:25;;;;;;;;;;;;:::i;:::-;;51967:169:::0;:::o;52316:122::-;7102:12;:10;:12::i;:::-;7091:23;;:7;:5;:7::i;:::-;:23;;;7083:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52418:12:::1;52393:22;:37;;;;52316:122:::0;:::o;34260:125::-;34324:7;34351:21;34364:7;34351:12;:21::i;:::-;:26;;;34344:33;;34260:125;;;:::o;31706:206::-;31770:7;31811:1;31794:19;;:5;:19;;;31790:60;;;31822:28;;;;;;;;;;;;;;31790:60;31876:12;:19;31889:5;31876:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;31868:36;;31861:43;;31706:206;;;:::o;7522:103::-;7102:12;:10;:12::i;:::-;7091:23;;:7;:5;:7::i;:::-;:23;;;7083:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7587:30:::1;7614:1;7587:18;:30::i;:::-;7522:103::o:0;50520:26::-;;;;;;;;;;;;;:::o;52446:109::-;7102:12;:10;:12::i;:::-;7091:23;;:7;:5;:7::i;:::-;:23;;;7083:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52535:12:::1;52518:14;;:29;;;;;;;;;;;;;;;;;;52446:109:::0;:::o;52563:177::-;7102:12;:10;:12::i;:::-;7091:23;;:7;:5;:7::i;:::-;:23;;;7083:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52710:22:::1;52681:26;:51;;;;52563:177:::0;:::o;50339:20::-;;;;:::o;6871:87::-;6917:7;6944:6;;;;;;;;;;;6937:13;;6871:87;:::o;51600:96::-;7102:12;:10;:12::i;:::-;7091:23;;:7;:5;:7::i;:::-;:23;;;7083:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51677:11:::1;51669:5;:19;;;;51600:96:::0;:::o;34621:104::-;34677:13;34710:7;34703:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34621:104;:::o;53194:929::-;53286:11;52954:1;52940:11;:15;:56;;;;;52974:22;;52959:11;:37;;52940:56;52918:126;;;;;;;;;;;;:::i;:::-;;;;;;;;;53108:10;;53093:11;53077:13;;:27;;;;:::i;:::-;:41;;53055:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;53323:14:::1;;;;;;;;;;;53315:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;53374:13;53398:11;53390:5;;:19;;;;:::i;:::-;53374:35;;53442:26;;53426:13;;:42;53422:584;;;53485:25;53559:16;:28;53576:10;53559:28;;;;;;;;;;;;;;;;53513:26;;:74;;;;:::i;:::-;53485:102;;53626:1;53606:17;:21;53602:393;;;53667:17;53652:11;:32;53648:332;;53738:5;;53718:17;:25;;;;:::i;:::-;53709:34;;;;;:::i;:::-;;;53766:50;53786:10;53798:17;53766:19;:50::i;:::-;53648:332;;;53888:5;;53874:11;:19;;;;:::i;:::-;53865:28;;;;;:::i;:::-;;;53916:44;53936:10;53948:11;53916:19;:44::i;:::-;53648:332;53602:393;53470:536;53422:584;54039:5;54026:9;:18;;54018:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;54081:34;54091:10;54103:11;54081:9;:34::i;:::-;53304:819;53194:929:::0;;:::o;36240:287::-;36351:12;:10;:12::i;:::-;36339:24;;:8;:24;;;36335:54;;;36372:17;;;;;;;;;;;;;;36335:54;36447:8;36402:18;:32;36421:12;:10;:12::i;:::-;36402:32;;;;;;;;;;;;;;;:42;36435:8;36402:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;36500:8;36471:48;;36486:12;:10;:12::i;:::-;36471:48;;;36510:8;36471:48;;;;;;:::i;:::-;;;;;;;;36240:287;;:::o;52144:164::-;7102:12;:10;:12::i;:::-;7091:23;;:7;:5;:7::i;:::-;:23;;;7083:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52283:17:::1;52254:26;:46;;;;52144:164:::0;:::o;37326:370::-;37493:28;37503:4;37509:2;37513:7;37493:9;:28::i;:::-;37536:15;:2;:13;;;:15::i;:::-;37532:157;;;37557:56;37588:4;37594:2;37598:7;37607:5;37557:30;:56::i;:::-;37553:136;;37637:40;;;;;;;;;;;;;;37553:136;37532:157;37326:370;;;;:::o;51704:255::-;7102:12;:10;:12::i;:::-;7091:23;;:7;:5;:7::i;:::-;:23;;;7083:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51803:10:::1;;51788:12;:25;51780:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;51875:13;;51859:12;:29;;51851:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;51939:12;51926:10;:25;;;;51704:255:::0;:::o;34796:326::-;34869:13;34900:16;34908:7;34900;:16::i;:::-;34895:59;;34925:29;;;;;;;;;;;;;;34895:59;34967:21;34991:10;:8;:10::i;:::-;34967:34;;35044:1;35025:7;35019:21;:26;;:95;;;;;;;;;;;;;;;;;35072:7;35081:18;:7;:16;:18::i;:::-;35055:54;;;;;;;;;:::i;:::-;;;;;;;;;;;;;35019:95;35012:102;;;34796:326;;;:::o;52748:86::-;7102:12;:10;:12::i;:::-;7091:23;;:7;:5;:7::i;:::-;:23;;;7083:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52822:4:::1;52804:15;;:22;;;;;;;;;;;;;;;;;;52748:86::o:0;36598:164::-;36695:4;36719:18;:25;36738:5;36719:25;;;;;;;;;;;;;;;:35;36745:8;36719:35;;;;;;;;;;;;;;;;;;;;;;;;;36712:42;;36598:164;;;;:::o;7780:201::-;7102:12;:10;:12::i;:::-;7091:23;;:7;:5;:7::i;:::-;:23;;;7083:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7889:1:::1;7869:22;;:8;:22;;;;7861:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;7945:28;7964:8;7945:18;:28::i;:::-;7780:201:::0;:::o;50601:27::-;;;;;;;;;;;;;:::o;19678:157::-;19763:4;19802:25;19787:40;;;:11;:40;;;;19780:47;;19678:157;;;:::o;37951:174::-;38008:4;38051:7;38032:15;:13;:15::i;:::-;:26;;:53;;;;;38072:13;;38062:7;:23;38032:53;:85;;;;;38090:11;:20;38102:7;38090:20;;;;;;;;;;;:27;;;;;;;;;;;;38089:28;38032:85;38025:92;;37951:174;;;:::o;5595:98::-;5648:7;5675:10;5668:17;;5595:98;:::o;47173:196::-;47315:2;47288:15;:24;47304:7;47288:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;47353:7;47349:2;47333:28;;47342:5;47333:28;;;;;;;;;;;;47173:196;;;:::o;30351:92::-;30407:7;30351:92;:::o;42121:2130::-;42236:35;42274:21;42287:7;42274:12;:21::i;:::-;42236:59;;42334:4;42312:26;;:13;:18;;;:26;;;42308:67;;42347:28;;;;;;;;;;;;;;42308:67;42388:22;42430:4;42414:20;;:12;:10;:12::i;:::-;:20;;;:73;;;;42451:36;42468:4;42474:12;:10;:12::i;:::-;42451:16;:36::i;:::-;42414:73;:126;;;;42528:12;:10;:12::i;:::-;42504:36;;:20;42516:7;42504:11;:20::i;:::-;:36;;;42414:126;42388:153;;42559:17;42554:66;;42585:35;;;;;;;;;;;;;;42554:66;42649:1;42635:16;;:2;:16;;;42631:52;;;42660:23;;;;;;;;;;;;;;42631:52;42696:43;42718:4;42724:2;42728:7;42737:1;42696:21;:43::i;:::-;42804:35;42821:1;42825:7;42834:4;42804:8;:35::i;:::-;43165:1;43135:12;:18;43148:4;43135:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43209:1;43181:12;:16;43194:2;43181:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43227:31;43261:11;:20;43273:7;43261:20;;;;;;;;;;;43227:54;;43312:2;43296:8;:13;;;:18;;;;;;;;;;;;;;;;;;43362:15;43329:8;:23;;;:49;;;;;;;;;;;;;;;;;;43630:19;43662:1;43652:7;:11;43630:33;;43678:31;43712:11;:24;43724:11;43712:24;;;;;;;;;;;43678:58;;43780:1;43755:27;;:8;:13;;;;;;;;;;;;:27;;;43751:384;;;43965:13;;43950:11;:28;43946:174;;44019:4;44003:8;:13;;;:20;;;;;;;;;;;;;;;;;;44072:13;:28;;;44046:8;:23;;;:54;;;;;;;;;;;;;;;;;;43946:174;43751:384;43110:1036;;;44182:7;44178:2;44163:27;;44172:4;44163:27;;;;;;;;;;;;44201:42;44222:4;44228:2;44232:7;44241:1;44201:20;:42::i;:::-;42225:2026;;42121:2130;;;:::o;10833:317::-;10948:6;10923:21;:31;;10915:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;11002:12;11020:9;:14;;11042:6;11020:33;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11001:52;;;11072:7;11064:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;10904:246;10833:317;;:::o;38209:104::-;38278:27;38288:2;38292:8;38278:27;;;;;;;;;;;;:9;:27::i;:::-;38209:104;;:::o;33087:1111::-;33149:21;;:::i;:::-;33183:12;33198:7;33183:22;;33266:4;33247:15;:13;:15::i;:::-;:23;33243:888;;33283:13;;33276:4;:20;33272:859;;;33317:31;33351:11;:17;33363:4;33351:17;;;;;;;;;;;33317:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33392:9;:16;;;33387:729;;33463:1;33437:28;;:9;:14;;;:28;;;33433:101;;33501:9;33494:16;;;;;;33433:101;33836:261;33843:4;33836:261;;;33876:6;;;;;;;;33921:11;:17;33933:4;33921:17;;;;;;;;;;;33909:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33995:1;33969:28;;:9;:14;;;:28;;;33965:109;;34037:9;34030:16;;;;;;33965:109;33836:261;;;33387:729;33298:833;33272:859;33243:888;34159:31;;;;;;;;;;;;;;33087:1111;;;;:::o;8141:191::-;8215:16;8234:6;;;;;;;;;;;8215:25;;8260:8;8251:6;;:17;;;;;;;;;;;;;;;;;;8315:8;8284:40;;8305:8;8284:40;;;;;;;;;;;;8204:128;8141:191;:::o;51309:120::-;51416:5;51388:16;:24;51405:6;51388:24;;;;;;;;;;;;;;;;:33;;;;;;;:::i;:::-;;;;;;;;51309:120;;:::o;9572:326::-;9632:4;9889:1;9867:7;:19;;;:23;9860:30;;9572:326;;;:::o;47861:667::-;48024:4;48061:2;48045:36;;;48082:12;:10;:12::i;:::-;48096:4;48102:7;48111:5;48045:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;48041:480;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48296:1;48279:6;:13;:18;48275:235;;;48325:40;;;;;;;;;;;;;;48275:235;48468:6;48462:13;48453:6;48449:2;48445:15;48438:38;48041:480;48174:45;;;48164:55;;;:6;:55;;;;48157:62;;;47861:667;;;;;;:::o;51460:109::-;51520:13;51553:8;51546:15;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51460:109;:::o;3157:723::-;3213:13;3443:1;3434:5;:10;3430:53;;;3461:10;;;;;;;;;;;;;;;;;;;;;3430:53;3493:12;3508:5;3493:20;;3524:14;3549:78;3564:1;3556:4;:9;3549:78;;3582:8;;;;;:::i;:::-;;;;3613:2;3605:10;;;;;:::i;:::-;;;3549:78;;;3637:19;3669:6;3659:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3637:39;;3687:154;3703:1;3694:5;:10;3687:154;;3731:1;3721:11;;;;;:::i;:::-;;;3798:2;3790:5;:10;;;;:::i;:::-;3777:2;:24;;;;:::i;:::-;3764:39;;3747:6;3754;3747:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;3827:2;3818:11;;;;;:::i;:::-;;;3687:154;;;3865:6;3851:21;;;;;3157:723;;;;:::o;49176:159::-;;;;;:::o;49994:158::-;;;;;:::o;38686:1749::-;38809:20;38832:13;;38809:36;;38874:1;38860:16;;:2;:16;;;38856:48;;;38885:19;;;;;;;;;;;;;;38856:48;38931:1;38919:8;:13;38915:44;;;38941:18;;;;;;;;;;;;;;38915:44;38972:61;39002:1;39006:2;39010:12;39024:8;38972:21;:61::i;:::-;39345:8;39310:12;:16;39323:2;39310:16;;;;;;;;;;;;;;;:24;;;:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39409:8;39369:12;:16;39382:2;39369:16;;;;;;;;;;;;;;;:29;;;:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39468:2;39435:11;:25;39447:12;39435:25;;;;;;;;;;;:30;;;:35;;;;;;;;;;;;;;;;;;39535:15;39485:11;:25;39497:12;39485:25;;;;;;;;;;;:40;;;:66;;;;;;;;;;;;;;;;;;39568:20;39591:12;39568:35;;39618:11;39647:8;39632:12;:23;39618:37;;39676:15;:2;:13;;;:15::i;:::-;39672:631;;;39712:313;39768:12;39764:2;39743:38;;39760:1;39743:38;;;;;;;;;;;;39809:69;39848:1;39852:2;39856:14;;;;;;39872:5;39809:30;:69::i;:::-;39804:174;;39914:40;;;;;;;;;;;;;;39804:174;40020:3;40005:12;:18;39712:313;;40106:12;40089:13;;:29;40085:43;;40120:8;;;40085:43;39672:631;;;40169:119;40225:14;;;;;;40221:2;40200:40;;40217:1;40200:40;;;;;;;;;;;;40283:3;40268:12;:18;40169:119;;39672:631;40333:12;40317:13;:28;;;;39285:1072;;40367:60;40396:1;40400:2;40404:12;40418:8;40367:20;:60::i;:::-;38798:1637;38686:1749;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;986:133::-;1029:5;1067:6;1054:20;1045:29;;1083:30;1107:5;1083:30;:::i;:::-;986:133;;;;:::o;1125:137::-;1170:5;1208:6;1195:20;1186:29;;1224:32;1250:5;1224:32;:::i;:::-;1125:137;;;;:::o;1268:141::-;1324:5;1355:6;1349:13;1340:22;;1371:32;1397:5;1371:32;:::i;:::-;1268:141;;;;:::o;1428:338::-;1483:5;1532:3;1525:4;1517:6;1513:17;1509:27;1499:122;;1540:79;;:::i;:::-;1499:122;1657:6;1644:20;1682:78;1756:3;1748:6;1741:4;1733:6;1729:17;1682:78;:::i;:::-;1673:87;;1489:277;1428:338;;;;:::o;1786:340::-;1842:5;1891:3;1884:4;1876:6;1872:17;1868:27;1858:122;;1899:79;;:::i;:::-;1858:122;2016:6;2003:20;2041:79;2116:3;2108:6;2101:4;2093:6;2089:17;2041:79;:::i;:::-;2032:88;;1848:278;1786:340;;;;:::o;2132:139::-;2178:5;2216:6;2203:20;2194:29;;2232:33;2259:5;2232:33;:::i;:::-;2132:139;;;;:::o;2277:329::-;2336:6;2385:2;2373:9;2364:7;2360:23;2356:32;2353:119;;;2391:79;;:::i;:::-;2353:119;2511:1;2536:53;2581:7;2572:6;2561:9;2557:22;2536:53;:::i;:::-;2526:63;;2482:117;2277:329;;;;:::o;2612:474::-;2680:6;2688;2737:2;2725:9;2716:7;2712:23;2708:32;2705:119;;;2743:79;;:::i;:::-;2705:119;2863:1;2888:53;2933:7;2924:6;2913:9;2909:22;2888:53;:::i;:::-;2878:63;;2834:117;2990:2;3016:53;3061:7;3052:6;3041:9;3037:22;3016:53;:::i;:::-;3006:63;;2961:118;2612:474;;;;;:::o;3092:619::-;3169:6;3177;3185;3234:2;3222:9;3213:7;3209:23;3205:32;3202:119;;;3240:79;;:::i;:::-;3202:119;3360:1;3385:53;3430:7;3421:6;3410:9;3406:22;3385:53;:::i;:::-;3375:63;;3331:117;3487:2;3513:53;3558:7;3549:6;3538:9;3534:22;3513:53;:::i;:::-;3503:63;;3458:118;3615:2;3641:53;3686:7;3677:6;3666:9;3662:22;3641:53;:::i;:::-;3631:63;;3586:118;3092:619;;;;;:::o;3717:943::-;3812:6;3820;3828;3836;3885:3;3873:9;3864:7;3860:23;3856:33;3853:120;;;3892:79;;:::i;:::-;3853:120;4012:1;4037:53;4082:7;4073:6;4062:9;4058:22;4037:53;:::i;:::-;4027:63;;3983:117;4139:2;4165:53;4210:7;4201:6;4190:9;4186:22;4165:53;:::i;:::-;4155:63;;4110:118;4267:2;4293:53;4338:7;4329:6;4318:9;4314:22;4293:53;:::i;:::-;4283:63;;4238:118;4423:2;4412:9;4408:18;4395:32;4454:18;4446:6;4443:30;4440:117;;;4476:79;;:::i;:::-;4440:117;4581:62;4635:7;4626:6;4615:9;4611:22;4581:62;:::i;:::-;4571:72;;4366:287;3717:943;;;;;;;:::o;4666:468::-;4731:6;4739;4788:2;4776:9;4767:7;4763:23;4759:32;4756:119;;;4794:79;;:::i;:::-;4756:119;4914:1;4939:53;4984:7;4975:6;4964:9;4960:22;4939:53;:::i;:::-;4929:63;;4885:117;5041:2;5067:50;5109:7;5100:6;5089:9;5085:22;5067:50;:::i;:::-;5057:60;;5012:115;4666:468;;;;;:::o;5140:474::-;5208:6;5216;5265:2;5253:9;5244:7;5240:23;5236:32;5233:119;;;5271:79;;:::i;:::-;5233:119;5391:1;5416:53;5461:7;5452:6;5441:9;5437:22;5416:53;:::i;:::-;5406:63;;5362:117;5518:2;5544:53;5589:7;5580:6;5569:9;5565:22;5544:53;:::i;:::-;5534:63;;5489:118;5140:474;;;;;:::o;5620:323::-;5676:6;5725:2;5713:9;5704:7;5700:23;5696:32;5693:119;;;5731:79;;:::i;:::-;5693:119;5851:1;5876:50;5918:7;5909:6;5898:9;5894:22;5876:50;:::i;:::-;5866:60;;5822:114;5620:323;;;;:::o;5949:327::-;6007:6;6056:2;6044:9;6035:7;6031:23;6027:32;6024:119;;;6062:79;;:::i;:::-;6024:119;6182:1;6207:52;6251:7;6242:6;6231:9;6227:22;6207:52;:::i;:::-;6197:62;;6153:116;5949:327;;;;:::o;6282:349::-;6351:6;6400:2;6388:9;6379:7;6375:23;6371:32;6368:119;;;6406:79;;:::i;:::-;6368:119;6526:1;6551:63;6606:7;6597:6;6586:9;6582:22;6551:63;:::i;:::-;6541:73;;6497:127;6282:349;;;;:::o;6637:509::-;6706:6;6755:2;6743:9;6734:7;6730:23;6726:32;6723:119;;;6761:79;;:::i;:::-;6723:119;6909:1;6898:9;6894:17;6881:31;6939:18;6931:6;6928:30;6925:117;;;6961:79;;:::i;:::-;6925:117;7066:63;7121:7;7112:6;7101:9;7097:22;7066:63;:::i;:::-;7056:73;;6852:287;6637:509;;;;:::o;7152:329::-;7211:6;7260:2;7248:9;7239:7;7235:23;7231:32;7228:119;;;7266:79;;:::i;:::-;7228:119;7386:1;7411:53;7456:7;7447:6;7436:9;7432:22;7411:53;:::i;:::-;7401:63;;7357:117;7152:329;;;;:::o;7487:118::-;7574:24;7592:5;7574:24;:::i;:::-;7569:3;7562:37;7487:118;;:::o;7611:109::-;7692:21;7707:5;7692:21;:::i;:::-;7687:3;7680:34;7611:109;;:::o;7726:360::-;7812:3;7840:38;7872:5;7840:38;:::i;:::-;7894:70;7957:6;7952:3;7894:70;:::i;:::-;7887:77;;7973:52;8018:6;8013:3;8006:4;7999:5;7995:16;7973:52;:::i;:::-;8050:29;8072:6;8050:29;:::i;:::-;8045:3;8041:39;8034:46;;7816:270;7726:360;;;;:::o;8092:364::-;8180:3;8208:39;8241:5;8208:39;:::i;:::-;8263:71;8327:6;8322:3;8263:71;:::i;:::-;8256:78;;8343:52;8388:6;8383:3;8376:4;8369:5;8365:16;8343:52;:::i;:::-;8420:29;8442:6;8420:29;:::i;:::-;8415:3;8411:39;8404:46;;8184:272;8092:364;;;;:::o;8462:377::-;8568:3;8596:39;8629:5;8596:39;:::i;:::-;8651:89;8733:6;8728:3;8651:89;:::i;:::-;8644:96;;8749:52;8794:6;8789:3;8782:4;8775:5;8771:16;8749:52;:::i;:::-;8826:6;8821:3;8817:16;8810:23;;8572:267;8462:377;;;;:::o;8845:366::-;8987:3;9008:67;9072:2;9067:3;9008:67;:::i;:::-;9001:74;;9084:93;9173:3;9084:93;:::i;:::-;9202:2;9197:3;9193:12;9186:19;;8845:366;;;:::o;9217:::-;9359:3;9380:67;9444:2;9439:3;9380:67;:::i;:::-;9373:74;;9456:93;9545:3;9456:93;:::i;:::-;9574:2;9569:3;9565:12;9558:19;;9217:366;;;:::o;9589:::-;9731:3;9752:67;9816:2;9811:3;9752:67;:::i;:::-;9745:74;;9828:93;9917:3;9828:93;:::i;:::-;9946:2;9941:3;9937:12;9930:19;;9589:366;;;:::o;9961:::-;10103:3;10124:67;10188:2;10183:3;10124:67;:::i;:::-;10117:74;;10200:93;10289:3;10200:93;:::i;:::-;10318:2;10313:3;10309:12;10302:19;;9961:366;;;:::o;10333:400::-;10493:3;10514:84;10596:1;10591:3;10514:84;:::i;:::-;10507:91;;10607:93;10696:3;10607:93;:::i;:::-;10725:1;10720:3;10716:11;10709:18;;10333:400;;;:::o;10739:366::-;10881:3;10902:67;10966:2;10961:3;10902:67;:::i;:::-;10895:74;;10978:93;11067:3;10978:93;:::i;:::-;11096:2;11091:3;11087:12;11080:19;;10739:366;;;:::o;11111:::-;11253:3;11274:67;11338:2;11333:3;11274:67;:::i;:::-;11267:74;;11350:93;11439:3;11350:93;:::i;:::-;11468:2;11463:3;11459:12;11452:19;;11111:366;;;:::o;11483:::-;11625:3;11646:67;11710:2;11705:3;11646:67;:::i;:::-;11639:74;;11722:93;11811:3;11722:93;:::i;:::-;11840:2;11835:3;11831:12;11824:19;;11483:366;;;:::o;11855:::-;11997:3;12018:67;12082:2;12077:3;12018:67;:::i;:::-;12011:74;;12094:93;12183:3;12094:93;:::i;:::-;12212:2;12207:3;12203:12;12196:19;;11855:366;;;:::o;12227:398::-;12386:3;12407:83;12488:1;12483:3;12407:83;:::i;:::-;12400:90;;12499:93;12588:3;12499:93;:::i;:::-;12617:1;12612:3;12608:11;12601:18;;12227:398;;;:::o;12631:366::-;12773:3;12794:67;12858:2;12853:3;12794:67;:::i;:::-;12787:74;;12870:93;12959:3;12870:93;:::i;:::-;12988:2;12983:3;12979:12;12972:19;;12631:366;;;:::o;13003:::-;13145:3;13166:67;13230:2;13225:3;13166:67;:::i;:::-;13159:74;;13242:93;13331:3;13242:93;:::i;:::-;13360:2;13355:3;13351:12;13344:19;;13003:366;;;:::o;13375:::-;13517:3;13538:67;13602:2;13597:3;13538:67;:::i;:::-;13531:74;;13614:93;13703:3;13614:93;:::i;:::-;13732:2;13727:3;13723:12;13716:19;;13375:366;;;:::o;13747:118::-;13834:24;13852:5;13834:24;:::i;:::-;13829:3;13822:37;13747:118;;:::o;13871:701::-;14152:3;14174:95;14265:3;14256:6;14174:95;:::i;:::-;14167:102;;14286:95;14377:3;14368:6;14286:95;:::i;:::-;14279:102;;14398:148;14542:3;14398:148;:::i;:::-;14391:155;;14563:3;14556:10;;13871:701;;;;;:::o;14578:379::-;14762:3;14784:147;14927:3;14784:147;:::i;:::-;14777:154;;14948:3;14941:10;;14578:379;;;:::o;14963:222::-;15056:4;15094:2;15083:9;15079:18;15071:26;;15107:71;15175:1;15164:9;15160:17;15151:6;15107:71;:::i;:::-;14963:222;;;;:::o;15191:640::-;15386:4;15424:3;15413:9;15409:19;15401:27;;15438:71;15506:1;15495:9;15491:17;15482:6;15438:71;:::i;:::-;15519:72;15587:2;15576:9;15572:18;15563:6;15519:72;:::i;:::-;15601;15669:2;15658:9;15654:18;15645:6;15601:72;:::i;:::-;15720:9;15714:4;15710:20;15705:2;15694:9;15690:18;15683:48;15748:76;15819:4;15810:6;15748:76;:::i;:::-;15740:84;;15191:640;;;;;;;:::o;15837:210::-;15924:4;15962:2;15951:9;15947:18;15939:26;;15975:65;16037:1;16026:9;16022:17;16013:6;15975:65;:::i;:::-;15837:210;;;;:::o;16053:313::-;16166:4;16204:2;16193:9;16189:18;16181:26;;16253:9;16247:4;16243:20;16239:1;16228:9;16224:17;16217:47;16281:78;16354:4;16345:6;16281:78;:::i;:::-;16273:86;;16053:313;;;;:::o;16372:419::-;16538:4;16576:2;16565:9;16561:18;16553:26;;16625:9;16619:4;16615:20;16611:1;16600:9;16596:17;16589:47;16653:131;16779:4;16653:131;:::i;:::-;16645:139;;16372:419;;;:::o;16797:::-;16963:4;17001:2;16990:9;16986:18;16978:26;;17050:9;17044:4;17040:20;17036:1;17025:9;17021:17;17014:47;17078:131;17204:4;17078:131;:::i;:::-;17070:139;;16797:419;;;:::o;17222:::-;17388:4;17426:2;17415:9;17411:18;17403:26;;17475:9;17469:4;17465:20;17461:1;17450:9;17446:17;17439:47;17503:131;17629:4;17503:131;:::i;:::-;17495:139;;17222:419;;;:::o;17647:::-;17813:4;17851:2;17840:9;17836:18;17828:26;;17900:9;17894:4;17890:20;17886:1;17875:9;17871:17;17864:47;17928:131;18054:4;17928:131;:::i;:::-;17920:139;;17647:419;;;:::o;18072:::-;18238:4;18276:2;18265:9;18261:18;18253:26;;18325:9;18319:4;18315:20;18311:1;18300:9;18296:17;18289:47;18353:131;18479:4;18353:131;:::i;:::-;18345:139;;18072:419;;;:::o;18497:::-;18663:4;18701:2;18690:9;18686:18;18678:26;;18750:9;18744:4;18740:20;18736:1;18725:9;18721:17;18714:47;18778:131;18904:4;18778:131;:::i;:::-;18770:139;;18497:419;;;:::o;18922:::-;19088:4;19126:2;19115:9;19111:18;19103:26;;19175:9;19169:4;19165:20;19161:1;19150:9;19146:17;19139:47;19203:131;19329:4;19203:131;:::i;:::-;19195:139;;18922:419;;;:::o;19347:::-;19513:4;19551:2;19540:9;19536:18;19528:26;;19600:9;19594:4;19590:20;19586:1;19575:9;19571:17;19564:47;19628:131;19754:4;19628:131;:::i;:::-;19620:139;;19347:419;;;:::o;19772:::-;19938:4;19976:2;19965:9;19961:18;19953:26;;20025:9;20019:4;20015:20;20011:1;20000:9;19996:17;19989:47;20053:131;20179:4;20053:131;:::i;:::-;20045:139;;19772:419;;;:::o;20197:::-;20363:4;20401:2;20390:9;20386:18;20378:26;;20450:9;20444:4;20440:20;20436:1;20425:9;20421:17;20414:47;20478:131;20604:4;20478:131;:::i;:::-;20470:139;;20197:419;;;:::o;20622:::-;20788:4;20826:2;20815:9;20811:18;20803:26;;20875:9;20869:4;20865:20;20861:1;20850:9;20846:17;20839:47;20903:131;21029:4;20903:131;:::i;:::-;20895:139;;20622:419;;;:::o;21047:222::-;21140:4;21178:2;21167:9;21163:18;21155:26;;21191:71;21259:1;21248:9;21244:17;21235:6;21191:71;:::i;:::-;21047:222;;;;:::o;21275:129::-;21309:6;21336:20;;:::i;:::-;21326:30;;21365:33;21393:4;21385:6;21365:33;:::i;:::-;21275:129;;;:::o;21410:75::-;21443:6;21476:2;21470:9;21460:19;;21410:75;:::o;21491:307::-;21552:4;21642:18;21634:6;21631:30;21628:56;;;21664:18;;:::i;:::-;21628:56;21702:29;21724:6;21702:29;:::i;:::-;21694:37;;21786:4;21780;21776:15;21768:23;;21491:307;;;:::o;21804:308::-;21866:4;21956:18;21948:6;21945:30;21942:56;;;21978:18;;:::i;:::-;21942:56;22016:29;22038:6;22016:29;:::i;:::-;22008:37;;22100:4;22094;22090:15;22082:23;;21804:308;;;:::o;22118:98::-;22169:6;22203:5;22197:12;22187:22;;22118:98;;;:::o;22222:99::-;22274:6;22308:5;22302:12;22292:22;;22222:99;;;:::o;22327:168::-;22410:11;22444:6;22439:3;22432:19;22484:4;22479:3;22475:14;22460:29;;22327:168;;;;:::o;22501:147::-;22602:11;22639:3;22624:18;;22501:147;;;;:::o;22654:169::-;22738:11;22772:6;22767:3;22760:19;22812:4;22807:3;22803:14;22788:29;;22654:169;;;;:::o;22829:148::-;22931:11;22968:3;22953:18;;22829:148;;;;:::o;22983:305::-;23023:3;23042:20;23060:1;23042:20;:::i;:::-;23037:25;;23076:20;23094:1;23076:20;:::i;:::-;23071:25;;23230:1;23162:66;23158:74;23155:1;23152:81;23149:107;;;23236:18;;:::i;:::-;23149:107;23280:1;23277;23273:9;23266:16;;22983:305;;;;:::o;23294:185::-;23334:1;23351:20;23369:1;23351:20;:::i;:::-;23346:25;;23385:20;23403:1;23385:20;:::i;:::-;23380:25;;23424:1;23414:35;;23429:18;;:::i;:::-;23414:35;23471:1;23468;23464:9;23459:14;;23294:185;;;;:::o;23485:348::-;23525:7;23548:20;23566:1;23548:20;:::i;:::-;23543:25;;23582:20;23600:1;23582:20;:::i;:::-;23577:25;;23770:1;23702:66;23698:74;23695:1;23692:81;23687:1;23680:9;23673:17;23669:105;23666:131;;;23777:18;;:::i;:::-;23666:131;23825:1;23822;23818:9;23807:20;;23485:348;;;;:::o;23839:191::-;23879:4;23899:20;23917:1;23899:20;:::i;:::-;23894:25;;23933:20;23951:1;23933:20;:::i;:::-;23928:25;;23972:1;23969;23966:8;23963:34;;;23977:18;;:::i;:::-;23963:34;24022:1;24019;24015:9;24007:17;;23839:191;;;;:::o;24036:96::-;24073:7;24102:24;24120:5;24102:24;:::i;:::-;24091:35;;24036:96;;;:::o;24138:90::-;24172:7;24215:5;24208:13;24201:21;24190:32;;24138:90;;;:::o;24234:149::-;24270:7;24310:66;24303:5;24299:78;24288:89;;24234:149;;;:::o;24389:126::-;24426:7;24466:42;24459:5;24455:54;24444:65;;24389:126;;;:::o;24521:77::-;24558:7;24587:5;24576:16;;24521:77;;;:::o;24604:154::-;24688:6;24683:3;24678;24665:30;24750:1;24741:6;24736:3;24732:16;24725:27;24604:154;;;:::o;24764:307::-;24832:1;24842:113;24856:6;24853:1;24850:13;24842:113;;;24941:1;24936:3;24932:11;24926:18;24922:1;24917:3;24913:11;24906:39;24878:2;24875:1;24871:10;24866:15;;24842:113;;;24973:6;24970:1;24967:13;24964:101;;;25053:1;25044:6;25039:3;25035:16;25028:27;24964:101;24813:258;24764:307;;;:::o;25077:320::-;25121:6;25158:1;25152:4;25148:12;25138:22;;25205:1;25199:4;25195:12;25226:18;25216:81;;25282:4;25274:6;25270:17;25260:27;;25216:81;25344:2;25336:6;25333:14;25313:18;25310:38;25307:84;;;25363:18;;:::i;:::-;25307:84;25128:269;25077:320;;;:::o;25403:281::-;25486:27;25508:4;25486:27;:::i;:::-;25478:6;25474:40;25616:6;25604:10;25601:22;25580:18;25568:10;25565:34;25562:62;25559:88;;;25627:18;;:::i;:::-;25559:88;25667:10;25663:2;25656:22;25446:238;25403:281;;:::o;25690:233::-;25729:3;25752:24;25770:5;25752:24;:::i;:::-;25743:33;;25798:66;25791:5;25788:77;25785:103;;;25868:18;;:::i;:::-;25785:103;25915:1;25908:5;25904:13;25897:20;;25690:233;;;:::o;25929:176::-;25961:1;25978:20;25996:1;25978:20;:::i;:::-;25973:25;;26012:20;26030:1;26012:20;:::i;:::-;26007:25;;26051:1;26041:35;;26056:18;;:::i;:::-;26041:35;26097:1;26094;26090:9;26085:14;;25929:176;;;;:::o;26111:180::-;26159:77;26156:1;26149:88;26256:4;26253:1;26246:15;26280:4;26277:1;26270:15;26297:180;26345:77;26342:1;26335:88;26442:4;26439:1;26432:15;26466:4;26463:1;26456:15;26483:180;26531:77;26528:1;26521:88;26628:4;26625:1;26618:15;26652:4;26649:1;26642:15;26669:180;26717:77;26714:1;26707:88;26814:4;26811:1;26804:15;26838:4;26835:1;26828:15;26855:180;26903:77;26900:1;26893:88;27000:4;26997:1;26990:15;27024:4;27021:1;27014:15;27041:117;27150:1;27147;27140:12;27164:117;27273:1;27270;27263:12;27287:117;27396:1;27393;27386:12;27410:117;27519:1;27516;27509:12;27533:102;27574:6;27625:2;27621:7;27616:2;27609:5;27605:14;27601:28;27591:38;;27533:102;;;:::o;27641:225::-;27781:34;27777:1;27769:6;27765:14;27758:58;27850:8;27845:2;27837:6;27833:15;27826:33;27641:225;:::o;27872:170::-;28012:22;28008:1;28000:6;27996:14;27989:46;27872:170;:::o;28048:245::-;28188:34;28184:1;28176:6;28172:14;28165:58;28257:28;28252:2;28244:6;28240:15;28233:53;28048:245;:::o;28299:179::-;28439:31;28435:1;28427:6;28423:14;28416:55;28299:179;:::o;28484:155::-;28624:7;28620:1;28612:6;28608:14;28601:31;28484:155;:::o;28645:182::-;28785:34;28781:1;28773:6;28769:14;28762:58;28645:182;:::o;28833:169::-;28973:21;28969:1;28961:6;28957:14;28950:45;28833:169;:::o;29008:172::-;29148:24;29144:1;29136:6;29132:14;29125:48;29008:172;:::o;29186:166::-;29326:18;29322:1;29314:6;29310:14;29303:42;29186:166;:::o;29358:114::-;;:::o;29478:170::-;29618:22;29614:1;29606:6;29602:14;29595:46;29478:170;:::o;29654:181::-;29794:33;29790:1;29782:6;29778:14;29771:57;29654:181;:::o;29841:169::-;29981:21;29977:1;29969:6;29965:14;29958:45;29841:169;:::o;30016:122::-;30089:24;30107:5;30089:24;:::i;:::-;30082:5;30079:35;30069:63;;30128:1;30125;30118:12;30069:63;30016:122;:::o;30144:116::-;30214:21;30229:5;30214:21;:::i;:::-;30207:5;30204:32;30194:60;;30250:1;30247;30240:12;30194:60;30144:116;:::o;30266:120::-;30338:23;30355:5;30338:23;:::i;:::-;30331:5;30328:34;30318:62;;30376:1;30373;30366:12;30318:62;30266:120;:::o;30392:122::-;30465:24;30483:5;30465:24;:::i;:::-;30458:5;30455:35;30445:63;;30504:1;30501;30494:12;30445:63;30392:122;:::o
Swarm Source
ipfs://c6adb2d29560cf8fb380d8b3ddeb19fc4b1d9ab7022348f337ba9b1276544d65
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.