Feature Tip: Add private address tag to any address under My Name Tag !
ERC-721
NFT
Overview
Max Total Supply
0 LUCKYZEROS
Holders
1,116
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
1 LUCKYZEROSLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
LuckyZerosNFT
Compiler Version
v0.8.0+commit.c7dfd78e
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-12-22 */ // SPDX-License-Identifier: LGPL-3.0-or-later pragma solidity ^0.8.0; /** * NNNNNNNNNNRNNNNNNNNN@RNNRNNRNNNNRNNNNNRNNNRNNRNNNNNNNNN@RNNNNNNNNNNRNNNNNNNNNRNNRNNNNNNNNN@NNNRNNNNNNNRNNNNNRNNNRNNN * NNNNNEC\*~~^*(uHNNNNNNNNNHCl\\lsuENNNGi\*\i2RNNN@NNNNNHSs(!!!\iu5QRNNNNQ5SS5HNNNRS\~::^(2Ru(!!!!*luHNRNN5i\!^^*l2RNN * RNNNl``` ````sNNNNNNNS'`` ````uN2``` ```'5NNNNRu!'```` `````!CRE~``````~GR^```` ```i``` ``'HNNi``` ``uRN * RNN2`` ```!RRNNN@N~` `*N* `,GNN5~``` `^l `iC`` ``lH'`` ```2NN: `!QNN * NNN\`` ``5RNNRNNH`` `(N\` ``*R2````` ``*` `s~`` ```sNNE~` ```\RE` ``*NNNN * NRN~`` ``(RRRNNNN2`` `sNs``` ``'Q,`` `'~```````'E,`` ~``` ```(RNRRQl``` ```,`` ````iNRRNR * RRR~`` ```(RRRRRRRNC`` `SRE``` ```C``` ``~QNR2*'`,(ERi`` ``SRRRRRNE^``` ``~5NNRRRR * RRN^`` ```RNNRNNNNNC`` `ENN,` ```i` ``sRNNNNNHNNNNE'` ```,*CQNNNNs``` `*RNNNRRRN * RRNl`` ``'QNH2s*~!u2`` `5NR'`` ``,2``` ``!NNN2^'``!GN@s` `````*GNNNl`` !NNNNNRNRN * RRN5`` ```'```````s`` `~i*``` ``*Q'`` ``!(:``` `'GNQ` `````` ```^@NN2` `iNNNRRRNNN * RRNN!` `(^` `'GNC`` ``(NNi ``^l'` ``~GNNR~`` 'ENNRRNNRN * RNN@G` `CE:``` ```2NNNi```` ``uNNQ,`` `'Sl:``'*2NNNNs``` `^@NRRNNRN * N@@N@C``` ``````'lNNRs:`````` `````'\ENNNN@E\`````` ``````^SNN@NS`` ````,G@@NR@@@@@@@C```````````\@N@NNNNN * NNNN@@5(~'`````,~*luGRN@N@@NGC(!~,```,~*iSR@@NNN@NN@Q2i\^:''',~*l2H@NNNN@NS,```:\uN@NNNNNNN@@NN@Gi*^:,:~(sGNNN@N@@NN * RRRRNNRRNNNRRNNNRNNRRNNRRNNNRRRRRNNNNNRNNRRRRRRRRRRRNNRRNNNNNNNRRRRRRRRRRRNRQQRNRRRRRRRNNRRNNRRNNNRRRRRRRRRRRNNRRRNN * RNNNNNNNRRNRHEEEEEEHQNNNNNNNNRNRHEEEHQRNNNRRRRRRRRRNNNRQEEHQRNNNNRRRRRRNNRRRRNRQRRNRRRRNNNRNNRRNNNNNRQQQQRNNNRRRRRNN * NNRG\:````````````````,*uRNHi!:````````'~!sSRNNGs\!^:,```````'^lSRNNRRNNR2i!,``````:*sGRNNRNNNRGi!:'```````,~\uHRNNN * NNN:`` ```iH,` ``~Hi`` `^ERRRQs,``` ``~sRNNN5~`` ``'2NNN * NNN:`` ```l!`` ```s`` ``'GNG'````` ```:ENu``` ```'5RN * RRNC`` `````` ``:S'`` ````````*C`` ``````` `lQ,` `,E,` ``````'GNN * RNNNS^,,~*iss,` ````(Q5`` `SHGul(2Nl`` ``C@R5, ((` `````````` ``\~``` ``~^^^~^(GNNN * RNNNNNNNNNQ2^`` `'lGNRS`` ``` ``'5\`` `GNNN* `C:` ``*sS52(`` ``:G~`` `:~::~*CQNNNN * NNRRRNNR2!````` ``~2RRNNNG`` ````` `'S\`` `*ES(` ``*R:` `5@NNNNNG` ``:RR2l!:'`` `````````'SNNN * RRNNRRs,```` `uESCssuHQ'`` `:isl!~^sN\`` ````````'sRR\` 'RNNRRRNR'` ``\R2(!^!\\\`` `,ENR * RRNN5:``` ```` ```C!`` !GG2i(lSN(`` ` ``,GRNNE'`` `lRNNNNNC`` ``'G!``` ```` `2NR * RRNu````` ```` ``'2`` ````````GC`` ``,``` ```!5NNN2``` ``:(Cus*` ```'S2``` `,QRR * NNN,`` `H\``` ```(5`` ``lS'` ``*QNRG!````````````````^ENQ^``` ``'GNNR * NNN!`````````````````````^RR*``````````````'SR!````````2Ni```````'(QRNNRS!````` ````'\5RNRRQs:`````` ``````'(HNNNR * NNNNE2Csil((\\\\\\(lisuSHRRRNECl(*^!!!\(iuGRNNQC\\\(sSQNNN5iliC2GRNNRRNNNNR5C(\\\(iuHNNNNNRRRNNQSCl*!!!!!*lC5QRNNNNR * NNNNNNNNNNNRNNNNNNNNNNNNNNRRNNNNNNNNNNNNNNNNNNNNRNNNNN@NNNNNNNNNNNNNRRNNNNNNNNNNNNNNNNNNNNRNNNNNNNNNNNNNNNNNNNNNNNNR * A PureBase Studio Collection */ /** * @title Counters * @author Matt Condon (@shrugs) * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number * of elements in a mapping, issuing ERC721 ids, or counting request ids. * * Include with `using Counters for Counters.Counter;` */ library Counters { struct Counter { // This variable should never be directly accessed by users of the library: interactions must be restricted to // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add // this feature: see https://github.com/ethereum/solidity/issues/4637 uint256 _value; // default: 0 } function current(Counter storage counter) internal view returns (uint256) { return counter._value; } function increment(Counter storage counter) internal { unchecked { counter._value += 1; } } function decrement(Counter storage counter) internal { uint256 value = counter._value; require(value > 0, "Counter: decrement overflow"); unchecked { counter._value = value - 1; } } function reset(Counter storage counter) internal { counter._value = 0; } } // File: @openzeppelin/contracts/utils/math/SafeMath.sol pragma solidity ^0.8.0; // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is no longer needed starting with Solidity 0.8. The compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } // File: @openzeppelin/contracts/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 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() { _setOwner(_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 { _setOwner(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"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/security/Pausable.sol pragma solidity ^0.8.0; /** * @dev Contract module which allows children to implement an emergency stop * mechanism that can be triggered by an authorized account. * * This module is used through inheritance. It will make available the * modifiers `whenNotPaused` and `whenPaused`, which can be applied to * the functions of your contract. Note that they will not be pausable by * simply including this module, only once the modifiers are put in place. */ abstract contract Pausable is Context { /** * @dev Emitted when the pause is triggered by `account`. */ event Paused(address account); /** * @dev Emitted when the pause is lifted by `account`. */ event Unpaused(address account); bool private _paused; /** * @dev Initializes the contract in unpaused state. */ constructor() { _paused = false; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view virtual returns (bool) { return _paused; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { require(!paused(), "Pausable: paused"); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { require(paused(), "Pausable: not paused"); _; } /** * @dev Triggers stopped state. * * Requirements: * * - The contract must not be paused. */ function _pause() internal virtual whenNotPaused { _paused = true; emit Paused(_msgSender()); } /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function _unpause() internal virtual whenPaused { _paused = false; emit Unpaused(_msgSender()); } } // File: @openzeppelin/contracts/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 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/utils/Strings.sol pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/contracts/utils/Address.sol pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/token/ERC721/ERC721.sol pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { require(operator != _msgSender(), "ERC721: approve to caller"); _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 { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } pragma solidity ^0.8.0; contract LuckyZerosNFT is ERC721, Ownable, Pausable { using SafeMath for uint256; using Counters for Counters.Counter; Counters.Counter private tokenTRACK; address public proxyRegistryAddress; mapping(address => bool) public projectProxy; uint256 private _PRICE = 0.06 ether; uint256 private _MAXLucky = 20; uint256 private _MAXPresaleLucky = 10; mapping(address => uint256) private _tokensMintedByAddress; uint256 public constant MAXSUPPLY = 8888; uint256 private _MAXPRESALESUPPLY = 6000; bool public minting; bool public presaleminting; string private _baseTokenURI = 'https://nft.luckyzeros.io/'; string public provenance; constructor() ERC721("Lucky Zeros NFT", "LUCKYZEROS") { pause(true); } function flipMint() public onlyOwner { minting = !minting; } function flipPresaleMint() public onlyOwner { presaleminting = !presaleminting; } function setProxyRegistryAddress(address _proxyRegistryAddress) external onlyOwner { proxyRegistryAddress = _proxyRegistryAddress; } function mintReserves(uint _qty) public onlyOwner { for(uint i; i < _qty; i++){ tokenTRACK.increment(); _safeMint(msg.sender, tokenTRACK.current()); } } function flipProxyState(address proxyAddress) public onlyOwner { projectProxy[proxyAddress] = !projectProxy[proxyAddress]; } function mintNFTS(uint256 _qty) public payable { require(minting, "Mint closed"); require(_qty <= _MAXLucky, "More than allowed per transaction"); require(_tokensMintedByAddress[_msgSender()] + _qty < _MAXLucky + _MAXPresaleLucky + 1, "More than allowed per wallet"); require(getItemPrice().mul(_qty) == msg.value, "Not enough ETH"); require(tokenTRACK.current().add(_qty) < MAXSUPPLY + 1, "More than max supply"); _tokensMintedByAddress[_msgSender()] += _qty; for (uint256 i; i < _qty; i++) { tokenTRACK.increment(); _safeMint(msg.sender, tokenTRACK.current()); } } function presaleMint(uint256 _qty) public payable { require(presaleminting, "Pre-Sale Mint closed"); require(_qty <= _MAXPresaleLucky, "More than allowed per transaction"); require(_tokensMintedByAddress[_msgSender()] + _qty < _MAXPresaleLucky + 1, "More than allowed per wallet"); require(getItemPrice().mul(_qty) == msg.value, "Not enough ETH"); require(tokenTRACK.current().add(_qty) < _MAXPRESALESUPPLY + 1, "More than max supply"); _tokensMintedByAddress[_msgSender()] += _qty; for (uint256 i; i < _qty; i++) { tokenTRACK.increment(); _safeMint(msg.sender, tokenTRACK.current()); } } function getItemPrice() public view returns (uint256) { return _PRICE; } function setItemPrice(uint256 _price) public onlyOwner { _PRICE = _price; } function getNumPerMint() public view returns (uint256) { return _MAXLucky; } function setNumPerMint(uint256 _max) public onlyOwner { _MAXLucky = _max; } function setPreSaleLimit(uint256 _presalelimit) public onlyOwner { _MAXPRESALESUPPLY = _presalelimit; } function _totalSupply() internal view returns (uint256) { return tokenTRACK.current(); } function totalMinted() public view returns (uint256) { return _totalSupply(); } function pause(bool val) public onlyOwner { if (val == true) { _pause(); return; } _unpause(); } function _baseURI() internal view virtual override returns (string memory) { return _baseTokenURI; } function setBaseURI(string memory baseURI) public onlyOwner { _baseTokenURI = baseURI; } function setProvenance(string memory hash) public onlyOwner { provenance = hash; } function withdraw() public payable onlyOwner { uint256 balance = address(this).balance; require(balance > 0); _withdraw(msg.sender, balance); } function _withdraw(address _address, uint256 _amount) private { (bool success, ) = _address.call{value: _amount}(""); require(success, "Transfer failed."); } function isApprovedForAll(address _owner, address operator) public view override returns (bool) { OpenSeaProxyRegistry proxyRegistry = OpenSeaProxyRegistry(proxyRegistryAddress); if (address(proxyRegistry.proxies(_owner)) == operator || projectProxy[operator]) return true; return super.isApprovedForAll(_owner, operator); } } contract OwnableDelegateProxy { } contract OpenSeaProxyRegistry { mapping(address => OwnableDelegateProxy) public proxies; }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"MAXSUPPLY","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":"flipMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"flipPresaleMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"proxyAddress","type":"address"}],"name":"flipProxyState","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":[],"name":"getItemPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNumPerMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_qty","type":"uint256"}],"name":"mintNFTS","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_qty","type":"uint256"}],"name":"mintReserves","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"minting","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":[{"internalType":"bool","name":"val","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_qty","type":"uint256"}],"name":"presaleMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"presaleminting","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"projectProxy","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"provenance","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"proxyRegistryAddress","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":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_price","type":"uint256"}],"name":"setItemPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_max","type":"uint256"}],"name":"setNumPerMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_presalelimit","type":"uint256"}],"name":"setPreSaleLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"hash","type":"string"}],"name":"setProvenance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_proxyRegistryAddress","type":"address"}],"name":"setProxyRegistryAddress","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":"totalMinted","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":"payable","type":"function"}]
Contract Creation Code
66d529ae9e860000600a9081556014600b55600c55611770600e5560c0604052601a60808190527f68747470733a2f2f6e66742e6c75636b797a65726f732e696f2f00000000000060a09081526200005b9160109190620002e4565b503480156200006957600080fd5b50604080518082018252600f81526e131d58dade4816995c9bdcc8139195608a1b60208083019182528351808501909452600a8452694c55434b595a45524f5360b01b908401528151919291620000c391600091620002e4565b508051620000d9906001906020840190620002e4565b505050620000f6620000f06200011560201b60201c565b62000119565b6006805460ff60a01b191690556200010f60016200016b565b62000471565b3390565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6200017562000115565b6001600160a01b031662000188620001e3565b6001600160a01b031614620001ba5760405162461bcd60e51b8152600401620001b190620003ff565b60405180910390fd5b60018115151415620001d657620001d0620001f2565b620001e0565b620001e062000273565b50565b6006546001600160a01b031690565b620001fc620002d4565b156200021c5760405162461bcd60e51b8152600401620001b190620003d5565b6006805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586200025a62000115565b6040516200026991906200038a565b60405180910390a1565b6200027d620002d4565b6200029c5760405162461bcd60e51b8152600401620001b1906200039e565b6006805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6200025a62000115565b600654600160a01b900460ff1690565b828054620002f29062000434565b90600052602060002090601f01602090048101928262000316576000855562000361565b82601f106200033157805160ff191683800117855562000361565b8280016001018555821562000361579182015b828111156200036157825182559160200191906001019062000344565b506200036f92915062000373565b5090565b5b808211156200036f576000815560010162000374565b6001600160a01b0391909116815260200190565b60208082526014908201527f5061757361626c653a206e6f7420706175736564000000000000000000000000604082015260600190565b60208082526010908201526f14185d5cd8589b194e881c185d5cd95960821b604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6002810460018216806200044957607f821691505b602082108114156200046b57634e487b7160e01b600052602260045260246000fd5b50919050565b61287880620004816000396000f3fe60806040526004361061023b5760003560e01c8063715018a61161012e578063c9b298f1116100ab578063d4c427631161006f578063d4c4276314610608578063e985e9c514610628578063f2fde38b14610648578063f73c814b14610668578063ffe630b5146106885761023b565b8063c9b298f11461058b578063ca57dfdd1461059e578063cd7c0326146105be578063d26ea6c0146105d3578063d2ed5c59146105f35761023b565b806398ca7795116100f257806398ca7795146104f6578063a22cb46514610516578063a2309ff814610536578063b88d4fde1461054b578063c87b56dd1461056b5761023b565b8063715018a61461048d578063758b4e86146104a25780637dc2268c146104b75780638da5cb5b146104cc57806395d89b41146104e15761023b565b80632c95cd5c116101bc578063586fb42011610180578063586fb420146104055780635bab26e2146104185780635c975abb146104385780636352211e1461044d57806370a082311461046d5761023b565b80632c95cd5c146103935780633ccfd60b146103a857806342842e0e146103b057806348eacce7146103d057806355f804b3146103e55761023b565b80630b1f703c116102035780630b1f703c146103075780630f7309e81461032757806314f0aae61461033c5780632083ad821461035157806323b872dd146103735761023b565b806301ffc9a71461024057806302329a291461027657806306fdde0314610298578063081812fc146102ba578063095ea7b3146102e7575b600080fd5b34801561024c57600080fd5b5061026061025b366004611f4c565b6106a8565b60405161026d91906120ad565b60405180910390f35b34801561028257600080fd5b50610296610291366004611f32565b6106f0565b005b3480156102a457600080fd5b506102ad61075b565b60405161026d91906120b8565b3480156102c657600080fd5b506102da6102d5366004611fe6565b6107ed565b60405161026d919061205c565b3480156102f357600080fd5b50610296610302366004611f07565b610830565b34801561031357600080fd5b50610296610322366004611fe6565b6108c8565b34801561033357600080fd5b506102ad61090c565b34801561034857600080fd5b5061026061099a565b34801561035d57600080fd5b506103666109a8565b60405161026d91906126d4565b34801561037f57600080fd5b5061029661038e366004611e16565b6109ae565b34801561039f57600080fd5b506102966109e6565b610296610a42565b3480156103bc57600080fd5b506102966103cb366004611e16565b610a96565b3480156103dc57600080fd5b50610366610ab1565b3480156103f157600080fd5b50610296610400366004611fa0565b610ab7565b610296610413366004611fe6565b610b0d565b34801561042457600080fd5b50610260610433366004611dc2565b610cab565b34801561044457600080fd5b50610260610cc0565b34801561045957600080fd5b506102da610468366004611fe6565b610cd0565b34801561047957600080fd5b50610366610488366004611dc2565b610d05565b34801561049957600080fd5b50610296610d49565b3480156104ae57600080fd5b50610366610d94565b3480156104c357600080fd5b50610260610d9a565b3480156104d857600080fd5b506102da610da3565b3480156104ed57600080fd5b506102ad610db2565b34801561050257600080fd5b50610296610511366004611fe6565b610dc1565b34801561052257600080fd5b50610296610531366004611ed3565b610e05565b34801561054257600080fd5b50610366610ed3565b34801561055757600080fd5b50610296610566366004611e56565b610ee2565b34801561057757600080fd5b506102ad610586366004611fe6565b610f21565b610296610599366004611fe6565b610fa4565b3480156105aa57600080fd5b506102966105b9366004611fe6565b61112a565b3480156105ca57600080fd5b506102da61119e565b3480156105df57600080fd5b506102966105ee366004611dc2565b6111ad565b3480156105ff57600080fd5b5061029661120e565b34801561061457600080fd5b50610296610623366004611fe6565b611261565b34801561063457600080fd5b50610260610643366004611dde565b6112a5565b34801561065457600080fd5b50610296610663366004611dc2565b61137e565b34801561067457600080fd5b50610296610683366004611dc2565b6113ec565b34801561069457600080fd5b506102966106a3366004611fa0565b611454565b60006001600160e01b031982166380ac58cd60e01b14806106d957506001600160e01b03198216635b5e139f60e01b145b806106e857506106e8826114a6565b90505b919050565b6106f86114bf565b6001600160a01b0316610709610da3565b6001600160a01b0316146107385760405162461bcd60e51b815260040161072f906124b7565b60405180910390fd5b600181151514156107505761074b6114c3565b610758565b61075861153b565b50565b60606000805461076a9061276b565b80601f01602080910402602001604051908101604052809291908181526020018280546107969061276b565b80156107e35780601f106107b8576101008083540402835291602001916107e3565b820191906000526020600020905b8154815290600101906020018083116107c657829003601f168201915b5050505050905090565b60006107f882611595565b6108145760405162461bcd60e51b815260040161072f9061243d565b506000908152600460205260409020546001600160a01b031690565b600061083b82610cd0565b9050806001600160a01b0316836001600160a01b0316141561086f5760405162461bcd60e51b815260040161072f906125f3565b806001600160a01b03166108816114bf565b6001600160a01b0316148061089d575061089d816106436114bf565b6108b95760405162461bcd60e51b815260040161072f906122b9565b6108c383836115b2565b505050565b6108d06114bf565b6001600160a01b03166108e1610da3565b6001600160a01b0316146109075760405162461bcd60e51b815260040161072f906124b7565b600e55565b601180546109199061276b565b80601f01602080910402602001604051908101604052809291908181526020018280546109459061276b565b80156109925780601f1061096757610100808354040283529160200191610992565b820191906000526020600020905b81548152906001019060200180831161097557829003601f168201915b505050505081565b600f54610100900460ff1681565b600a5490565b6109bf6109b96114bf565b82611620565b6109db5760405162461bcd60e51b815260040161072f9061265e565b6108c383838361169d565b6109ee6114bf565b6001600160a01b03166109ff610da3565b6001600160a01b031614610a255760405162461bcd60e51b815260040161072f906124b7565b600f805461ff001981166101009182900460ff1615909102179055565b610a4a6114bf565b6001600160a01b0316610a5b610da3565b6001600160a01b031614610a815760405162461bcd60e51b815260040161072f906124b7565b4780610a8c57600080fd5b61075833826117ca565b6108c383838360405180602001604052806000815250610ee2565b600b5490565b610abf6114bf565b6001600160a01b0316610ad0610da3565b6001600160a01b031614610af65760405162461bcd60e51b815260040161072f906124b7565b8051610b09906010906020840190611ca9565b5050565b600f5460ff16610b2f5760405162461bcd60e51b815260040161072f906126af565b600b54811115610b515760405162461bcd60e51b815260040161072f90612563565b600c54600b54610b6191906126dd565b610b6c9060016126dd565b81600d6000610b796114bf565b6001600160a01b03166001600160a01b0316815260200190815260200160002054610ba491906126dd565b10610bc15760405162461bcd60e51b815260040161072f90612406565b34610bd482610bce6109a8565b90611846565b14610bf15760405162461bcd60e51b815260040161072f906123de565b610bfe6122b860016126dd565b610c1282610c0c6007611852565b90611856565b10610c2f5760405162461bcd60e51b815260040161072f906124ec565b80600d6000610c3c6114bf565b6001600160a01b03166001600160a01b031681526020019081526020016000206000828254610c6b91906126dd565b90915550600090505b81811015610b0957610c866007611862565b610c9933610c946007611852565b61186b565b80610ca3816127a6565b915050610c74565b60096020526000908152604090205460ff1681565b600654600160a01b900460ff1690565b6000818152600260205260408120546001600160a01b0316806106e85760405162461bcd60e51b815260040161072f90612360565b60006001600160a01b038216610d2d5760405162461bcd60e51b815260040161072f90612316565b506001600160a01b031660009081526003602052604090205490565b610d516114bf565b6001600160a01b0316610d62610da3565b6001600160a01b031614610d885760405162461bcd60e51b815260040161072f906124b7565b610d926000611885565b565b6122b881565b600f5460ff1681565b6006546001600160a01b031690565b60606001805461076a9061276b565b610dc96114bf565b6001600160a01b0316610dda610da3565b6001600160a01b031614610e005760405162461bcd60e51b815260040161072f906124b7565b600a55565b610e0d6114bf565b6001600160a01b0316826001600160a01b03161415610e3e5760405162461bcd60e51b815260040161072f9061220c565b8060056000610e4b6114bf565b6001600160a01b03908116825260208083019390935260409182016000908120918716808252919093529120805460ff191692151592909217909155610e8f6114bf565b6001600160a01b03167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051610ec791906120ad565b60405180910390a35050565b6000610edd6118d7565b905090565b610ef3610eed6114bf565b83611620565b610f0f5760405162461bcd60e51b815260040161072f9061265e565b610f1b848484846118e3565b50505050565b6060610f2c82611595565b610f485760405162461bcd60e51b815260040161072f906125a4565b6000610f52611916565b90506000815111610f725760405180602001604052806000815250610f9d565b80610f7c84611925565b604051602001610f8d92919061202a565b6040516020818303038152906040525b9392505050565b600f54610100900460ff16610fcb5760405162461bcd60e51b815260040161072f90612489565b600c54811115610fed5760405162461bcd60e51b815260040161072f90612563565b600c54610ffb9060016126dd565b81600d60006110086114bf565b6001600160a01b03166001600160a01b031681526020019081526020016000205461103391906126dd565b106110505760405162461bcd60e51b815260040161072f90612406565b3461105d82610bce6109a8565b1461107a5760405162461bcd60e51b815260040161072f906123de565b600e546110889060016126dd565b61109682610c0c6007611852565b106110b35760405162461bcd60e51b815260040161072f906124ec565b80600d60006110c06114bf565b6001600160a01b03166001600160a01b0316815260200190815260200160002060008282546110ef91906126dd565b90915550600090505b81811015610b095761110a6007611862565b61111833610c946007611852565b80611122816127a6565b9150506110f8565b6111326114bf565b6001600160a01b0316611143610da3565b6001600160a01b0316146111695760405162461bcd60e51b815260040161072f906124b7565b60005b81811015610b095761117e6007611862565b61118c33610c946007611852565b80611196816127a6565b91505061116c565b6008546001600160a01b031681565b6111b56114bf565b6001600160a01b03166111c6610da3565b6001600160a01b0316146111ec5760405162461bcd60e51b815260040161072f906124b7565b600880546001600160a01b0319166001600160a01b0392909216919091179055565b6112166114bf565b6001600160a01b0316611227610da3565b6001600160a01b03161461124d5760405162461bcd60e51b815260040161072f906124b7565b600f805460ff19811660ff90911615179055565b6112696114bf565b6001600160a01b031661127a610da3565b6001600160a01b0316146112a05760405162461bcd60e51b815260040161072f906124b7565b600b55565b60085460405163c455279160e01b81526000916001600160a01b039081169190841690829063c4552791906112de90889060040161205c565b60206040518083038186803b1580156112f657600080fd5b505afa15801561130a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061132e9190611f84565b6001600160a01b0316148061135b57506001600160a01b03831660009081526009602052604090205460ff165b1561136a576001915050611378565b6113748484611a48565b9150505b92915050565b6113866114bf565b6001600160a01b0316611397610da3565b6001600160a01b0316146113bd5760405162461bcd60e51b815260040161072f906124b7565b6001600160a01b0381166113e35760405162461bcd60e51b815260040161072f9061214b565b61075881611885565b6113f46114bf565b6001600160a01b0316611405610da3565b6001600160a01b03161461142b5760405162461bcd60e51b815260040161072f906124b7565b6001600160a01b03166000908152600960205260409020805460ff19811660ff90911615179055565b61145c6114bf565b6001600160a01b031661146d610da3565b6001600160a01b0316146114935760405162461bcd60e51b815260040161072f906124b7565b8051610b09906011906020840190611ca9565b6001600160e01b031981166301ffc9a760e01b14919050565b3390565b6114cb610cc0565b156114e85760405162461bcd60e51b815260040161072f9061228f565b6006805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586115246114bf565b604051611531919061205c565b60405180910390a1565b611543610cc0565b61155f5760405162461bcd60e51b815260040161072f906120cb565b6006805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6115246114bf565b6000908152600260205260409020546001600160a01b0316151590565b600081815260046020526040902080546001600160a01b0319166001600160a01b03841690811790915581906115e782610cd0565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061162b82611595565b6116475760405162461bcd60e51b815260040161072f90612243565b600061165283610cd0565b9050806001600160a01b0316846001600160a01b0316148061168d5750836001600160a01b0316611682846107ed565b6001600160a01b0316145b80611374575061137481856112a5565b826001600160a01b03166116b082610cd0565b6001600160a01b0316146116d65760405162461bcd60e51b815260040161072f9061251a565b6001600160a01b0382166116fc5760405162461bcd60e51b815260040161072f906121c8565b6117078383836108c3565b6117126000826115b2565b6001600160a01b038316600090815260036020526040812080546001929061173b908490612728565b90915550506001600160a01b03821660009081526003602052604081208054600192906117699084906126dd565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6000826001600160a01b0316826040516117e390612059565b60006040518083038185875af1925050503d8060008114611820576040519150601f19603f3d011682016040523d82523d6000602084013e611825565b606091505b50509050806108c35760405162461bcd60e51b815260040161072f90612634565b6000610f9d8284612709565b5490565b6000610f9d82846126dd565b80546001019055565b610b09828260405180602001604052806000815250611a76565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000610edd6007611852565b6118ee84848461169d565b6118fa84848484611aa9565b610f1b5760405162461bcd60e51b815260040161072f906120f9565b60606010805461076a9061276b565b60608161194a57506040805180820190915260018152600360fc1b60208201526106eb565b8160005b8115611974578061195e816127a6565b915061196d9050600a836126f5565b915061194e565b60008167ffffffffffffffff81111561199d57634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156119c7576020820181803683370190505b5090505b8415611a40576119dc600183612728565b91506119e9600a866127c1565b6119f49060306126dd565b60f81b818381518110611a1757634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350611a39600a866126f5565b94506119cb565b949350505050565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b611a808383611bc4565b611a8d6000848484611aa9565b6108c35760405162461bcd60e51b815260040161072f906120f9565b6000611abd846001600160a01b0316611ca3565b15611bb957836001600160a01b031663150b7a02611ad96114bf565b8786866040518563ffffffff1660e01b8152600401611afb9493929190612070565b602060405180830381600087803b158015611b1557600080fd5b505af1925050508015611b45575060408051601f3d908101601f19168201909252611b4291810190611f68565b60015b611b9f573d808015611b73576040519150601f19603f3d011682016040523d82523d6000602084013e611b78565b606091505b508051611b975760405162461bcd60e51b815260040161072f906120f9565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611a40565b506001949350505050565b6001600160a01b038216611bea5760405162461bcd60e51b815260040161072f906123a9565b611bf381611595565b15611c105760405162461bcd60e51b815260040161072f90612191565b611c1c600083836108c3565b6001600160a01b0382166000908152600360205260408120805460019290611c459084906126dd565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b3b151590565b828054611cb59061276b565b90600052602060002090601f016020900481019282611cd75760008555611d1d565b82601f10611cf057805160ff1916838001178555611d1d565b82800160010185558215611d1d579182015b82811115611d1d578251825591602001919060010190611d02565b50611d29929150611d2d565b5090565b5b80821115611d295760008155600101611d2e565b600067ffffffffffffffff80841115611d5d57611d5d612801565b604051601f8501601f191681016020018281118282101715611d8157611d81612801565b604052848152915081838501861015611d9957600080fd5b8484602083013760006020868301015250509392505050565b803580151581146106eb57600080fd5b600060208284031215611dd3578081fd5b8135610f9d81612817565b60008060408385031215611df0578081fd5b8235611dfb81612817565b91506020830135611e0b81612817565b809150509250929050565b600080600060608486031215611e2a578081fd5b8335611e3581612817565b92506020840135611e4581612817565b929592945050506040919091013590565b60008060008060808587031215611e6b578081fd5b8435611e7681612817565b93506020850135611e8681612817565b925060408501359150606085013567ffffffffffffffff811115611ea8578182fd5b8501601f81018713611eb8578182fd5b611ec787823560208401611d42565b91505092959194509250565b60008060408385031215611ee5578182fd5b8235611ef081612817565b9150611efe60208401611db2565b90509250929050565b60008060408385031215611f19578182fd5b8235611f2481612817565b946020939093013593505050565b600060208284031215611f43578081fd5b610f9d82611db2565b600060208284031215611f5d578081fd5b8135610f9d8161282c565b600060208284031215611f79578081fd5b8151610f9d8161282c565b600060208284031215611f95578081fd5b8151610f9d81612817565b600060208284031215611fb1578081fd5b813567ffffffffffffffff811115611fc7578182fd5b8201601f81018413611fd7578182fd5b61137484823560208401611d42565b600060208284031215611ff7578081fd5b5035919050565b6000815180845261201681602086016020860161273f565b601f01601f19169290920160200192915050565b6000835161203c81846020880161273f565b83519083019061205081836020880161273f565b01949350505050565b90565b6001600160a01b0391909116815260200190565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906120a390830184611ffe565b9695505050505050565b901515815260200190565b600060208252610f9d6020830184611ffe565b60208082526014908201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604082015260600190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b6020808252601c908201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604082015260600190565b60208082526024908201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646040820152637265737360e01b606082015260800190565b60208082526019908201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604082015260600190565b6020808252602c908201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860408201526b34b9ba32b73a103a37b5b2b760a11b606082015260800190565b60208082526010908201526f14185d5cd8589b194e881c185d5cd95960821b604082015260600190565b60208082526038908201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760408201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000606082015260800190565b6020808252602a908201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604082015269726f206164647265737360b01b606082015260800190565b60208082526029908201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460408201526832b73a103a37b5b2b760b91b606082015260800190565b6020808252818101527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604082015260600190565b6020808252600e908201526d09cdee840cadcdeeaced0408aa8960931b604082015260600190565b6020808252601c908201527f4d6f7265207468616e20616c6c6f776564207065722077616c6c657400000000604082015260600190565b6020808252602c908201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860408201526b34b9ba32b73a103a37b5b2b760a11b606082015260800190565b602080825260149082015273141c994b54d85b1948135a5b9d0818db1bdcd95960621b604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601490820152734d6f7265207468616e206d617820737570706c7960601b604082015260600190565b60208082526029908201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960408201526839903737ba1037bbb760b91b606082015260800190565b60208082526021908201527f4d6f7265207468616e20616c6c6f77656420706572207472616e73616374696f6040820152603760f91b606082015260800190565b6020808252602f908201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60408201526e3732bc34b9ba32b73a103a37b5b2b760891b606082015260800190565b60208082526021908201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656040820152603960f91b606082015260800190565b60208082526010908201526f2a3930b739b332b9103330b4b632b21760811b604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b6020808252600b908201526a135a5b9d0818db1bdcd95960aa1b604082015260600190565b90815260200190565b600082198211156126f0576126f06127d5565b500190565b600082612704576127046127eb565b500490565b6000816000190483118215151615612723576127236127d5565b500290565b60008282101561273a5761273a6127d5565b500390565b60005b8381101561275a578181015183820152602001612742565b83811115610f1b5750506000910152565b60028104600182168061277f57607f821691505b602082108114156127a057634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156127ba576127ba6127d5565b5060010190565b6000826127d0576127d06127eb565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461075857600080fd5b6001600160e01b03198116811461075857600080fdfea2646970667358221220a826b1c7622628734ce6104f584310b691a4b632cf2206bb16d12acb43e2a54464736f6c63430008000033
Deployed Bytecode
0x60806040526004361061023b5760003560e01c8063715018a61161012e578063c9b298f1116100ab578063d4c427631161006f578063d4c4276314610608578063e985e9c514610628578063f2fde38b14610648578063f73c814b14610668578063ffe630b5146106885761023b565b8063c9b298f11461058b578063ca57dfdd1461059e578063cd7c0326146105be578063d26ea6c0146105d3578063d2ed5c59146105f35761023b565b806398ca7795116100f257806398ca7795146104f6578063a22cb46514610516578063a2309ff814610536578063b88d4fde1461054b578063c87b56dd1461056b5761023b565b8063715018a61461048d578063758b4e86146104a25780637dc2268c146104b75780638da5cb5b146104cc57806395d89b41146104e15761023b565b80632c95cd5c116101bc578063586fb42011610180578063586fb420146104055780635bab26e2146104185780635c975abb146104385780636352211e1461044d57806370a082311461046d5761023b565b80632c95cd5c146103935780633ccfd60b146103a857806342842e0e146103b057806348eacce7146103d057806355f804b3146103e55761023b565b80630b1f703c116102035780630b1f703c146103075780630f7309e81461032757806314f0aae61461033c5780632083ad821461035157806323b872dd146103735761023b565b806301ffc9a71461024057806302329a291461027657806306fdde0314610298578063081812fc146102ba578063095ea7b3146102e7575b600080fd5b34801561024c57600080fd5b5061026061025b366004611f4c565b6106a8565b60405161026d91906120ad565b60405180910390f35b34801561028257600080fd5b50610296610291366004611f32565b6106f0565b005b3480156102a457600080fd5b506102ad61075b565b60405161026d91906120b8565b3480156102c657600080fd5b506102da6102d5366004611fe6565b6107ed565b60405161026d919061205c565b3480156102f357600080fd5b50610296610302366004611f07565b610830565b34801561031357600080fd5b50610296610322366004611fe6565b6108c8565b34801561033357600080fd5b506102ad61090c565b34801561034857600080fd5b5061026061099a565b34801561035d57600080fd5b506103666109a8565b60405161026d91906126d4565b34801561037f57600080fd5b5061029661038e366004611e16565b6109ae565b34801561039f57600080fd5b506102966109e6565b610296610a42565b3480156103bc57600080fd5b506102966103cb366004611e16565b610a96565b3480156103dc57600080fd5b50610366610ab1565b3480156103f157600080fd5b50610296610400366004611fa0565b610ab7565b610296610413366004611fe6565b610b0d565b34801561042457600080fd5b50610260610433366004611dc2565b610cab565b34801561044457600080fd5b50610260610cc0565b34801561045957600080fd5b506102da610468366004611fe6565b610cd0565b34801561047957600080fd5b50610366610488366004611dc2565b610d05565b34801561049957600080fd5b50610296610d49565b3480156104ae57600080fd5b50610366610d94565b3480156104c357600080fd5b50610260610d9a565b3480156104d857600080fd5b506102da610da3565b3480156104ed57600080fd5b506102ad610db2565b34801561050257600080fd5b50610296610511366004611fe6565b610dc1565b34801561052257600080fd5b50610296610531366004611ed3565b610e05565b34801561054257600080fd5b50610366610ed3565b34801561055757600080fd5b50610296610566366004611e56565b610ee2565b34801561057757600080fd5b506102ad610586366004611fe6565b610f21565b610296610599366004611fe6565b610fa4565b3480156105aa57600080fd5b506102966105b9366004611fe6565b61112a565b3480156105ca57600080fd5b506102da61119e565b3480156105df57600080fd5b506102966105ee366004611dc2565b6111ad565b3480156105ff57600080fd5b5061029661120e565b34801561061457600080fd5b50610296610623366004611fe6565b611261565b34801561063457600080fd5b50610260610643366004611dde565b6112a5565b34801561065457600080fd5b50610296610663366004611dc2565b61137e565b34801561067457600080fd5b50610296610683366004611dc2565b6113ec565b34801561069457600080fd5b506102966106a3366004611fa0565b611454565b60006001600160e01b031982166380ac58cd60e01b14806106d957506001600160e01b03198216635b5e139f60e01b145b806106e857506106e8826114a6565b90505b919050565b6106f86114bf565b6001600160a01b0316610709610da3565b6001600160a01b0316146107385760405162461bcd60e51b815260040161072f906124b7565b60405180910390fd5b600181151514156107505761074b6114c3565b610758565b61075861153b565b50565b60606000805461076a9061276b565b80601f01602080910402602001604051908101604052809291908181526020018280546107969061276b565b80156107e35780601f106107b8576101008083540402835291602001916107e3565b820191906000526020600020905b8154815290600101906020018083116107c657829003601f168201915b5050505050905090565b60006107f882611595565b6108145760405162461bcd60e51b815260040161072f9061243d565b506000908152600460205260409020546001600160a01b031690565b600061083b82610cd0565b9050806001600160a01b0316836001600160a01b0316141561086f5760405162461bcd60e51b815260040161072f906125f3565b806001600160a01b03166108816114bf565b6001600160a01b0316148061089d575061089d816106436114bf565b6108b95760405162461bcd60e51b815260040161072f906122b9565b6108c383836115b2565b505050565b6108d06114bf565b6001600160a01b03166108e1610da3565b6001600160a01b0316146109075760405162461bcd60e51b815260040161072f906124b7565b600e55565b601180546109199061276b565b80601f01602080910402602001604051908101604052809291908181526020018280546109459061276b565b80156109925780601f1061096757610100808354040283529160200191610992565b820191906000526020600020905b81548152906001019060200180831161097557829003601f168201915b505050505081565b600f54610100900460ff1681565b600a5490565b6109bf6109b96114bf565b82611620565b6109db5760405162461bcd60e51b815260040161072f9061265e565b6108c383838361169d565b6109ee6114bf565b6001600160a01b03166109ff610da3565b6001600160a01b031614610a255760405162461bcd60e51b815260040161072f906124b7565b600f805461ff001981166101009182900460ff1615909102179055565b610a4a6114bf565b6001600160a01b0316610a5b610da3565b6001600160a01b031614610a815760405162461bcd60e51b815260040161072f906124b7565b4780610a8c57600080fd5b61075833826117ca565b6108c383838360405180602001604052806000815250610ee2565b600b5490565b610abf6114bf565b6001600160a01b0316610ad0610da3565b6001600160a01b031614610af65760405162461bcd60e51b815260040161072f906124b7565b8051610b09906010906020840190611ca9565b5050565b600f5460ff16610b2f5760405162461bcd60e51b815260040161072f906126af565b600b54811115610b515760405162461bcd60e51b815260040161072f90612563565b600c54600b54610b6191906126dd565b610b6c9060016126dd565b81600d6000610b796114bf565b6001600160a01b03166001600160a01b0316815260200190815260200160002054610ba491906126dd565b10610bc15760405162461bcd60e51b815260040161072f90612406565b34610bd482610bce6109a8565b90611846565b14610bf15760405162461bcd60e51b815260040161072f906123de565b610bfe6122b860016126dd565b610c1282610c0c6007611852565b90611856565b10610c2f5760405162461bcd60e51b815260040161072f906124ec565b80600d6000610c3c6114bf565b6001600160a01b03166001600160a01b031681526020019081526020016000206000828254610c6b91906126dd565b90915550600090505b81811015610b0957610c866007611862565b610c9933610c946007611852565b61186b565b80610ca3816127a6565b915050610c74565b60096020526000908152604090205460ff1681565b600654600160a01b900460ff1690565b6000818152600260205260408120546001600160a01b0316806106e85760405162461bcd60e51b815260040161072f90612360565b60006001600160a01b038216610d2d5760405162461bcd60e51b815260040161072f90612316565b506001600160a01b031660009081526003602052604090205490565b610d516114bf565b6001600160a01b0316610d62610da3565b6001600160a01b031614610d885760405162461bcd60e51b815260040161072f906124b7565b610d926000611885565b565b6122b881565b600f5460ff1681565b6006546001600160a01b031690565b60606001805461076a9061276b565b610dc96114bf565b6001600160a01b0316610dda610da3565b6001600160a01b031614610e005760405162461bcd60e51b815260040161072f906124b7565b600a55565b610e0d6114bf565b6001600160a01b0316826001600160a01b03161415610e3e5760405162461bcd60e51b815260040161072f9061220c565b8060056000610e4b6114bf565b6001600160a01b03908116825260208083019390935260409182016000908120918716808252919093529120805460ff191692151592909217909155610e8f6114bf565b6001600160a01b03167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051610ec791906120ad565b60405180910390a35050565b6000610edd6118d7565b905090565b610ef3610eed6114bf565b83611620565b610f0f5760405162461bcd60e51b815260040161072f9061265e565b610f1b848484846118e3565b50505050565b6060610f2c82611595565b610f485760405162461bcd60e51b815260040161072f906125a4565b6000610f52611916565b90506000815111610f725760405180602001604052806000815250610f9d565b80610f7c84611925565b604051602001610f8d92919061202a565b6040516020818303038152906040525b9392505050565b600f54610100900460ff16610fcb5760405162461bcd60e51b815260040161072f90612489565b600c54811115610fed5760405162461bcd60e51b815260040161072f90612563565b600c54610ffb9060016126dd565b81600d60006110086114bf565b6001600160a01b03166001600160a01b031681526020019081526020016000205461103391906126dd565b106110505760405162461bcd60e51b815260040161072f90612406565b3461105d82610bce6109a8565b1461107a5760405162461bcd60e51b815260040161072f906123de565b600e546110889060016126dd565b61109682610c0c6007611852565b106110b35760405162461bcd60e51b815260040161072f906124ec565b80600d60006110c06114bf565b6001600160a01b03166001600160a01b0316815260200190815260200160002060008282546110ef91906126dd565b90915550600090505b81811015610b095761110a6007611862565b61111833610c946007611852565b80611122816127a6565b9150506110f8565b6111326114bf565b6001600160a01b0316611143610da3565b6001600160a01b0316146111695760405162461bcd60e51b815260040161072f906124b7565b60005b81811015610b095761117e6007611862565b61118c33610c946007611852565b80611196816127a6565b91505061116c565b6008546001600160a01b031681565b6111b56114bf565b6001600160a01b03166111c6610da3565b6001600160a01b0316146111ec5760405162461bcd60e51b815260040161072f906124b7565b600880546001600160a01b0319166001600160a01b0392909216919091179055565b6112166114bf565b6001600160a01b0316611227610da3565b6001600160a01b03161461124d5760405162461bcd60e51b815260040161072f906124b7565b600f805460ff19811660ff90911615179055565b6112696114bf565b6001600160a01b031661127a610da3565b6001600160a01b0316146112a05760405162461bcd60e51b815260040161072f906124b7565b600b55565b60085460405163c455279160e01b81526000916001600160a01b039081169190841690829063c4552791906112de90889060040161205c565b60206040518083038186803b1580156112f657600080fd5b505afa15801561130a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061132e9190611f84565b6001600160a01b0316148061135b57506001600160a01b03831660009081526009602052604090205460ff165b1561136a576001915050611378565b6113748484611a48565b9150505b92915050565b6113866114bf565b6001600160a01b0316611397610da3565b6001600160a01b0316146113bd5760405162461bcd60e51b815260040161072f906124b7565b6001600160a01b0381166113e35760405162461bcd60e51b815260040161072f9061214b565b61075881611885565b6113f46114bf565b6001600160a01b0316611405610da3565b6001600160a01b03161461142b5760405162461bcd60e51b815260040161072f906124b7565b6001600160a01b03166000908152600960205260409020805460ff19811660ff90911615179055565b61145c6114bf565b6001600160a01b031661146d610da3565b6001600160a01b0316146114935760405162461bcd60e51b815260040161072f906124b7565b8051610b09906011906020840190611ca9565b6001600160e01b031981166301ffc9a760e01b14919050565b3390565b6114cb610cc0565b156114e85760405162461bcd60e51b815260040161072f9061228f565b6006805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586115246114bf565b604051611531919061205c565b60405180910390a1565b611543610cc0565b61155f5760405162461bcd60e51b815260040161072f906120cb565b6006805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6115246114bf565b6000908152600260205260409020546001600160a01b0316151590565b600081815260046020526040902080546001600160a01b0319166001600160a01b03841690811790915581906115e782610cd0565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061162b82611595565b6116475760405162461bcd60e51b815260040161072f90612243565b600061165283610cd0565b9050806001600160a01b0316846001600160a01b0316148061168d5750836001600160a01b0316611682846107ed565b6001600160a01b0316145b80611374575061137481856112a5565b826001600160a01b03166116b082610cd0565b6001600160a01b0316146116d65760405162461bcd60e51b815260040161072f9061251a565b6001600160a01b0382166116fc5760405162461bcd60e51b815260040161072f906121c8565b6117078383836108c3565b6117126000826115b2565b6001600160a01b038316600090815260036020526040812080546001929061173b908490612728565b90915550506001600160a01b03821660009081526003602052604081208054600192906117699084906126dd565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6000826001600160a01b0316826040516117e390612059565b60006040518083038185875af1925050503d8060008114611820576040519150601f19603f3d011682016040523d82523d6000602084013e611825565b606091505b50509050806108c35760405162461bcd60e51b815260040161072f90612634565b6000610f9d8284612709565b5490565b6000610f9d82846126dd565b80546001019055565b610b09828260405180602001604052806000815250611a76565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000610edd6007611852565b6118ee84848461169d565b6118fa84848484611aa9565b610f1b5760405162461bcd60e51b815260040161072f906120f9565b60606010805461076a9061276b565b60608161194a57506040805180820190915260018152600360fc1b60208201526106eb565b8160005b8115611974578061195e816127a6565b915061196d9050600a836126f5565b915061194e565b60008167ffffffffffffffff81111561199d57634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156119c7576020820181803683370190505b5090505b8415611a40576119dc600183612728565b91506119e9600a866127c1565b6119f49060306126dd565b60f81b818381518110611a1757634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350611a39600a866126f5565b94506119cb565b949350505050565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b611a808383611bc4565b611a8d6000848484611aa9565b6108c35760405162461bcd60e51b815260040161072f906120f9565b6000611abd846001600160a01b0316611ca3565b15611bb957836001600160a01b031663150b7a02611ad96114bf565b8786866040518563ffffffff1660e01b8152600401611afb9493929190612070565b602060405180830381600087803b158015611b1557600080fd5b505af1925050508015611b45575060408051601f3d908101601f19168201909252611b4291810190611f68565b60015b611b9f573d808015611b73576040519150601f19603f3d011682016040523d82523d6000602084013e611b78565b606091505b508051611b975760405162461bcd60e51b815260040161072f906120f9565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611a40565b506001949350505050565b6001600160a01b038216611bea5760405162461bcd60e51b815260040161072f906123a9565b611bf381611595565b15611c105760405162461bcd60e51b815260040161072f90612191565b611c1c600083836108c3565b6001600160a01b0382166000908152600360205260408120805460019290611c459084906126dd565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b3b151590565b828054611cb59061276b565b90600052602060002090601f016020900481019282611cd75760008555611d1d565b82601f10611cf057805160ff1916838001178555611d1d565b82800160010185558215611d1d579182015b82811115611d1d578251825591602001919060010190611d02565b50611d29929150611d2d565b5090565b5b80821115611d295760008155600101611d2e565b600067ffffffffffffffff80841115611d5d57611d5d612801565b604051601f8501601f191681016020018281118282101715611d8157611d81612801565b604052848152915081838501861015611d9957600080fd5b8484602083013760006020868301015250509392505050565b803580151581146106eb57600080fd5b600060208284031215611dd3578081fd5b8135610f9d81612817565b60008060408385031215611df0578081fd5b8235611dfb81612817565b91506020830135611e0b81612817565b809150509250929050565b600080600060608486031215611e2a578081fd5b8335611e3581612817565b92506020840135611e4581612817565b929592945050506040919091013590565b60008060008060808587031215611e6b578081fd5b8435611e7681612817565b93506020850135611e8681612817565b925060408501359150606085013567ffffffffffffffff811115611ea8578182fd5b8501601f81018713611eb8578182fd5b611ec787823560208401611d42565b91505092959194509250565b60008060408385031215611ee5578182fd5b8235611ef081612817565b9150611efe60208401611db2565b90509250929050565b60008060408385031215611f19578182fd5b8235611f2481612817565b946020939093013593505050565b600060208284031215611f43578081fd5b610f9d82611db2565b600060208284031215611f5d578081fd5b8135610f9d8161282c565b600060208284031215611f79578081fd5b8151610f9d8161282c565b600060208284031215611f95578081fd5b8151610f9d81612817565b600060208284031215611fb1578081fd5b813567ffffffffffffffff811115611fc7578182fd5b8201601f81018413611fd7578182fd5b61137484823560208401611d42565b600060208284031215611ff7578081fd5b5035919050565b6000815180845261201681602086016020860161273f565b601f01601f19169290920160200192915050565b6000835161203c81846020880161273f565b83519083019061205081836020880161273f565b01949350505050565b90565b6001600160a01b0391909116815260200190565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906120a390830184611ffe565b9695505050505050565b901515815260200190565b600060208252610f9d6020830184611ffe565b60208082526014908201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604082015260600190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b6020808252601c908201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604082015260600190565b60208082526024908201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646040820152637265737360e01b606082015260800190565b60208082526019908201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604082015260600190565b6020808252602c908201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860408201526b34b9ba32b73a103a37b5b2b760a11b606082015260800190565b60208082526010908201526f14185d5cd8589b194e881c185d5cd95960821b604082015260600190565b60208082526038908201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760408201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000606082015260800190565b6020808252602a908201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604082015269726f206164647265737360b01b606082015260800190565b60208082526029908201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460408201526832b73a103a37b5b2b760b91b606082015260800190565b6020808252818101527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604082015260600190565b6020808252600e908201526d09cdee840cadcdeeaced0408aa8960931b604082015260600190565b6020808252601c908201527f4d6f7265207468616e20616c6c6f776564207065722077616c6c657400000000604082015260600190565b6020808252602c908201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860408201526b34b9ba32b73a103a37b5b2b760a11b606082015260800190565b602080825260149082015273141c994b54d85b1948135a5b9d0818db1bdcd95960621b604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601490820152734d6f7265207468616e206d617820737570706c7960601b604082015260600190565b60208082526029908201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960408201526839903737ba1037bbb760b91b606082015260800190565b60208082526021908201527f4d6f7265207468616e20616c6c6f77656420706572207472616e73616374696f6040820152603760f91b606082015260800190565b6020808252602f908201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60408201526e3732bc34b9ba32b73a103a37b5b2b760891b606082015260800190565b60208082526021908201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656040820152603960f91b606082015260800190565b60208082526010908201526f2a3930b739b332b9103330b4b632b21760811b604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b6020808252600b908201526a135a5b9d0818db1bdcd95960aa1b604082015260600190565b90815260200190565b600082198211156126f0576126f06127d5565b500190565b600082612704576127046127eb565b500490565b6000816000190483118215151615612723576127236127d5565b500290565b60008282101561273a5761273a6127d5565b500390565b60005b8381101561275a578181015183820152602001612742565b83811115610f1b5750506000910152565b60028104600182168061277f57607f821691505b602082108114156127a057634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156127ba576127ba6127d5565b5060010190565b6000826127d0576127d06127eb565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461075857600080fd5b6001600160e01b03198116811461075857600080fdfea2646970667358221220a826b1c7622628734ce6104f584310b691a4b632cf2206bb16d12acb43e2a54464736f6c63430008000033
Deployed Bytecode Sourcemap
49382:4775:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37230:305;;;;;;;;;;-1:-1:-1;37230:305:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52941:154;;;;;;;;;;-1:-1:-1;52941:154:0;;;;;:::i;:::-;;:::i;:::-;;38175:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;39734:221::-;;;;;;;;;;-1:-1:-1;39734:221:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;39257:411::-;;;;;;;;;;-1:-1:-1;39257:411:0;;;;;:::i;:::-;;:::i;52611:117::-;;;;;;;;;;-1:-1:-1;52611:117:0;;;;;:::i;:::-;;:::i;50060:24::-;;;;;;;;;;;;;:::i;49961:26::-;;;;;;;;;;;;;:::i;52233:86::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;40624:339::-;;;;;;;;;;-1:-1:-1;40624:339:0;;;;;:::i;:::-;;:::i;50261:95::-;;;;;;;;;;;;;:::i;53431:175::-;;;:::i;41034:185::-;;;;;;;;;;-1:-1:-1;41034:185:0;;;;;:::i;:::-;;:::i;52420:90::-;;;;;;;;;;;;;:::i;53221:102::-;;;;;;;;;;-1:-1:-1;53221:102:0;;;;;:::i;:::-;;:::i;50862:667::-;;;;;;:::i;:::-;;:::i;49600:44::-;;;;;;;;;;-1:-1:-1;49600:44:0;;;;;:::i;:::-;;:::i;16226:86::-;;;;;;;;;;;;;:::i;37869:239::-;;;;;;;;;;-1:-1:-1;37869:239:0;;;;;:::i;:::-;;:::i;37599:208::-;;;;;;;;;;-1:-1:-1;37599:208:0;;;;;:::i;:::-;;:::i;14523:94::-;;;;;;;;;;;;;:::i;49841:40::-;;;;;;;;;;;;;:::i;49935:19::-;;;;;;;;;;;;;:::i;13872:87::-;;;;;;;;;;;;;:::i;38344:104::-;;;;;;;;;;;;;:::i;52325:89::-;;;;;;;;;;-1:-1:-1;52325:89:0;;;;;:::i;:::-;;:::i;40027:295::-;;;;;;;;;;-1:-1:-1;40027:295:0;;;;;:::i;:::-;;:::i;52842:93::-;;;;;;;;;;;;;:::i;41290:328::-;;;;;;;;;;-1:-1:-1;41290:328:0;;;;;:::i;:::-;;:::i;38519:334::-;;;;;;;;;;-1:-1:-1;38519:334:0;;;;;:::i;:::-;;:::i;51535:692::-;;;;;;:::i;:::-;;:::i;50514:198::-;;;;;;;;;;-1:-1:-1;50514:198:0;;;;;:::i;:::-;;:::i;49558:35::-;;;;;;;;;;;;;:::i;50362:146::-;;;;;;;;;;-1:-1:-1;50362:146:0;;;;;:::i;:::-;;:::i;50181:74::-;;;;;;;;;;;;;:::i;52516:89::-;;;;;;;;;;-1:-1:-1;52516:89:0;;;;;:::i;:::-;;:::i;53798:356::-;;;;;;;;;;-1:-1:-1;53798:356:0;;;;;:::i;:::-;;:::i;14772:192::-;;;;;;;;;;-1:-1:-1;14772:192:0;;;;;:::i;:::-;;:::i;50718:138::-;;;;;;;;;;-1:-1:-1;50718:138:0;;;;;:::i;:::-;;:::i;53329:96::-;;;;;;;;;;-1:-1:-1;53329:96:0;;;;;:::i;:::-;;:::i;37230:305::-;37332:4;-1:-1:-1;;;;;;37369:40:0;;-1:-1:-1;;;37369:40:0;;:105;;-1:-1:-1;;;;;;;37426:48:0;;-1:-1:-1;;;37426:48:0;37369:105;:158;;;;37491:36;37515:11;37491:23;:36::i;:::-;37349:178;;37230:305;;;;:::o;52941:154::-;14103:12;:10;:12::i;:::-;-1:-1:-1;;;;;14092:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;14092:23:0;;14084:68;;;;-1:-1:-1;;;14084:68:0;;;;;;;:::i;:::-;;;;;;;;;53005:4:::1;52998:11:::0;::::1;;;52994:73;;;53026:8;:6;:8::i;:::-;53049:7;;52994:73;53077:10;:8;:10::i;:::-;52941:154:::0;:::o;38175:100::-;38229:13;38262:5;38255:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38175:100;:::o;39734:221::-;39810:7;39838:16;39846:7;39838;:16::i;:::-;39830:73;;;;-1:-1:-1;;;39830:73:0;;;;;;;:::i;:::-;-1:-1:-1;39923:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;39923:24:0;;39734:221::o;39257:411::-;39338:13;39354:23;39369:7;39354:14;:23::i;:::-;39338:39;;39402:5;-1:-1:-1;;;;;39396:11:0;:2;-1:-1:-1;;;;;39396:11:0;;;39388:57;;;;-1:-1:-1;;;39388:57:0;;;;;;;:::i;:::-;39496:5;-1:-1:-1;;;;;39480:21:0;:12;:10;:12::i;:::-;-1:-1:-1;;;;;39480:21:0;;:62;;;;39505:37;39522:5;39529:12;:10;:12::i;39505:37::-;39458:168;;;;-1:-1:-1;;;39458:168:0;;;;;;;:::i;:::-;39639:21;39648:2;39652:7;39639:8;:21::i;:::-;39257:411;;;:::o;52611:117::-;14103:12;:10;:12::i;:::-;-1:-1:-1;;;;;14092:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;14092:23:0;;14084:68;;;;-1:-1:-1;;;14084:68:0;;;;;;;:::i;:::-;52687:17:::1;:33:::0;52611:117::o;50060:24::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;49961:26::-;;;;;;;;;:::o;52233:86::-;52305:6;;52233:86;:::o;40624:339::-;40819:41;40838:12;:10;:12::i;:::-;40852:7;40819:18;:41::i;:::-;40811:103;;;;-1:-1:-1;;;40811:103:0;;;;;;;:::i;:::-;40927:28;40937:4;40943:2;40947:7;40927:9;:28::i;50261:95::-;14103:12;:10;:12::i;:::-;-1:-1:-1;;;;;14092:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;14092:23:0;;14084:68;;;;-1:-1:-1;;;14084:68:0;;;;;;;:::i;:::-;50334:14:::1;::::0;;-1:-1:-1;;50316:32:0;::::1;50334:14;::::0;;;::::1;;;50333:15;50316:32:::0;;::::1;;::::0;;50261:95::o;53431:175::-;14103:12;:10;:12::i;:::-;-1:-1:-1;;;;;14092:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;14092:23:0;;14084:68;;;;-1:-1:-1;;;14084:68:0;;;;;;;:::i;:::-;53505:21:::1;53545:11:::0;53537:20:::1;;;::::0;::::1;;53568:30;53578:10;53590:7;53568:9;:30::i;41034:185::-:0;41172:39;41189:4;41195:2;41199:7;41172:39;;;;;;;;;;;;:16;:39::i;52420:90::-;52493:9;;52420:90;:::o;53221:102::-;14103:12;:10;:12::i;:::-;-1:-1:-1;;;;;14092:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;14092:23:0;;14084:68;;;;-1:-1:-1;;;14084:68:0;;;;;;;:::i;:::-;53292:23;;::::1;::::0;:13:::1;::::0;:23:::1;::::0;::::1;::::0;::::1;:::i;:::-;;53221:102:::0;:::o;50862:667::-;50928:7;;;;50920:31;;;;-1:-1:-1;;;50920:31:0;;;;;;;:::i;:::-;50978:9;;50970:4;:17;;50962:63;;;;-1:-1:-1;;;50962:63:0;;;;;;;:::i;:::-;51102:16;;51090:9;;:28;;;;:::i;:::-;:32;;51121:1;51090:32;:::i;:::-;51083:4;51044:22;:36;51067:12;:10;:12::i;:::-;-1:-1:-1;;;;;51044:36:0;-1:-1:-1;;;;;51044:36:0;;;;;;;;;;;;;:43;;;;:::i;:::-;:78;51036:119;;;;-1:-1:-1;;;51036:119:0;;;;;;;:::i;:::-;51203:9;51175:24;51194:4;51175:14;:12;:14::i;:::-;:18;;:24::i;:::-;:37;51167:64;;;;-1:-1:-1;;;51167:64:0;;;;;;;:::i;:::-;51283:13;49877:4;51295:1;51283:13;:::i;:::-;51250:30;51275:4;51250:20;:10;:18;:20::i;:::-;:24;;:30::i;:::-;:46;51242:79;;;;-1:-1:-1;;;51242:79:0;;;;;;;:::i;:::-;51372:4;51332:22;:36;51355:12;:10;:12::i;:::-;-1:-1:-1;;;;;51332:36:0;-1:-1:-1;;;;;51332:36:0;;;;;;;;;;;;;:44;;;;;;;:::i;:::-;;;;-1:-1:-1;51392:9:0;;-1:-1:-1;51387:138:0;51407:4;51403:1;:8;51387:138;;;51433:22;:10;:20;:22::i;:::-;51470:43;51480:10;51492:20;:10;:18;:20::i;:::-;51470:9;:43::i;:::-;51413:3;;;;:::i;:::-;;;;51387:138;;49600:44;;;;;;;;;;;;;;;:::o;16226:86::-;16297:7;;-1:-1:-1;;;16297:7:0;;;;;16226:86::o;37869:239::-;37941:7;37977:16;;;:7;:16;;;;;;-1:-1:-1;;;;;37977:16:0;38012:19;38004:73;;;;-1:-1:-1;;;38004:73:0;;;;;;;:::i;37599:208::-;37671:7;-1:-1:-1;;;;;37699:19:0;;37691:74;;;;-1:-1:-1;;;37691:74:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;;37783:16:0;;;;;:9;:16;;;;;;;37599:208::o;14523:94::-;14103:12;:10;:12::i;:::-;-1:-1:-1;;;;;14092:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;14092:23:0;;14084:68;;;;-1:-1:-1;;;14084:68:0;;;;;;;:::i;:::-;14588:21:::1;14606:1;14588:9;:21::i;:::-;14523:94::o:0;49841:40::-;49877:4;49841:40;:::o;49935:19::-;;;;;;:::o;13872:87::-;13945:6;;-1:-1:-1;;;;;13945:6:0;13872:87;:::o;38344:104::-;38400:13;38433:7;38426:14;;;;;:::i;52325:89::-;14103:12;:10;:12::i;:::-;-1:-1:-1;;;;;14092:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;14092:23:0;;14084:68;;;;-1:-1:-1;;;14084:68:0;;;;;;;:::i;:::-;52391:6:::1;:15:::0;52325:89::o;40027:295::-;40142:12;:10;:12::i;:::-;-1:-1:-1;;;;;40130:24:0;:8;-1:-1:-1;;;;;40130:24:0;;;40122:62;;;;-1:-1:-1;;;40122:62:0;;;;;;;:::i;:::-;40242:8;40197:18;:32;40216:12;:10;:12::i;:::-;-1:-1:-1;;;;;40197:32:0;;;;;;;;;;;;;;;;;-1:-1:-1;40197:32:0;;;:42;;;;;;;;;;;;:53;;-1:-1:-1;;40197:53:0;;;;;;;;;;;40281:12;:10;:12::i;:::-;-1:-1:-1;;;;;40266:48:0;;40305:8;40266:48;;;;;;:::i;:::-;;;;;;;;40027:295;;:::o;52842:93::-;52886:7;52913:14;:12;:14::i;:::-;52906:21;;52842:93;:::o;41290:328::-;41465:41;41484:12;:10;:12::i;:::-;41498:7;41465:18;:41::i;:::-;41457:103;;;;-1:-1:-1;;;41457:103:0;;;;;;;:::i;:::-;41571:39;41585:4;41591:2;41595:7;41604:5;41571:13;:39::i;:::-;41290:328;;;;:::o;38519:334::-;38592:13;38626:16;38634:7;38626;:16::i;:::-;38618:76;;;;-1:-1:-1;;;38618:76:0;;;;;;;:::i;:::-;38707:21;38731:10;:8;:10::i;:::-;38707:34;;38783:1;38765:7;38759:21;:25;:86;;;;;;;;;;;;;;;;;38811:7;38820:18;:7;:16;:18::i;:::-;38794:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;38759:86;38752:93;38519:334;-1:-1:-1;;;38519:334:0:o;51535:692::-;51604:14;;;;;;;51596:47;;;;-1:-1:-1;;;51596:47:0;;;;;;;:::i;:::-;51670:16;;51662:4;:24;;51654:70;;;;-1:-1:-1;;;51654:70:0;;;;;;;:::i;:::-;51789:16;;:20;;51808:1;51789:20;:::i;:::-;51782:4;51743:22;:36;51766:12;:10;:12::i;:::-;-1:-1:-1;;;;;51743:36:0;-1:-1:-1;;;;;51743:36:0;;;;;;;;;;;;;:43;;;;:::i;:::-;:66;51735:107;;;;-1:-1:-1;;;51735:107:0;;;;;;;:::i;:::-;51890:9;51862:24;51881:4;51862:14;:12;:14::i;:24::-;:37;51854:64;;;;-1:-1:-1;;;51854:64:0;;;;;;;:::i;:::-;51970:17;;:21;;51990:1;51970:21;:::i;:::-;51937:30;51962:4;51937:20;:10;:18;:20::i;:30::-;:54;51929:87;;;;-1:-1:-1;;;51929:87:0;;;;;;;:::i;:::-;52067:4;52027:22;:36;52050:12;:10;:12::i;:::-;-1:-1:-1;;;;;52027:36:0;-1:-1:-1;;;;;52027:36:0;;;;;;;;;;;;;:44;;;;;;;:::i;:::-;;;;-1:-1:-1;52087:9:0;;-1:-1:-1;52082:138:0;52102:4;52098:1;:8;52082:138;;;52128:22;:10;:20;:22::i;:::-;52165:43;52175:10;52187:20;:10;:18;:20::i;52165:43::-;52108:3;;;;:::i;:::-;;;;52082:138;;50514:198;14103:12;:10;:12::i;:::-;-1:-1:-1;;;;;14092:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;14092:23:0;;14084:68;;;;-1:-1:-1;;;14084:68:0;;;;;;;:::i;:::-;50579:6:::1;50575:130;50591:4;50587:1;:8;50575:130;;;50613:22;:10;:20;:22::i;:::-;50650:43;50660:10;50672:20;:10;:18;:20::i;50650:43::-;50597:3:::0;::::1;::::0;::::1;:::i;:::-;;;;50575:130;;49558:35:::0;;;-1:-1:-1;;;;;49558:35:0;;:::o;50362:146::-;14103:12;:10;:12::i;:::-;-1:-1:-1;;;;;14092:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;14092:23:0;;14084:68;;;;-1:-1:-1;;;14084:68:0;;;;;;;:::i;:::-;50456:20:::1;:44:::0;;-1:-1:-1;;;;;;50456:44:0::1;-1:-1:-1::0;;;;;50456:44:0;;;::::1;::::0;;;::::1;::::0;;50362:146::o;50181:74::-;14103:12;:10;:12::i;:::-;-1:-1:-1;;;;;14092:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;14092:23:0;;14084:68;;;;-1:-1:-1;;;14084:68:0;;;;;;;:::i;:::-;50240:7:::1;::::0;;-1:-1:-1;;50229:18:0;::::1;50240:7;::::0;;::::1;50239:8;50229:18;::::0;;50181:74::o;52516:89::-;14103:12;:10;:12::i;:::-;-1:-1:-1;;;;;14092:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;14092:23:0;;14084:68;;;;-1:-1:-1;;;14084:68:0;;;;;;;:::i;:::-;52581:9:::1;:16:::0;52516:89::o;53798:356::-;53963:20;;54007:29;;-1:-1:-1;;;54007:29:0;;53888:4;;-1:-1:-1;;;;;53963:20:0;;;;53999:50;;;;53963:20;;54007:21;;:29;;54029:6;;54007:29;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;53999:50:0;;:76;;;-1:-1:-1;;;;;;54053:22:0;;;;;;:12;:22;;;;;;;;53999:76;53995:93;;;54084:4;54077:11;;;;;53995:93;54106:40;54129:6;54137:8;54106:22;:40::i;:::-;54099:47;;;53798:356;;;;;:::o;14772:192::-;14103:12;:10;:12::i;:::-;-1:-1:-1;;;;;14092:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;14092:23:0;;14084:68;;;;-1:-1:-1;;;14084:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;14861:22:0;::::1;14853:73;;;;-1:-1:-1::0;;;14853:73:0::1;;;;;;;:::i;:::-;14937:19;14947:8;14937:9;:19::i;50718:138::-:0;14103:12;:10;:12::i;:::-;-1:-1:-1;;;;;14092:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;14092:23:0;;14084:68;;;;-1:-1:-1;;;14084:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;50822:26:0::1;;::::0;;;:12:::1;:26;::::0;;;;;;-1:-1:-1;;50792:56:0;::::1;50822:26;::::0;;::::1;50821:27;50792:56;::::0;;50718:138::o;53329:96::-;14103:12;:10;:12::i;:::-;-1:-1:-1;;;;;14092:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;14092:23:0;;14084:68;;;;-1:-1:-1;;;14084:68:0;;;;;;;:::i;:::-;53400:17;;::::1;::::0;:10:::1;::::0;:17:::1;::::0;::::1;::::0;::::1;:::i;19059:157::-:0;-1:-1:-1;;;;;;19168:40:0;;-1:-1:-1;;;19168:40:0;19059:157;;;:::o;12658:98::-;12738:10;12658:98;:::o;17026:118::-;16552:8;:6;:8::i;:::-;16551:9;16543:38;;;;-1:-1:-1;;;16543:38:0;;;;;;;:::i;:::-;17086:7:::1;:14:::0;;-1:-1:-1;;;;17086:14:0::1;-1:-1:-1::0;;;17086:14:0::1;::::0;;17116:20:::1;17123:12;:10;:12::i;:::-;17116:20;;;;;;:::i;:::-;;;;;;;;17026:118::o:0;17285:120::-;16829:8;:6;:8::i;:::-;16821:41;;;;-1:-1:-1;;;16821:41:0;;;;;;;:::i;:::-;17344:7:::1;:15:::0;;-1:-1:-1;;;;17344:15:0::1;::::0;;17375:22:::1;17384:12;:10;:12::i;43128:127::-:0;43193:4;43217:16;;;:7;:16;;;;;;-1:-1:-1;;;;;43217:16:0;:30;;;43128:127::o;47110:174::-;47185:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;47185:29:0;-1:-1:-1;;;;;47185:29:0;;;;;;;;:24;;47239:23;47185:24;47239:14;:23::i;:::-;-1:-1:-1;;;;;47230:46:0;;;;;;;;;;;47110:174;;:::o;43422:348::-;43515:4;43540:16;43548:7;43540;:16::i;:::-;43532:73;;;;-1:-1:-1;;;43532:73:0;;;;;;;:::i;:::-;43616:13;43632:23;43647:7;43632:14;:23::i;:::-;43616:39;;43685:5;-1:-1:-1;;;;;43674:16:0;:7;-1:-1:-1;;;;;43674:16:0;;:51;;;;43718:7;-1:-1:-1;;;;;43694:31:0;:20;43706:7;43694:11;:20::i;:::-;-1:-1:-1;;;;;43694:31:0;;43674:51;:87;;;;43729:32;43746:5;43753:7;43729:16;:32::i;46414:578::-;46573:4;-1:-1:-1;;;;;46546:31:0;:23;46561:7;46546:14;:23::i;:::-;-1:-1:-1;;;;;46546:31:0;;46538:85;;;;-1:-1:-1;;;46538:85:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;46642:16:0;;46634:65;;;;-1:-1:-1;;;46634:65:0;;;;;;;:::i;:::-;46712:39;46733:4;46739:2;46743:7;46712:20;:39::i;:::-;46816:29;46833:1;46837:7;46816:8;:29::i;:::-;-1:-1:-1;;;;;46858:15:0;;;;;;:9;:15;;;;;:20;;46877:1;;46858:15;:20;;46877:1;;46858:20;:::i;:::-;;;;-1:-1:-1;;;;;;;46889:13:0;;;;;;:9;:13;;;;;:18;;46906:1;;46889:13;:18;;46906:1;;46889:18;:::i;:::-;;;;-1:-1:-1;;46918:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;46918:21:0;-1:-1:-1;;;;;46918:21:0;;;;;;;;;46957:27;;46918:16;;46957:27;;;;;;;46414:578;;;:::o;53612:180::-;53686:12;53704:8;-1:-1:-1;;;;;53704:13:0;53725:7;53704:33;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53685:52;;;53756:7;53748:36;;;;-1:-1:-1;;;53748:36:0;;;;;;;:::i;8608:98::-;8666:7;8693:5;8697:1;8693;:5;:::i;4485:114::-;4577:14;;4485:114::o;7870:98::-;7928:7;7955:5;7959:1;7955;:5;:::i;4607:127::-;4696:19;;4714:1;4696:19;;;4607:127::o;44112:110::-;44188:26;44198:2;44202:7;44188:26;;;;;;;;;;;;:9;:26::i;14972:173::-;15047:6;;;-1:-1:-1;;;;;15064:17:0;;;-1:-1:-1;;;;;;15064:17:0;;;;;;;15097:40;;15047:6;;;15064:17;15047:6;;15097:40;;15028:16;;15097:40;14972:173;;:::o;52734:102::-;52781:7;52808:20;:10;:18;:20::i;42500:315::-;42657:28;42667:4;42673:2;42677:7;42657:9;:28::i;:::-;42704:48;42727:4;42733:2;42737:7;42746:5;42704:22;:48::i;:::-;42696:111;;;;-1:-1:-1;;;42696:111:0;;;;;;;:::i;53101:114::-;53161:13;53194;53187:20;;;;;:::i;19534:723::-;19590:13;19811:10;19807:53;;-1:-1:-1;19838:10:0;;;;;;;;;;;;-1:-1:-1;;;19838:10:0;;;;;;19807:53;19885:5;19870:12;19926:78;19933:9;;19926:78;;19959:8;;;;:::i;:::-;;-1:-1:-1;19982:10:0;;-1:-1:-1;19990:2:0;19982:10;;:::i;:::-;;;19926:78;;;20014:19;20046:6;20036:17;;;;;;-1:-1:-1;;;20036:17:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20036:17:0;;20014:39;;20064:154;20071:10;;20064:154;;20098:11;20108:1;20098:11;;:::i;:::-;;-1:-1:-1;20167:10:0;20175:2;20167:5;:10;:::i;:::-;20154:24;;:2;:24;:::i;:::-;20141:39;;20124:6;20131;20124:14;;;;;;-1:-1:-1;;;20124:14:0;;;;;;;;;;;;:56;-1:-1:-1;;;;;20124:56:0;;;;;;;;-1:-1:-1;20195:11:0;20204:2;20195:11;;:::i;:::-;;;20064:154;;;20242:6;19534:723;-1:-1:-1;;;;19534:723:0:o;40393:164::-;-1:-1:-1;;;;;40514:25:0;;;40490:4;40514:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;40393:164::o;44449:321::-;44579:18;44585:2;44589:7;44579:5;:18::i;:::-;44630:54;44661:1;44665:2;44669:7;44678:5;44630:22;:54::i;:::-;44608:154;;;;-1:-1:-1;;;44608:154:0;;;;;;;:::i;47849:799::-;48004:4;48025:15;:2;-1:-1:-1;;;;;48025:13:0;;:15::i;:::-;48021:620;;;48077:2;-1:-1:-1;;;;;48061:36:0;;48098:12;:10;:12::i;:::-;48112:4;48118:7;48127:5;48061:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;48061:72:0;;;;;;;;-1:-1:-1;;48061:72:0;;;;;;;;;;;;:::i;:::-;;;48057:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;48303:13:0;;48299:272;;48346:60;;-1:-1:-1;;;48346:60:0;;;;;;;:::i;48299:272::-;48521:6;48515:13;48506:6;48502:2;48498:15;48491:38;48057:529;-1:-1:-1;;;;;;48184:51:0;-1:-1:-1;;;48184:51:0;;-1:-1:-1;48177:58:0;;48021:620;-1:-1:-1;48625:4:0;47849:799;;;;;;:::o;45106:382::-;-1:-1:-1;;;;;45186:16:0;;45178:61;;;;-1:-1:-1;;;45178:61:0;;;;;;;:::i;:::-;45259:16;45267:7;45259;:16::i;:::-;45258:17;45250:58;;;;-1:-1:-1;;;45250:58:0;;;;;;;:::i;:::-;45321:45;45350:1;45354:2;45358:7;45321:20;:45::i;:::-;-1:-1:-1;;;;;45379:13:0;;;;;;:9;:13;;;;;:18;;45396:1;;45379:13;:18;;45396:1;;45379:18;:::i;:::-;;;;-1:-1:-1;;45408:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;45408:21:0;-1:-1:-1;;;;;45408:21:0;;;;;;;;45447:33;;45408:16;;;45447:33;;45408:16;;45447:33;45106:382;;:::o;22063:387::-;22386:20;22434:8;;;22063:387::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:607:1;;110:18;151:2;143:6;140:14;137:2;;;157:18;;:::i;:::-;206:2;200:9;279:2;256:17;;-1:-1:-1;;252:31:1;240:44;;286:4;236:55;306:18;;;326:22;;;303:46;300:2;;;352:18;;:::i;:::-;388:2;381:22;436;;;421:6;-1:-1:-1;421:6:1;473:16;;;470:25;-1:-1:-1;467:2:1;;;508:1;505;498:12;467:2;558:6;553:3;546:4;538:6;534:17;521:44;613:1;606:4;597:6;589;585:19;581:30;574:41;;;90:531;;;;;:::o;626:162::-;693:20;;749:13;;742:21;732:32;;722:2;;778:1;775;768:12;793:259;;905:2;893:9;884:7;880:23;876:32;873:2;;;926:6;918;911:22;873:2;970:9;957:23;989:33;1016:5;989:33;:::i;1057:402::-;;;1186:2;1174:9;1165:7;1161:23;1157:32;1154:2;;;1207:6;1199;1192:22;1154:2;1251:9;1238:23;1270:33;1297:5;1270:33;:::i;:::-;1322:5;-1:-1:-1;1379:2:1;1364:18;;1351:32;1392:35;1351:32;1392:35;:::i;:::-;1446:7;1436:17;;;1144:315;;;;;:::o;1464:470::-;;;;1610:2;1598:9;1589:7;1585:23;1581:32;1578:2;;;1631:6;1623;1616:22;1578:2;1675:9;1662:23;1694:33;1721:5;1694:33;:::i;:::-;1746:5;-1:-1:-1;1803:2:1;1788:18;;1775:32;1816:35;1775:32;1816:35;:::i;:::-;1568:366;;1870:7;;-1:-1:-1;;;1924:2:1;1909:18;;;;1896:32;;1568:366::o;1939:830::-;;;;;2111:3;2099:9;2090:7;2086:23;2082:33;2079:2;;;2133:6;2125;2118:22;2079:2;2177:9;2164:23;2196:33;2223:5;2196:33;:::i;:::-;2248:5;-1:-1:-1;2305:2:1;2290:18;;2277:32;2318:35;2277:32;2318:35;:::i;:::-;2372:7;-1:-1:-1;2426:2:1;2411:18;;2398:32;;-1:-1:-1;2481:2:1;2466:18;;2453:32;2508:18;2497:30;;2494:2;;;2545:6;2537;2530:22;2494:2;2573:22;;2626:4;2618:13;;2614:27;-1:-1:-1;2604:2:1;;2660:6;2652;2645:22;2604:2;2688:75;2755:7;2750:2;2737:16;2732:2;2728;2724:11;2688:75;:::i;:::-;2678:85;;;2069:700;;;;;;;:::o;2774:329::-;;;2900:2;2888:9;2879:7;2875:23;2871:32;2868:2;;;2921:6;2913;2906:22;2868:2;2965:9;2952:23;2984:33;3011:5;2984:33;:::i;:::-;3036:5;-1:-1:-1;3060:37:1;3093:2;3078:18;;3060:37;:::i;:::-;3050:47;;2858:245;;;;;:::o;3108:327::-;;;3237:2;3225:9;3216:7;3212:23;3208:32;3205:2;;;3258:6;3250;3243:22;3205:2;3302:9;3289:23;3321:33;3348:5;3321:33;:::i;:::-;3373:5;3425:2;3410:18;;;;3397:32;;-1:-1:-1;;;3195:240:1:o;3440:192::-;;3549:2;3537:9;3528:7;3524:23;3520:32;3517:2;;;3570:6;3562;3555:22;3517:2;3598:28;3616:9;3598:28;:::i;3637:257::-;;3748:2;3736:9;3727:7;3723:23;3719:32;3716:2;;;3769:6;3761;3754:22;3716:2;3813:9;3800:23;3832:32;3858:5;3832:32;:::i;3899:261::-;;4021:2;4009:9;4000:7;3996:23;3992:32;3989:2;;;4042:6;4034;4027:22;3989:2;4079:9;4073:16;4098:32;4124:5;4098:32;:::i;4165:292::-;;4317:2;4305:9;4296:7;4292:23;4288:32;4285:2;;;4338:6;4330;4323:22;4285:2;4375:9;4369:16;4394:33;4421:5;4394:33;:::i;4462:482::-;;4584:2;4572:9;4563:7;4559:23;4555:32;4552:2;;;4605:6;4597;4590:22;4552:2;4650:9;4637:23;4683:18;4675:6;4672:30;4669:2;;;4720:6;4712;4705:22;4669:2;4748:22;;4801:4;4793:13;;4789:27;-1:-1:-1;4779:2:1;;4835:6;4827;4820:22;4779:2;4863:75;4930:7;4925:2;4912:16;4907:2;4903;4899:11;4863:75;:::i;4949:190::-;;5061:2;5049:9;5040:7;5036:23;5032:32;5029:2;;;5082:6;5074;5067:22;5029:2;-1:-1:-1;5110:23:1;;5019:120;-1:-1:-1;5019:120:1:o;5144:259::-;;5225:5;5219:12;5252:6;5247:3;5240:19;5268:63;5324:6;5317:4;5312:3;5308:14;5301:4;5294:5;5290:16;5268:63;:::i;:::-;5385:2;5364:15;-1:-1:-1;;5360:29:1;5351:39;;;;5392:4;5347:50;;5195:208;-1:-1:-1;;5195:208:1:o;5408:470::-;;5625:6;5619:13;5641:53;5687:6;5682:3;5675:4;5667:6;5663:17;5641:53;:::i;:::-;5757:13;;5716:16;;;;5779:57;5757:13;5716:16;5813:4;5801:17;;5779:57;:::i;:::-;5852:20;;5595:283;-1:-1:-1;;;;5595:283:1:o;5883:205::-;6083:3;6074:14::o;6093:203::-;-1:-1:-1;;;;;6257:32:1;;;;6239:51;;6227:2;6212:18;;6194:102::o;6301:490::-;-1:-1:-1;;;;;6570:15:1;;;6552:34;;6622:15;;6617:2;6602:18;;6595:43;6669:2;6654:18;;6647:34;;;6717:3;6712:2;6697:18;;6690:31;;;6301:490;;6738:47;;6765:19;;6757:6;6738:47;:::i;:::-;6730:55;6504:287;-1:-1:-1;;;;;;6504:287:1:o;6796:187::-;6961:14;;6954:22;6936:41;;6924:2;6909:18;;6891:92::o;6988:221::-;;7137:2;7126:9;7119:21;7157:46;7199:2;7188:9;7184:18;7176:6;7157:46;:::i;7214:344::-;7416:2;7398:21;;;7455:2;7435:18;;;7428:30;-1:-1:-1;;;7489:2:1;7474:18;;7467:50;7549:2;7534:18;;7388:170::o;7563:414::-;7765:2;7747:21;;;7804:2;7784:18;;;7777:30;7843:34;7838:2;7823:18;;7816:62;-1:-1:-1;;;7909:2:1;7894:18;;7887:48;7967:3;7952:19;;7737:240::o;7982:402::-;8184:2;8166:21;;;8223:2;8203:18;;;8196:30;8262:34;8257:2;8242:18;;8235:62;-1:-1:-1;;;8328:2:1;8313:18;;8306:36;8374:3;8359:19;;8156:228::o;8389:352::-;8591:2;8573:21;;;8630:2;8610:18;;;8603:30;8669;8664:2;8649:18;;8642:58;8732:2;8717:18;;8563:178::o;8746:400::-;8948:2;8930:21;;;8987:2;8967:18;;;8960:30;9026:34;9021:2;9006:18;;8999:62;-1:-1:-1;;;9092:2:1;9077:18;;9070:34;9136:3;9121:19;;8920:226::o;9151:349::-;9353:2;9335:21;;;9392:2;9372:18;;;9365:30;9431:27;9426:2;9411:18;;9404:55;9491:2;9476:18;;9325:175::o;9505:408::-;9707:2;9689:21;;;9746:2;9726:18;;;9719:30;9785:34;9780:2;9765:18;;9758:62;-1:-1:-1;;;9851:2:1;9836:18;;9829:42;9903:3;9888:19;;9679:234::o;9918:340::-;10120:2;10102:21;;;10159:2;10139:18;;;10132:30;-1:-1:-1;;;10193:2:1;10178:18;;10171:46;10249:2;10234:18;;10092:166::o;10263:420::-;10465:2;10447:21;;;10504:2;10484:18;;;10477:30;10543:34;10538:2;10523:18;;10516:62;10614:26;10609:2;10594:18;;10587:54;10673:3;10658:19;;10437:246::o;10688:406::-;10890:2;10872:21;;;10929:2;10909:18;;;10902:30;10968:34;10963:2;10948:18;;10941:62;-1:-1:-1;;;11034:2:1;11019:18;;11012:40;11084:3;11069:19;;10862:232::o;11099:405::-;11301:2;11283:21;;;11340:2;11320:18;;;11313:30;11379:34;11374:2;11359:18;;11352:62;-1:-1:-1;;;11445:2:1;11430:18;;11423:39;11494:3;11479:19;;11273:231::o;11509:356::-;11711:2;11693:21;;;11730:18;;;11723:30;11789:34;11784:2;11769:18;;11762:62;11856:2;11841:18;;11683:182::o;11870:338::-;12072:2;12054:21;;;12111:2;12091:18;;;12084:30;-1:-1:-1;;;12145:2:1;12130:18;;12123:44;12199:2;12184:18;;12044:164::o;12213:352::-;12415:2;12397:21;;;12454:2;12434:18;;;12427:30;12493;12488:2;12473:18;;12466:58;12556:2;12541:18;;12387:178::o;12570:408::-;12772:2;12754:21;;;12811:2;12791:18;;;12784:30;12850:34;12845:2;12830:18;;12823:62;-1:-1:-1;;;12916:2:1;12901:18;;12894:42;12968:3;12953:19;;12744:234::o;12983:344::-;13185:2;13167:21;;;13224:2;13204:18;;;13197:30;-1:-1:-1;;;13258:2:1;13243:18;;13236:50;13318:2;13303:18;;13157:170::o;13332:356::-;13534:2;13516:21;;;13553:18;;;13546:30;13612:34;13607:2;13592:18;;13585:62;13679:2;13664:18;;13506:182::o;13693:344::-;13895:2;13877:21;;;13934:2;13914:18;;;13907:30;-1:-1:-1;;;13968:2:1;13953:18;;13946:50;14028:2;14013:18;;13867:170::o;14042:405::-;14244:2;14226:21;;;14283:2;14263:18;;;14256:30;14322:34;14317:2;14302:18;;14295:62;-1:-1:-1;;;14388:2:1;14373:18;;14366:39;14437:3;14422:19;;14216:231::o;14452:397::-;14654:2;14636:21;;;14693:2;14673:18;;;14666:30;14732:34;14727:2;14712:18;;14705:62;-1:-1:-1;;;14798:2:1;14783:18;;14776:31;14839:3;14824:19;;14626:223::o;14854:411::-;15056:2;15038:21;;;15095:2;15075:18;;;15068:30;15134:34;15129:2;15114:18;;15107:62;-1:-1:-1;;;15200:2:1;15185:18;;15178:45;15255:3;15240:19;;15028:237::o;15270:397::-;15472:2;15454:21;;;15511:2;15491:18;;;15484:30;15550:34;15545:2;15530:18;;15523:62;-1:-1:-1;;;15616:2:1;15601:18;;15594:31;15657:3;15642:19;;15444:223::o;15672:340::-;15874:2;15856:21;;;15913:2;15893:18;;;15886:30;-1:-1:-1;;;15947:2:1;15932:18;;15925:46;16003:2;15988:18;;15846:166::o;16017:413::-;16219:2;16201:21;;;16258:2;16238:18;;;16231:30;16297:34;16292:2;16277:18;;16270:62;-1:-1:-1;;;16363:2:1;16348:18;;16341:47;16420:3;16405:19;;16191:239::o;16435:335::-;16637:2;16619:21;;;16676:2;16656:18;;;16649:30;-1:-1:-1;;;16710:2:1;16695:18;;16688:41;16761:2;16746:18;;16609:161::o;16775:177::-;16921:25;;;16909:2;16894:18;;16876:76::o;16957:128::-;;17028:1;17024:6;17021:1;17018:13;17015:2;;;17034:18;;:::i;:::-;-1:-1:-1;17070:9:1;;17005:80::o;17090:120::-;;17156:1;17146:2;;17161:18;;:::i;:::-;-1:-1:-1;17195:9:1;;17136:74::o;17215:168::-;;17321:1;17317;17313:6;17309:14;17306:1;17303:21;17298:1;17291:9;17284:17;17280:45;17277:2;;;17328:18;;:::i;:::-;-1:-1:-1;17368:9:1;;17267:116::o;17388:125::-;;17456:1;17453;17450:8;17447:2;;;17461:18;;:::i;:::-;-1:-1:-1;17498:9:1;;17437:76::o;17518:258::-;17590:1;17600:113;17614:6;17611:1;17608:13;17600:113;;;17690:11;;;17684:18;17671:11;;;17664:39;17636:2;17629:10;17600:113;;;17731:6;17728:1;17725:13;17722:2;;;-1:-1:-1;;17766:1:1;17748:16;;17741:27;17571:205::o;17781:380::-;17866:1;17856:12;;17913:1;17903:12;;;17924:2;;17978:4;17970:6;17966:17;17956:27;;17924:2;18031;18023:6;18020:14;18000:18;17997:38;17994:2;;;18077:10;18072:3;18068:20;18065:1;18058:31;18112:4;18109:1;18102:15;18140:4;18137:1;18130:15;17994:2;;17836:325;;;:::o;18166:135::-;;-1:-1:-1;;18226:17:1;;18223:2;;;18246:18;;:::i;:::-;-1:-1:-1;18293:1:1;18282:13;;18213:88::o;18306:112::-;;18364:1;18354:2;;18369:18;;:::i;:::-;-1:-1:-1;18403:9:1;;18344:74::o;18423:127::-;18484:10;18479:3;18475:20;18472:1;18465:31;18515:4;18512:1;18505:15;18539:4;18536:1;18529:15;18555:127;18616:10;18611:3;18607:20;18604:1;18597:31;18647:4;18644:1;18637:15;18671:4;18668:1;18661:15;18687:127;18748:10;18743:3;18739:20;18736:1;18729:31;18779:4;18776:1;18769:15;18803:4;18800:1;18793:15;18819:133;-1:-1:-1;;;;;18896:31:1;;18886:42;;18876:2;;18942:1;18939;18932:12;18957:133;-1:-1:-1;;;;;;19033:32:1;;19023:43;;19013:2;;19080:1;19077;19070:12
Swarm Source
ipfs://a826b1c7622628734ce6104f584310b691a4b632cf2206bb16d12acb43e2a544
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.