Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 366 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Withdraw | 14301902 | 1027 days ago | IN | 0 ETH | 0.00190745 | ||||
Mint | 14299595 | 1027 days ago | IN | 0.5 ETH | 0.00121374 | ||||
Mint | 14298261 | 1027 days ago | IN | 0.5 ETH | 0.00184974 | ||||
Mint | 14298261 | 1027 days ago | IN | 0.5 ETH | 0.00180662 | ||||
Mint | 14296449 | 1028 days ago | IN | 0.5 ETH | 0.00172172 | ||||
Mint | 14296121 | 1028 days ago | IN | 0.25 ETH | 0.0090624 | ||||
Mint | 14296118 | 1028 days ago | IN | 0.25 ETH | 0.0135768 | ||||
Mint | 14296115 | 1028 days ago | IN | 0.25 ETH | 0.0138227 | ||||
Mint | 14296114 | 1028 days ago | IN | 0.5 ETH | 0.01248781 | ||||
Mint | 14296099 | 1028 days ago | IN | 0.5 ETH | 0.01209595 | ||||
Mint | 14296092 | 1028 days ago | IN | 0.5 ETH | 0.01128927 | ||||
Mint | 14296089 | 1028 days ago | IN | 0.5 ETH | 0.00982532 | ||||
Mint | 14296088 | 1028 days ago | IN | 0.25 ETH | 0.0086319 | ||||
Mint | 14296086 | 1028 days ago | IN | 0.25 ETH | 0.00991998 | ||||
Mint | 14296064 | 1028 days ago | IN | 0.25 ETH | 0.00865984 | ||||
Mint | 14296061 | 1028 days ago | IN | 0.25 ETH | 0.00952495 | ||||
Mint | 14296053 | 1028 days ago | IN | 0.5 ETH | 0.01082503 | ||||
Mint | 14296039 | 1028 days ago | IN | 0.5 ETH | 0.00964082 | ||||
Mint | 14296024 | 1028 days ago | IN | 0.5 ETH | 0.01220652 | ||||
Mint | 14295983 | 1028 days ago | IN | 0.25 ETH | 0.01225546 | ||||
Mint | 14295943 | 1028 days ago | IN | 0.5 ETH | 0.01095422 | ||||
Mint | 14295939 | 1028 days ago | IN | 0.5 ETH | 0.01057062 | ||||
Mint | 14295936 | 1028 days ago | IN | 0.5 ETH | 0.01138743 | ||||
Mint | 14295928 | 1028 days ago | IN | 0.5 ETH | 0.01382636 | ||||
Mint | 14295918 | 1028 days ago | IN | 0.5 ETH | 0.01429008 |
Loading...
Loading
Contract Name:
LoccoStore
Compiler Version
v0.8.12+commit.f00d7308
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-02-28 */ // File: contracts/IMonolocco.sol //SPDX-License-Identifier: UNLICENSED pragma solidity ^0.8.11; interface IMonolocco { function mint(address to, uint256 amount) external; } // File: @openzeppelin/contracts/security/ReentrancyGuard.sol // OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol) pragma solidity ^0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } // File: @openzeppelin/contracts/utils/math/SafeMath.sol // OpenZeppelin Contracts v4.4.1 (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 generally not needed starting with Solidity 0.8, since 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/interfaces/IERC1271.sol // OpenZeppelin Contracts v4.4.1 (interfaces/IERC1271.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC1271 standard signature validation method for * contracts as defined in https://eips.ethereum.org/EIPS/eip-1271[ERC-1271]. * * _Available since v4.1._ */ interface IERC1271 { /** * @dev Should return whether the signature provided is valid for the provided data * @param hash Hash of the data to be signed * @param signature Signature byte array associated with _data */ function isValidSignature(bytes32 hash, bytes memory signature) external view returns (bytes4 magicValue); } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/contracts/utils/cryptography/ECDSA.sol // OpenZeppelin Contracts (last updated v4.5.0) (utils/cryptography/ECDSA.sol) pragma solidity ^0.8.0; /** * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations. * * These functions can be used to verify that a message was signed by the holder * of the private keys of a given address. */ library ECDSA { enum RecoverError { NoError, InvalidSignature, InvalidSignatureLength, InvalidSignatureS, InvalidSignatureV } function _throwError(RecoverError error) private pure { if (error == RecoverError.NoError) { return; // no error: do nothing } else if (error == RecoverError.InvalidSignature) { revert("ECDSA: invalid signature"); } else if (error == RecoverError.InvalidSignatureLength) { revert("ECDSA: invalid signature length"); } else if (error == RecoverError.InvalidSignatureS) { revert("ECDSA: invalid signature 's' value"); } else if (error == RecoverError.InvalidSignatureV) { revert("ECDSA: invalid signature 'v' value"); } } /** * @dev Returns the address that signed a hashed message (`hash`) with * `signature` or error string. This address can then be used for verification purposes. * * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures: * this function rejects them by requiring the `s` value to be in the lower * half order, and the `v` value to be either 27 or 28. * * IMPORTANT: `hash` _must_ be the result of a hash operation for the * verification to be secure: it is possible to craft signatures that * recover to arbitrary addresses for non-hashed data. A safe way to ensure * this is by receiving a hash of the original message (which may otherwise * be too long), and then calling {toEthSignedMessageHash} on it. * * Documentation for signature generation: * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js] * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers] * * _Available since v4.3._ */ function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) { // Check the signature length // - case 65: r,s,v signature (standard) // - case 64: r,vs signature (cf https://eips.ethereum.org/EIPS/eip-2098) _Available since v4.1._ if (signature.length == 65) { bytes32 r; bytes32 s; uint8 v; // ecrecover takes the signature parameters, and the only way to get them // currently is to use assembly. assembly { r := mload(add(signature, 0x20)) s := mload(add(signature, 0x40)) v := byte(0, mload(add(signature, 0x60))) } return tryRecover(hash, v, r, s); } else if (signature.length == 64) { bytes32 r; bytes32 vs; // ecrecover takes the signature parameters, and the only way to get them // currently is to use assembly. assembly { r := mload(add(signature, 0x20)) vs := mload(add(signature, 0x40)) } return tryRecover(hash, r, vs); } else { return (address(0), RecoverError.InvalidSignatureLength); } } /** * @dev Returns the address that signed a hashed message (`hash`) with * `signature`. This address can then be used for verification purposes. * * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures: * this function rejects them by requiring the `s` value to be in the lower * half order, and the `v` value to be either 27 or 28. * * IMPORTANT: `hash` _must_ be the result of a hash operation for the * verification to be secure: it is possible to craft signatures that * recover to arbitrary addresses for non-hashed data. A safe way to ensure * this is by receiving a hash of the original message (which may otherwise * be too long), and then calling {toEthSignedMessageHash} on it. */ function recover(bytes32 hash, bytes memory signature) internal pure returns (address) { (address recovered, RecoverError error) = tryRecover(hash, signature); _throwError(error); return recovered; } /** * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately. * * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures] * * _Available since v4.3._ */ function tryRecover( bytes32 hash, bytes32 r, bytes32 vs ) internal pure returns (address, RecoverError) { bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff); uint8 v = uint8((uint256(vs) >> 255) + 27); return tryRecover(hash, v, r, s); } /** * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately. * * _Available since v4.2._ */ function recover( bytes32 hash, bytes32 r, bytes32 vs ) internal pure returns (address) { (address recovered, RecoverError error) = tryRecover(hash, r, vs); _throwError(error); return recovered; } /** * @dev Overload of {ECDSA-tryRecover} that receives the `v`, * `r` and `s` signature fields separately. * * _Available since v4.3._ */ function tryRecover( bytes32 hash, uint8 v, bytes32 r, bytes32 s ) internal pure returns (address, RecoverError) { // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines // the valid range for s in (301): 0 < s < secp256k1n ÷ 2 + 1, and for v in (302): v ∈ {27, 28}. Most // signatures from current libraries generate a unique signature with an s-value in the lower half order. // // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept // these malleable signatures as well. if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) { return (address(0), RecoverError.InvalidSignatureS); } if (v != 27 && v != 28) { return (address(0), RecoverError.InvalidSignatureV); } // If the signature is valid (and not malleable), return the signer address address signer = ecrecover(hash, v, r, s); if (signer == address(0)) { return (address(0), RecoverError.InvalidSignature); } return (signer, RecoverError.NoError); } /** * @dev Overload of {ECDSA-recover} that receives the `v`, * `r` and `s` signature fields separately. */ function recover( bytes32 hash, uint8 v, bytes32 r, bytes32 s ) internal pure returns (address) { (address recovered, RecoverError error) = tryRecover(hash, v, r, s); _throwError(error); return recovered; } /** * @dev Returns an Ethereum Signed Message, created from a `hash`. This * produces hash corresponding to the one signed with the * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`] * JSON-RPC method as part of EIP-191. * * See {recover}. */ function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) { // 32 is the length in bytes of hash, // enforced by the type signature above return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", hash)); } /** * @dev Returns an Ethereum Signed Message, created from `s`. This * produces hash corresponding to the one signed with the * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`] * JSON-RPC method as part of EIP-191. * * See {recover}. */ function toEthSignedMessageHash(bytes memory s) internal pure returns (bytes32) { return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n", Strings.toString(s.length), s)); } /** * @dev Returns an Ethereum Signed Typed Data, created from a * `domainSeparator` and a `structHash`. This produces hash corresponding * to the one signed with the * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`] * JSON-RPC method as part of EIP-712. * * See {recover}. */ function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32) { return keccak256(abi.encodePacked("\x19\x01", domainSeparator, structHash)); } } // File: @openzeppelin/contracts/utils/cryptography/SignatureChecker.sol // OpenZeppelin Contracts (last updated v4.5.0) (utils/cryptography/SignatureChecker.sol) pragma solidity ^0.8.0; /** * @dev Signature verification helper that can be used instead of `ECDSA.recover` to seamlessly support both ECDSA * signatures from externally owned accounts (EOAs) as well as ERC1271 signatures from smart contract wallets like * Argent and Gnosis Safe. * * _Available since v4.1._ */ library SignatureChecker { /** * @dev Checks if a signature is valid for a given signer and data hash. If the signer is a smart contract, the * signature is validated against that smart contract using ERC1271, otherwise it's validated using `ECDSA.recover`. * * NOTE: Unlike ECDSA signatures, contract signatures are revocable, and the outcome of this function can thus * change through time. It could return true at block N and false at block N+1 (or the opposite). */ function isValidSignatureNow( address signer, bytes32 hash, bytes memory signature ) internal view returns (bool) { (address recovered, ECDSA.RecoverError error) = ECDSA.tryRecover(hash, signature); if (error == ECDSA.RecoverError.NoError && recovered == signer) { return true; } (bool success, bytes memory result) = signer.staticcall( abi.encodeWithSelector(IERC1271.isValidSignature.selector, hash, signature) ); return (success && result.length == 32 && abi.decode(result, (bytes4)) == IERC1271.isValidSignature.selector); } } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/security/Pausable.sol // OpenZeppelin Contracts v4.4.1 (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/Counters.sol // OpenZeppelin Contracts v4.4.1 (utils/Counters.sol) pragma solidity ^0.8.0; /** * @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: contracts/Loccostore.sol pragma solidity ^0.8.11; contract LoccoStore is Pausable, Ownable, ReentrancyGuard { using SafeMath for uint256; using SignatureChecker for address; address private signer; IMonolocco public _monoLocco; mapping (address => uint256) public _amountMinted; uint256 public _price = 0.25 ether; uint256 public _maxBuyAmount = 2; uint256 public constant LIST_IDENTIFIER = 1; uint256 public _startsAt = 1646049600; //2022-02-28T12:00:00.000Z uint256 public _endsAt = 1646071200; //2022-02-28T18:00:00.000Z address MHTT = 0x3eb7551EaC8ABaFc2f43b706dc2226aDE6E9051b; address PIG = 0xAF483e4d13100c7c6D0F7543a0E603Ac4eb32D5d; address LUCKY = 0x16256536e2B2fEe74d914169cB3612aC37f9Cc2A; constructor( address signer_, address monoLocco_ ){ signer = signer_; _monoLocco = IMonolocco(monoLocco_); } function mint(uint256 amount, bytes memory signature) external payable whenNotPaused nonReentrant { require(block.timestamp >= _startsAt && block.timestamp <= _endsAt, "LoccoStore: Not active"); require(signer.isValidSignatureNow(keccak256(abi.encodePacked(msg.sender, LIST_IDENTIFIER)), signature), "LoccoStore: Invalid signature"); require(_amountMinted[msg.sender].add(amount) <= _maxBuyAmount, "LoccoStore: User already minted"); require(msg.value >= _price.mul(amount), "LoccoStore: msg.value is less than total price"); _amountMinted[msg.sender] = _amountMinted[msg.sender].add(amount); _monoLocco.mint(msg.sender, amount); } function splitWithdraw() external onlyOwner { payable(MHTT).transfer(address(this).balance / 3); payable(PIG).transfer(address(this).balance / 3); payable(LUCKY).transfer(address(this).balance / 3); } function withdraw() external onlyOwner { payable(owner()).transfer(address(this).balance); } function updateSigner(address _newSigner) external onlyOwner { signer = _newSigner; } function pause() external onlyOwner { _pause(); } function unPause() external onlyOwner { _unpause(); } function changeStartAt(uint256 newDate) external onlyOwner { _startsAt = newDate; } function changeEndsAt(uint256 newDate) external onlyOwner { _endsAt = newDate; } function changePrice(uint256 newPrice) external onlyOwner { _price = newPrice; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"signer_","type":"address"},{"internalType":"address","name":"monoLocco_","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"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":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"LIST_IDENTIFIER","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_amountMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_endsAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxBuyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_monoLocco","outputs":[{"internalType":"contract IMonolocco","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_startsAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newDate","type":"uint256"}],"name":"changeEndsAt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"changePrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newDate","type":"uint256"}],"name":"changeStartAt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"signature","type":"bytes"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"splitWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unPause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newSigner","type":"address"}],"name":"updateSigner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526703782dace9d90000600555600260065563621cb94060075563621d0da0600855733eb7551eac8abafc2f43b706dc2226ade6e9051b600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073af483e4d13100c7c6d0f7543a0e603ac4eb32d5d600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507316256536e2b2fee74d914169cb3612ac37f9cc2a600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156200013157600080fd5b50604051620025ed380380620025ed833981810160405281019062000157919062000359565b60008060006101000a81548160ff02191690831515021790555062000191620001856200022260201b60201c565b6200022a60201b60201c565b6001808190555081600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050620003a0565b600033905090565b60008060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600060016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200032182620002f4565b9050919050565b620003338162000314565b81146200033f57600080fd5b50565b600081519050620003538162000328565b92915050565b60008060408385031215620003735762000372620002ef565b5b6000620003838582860162000342565b9250506020620003968582860162000342565b9150509250929050565b61223d80620003b06000396000f3fe60806040526004361061011f5760003560e01c8063aae4a42b116100a0578063db7fd40811610064578063db7fd40814610365578063e69a971814610381578063f2fde38b146103aa578063f5805274146103d3578063f7b188a5146103fe5761011f565b8063aae4a42b14610290578063af573db2146102bb578063b11761db146102d2578063c9e6bef4146102fd578063d53150fc146103285761011f565b8063715018a6116100e7578063715018a6146101e55780638456cb59146101fc5780638da5cb5b14610213578063a2b40d191461023e578063a7ecd37e146102675761011f565b80630492f05514610124578063235b6ea11461014f5780633ccfd60b1461017a5780633d2bf8fd146101915780635c975abb146101ba575b600080fd5b34801561013057600080fd5b50610139610415565b6040516101469190611619565b60405180910390f35b34801561015b57600080fd5b5061016461041b565b6040516101719190611619565b60405180910390f35b34801561018657600080fd5b5061018f610421565b005b34801561019d57600080fd5b506101b860048036038101906101b39190611674565b6104ed565b005b3480156101c657600080fd5b506101cf610573565b6040516101dc91906116bc565b60405180910390f35b3480156101f157600080fd5b506101fa610589565b005b34801561020857600080fd5b50610211610611565b005b34801561021f57600080fd5b50610228610697565b6040516102359190611718565b60405180910390f35b34801561024a57600080fd5b5061026560048036038101906102609190611674565b6106c0565b005b34801561027357600080fd5b5061028e6004803603810190610289919061175f565b610746565b005b34801561029c57600080fd5b506102a5610806565b6040516102b291906117eb565b60405180910390f35b3480156102c757600080fd5b506102d061082c565b005b3480156102de57600080fd5b506102e7610a09565b6040516102f49190611619565b60405180910390f35b34801561030957600080fd5b50610312610a0f565b60405161031f9190611619565b60405180910390f35b34801561033457600080fd5b5061034f600480360381019061034a919061175f565b610a15565b60405161035c9190611619565b60405180910390f35b61037f600480360381019061037a919061194c565b610a2d565b005b34801561038d57600080fd5b506103a860048036038101906103a39190611674565b610de7565b005b3480156103b657600080fd5b506103d160048036038101906103cc919061175f565b610e6d565b005b3480156103df57600080fd5b506103e8610f65565b6040516103f59190611619565b60405180910390f35b34801561040a57600080fd5b50610413610f6a565b005b60065481565b60055481565b610429610ff0565b73ffffffffffffffffffffffffffffffffffffffff16610447610697565b73ffffffffffffffffffffffffffffffffffffffff161461049d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161049490611a05565b60405180910390fd5b6104a5610697565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050501580156104ea573d6000803e3d6000fd5b50565b6104f5610ff0565b73ffffffffffffffffffffffffffffffffffffffff16610513610697565b73ffffffffffffffffffffffffffffffffffffffff1614610569576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161056090611a05565b60405180910390fd5b8060078190555050565b60008060009054906101000a900460ff16905090565b610591610ff0565b73ffffffffffffffffffffffffffffffffffffffff166105af610697565b73ffffffffffffffffffffffffffffffffffffffff1614610605576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105fc90611a05565b60405180910390fd5b61060f6000610ff8565b565b610619610ff0565b73ffffffffffffffffffffffffffffffffffffffff16610637610697565b73ffffffffffffffffffffffffffffffffffffffff161461068d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161068490611a05565b60405180910390fd5b6106956110bd565b565b60008060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6106c8610ff0565b73ffffffffffffffffffffffffffffffffffffffff166106e6610697565b73ffffffffffffffffffffffffffffffffffffffff161461073c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161073390611a05565b60405180910390fd5b8060058190555050565b61074e610ff0565b73ffffffffffffffffffffffffffffffffffffffff1661076c610697565b73ffffffffffffffffffffffffffffffffffffffff16146107c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107b990611a05565b60405180910390fd5b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610834610ff0565b73ffffffffffffffffffffffffffffffffffffffff16610852610697565b73ffffffffffffffffffffffffffffffffffffffff16146108a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161089f90611a05565b60405180910390fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6003476108f19190611a83565b9081150290604051600060405180830381858888f1935050505015801561091c573d6000803e3d6000fd5b50600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6003476109669190611a83565b9081150290604051600060405180830381858888f19350505050158015610991573d6000803e3d6000fd5b50600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6003476109db9190611a83565b9081150290604051600060405180830381858888f19350505050158015610a06573d6000803e3d6000fd5b50565b60075481565b60085481565b60046020528060005260406000206000915090505481565b610a35610573565b15610a75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6c90611b00565b60405180910390fd5b60026001541415610abb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab290611b6c565b60405180910390fd5b60026001819055506007544210158015610ad757506008544211155b610b16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0d90611bd8565b60405180910390fd5b610b8c336001604051602001610b2d929190611c61565b6040516020818303038152906040528051906020012082600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661115f9092919063ffffffff16565b610bcb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc290611cd9565b60405180910390fd5b600654610c2083600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461134490919063ffffffff16565b1115610c61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5890611d45565b60405180910390fd5b610c768260055461135a90919063ffffffff16565b341015610cb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610caf90611dd7565b60405180910390fd5b610d0a82600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461134490919063ffffffff16565b600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1933846040518363ffffffff1660e01b8152600401610daa929190611df7565b600060405180830381600087803b158015610dc457600080fd5b505af1158015610dd8573d6000803e3d6000fd5b50505050600180819055505050565b610def610ff0565b73ffffffffffffffffffffffffffffffffffffffff16610e0d610697565b73ffffffffffffffffffffffffffffffffffffffff1614610e63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5a90611a05565b60405180910390fd5b8060088190555050565b610e75610ff0565b73ffffffffffffffffffffffffffffffffffffffff16610e93610697565b73ffffffffffffffffffffffffffffffffffffffff1614610ee9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee090611a05565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610f59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5090611e92565b60405180910390fd5b610f6281610ff8565b50565b600181565b610f72610ff0565b73ffffffffffffffffffffffffffffffffffffffff16610f90610697565b73ffffffffffffffffffffffffffffffffffffffff1614610fe6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fdd90611a05565b60405180910390fd5b610fee611370565b565b600033905090565b60008060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600060016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6110c5610573565b15611105576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110fc90611b00565b60405180910390fd5b60016000806101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611148610ff0565b6040516111559190611718565b60405180910390a1565b600080600061116e8585611411565b915091506000600481111561118657611185611eb2565b5b81600481111561119957611198611eb2565b5b1480156111d157508573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b156111e15760019250505061133d565b6000808773ffffffffffffffffffffffffffffffffffffffff16631626ba7e60e01b8888604051602401611216929190611f82565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516112809190611fee565b600060405180830381855afa9150503d80600081146112bb576040519150601f19603f3d011682016040523d82523d6000602084013e6112c0565b606091505b50915091508180156112d3575060208151145b80156113365750631626ba7e60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681806020019051810190611315919061205d565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9450505050505b9392505050565b60008183611352919061208a565b905092915050565b6000818361136891906120e0565b905092915050565b611378610573565b6113b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ae90612186565b60405180910390fd5b60008060006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6113fa610ff0565b6040516114079190611718565b60405180910390a1565b6000806041835114156114535760008060006020860151925060408601519150606086015160001a905061144787828585611494565b9450945050505061148d565b6040835114156114845760008060208501519150604085015190506114798683836115a1565b93509350505061148d565b60006002915091505b9250929050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c11156114cf576000600391509150611598565b601b8560ff16141580156114e75750601c8560ff1614155b156114f9576000600491509150611598565b60006001878787876040516000815260200160405260405161151e94939291906121c2565b6020604051602081039080840390855afa158015611540573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561158f57600060019250925050611598565b80600092509250505b94509492505050565b60008060007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60001b841690506000601b60ff8660001c901c6115e4919061208a565b90506115f287828885611494565b935093505050935093915050565b6000819050919050565b61161381611600565b82525050565b600060208201905061162e600083018461160a565b92915050565b6000604051905090565b600080fd5b600080fd5b61165181611600565b811461165c57600080fd5b50565b60008135905061166e81611648565b92915050565b60006020828403121561168a5761168961163e565b5b60006116988482850161165f565b91505092915050565b60008115159050919050565b6116b6816116a1565b82525050565b60006020820190506116d160008301846116ad565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611702826116d7565b9050919050565b611712816116f7565b82525050565b600060208201905061172d6000830184611709565b92915050565b61173c816116f7565b811461174757600080fd5b50565b60008135905061175981611733565b92915050565b6000602082840312156117755761177461163e565b5b60006117838482850161174a565b91505092915050565b6000819050919050565b60006117b16117ac6117a7846116d7565b61178c565b6116d7565b9050919050565b60006117c382611796565b9050919050565b60006117d5826117b8565b9050919050565b6117e5816117ca565b82525050565b600060208201905061180060008301846117dc565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61185982611810565b810181811067ffffffffffffffff8211171561187857611877611821565b5b80604052505050565b600061188b611634565b90506118978282611850565b919050565b600067ffffffffffffffff8211156118b7576118b6611821565b5b6118c082611810565b9050602081019050919050565b82818337600083830152505050565b60006118ef6118ea8461189c565b611881565b90508281526020810184848401111561190b5761190a61180b565b5b6119168482856118cd565b509392505050565b600082601f83011261193357611932611806565b5b81356119438482602086016118dc565b91505092915050565b600080604083850312156119635761196261163e565b5b60006119718582860161165f565b925050602083013567ffffffffffffffff81111561199257611991611643565b5b61199e8582860161191e565b9150509250929050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006119ef6020836119a8565b91506119fa826119b9565b602082019050919050565b60006020820190508181036000830152611a1e816119e2565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611a8e82611600565b9150611a9983611600565b925082611aa957611aa8611a25565b5b828204905092915050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b6000611aea6010836119a8565b9150611af582611ab4565b602082019050919050565b60006020820190508181036000830152611b1981611add565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6000611b56601f836119a8565b9150611b6182611b20565b602082019050919050565b60006020820190508181036000830152611b8581611b49565b9050919050565b7f4c6f63636f53746f72653a204e6f742061637469766500000000000000000000600082015250565b6000611bc26016836119a8565b9150611bcd82611b8c565b602082019050919050565b60006020820190508181036000830152611bf181611bb5565b9050919050565b60008160601b9050919050565b6000611c1082611bf8565b9050919050565b6000611c2282611c05565b9050919050565b611c3a611c35826116f7565b611c17565b82525050565b6000819050919050565b611c5b611c5682611600565b611c40565b82525050565b6000611c6d8285611c29565b601482019150611c7d8284611c4a565b6020820191508190509392505050565b7f4c6f63636f53746f72653a20496e76616c6964207369676e6174757265000000600082015250565b6000611cc3601d836119a8565b9150611cce82611c8d565b602082019050919050565b60006020820190508181036000830152611cf281611cb6565b9050919050565b7f4c6f63636f53746f72653a205573657220616c7265616479206d696e74656400600082015250565b6000611d2f601f836119a8565b9150611d3a82611cf9565b602082019050919050565b60006020820190508181036000830152611d5e81611d22565b9050919050565b7f4c6f63636f53746f72653a206d73672e76616c7565206973206c65737320746860008201527f616e20746f74616c207072696365000000000000000000000000000000000000602082015250565b6000611dc1602e836119a8565b9150611dcc82611d65565b604082019050919050565b60006020820190508181036000830152611df081611db4565b9050919050565b6000604082019050611e0c6000830185611709565b611e19602083018461160a565b9392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000611e7c6026836119a8565b9150611e8782611e20565b604082019050919050565b60006020820190508181036000830152611eab81611e6f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6000819050919050565b611ef481611ee1565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611f34578082015181840152602081019050611f19565b83811115611f43576000848401525b50505050565b6000611f5482611efa565b611f5e8185611f05565b9350611f6e818560208601611f16565b611f7781611810565b840191505092915050565b6000604082019050611f976000830185611eeb565b8181036020830152611fa98184611f49565b90509392505050565b600081905092915050565b6000611fc882611efa565b611fd28185611fb2565b9350611fe2818560208601611f16565b80840191505092915050565b6000611ffa8284611fbd565b915081905092915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61203a81612005565b811461204557600080fd5b50565b60008151905061205781612031565b92915050565b6000602082840312156120735761207261163e565b5b600061208184828501612048565b91505092915050565b600061209582611600565b91506120a083611600565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156120d5576120d4611a54565b5b828201905092915050565b60006120eb82611600565b91506120f683611600565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561212f5761212e611a54565b5b828202905092915050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b60006121706014836119a8565b915061217b8261213a565b602082019050919050565b6000602082019050818103600083015261219f81612163565b9050919050565b600060ff82169050919050565b6121bc816121a6565b82525050565b60006080820190506121d76000830187611eeb565b6121e460208301866121b3565b6121f16040830185611eeb565b6121fe6060830184611eeb565b9594505050505056fea264697066735822122047e71899936e6eaf2b4baa704c60566e4e3b7356e85dfefe5176428c152f261564736f6c634300080c0033000000000000000000000000086c626954e629c5f7286b5463999d1e86f3467300000000000000000000000075b7d9fe942fb1c7d10885d5315081a63f89706d
Deployed Bytecode
0x60806040526004361061011f5760003560e01c8063aae4a42b116100a0578063db7fd40811610064578063db7fd40814610365578063e69a971814610381578063f2fde38b146103aa578063f5805274146103d3578063f7b188a5146103fe5761011f565b8063aae4a42b14610290578063af573db2146102bb578063b11761db146102d2578063c9e6bef4146102fd578063d53150fc146103285761011f565b8063715018a6116100e7578063715018a6146101e55780638456cb59146101fc5780638da5cb5b14610213578063a2b40d191461023e578063a7ecd37e146102675761011f565b80630492f05514610124578063235b6ea11461014f5780633ccfd60b1461017a5780633d2bf8fd146101915780635c975abb146101ba575b600080fd5b34801561013057600080fd5b50610139610415565b6040516101469190611619565b60405180910390f35b34801561015b57600080fd5b5061016461041b565b6040516101719190611619565b60405180910390f35b34801561018657600080fd5b5061018f610421565b005b34801561019d57600080fd5b506101b860048036038101906101b39190611674565b6104ed565b005b3480156101c657600080fd5b506101cf610573565b6040516101dc91906116bc565b60405180910390f35b3480156101f157600080fd5b506101fa610589565b005b34801561020857600080fd5b50610211610611565b005b34801561021f57600080fd5b50610228610697565b6040516102359190611718565b60405180910390f35b34801561024a57600080fd5b5061026560048036038101906102609190611674565b6106c0565b005b34801561027357600080fd5b5061028e6004803603810190610289919061175f565b610746565b005b34801561029c57600080fd5b506102a5610806565b6040516102b291906117eb565b60405180910390f35b3480156102c757600080fd5b506102d061082c565b005b3480156102de57600080fd5b506102e7610a09565b6040516102f49190611619565b60405180910390f35b34801561030957600080fd5b50610312610a0f565b60405161031f9190611619565b60405180910390f35b34801561033457600080fd5b5061034f600480360381019061034a919061175f565b610a15565b60405161035c9190611619565b60405180910390f35b61037f600480360381019061037a919061194c565b610a2d565b005b34801561038d57600080fd5b506103a860048036038101906103a39190611674565b610de7565b005b3480156103b657600080fd5b506103d160048036038101906103cc919061175f565b610e6d565b005b3480156103df57600080fd5b506103e8610f65565b6040516103f59190611619565b60405180910390f35b34801561040a57600080fd5b50610413610f6a565b005b60065481565b60055481565b610429610ff0565b73ffffffffffffffffffffffffffffffffffffffff16610447610697565b73ffffffffffffffffffffffffffffffffffffffff161461049d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161049490611a05565b60405180910390fd5b6104a5610697565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050501580156104ea573d6000803e3d6000fd5b50565b6104f5610ff0565b73ffffffffffffffffffffffffffffffffffffffff16610513610697565b73ffffffffffffffffffffffffffffffffffffffff1614610569576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161056090611a05565b60405180910390fd5b8060078190555050565b60008060009054906101000a900460ff16905090565b610591610ff0565b73ffffffffffffffffffffffffffffffffffffffff166105af610697565b73ffffffffffffffffffffffffffffffffffffffff1614610605576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105fc90611a05565b60405180910390fd5b61060f6000610ff8565b565b610619610ff0565b73ffffffffffffffffffffffffffffffffffffffff16610637610697565b73ffffffffffffffffffffffffffffffffffffffff161461068d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161068490611a05565b60405180910390fd5b6106956110bd565b565b60008060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6106c8610ff0565b73ffffffffffffffffffffffffffffffffffffffff166106e6610697565b73ffffffffffffffffffffffffffffffffffffffff161461073c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161073390611a05565b60405180910390fd5b8060058190555050565b61074e610ff0565b73ffffffffffffffffffffffffffffffffffffffff1661076c610697565b73ffffffffffffffffffffffffffffffffffffffff16146107c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107b990611a05565b60405180910390fd5b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610834610ff0565b73ffffffffffffffffffffffffffffffffffffffff16610852610697565b73ffffffffffffffffffffffffffffffffffffffff16146108a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161089f90611a05565b60405180910390fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6003476108f19190611a83565b9081150290604051600060405180830381858888f1935050505015801561091c573d6000803e3d6000fd5b50600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6003476109669190611a83565b9081150290604051600060405180830381858888f19350505050158015610991573d6000803e3d6000fd5b50600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6003476109db9190611a83565b9081150290604051600060405180830381858888f19350505050158015610a06573d6000803e3d6000fd5b50565b60075481565b60085481565b60046020528060005260406000206000915090505481565b610a35610573565b15610a75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6c90611b00565b60405180910390fd5b60026001541415610abb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab290611b6c565b60405180910390fd5b60026001819055506007544210158015610ad757506008544211155b610b16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0d90611bd8565b60405180910390fd5b610b8c336001604051602001610b2d929190611c61565b6040516020818303038152906040528051906020012082600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661115f9092919063ffffffff16565b610bcb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc290611cd9565b60405180910390fd5b600654610c2083600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461134490919063ffffffff16565b1115610c61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5890611d45565b60405180910390fd5b610c768260055461135a90919063ffffffff16565b341015610cb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610caf90611dd7565b60405180910390fd5b610d0a82600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461134490919063ffffffff16565b600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1933846040518363ffffffff1660e01b8152600401610daa929190611df7565b600060405180830381600087803b158015610dc457600080fd5b505af1158015610dd8573d6000803e3d6000fd5b50505050600180819055505050565b610def610ff0565b73ffffffffffffffffffffffffffffffffffffffff16610e0d610697565b73ffffffffffffffffffffffffffffffffffffffff1614610e63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5a90611a05565b60405180910390fd5b8060088190555050565b610e75610ff0565b73ffffffffffffffffffffffffffffffffffffffff16610e93610697565b73ffffffffffffffffffffffffffffffffffffffff1614610ee9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee090611a05565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610f59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5090611e92565b60405180910390fd5b610f6281610ff8565b50565b600181565b610f72610ff0565b73ffffffffffffffffffffffffffffffffffffffff16610f90610697565b73ffffffffffffffffffffffffffffffffffffffff1614610fe6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fdd90611a05565b60405180910390fd5b610fee611370565b565b600033905090565b60008060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600060016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6110c5610573565b15611105576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110fc90611b00565b60405180910390fd5b60016000806101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611148610ff0565b6040516111559190611718565b60405180910390a1565b600080600061116e8585611411565b915091506000600481111561118657611185611eb2565b5b81600481111561119957611198611eb2565b5b1480156111d157508573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b156111e15760019250505061133d565b6000808773ffffffffffffffffffffffffffffffffffffffff16631626ba7e60e01b8888604051602401611216929190611f82565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516112809190611fee565b600060405180830381855afa9150503d80600081146112bb576040519150601f19603f3d011682016040523d82523d6000602084013e6112c0565b606091505b50915091508180156112d3575060208151145b80156113365750631626ba7e60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681806020019051810190611315919061205d565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9450505050505b9392505050565b60008183611352919061208a565b905092915050565b6000818361136891906120e0565b905092915050565b611378610573565b6113b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ae90612186565b60405180910390fd5b60008060006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6113fa610ff0565b6040516114079190611718565b60405180910390a1565b6000806041835114156114535760008060006020860151925060408601519150606086015160001a905061144787828585611494565b9450945050505061148d565b6040835114156114845760008060208501519150604085015190506114798683836115a1565b93509350505061148d565b60006002915091505b9250929050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c11156114cf576000600391509150611598565b601b8560ff16141580156114e75750601c8560ff1614155b156114f9576000600491509150611598565b60006001878787876040516000815260200160405260405161151e94939291906121c2565b6020604051602081039080840390855afa158015611540573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561158f57600060019250925050611598565b80600092509250505b94509492505050565b60008060007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60001b841690506000601b60ff8660001c901c6115e4919061208a565b90506115f287828885611494565b935093505050935093915050565b6000819050919050565b61161381611600565b82525050565b600060208201905061162e600083018461160a565b92915050565b6000604051905090565b600080fd5b600080fd5b61165181611600565b811461165c57600080fd5b50565b60008135905061166e81611648565b92915050565b60006020828403121561168a5761168961163e565b5b60006116988482850161165f565b91505092915050565b60008115159050919050565b6116b6816116a1565b82525050565b60006020820190506116d160008301846116ad565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611702826116d7565b9050919050565b611712816116f7565b82525050565b600060208201905061172d6000830184611709565b92915050565b61173c816116f7565b811461174757600080fd5b50565b60008135905061175981611733565b92915050565b6000602082840312156117755761177461163e565b5b60006117838482850161174a565b91505092915050565b6000819050919050565b60006117b16117ac6117a7846116d7565b61178c565b6116d7565b9050919050565b60006117c382611796565b9050919050565b60006117d5826117b8565b9050919050565b6117e5816117ca565b82525050565b600060208201905061180060008301846117dc565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61185982611810565b810181811067ffffffffffffffff8211171561187857611877611821565b5b80604052505050565b600061188b611634565b90506118978282611850565b919050565b600067ffffffffffffffff8211156118b7576118b6611821565b5b6118c082611810565b9050602081019050919050565b82818337600083830152505050565b60006118ef6118ea8461189c565b611881565b90508281526020810184848401111561190b5761190a61180b565b5b6119168482856118cd565b509392505050565b600082601f83011261193357611932611806565b5b81356119438482602086016118dc565b91505092915050565b600080604083850312156119635761196261163e565b5b60006119718582860161165f565b925050602083013567ffffffffffffffff81111561199257611991611643565b5b61199e8582860161191e565b9150509250929050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006119ef6020836119a8565b91506119fa826119b9565b602082019050919050565b60006020820190508181036000830152611a1e816119e2565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611a8e82611600565b9150611a9983611600565b925082611aa957611aa8611a25565b5b828204905092915050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b6000611aea6010836119a8565b9150611af582611ab4565b602082019050919050565b60006020820190508181036000830152611b1981611add565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6000611b56601f836119a8565b9150611b6182611b20565b602082019050919050565b60006020820190508181036000830152611b8581611b49565b9050919050565b7f4c6f63636f53746f72653a204e6f742061637469766500000000000000000000600082015250565b6000611bc26016836119a8565b9150611bcd82611b8c565b602082019050919050565b60006020820190508181036000830152611bf181611bb5565b9050919050565b60008160601b9050919050565b6000611c1082611bf8565b9050919050565b6000611c2282611c05565b9050919050565b611c3a611c35826116f7565b611c17565b82525050565b6000819050919050565b611c5b611c5682611600565b611c40565b82525050565b6000611c6d8285611c29565b601482019150611c7d8284611c4a565b6020820191508190509392505050565b7f4c6f63636f53746f72653a20496e76616c6964207369676e6174757265000000600082015250565b6000611cc3601d836119a8565b9150611cce82611c8d565b602082019050919050565b60006020820190508181036000830152611cf281611cb6565b9050919050565b7f4c6f63636f53746f72653a205573657220616c7265616479206d696e74656400600082015250565b6000611d2f601f836119a8565b9150611d3a82611cf9565b602082019050919050565b60006020820190508181036000830152611d5e81611d22565b9050919050565b7f4c6f63636f53746f72653a206d73672e76616c7565206973206c65737320746860008201527f616e20746f74616c207072696365000000000000000000000000000000000000602082015250565b6000611dc1602e836119a8565b9150611dcc82611d65565b604082019050919050565b60006020820190508181036000830152611df081611db4565b9050919050565b6000604082019050611e0c6000830185611709565b611e19602083018461160a565b9392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000611e7c6026836119a8565b9150611e8782611e20565b604082019050919050565b60006020820190508181036000830152611eab81611e6f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6000819050919050565b611ef481611ee1565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611f34578082015181840152602081019050611f19565b83811115611f43576000848401525b50505050565b6000611f5482611efa565b611f5e8185611f05565b9350611f6e818560208601611f16565b611f7781611810565b840191505092915050565b6000604082019050611f976000830185611eeb565b8181036020830152611fa98184611f49565b90509392505050565b600081905092915050565b6000611fc882611efa565b611fd28185611fb2565b9350611fe2818560208601611f16565b80840191505092915050565b6000611ffa8284611fbd565b915081905092915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61203a81612005565b811461204557600080fd5b50565b60008151905061205781612031565b92915050565b6000602082840312156120735761207261163e565b5b600061208184828501612048565b91505092915050565b600061209582611600565b91506120a083611600565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156120d5576120d4611a54565b5b828201905092915050565b60006120eb82611600565b91506120f683611600565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561212f5761212e611a54565b5b828202905092915050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b60006121706014836119a8565b915061217b8261213a565b602082019050919050565b6000602082019050818103600083015261219f81612163565b9050919050565b600060ff82169050919050565b6121bc816121a6565b82525050565b60006080820190506121d76000830187611eeb565b6121e460208301866121b3565b6121f16040830185611eeb565b6121fe6060830184611eeb565b9594505050505056fea264697066735822122047e71899936e6eaf2b4baa704c60566e4e3b7356e85dfefe5176428c152f261564736f6c634300080c0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000086c626954e629c5f7286b5463999d1e86f3467300000000000000000000000075b7d9fe942fb1c7d10885d5315081a63f89706d
-----Decoded View---------------
Arg [0] : signer_ (address): 0x086C626954e629C5F7286b5463999d1e86f34673
Arg [1] : monoLocco_ (address): 0x75B7D9fe942fB1C7D10885d5315081A63F89706D
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000086c626954e629c5f7286b5463999d1e86f34673
Arg [1] : 00000000000000000000000075b7d9fe942fb1c7d10885d5315081a63f89706d
Deployed Bytecode Sourcemap
39809:2362:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40095:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40056:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41560:100;;;;;;;;;;;;;:::i;:::-;;41891:92;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37081:86;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35132:103;;;;;;;;;;;;;:::i;:::-;;41761:57;;;;;;;;;;;;;:::i;:::-;;34481:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42080:88;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41664:93;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39969:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41336:218;;;;;;;;;;;;;:::i;:::-;;40180:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40249:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40002:49;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40642:688;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41987:89;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35390:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40132:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41824:61;;;;;;;;;;;;;:::i;:::-;;40095:32;;;;:::o;40056:34::-;;;;:::o;41560:100::-;34712:12;:10;:12::i;:::-;34701:23;;:7;:5;:7::i;:::-;:23;;;34693:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41614:7:::1;:5;:7::i;:::-;41606:25;;:48;41632:21;41606:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;41560:100::o:0;41891:92::-;34712:12;:10;:12::i;:::-;34701:23;;:7;:5;:7::i;:::-;:23;;;34693:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41970:7:::1;41957:9;:20;;;;41891:92:::0;:::o;37081:86::-;37128:4;37152:7;;;;;;;;;;;37145:14;;37081:86;:::o;35132:103::-;34712:12;:10;:12::i;:::-;34701:23;;:7;:5;:7::i;:::-;:23;;;34693:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35197:30:::1;35224:1;35197:18;:30::i;:::-;35132:103::o:0;41761:57::-;34712:12;:10;:12::i;:::-;34701:23;;:7;:5;:7::i;:::-;:23;;;34693:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41804:8:::1;:6;:8::i;:::-;41761:57::o:0;34481:87::-;34527:7;34554:6;;;;;;;;;;;34547:13;;34481:87;:::o;42080:88::-;34712:12;:10;:12::i;:::-;34701:23;;:7;:5;:7::i;:::-;:23;;;34693:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42154:8:::1;42145:6;:17;;;;42080:88:::0;:::o;41664:93::-;34712:12;:10;:12::i;:::-;34701:23;;:7;:5;:7::i;:::-;:23;;;34693:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41741:10:::1;41732:6;;:19;;;;;;;;;;;;;;;;;;41664:93:::0;:::o;39969:28::-;;;;;;;;;;;;;:::o;41336:218::-;34712:12;:10;:12::i;:::-;34701:23;;:7;:5;:7::i;:::-;:23;;;34693:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41395:4:::1;;;;;;;;;;;41387:22;;:49;41434:1;41410:21;:25;;;;:::i;:::-;41387:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;41451:3;;;;;;;;;;;41443:21;;:48;41489:1;41465:21;:25;;;;:::i;:::-;41443:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;41506:5;;;;;;;;;;;41498:23;;:50;41546:1;41522:21;:25;;;;:::i;:::-;41498:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;41336:218::o:0;40180:37::-;;;;:::o;40249:35::-;;;;:::o;40002:49::-;;;;;;;;;;;;;;;;;:::o;40642:688::-;37407:8;:6;:8::i;:::-;37406:9;37398:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;1999:1:::1;2597:7;;:19;;2589:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;1999:1;2730:7;:18;;;;40798:9:::2;;40779:15;:28;;:58;;;;;40830:7;;40811:15;:26;;40779:58;40771:93;;;;;;;;;;;;:::i;:::-;;;;;;;;;40879:95;40933:10;40174:1;40916:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;40906:56;;;;;;40964:9;40879:6;;;;;;;;;;;:26;;;;:95;;;;;:::i;:::-;40871:137;;;;;;;;;;;;:::i;:::-;;;;;;;;;41064:13;;41023:37;41053:6;41023:13;:25;41037:10;41023:25;;;;;;;;;;;;;;;;:29;;:37;;;;:::i;:::-;:54;;41015:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;41141:18;41152:6;41141;;:10;;:18;;;;:::i;:::-;41128:9;:31;;41120:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;41245:37;41275:6;41245:13;:25;41259:10;41245:25;;;;;;;;;;;;;;;;:29;;:37;;;;:::i;:::-;41217:13;:25;41231:10;41217:25;;;;;;;;;;;;;;;:65;;;;41289:10;;;;;;;;;;;:15;;;41305:10;41317:6;41289:35;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;1955:1:::1;2909:7:::0;:22:::1;;;;40642:688:::0;;:::o;41987:89::-;34712:12;:10;:12::i;:::-;34701:23;;:7;:5;:7::i;:::-;:23;;;34693:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42063:7:::1;42052;:18;;;;41987:89:::0;:::o;35390:201::-;34712:12;:10;:12::i;:::-;34701:23;;:7;:5;:7::i;:::-;:23;;;34693:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35499:1:::1;35479:22;;:8;:22;;;;35471:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;35555:28;35574:8;35555:18;:28::i;:::-;35390:201:::0;:::o;40132:43::-;40174:1;40132:43;:::o;41824:61::-;34712:12;:10;:12::i;:::-;34701:23;;:7;:5;:7::i;:::-;:23;;;34693:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41869:10:::1;:8;:10::i;:::-;41824:61::o:0;33205:98::-;33258:7;33285:10;33278:17;;33205:98;:::o;35751:191::-;35825:16;35844:6;;;;;;;;;;;35825:25;;35870:8;35861:6;;:17;;;;;;;;;;;;;;;;;;35925:8;35894:40;;35915:8;35894:40;;;;;;;;;;;;35814:128;35751:191;:::o;37881:118::-;37407:8;:6;:8::i;:::-;37406:9;37398:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;37951:4:::1;37941:7;::::0;:14:::1;;;;;;;;;;;;;;;;;;37971:20;37978:12;:10;:12::i;:::-;37971:20;;;;;;:::i;:::-;;;;;;;;37881:118::o:0;31872:647::-;32012:4;32030:17;32049:24;32077:33;32094:4;32100:9;32077:16;:33::i;:::-;32029:81;;;;32134:26;32125:35;;;;;;;;:::i;:::-;;:5;:35;;;;;;;;:::i;:::-;;;:58;;;;;32177:6;32164:19;;:9;:19;;;32125:58;32121:102;;;32207:4;32200:11;;;;;;32121:102;32236:12;32250:19;32273:6;:17;;32328:34;;;32364:4;32370:9;32305:75;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32273:118;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32235:156;;;;32410:7;:30;;;;;32438:2;32421:6;:13;:19;32410:30;:100;;;;;32476:34;;;32444:66;;;32455:6;32444:28;;;;;;;;;;;;:::i;:::-;:66;;;;32410:100;32402:109;;;;;;31872:647;;;;;;:::o;5808:98::-;5866:7;5897:1;5893;:5;;;;:::i;:::-;5886:12;;5808:98;;;;:::o;6546:::-;6604:7;6635:1;6631;:5;;;;:::i;:::-;6624:12;;6546:98;;;;:::o;38140:120::-;37684:8;:6;:8::i;:::-;37676:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;38209:5:::1;38199:7:::0;::::1;:15;;;;;;;;;;;;;;;;;;38230:22;38239:12;:10;:12::i;:::-;38230:22;;;;;;:::i;:::-;;;;;;;;38140:120::o:0;23623:1308::-;23704:7;23713:12;23958:2;23938:9;:16;:22;23934:990;;;23977:9;24001;24025:7;24234:4;24223:9;24219:20;24213:27;24208:32;;24284:4;24273:9;24269:20;24263:27;24258:32;;24342:4;24331:9;24327:20;24321:27;24318:1;24313:36;24308:41;;24385:25;24396:4;24402:1;24405;24408;24385:10;:25::i;:::-;24378:32;;;;;;;;;23934:990;24452:2;24432:9;:16;:22;24428:496;;;24471:9;24495:10;24707:4;24696:9;24692:20;24686:27;24681:32;;24758:4;24747:9;24743:20;24737:27;24731:33;;24800:23;24811:4;24817:1;24820:2;24800:10;:23::i;:::-;24793:30;;;;;;;;24428:496;24872:1;24876:35;24856:56;;;;23623:1308;;;;;;:::o;27185:1632::-;27316:7;27325:12;28250:66;28245:1;28237:10;;:79;28233:163;;;28349:1;28353:30;28333:51;;;;;;28233:163;28415:2;28410:1;:7;;;;:18;;;;;28426:2;28421:1;:7;;;;28410:18;28406:102;;;28461:1;28465:30;28445:51;;;;;;28406:102;28605:14;28622:24;28632:4;28638:1;28641;28644;28622:24;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28605:41;;28679:1;28661:20;;:6;:20;;;28657:103;;;28714:1;28718:29;28698:50;;;;;;;28657:103;28780:6;28788:20;28772:37;;;;;27185:1632;;;;;;;;:::o;26227:344::-;26341:7;26350:12;26375:9;26400:66;26392:75;;26387:2;:80;26375:92;;26478:7;26517:2;26510:3;26503:2;26495:11;;:18;;26494:25;;;;:::i;:::-;26478:42;;26538:25;26549:4;26555:1;26558;26561;26538:10;:25::i;:::-;26531:32;;;;;;26227:344;;;;;;:::o;7:77:1:-;44:7;73:5;62:16;;7:77;;;:::o;90:118::-;177:24;195:5;177:24;:::i;:::-;172:3;165:37;90:118;;:::o;214:222::-;307:4;345:2;334:9;330:18;322:26;;358:71;426:1;415:9;411:17;402:6;358:71;:::i;:::-;214:222;;;;:::o;442:75::-;475:6;508:2;502:9;492:19;;442:75;:::o;523:117::-;632:1;629;622:12;646:117;755:1;752;745:12;769:122;842:24;860:5;842:24;:::i;:::-;835:5;832:35;822:63;;881:1;878;871:12;822:63;769:122;:::o;897:139::-;943:5;981:6;968:20;959:29;;997:33;1024:5;997:33;:::i;:::-;897:139;;;;:::o;1042:329::-;1101:6;1150:2;1138:9;1129:7;1125:23;1121:32;1118:119;;;1156:79;;:::i;:::-;1118:119;1276:1;1301:53;1346:7;1337:6;1326:9;1322:22;1301:53;:::i;:::-;1291:63;;1247:117;1042:329;;;;:::o;1377:90::-;1411:7;1454:5;1447:13;1440:21;1429:32;;1377:90;;;:::o;1473:109::-;1554:21;1569:5;1554:21;:::i;:::-;1549:3;1542:34;1473:109;;:::o;1588:210::-;1675:4;1713:2;1702:9;1698:18;1690:26;;1726:65;1788:1;1777:9;1773:17;1764:6;1726:65;:::i;:::-;1588:210;;;;:::o;1804:126::-;1841:7;1881:42;1874:5;1870:54;1859:65;;1804:126;;;:::o;1936:96::-;1973:7;2002:24;2020:5;2002:24;:::i;:::-;1991:35;;1936:96;;;:::o;2038:118::-;2125:24;2143:5;2125:24;:::i;:::-;2120:3;2113:37;2038:118;;:::o;2162:222::-;2255:4;2293:2;2282:9;2278:18;2270:26;;2306:71;2374:1;2363:9;2359:17;2350:6;2306:71;:::i;:::-;2162:222;;;;:::o;2390:122::-;2463:24;2481:5;2463:24;:::i;:::-;2456:5;2453:35;2443:63;;2502:1;2499;2492:12;2443:63;2390:122;:::o;2518:139::-;2564:5;2602:6;2589:20;2580:29;;2618:33;2645:5;2618:33;:::i;:::-;2518:139;;;;:::o;2663:329::-;2722:6;2771:2;2759:9;2750:7;2746:23;2742:32;2739:119;;;2777:79;;:::i;:::-;2739:119;2897:1;2922:53;2967:7;2958:6;2947:9;2943:22;2922:53;:::i;:::-;2912:63;;2868:117;2663:329;;;;:::o;2998:60::-;3026:3;3047:5;3040:12;;2998:60;;;:::o;3064:142::-;3114:9;3147:53;3165:34;3174:24;3192:5;3174:24;:::i;:::-;3165:34;:::i;:::-;3147:53;:::i;:::-;3134:66;;3064:142;;;:::o;3212:126::-;3262:9;3295:37;3326:5;3295:37;:::i;:::-;3282:50;;3212:126;;;:::o;3344:142::-;3410:9;3443:37;3474:5;3443:37;:::i;:::-;3430:50;;3344:142;;;:::o;3492:163::-;3595:53;3642:5;3595:53;:::i;:::-;3590:3;3583:66;3492:163;;:::o;3661:254::-;3770:4;3808:2;3797:9;3793:18;3785:26;;3821:87;3905:1;3894:9;3890:17;3881:6;3821:87;:::i;:::-;3661:254;;;;:::o;3921:117::-;4030:1;4027;4020:12;4044:117;4153:1;4150;4143:12;4167:102;4208:6;4259:2;4255:7;4250:2;4243:5;4239:14;4235:28;4225:38;;4167:102;;;:::o;4275:180::-;4323:77;4320:1;4313:88;4420:4;4417:1;4410:15;4444:4;4441:1;4434:15;4461:281;4544:27;4566:4;4544:27;:::i;:::-;4536:6;4532:40;4674:6;4662:10;4659:22;4638:18;4626:10;4623:34;4620:62;4617:88;;;4685:18;;:::i;:::-;4617:88;4725:10;4721:2;4714:22;4504:238;4461:281;;:::o;4748:129::-;4782:6;4809:20;;:::i;:::-;4799:30;;4838:33;4866:4;4858:6;4838:33;:::i;:::-;4748:129;;;:::o;4883:307::-;4944:4;5034:18;5026:6;5023:30;5020:56;;;5056:18;;:::i;:::-;5020:56;5094:29;5116:6;5094:29;:::i;:::-;5086:37;;5178:4;5172;5168:15;5160:23;;4883:307;;;:::o;5196:154::-;5280:6;5275:3;5270;5257:30;5342:1;5333:6;5328:3;5324:16;5317:27;5196:154;;;:::o;5356:410::-;5433:5;5458:65;5474:48;5515:6;5474:48;:::i;:::-;5458:65;:::i;:::-;5449:74;;5546:6;5539:5;5532:21;5584:4;5577:5;5573:16;5622:3;5613:6;5608:3;5604:16;5601:25;5598:112;;;5629:79;;:::i;:::-;5598:112;5719:41;5753:6;5748:3;5743;5719:41;:::i;:::-;5439:327;5356:410;;;;;:::o;5785:338::-;5840:5;5889:3;5882:4;5874:6;5870:17;5866:27;5856:122;;5897:79;;:::i;:::-;5856:122;6014:6;6001:20;6039:78;6113:3;6105:6;6098:4;6090:6;6086:17;6039:78;:::i;:::-;6030:87;;5846:277;5785:338;;;;:::o;6129:652::-;6206:6;6214;6263:2;6251:9;6242:7;6238:23;6234:32;6231:119;;;6269:79;;:::i;:::-;6231:119;6389:1;6414:53;6459:7;6450:6;6439:9;6435:22;6414:53;:::i;:::-;6404:63;;6360:117;6544:2;6533:9;6529:18;6516:32;6575:18;6567:6;6564:30;6561:117;;;6597:79;;:::i;:::-;6561:117;6702:62;6756:7;6747:6;6736:9;6732:22;6702:62;:::i;:::-;6692:72;;6487:287;6129:652;;;;;:::o;6787:169::-;6871:11;6905:6;6900:3;6893:19;6945:4;6940:3;6936:14;6921:29;;6787:169;;;;:::o;6962:182::-;7102:34;7098:1;7090:6;7086:14;7079:58;6962:182;:::o;7150:366::-;7292:3;7313:67;7377:2;7372:3;7313:67;:::i;:::-;7306:74;;7389:93;7478:3;7389:93;:::i;:::-;7507:2;7502:3;7498:12;7491:19;;7150:366;;;:::o;7522:419::-;7688:4;7726:2;7715:9;7711:18;7703:26;;7775:9;7769:4;7765:20;7761:1;7750:9;7746:17;7739:47;7803:131;7929:4;7803:131;:::i;:::-;7795:139;;7522:419;;;:::o;7947:180::-;7995:77;7992:1;7985:88;8092:4;8089:1;8082:15;8116:4;8113:1;8106:15;8133:180;8181:77;8178:1;8171:88;8278:4;8275:1;8268:15;8302:4;8299:1;8292:15;8319:185;8359:1;8376:20;8394:1;8376:20;:::i;:::-;8371:25;;8410:20;8428:1;8410:20;:::i;:::-;8405:25;;8449:1;8439:35;;8454:18;;:::i;:::-;8439:35;8496:1;8493;8489:9;8484:14;;8319:185;;;;:::o;8510:166::-;8650:18;8646:1;8638:6;8634:14;8627:42;8510:166;:::o;8682:366::-;8824:3;8845:67;8909:2;8904:3;8845:67;:::i;:::-;8838:74;;8921:93;9010:3;8921:93;:::i;:::-;9039:2;9034:3;9030:12;9023:19;;8682:366;;;:::o;9054:419::-;9220:4;9258:2;9247:9;9243:18;9235:26;;9307:9;9301:4;9297:20;9293:1;9282:9;9278:17;9271:47;9335:131;9461:4;9335:131;:::i;:::-;9327:139;;9054:419;;;:::o;9479:181::-;9619:33;9615:1;9607:6;9603:14;9596:57;9479:181;:::o;9666:366::-;9808:3;9829:67;9893:2;9888:3;9829:67;:::i;:::-;9822:74;;9905:93;9994:3;9905:93;:::i;:::-;10023:2;10018:3;10014:12;10007:19;;9666:366;;;:::o;10038:419::-;10204:4;10242:2;10231:9;10227:18;10219:26;;10291:9;10285:4;10281:20;10277:1;10266:9;10262:17;10255:47;10319:131;10445:4;10319:131;:::i;:::-;10311:139;;10038:419;;;:::o;10463:172::-;10603:24;10599:1;10591:6;10587:14;10580:48;10463:172;:::o;10641:366::-;10783:3;10804:67;10868:2;10863:3;10804:67;:::i;:::-;10797:74;;10880:93;10969:3;10880:93;:::i;:::-;10998:2;10993:3;10989:12;10982:19;;10641:366;;;:::o;11013:419::-;11179:4;11217:2;11206:9;11202:18;11194:26;;11266:9;11260:4;11256:20;11252:1;11241:9;11237:17;11230:47;11294:131;11420:4;11294:131;:::i;:::-;11286:139;;11013:419;;;:::o;11438:94::-;11471:8;11519:5;11515:2;11511:14;11490:35;;11438:94;;;:::o;11538:::-;11577:7;11606:20;11620:5;11606:20;:::i;:::-;11595:31;;11538:94;;;:::o;11638:100::-;11677:7;11706:26;11726:5;11706:26;:::i;:::-;11695:37;;11638:100;;;:::o;11744:157::-;11849:45;11869:24;11887:5;11869:24;:::i;:::-;11849:45;:::i;:::-;11844:3;11837:58;11744:157;;:::o;11907:79::-;11946:7;11975:5;11964:16;;11907:79;;;:::o;11992:157::-;12097:45;12117:24;12135:5;12117:24;:::i;:::-;12097:45;:::i;:::-;12092:3;12085:58;11992:157;;:::o;12155:397::-;12295:3;12310:75;12381:3;12372:6;12310:75;:::i;:::-;12410:2;12405:3;12401:12;12394:19;;12423:75;12494:3;12485:6;12423:75;:::i;:::-;12523:2;12518:3;12514:12;12507:19;;12543:3;12536:10;;12155:397;;;;;:::o;12558:179::-;12698:31;12694:1;12686:6;12682:14;12675:55;12558:179;:::o;12743:366::-;12885:3;12906:67;12970:2;12965:3;12906:67;:::i;:::-;12899:74;;12982:93;13071:3;12982:93;:::i;:::-;13100:2;13095:3;13091:12;13084:19;;12743:366;;;:::o;13115:419::-;13281:4;13319:2;13308:9;13304:18;13296:26;;13368:9;13362:4;13358:20;13354:1;13343:9;13339:17;13332:47;13396:131;13522:4;13396:131;:::i;:::-;13388:139;;13115:419;;;:::o;13540:181::-;13680:33;13676:1;13668:6;13664:14;13657:57;13540:181;:::o;13727:366::-;13869:3;13890:67;13954:2;13949:3;13890:67;:::i;:::-;13883:74;;13966:93;14055:3;13966:93;:::i;:::-;14084:2;14079:3;14075:12;14068:19;;13727:366;;;:::o;14099:419::-;14265:4;14303:2;14292:9;14288:18;14280:26;;14352:9;14346:4;14342:20;14338:1;14327:9;14323:17;14316:47;14380:131;14506:4;14380:131;:::i;:::-;14372:139;;14099:419;;;:::o;14524:233::-;14664:34;14660:1;14652:6;14648:14;14641:58;14733:16;14728:2;14720:6;14716:15;14709:41;14524:233;:::o;14763:366::-;14905:3;14926:67;14990:2;14985:3;14926:67;:::i;:::-;14919:74;;15002:93;15091:3;15002:93;:::i;:::-;15120:2;15115:3;15111:12;15104:19;;14763:366;;;:::o;15135:419::-;15301:4;15339:2;15328:9;15324:18;15316:26;;15388:9;15382:4;15378:20;15374:1;15363:9;15359:17;15352:47;15416:131;15542:4;15416:131;:::i;:::-;15408:139;;15135:419;;;:::o;15560:332::-;15681:4;15719:2;15708:9;15704:18;15696:26;;15732:71;15800:1;15789:9;15785:17;15776:6;15732:71;:::i;:::-;15813:72;15881:2;15870:9;15866:18;15857:6;15813:72;:::i;:::-;15560:332;;;;;:::o;15898:225::-;16038:34;16034:1;16026:6;16022:14;16015:58;16107:8;16102:2;16094:6;16090:15;16083:33;15898:225;:::o;16129:366::-;16271:3;16292:67;16356:2;16351:3;16292:67;:::i;:::-;16285:74;;16368:93;16457:3;16368:93;:::i;:::-;16486:2;16481:3;16477:12;16470:19;;16129:366;;;:::o;16501:419::-;16667:4;16705:2;16694:9;16690:18;16682:26;;16754:9;16748:4;16744:20;16740:1;16729:9;16725:17;16718:47;16782:131;16908:4;16782:131;:::i;:::-;16774:139;;16501:419;;;:::o;16926:180::-;16974:77;16971:1;16964:88;17071:4;17068:1;17061:15;17095:4;17092:1;17085:15;17112:77;17149:7;17178:5;17167:16;;17112:77;;;:::o;17195:118::-;17282:24;17300:5;17282:24;:::i;:::-;17277:3;17270:37;17195:118;;:::o;17319:98::-;17370:6;17404:5;17398:12;17388:22;;17319:98;;;:::o;17423:168::-;17506:11;17540:6;17535:3;17528:19;17580:4;17575:3;17571:14;17556:29;;17423:168;;;;:::o;17597:307::-;17665:1;17675:113;17689:6;17686:1;17683:13;17675:113;;;17774:1;17769:3;17765:11;17759:18;17755:1;17750:3;17746:11;17739:39;17711:2;17708:1;17704:10;17699:15;;17675:113;;;17806:6;17803:1;17800:13;17797:101;;;17886:1;17877:6;17872:3;17868:16;17861:27;17797:101;17646:258;17597:307;;;:::o;17910:360::-;17996:3;18024:38;18056:5;18024:38;:::i;:::-;18078:70;18141:6;18136:3;18078:70;:::i;:::-;18071:77;;18157:52;18202:6;18197:3;18190:4;18183:5;18179:16;18157:52;:::i;:::-;18234:29;18256:6;18234:29;:::i;:::-;18229:3;18225:39;18218:46;;18000:270;17910:360;;;;:::o;18276:419::-;18415:4;18453:2;18442:9;18438:18;18430:26;;18466:71;18534:1;18523:9;18519:17;18510:6;18466:71;:::i;:::-;18584:9;18578:4;18574:20;18569:2;18558:9;18554:18;18547:48;18612:76;18683:4;18674:6;18612:76;:::i;:::-;18604:84;;18276:419;;;;;:::o;18701:147::-;18802:11;18839:3;18824:18;;18701:147;;;;:::o;18854:373::-;18958:3;18986:38;19018:5;18986:38;:::i;:::-;19040:88;19121:6;19116:3;19040:88;:::i;:::-;19033:95;;19137:52;19182:6;19177:3;19170:4;19163:5;19159:16;19137:52;:::i;:::-;19214:6;19209:3;19205:16;19198:23;;18962:265;18854:373;;;;:::o;19233:271::-;19363:3;19385:93;19474:3;19465:6;19385:93;:::i;:::-;19378:100;;19495:3;19488:10;;19233:271;;;;:::o;19510:149::-;19546:7;19586:66;19579:5;19575:78;19564:89;;19510:149;;;:::o;19665:120::-;19737:23;19754:5;19737:23;:::i;:::-;19730:5;19727:34;19717:62;;19775:1;19772;19765:12;19717:62;19665:120;:::o;19791:141::-;19847:5;19878:6;19872:13;19863:22;;19894:32;19920:5;19894:32;:::i;:::-;19791:141;;;;:::o;19938:349::-;20007:6;20056:2;20044:9;20035:7;20031:23;20027:32;20024:119;;;20062:79;;:::i;:::-;20024:119;20182:1;20207:63;20262:7;20253:6;20242:9;20238:22;20207:63;:::i;:::-;20197:73;;20153:127;19938:349;;;;:::o;20293:305::-;20333:3;20352:20;20370:1;20352:20;:::i;:::-;20347:25;;20386:20;20404:1;20386:20;:::i;:::-;20381:25;;20540:1;20472:66;20468:74;20465:1;20462:81;20459:107;;;20546:18;;:::i;:::-;20459:107;20590:1;20587;20583:9;20576:16;;20293:305;;;;:::o;20604:348::-;20644:7;20667:20;20685:1;20667:20;:::i;:::-;20662:25;;20701:20;20719:1;20701:20;:::i;:::-;20696:25;;20889:1;20821:66;20817:74;20814:1;20811:81;20806:1;20799:9;20792:17;20788:105;20785:131;;;20896:18;;:::i;:::-;20785:131;20944:1;20941;20937:9;20926:20;;20604:348;;;;:::o;20958:170::-;21098:22;21094:1;21086:6;21082:14;21075:46;20958:170;:::o;21134:366::-;21276:3;21297:67;21361:2;21356:3;21297:67;:::i;:::-;21290:74;;21373:93;21462:3;21373:93;:::i;:::-;21491:2;21486:3;21482:12;21475:19;;21134:366;;;:::o;21506:419::-;21672:4;21710:2;21699:9;21695:18;21687:26;;21759:9;21753:4;21749:20;21745:1;21734:9;21730:17;21723:47;21787:131;21913:4;21787:131;:::i;:::-;21779:139;;21506:419;;;:::o;21931:86::-;21966:7;22006:4;21999:5;21995:16;21984:27;;21931:86;;;:::o;22023:112::-;22106:22;22122:5;22106:22;:::i;:::-;22101:3;22094:35;22023:112;;:::o;22141:545::-;22314:4;22352:3;22341:9;22337:19;22329:27;;22366:71;22434:1;22423:9;22419:17;22410:6;22366:71;:::i;:::-;22447:68;22511:2;22500:9;22496:18;22487:6;22447:68;:::i;:::-;22525:72;22593:2;22582:9;22578:18;22569:6;22525:72;:::i;:::-;22607;22675:2;22664:9;22660:18;22651:6;22607:72;:::i;:::-;22141:545;;;;;;;:::o
Swarm Source
ipfs://47e71899936e6eaf2b4baa704c60566e4e3b7356e85dfefe5176428c152f2615
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.