More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 124 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Royalties | 14644069 | 297 days ago | IN | 21 CRO | 0.17547576 | ||||
Royalties | 14535373 | 304 days ago | IN | 22 CRO | 0.17384213 | ||||
Royalties | 14428780 | 311 days ago | IN | 26 CRO | 0.17542519 | ||||
Royalties | 14321499 | 318 days ago | IN | 26 CRO | 0.17547576 | ||||
Royalties | 14219212 | 325 days ago | IN | 30 CRO | 0.17547576 | ||||
Royalties | 14109318 | 332 days ago | IN | 31 CRO | 0.17547576 | ||||
Royalties | 14003249 | 339 days ago | IN | 33 CRO | 0.17542519 | ||||
Royalties | 13898084 | 346 days ago | IN | 77 CRO | 0.17545047 | ||||
Royalties | 13792096 | 353 days ago | IN | 150 CRO | 0.17547576 | ||||
Royalties | 13684925 | 360 days ago | IN | 43 CRO | 0.17547576 | ||||
Royalties | 13579255 | 367 days ago | IN | 47 CRO | 0.17547576 | ||||
Royalties | 13471604 | 374 days ago | IN | 50 CRO | 0.17547576 | ||||
Royalties | 13379735 | 380 days ago | IN | 104 CRO | 0.17547576 | ||||
Royalties | 13256933 | 388 days ago | IN | 200 CRO | 0.17547576 | ||||
Royalties | 13150430 | 395 days ago | IN | 58 CRO | 0.17547576 | ||||
Royalties | 13042652 | 402 days ago | IN | 62 CRO | 0.17386692 | ||||
Royalties | 12933563 | 409 days ago | IN | 48 CRO | 0.35095152 | ||||
Royalties | 12840795 | 415 days ago | IN | 56 CRO | 0.35075226 | ||||
Royalties | 12714856 | 423 days ago | IN | 42 CRO | 0.35095152 | ||||
Royalties | 12618122 | 429 days ago | IN | 48 CRO | 0.35095152 | ||||
Royalties | 12500685 | 437 days ago | IN | 43 CRO | 0.34766428 | ||||
Royalties | 12393714 | 444 days ago | IN | 47 CRO | 0.35095152 | ||||
Royalties | 12285746 | 451 days ago | IN | 96 CRO | 0.35095152 | ||||
Royalties | 12182305 | 458 days ago | IN | 50 CRO | 0.35088409 | ||||
Royalties | 12072451 | 465 days ago | IN | 152 CRO | 0.35095152 |
Latest 25 internal transactions (View All)
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
17584464 | 104 days ago | 5.71428571 CRO | ||||
17421673 | 114 days ago | 1.33819241 CRO | ||||
17118481 | 134 days ago | 158.73293271 CRO | ||||
17063124 | 138 days ago | 0.7755102 CRO | ||||
16518725 | 174 days ago | 0.3877551 CRO | ||||
16131821 | 199 days ago | 6.33673469 CRO | ||||
16023032 | 206 days ago | 6.69096209 CRO | ||||
15945880 | 211 days ago | 29.10787172 CRO | ||||
15895551 | 215 days ago | 24.34752186 CRO | ||||
15179874 | 262 days ago | 4.81049562 CRO | ||||
15150508 | 264 days ago | 8.69825072 CRO | ||||
15047204 | 270 days ago | 8.02915451 CRO | ||||
14751217 | 290 days ago | 2.51457725 CRO | ||||
14604561 | 299 days ago | 4.2419825 CRO | ||||
14436729 | 310 days ago | 19.44285714 CRO | ||||
14406098 | 312 days ago | 3.17055393 CRO | ||||
14405410 | 312 days ago | 5.31195335 CRO | ||||
14157062 | 329 days ago | 4.37755102 CRO | ||||
14131240 | 330 days ago | 16.03790087 CRO | ||||
14072183 | 334 days ago | 4.00874635 CRO | ||||
13903874 | 345 days ago | 10.23323615 CRO | ||||
13895717 | 346 days ago | 5.4664723 CRO | ||||
13862606 | 348 days ago | 1.04081632 CRO | ||||
13816185 | 351 days ago | 2.08163265 CRO | ||||
13801061 | 352 days ago | 1.66763848 CRO |
Loading...
Loading
Contract Name:
CheesecakeSlices
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at cronoscan.com on 2022-09-05 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev These functions deal with verification of Merkle Tree proofs. * * The proofs can be generated using the JavaScript library * https://github.com/miguelmota/merkletreejs[merkletreejs]. * Note: the hashing algorithm should be keccak256 and pair sorting should be enabled. * * See `test/utils/cryptography/MerkleProof.test.js` for some examples. * * WARNING: You should avoid using leaf values that are 64 bytes long prior to * hashing, or use a hash function other than keccak256 for hashing leaves. * This is because the concatenation of a sorted pair of internal nodes in * the merkle tree could be reinterpreted as a leaf value. */ library MerkleProof { /** * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree * defined by `root`. For this, a `proof` must be provided, containing * sibling hashes on the branch from the leaf to the root of the tree. Each * pair of leaves and each pair of pre-images are assumed to be sorted. */ function verify( bytes32[] memory proof, bytes32 root, bytes32 leaf ) internal pure returns (bool) { return processProof(proof, leaf) == root; } /** * @dev Calldata version of {verify} * * _Available since v4.7._ */ function verifyCalldata( bytes32[] calldata proof, bytes32 root, bytes32 leaf ) internal pure returns (bool) { return processProofCalldata(proof, leaf) == root; } /** * @dev Returns the rebuilt hash obtained by traversing a Merkle tree up * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt * hash matches the root of the tree. When processing the proof, the pairs * of leafs & pre-images are assumed to be sorted. * * _Available since v4.4._ */ function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) { bytes32 computedHash = leaf; for (uint256 i = 0; i < proof.length; i++) { computedHash = _hashPair(computedHash, proof[i]); } return computedHash; } /** * @dev Calldata version of {processProof} * * _Available since v4.7._ */ function processProofCalldata(bytes32[] calldata proof, bytes32 leaf) internal pure returns (bytes32) { bytes32 computedHash = leaf; for (uint256 i = 0; i < proof.length; i++) { computedHash = _hashPair(computedHash, proof[i]); } return computedHash; } /** * @dev Returns true if the `leaves` can be proved to be a part of a Merkle tree defined by * `root`, according to `proof` and `proofFlags` as described in {processMultiProof}. * * _Available since v4.7._ */ function multiProofVerify( bytes32[] memory proof, bool[] memory proofFlags, bytes32 root, bytes32[] memory leaves ) internal pure returns (bool) { return processMultiProof(proof, proofFlags, leaves) == root; } /** * @dev Calldata version of {multiProofVerify} * * _Available since v4.7._ */ function multiProofVerifyCalldata( bytes32[] calldata proof, bool[] calldata proofFlags, bytes32 root, bytes32[] memory leaves ) internal pure returns (bool) { return processMultiProofCalldata(proof, proofFlags, leaves) == root; } /** * @dev Returns the root of a tree reconstructed from `leaves` and the sibling nodes in `proof`, * consuming from one or the other at each step according to the instructions given by * `proofFlags`. * * _Available since v4.7._ */ function processMultiProof( bytes32[] memory proof, bool[] memory proofFlags, bytes32[] memory leaves ) internal pure returns (bytes32 merkleRoot) { // This function rebuild the root hash by traversing the tree up from the leaves. The root is rebuilt by // consuming and producing values on a queue. The queue starts with the `leaves` array, then goes onto the // `hashes` array. At the end of the process, the last hash in the `hashes` array should contain the root of // the merkle tree. uint256 leavesLen = leaves.length; uint256 totalHashes = proofFlags.length; // Check proof validity. require(leavesLen + proof.length - 1 == totalHashes, "MerkleProof: invalid multiproof"); // The xxxPos values are "pointers" to the next value to consume in each array. All accesses are done using // `xxx[xxxPos++]`, which return the current value and increment the pointer, thus mimicking a queue's "pop". bytes32[] memory hashes = new bytes32[](totalHashes); uint256 leafPos = 0; uint256 hashPos = 0; uint256 proofPos = 0; // At each step, we compute the next hash using two values: // - a value from the "main queue". If not all leaves have been consumed, we get the next leaf, otherwise we // get the next hash. // - depending on the flag, either another value for the "main queue" (merging branches) or an element from the // `proof` array. for (uint256 i = 0; i < totalHashes; i++) { bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++]; bytes32 b = proofFlags[i] ? leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++] : proof[proofPos++]; hashes[i] = _hashPair(a, b); } if (totalHashes > 0) { return hashes[totalHashes - 1]; } else if (leavesLen > 0) { return leaves[0]; } else { return proof[0]; } } /** * @dev Calldata version of {processMultiProof} * * _Available since v4.7._ */ function processMultiProofCalldata( bytes32[] calldata proof, bool[] calldata proofFlags, bytes32[] memory leaves ) internal pure returns (bytes32 merkleRoot) { // This function rebuild the root hash by traversing the tree up from the leaves. The root is rebuilt by // consuming and producing values on a queue. The queue starts with the `leaves` array, then goes onto the // `hashes` array. At the end of the process, the last hash in the `hashes` array should contain the root of // the merkle tree. uint256 leavesLen = leaves.length; uint256 totalHashes = proofFlags.length; // Check proof validity. require(leavesLen + proof.length - 1 == totalHashes, "MerkleProof: invalid multiproof"); // The xxxPos values are "pointers" to the next value to consume in each array. All accesses are done using // `xxx[xxxPos++]`, which return the current value and increment the pointer, thus mimicking a queue's "pop". bytes32[] memory hashes = new bytes32[](totalHashes); uint256 leafPos = 0; uint256 hashPos = 0; uint256 proofPos = 0; // At each step, we compute the next hash using two values: // - a value from the "main queue". If not all leaves have been consumed, we get the next leaf, otherwise we // get the next hash. // - depending on the flag, either another value for the "main queue" (merging branches) or an element from the // `proof` array. for (uint256 i = 0; i < totalHashes; i++) { bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++]; bytes32 b = proofFlags[i] ? leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++] : proof[proofPos++]; hashes[i] = _hashPair(a, b); } if (totalHashes > 0) { return hashes[totalHashes - 1]; } else if (leavesLen > 0) { return leaves[0]; } else { return proof[0]; } } function _hashPair(bytes32 a, bytes32 b) private pure returns (bytes32) { return a < b ? _efficientHash(a, b) : _efficientHash(b, a); } function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) { /// @solidity memory-safe-assembly assembly { mstore(0x00, a) mstore(0x20, b) value := keccak256(0x00, 0x40) } } } // 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 (last updated v4.7.0) (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 Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { 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/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts (last updated v4.7.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 /// @solidity memory-safe-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts (last updated v4.7.0) (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; uint8 private constant _ADDRESS_LENGTH = 20; /** * @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); } /** * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation. */ function toHexString(address addr) internal pure returns (string memory) { return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH); } } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol // OpenZeppelin Contracts (last updated v4.7.0) (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: @openzeppelin/contracts/token/ERC721/ERC721.sol // OpenZeppelin Contracts (last updated v4.7.0) (token/ERC721/ERC721.sol) pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: address zero is not a valid owner"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: invalid token ID"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { _requireMinted(tokenId); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overridden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not token owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { _requireMinted(tokenId); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: caller is not token owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: caller is not token owner nor approved"); _safeTransfer(from, to, tokenId, data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { address owner = ERC721.ownerOf(tokenId); return (spender == owner || isApprovedForAll(owner, spender) || getApproved(tokenId) == spender); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); _afterTokenTransfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); _afterTokenTransfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer from incorrect owner"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); _afterTokenTransfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits an {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits an {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC721: approve to caller"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Reverts if the `tokenId` has not been minted yet. */ function _requireMinted(uint256 tokenId) internal view virtual { require(_exists(tokenId), "ERC721: invalid token ID"); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { /// @solidity memory-safe-assembly assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/extensions/IERC721Enumerable.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // File: @openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/ERC721Enumerable.sol) pragma solidity ^0.8.0; /** * @dev This implements an optional extension of {ERC721} defined in the EIP that adds * enumerability of all the token ids in the contract as well as all token ids owned by each * account. */ abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => mapping(uint256 => uint256)) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds"); return _ownedTokens[owner][index]; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds"); return _allTokens[index]; } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` cannot be the zero address. * - `to` cannot be the zero address. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array delete _allTokensIndex[tokenId]; _allTokens.pop(); } } // File: new.sol pragma solidity >=0.7.0 <0.9.0; contract CheesecakeSlices is ERC721Enumerable, Ownable { using Strings for uint256; bytes32 public merkleRoot; mapping(address => bool) public whitelistClaimed; event PlayerJoined(address player); event PlayerWon(address player, uint amount); event Reflection(uint256 amount); string public baseURI; string public baseExtension = ".json"; string public notRevealedUri; uint256 public cost = 200 ether; uint256 public maxSupply = 3000; uint256 public maxMintAmount = 3000; uint256 public nftPerAddressLimit = 1; bool public paused = false; bool public whitelistMintEnabled = false; bool public revealed = true; bool public onlyWhitelisted = false; address[] public whitelistedAddresses; uint256 public reflectionRate = 0; uint256 public currentReflection; uint256 public totalReflection; uint256 public COLLECTED_MINTFEE; mapping(uint256 => uint256) public lastReflections; mapping(address => uint256) public addressMintedBalance; address payable[] public players; uint public playersCounter; uint256 public playCounter = 0; uint256 public holderRewardCounter = 0; uint256 public volumeCounter = 0; bool public lotteryPaused = true; uint256 public playerLimit = 5; uint256 public ticketPrice = 1 ether; uint256 public royaltiesTEAM = 3; uint256 public royaltiesHOLDERS = 7; address public lotteryManager; constructor( string memory _name, string memory _symbol, string memory _initBaseURI, string memory _initNotRevealedUri ) ERC721(_name, _symbol) { setBaseURI(_initBaseURI); setNotRevealedURI(_initNotRevealedUri); lotteryManager = msg.sender; } // internal function _baseURI() internal view virtual override returns (string memory) { return baseURI; } modifier onlylotteryManager{ require(msg.sender == lotteryManager); _; } function whitelistMint(uint256 _mintAmount, bytes32[] calldata _merkleProof) public payable { // Verify whitelist requirements require(whitelistMintEnabled, 'The whitelist sale is not enabled!'); require(!whitelistClaimed[_msgSender()], 'Address already claimed!'); bytes32 leaf = keccak256(abi.encodePacked(_msgSender())); require(MerkleProof.verify(_merkleProof, merkleRoot, leaf), 'Invalid proof!'); whitelistClaimed[_msgSender()] = true; _safeMint(_msgSender(), _mintAmount); } // public function mint(uint256 _mintAmount) public payable { require(!paused, "the contract is paused"); uint256 supply = totalSupply(); require(_mintAmount > 0, "need to mint at least 1 NFT"); require(_mintAmount <= maxMintAmount, "max mint amount per session exceeded"); require(supply + _mintAmount <= maxSupply, "max NFT limit exceeded"); if (msg.sender != owner()) { if(onlyWhitelisted == true) { require(isWhitelisted(msg.sender), "user is not whitelisted"); uint256 ownerMintedCount = addressMintedBalance[msg.sender]; require(ownerMintedCount + _mintAmount <= nftPerAddressLimit, "max NFT per address exceeded"); } require(msg.value >= cost * _mintAmount, "insufficient funds"); } for (uint256 i = 1; i <= _mintAmount; i++) { addressMintedBalance[msg.sender]++; _safeMint(msg.sender, supply + i); lastReflections[supply + i] = currentReflection; } uint256 reflectionShare = (msg.value * reflectionRate) / 100; addRewards(reflectionShare); COLLECTED_MINTFEE += msg.value; } function playLottery() payable public{ require(msg.value == ticketPrice); require(!lotteryPaused, "Lottery is paused"); players.push(payable(msg.sender)); playersCounter++; volumeCounter += msg.value; emit PlayerJoined(msg.sender); if (playersCounter >= playerLimit){ drawWinner(); } } function addRewards(uint256 amount) private { totalReflection = totalReflection + amount; currentReflection += amount / totalSupply(); emit Reflection(amount); } function royalties() public payable { addRewards(msg.value); } function getRewards(uint256[] memory tokenIds) public view returns (uint256 rewards) { for (uint256 i = 0; i < tokenIds.length; i++) { rewards += currentReflection - lastReflections[tokenIds[i]]; } } function getRewardsToken(uint256 tokenIdsRewards) public view returns (uint256 rewards) { rewards += currentReflection - lastReflections[tokenIdsRewards]; } function claimRewards(uint256[] memory tokenIds) external { uint256 rewards = getRewards(tokenIds); for (uint256 i = 0; i < tokenIds.length; i++) { require(ownerOf(tokenIds[i]) == msg.sender, "Owner Invalid"); lastReflections[tokenIds[i]] = currentReflection; } payable(msg.sender).transfer(rewards); } function claimAllRewards() public { uint count = balanceOf(msg.sender); uint256 balance = 0; for(uint i = 0; i < count; i++){ uint tokenId = tokenOfOwnerByIndex(msg.sender, i); balance += (getRewardsToken(tokenId)); lastReflections[tokenId] = currentReflection; } payable(msg.sender).transfer(balance); } function getReflectionBalances(address _owner) public view returns (uint256) { uint count = balanceOf(_owner); uint256 total = 0; for(uint i = 0; i < count; i++){ uint tokenId = tokenOfOwnerByIndex(_owner, i); total += getRewardsToken(tokenId); } return total; } function isWhitelisted(address _user) public view returns (bool) { for (uint i = 0; i < whitelistedAddresses.length; i++) { if (whitelistedAddresses[i] == _user) { return true; } } return false; } function walletOfOwner(address _owner) public view returns (uint256[] memory) { uint256 ownerTokenCount = balanceOf(_owner); uint256[] memory tokenIds = new uint256[](ownerTokenCount); for (uint256 i; i < ownerTokenCount; i++) { tokenIds[i] = tokenOfOwnerByIndex(_owner, i); } return tokenIds; } function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require( _exists(tokenId), "ERC721Metadata: URI query for nonexistent token" ); if(revealed == false) { return notRevealedUri; } string memory currentBaseURI = _baseURI(); return bytes(currentBaseURI).length > 0 ? string(abi.encodePacked(currentBaseURI, tokenId.toString(), baseExtension)) : ""; } //only owner function reveal() public onlyOwner { revealed = true; } function setNftPerAddressLimit(uint256 _limit) public onlyOwner { nftPerAddressLimit = _limit; } function setCost(uint256 _newCost) public onlyOwner { cost = _newCost; } function setMaxSupply(uint256 _maxSupply) public onlyOwner { maxSupply = _maxSupply; } function setmaxMintAmount(uint256 _newmaxMintAmount) public onlyOwner { maxMintAmount = _newmaxMintAmount; } function setBaseURI(string memory _newBaseURI) public onlyOwner { baseURI = _newBaseURI; } function setBaseExtension(string memory _newBaseExtension) public onlyOwner { baseExtension = _newBaseExtension; } function setNotRevealedURI(string memory _notRevealedURI) public onlyOwner { notRevealedUri = _notRevealedURI; } function pause(bool _state) public onlyOwner { paused = _state; } function lotteryPauseSwitch() public onlylotteryManager { lotteryPaused = !lotteryPaused; } function setOnlyWhitelisted(bool _state) public onlyOwner { onlyWhitelisted = _state; } function whitelistUsers(address[] calldata _users) public onlyOwner { delete whitelistedAddresses; whitelistedAddresses = _users; } function setReflectionRate(uint256 _reflectionRate) public onlyOwner { reflectionRate = _reflectionRate; } function setHolderRoyaltyRate(uint256 _royaltiesHOLDERS) public onlyOwner { royaltiesHOLDERS = _royaltiesHOLDERS; } function setTeamRoyaltyRate(uint256 _royaltiesTEAM) public onlyOwner { royaltiesTEAM = _royaltiesTEAM; } function setTicketPrice(uint256 _ticketPrice) public onlyOwner { ticketPrice = _ticketPrice; } function setplayerLimit(uint256 _playerLimit) public onlyOwner { playerLimit = _playerLimit; } function showPlayers() public view returns(address payable[] memory){ return players; } function forceDraw() public onlylotteryManager { require(msg.sender == lotteryManager); drawWinner(); } function drawWinner() private { uint256 index = random() % players.length; uint256 amount = ticketPrice * playerLimit; address payable winner = players[index]; uint256 holderReward = (amount * royaltiesHOLDERS) / 100; uint256 teamReward = (amount * royaltiesTEAM) / 100; uint256 totalFEES = holderReward + teamReward; uint256 winnerPrize = amount - totalFEES; addRewards(holderReward); payable(owner()).transfer(teamReward); winner.transfer(winnerPrize); players = new address payable[](0); playersCounter = 0; emit PlayerWon(winner, amount); playCounter++; holderRewardCounter += holderReward; } function random() private view returns(uint){ return uint(keccak256(abi.encodePacked(block.difficulty, block.timestamp, players))); } function withdraw() public onlyOwner { payable(msg.sender).transfer(COLLECTED_MINTFEE); COLLECTED_MINTFEE = 0; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"string","name":"_initBaseURI","type":"string"},{"internalType":"string","name":"_initNotRevealedUri","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"player","type":"address"}],"name":"PlayerJoined","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"player","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"PlayerWon","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Reflection","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"COLLECTED_MINTFEE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"addressMintedBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimAllRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"claimRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"forceDraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"getReflectionBalances","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"getRewards","outputs":[{"internalType":"uint256","name":"rewards","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenIdsRewards","type":"uint256"}],"name":"getRewardsToken","outputs":[{"internalType":"uint256","name":"rewards","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"holderRewardCounter","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"isWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"lastReflections","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lotteryManager","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lotteryPauseSwitch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"lotteryPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"merkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nftPerAddressLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"notRevealedUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"onlyWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"playCounter","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"playLottery","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"playerLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"players","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"playersCounter","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reflectionRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reveal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"royalties","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"royaltiesHOLDERS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"royaltiesTEAM","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseExtension","type":"string"}],"name":"setBaseExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_royaltiesHOLDERS","type":"uint256"}],"name":"setHolderRoyaltyRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxSupply","type":"uint256"}],"name":"setMaxSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_limit","type":"uint256"}],"name":"setNftPerAddressLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_notRevealedURI","type":"string"}],"name":"setNotRevealedURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setOnlyWhitelisted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_reflectionRate","type":"uint256"}],"name":"setReflectionRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_royaltiesTEAM","type":"uint256"}],"name":"setTeamRoyaltyRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_ticketPrice","type":"uint256"}],"name":"setTicketPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newmaxMintAmount","type":"uint256"}],"name":"setmaxMintAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_playerLimit","type":"uint256"}],"name":"setplayerLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"showPlayers","outputs":[{"internalType":"address payable[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ticketPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"volumeCounter","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelistClaimed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"},{"internalType":"bytes32[]","name":"_merkleProof","type":"bytes32[]"}],"name":"whitelistMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"whitelistMintEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_users","type":"address[]"}],"name":"whitelistUsers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"whitelistedAddresses","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60c06040526005608081905264173539b7b760d91b60a09081526200002891600e91906200023e565b50680ad78ebc5ac6200000601055610bb86011819055601255600160138190556014805463ffffffff19166201000017905560006016819055601e819055601f8190556020556021805460ff191690911790556005602255670de0b6b3a764000060235560036024556007602555348015620000a357600080fd5b5060405162003d9438038062003d94833981016040819052620000c6916200039b565b835184908490620000df9060009060208501906200023e565b508051620000f59060019060208401906200023e565b505050620001126200010c6200014560201b60201c565b62000149565b6200011d826200019b565b6200012881620001be565b5050602680546001600160a01b0319163317905550620004a79050565b3390565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b620001a5620001dd565b8051620001ba90600d9060208401906200023e565b5050565b620001c8620001dd565b8051620001ba90600f9060208401906200023e565b600a546001600160a01b031633146200023c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640160405180910390fd5b565b8280546200024c9062000454565b90600052602060002090601f016020900481019282620002705760008555620002bb565b82601f106200028b57805160ff1916838001178555620002bb565b82800160010185558215620002bb579182015b82811115620002bb5782518255916020019190600101906200029e565b50620002c9929150620002cd565b5090565b5b80821115620002c95760008155600101620002ce565b600082601f830112620002f657600080fd5b81516001600160401b038082111562000313576200031362000491565b604051601f8301601f19908116603f011681019082821181831017156200033e576200033e62000491565b816040528381526020925086838588010111156200035b57600080fd5b600091505b838210156200037f578582018301518183018401529082019062000360565b83821115620003915760008385830101525b9695505050505050565b60008060008060808587031215620003b257600080fd5b84516001600160401b0380821115620003ca57600080fd5b620003d888838901620002e4565b95506020870151915080821115620003ef57600080fd5b620003fd88838901620002e4565b945060408701519150808211156200041457600080fd5b6200042288838901620002e4565b935060608701519150808211156200043957600080fd5b506200044887828801620002e4565b91505092959194509250565b600181811c908216806200046957607f821691505b602082108114156200048b57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b6138dd80620004b76000396000f3fe60806040526004361061047e5760003560e01c806367f3aa4011610255578063ba4e5c4911610144578063da3ef23f116100c1578063f2c4ce1e11610085578063f2c4ce1e14610d19578063f2fde38b14610d39578063f490177214610d59578063f68fc92914610d79578063f71d96cb14610d93578063f8bb7ec214610db357600080fd5b8063da3ef23f14610c58578063db4bec4414610c78578063e985e9c514610ca8578063edec5f2714610cf1578063f053dc5c14610d1157600080fd5b8063d0eb26b011610108578063d0eb26b014610bf1578063d2cab05614610c11578063d4cd77a314610c24578063d5abeb0114610c2c578063d791da3214610c4257600080fd5b8063ba4e5c4914610b59578063ba7d2c7614610b79578063bac9320314610b8f578063c668286214610bbc578063c87b56dd14610bd157600080fd5b80639163723e116101d2578063a0712d6811610196578063a0712d6814610ad1578063a22cb46514610ae4578063a475b5dd14610b04578063a708d40414610b19578063b88d4fde14610b3957600080fd5b80639163723e14610a4f57806395d89b4114610a645780639814e6fa14610a795780639c70b51214610a9b5780639e0413eb14610abc57600080fd5b806370a082311161021957806370a08231146109bc578063715018a6146109dc57806371e0a4bc146109f15780637f00c7a614610a115780638da5cb5b14610a3157600080fd5b806367f3aa40146109285780636c0360eb146109485780636caede3d1461095d5780636e118a021461097c5780636f8b44b01461099c57600080fd5b80632f745c59116103715780634f6ccce7116102ee57806355f804b3116102b257806355f804b314610898578063588bf34f146108b85780635c975abb146108ce5780635eac6239146108e85780636352211e1461090857600080fd5b80634f6ccce71461080c5780634f7b1f5f1461082c5780634f989520146108425780635183022714610862578063542aa2291461088257600080fd5b806342842e0e1161033557806342842e0e14610773578063438b63001461079357806344a0d68a146107c057806345571de5146107e05780634bad3710146107f657600080fd5b80632f745c59146106de5780633af32abf146106fe5780633c9527641461071e5780633ccfd60b1461073e5780633cd972ac1461075357600080fd5b806313faede6116103ff57806322849720116103c35780632284972014610666578063239c70ae1461067c57806323b872dd146106925780632619829d146106b25780632eb4a7ab146106c857600080fd5b806313faede6146105ce5780631523ad6d146105e4578063159816501461060457806318160ddd1461062457806318cae2691461063957600080fd5b8063095ea7b311610446578063095ea7b3146105495780630a1282de146105695780630b83a7271461058d578063118c0978146105a25780631209b1f6146105b857600080fd5b806301ffc9a71461048357806302329a29146104b857806306fdde03146104da578063081812fc146104fc578063081c8c4414610534575b600080fd5b34801561048f57600080fd5b506104a361049e366004613363565b610dc9565b60405190151581526020015b60405180910390f35b3480156104c457600080fd5b506104d86104d3366004613348565b610df4565b005b3480156104e657600080fd5b506104ef610e0f565b6040516104af919061364d565b34801561050857600080fd5b5061051c6105173660046133e6565b610ea1565b6040516001600160a01b0390911681526020016104af565b34801561054057600080fd5b506104ef610ec8565b34801561055557600080fd5b506104d861056436600461322f565b610f56565b34801561057557600080fd5b5061057f601f5481565b6040519081526020016104af565b34801561059957600080fd5b506104d8611071565b3480156105ae57600080fd5b5061057f601d5481565b3480156105c457600080fd5b5061057f60235481565b3480156105da57600080fd5b5061057f60105481565b3480156105f057600080fd5b506104d86105ff3660046133e6565b611103565b34801561061057600080fd5b506104d861061f3660046133e6565b611110565b34801561063057600080fd5b5060085461057f565b34801561064557600080fd5b5061057f6106543660046130ff565b601b6020526000908152604090205481565b34801561067257600080fd5b5061057f60185481565b34801561068857600080fd5b5061057f60125481565b34801561069e57600080fd5b506104d86106ad36600461314d565b61111d565b3480156106be57600080fd5b5061057f60195481565b3480156106d457600080fd5b5061057f600b5481565b3480156106ea57600080fd5b5061057f6106f936600461322f565b61114e565b34801561070a57600080fd5b506104a36107193660046130ff565b6111e4565b34801561072a57600080fd5b506104d8610739366004613348565b61124e565b34801561074a57600080fd5b506104d8611274565b34801561075f57600080fd5b5061057f61076e3660046133e6565b6112b2565b34801561077f57600080fd5b506104d861078e36600461314d565b6112d8565b34801561079f57600080fd5b506107b36107ae3660046130ff565b6112f3565b6040516104af9190613615565b3480156107cc57600080fd5b506104d86107db3660046133e6565b611395565b3480156107ec57600080fd5b5061057f60175481565b34801561080257600080fd5b5061057f60245481565b34801561081857600080fd5b5061057f6108273660046133e6565b6113a2565b34801561083857600080fd5b5061057f601e5481565b34801561084e57600080fd5b5060265461051c906001600160a01b031681565b34801561086e57600080fd5b506014546104a39062010000900460ff1681565b34801561088e57600080fd5b5061057f60165481565b3480156108a457600080fd5b506104d86108b336600461339d565b611435565b3480156108c457600080fd5b5061057f60205481565b3480156108da57600080fd5b506014546104a39060ff1681565b3480156108f457600080fd5b506104d861090336600461329b565b611454565b34801561091457600080fd5b5061051c6109233660046133e6565b611525565b34801561093457600080fd5b506104d86109433660046133e6565b611585565b34801561095457600080fd5b506104ef611592565b34801561096957600080fd5b506014546104a390610100900460ff1681565b34801561098857600080fd5b506104d86109973660046133e6565b61159f565b3480156109a857600080fd5b506104d86109b73660046133e6565b6115ac565b3480156109c857600080fd5b5061057f6109d73660046130ff565b6115b9565b3480156109e857600080fd5b506104d861163f565b3480156109fd57600080fd5b506104d8610a0c3660046133e6565b611653565b348015610a1d57600080fd5b506104d8610a2c3660046133e6565b611660565b348015610a3d57600080fd5b50600a546001600160a01b031661051c565b348015610a5b57600080fd5b506104d861166d565b348015610a7057600080fd5b506104ef611698565b348015610a8557600080fd5b50610a8e6116a7565b6040516104af91906135c8565b348015610aa757600080fd5b506014546104a3906301000000900460ff1681565b348015610ac857600080fd5b506104d8611708565b6104d8610adf3660046133e6565b61173e565b348015610af057600080fd5b506104d8610aff366004613205565b611a8c565b348015610b1057600080fd5b506104d8611a97565b348015610b2557600080fd5b5061057f610b343660046130ff565b611ab2565b348015610b4557600080fd5b506104d8610b54366004613189565b611b03565b348015610b6557600080fd5b5061051c610b743660046133e6565b611b3b565b348015610b8557600080fd5b5061057f60135481565b348015610b9b57600080fd5b5061057f610baa3660046133e6565b601a6020526000908152604090205481565b348015610bc857600080fd5b506104ef611b65565b348015610bdd57600080fd5b506104ef610bec3660046133e6565b611b72565b348015610bfd57600080fd5b506104d8610c0c3660046133e6565b611cf2565b6104d8610c1f3660046133ff565b611cff565b6104d8611e9c565b348015610c3857600080fd5b5061057f60115481565b348015610c4e57600080fd5b5061057f60255481565b348015610c6457600080fd5b506104d8610c7336600461339d565b611fa2565b348015610c8457600080fd5b506104a3610c933660046130ff565b600c6020526000908152604090205460ff1681565b348015610cb457600080fd5b506104a3610cc336600461311a565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b348015610cfd57600080fd5b506104d8610d0c366004613259565b611fbd565b6104d8611fdd565b348015610d2557600080fd5b506104d8610d3436600461339d565b611fe6565b348015610d4557600080fd5b506104d8610d543660046130ff565b612001565b348015610d6557600080fd5b5061057f610d7436600461329b565b61207a565b348015610d8557600080fd5b506021546104a39060ff1681565b348015610d9f57600080fd5b5061051c610dae3660046133e6565b6120e5565b348015610dbf57600080fd5b5061057f60225481565b60006001600160e01b0319821663780e9d6360e01b1480610dee5750610dee826120f5565b92915050565b610dfc612145565b6014805460ff1916911515919091179055565b606060008054610e1e906137bf565b80601f0160208091040260200160405190810160405280929190818152602001828054610e4a906137bf565b8015610e975780601f10610e6c57610100808354040283529160200191610e97565b820191906000526020600020905b815481529060010190602001808311610e7a57829003601f168201915b5050505050905090565b6000610eac8261219f565b506000908152600460205260409020546001600160a01b031690565b600f8054610ed5906137bf565b80601f0160208091040260200160405190810160405280929190818152602001828054610f01906137bf565b8015610f4e5780601f10610f2357610100808354040283529160200191610f4e565b820191906000526020600020905b815481529060010190602001808311610f3157829003601f168201915b505050505081565b6000610f6182611525565b9050806001600160a01b0316836001600160a01b03161415610fd45760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084015b60405180910390fd5b336001600160a01b0382161480610ff05750610ff08133610cc3565b6110625760405162461bcd60e51b815260206004820152603e60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c00006064820152608401610fcb565b61106c83836121fe565b505050565b600061107c336115b9565b90506000805b828110156110d5576000611096338361114e565b90506110a1816112b2565b6110ab9084613731565b6017546000928352601a6020526040909220919091559150806110cd816137f4565b915050611082565b50604051339082156108fc029083906000818181858888f1935050505015801561106c573d6000803e3d6000fd5b61110b612145565b602555565b611118612145565b602355565b611127338261226c565b6111435760405162461bcd60e51b8152600401610fcb906136b2565b61106c8383836122eb565b6000611159836115b9565b82106111bb5760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b6064820152608401610fcb565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b6000805b60155481101561124557826001600160a01b03166015828154811061120f5761120f613865565b6000918252602090912001546001600160a01b031614156112335750600192915050565b8061123d816137f4565b9150506111e8565b50600092915050565b611256612145565b6014805491151563010000000263ff00000019909216919091179055565b61127c612145565b601954604051339180156108fc02916000818181858888f193505050501580156112aa573d6000803e3d6000fd5b506000601955565b6000818152601a60205260408120546017546112ce919061377c565b610dee9082613731565b61106c83838360405180602001604052806000815250611b03565b60606000611300836115b9565b905060008167ffffffffffffffff81111561131d5761131d61387b565b604051908082528060200260200182016040528015611346578160200160208202803683370190505b50905060005b8281101561138d5761135e858261114e565b82828151811061137057611370613865565b602090810291909101015280611385816137f4565b91505061134c565b509392505050565b61139d612145565b601055565b60006113ad60085490565b82106114105760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b6064820152608401610fcb565b6008828154811061142357611423613865565b90600052602060002001549050919050565b61143d612145565b805161145090600d906020840190612ed0565b5050565b600061145f8261207a565b905060005b82518110156110d557336001600160a01b031661149984838151811061148c5761148c613865565b6020026020010151611525565b6001600160a01b0316146114df5760405162461bcd60e51b815260206004820152600d60248201526c13dddb995c88125b9d985b1a59609a1b6044820152606401610fcb565b601754601a60008584815181106114f8576114f8613865565b6020026020010151815260200190815260200160002081905550808061151d906137f4565b915050611464565b6000818152600260205260408120546001600160a01b031680610dee5760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610fcb565b61158d612145565b601655565b600d8054610ed5906137bf565b6115a7612145565b602255565b6115b4612145565b601155565b60006001600160a01b0382166116235760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b6064820152608401610fcb565b506001600160a01b031660009081526003602052604090205490565b611647612145565b6116516000612492565b565b61165b612145565b602455565b611668612145565b601255565b6026546001600160a01b0316331461168457600080fd5b6021805460ff19811660ff90911615179055565b606060018054610e1e906137bf565b6060601c805480602002602001604051908101604052809291908181526020018280548015610e9757602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116116e1575050505050905090565b6026546001600160a01b0316331461171f57600080fd5b6026546001600160a01b0316331461173657600080fd5b6116516124e4565b60145460ff161561178a5760405162461bcd60e51b81526020600482015260166024820152751d1a194818dbdb9d1c9858dd081a5cc81c185d5cd95960521b6044820152606401610fcb565b600061179560085490565b9050600082116117e75760405162461bcd60e51b815260206004820152601b60248201527f6e65656420746f206d696e74206174206c656173742031204e465400000000006044820152606401610fcb565b6012548211156118455760405162461bcd60e51b8152602060048201526024808201527f6d6178206d696e7420616d6f756e74207065722073657373696f6e20657863656044820152631959195960e21b6064820152608401610fcb565b6011546118528383613731565b11156118995760405162461bcd60e51b81526020600482015260166024820152751b585e08139195081b1a5b5a5d08195e18d95959195960521b6044820152606401610fcb565b600a546001600160a01b031633146119d6576014546301000000900460ff16151560011415611984576118cb336111e4565b6119175760405162461bcd60e51b815260206004820152601760248201527f75736572206973206e6f742077686974656c69737465640000000000000000006044820152606401610fcb565b336000908152601b60205260409020546013546119348483613731565b11156119825760405162461bcd60e51b815260206004820152601c60248201527f6d6178204e4654207065722061646472657373206578636565646564000000006044820152606401610fcb565b505b81601054611992919061375d565b3410156119d65760405162461bcd60e51b8152602060048201526012602482015271696e73756666696369656e742066756e647360701b6044820152606401610fcb565b60015b828111611a4857336000908152601b602052604081208054916119fb836137f4565b90915550611a14905033611a0f8385613731565b6126aa565b601754601a6000611a258486613731565b815260208101919091526040016000205580611a40816137f4565b9150506119d9565b506000606460165434611a5b919061375d565b611a659190613749565b9050611a70816126c4565b3460196000828254611a829190613731565b9091555050505050565b61145033838361272e565b611a9f612145565b6014805462ff0000191662010000179055565b600080611abe836115b9565b90506000805b8281101561138d576000611ad8868361114e565b9050611ae3816112b2565b611aed9084613731565b9250508080611afb906137f4565b915050611ac4565b611b0d338361226c565b611b295760405162461bcd60e51b8152600401610fcb906136b2565b611b35848484846127fd565b50505050565b60158181548110611b4b57600080fd5b6000918252602090912001546001600160a01b0316905081565b600e8054610ed5906137bf565b6000818152600260205260409020546060906001600160a01b0316611bf15760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610fcb565b60145462010000900460ff16611c9357600f8054611c0e906137bf565b80601f0160208091040260200160405190810160405280929190818152602001828054611c3a906137bf565b8015611c875780601f10611c5c57610100808354040283529160200191611c87565b820191906000526020600020905b815481529060010190602001808311611c6a57829003601f168201915b50505050509050919050565b6000611c9d612830565b90506000815111611cbd5760405180602001604052806000815250611ceb565b80611cc78461283f565b600e604051602001611cdb93929190613477565b6040516020818303038152906040525b9392505050565b611cfa612145565b601355565b601454610100900460ff16611d615760405162461bcd60e51b815260206004820152602260248201527f5468652077686974656c6973742073616c65206973206e6f7420656e61626c65604482015261642160f01b6064820152608401610fcb565b336000908152600c602052604090205460ff1615611dc15760405162461bcd60e51b815260206004820152601860248201527f4164647265737320616c726561647920636c61696d65642100000000000000006044820152606401610fcb565b6040516bffffffffffffffffffffffff193360601b166020820152600090603401604051602081830303815290604052805190602001209050611e3b83838080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050600b54915084905061293d565b611e785760405162461bcd60e51b815260206004820152600e60248201526d496e76616c69642070726f6f662160901b6044820152606401610fcb565b336000818152600c60205260409020805460ff19166001179055611b3590856126aa565b6023543414611eaa57600080fd5b60215460ff1615611ef15760405162461bcd60e51b8152602060048201526011602482015270131bdd1d195c9e481a5cc81c185d5cd959607a1b6044820152606401610fcb565b601c805460018101825560009182527f0e4562a10381dec21b205ed72637e6b1b523bdd0e4d4d50af5cd23dd4500a2110180546001600160a01b03191633179055601d805491611f40836137f4565b91905055503460206000828254611f579190613731565b90915550506040513381527f31e760aa525306aba638a784082a013b6a1cc0a9a1789f3f22281c0453b10b1f9060200160405180910390a1602254601d5410611651576116516124e4565b611faa612145565b805161145090600e906020840190612ed0565b611fc5612145565b611fd160156000612f54565b61106c60158383612f72565b611651346126c4565b611fee612145565b805161145090600f906020840190612ed0565b612009612145565b6001600160a01b03811661206e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610fcb565b61207781612492565b50565b6000805b82518110156120df57601a600084838151811061209d5761209d613865565b60200260200101518152602001908152602001600020546017546120c1919061377c565b6120cb9083613731565b9150806120d7816137f4565b91505061207e565b50919050565b601c8181548110611b4b57600080fd5b60006001600160e01b031982166380ac58cd60e01b148061212657506001600160e01b03198216635b5e139f60e01b145b80610dee57506301ffc9a760e01b6001600160e01b0319831614610dee565b600a546001600160a01b031633146116515760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610fcb565b6000818152600260205260409020546001600160a01b03166120775760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610fcb565b600081815260046020526040902080546001600160a01b0319166001600160a01b038416908117909155819061223382611525565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60008061227883611525565b9050806001600160a01b0316846001600160a01b031614806122bf57506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b806122e35750836001600160a01b03166122d884610ea1565b6001600160a01b0316145b949350505050565b826001600160a01b03166122fe82611525565b6001600160a01b0316146123625760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b6064820152608401610fcb565b6001600160a01b0382166123c45760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610fcb565b6123cf838383612953565b6123da6000826121fe565b6001600160a01b038316600090815260036020526040812080546001929061240390849061377c565b90915550506001600160a01b0382166000908152600360205260408120805460019290612431908490613731565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b601c546000906124f2612a0b565b6124fc919061380f565b90506000602254602354612510919061375d565b90506000601c838154811061252757612527613865565b60009182526020822001546025546001600160a01b03909116925060649061254f908561375d565b6125599190613749565b9050600060646024548561256d919061375d565b6125779190613749565b905060006125858284613731565b90506000612593828761377c565b905061259e846126c4565b600a546040516001600160a01b039091169084156108fc029085906000818181858888f193505050501580156125d8573d6000803e3d6000fd5b506040516001600160a01b0386169082156108fc029083906000818181858888f1935050505015801561260f573d6000803e3d6000fd5b50604080516000815260208101918290525161262d91601c91612fc5565b506000601d55604080516001600160a01b0387168152602081018890527f6e0d11c40e939975aea1b614617340d694125da9ebed64c96cab216ca971564e910160405180910390a1601e8054906000612685836137f4565b919050555083601f600082825461269c9190613731565b909155505050505050505050565b611450828260405180602001604052806000815250612a41565b806018546126d29190613731565b6018556008546126e29082613749565b601760008282546126f39190613731565b90915550506040518181527fbadc96f0b899bb720d18a25ea9fae343d6095c7f760d4a54ee0d65fe1c66ccd19060200160405180910390a150565b816001600160a01b0316836001600160a01b031614156127905760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610fcb565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6128088484846122eb565b61281484848484612a74565b611b355760405162461bcd60e51b8152600401610fcb90613660565b6060600d8054610e1e906137bf565b6060816128635750506040805180820190915260018152600360fc1b602082015290565b8160005b811561288d5780612877816137f4565b91506128869050600a83613749565b9150612867565b60008167ffffffffffffffff8111156128a8576128a861387b565b6040519080825280601f01601f1916602001820160405280156128d2576020820181803683370190505b5090505b84156122e3576128e760018361377c565b91506128f4600a8661380f565b6128ff906030613731565b60f81b81838151811061291457612914613865565b60200101906001600160f81b031916908160001a905350612936600a86613749565b94506128d6565b60008261294a8584612b81565b14949350505050565b6001600160a01b0383166129ae576129a981600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b6129d1565b816001600160a01b0316836001600160a01b0316146129d1576129d18382612bc6565b6001600160a01b0382166129e85761106c81612c63565b826001600160a01b0316826001600160a01b03161461106c5761106c8282612d12565b60004442601c604051602001612a239392919061353b565b6040516020818303038152906040528051906020012060001c905090565b612a4b8383612d56565b612a586000848484612a74565b61106c5760405162461bcd60e51b8152600401610fcb90613660565b60006001600160a01b0384163b15612b7657604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290612ab890339089908890889060040161358b565b602060405180830381600087803b158015612ad257600080fd5b505af1925050508015612b02575060408051601f3d908101601f19168201909252612aff91810190613380565b60015b612b5c573d808015612b30576040519150601f19603f3d011682016040523d82523d6000602084013e612b35565b606091505b508051612b545760405162461bcd60e51b8152600401610fcb90613660565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506122e3565b506001949350505050565b600081815b845181101561138d57612bb282868381518110612ba557612ba5613865565b6020026020010151612ea4565b915080612bbe816137f4565b915050612b86565b60006001612bd3846115b9565b612bdd919061377c565b600083815260076020526040902054909150808214612c30576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b600854600090612c759060019061377c565b60008381526009602052604081205460088054939450909284908110612c9d57612c9d613865565b906000526020600020015490508060088381548110612cbe57612cbe613865565b6000918252602080832090910192909255828152600990915260408082208490558582528120556008805480612cf657612cf661384f565b6001900381819060005260206000200160009055905550505050565b6000612d1d836115b9565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b6001600160a01b038216612dac5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610fcb565b6000818152600260205260409020546001600160a01b031615612e115760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610fcb565b612e1d60008383612953565b6001600160a01b0382166000908152600360205260408120805460019290612e46908490613731565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6000818310612ec0576000828152602084905260409020611ceb565b5060009182526020526040902090565b828054612edc906137bf565b90600052602060002090601f016020900481019282612efe5760008555612f44565b82601f10612f1757805160ff1916838001178555612f44565b82800160010185558215612f44579182015b82811115612f44578251825591602001919060010190612f29565b50612f5092915061301a565b5090565b5080546000825590600052602060002090810190612077919061301a565b828054828255906000526020600020908101928215612f44579160200282015b82811115612f445781546001600160a01b0319166001600160a01b03843516178255602090920191600190910190612f92565b828054828255906000526020600020908101928215612f44579160200282015b82811115612f4457825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190612fe5565b5b80821115612f50576000815560010161301b565b600067ffffffffffffffff8311156130495761304961387b565b61305c601f8401601f1916602001613700565b905082815283838301111561307057600080fd5b828260208301376000602084830101529392505050565b80356001600160a01b038116811461309e57600080fd5b919050565b60008083601f8401126130b557600080fd5b50813567ffffffffffffffff8111156130cd57600080fd5b6020830191508360208260051b85010111156130e857600080fd5b9250929050565b8035801515811461309e57600080fd5b60006020828403121561311157600080fd5b611ceb82613087565b6000806040838503121561312d57600080fd5b61313683613087565b915061314460208401613087565b90509250929050565b60008060006060848603121561316257600080fd5b61316b84613087565b925061317960208501613087565b9150604084013590509250925092565b6000806000806080858703121561319f57600080fd5b6131a885613087565b93506131b660208601613087565b925060408501359150606085013567ffffffffffffffff8111156131d957600080fd5b8501601f810187136131ea57600080fd5b6131f98782356020840161302f565b91505092959194509250565b6000806040838503121561321857600080fd5b61322183613087565b9150613144602084016130ef565b6000806040838503121561324257600080fd5b61324b83613087565b946020939093013593505050565b6000806020838503121561326c57600080fd5b823567ffffffffffffffff81111561328357600080fd5b61328f858286016130a3565b90969095509350505050565b600060208083850312156132ae57600080fd5b823567ffffffffffffffff808211156132c657600080fd5b818501915085601f8301126132da57600080fd5b8135818111156132ec576132ec61387b565b8060051b91506132fd848301613700565b8181528481019084860184860187018a101561331857600080fd5b600095505b8386101561333b57803583526001959095019491860191860161331d565b5098975050505050505050565b60006020828403121561335a57600080fd5b611ceb826130ef565b60006020828403121561337557600080fd5b8135611ceb81613891565b60006020828403121561339257600080fd5b8151611ceb81613891565b6000602082840312156133af57600080fd5b813567ffffffffffffffff8111156133c657600080fd5b8201601f810184136133d757600080fd5b6122e38482356020840161302f565b6000602082840312156133f857600080fd5b5035919050565b60008060006040848603121561341457600080fd5b83359250602084013567ffffffffffffffff81111561343257600080fd5b61343e868287016130a3565b9497909650939450505050565b60008151808452613463816020860160208601613793565b601f01601f19169290920160200192915050565b60008451602061348a8285838a01613793565b85519184019161349d8184848a01613793565b8554920191600090600181811c90808316806134ba57607f831692505b8583108114156134d857634e487b7160e01b85526022600452602485fd5b8080156134ec57600181146134fd5761352a565b60ff1985168852838801955061352a565b60008b81526020902060005b858110156135225781548a820152908401908801613509565b505083880195505b50939b9a5050505050505050505050565b838152600060208481840152604083018454856000528260002060005b8281101561357d5781546001600160a01b031684529284019260019182019101613558565b509198975050505050505050565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906135be9083018461344b565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b818110156136095783516001600160a01b0316835292840192918401916001016135e4565b50909695505050505050565b6020808252825182820181905260009190848201906040850190845b8181101561360957835183529284019291840191600101613631565b602081526000611ceb602083018461344b565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252602e908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526d1c881b9bdc88185c1c1c9bdd995960921b606082015260800190565b604051601f8201601f1916810167ffffffffffffffff811182821017156137295761372961387b565b604052919050565b6000821982111561374457613744613823565b500190565b60008261375857613758613839565b500490565b600081600019048311821515161561377757613777613823565b500290565b60008282101561378e5761378e613823565b500390565b60005b838110156137ae578181015183820152602001613796565b83811115611b355750506000910152565b600181811c908216806137d357607f821691505b602082108114156120df57634e487b7160e01b600052602260045260246000fd5b600060001982141561380857613808613823565b5060010190565b60008261381e5761381e613839565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b03198116811461207757600080fdfea264697066735822122085e7e2488b400009d9b399ec05bc149874e03aad26a5202f5466c9c6f5f7828a64736f6c63430008070033000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000001143686565736563616b6520536c69636573000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000343535300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000035697066733a2f2f516d646f5a45655447337143466762356f4642476d52417150644573616b5174784776545a69675064536975474c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x60806040526004361061047e5760003560e01c806367f3aa4011610255578063ba4e5c4911610144578063da3ef23f116100c1578063f2c4ce1e11610085578063f2c4ce1e14610d19578063f2fde38b14610d39578063f490177214610d59578063f68fc92914610d79578063f71d96cb14610d93578063f8bb7ec214610db357600080fd5b8063da3ef23f14610c58578063db4bec4414610c78578063e985e9c514610ca8578063edec5f2714610cf1578063f053dc5c14610d1157600080fd5b8063d0eb26b011610108578063d0eb26b014610bf1578063d2cab05614610c11578063d4cd77a314610c24578063d5abeb0114610c2c578063d791da3214610c4257600080fd5b8063ba4e5c4914610b59578063ba7d2c7614610b79578063bac9320314610b8f578063c668286214610bbc578063c87b56dd14610bd157600080fd5b80639163723e116101d2578063a0712d6811610196578063a0712d6814610ad1578063a22cb46514610ae4578063a475b5dd14610b04578063a708d40414610b19578063b88d4fde14610b3957600080fd5b80639163723e14610a4f57806395d89b4114610a645780639814e6fa14610a795780639c70b51214610a9b5780639e0413eb14610abc57600080fd5b806370a082311161021957806370a08231146109bc578063715018a6146109dc57806371e0a4bc146109f15780637f00c7a614610a115780638da5cb5b14610a3157600080fd5b806367f3aa40146109285780636c0360eb146109485780636caede3d1461095d5780636e118a021461097c5780636f8b44b01461099c57600080fd5b80632f745c59116103715780634f6ccce7116102ee57806355f804b3116102b257806355f804b314610898578063588bf34f146108b85780635c975abb146108ce5780635eac6239146108e85780636352211e1461090857600080fd5b80634f6ccce71461080c5780634f7b1f5f1461082c5780634f989520146108425780635183022714610862578063542aa2291461088257600080fd5b806342842e0e1161033557806342842e0e14610773578063438b63001461079357806344a0d68a146107c057806345571de5146107e05780634bad3710146107f657600080fd5b80632f745c59146106de5780633af32abf146106fe5780633c9527641461071e5780633ccfd60b1461073e5780633cd972ac1461075357600080fd5b806313faede6116103ff57806322849720116103c35780632284972014610666578063239c70ae1461067c57806323b872dd146106925780632619829d146106b25780632eb4a7ab146106c857600080fd5b806313faede6146105ce5780631523ad6d146105e4578063159816501461060457806318160ddd1461062457806318cae2691461063957600080fd5b8063095ea7b311610446578063095ea7b3146105495780630a1282de146105695780630b83a7271461058d578063118c0978146105a25780631209b1f6146105b857600080fd5b806301ffc9a71461048357806302329a29146104b857806306fdde03146104da578063081812fc146104fc578063081c8c4414610534575b600080fd5b34801561048f57600080fd5b506104a361049e366004613363565b610dc9565b60405190151581526020015b60405180910390f35b3480156104c457600080fd5b506104d86104d3366004613348565b610df4565b005b3480156104e657600080fd5b506104ef610e0f565b6040516104af919061364d565b34801561050857600080fd5b5061051c6105173660046133e6565b610ea1565b6040516001600160a01b0390911681526020016104af565b34801561054057600080fd5b506104ef610ec8565b34801561055557600080fd5b506104d861056436600461322f565b610f56565b34801561057557600080fd5b5061057f601f5481565b6040519081526020016104af565b34801561059957600080fd5b506104d8611071565b3480156105ae57600080fd5b5061057f601d5481565b3480156105c457600080fd5b5061057f60235481565b3480156105da57600080fd5b5061057f60105481565b3480156105f057600080fd5b506104d86105ff3660046133e6565b611103565b34801561061057600080fd5b506104d861061f3660046133e6565b611110565b34801561063057600080fd5b5060085461057f565b34801561064557600080fd5b5061057f6106543660046130ff565b601b6020526000908152604090205481565b34801561067257600080fd5b5061057f60185481565b34801561068857600080fd5b5061057f60125481565b34801561069e57600080fd5b506104d86106ad36600461314d565b61111d565b3480156106be57600080fd5b5061057f60195481565b3480156106d457600080fd5b5061057f600b5481565b3480156106ea57600080fd5b5061057f6106f936600461322f565b61114e565b34801561070a57600080fd5b506104a36107193660046130ff565b6111e4565b34801561072a57600080fd5b506104d8610739366004613348565b61124e565b34801561074a57600080fd5b506104d8611274565b34801561075f57600080fd5b5061057f61076e3660046133e6565b6112b2565b34801561077f57600080fd5b506104d861078e36600461314d565b6112d8565b34801561079f57600080fd5b506107b36107ae3660046130ff565b6112f3565b6040516104af9190613615565b3480156107cc57600080fd5b506104d86107db3660046133e6565b611395565b3480156107ec57600080fd5b5061057f60175481565b34801561080257600080fd5b5061057f60245481565b34801561081857600080fd5b5061057f6108273660046133e6565b6113a2565b34801561083857600080fd5b5061057f601e5481565b34801561084e57600080fd5b5060265461051c906001600160a01b031681565b34801561086e57600080fd5b506014546104a39062010000900460ff1681565b34801561088e57600080fd5b5061057f60165481565b3480156108a457600080fd5b506104d86108b336600461339d565b611435565b3480156108c457600080fd5b5061057f60205481565b3480156108da57600080fd5b506014546104a39060ff1681565b3480156108f457600080fd5b506104d861090336600461329b565b611454565b34801561091457600080fd5b5061051c6109233660046133e6565b611525565b34801561093457600080fd5b506104d86109433660046133e6565b611585565b34801561095457600080fd5b506104ef611592565b34801561096957600080fd5b506014546104a390610100900460ff1681565b34801561098857600080fd5b506104d86109973660046133e6565b61159f565b3480156109a857600080fd5b506104d86109b73660046133e6565b6115ac565b3480156109c857600080fd5b5061057f6109d73660046130ff565b6115b9565b3480156109e857600080fd5b506104d861163f565b3480156109fd57600080fd5b506104d8610a0c3660046133e6565b611653565b348015610a1d57600080fd5b506104d8610a2c3660046133e6565b611660565b348015610a3d57600080fd5b50600a546001600160a01b031661051c565b348015610a5b57600080fd5b506104d861166d565b348015610a7057600080fd5b506104ef611698565b348015610a8557600080fd5b50610a8e6116a7565b6040516104af91906135c8565b348015610aa757600080fd5b506014546104a3906301000000900460ff1681565b348015610ac857600080fd5b506104d8611708565b6104d8610adf3660046133e6565b61173e565b348015610af057600080fd5b506104d8610aff366004613205565b611a8c565b348015610b1057600080fd5b506104d8611a97565b348015610b2557600080fd5b5061057f610b343660046130ff565b611ab2565b348015610b4557600080fd5b506104d8610b54366004613189565b611b03565b348015610b6557600080fd5b5061051c610b743660046133e6565b611b3b565b348015610b8557600080fd5b5061057f60135481565b348015610b9b57600080fd5b5061057f610baa3660046133e6565b601a6020526000908152604090205481565b348015610bc857600080fd5b506104ef611b65565b348015610bdd57600080fd5b506104ef610bec3660046133e6565b611b72565b348015610bfd57600080fd5b506104d8610c0c3660046133e6565b611cf2565b6104d8610c1f3660046133ff565b611cff565b6104d8611e9c565b348015610c3857600080fd5b5061057f60115481565b348015610c4e57600080fd5b5061057f60255481565b348015610c6457600080fd5b506104d8610c7336600461339d565b611fa2565b348015610c8457600080fd5b506104a3610c933660046130ff565b600c6020526000908152604090205460ff1681565b348015610cb457600080fd5b506104a3610cc336600461311a565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b348015610cfd57600080fd5b506104d8610d0c366004613259565b611fbd565b6104d8611fdd565b348015610d2557600080fd5b506104d8610d3436600461339d565b611fe6565b348015610d4557600080fd5b506104d8610d543660046130ff565b612001565b348015610d6557600080fd5b5061057f610d7436600461329b565b61207a565b348015610d8557600080fd5b506021546104a39060ff1681565b348015610d9f57600080fd5b5061051c610dae3660046133e6565b6120e5565b348015610dbf57600080fd5b5061057f60225481565b60006001600160e01b0319821663780e9d6360e01b1480610dee5750610dee826120f5565b92915050565b610dfc612145565b6014805460ff1916911515919091179055565b606060008054610e1e906137bf565b80601f0160208091040260200160405190810160405280929190818152602001828054610e4a906137bf565b8015610e975780601f10610e6c57610100808354040283529160200191610e97565b820191906000526020600020905b815481529060010190602001808311610e7a57829003601f168201915b5050505050905090565b6000610eac8261219f565b506000908152600460205260409020546001600160a01b031690565b600f8054610ed5906137bf565b80601f0160208091040260200160405190810160405280929190818152602001828054610f01906137bf565b8015610f4e5780601f10610f2357610100808354040283529160200191610f4e565b820191906000526020600020905b815481529060010190602001808311610f3157829003601f168201915b505050505081565b6000610f6182611525565b9050806001600160a01b0316836001600160a01b03161415610fd45760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084015b60405180910390fd5b336001600160a01b0382161480610ff05750610ff08133610cc3565b6110625760405162461bcd60e51b815260206004820152603e60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c00006064820152608401610fcb565b61106c83836121fe565b505050565b600061107c336115b9565b90506000805b828110156110d5576000611096338361114e565b90506110a1816112b2565b6110ab9084613731565b6017546000928352601a6020526040909220919091559150806110cd816137f4565b915050611082565b50604051339082156108fc029083906000818181858888f1935050505015801561106c573d6000803e3d6000fd5b61110b612145565b602555565b611118612145565b602355565b611127338261226c565b6111435760405162461bcd60e51b8152600401610fcb906136b2565b61106c8383836122eb565b6000611159836115b9565b82106111bb5760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b6064820152608401610fcb565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b6000805b60155481101561124557826001600160a01b03166015828154811061120f5761120f613865565b6000918252602090912001546001600160a01b031614156112335750600192915050565b8061123d816137f4565b9150506111e8565b50600092915050565b611256612145565b6014805491151563010000000263ff00000019909216919091179055565b61127c612145565b601954604051339180156108fc02916000818181858888f193505050501580156112aa573d6000803e3d6000fd5b506000601955565b6000818152601a60205260408120546017546112ce919061377c565b610dee9082613731565b61106c83838360405180602001604052806000815250611b03565b60606000611300836115b9565b905060008167ffffffffffffffff81111561131d5761131d61387b565b604051908082528060200260200182016040528015611346578160200160208202803683370190505b50905060005b8281101561138d5761135e858261114e565b82828151811061137057611370613865565b602090810291909101015280611385816137f4565b91505061134c565b509392505050565b61139d612145565b601055565b60006113ad60085490565b82106114105760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b6064820152608401610fcb565b6008828154811061142357611423613865565b90600052602060002001549050919050565b61143d612145565b805161145090600d906020840190612ed0565b5050565b600061145f8261207a565b905060005b82518110156110d557336001600160a01b031661149984838151811061148c5761148c613865565b6020026020010151611525565b6001600160a01b0316146114df5760405162461bcd60e51b815260206004820152600d60248201526c13dddb995c88125b9d985b1a59609a1b6044820152606401610fcb565b601754601a60008584815181106114f8576114f8613865565b6020026020010151815260200190815260200160002081905550808061151d906137f4565b915050611464565b6000818152600260205260408120546001600160a01b031680610dee5760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610fcb565b61158d612145565b601655565b600d8054610ed5906137bf565b6115a7612145565b602255565b6115b4612145565b601155565b60006001600160a01b0382166116235760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b6064820152608401610fcb565b506001600160a01b031660009081526003602052604090205490565b611647612145565b6116516000612492565b565b61165b612145565b602455565b611668612145565b601255565b6026546001600160a01b0316331461168457600080fd5b6021805460ff19811660ff90911615179055565b606060018054610e1e906137bf565b6060601c805480602002602001604051908101604052809291908181526020018280548015610e9757602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116116e1575050505050905090565b6026546001600160a01b0316331461171f57600080fd5b6026546001600160a01b0316331461173657600080fd5b6116516124e4565b60145460ff161561178a5760405162461bcd60e51b81526020600482015260166024820152751d1a194818dbdb9d1c9858dd081a5cc81c185d5cd95960521b6044820152606401610fcb565b600061179560085490565b9050600082116117e75760405162461bcd60e51b815260206004820152601b60248201527f6e65656420746f206d696e74206174206c656173742031204e465400000000006044820152606401610fcb565b6012548211156118455760405162461bcd60e51b8152602060048201526024808201527f6d6178206d696e7420616d6f756e74207065722073657373696f6e20657863656044820152631959195960e21b6064820152608401610fcb565b6011546118528383613731565b11156118995760405162461bcd60e51b81526020600482015260166024820152751b585e08139195081b1a5b5a5d08195e18d95959195960521b6044820152606401610fcb565b600a546001600160a01b031633146119d6576014546301000000900460ff16151560011415611984576118cb336111e4565b6119175760405162461bcd60e51b815260206004820152601760248201527f75736572206973206e6f742077686974656c69737465640000000000000000006044820152606401610fcb565b336000908152601b60205260409020546013546119348483613731565b11156119825760405162461bcd60e51b815260206004820152601c60248201527f6d6178204e4654207065722061646472657373206578636565646564000000006044820152606401610fcb565b505b81601054611992919061375d565b3410156119d65760405162461bcd60e51b8152602060048201526012602482015271696e73756666696369656e742066756e647360701b6044820152606401610fcb565b60015b828111611a4857336000908152601b602052604081208054916119fb836137f4565b90915550611a14905033611a0f8385613731565b6126aa565b601754601a6000611a258486613731565b815260208101919091526040016000205580611a40816137f4565b9150506119d9565b506000606460165434611a5b919061375d565b611a659190613749565b9050611a70816126c4565b3460196000828254611a829190613731565b9091555050505050565b61145033838361272e565b611a9f612145565b6014805462ff0000191662010000179055565b600080611abe836115b9565b90506000805b8281101561138d576000611ad8868361114e565b9050611ae3816112b2565b611aed9084613731565b9250508080611afb906137f4565b915050611ac4565b611b0d338361226c565b611b295760405162461bcd60e51b8152600401610fcb906136b2565b611b35848484846127fd565b50505050565b60158181548110611b4b57600080fd5b6000918252602090912001546001600160a01b0316905081565b600e8054610ed5906137bf565b6000818152600260205260409020546060906001600160a01b0316611bf15760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610fcb565b60145462010000900460ff16611c9357600f8054611c0e906137bf565b80601f0160208091040260200160405190810160405280929190818152602001828054611c3a906137bf565b8015611c875780601f10611c5c57610100808354040283529160200191611c87565b820191906000526020600020905b815481529060010190602001808311611c6a57829003601f168201915b50505050509050919050565b6000611c9d612830565b90506000815111611cbd5760405180602001604052806000815250611ceb565b80611cc78461283f565b600e604051602001611cdb93929190613477565b6040516020818303038152906040525b9392505050565b611cfa612145565b601355565b601454610100900460ff16611d615760405162461bcd60e51b815260206004820152602260248201527f5468652077686974656c6973742073616c65206973206e6f7420656e61626c65604482015261642160f01b6064820152608401610fcb565b336000908152600c602052604090205460ff1615611dc15760405162461bcd60e51b815260206004820152601860248201527f4164647265737320616c726561647920636c61696d65642100000000000000006044820152606401610fcb565b6040516bffffffffffffffffffffffff193360601b166020820152600090603401604051602081830303815290604052805190602001209050611e3b83838080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050600b54915084905061293d565b611e785760405162461bcd60e51b815260206004820152600e60248201526d496e76616c69642070726f6f662160901b6044820152606401610fcb565b336000818152600c60205260409020805460ff19166001179055611b3590856126aa565b6023543414611eaa57600080fd5b60215460ff1615611ef15760405162461bcd60e51b8152602060048201526011602482015270131bdd1d195c9e481a5cc81c185d5cd959607a1b6044820152606401610fcb565b601c805460018101825560009182527f0e4562a10381dec21b205ed72637e6b1b523bdd0e4d4d50af5cd23dd4500a2110180546001600160a01b03191633179055601d805491611f40836137f4565b91905055503460206000828254611f579190613731565b90915550506040513381527f31e760aa525306aba638a784082a013b6a1cc0a9a1789f3f22281c0453b10b1f9060200160405180910390a1602254601d5410611651576116516124e4565b611faa612145565b805161145090600e906020840190612ed0565b611fc5612145565b611fd160156000612f54565b61106c60158383612f72565b611651346126c4565b611fee612145565b805161145090600f906020840190612ed0565b612009612145565b6001600160a01b03811661206e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610fcb565b61207781612492565b50565b6000805b82518110156120df57601a600084838151811061209d5761209d613865565b60200260200101518152602001908152602001600020546017546120c1919061377c565b6120cb9083613731565b9150806120d7816137f4565b91505061207e565b50919050565b601c8181548110611b4b57600080fd5b60006001600160e01b031982166380ac58cd60e01b148061212657506001600160e01b03198216635b5e139f60e01b145b80610dee57506301ffc9a760e01b6001600160e01b0319831614610dee565b600a546001600160a01b031633146116515760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610fcb565b6000818152600260205260409020546001600160a01b03166120775760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610fcb565b600081815260046020526040902080546001600160a01b0319166001600160a01b038416908117909155819061223382611525565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60008061227883611525565b9050806001600160a01b0316846001600160a01b031614806122bf57506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b806122e35750836001600160a01b03166122d884610ea1565b6001600160a01b0316145b949350505050565b826001600160a01b03166122fe82611525565b6001600160a01b0316146123625760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b6064820152608401610fcb565b6001600160a01b0382166123c45760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610fcb565b6123cf838383612953565b6123da6000826121fe565b6001600160a01b038316600090815260036020526040812080546001929061240390849061377c565b90915550506001600160a01b0382166000908152600360205260408120805460019290612431908490613731565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b601c546000906124f2612a0b565b6124fc919061380f565b90506000602254602354612510919061375d565b90506000601c838154811061252757612527613865565b60009182526020822001546025546001600160a01b03909116925060649061254f908561375d565b6125599190613749565b9050600060646024548561256d919061375d565b6125779190613749565b905060006125858284613731565b90506000612593828761377c565b905061259e846126c4565b600a546040516001600160a01b039091169084156108fc029085906000818181858888f193505050501580156125d8573d6000803e3d6000fd5b506040516001600160a01b0386169082156108fc029083906000818181858888f1935050505015801561260f573d6000803e3d6000fd5b50604080516000815260208101918290525161262d91601c91612fc5565b506000601d55604080516001600160a01b0387168152602081018890527f6e0d11c40e939975aea1b614617340d694125da9ebed64c96cab216ca971564e910160405180910390a1601e8054906000612685836137f4565b919050555083601f600082825461269c9190613731565b909155505050505050505050565b611450828260405180602001604052806000815250612a41565b806018546126d29190613731565b6018556008546126e29082613749565b601760008282546126f39190613731565b90915550506040518181527fbadc96f0b899bb720d18a25ea9fae343d6095c7f760d4a54ee0d65fe1c66ccd19060200160405180910390a150565b816001600160a01b0316836001600160a01b031614156127905760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610fcb565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6128088484846122eb565b61281484848484612a74565b611b355760405162461bcd60e51b8152600401610fcb90613660565b6060600d8054610e1e906137bf565b6060816128635750506040805180820190915260018152600360fc1b602082015290565b8160005b811561288d5780612877816137f4565b91506128869050600a83613749565b9150612867565b60008167ffffffffffffffff8111156128a8576128a861387b565b6040519080825280601f01601f1916602001820160405280156128d2576020820181803683370190505b5090505b84156122e3576128e760018361377c565b91506128f4600a8661380f565b6128ff906030613731565b60f81b81838151811061291457612914613865565b60200101906001600160f81b031916908160001a905350612936600a86613749565b94506128d6565b60008261294a8584612b81565b14949350505050565b6001600160a01b0383166129ae576129a981600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b6129d1565b816001600160a01b0316836001600160a01b0316146129d1576129d18382612bc6565b6001600160a01b0382166129e85761106c81612c63565b826001600160a01b0316826001600160a01b03161461106c5761106c8282612d12565b60004442601c604051602001612a239392919061353b565b6040516020818303038152906040528051906020012060001c905090565b612a4b8383612d56565b612a586000848484612a74565b61106c5760405162461bcd60e51b8152600401610fcb90613660565b60006001600160a01b0384163b15612b7657604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290612ab890339089908890889060040161358b565b602060405180830381600087803b158015612ad257600080fd5b505af1925050508015612b02575060408051601f3d908101601f19168201909252612aff91810190613380565b60015b612b5c573d808015612b30576040519150601f19603f3d011682016040523d82523d6000602084013e612b35565b606091505b508051612b545760405162461bcd60e51b8152600401610fcb90613660565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506122e3565b506001949350505050565b600081815b845181101561138d57612bb282868381518110612ba557612ba5613865565b6020026020010151612ea4565b915080612bbe816137f4565b915050612b86565b60006001612bd3846115b9565b612bdd919061377c565b600083815260076020526040902054909150808214612c30576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b600854600090612c759060019061377c565b60008381526009602052604081205460088054939450909284908110612c9d57612c9d613865565b906000526020600020015490508060088381548110612cbe57612cbe613865565b6000918252602080832090910192909255828152600990915260408082208490558582528120556008805480612cf657612cf661384f565b6001900381819060005260206000200160009055905550505050565b6000612d1d836115b9565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b6001600160a01b038216612dac5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610fcb565b6000818152600260205260409020546001600160a01b031615612e115760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610fcb565b612e1d60008383612953565b6001600160a01b0382166000908152600360205260408120805460019290612e46908490613731565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6000818310612ec0576000828152602084905260409020611ceb565b5060009182526020526040902090565b828054612edc906137bf565b90600052602060002090601f016020900481019282612efe5760008555612f44565b82601f10612f1757805160ff1916838001178555612f44565b82800160010185558215612f44579182015b82811115612f44578251825591602001919060010190612f29565b50612f5092915061301a565b5090565b5080546000825590600052602060002090810190612077919061301a565b828054828255906000526020600020908101928215612f44579160200282015b82811115612f445781546001600160a01b0319166001600160a01b03843516178255602090920191600190910190612f92565b828054828255906000526020600020908101928215612f44579160200282015b82811115612f4457825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190612fe5565b5b80821115612f50576000815560010161301b565b600067ffffffffffffffff8311156130495761304961387b565b61305c601f8401601f1916602001613700565b905082815283838301111561307057600080fd5b828260208301376000602084830101529392505050565b80356001600160a01b038116811461309e57600080fd5b919050565b60008083601f8401126130b557600080fd5b50813567ffffffffffffffff8111156130cd57600080fd5b6020830191508360208260051b85010111156130e857600080fd5b9250929050565b8035801515811461309e57600080fd5b60006020828403121561311157600080fd5b611ceb82613087565b6000806040838503121561312d57600080fd5b61313683613087565b915061314460208401613087565b90509250929050565b60008060006060848603121561316257600080fd5b61316b84613087565b925061317960208501613087565b9150604084013590509250925092565b6000806000806080858703121561319f57600080fd5b6131a885613087565b93506131b660208601613087565b925060408501359150606085013567ffffffffffffffff8111156131d957600080fd5b8501601f810187136131ea57600080fd5b6131f98782356020840161302f565b91505092959194509250565b6000806040838503121561321857600080fd5b61322183613087565b9150613144602084016130ef565b6000806040838503121561324257600080fd5b61324b83613087565b946020939093013593505050565b6000806020838503121561326c57600080fd5b823567ffffffffffffffff81111561328357600080fd5b61328f858286016130a3565b90969095509350505050565b600060208083850312156132ae57600080fd5b823567ffffffffffffffff808211156132c657600080fd5b818501915085601f8301126132da57600080fd5b8135818111156132ec576132ec61387b565b8060051b91506132fd848301613700565b8181528481019084860184860187018a101561331857600080fd5b600095505b8386101561333b57803583526001959095019491860191860161331d565b5098975050505050505050565b60006020828403121561335a57600080fd5b611ceb826130ef565b60006020828403121561337557600080fd5b8135611ceb81613891565b60006020828403121561339257600080fd5b8151611ceb81613891565b6000602082840312156133af57600080fd5b813567ffffffffffffffff8111156133c657600080fd5b8201601f810184136133d757600080fd5b6122e38482356020840161302f565b6000602082840312156133f857600080fd5b5035919050565b60008060006040848603121561341457600080fd5b83359250602084013567ffffffffffffffff81111561343257600080fd5b61343e868287016130a3565b9497909650939450505050565b60008151808452613463816020860160208601613793565b601f01601f19169290920160200192915050565b60008451602061348a8285838a01613793565b85519184019161349d8184848a01613793565b8554920191600090600181811c90808316806134ba57607f831692505b8583108114156134d857634e487b7160e01b85526022600452602485fd5b8080156134ec57600181146134fd5761352a565b60ff1985168852838801955061352a565b60008b81526020902060005b858110156135225781548a820152908401908801613509565b505083880195505b50939b9a5050505050505050505050565b838152600060208481840152604083018454856000528260002060005b8281101561357d5781546001600160a01b031684529284019260019182019101613558565b509198975050505050505050565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906135be9083018461344b565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b818110156136095783516001600160a01b0316835292840192918401916001016135e4565b50909695505050505050565b6020808252825182820181905260009190848201906040850190845b8181101561360957835183529284019291840191600101613631565b602081526000611ceb602083018461344b565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252602e908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526d1c881b9bdc88185c1c1c9bdd995960921b606082015260800190565b604051601f8201601f1916810167ffffffffffffffff811182821017156137295761372961387b565b604052919050565b6000821982111561374457613744613823565b500190565b60008261375857613758613839565b500490565b600081600019048311821515161561377757613777613823565b500290565b60008282101561378e5761378e613823565b500390565b60005b838110156137ae578181015183820152602001613796565b83811115611b355750506000910152565b600181811c908216806137d357607f821691505b602082108114156120df57634e487b7160e01b600052602260045260246000fd5b600060001982141561380857613808613823565b5060010190565b60008261381e5761381e613839565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b03198116811461207757600080fdfea264697066735822122085e7e2488b400009d9b399ec05bc149874e03aad26a5202f5466c9c6f5f7828a64736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000001143686565736563616b6520536c69636573000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000343535300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000035697066733a2f2f516d646f5a45655447337143466762356f4642476d52417150644573616b5174784776545a69675064536975474c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _name (string): Cheesecake Slices
Arg [1] : _symbol (string): CSS
Arg [2] : _initBaseURI (string): ipfs://QmdoZEeTG3qCFgb5oFBGmRAqPdEsakQtxGvTZigPdSiuGL
Arg [3] : _initNotRevealedUri (string):
-----Encoded View---------------
12 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000160
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000011
Arg [5] : 43686565736563616b6520536c69636573000000000000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [7] : 4353530000000000000000000000000000000000000000000000000000000000
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000035
Arg [9] : 697066733a2f2f516d646f5a45655447337143466762356f4642476d52417150
Arg [10] : 644573616b5174784776545a69675064536975474c0000000000000000000000
Arg [11] : 0000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
54840:9991:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48609:224;;;;;;;;;;-1:-1:-1;48609:224:0;;;;;:::i;:::-;;:::i;:::-;;;11844:14:1;;11837:22;11819:41;;11807:2;11792:18;48609:224:0;;;;;;;;62512:73;;;;;;;;;;-1:-1:-1;62512:73:0;;;;;:::i;:::-;;:::i;:::-;;34263:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;35776:171::-;;;;;;;;;;-1:-1:-1;35776:171:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;9315:32:1;;;9297:51;;9285:2;9270:18;35776:171:0;9151:203:1;55214:28:0;;;;;;;;;;;;;:::i;35293:417::-;;;;;;;;;;-1:-1:-1;35293:417:0;;;;;:::i;:::-;;:::i;55961:38::-;;;;;;;;;;;;;;;;;;;12017:25:1;;;12005:2;11990:18;55961:38:0;11871:177:1;59840:359:0;;;;;;;;;;;;;:::i;55894:26::-;;;;;;;;;;;;;;;;56115:36;;;;;;;;;;;;;;;;55247:31;;;;;;;;;;;;;;;;63069:123;;;;;;;;;;-1:-1:-1;63069:123:0;;;;;:::i;:::-;;:::i;63318:102::-;;;;;;;;;;-1:-1:-1;63318:102:0;;;;;:::i;:::-;;:::i;49249:113::-;;;;;;;;;;-1:-1:-1;49337:10:0;:17;49249:113;;55795:55;;;;;;;;;;-1:-1:-1;55795:55:0;;;;;:::i;:::-;;;;;;;;;;;;;;55666:30;;;;;;;;;;;;;;;;55319:35;;;;;;;;;;;;;;;;36476:336;;;;;;;;;;-1:-1:-1;36476:336:0;;;;;:::i;:::-;;:::i;55701:32::-;;;;;;;;;;;;;;;;54934:25;;;;;;;;;;;;;;;;48917:256;;;;;;;;;;-1:-1:-1;48917:256:0;;;;;:::i;:::-;;:::i;60535:239::-;;;;;;;;;;-1:-1:-1;60535:239:0;;;;;:::i;:::-;;:::i;62696:95::-;;;;;;;;;;-1:-1:-1;62696:95:0;;;;;:::i;:::-;;:::i;64703:125::-;;;;;;;;;;;;;:::i;59305:184::-;;;;;;;;;;-1:-1:-1;59305:184:0;;;;;:::i;:::-;;:::i;36883:185::-;;;;;;;;;;-1:-1:-1;36883:185:0;;;;;:::i;:::-;;:::i;60780:348::-;;;;;;;;;;-1:-1:-1;60780:348:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;61842:80::-;;;;;;;;;;-1:-1:-1;61842:80:0;;;;;:::i;:::-;;:::i;55629:32::-;;;;;;;;;;;;;;;;56156;;;;;;;;;;;;;;;;49439:233;;;;;;;;;;-1:-1:-1;49439:233:0;;;;;:::i;:::-;;:::i;55925:30::-;;;;;;;;;;;;;;;;56233:29;;;;;;;;;;-1:-1:-1;56233:29:0;;;;-1:-1:-1;;;;;56233:29:0;;;55477:27;;;;;;;;;;-1:-1:-1;55477:27:0;;;;;;;;;;;55591:33;;;;;;;;;;;;;;;;62152:98;;;;;;;;;;-1:-1:-1;62152:98:0;;;;;:::i;:::-;;:::i;56005:32::-;;;;;;;;;;;;;;;;55401:26;;;;;;;;;;-1:-1:-1;55401:26:0;;;;;;;;59495:339;;;;;;;;;;-1:-1:-1;59495:339:0;;;;;:::i;:::-;;:::i;33974:222::-;;;;;;;;;;-1:-1:-1;33974:222:0;;;;;:::i;:::-;;:::i;62949:114::-;;;;;;;;;;-1:-1:-1;62949:114:0;;;;;:::i;:::-;;:::i;55146:21::-;;;;;;;;;;;;;:::i;55432:40::-;;;;;;;;;;-1:-1:-1;55432:40:0;;;;;;;;;;;63426:102;;;;;;;;;;-1:-1:-1;63426:102:0;;;;;:::i;:::-;;:::i;61930:94::-;;;;;;;;;;-1:-1:-1;61930:94:0;;;;;:::i;:::-;;:::i;33705:207::-;;;;;;;;;;-1:-1:-1;33705:207:0;;;;;:::i;:::-;;:::i;11375:103::-;;;;;;;;;;;;;:::i;63196:112::-;;;;;;;;;;-1:-1:-1;63196:112:0;;;;;:::i;:::-;;:::i;62030:116::-;;;;;;;;;;-1:-1:-1;62030:116:0;;;;;:::i;:::-;;:::i;10727:87::-;;;;;;;;;;-1:-1:-1;10800:6:0;;-1:-1:-1;;;;;10800:6:0;10727:87;;62589:99;;;;;;;;;;;;;:::i;34432:104::-;;;;;;;;;;;;;:::i;63540:96::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;55509:35::-;;;;;;;;;;-1:-1:-1;55509:35:0;;;;;;;;;;;63642:118;;;;;;;;;;;;;:::i;57325:1125::-;;;;;;:::i;:::-;;:::i;36019:155::-;;;;;;;;;;-1:-1:-1;36019:155:0;;;;;:::i;:::-;;:::i;61657:65::-;;;;;;;;;;;;;:::i;60205:322::-;;;;;;;;;;-1:-1:-1;60205:322:0;;;;;:::i;:::-;;:::i;37139:323::-;;;;;;;;;;-1:-1:-1;37139:323:0;;;;;:::i;:::-;;:::i;55549:37::-;;;;;;;;;;-1:-1:-1;55549:37:0;;;;;:::i;:::-;;:::i;55359:::-;;;;;;;;;;;;;;;;55740:50;;;;;;;;;;-1:-1:-1;55740:50:0;;;;;:::i;:::-;;;;;;;;;;;;;;55172:37;;;;;;;;;;;;;:::i;61134:497::-;;;;;;;;;;-1:-1:-1;61134:497:0;;;;;:::i;:::-;;:::i;61730:104::-;;;;;;;;;;-1:-1:-1;61730:104:0;;;;;:::i;:::-;;:::i;56785:521::-;;;;;;:::i;:::-;;:::i;58456:339::-;;;:::i;55283:31::-;;;;;;;;;;;;;;;;56193:35;;;;;;;;;;;;;;;;62256:122;;;;;;;;;;-1:-1:-1;62256:122:0;;;;;:::i;:::-;;:::i;54964:48::-;;;;;;;;;;-1:-1:-1;54964:48:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;36245:164;;;;;;;;;;-1:-1:-1;36245:164:0;;;;;:::i;:::-;-1:-1:-1;;;;;36366:25:0;;;36342:4;36366:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;36245:164;62799:144;;;;;;;;;;-1:-1:-1;62799:144:0;;;;;:::i;:::-;;:::i;58986:70::-;;;:::i;62386:120::-;;;;;;;;;;-1:-1:-1;62386:120:0;;;;;:::i;:::-;;:::i;11633:201::-;;;;;;;;;;-1:-1:-1;11633:201:0;;;;;:::i;:::-;;:::i;59062:237::-;;;;;;;;;;-1:-1:-1;59062:237:0;;;;;:::i;:::-;;:::i;56043:32::-;;;;;;;;;;-1:-1:-1;56043:32:0;;;;;;;;55857;;;;;;;;;;-1:-1:-1;55857:32:0;;;;;:::i;:::-;;:::i;56080:30::-;;;;;;;;;;;;;;;;48609:224;48711:4;-1:-1:-1;;;;;;48735:50:0;;-1:-1:-1;;;48735:50:0;;:90;;;48789:36;48813:11;48789:23;:36::i;:::-;48728:97;48609:224;-1:-1:-1;;48609:224:0:o;62512:73::-;10613:13;:11;:13::i;:::-;62564:6:::1;:15:::0;;-1:-1:-1;;62564:15:0::1;::::0;::::1;;::::0;;;::::1;::::0;;62512:73::o;34263:100::-;34317:13;34350:5;34343:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34263:100;:::o;35776:171::-;35852:7;35872:23;35887:7;35872:14;:23::i;:::-;-1:-1:-1;35915:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;35915:24:0;;35776:171::o;55214:28::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;35293:417::-;35374:13;35390:23;35405:7;35390:14;:23::i;:::-;35374:39;;35438:5;-1:-1:-1;;;;;35432:11:0;:2;-1:-1:-1;;;;;35432:11:0;;;35424:57;;;;-1:-1:-1;;;35424:57:0;;20077:2:1;35424:57:0;;;20059:21:1;20116:2;20096:18;;;20089:30;20155:34;20135:18;;;20128:62;-1:-1:-1;;;20206:18:1;;;20199:31;20247:19;;35424:57:0;;;;;;;;;9358:10;-1:-1:-1;;;;;35516:21:0;;;;:62;;-1:-1:-1;35541:37:0;35558:5;9358:10;36245:164;:::i;35541:37::-;35494:174;;;;-1:-1:-1;;;35494:174:0;;17105:2:1;35494:174:0;;;17087:21:1;17144:2;17124:18;;;17117:30;17183:34;17163:18;;;17156:62;17254:32;17234:18;;;17227:60;17304:19;;35494:174:0;16903:426:1;35494:174:0;35681:21;35690:2;35694:7;35681:8;:21::i;:::-;35363:347;35293:417;;:::o;59840:359::-;59881:10;59894:21;59904:10;59894:9;:21::i;:::-;59881:34;;59922:15;59952:6;59948:202;59968:5;59964:1;:9;59948:202;;;59990:12;60005:34;60025:10;60037:1;60005:19;:34::i;:::-;59990:49;;60062:24;60078:7;60062:15;:24::i;:::-;60050:37;;;;:::i;:::-;60125:17;;60098:24;;;;:15;:24;;;;;;:44;;;;60050:37;-1:-1:-1;59975:3:0;;;;:::i;:::-;;;;59948:202;;;-1:-1:-1;60156:37:0;;60164:10;;60156:37;;;;;60185:7;;60156:37;;;;60185:7;60164:10;60156:37;;;;;;;;;;;;;;;;;;;63069:123;10613:13;:11;:13::i;:::-;63150:16:::1;:36:::0;63069:123::o;63318:102::-;10613:13;:11;:13::i;:::-;63388:11:::1;:26:::0;63318:102::o;36476:336::-;36671:41;9358:10;36704:7;36671:18;:41::i;:::-;36663:100;;;;-1:-1:-1;;;36663:100:0;;;;;;;:::i;:::-;36776:28;36786:4;36792:2;36796:7;36776:9;:28::i;48917:256::-;49014:7;49050:23;49067:5;49050:16;:23::i;:::-;49042:5;:31;49034:87;;;;-1:-1:-1;;;49034:87:0;;12822:2:1;49034:87:0;;;12804:21:1;12861:2;12841:18;;;12834:30;12900:34;12880:18;;;12873:62;-1:-1:-1;;;12951:18:1;;;12944:41;13002:19;;49034:87:0;12620:407:1;49034:87:0;-1:-1:-1;;;;;;49139:19:0;;;;;;;;:12;:19;;;;;;;;:26;;;;;;;;;48917:256::o;60535:239::-;60594:4;;60607:143;60628:20;:27;60624:31;;60607:143;;;60702:5;-1:-1:-1;;;;;60675:32:0;:20;60696:1;60675:23;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;60675:23:0;:32;60671:72;;;-1:-1:-1;60729:4:0;;60535:239;-1:-1:-1;;60535:239:0:o;60671:72::-;60657:3;;;;:::i;:::-;;;;60607:143;;;-1:-1:-1;60763:5:0;;60535:239;-1:-1:-1;;60535:239:0:o;62696:95::-;10613:13;:11;:13::i;:::-;62761:15:::1;:24:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;62761:24:0;;::::1;::::0;;;::::1;::::0;;62696:95::o;64703:125::-;10613:13;:11;:13::i;:::-;64776:17:::1;::::0;64747:47:::1;::::0;64755:10:::1;::::0;64747:47;::::1;;;::::0;::::1;::::0;;;64776:17;64755:10;64747:47;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;64821:1:0::1;64801:17;:21:::0;64703:125::o;59305:184::-;59391:15;59451:32;;;:15;:32;;;;;;59431:17;;:52;;59451:32;59431:52;:::i;:::-;59420:63;;;;:::i;36883:185::-;37021:39;37038:4;37044:2;37048:7;37021:39;;;;;;;;;;;;:16;:39::i;60780:348::-;60855:16;60883:23;60909:17;60919:6;60909:9;:17::i;:::-;60883:43;;60933:25;60975:15;60961:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;60961:30:0;;60933:58;;61003:9;60998:103;61018:15;61014:1;:19;60998:103;;;61063:30;61083:6;61091:1;61063:19;:30::i;:::-;61049:8;61058:1;61049:11;;;;;;;;:::i;:::-;;;;;;;;;;:44;61035:3;;;;:::i;:::-;;;;60998:103;;;-1:-1:-1;61114:8:0;60780:348;-1:-1:-1;;;60780:348:0:o;61842:80::-;10613:13;:11;:13::i;:::-;61901:4:::1;:15:::0;61842:80::o;49439:233::-;49514:7;49550:30;49337:10;:17;;49249:113;49550:30;49542:5;:38;49534:95;;;;-1:-1:-1;;;49534:95:0;;21229:2:1;49534:95:0;;;21211:21:1;21268:2;21248:18;;;21241:30;21307:34;21287:18;;;21280:62;-1:-1:-1;;;21358:18:1;;;21351:42;21410:19;;49534:95:0;21027:408:1;49534:95:0;49647:10;49658:5;49647:17;;;;;;;;:::i;:::-;;;;;;;;;49640:24;;49439:233;;;:::o;62152:98::-;10613:13;:11;:13::i;:::-;62223:21;;::::1;::::0;:7:::1;::::0;:21:::1;::::0;::::1;::::0;::::1;:::i;:::-;;62152:98:::0;:::o;59495:339::-;59560:15;59578:20;59589:8;59578:10;:20::i;:::-;59560:38;;59610:9;59605:180;59629:8;:15;59625:1;:19;59605:180;;;59692:10;-1:-1:-1;;;;;59668:34:0;:20;59676:8;59685:1;59676:11;;;;;;;;:::i;:::-;;;;;;;59668:7;:20::i;:::-;-1:-1:-1;;;;;59668:34:0;;59660:60;;;;-1:-1:-1;;;59660:60:0;;22409:2:1;59660:60:0;;;22391:21:1;22448:2;22428:18;;;22421:30;-1:-1:-1;;;22467:18:1;;;22460:43;22520:18;;59660:60:0;22207:337:1;59660:60:0;59760:17;;59729:15;:28;59745:8;59754:1;59745:11;;;;;;;;:::i;:::-;;;;;;;59729:28;;;;;;;;;;;:48;;;;59646:3;;;;;:::i;:::-;;;;59605:180;;33974:222;34046:7;34082:16;;;:7;:16;;;;;;-1:-1:-1;;;;;34082:16:0;34117:19;34109:56;;;;-1:-1:-1;;;34109:56:0;;19724:2:1;34109:56:0;;;19706:21:1;19763:2;19743:18;;;19736:30;-1:-1:-1;;;19782:18:1;;;19775:54;19846:18;;34109:56:0;19522:348:1;62949:114:0;10613:13;:11;:13::i;:::-;63025:14:::1;:32:::0;62949:114::o;55146:21::-;;;;;;;:::i;63426:102::-;10613:13;:11;:13::i;:::-;63496:11:::1;:26:::0;63426:102::o;61930:94::-;10613:13;:11;:13::i;:::-;61996:9:::1;:22:::0;61930:94::o;33705:207::-;33777:7;-1:-1:-1;;;;;33805:19:0;;33797:73;;;;-1:-1:-1;;;33797:73:0;;15939:2:1;33797:73:0;;;15921:21:1;15978:2;15958:18;;;15951:30;16017:34;15997:18;;;15990:62;-1:-1:-1;;;16068:18:1;;;16061:39;16117:19;;33797:73:0;15737:405:1;33797:73:0;-1:-1:-1;;;;;;33888:16:0;;;;;:9;:16;;;;;;;33705:207::o;11375:103::-;10613:13;:11;:13::i;:::-;11440:30:::1;11467:1;11440:18;:30::i;:::-;11375:103::o:0;63196:112::-;10613:13;:11;:13::i;:::-;63272::::1;:30:::0;63196:112::o;62030:116::-;10613:13;:11;:13::i;:::-;62107::::1;:33:::0;62030:116::o;62589:99::-;56740:14;;-1:-1:-1;;;;;56740:14:0;56726:10;:28;56718:37;;;;;;62669:13:::1;::::0;;-1:-1:-1;;62652:30:0;::::1;62669:13;::::0;;::::1;62668:14;62652:30;::::0;;62589:99::o;34432:104::-;34488:13;34521:7;34514:14;;;;;:::i;63540:96::-;63583:24;63623:7;63616:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;63616:14:0;;;;;;;;;;;;;;;;;;;;;;63540:96;:::o;63642:118::-;56740:14;;-1:-1:-1;;;;;56740:14:0;56726:10;:28;56718:37;;;;;;63719:14:::1;::::0;-1:-1:-1;;;;;63719:14:0::1;63705:10;:28;63697:37;;;::::0;::::1;;63742:12;:10;:12::i;57325:1125::-:0;57391:6;;;;57390:7;57382:42;;;;-1:-1:-1;;;57382:42:0;;18604:2:1;57382:42:0;;;18586:21:1;18643:2;18623:18;;;18616:30;-1:-1:-1;;;18662:18:1;;;18655:52;18724:18;;57382:42:0;18402:346:1;57382:42:0;57431:14;57448:13;49337:10;:17;;49249:113;57448:13;57431:30;;57490:1;57476:11;:15;57468:55;;;;-1:-1:-1;;;57468:55:0;;22751:2:1;57468:55:0;;;22733:21:1;22790:2;22770:18;;;22763:30;22829:29;22809:18;;;22802:57;22876:18;;57468:55:0;22549:351:1;57468:55:0;57553:13;;57538:11;:28;;57530:77;;;;-1:-1:-1;;;57530:77:0;;16700:2:1;57530:77:0;;;16682:21:1;16739:2;16719:18;;;16712:30;16778:34;16758:18;;;16751:62;-1:-1:-1;;;16829:18:1;;;16822:34;16873:19;;57530:77:0;16498:400:1;57530:77:0;57646:9;;57622:20;57631:11;57622:6;:20;:::i;:::-;:33;;57614:68;;;;-1:-1:-1;;;57614:68:0;;16349:2:1;57614:68:0;;;16331:21:1;16388:2;16368:18;;;16361:30;-1:-1:-1;;;16407:18:1;;;16400:52;16469:18;;57614:68:0;16147:346:1;57614:68:0;10800:6;;-1:-1:-1;;;;;10800:6:0;57695:10;:21;57691:416;;57732:15;;;;;;;:23;;57751:4;57732:23;57729:298;;;57780:25;57794:10;57780:13;:25::i;:::-;57772:61;;;;-1:-1:-1;;;57772:61:0;;21642:2:1;57772:61:0;;;21624:21:1;21681:2;21661:18;;;21654:30;21720:25;21700:18;;;21693:53;21763:18;;57772:61:0;21440:347:1;57772:61:0;57896:10;57848:24;57875:32;;;:20;:32;;;;;;57964:18;;57930:30;57949:11;57875:32;57930:30;:::i;:::-;:52;;57922:93;;;;-1:-1:-1;;;57922:93:0;;14823:2:1;57922:93:0;;;14805:21:1;14862:2;14842:18;;;14835:30;14901;14881:18;;;14874:58;14949:18;;57922:93:0;14621:352:1;57922:93:0;57757:270;57729:298;58065:11;58058:4;;:18;;;;:::i;:::-;58045:9;:31;;58037:62;;;;-1:-1:-1;;;58037:62:0;;20479:2:1;58037:62:0;;;20461:21:1;20518:2;20498:18;;;20491:30;-1:-1:-1;;;20537:18:1;;;20530:48;20595:18;;58037:62:0;20277:342:1;58037:62:0;58132:1;58115:192;58140:11;58135:1;:16;58115:192;;58188:10;58167:32;;;;:20;:32;;;;;:34;;;;;;:::i;:::-;;;;-1:-1:-1;58210:33:0;;-1:-1:-1;58220:10:0;58232;58241:1;58232:6;:10;:::i;:::-;58210:9;:33::i;:::-;58282:17;;58252:15;:27;58268:10;58277:1;58268:6;:10;:::i;:::-;58252:27;;;;;;;;;;;-1:-1:-1;58252:27:0;:47;58153:3;;;;:::i;:::-;;;;58115:192;;;;58313:23;58370:3;58352:14;;58340:9;:26;;;;:::i;:::-;58339:34;;;;:::i;:::-;58313:60;;58380:27;58391:15;58380:10;:27::i;:::-;58435:9;58414:17;;:30;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;57325:1125:0:o;36019:155::-;36114:52;9358:10;36147:8;36157;36114:18;:52::i;61657:65::-;10613:13;:11;:13::i;:::-;61701:8:::1;:15:::0;;-1:-1:-1;;61701:15:0::1;::::0;::::1;::::0;;61657:65::o;60205:322::-;60273:7;60291:10;60304:17;60314:6;60304:9;:17::i;:::-;60291:30;;60330:13;60360:6;60356:145;60376:5;60372:1;:9;60356:145;;;60400:12;60415:30;60435:6;60443:1;60415:19;:30::i;:::-;60400:45;;60467:24;60483:7;60467:15;:24::i;:::-;60458:33;;;;:::i;:::-;;;60387:114;60383:3;;;;;:::i;:::-;;;;60356:145;;37139:323;37313:41;9358:10;37346:7;37313:18;:41::i;:::-;37305:100;;;;-1:-1:-1;;;37305:100:0;;;;;;;:::i;:::-;37416:38;37430:4;37436:2;37440:7;37449:4;37416:13;:38::i;:::-;37139:323;;;;:::o;55549:37::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;55549:37:0;;-1:-1:-1;55549:37:0;:::o;55172:::-;;;;;;;:::i;61134:497::-;39034:4;39058:16;;;:7;:16;;;;;;61232:13;;-1:-1:-1;;;;;39058:16:0;61257:97;;;;-1:-1:-1;;;61257:97:0;;19308:2:1;61257:97:0;;;19290:21:1;19347:2;19327:18;;;19320:30;19386:34;19366:18;;;19359:62;-1:-1:-1;;;19437:18:1;;;19430:45;19492:19;;61257:97:0;19106:411:1;61257:97:0;61370:8;;;;;;;61367:62;;61407:14;61400:21;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;61134:497;;;:::o;61367:62::-;61437:28;61468:10;:8;:10::i;:::-;61437:41;;61523:1;61498:14;61492:28;:32;:133;;;;;;;;;;;;;;;;;61560:14;61576:18;:7;:16;:18::i;:::-;61596:13;61543:67;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;61492:133;61485:140;61134:497;-1:-1:-1;;;61134:497:0:o;61730:104::-;10613:13;:11;:13::i;:::-;61801:18:::1;:27:::0;61730:104::o;56785:521::-;56930:20;;;;;;;56922:67;;;;-1:-1:-1;;;56922:67:0;;20826:2:1;56922:67:0;;;20808:21:1;20865:2;20845:18;;;20838:30;20904:34;20884:18;;;20877:62;-1:-1:-1;;;20955:18:1;;;20948:32;20997:19;;56922:67:0;20624:398:1;56922:67:0;9358:10;57005:30;;;;:16;:30;;;;;;;;57004:31;56996:68;;;;-1:-1:-1;;;56996:68:0;;18955:2:1;56996:68:0;;;18937:21:1;18994:2;18974:18;;;18967:30;19033:26;19013:18;;;19006:54;19077:18;;56996:68:0;18753:348:1;56996:68:0;57096:30;;-1:-1:-1;;9358:10:0;6772:2:1;6768:15;6764:53;57096:30:0;;;6752:66:1;57071:12:0;;6834::1;;57096:30:0;;;;;;;;;;;;57086:41;;;;;;57071:56;;57142:50;57161:12;;57142:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;57175:10:0;;;-1:-1:-1;57187:4:0;;-1:-1:-1;57142:18:0;:50::i;:::-;57134:77;;;;-1:-1:-1;;;57134:77:0;;12479:2:1;57134:77:0;;;12461:21:1;12518:2;12498:18;;;12491:30;-1:-1:-1;;;12537:18:1;;;12530:44;12591:18;;57134:77:0;12277:338:1;57134:77:0;9358:10;57220:30;;;;:16;:30;;;;;:37;;-1:-1:-1;;57220:37:0;57253:4;57220:37;;;57264:36;;57288:11;57264:9;:36::i;58456:339::-;58521:11;;58508:9;:24;58500:33;;;;;;58549:13;;;;58548:14;58540:44;;;;-1:-1:-1;;;58540:44:0;;17897:2:1;58540:44:0;;;17879:21:1;17936:2;17916:18;;;17909:30;-1:-1:-1;;;17955:18:1;;;17948:47;18012:18;;58540:44:0;17695:341:1;58540:44:0;58591:7;:33;;;;;;;-1:-1:-1;58591:33:0;;;;;;;-1:-1:-1;;;;;;58591:33:0;58612:10;58591:33;;;58631:14;:16;;;;;;:::i;:::-;;;;;;58671:9;58654:13;;:26;;;;;;;:::i;:::-;;;;-1:-1:-1;;58692:24:0;;58705:10;9297:51:1;;58692:24:0;;9285:2:1;9270:18;58692:24:0;;;;;;;58747:11;;58729:14;;:29;58725:65;;58770:12;:10;:12::i;62256:122::-;10613:13;:11;:13::i;:::-;62339:33;;::::1;::::0;:13:::1;::::0;:33:::1;::::0;::::1;::::0;::::1;:::i;62799:144::-:0;10613:13;:11;:13::i;:::-;62874:27:::1;62881:20;;62874:27;:::i;:::-;62908:29;:20;62931:6:::0;;62908:29:::1;:::i;58986:70::-:0;59029:21;59040:9;59029:10;:21::i;62386:120::-;10613:13;:11;:13::i;:::-;62468:32;;::::1;::::0;:14:::1;::::0;:32:::1;::::0;::::1;::::0;::::1;:::i;11633:201::-:0;10613:13;:11;:13::i;:::-;-1:-1:-1;;;;;11722:22:0;::::1;11714:73;;;::::0;-1:-1:-1;;;11714:73:0;;13653:2:1;11714:73:0::1;::::0;::::1;13635:21:1::0;13692:2;13672:18;;;13665:30;13731:34;13711:18;;;13704:62;-1:-1:-1;;;13782:18:1;;;13775:36;13828:19;;11714:73:0::1;13451:402:1::0;11714:73:0::1;11798:28;11817:8;11798:18;:28::i;:::-;11633:201:::0;:::o;59062:237::-;59145:15;;59172:122;59196:8;:15;59192:1;:19;59172:122;;;59258:15;:28;59274:8;59283:1;59274:11;;;;;;;;:::i;:::-;;;;;;;59258:28;;;;;;;;;;;;59238:17;;:48;;;;:::i;:::-;59227:59;;;;:::i;:::-;;-1:-1:-1;59213:3:0;;;;:::i;:::-;;;;59172:122;;;;59062:237;;;:::o;55857:32::-;;;;;;;;;;;;33336:305;33438:4;-1:-1:-1;;;;;;33475:40:0;;-1:-1:-1;;;33475:40:0;;:105;;-1:-1:-1;;;;;;;33532:48:0;;-1:-1:-1;;;33532:48:0;33475:105;:158;;;-1:-1:-1;;;;;;;;;;26187:40:0;;;33597:36;26078:157;10892:132;10800:6;;-1:-1:-1;;;;;10800:6:0;9358:10;10956:23;10948:68;;;;-1:-1:-1;;;10948:68:0;;18243:2:1;10948:68:0;;;18225:21:1;;;18262:18;;;18255:30;18321:34;18301:18;;;18294:62;18373:18;;10948:68:0;18041:356:1;43751:135:0;39034:4;39058:16;;;:7;:16;;;;;;-1:-1:-1;;;;;39058:16:0;43825:53;;;;-1:-1:-1;;;43825:53:0;;19724:2:1;43825:53:0;;;19706:21:1;19763:2;19743:18;;;19736:30;-1:-1:-1;;;19782:18:1;;;19775:54;19846:18;;43825:53:0;19522:348:1;43030:174:0;43105:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;43105:29:0;-1:-1:-1;;;;;43105:29:0;;;;;;;;:24;;43159:23;43105:24;43159:14;:23::i;:::-;-1:-1:-1;;;;;43150:46:0;;;;;;;;;;;43030:174;;:::o;39263:264::-;39356:4;39373:13;39389:23;39404:7;39389:14;:23::i;:::-;39373:39;;39442:5;-1:-1:-1;;;;;39431:16:0;:7;-1:-1:-1;;;;;39431:16:0;;:52;;;-1:-1:-1;;;;;;36366:25:0;;;36342:4;36366:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;39451:32;39431:87;;;;39511:7;-1:-1:-1;;;;;39487:31:0;:20;39499:7;39487:11;:20::i;:::-;-1:-1:-1;;;;;39487:31:0;;39431:87;39423:96;39263:264;-1:-1:-1;;;;39263:264:0:o;42286:625::-;42445:4;-1:-1:-1;;;;;42418:31:0;:23;42433:7;42418:14;:23::i;:::-;-1:-1:-1;;;;;42418:31:0;;42410:81;;;;-1:-1:-1;;;42410:81:0;;14060:2:1;42410:81:0;;;14042:21:1;14099:2;14079:18;;;14072:30;14138:34;14118:18;;;14111:62;-1:-1:-1;;;14189:18:1;;;14182:35;14234:19;;42410:81:0;13858:401:1;42410:81:0;-1:-1:-1;;;;;42510:16:0;;42502:65;;;;-1:-1:-1;;;42502:65:0;;15180:2:1;42502:65:0;;;15162:21:1;15219:2;15199:18;;;15192:30;15258:34;15238:18;;;15231:62;-1:-1:-1;;;15309:18:1;;;15302:34;15353:19;;42502:65:0;14978:400:1;42502:65:0;42580:39;42601:4;42607:2;42611:7;42580:20;:39::i;:::-;42684:29;42701:1;42705:7;42684:8;:29::i;:::-;-1:-1:-1;;;;;42726:15:0;;;;;;:9;:15;;;;;:20;;42745:1;;42726:15;:20;;42745:1;;42726:20;:::i;:::-;;;;-1:-1:-1;;;;;;;42757:13:0;;;;;;:9;:13;;;;;:18;;42774:1;;42757:13;:18;;42774:1;;42757:18;:::i;:::-;;;;-1:-1:-1;;42786:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;42786:21:0;-1:-1:-1;;;;;42786:21:0;;;;;;;;;42825:27;;42786:16;;42825:27;;;;;;;35363:347;35293:417;;:::o;11994:191::-;12087:6;;;-1:-1:-1;;;;;12104:17:0;;;-1:-1:-1;;;;;;12104:17:0;;;;;;;12137:40;;12087:6;;;12104:17;12087:6;;12137:40;;12068:16;;12137:40;12057:128;11994:191;:::o;63770:765::-;63838:7;:14;63811:13;;63827:8;:6;:8::i;:::-;:25;;;;:::i;:::-;63811:41;;63863:14;63894:11;;63880;;:25;;;;:::i;:::-;63863:42;;63918:22;63943:7;63951:5;63943:14;;;;;;;;:::i;:::-;;;;;;;;;;64011:16;;-1:-1:-1;;;;;63943:14:0;;;;-1:-1:-1;64031:3:0;;64002:25;;:6;:25;:::i;:::-;64001:33;;;;:::i;:::-;63978:56;;64045:18;64093:3;64076:13;;64067:6;:22;;;;:::i;:::-;64066:30;;;;:::i;:::-;64045:51;-1:-1:-1;64107:17:0;64127:25;64045:51;64127:12;:25;:::i;:::-;64107:45;-1:-1:-1;64163:19:0;64185:18;64107:45;64185:6;:18;:::i;:::-;64163:40;;64216:24;64227:12;64216:10;:24::i;:::-;10800:6;;64251:37;;-1:-1:-1;;;;;10800:6:0;;;;64251:37;;;;;64277:10;;64251:37;;;;64277:10;10800:6;64251:37;;;;;;;;;;;;;;;;;;;;-1:-1:-1;64299:28:0;;-1:-1:-1;;;;;64299:15:0;;;:28;;;;;64315:11;;64299:28;;;;64315:11;64299:15;:28;;;;;;;;;;;;;;;;;;;;-1:-1:-1;64361:24:0;;;64383:1;64361:24;;;;;;;;;64351:34;;;:7;;:34;:::i;:::-;-1:-1:-1;64413:1:0;64396:14;:18;64432:25;;;-1:-1:-1;;;;;9783:32:1;;9765:51;;9847:2;9832:18;;9825:34;;;64432:25:0;;9738:18:1;64432:25:0;;;;;;;64468:11;:13;;;:11;:13;;;:::i;:::-;;;;;;64515:12;64492:19;;:35;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;;;63770:765:0:o;39869:110::-;39945:26;39955:2;39959:7;39945:26;;;;;;;;;;;;:9;:26::i;58801:179::-;58888:6;58870:15;;:24;;;;:::i;:::-;58852:15;:42;49337:10;:17;58922:22;;:6;:22;:::i;:::-;58901:17;;:43;;;;;;;:::i;:::-;;;;-1:-1:-1;;58956:18:0;;12017:25:1;;;58956:18:0;;12005:2:1;11990:18;58956::0;;;;;;;58801:179;:::o;43347:315::-;43502:8;-1:-1:-1;;;;;43493:17:0;:5;-1:-1:-1;;;;;43493:17:0;;;43485:55;;;;-1:-1:-1;;;43485:55:0;;15585:2:1;43485:55:0;;;15567:21:1;15624:2;15604:18;;;15597:30;15663:27;15643:18;;;15636:55;15708:18;;43485:55:0;15383:349:1;43485:55:0;-1:-1:-1;;;;;43551:25:0;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;:46;;-1:-1:-1;;43551:46:0;;;;;;;;;;43613:41;;11819::1;;;43613::0;;11792:18:1;43613:41:0;;;;;;;43347:315;;;:::o;38343:313::-;38499:28;38509:4;38515:2;38519:7;38499:9;:28::i;:::-;38546:47;38569:4;38575:2;38579:7;38588:4;38546:22;:47::i;:::-;38538:110;;;;-1:-1:-1;;;38538:110:0;;;;;;;:::i;56575:102::-;56635:13;56664:7;56657:14;;;;;:::i;22229:723::-;22285:13;22506:10;22502:53;;-1:-1:-1;;22533:10:0;;;;;;;;;;;;-1:-1:-1;;;22533:10:0;;;;;22229:723::o;22502:53::-;22580:5;22565:12;22621:78;22628:9;;22621:78;;22654:8;;;;:::i;:::-;;-1:-1:-1;22677:10:0;;-1:-1:-1;22685:2:0;22677:10;;:::i;:::-;;;22621:78;;;22709:19;22741:6;22731:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22731:17:0;;22709:39;;22759:154;22766:10;;22759:154;;22793:11;22803:1;22793:11;;:::i;:::-;;-1:-1:-1;22862:10:0;22870:2;22862:5;:10;:::i;:::-;22849:24;;:2;:24;:::i;:::-;22836:39;;22819:6;22826;22819:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;22819:56:0;;;;;;;;-1:-1:-1;22890:11:0;22899:2;22890:11;;:::i;:::-;;;22759:154;;1093:190;1218:4;1271;1242:25;1255:5;1262:4;1242:12;:25::i;:::-;:33;;1093:190;-1:-1:-1;;;;1093:190:0:o;50285:589::-;-1:-1:-1;;;;;50491:18:0;;50487:187;;50526:40;50558:7;51701:10;:17;;51674:24;;;;:15;:24;;;;;:44;;;51729:24;;;;;;;;;;;;51597:164;50526:40;50487:187;;;50596:2;-1:-1:-1;;;;;50588:10:0;:4;-1:-1:-1;;;;;50588:10:0;;50584:90;;50615:47;50648:4;50654:7;50615:32;:47::i;:::-;-1:-1:-1;;;;;50688:16:0;;50684:183;;50721:45;50758:7;50721:36;:45::i;50684:183::-;50794:4;-1:-1:-1;;;;;50788:10:0;:2;-1:-1:-1;;;;;50788:10:0;;50784:83;;50815:40;50843:2;50847:7;50815:27;:40::i;64543:147::-;64582:4;64637:16;64655:15;64672:7;64620:60;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;64610:71;;;;;;64605:77;;64598:84;;64543:147;:::o;40206:319::-;40335:18;40341:2;40345:7;40335:5;:18::i;:::-;40386:53;40417:1;40421:2;40425:7;40434:4;40386:22;:53::i;:::-;40364:153;;;;-1:-1:-1;;;40364:153:0;;;;;;;:::i;44450:853::-;44604:4;-1:-1:-1;;;;;44625:13:0;;14774:19;:23;44621:675;;44661:71;;-1:-1:-1;;;44661:71:0;;-1:-1:-1;;;;;44661:36:0;;;;;:71;;9358:10;;44712:4;;44718:7;;44727:4;;44661:71;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;44661:71:0;;;;;;;;-1:-1:-1;;44661:71:0;;;;;;;;;;;;:::i;:::-;;;44657:584;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;44902:13:0;;44898:328;;44945:60;;-1:-1:-1;;;44945:60:0;;;;;;;:::i;44898:328::-;45176:6;45170:13;45161:6;45157:2;45153:15;45146:38;44657:584;-1:-1:-1;;;;;;44783:51:0;-1:-1:-1;;;44783:51:0;;-1:-1:-1;44776:58:0;;44621:675;-1:-1:-1;45280:4:0;44450:853;;;;;;:::o;1960:296::-;2043:7;2086:4;2043:7;2101:118;2125:5;:12;2121:1;:16;2101:118;;;2174:33;2184:12;2198:5;2204:1;2198:8;;;;;;;;:::i;:::-;;;;;;;2174:9;:33::i;:::-;2159:48;-1:-1:-1;2139:3:0;;;;:::i;:::-;;;;2101:118;;52388:988;52654:22;52704:1;52679:22;52696:4;52679:16;:22::i;:::-;:26;;;;:::i;:::-;52716:18;52737:26;;;:17;:26;;;;;;52654:51;;-1:-1:-1;52870:28:0;;;52866:328;;-1:-1:-1;;;;;52937:18:0;;52915:19;52937:18;;;:12;:18;;;;;;;;:34;;;;;;;;;52988:30;;;;;;:44;;;53105:30;;:17;:30;;;;;:43;;;52866:328;-1:-1:-1;53290:26:0;;;;:17;:26;;;;;;;;53283:33;;;-1:-1:-1;;;;;53334:18:0;;;;;:12;:18;;;;;:34;;;;;;;53327:41;52388:988::o;53671:1079::-;53949:10;:17;53924:22;;53949:21;;53969:1;;53949:21;:::i;:::-;53981:18;54002:24;;;:15;:24;;;;;;54375:10;:26;;53924:46;;-1:-1:-1;54002:24:0;;53924:46;;54375:26;;;;;;:::i;:::-;;;;;;;;;54353:48;;54439:11;54414:10;54425;54414:22;;;;;;;;:::i;:::-;;;;;;;;;;;;:36;;;;54519:28;;;:15;:28;;;;;;;:41;;;54691:24;;;;;54684:31;54726:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;53742:1008;;;53671:1079;:::o;51175:221::-;51260:14;51277:20;51294:2;51277:16;:20::i;:::-;-1:-1:-1;;;;;51308:16:0;;;;;;;:12;:16;;;;;;;;:24;;;;;;;;:34;;;51353:26;;;:17;:26;;;;;;:35;;;;-1:-1:-1;51175:221:0:o;40861:439::-;-1:-1:-1;;;;;40941:16:0;;40933:61;;;;-1:-1:-1;;;40933:61:0;;17536:2:1;40933:61:0;;;17518:21:1;;;17555:18;;;17548:30;17614:34;17594:18;;;17587:62;17666:18;;40933:61:0;17334:356:1;40933:61:0;39034:4;39058:16;;;:7;:16;;;;;;-1:-1:-1;;;;;39058:16:0;:30;41005:58;;;;-1:-1:-1;;;41005:58:0;;14466:2:1;41005:58:0;;;14448:21:1;14505:2;14485:18;;;14478:30;14544;14524:18;;;14517:58;14592:18;;41005:58:0;14264:352:1;41005:58:0;41076:45;41105:1;41109:2;41113:7;41076:20;:45::i;:::-;-1:-1:-1;;;;;41134:13:0;;;;;;:9;:13;;;;;:18;;41151:1;;41134:13;:18;;41151:1;;41134:18;:::i;:::-;;;;-1:-1:-1;;41163:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;41163:21:0;-1:-1:-1;;;;;41163:21:0;;;;;;;;41202:33;;41163:16;;;41202:33;;41163:16;;41202:33;62223:21:::1;62152:98:::0;:::o;8167:149::-;8230:7;8261:1;8257;:5;:51;;8392:13;8486:15;;;8522:4;8515:15;;;8569:4;8553:21;;8257:51;;;-1:-1:-1;8392:13:0;8486:15;;;8522:4;8515:15;8569:4;8553:21;;;8167:149::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:406:1;78:5;112:18;104:6;101:30;98:56;;;134:18;;:::i;:::-;172:57;217:2;196:15;;-1:-1:-1;;192:29:1;223:4;188:40;172:57;:::i;:::-;163:66;;252:6;245:5;238:21;292:3;283:6;278:3;274:16;271:25;268:45;;;309:1;306;299:12;268:45;358:6;353:3;346:4;339:5;335:16;322:43;412:1;405:4;396:6;389:5;385:18;381:29;374:40;14:406;;;;;:::o;425:173::-;493:20;;-1:-1:-1;;;;;542:31:1;;532:42;;522:70;;588:1;585;578:12;522:70;425:173;;;:::o;603:367::-;666:8;676:6;730:3;723:4;715:6;711:17;707:27;697:55;;748:1;745;738:12;697:55;-1:-1:-1;771:20:1;;814:18;803:30;;800:50;;;846:1;843;836:12;800:50;883:4;875:6;871:17;859:29;;943:3;936:4;926:6;923:1;919:14;911:6;907:27;903:38;900:47;897:67;;;960:1;957;950:12;897:67;603:367;;;;;:::o;975:160::-;1040:20;;1096:13;;1089:21;1079:32;;1069:60;;1125:1;1122;1115:12;1140:186;1199:6;1252:2;1240:9;1231:7;1227:23;1223:32;1220:52;;;1268:1;1265;1258:12;1220:52;1291:29;1310:9;1291:29;:::i;1331:260::-;1399:6;1407;1460:2;1448:9;1439:7;1435:23;1431:32;1428:52;;;1476:1;1473;1466:12;1428:52;1499:29;1518:9;1499:29;:::i;:::-;1489:39;;1547:38;1581:2;1570:9;1566:18;1547:38;:::i;:::-;1537:48;;1331:260;;;;;:::o;1596:328::-;1673:6;1681;1689;1742:2;1730:9;1721:7;1717:23;1713:32;1710:52;;;1758:1;1755;1748:12;1710:52;1781:29;1800:9;1781:29;:::i;:::-;1771:39;;1829:38;1863:2;1852:9;1848:18;1829:38;:::i;:::-;1819:48;;1914:2;1903:9;1899:18;1886:32;1876:42;;1596:328;;;;;:::o;1929:666::-;2024:6;2032;2040;2048;2101:3;2089:9;2080:7;2076:23;2072:33;2069:53;;;2118:1;2115;2108:12;2069:53;2141:29;2160:9;2141:29;:::i;:::-;2131:39;;2189:38;2223:2;2212:9;2208:18;2189:38;:::i;:::-;2179:48;;2274:2;2263:9;2259:18;2246:32;2236:42;;2329:2;2318:9;2314:18;2301:32;2356:18;2348:6;2345:30;2342:50;;;2388:1;2385;2378:12;2342:50;2411:22;;2464:4;2456:13;;2452:27;-1:-1:-1;2442:55:1;;2493:1;2490;2483:12;2442:55;2516:73;2581:7;2576:2;2563:16;2558:2;2554;2550:11;2516:73;:::i;:::-;2506:83;;;1929:666;;;;;;;:::o;2600:254::-;2665:6;2673;2726:2;2714:9;2705:7;2701:23;2697:32;2694:52;;;2742:1;2739;2732:12;2694:52;2765:29;2784:9;2765:29;:::i;:::-;2755:39;;2813:35;2844:2;2833:9;2829:18;2813:35;:::i;2859:254::-;2927:6;2935;2988:2;2976:9;2967:7;2963:23;2959:32;2956:52;;;3004:1;3001;2994:12;2956:52;3027:29;3046:9;3027:29;:::i;:::-;3017:39;3103:2;3088:18;;;;3075:32;;-1:-1:-1;;;2859:254:1:o;3118:437::-;3204:6;3212;3265:2;3253:9;3244:7;3240:23;3236:32;3233:52;;;3281:1;3278;3271:12;3233:52;3321:9;3308:23;3354:18;3346:6;3343:30;3340:50;;;3386:1;3383;3376:12;3340:50;3425:70;3487:7;3478:6;3467:9;3463:22;3425:70;:::i;:::-;3514:8;;3399:96;;-1:-1:-1;3118:437:1;-1:-1:-1;;;;3118:437:1:o;3560:957::-;3644:6;3675:2;3718;3706:9;3697:7;3693:23;3689:32;3686:52;;;3734:1;3731;3724:12;3686:52;3774:9;3761:23;3803:18;3844:2;3836:6;3833:14;3830:34;;;3860:1;3857;3850:12;3830:34;3898:6;3887:9;3883:22;3873:32;;3943:7;3936:4;3932:2;3928:13;3924:27;3914:55;;3965:1;3962;3955:12;3914:55;4001:2;3988:16;4023:2;4019;4016:10;4013:36;;;4029:18;;:::i;:::-;4075:2;4072:1;4068:10;4058:20;;4098:28;4122:2;4118;4114:11;4098:28;:::i;:::-;4160:15;;;4191:12;;;;4223:11;;;4253;;;4249:20;;4246:33;-1:-1:-1;4243:53:1;;;4292:1;4289;4282:12;4243:53;4314:1;4305:10;;4324:163;4338:2;4335:1;4332:9;4324:163;;;4395:17;;4383:30;;4356:1;4349:9;;;;;4433:12;;;;4465;;4324:163;;;-1:-1:-1;4506:5:1;3560:957;-1:-1:-1;;;;;;;;3560:957:1:o;4522:180::-;4578:6;4631:2;4619:9;4610:7;4606:23;4602:32;4599:52;;;4647:1;4644;4637:12;4599:52;4670:26;4686:9;4670:26;:::i;4707:245::-;4765:6;4818:2;4806:9;4797:7;4793:23;4789:32;4786:52;;;4834:1;4831;4824:12;4786:52;4873:9;4860:23;4892:30;4916:5;4892:30;:::i;4957:249::-;5026:6;5079:2;5067:9;5058:7;5054:23;5050:32;5047:52;;;5095:1;5092;5085:12;5047:52;5127:9;5121:16;5146:30;5170:5;5146:30;:::i;5211:450::-;5280:6;5333:2;5321:9;5312:7;5308:23;5304:32;5301:52;;;5349:1;5346;5339:12;5301:52;5389:9;5376:23;5422:18;5414:6;5411:30;5408:50;;;5454:1;5451;5444:12;5408:50;5477:22;;5530:4;5522:13;;5518:27;-1:-1:-1;5508:55:1;;5559:1;5556;5549:12;5508:55;5582:73;5647:7;5642:2;5629:16;5624:2;5620;5616:11;5582:73;:::i;5666:180::-;5725:6;5778:2;5766:9;5757:7;5753:23;5749:32;5746:52;;;5794:1;5791;5784:12;5746:52;-1:-1:-1;5817:23:1;;5666:180;-1:-1:-1;5666:180:1:o;5851:505::-;5946:6;5954;5962;6015:2;6003:9;5994:7;5990:23;5986:32;5983:52;;;6031:1;6028;6021:12;5983:52;6067:9;6054:23;6044:33;;6128:2;6117:9;6113:18;6100:32;6155:18;6147:6;6144:30;6141:50;;;6187:1;6184;6177:12;6141:50;6226:70;6288:7;6279:6;6268:9;6264:22;6226:70;:::i;:::-;5851:505;;6315:8;;-1:-1:-1;6200:96:1;;-1:-1:-1;;;;5851:505:1:o;6361:257::-;6402:3;6440:5;6434:12;6467:6;6462:3;6455:19;6483:63;6539:6;6532:4;6527:3;6523:14;6516:4;6509:5;6505:16;6483:63;:::i;:::-;6600:2;6579:15;-1:-1:-1;;6575:29:1;6566:39;;;;6607:4;6562:50;;6361:257;-1:-1:-1;;6361:257:1:o;6857:1546::-;7081:3;7119:6;7113:13;7145:4;7158:51;7202:6;7197:3;7192:2;7184:6;7180:15;7158:51;:::i;:::-;7272:13;;7231:16;;;;7294:55;7272:13;7231:16;7316:15;;;7294:55;:::i;:::-;7438:13;;7371:20;;;7411:1;;7498;7520:18;;;;7573;;;;7600:93;;7678:4;7668:8;7664:19;7652:31;;7600:93;7741:2;7731:8;7728:16;7708:18;7705:40;7702:167;;;-1:-1:-1;;;7768:33:1;;7824:4;7821:1;7814:15;7854:4;7775:3;7842:17;7702:167;7885:18;7912:110;;;;8036:1;8031:347;;;;7878:500;;7912:110;-1:-1:-1;;7947:24:1;;7933:39;;7992:20;;;;-1:-1:-1;7912:110:1;;8031:347;23459:1;23452:14;;;23496:4;23483:18;;8145:1;8159:169;8173:8;8170:1;8167:15;8159:169;;;8255:14;;8240:13;;;8233:37;8298:16;;;;8190:10;;8159:169;;;8163:3;;8359:8;8352:5;8348:20;8341:27;;7878:500;-1:-1:-1;8394:3:1;;6857:1546;-1:-1:-1;;;;;;;;;;;6857:1546:1:o;8408:738::-;8668:6;8663:3;8656:19;8638:3;8694:2;8726:6;8721:2;8716:3;8712:12;8705:28;8764:2;8759:3;8755:12;8796:6;8790:13;8845:6;8842:1;8835:17;8888:2;8885:1;8875:16;8909:1;8919:200;8933:6;8930:1;8927:13;8919:200;;;9000:13;;-1:-1:-1;;;;;8996:39:1;8982:54;;9058:14;;;;9032:1;9095:14;;;;8948:9;8919:200;;;-1:-1:-1;9135:5:1;;8408:738;-1:-1:-1;;;;;;;;8408:738:1:o;9870:488::-;-1:-1:-1;;;;;10139:15:1;;;10121:34;;10191:15;;10186:2;10171:18;;10164:43;10238:2;10223:18;;10216:34;;;10286:3;10281:2;10266:18;;10259:31;;;10064:4;;10307:45;;10332:19;;10324:6;10307:45;:::i;:::-;10299:53;9870:488;-1:-1:-1;;;;;;9870:488:1:o;10363:674::-;10550:2;10602:21;;;10672:13;;10575:18;;;10694:22;;;10521:4;;10550:2;10773:15;;;;10747:2;10732:18;;;10521:4;10816:195;10830:6;10827:1;10824:13;10816:195;;;10895:13;;-1:-1:-1;;;;;10891:39:1;10879:52;;10986:15;;;;10951:12;;;;10927:1;10845:9;10816:195;;;-1:-1:-1;11028:3:1;;10363:674;-1:-1:-1;;;;;;10363:674:1:o;11042:632::-;11213:2;11265:21;;;11335:13;;11238:18;;;11357:22;;;11184:4;;11213:2;11436:15;;;;11410:2;11395:18;;;11184:4;11479:169;11493:6;11490:1;11487:13;11479:169;;;11554:13;;11542:26;;11623:15;;;;11588:12;;;;11515:1;11508:9;11479:169;;12053:219;12202:2;12191:9;12184:21;12165:4;12222:44;12262:2;12251:9;12247:18;12239:6;12222:44;:::i;13032:414::-;13234:2;13216:21;;;13273:2;13253:18;;;13246:30;13312:34;13307:2;13292:18;;13285:62;-1:-1:-1;;;13378:2:1;13363:18;;13356:48;13436:3;13421:19;;13032:414::o;21792:410::-;21994:2;21976:21;;;22033:2;22013:18;;;22006:30;22072:34;22067:2;22052:18;;22045:62;-1:-1:-1;;;22138:2:1;22123:18;;22116:44;22192:3;22177:19;;21792:410::o;23087:275::-;23158:2;23152:9;23223:2;23204:13;;-1:-1:-1;;23200:27:1;23188:40;;23258:18;23243:34;;23279:22;;;23240:62;23237:88;;;23305:18;;:::i;:::-;23341:2;23334:22;23087:275;;-1:-1:-1;23087:275:1:o;23512:128::-;23552:3;23583:1;23579:6;23576:1;23573:13;23570:39;;;23589:18;;:::i;:::-;-1:-1:-1;23625:9:1;;23512:128::o;23645:120::-;23685:1;23711;23701:35;;23716:18;;:::i;:::-;-1:-1:-1;23750:9:1;;23645:120::o;23770:168::-;23810:7;23876:1;23872;23868:6;23864:14;23861:1;23858:21;23853:1;23846:9;23839:17;23835:45;23832:71;;;23883:18;;:::i;:::-;-1:-1:-1;23923:9:1;;23770:168::o;23943:125::-;23983:4;24011:1;24008;24005:8;24002:34;;;24016:18;;:::i;:::-;-1:-1:-1;24053:9:1;;23943:125::o;24073:258::-;24145:1;24155:113;24169:6;24166:1;24163:13;24155:113;;;24245:11;;;24239:18;24226:11;;;24219:39;24191:2;24184:10;24155:113;;;24286:6;24283:1;24280:13;24277:48;;;-1:-1:-1;;24321:1:1;24303:16;;24296:27;24073:258::o;24336:380::-;24415:1;24411:12;;;;24458;;;24479:61;;24533:4;24525:6;24521:17;24511:27;;24479:61;24586:2;24578:6;24575:14;24555:18;24552:38;24549:161;;;24632:10;24627:3;24623:20;24620:1;24613:31;24667:4;24664:1;24657:15;24695:4;24692:1;24685:15;24721:135;24760:3;-1:-1:-1;;24781:17:1;;24778:43;;;24801:18;;:::i;:::-;-1:-1:-1;24848:1:1;24837:13;;24721:135::o;24861:112::-;24893:1;24919;24909:35;;24924:18;;:::i;:::-;-1:-1:-1;24958:9:1;;24861:112::o;24978:127::-;25039:10;25034:3;25030:20;25027:1;25020:31;25070:4;25067:1;25060:15;25094:4;25091:1;25084:15;25110:127;25171:10;25166:3;25162:20;25159:1;25152:31;25202:4;25199:1;25192:15;25226:4;25223:1;25216:15;25242:127;25303:10;25298:3;25294:20;25291:1;25284:31;25334:4;25331:1;25324:15;25358:4;25355:1;25348:15;25374:127;25435:10;25430:3;25426:20;25423:1;25416:31;25466:4;25463:1;25456:15;25490:4;25487:1;25480:15;25506:127;25567:10;25562:3;25558:20;25555:1;25548:31;25598:4;25595:1;25588:15;25622:4;25619:1;25612:15;25638:131;-1:-1:-1;;;;;;25712:32:1;;25702:43;;25692:71;;25759:1;25756;25749:12
Swarm Source
ipfs://85e7e2488b400009d9b399ec05bc149874e03aad26a5202f5466c9c6f5f7828a
Loading...
Loading
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 34 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
CRONOS | 100.00% | $0.090201 | 2,147.3577 | $193.69 |
Loading...
Loading
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.