Feature Tip: Add private address tag to any address under My Name Tag !
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
HODLeR_XRP_Meta
Compiler Version
v0.8.15+commit.e14f2714
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-09-23 */ // SPDX-License-Identifier: MIT // File: @openzeppelin/contracts/security/ReentrancyGuard.sol // OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol) pragma solidity ^0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } // File: @openzeppelin/contracts/utils/Counters.sol // OpenZeppelin Contracts v4.4.1 (utils/Counters.sol) pragma solidity ^0.8.0; /** * @title Counters * @author Matt Condon (@shrugs) * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number * of elements in a mapping, issuing ERC721 ids, or counting request ids. * * Include with `using Counters for Counters.Counter;` */ library Counters { struct Counter { // This variable should never be directly accessed by users of the library: interactions must be restricted to // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add // this feature: see https://github.com/ethereum/solidity/issues/4637 uint256 _value; // default: 0 } function current(Counter storage counter) internal view returns (uint256) { return counter._value; } function increment(Counter storage counter) internal { unchecked { counter._value += 1; } } function decrement(Counter storage counter) internal { uint256 value = counter._value; require(value > 0, "Counter: decrement overflow"); unchecked { counter._value = value - 1; } } function reset(Counter storage counter) internal { counter._value = 0; } } // File: @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/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/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/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol // OpenZeppelin Contracts (last updated v4.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/ERC721Burnable.sol // OpenZeppelin Contracts (last updated v4.7.0) (token/ERC721/extensions/ERC721Burnable.sol) pragma solidity ^0.8.0; /** * @title ERC721 Burnable Token * @dev ERC721 Token that can be burned (destroyed). */ abstract contract ERC721Burnable is Context, ERC721 { /** * @dev Burns `tokenId`. See {ERC721-_burn}. * * Requirements: * * - The caller must own `tokenId` or be an approved operator. */ function burn(uint256 tokenId) public virtual { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: caller is not token owner nor approved"); _burn(tokenId); } } // File: contracts/Burn.sol pragma solidity >=0.8.9 <0.9.0; interface MAIN{ function burnMainNFT( uint256 _tokenId) external; } contract HODLeR_XRP_Meta is ERC721, Ownable, ReentrancyGuard { using Strings for uint256; using Counters for Counters.Counter; Counters.Counter private supply; bytes32 public merkleRoot; mapping(address => bool) public whitelistClaimed; string public uriPrefix = ""; string public uriSuffix = ".json"; string public hiddenMetadataUri; address public mainContract; uint256 public maxSupply; bool public paused = false; bool public revealed = false; constructor( string memory _tokenName, string memory _tokenSymbol, uint256 _maxSupply, string memory _hiddenMetadataUri, address _mainContract ) ERC721(_tokenName, _tokenSymbol) { maxSupply = _maxSupply; setHiddenMetadataUri(_hiddenMetadataUri); mainContract = _mainContract; } function totalSupply() public view returns (uint256) { return supply.current(); } function burnNFT(uint256 tokenId) external payable { require(!paused, "Burner contract is paused!"); //SetApprovalForAll between this contract and main contract if(IERC721(mainContract).ownerOf(tokenId) == msg.sender ){ MAIN(mainContract).burnMainNFT(tokenId); _mintLoop(msg.sender, 1); } else { revert("Not the owner of NFT"); } } function batchBurnNFTs( uint256[] memory tokenIds) public { require(!paused, "Burner contract is paused!"); //SetApprovalForAll between this contract and main contract for(uint256 i = 0; i < tokenIds.length; i++){ if(IERC721(mainContract).ownerOf(tokenIds[i]) == msg.sender ){ MAIN(mainContract).burnMainNFT(tokenIds[i]); _mintLoop(msg.sender, 1); } else { revert("Not the owner of NFT"); } } } function walletOfOwner(address _owner) public view returns (uint256[] memory) { uint256 ownerTokenCount = balanceOf(_owner); uint256[] memory ownedTokenIds = new uint256[](ownerTokenCount); uint256 currentTokenId = 1; uint256 ownedTokenIndex = 0; while (ownedTokenIndex < ownerTokenCount && currentTokenId <= maxSupply) { address currentTokenOwner = ownerOf(currentTokenId); if (currentTokenOwner == _owner) { ownedTokenIds[ownedTokenIndex] = currentTokenId; ownedTokenIndex++; } currentTokenId++; } return ownedTokenIds; } function tokenURI(uint256 _tokenId) public view virtual override returns (string memory) { require( _exists(_tokenId), "ERC721Metadata: URI query for nonexistent token" ); if (revealed == false) { return hiddenMetadataUri; } string memory currentBaseURI = _baseURI(); return bytes(currentBaseURI).length > 0 ? string(abi.encodePacked(currentBaseURI, _tokenId.toString(), uriSuffix)) : ""; } function setMainContract(address _mainContract) external onlyOwner { mainContract = _mainContract; } function setRevealed(bool _state) public onlyOwner { revealed = _state; } function setUriPrefix(string memory _uriPrefix) public onlyOwner { uriPrefix = _uriPrefix; } function setHiddenMetadataUri(string memory _hiddenMetadataUri) public onlyOwner{ hiddenMetadataUri = _hiddenMetadataUri; } function setUriSuffix(string memory _uriSuffix) public onlyOwner { uriSuffix = _uriSuffix; } function setPaused(bool _state) public onlyOwner { paused = _state; } function _mintLoop(address _receiver, uint256 _mintAmount) internal { for (uint256 i = 0; i < _mintAmount; i++) { supply.increment(); _safeMint(_receiver, supply.current()); } } function _baseURI() internal view virtual override returns (string memory) { return uriPrefix; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_tokenName","type":"string"},{"internalType":"string","name":"_tokenSymbol","type":"string"},{"internalType":"uint256","name":"_maxSupply","type":"uint256"},{"internalType":"string","name":"_hiddenMetadataUri","type":"string"},{"internalType":"address","name":"_mainContract","type":"address"}],"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":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":[{"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":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"batchBurnNFTs","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"burnNFT","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hiddenMetadataUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mainContract","outputs":[{"internalType":"address","name":"","type":"address"}],"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":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"_hiddenMetadataUri","type":"string"}],"name":"setHiddenMetadataUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_mainContract","type":"address"}],"name":"setMainContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setRevealed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uriPrefix","type":"string"}],"name":"setUriPrefix","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uriSuffix","type":"string"}],"name":"setUriSuffix","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uriPrefix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uriSuffix","outputs":[{"internalType":"string","name":"","type":"string"}],"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"}]
Contract Creation Code
60a060405260006080908152600b906200001a908262000276565b50604080518082019091526005815264173539b7b760d91b6020820152600c9062000046908262000276565b506010805461ffff191690553480156200005f57600080fd5b50604051620026f3380380620026f38339810160408190526200008291620003f9565b8484600062000092838262000276565b506001620000a1828262000276565b505050620000be620000b8620000fe60201b60201c565b62000102565b6001600755600f839055620000d38262000154565b600e80546001600160a01b0319166001600160a01b039290921691909117905550620004b892505050565b3390565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6200015e62000170565b600d6200016c828262000276565b5050565b6006546001600160a01b03163314620001cf5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640160405180910390fd5b565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620001fc57607f821691505b6020821081036200021d57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200027157600081815260208120601f850160051c810160208610156200024c5750805b601f850160051c820191505b818110156200026d5782815560010162000258565b5050505b505050565b81516001600160401b03811115620002925762000292620001d1565b620002aa81620002a38454620001e7565b8462000223565b602080601f831160018114620002e25760008415620002c95750858301515b600019600386901b1c1916600185901b1785556200026d565b600085815260208120601f198616915b828110156200031357888601518255948401946001909101908401620002f2565b5085821015620003325787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600082601f8301126200035457600080fd5b81516001600160401b0380821115620003715762000371620001d1565b604051601f8301601f19908116603f011681019082821181831017156200039c576200039c620001d1565b81604052838152602092508683858801011115620003b957600080fd5b600091505b83821015620003dd5785820183015181830184015290820190620003be565b83821115620003ef5760008385830101525b9695505050505050565b600080600080600060a086880312156200041257600080fd5b85516001600160401b03808211156200042a57600080fd5b6200043889838a0162000342565b965060208801519150808211156200044f57600080fd5b6200045d89838a0162000342565b95506040880151945060608801519150808211156200047b57600080fd5b506200048a8882890162000342565b608088015190935090506001600160a01b0381168114620004aa57600080fd5b809150509295509295909350565b61222b80620004c86000396000f3fe6080604052600436106102045760003560e01c806362b99ad411610118578063b88d4fde116100a0578063da009c2e1161006f578063da009c2e146105a9578063db4bec44146105c9578063e0a80853146105f9578063e985e9c514610619578063f2fde38b1461066257600080fd5b8063b88d4fde14610533578063c87b56dd14610553578063d270e7ab14610573578063d5abeb011461059357600080fd5b80637ec4a659116100e75780637ec4a659146104ab5780638da5cb5b146104cb57806395d89b41146104e9578063a22cb465146104fe578063a45ba8e71461051e57600080fd5b806362b99ad4146104415780636352211e1461045657806370a0823114610476578063715018a61461049657600080fd5b80632890e0d71161019b578063438b63001161016a578063438b6300146103a65780634fdd43cb146103d357806351830227146103f35780635503a0e8146104125780635c975abb1461042757600080fd5b80632890e0d71461033d5780632eb4a7ab146103505780633ded33bc1461036657806342842e0e1461038657600080fd5b806316ba10e0116101d757806316ba10e0146102ba57806316c38b3c146102da57806318160ddd146102fa57806323b872dd1461031d57600080fd5b806301ffc9a71461020957806306fdde031461023e578063081812fc14610260578063095ea7b314610298575b600080fd5b34801561021557600080fd5b50610229610224366004611a14565b610682565b60405190151581526020015b60405180910390f35b34801561024a57600080fd5b506102536106d4565b6040516102359190611a89565b34801561026c57600080fd5b5061028061027b366004611a9c565b610766565b6040516001600160a01b039091168152602001610235565b3480156102a457600080fd5b506102b86102b3366004611aca565b61078d565b005b3480156102c657600080fd5b506102b86102d5366004611b95565b6108a7565b3480156102e657600080fd5b506102b86102f5366004611bf3565b6108bf565b34801561030657600080fd5b5061030f6108da565b604051908152602001610235565b34801561032957600080fd5b506102b8610338366004611c0e565b6108ea565b6102b861034b366004611a9c565b61091b565b34801561035c57600080fd5b5061030f60095481565b34801561037257600080fd5b506102b8610381366004611c4f565b610a94565b34801561039257600080fd5b506102b86103a1366004611c0e565b610abe565b3480156103b257600080fd5b506103c66103c1366004611c4f565b610ad9565b6040516102359190611c6c565b3480156103df57600080fd5b506102b86103ee366004611b95565b610bb9565b3480156103ff57600080fd5b5060105461022990610100900460ff1681565b34801561041e57600080fd5b50610253610bcd565b34801561043357600080fd5b506010546102299060ff1681565b34801561044d57600080fd5b50610253610c5b565b34801561046257600080fd5b50610280610471366004611a9c565b610c68565b34801561048257600080fd5b5061030f610491366004611c4f565b610cc8565b3480156104a257600080fd5b506102b8610d4e565b3480156104b757600080fd5b506102b86104c6366004611b95565b610d62565b3480156104d757600080fd5b506006546001600160a01b0316610280565b3480156104f557600080fd5b50610253610d76565b34801561050a57600080fd5b506102b8610519366004611cb0565b610d85565b34801561052a57600080fd5b50610253610d90565b34801561053f57600080fd5b506102b861054e366004611ce5565b610d9d565b34801561055f57600080fd5b5061025361056e366004611a9c565b610dd5565b34801561057f57600080fd5b50600e54610280906001600160a01b031681565b34801561059f57600080fd5b5061030f600f5481565b3480156105b557600080fd5b506102b86105c4366004611d65565b610f59565b3480156105d557600080fd5b506102296105e4366004611c4f565b600a6020526000908152604090205460ff1681565b34801561060557600080fd5b506102b8610614366004611bf3565b6110f4565b34801561062557600080fd5b50610229610634366004611e0b565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b34801561066e57600080fd5b506102b861067d366004611c4f565b611116565b60006001600160e01b031982166380ac58cd60e01b14806106b357506001600160e01b03198216635b5e139f60e01b145b806106ce57506301ffc9a760e01b6001600160e01b03198316145b92915050565b6060600080546106e390611e44565b80601f016020809104026020016040519081016040528092919081815260200182805461070f90611e44565b801561075c5780601f106107315761010080835404028352916020019161075c565b820191906000526020600020905b81548152906001019060200180831161073f57829003601f168201915b5050505050905090565b60006107718261118c565b506000908152600460205260409020546001600160a01b031690565b600061079882610c68565b9050806001600160a01b0316836001600160a01b03160361080a5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084015b60405180910390fd5b336001600160a01b038216148061082657506108268133610634565b6108985760405162461bcd60e51b815260206004820152603e60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c00006064820152608401610801565b6108a283836111eb565b505050565b6108af611259565b600c6108bb8282611ecc565b5050565b6108c7611259565b6010805460ff1916911515919091179055565b60006108e560085490565b905090565b6108f433826112b3565b6109105760405162461bcd60e51b815260040161080190611f8c565b6108a2838383611332565b60105460ff161561096e5760405162461bcd60e51b815260206004820152601a60248201527f4275726e657220636f6e747261637420697320706175736564210000000000006044820152606401610801565b600e546040516331a9108f60e11b81526004810183905233916001600160a01b031690636352211e90602401602060405180830381865afa1580156109b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109db9190611fda565b6001600160a01b031603610a5557600e5460405163c396ce8960e01b8152600481018390526001600160a01b039091169063c396ce8990602401600060405180830381600087803b158015610a2f57600080fd5b505af1158015610a43573d6000803e3d6000fd5b50505050610a523360016114ce565b50565b60405162461bcd60e51b8152602060048201526014602482015273139bdd081d1a19481bdddb995c881bd98813919560621b6044820152606401610801565b610a9c611259565b600e80546001600160a01b0319166001600160a01b0392909216919091179055565b6108a283838360405180602001604052806000815250610d9d565b60606000610ae683610cc8565b905060008167ffffffffffffffff811115610b0357610b03611af6565b604051908082528060200260200182016040528015610b2c578160200160208202803683370190505b509050600160005b8381108015610b455750600f548211155b15610baf576000610b5583610c68565b9050866001600160a01b0316816001600160a01b031603610b9c5782848381518110610b8357610b83611ff7565b602090810291909101015281610b9881612023565b9250505b82610ba681612023565b93505050610b34565b5090949350505050565b610bc1611259565b600d6108bb8282611ecc565b600c8054610bda90611e44565b80601f0160208091040260200160405190810160405280929190818152602001828054610c0690611e44565b8015610c535780601f10610c2857610100808354040283529160200191610c53565b820191906000526020600020905b815481529060010190602001808311610c3657829003601f168201915b505050505081565b600b8054610bda90611e44565b6000818152600260205260408120546001600160a01b0316806106ce5760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610801565b60006001600160a01b038216610d325760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b6064820152608401610801565b506001600160a01b031660009081526003602052604090205490565b610d56611259565b610d60600061150b565b565b610d6a611259565b600b6108bb8282611ecc565b6060600180546106e390611e44565b6108bb33838361155d565b600d8054610bda90611e44565b610da733836112b3565b610dc35760405162461bcd60e51b815260040161080190611f8c565b610dcf8484848461162b565b50505050565b6000818152600260205260409020546060906001600160a01b0316610e545760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610801565b601054610100900460ff161515600003610efa57600d8054610e7590611e44565b80601f0160208091040260200160405190810160405280929190818152602001828054610ea190611e44565b8015610eee5780601f10610ec357610100808354040283529160200191610eee565b820191906000526020600020905b815481529060010190602001808311610ed157829003601f168201915b50505050509050919050565b6000610f0461165e565b90506000815111610f245760405180602001604052806000815250610f52565b80610f2e8461166d565b600c604051602001610f429392919061203c565b6040516020818303038152906040525b9392505050565b60105460ff1615610fac5760405162461bcd60e51b815260206004820152601a60248201527f4275726e657220636f6e747261637420697320706175736564210000000000006044820152606401610801565b60005b81518110156108bb57600e54825133916001600160a01b031690636352211e90859085908110610fe157610fe1611ff7565b60200260200101516040518263ffffffff1660e01b815260040161100791815260200190565b602060405180830381865afa158015611024573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110489190611fda565b6001600160a01b031603610a5557600e5482516001600160a01b039091169063c396ce899084908490811061107f5761107f611ff7565b60200260200101516040518263ffffffff1660e01b81526004016110a591815260200190565b600060405180830381600087803b1580156110bf57600080fd5b505af11580156110d3573d6000803e3d6000fd5b505050506110e23360016114ce565b806110ec81612023565b915050610faf565b6110fc611259565b601080549115156101000261ff0019909216919091179055565b61111e611259565b6001600160a01b0381166111835760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610801565b610a528161150b565b6000818152600260205260409020546001600160a01b0316610a525760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610801565b600081815260046020526040902080546001600160a01b0319166001600160a01b038416908117909155819061122082610c68565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6006546001600160a01b03163314610d605760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610801565b6000806112bf83610c68565b9050806001600160a01b0316846001600160a01b0316148061130657506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b8061132a5750836001600160a01b031661131f84610766565b6001600160a01b0316145b949350505050565b826001600160a01b031661134582610c68565b6001600160a01b0316146113a95760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b6064820152608401610801565b6001600160a01b03821661140b5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610801565b6114166000826111eb565b6001600160a01b038316600090815260036020526040812080546001929061143f9084906120dc565b90915550506001600160a01b038216600090815260036020526040812080546001929061146d9084906120f3565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b60005b818110156108a2576114e7600880546001019055565b6114f9836114f460085490565b61176e565b8061150381612023565b9150506114d1565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b816001600160a01b0316836001600160a01b0316036115be5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610801565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b611636848484611332565b61164284848484611788565b610dcf5760405162461bcd60e51b81526004016108019061210b565b6060600b80546106e390611e44565b6060816000036116945750506040805180820190915260018152600360fc1b602082015290565b8160005b81156116be57806116a881612023565b91506116b79050600a83612173565b9150611698565b60008167ffffffffffffffff8111156116d9576116d9611af6565b6040519080825280601f01601f191660200182016040528015611703576020820181803683370190505b5090505b841561132a576117186001836120dc565b9150611725600a86612187565b6117309060306120f3565b60f81b81838151811061174557611745611ff7565b60200101906001600160f81b031916908160001a905350611767600a86612173565b9450611707565b6108bb828260405180602001604052806000815250611889565b60006001600160a01b0384163b1561187e57604051630a85bd0160e11b81526001600160a01b0385169063150b7a02906117cc90339089908890889060040161219b565b6020604051808303816000875af1925050508015611807575060408051601f3d908101601f19168201909252611804918101906121d8565b60015b611864573d808015611835576040519150601f19603f3d011682016040523d82523d6000602084013e61183a565b606091505b50805160000361185c5760405162461bcd60e51b81526004016108019061210b565b805181602001fd5b6001600160e01b031916630a85bd0160e11b14905061132a565b506001949350505050565b61189383836118bc565b6118a06000848484611788565b6108a25760405162461bcd60e51b81526004016108019061210b565b6001600160a01b0382166119125760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610801565b6000818152600260205260409020546001600160a01b0316156119775760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610801565b6001600160a01b03821660009081526003602052604081208054600192906119a09084906120f3565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6001600160e01b031981168114610a5257600080fd5b600060208284031215611a2657600080fd5b8135610f52816119fe565b60005b83811015611a4c578181015183820152602001611a34565b83811115610dcf5750506000910152565b60008151808452611a75816020860160208601611a31565b601f01601f19169290920160200192915050565b602081526000610f526020830184611a5d565b600060208284031215611aae57600080fd5b5035919050565b6001600160a01b0381168114610a5257600080fd5b60008060408385031215611add57600080fd5b8235611ae881611ab5565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611b3557611b35611af6565b604052919050565b600067ffffffffffffffff831115611b5757611b57611af6565b611b6a601f8401601f1916602001611b0c565b9050828152838383011115611b7e57600080fd5b828260208301376000602084830101529392505050565b600060208284031215611ba757600080fd5b813567ffffffffffffffff811115611bbe57600080fd5b8201601f81018413611bcf57600080fd5b61132a84823560208401611b3d565b80358015158114611bee57600080fd5b919050565b600060208284031215611c0557600080fd5b610f5282611bde565b600080600060608486031215611c2357600080fd5b8335611c2e81611ab5565b92506020840135611c3e81611ab5565b929592945050506040919091013590565b600060208284031215611c6157600080fd5b8135610f5281611ab5565b6020808252825182820181905260009190848201906040850190845b81811015611ca457835183529284019291840191600101611c88565b50909695505050505050565b60008060408385031215611cc357600080fd5b8235611cce81611ab5565b9150611cdc60208401611bde565b90509250929050565b60008060008060808587031215611cfb57600080fd5b8435611d0681611ab5565b93506020850135611d1681611ab5565b925060408501359150606085013567ffffffffffffffff811115611d3957600080fd5b8501601f81018713611d4a57600080fd5b611d5987823560208401611b3d565b91505092959194509250565b60006020808385031215611d7857600080fd5b823567ffffffffffffffff80821115611d9057600080fd5b818501915085601f830112611da457600080fd5b813581811115611db657611db6611af6565b8060051b9150611dc7848301611b0c565b8181529183018401918481019088841115611de157600080fd5b938501935b83851015611dff57843582529385019390850190611de6565b98975050505050505050565b60008060408385031215611e1e57600080fd5b8235611e2981611ab5565b91506020830135611e3981611ab5565b809150509250929050565b600181811c90821680611e5857607f821691505b602082108103611e7857634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156108a257600081815260208120601f850160051c81016020861015611ea55750805b601f850160051c820191505b81811015611ec457828155600101611eb1565b505050505050565b815167ffffffffffffffff811115611ee657611ee6611af6565b611efa81611ef48454611e44565b84611e7e565b602080601f831160018114611f2f5760008415611f175750858301515b600019600386901b1c1916600185901b178555611ec4565b600085815260208120601f198616915b82811015611f5e57888601518255948401946001909101908401611f3f565b5085821015611f7c5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6020808252602e908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526d1c881b9bdc88185c1c1c9bdd995960921b606082015260800190565b600060208284031215611fec57600080fd5b8151610f5281611ab5565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016120355761203561200d565b5060010190565b60008451602061204f8285838a01611a31565b8551918401916120628184848a01611a31565b855492019160009061207381611e44565b6001828116801561208b57600181146120a0576120cc565b60ff19841687528215158302870194506120cc565b896000528560002060005b848110156120c4578154898201529083019087016120ab565b505082870194505b50929a9950505050505050505050565b6000828210156120ee576120ee61200d565b500390565b600082198211156121065761210661200d565b500190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b634e487b7160e01b600052601260045260246000fd5b6000826121825761218261215d565b500490565b6000826121965761219661215d565b500690565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906121ce90830184611a5d565b9695505050505050565b6000602082840312156121ea57600080fd5b8151610f52816119fe56fea264697066735822122056247bf9c27c820b3b58ee5818d4649d9a2e51f620d2a2cccb7937b52e8fde3664736f6c634300080f003300000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000c800000000000000000000000000000000000000000000000000000000000001200000000000000000000000002c9ebb9b66b566c5490ef9150bd0bbefa7e80cec0000000000000000000000000000000000000000000000000000000000000010484f444cc4935220455448204d455441000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010484f444cc4935220455448204d455441000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x6080604052600436106102045760003560e01c806362b99ad411610118578063b88d4fde116100a0578063da009c2e1161006f578063da009c2e146105a9578063db4bec44146105c9578063e0a80853146105f9578063e985e9c514610619578063f2fde38b1461066257600080fd5b8063b88d4fde14610533578063c87b56dd14610553578063d270e7ab14610573578063d5abeb011461059357600080fd5b80637ec4a659116100e75780637ec4a659146104ab5780638da5cb5b146104cb57806395d89b41146104e9578063a22cb465146104fe578063a45ba8e71461051e57600080fd5b806362b99ad4146104415780636352211e1461045657806370a0823114610476578063715018a61461049657600080fd5b80632890e0d71161019b578063438b63001161016a578063438b6300146103a65780634fdd43cb146103d357806351830227146103f35780635503a0e8146104125780635c975abb1461042757600080fd5b80632890e0d71461033d5780632eb4a7ab146103505780633ded33bc1461036657806342842e0e1461038657600080fd5b806316ba10e0116101d757806316ba10e0146102ba57806316c38b3c146102da57806318160ddd146102fa57806323b872dd1461031d57600080fd5b806301ffc9a71461020957806306fdde031461023e578063081812fc14610260578063095ea7b314610298575b600080fd5b34801561021557600080fd5b50610229610224366004611a14565b610682565b60405190151581526020015b60405180910390f35b34801561024a57600080fd5b506102536106d4565b6040516102359190611a89565b34801561026c57600080fd5b5061028061027b366004611a9c565b610766565b6040516001600160a01b039091168152602001610235565b3480156102a457600080fd5b506102b86102b3366004611aca565b61078d565b005b3480156102c657600080fd5b506102b86102d5366004611b95565b6108a7565b3480156102e657600080fd5b506102b86102f5366004611bf3565b6108bf565b34801561030657600080fd5b5061030f6108da565b604051908152602001610235565b34801561032957600080fd5b506102b8610338366004611c0e565b6108ea565b6102b861034b366004611a9c565b61091b565b34801561035c57600080fd5b5061030f60095481565b34801561037257600080fd5b506102b8610381366004611c4f565b610a94565b34801561039257600080fd5b506102b86103a1366004611c0e565b610abe565b3480156103b257600080fd5b506103c66103c1366004611c4f565b610ad9565b6040516102359190611c6c565b3480156103df57600080fd5b506102b86103ee366004611b95565b610bb9565b3480156103ff57600080fd5b5060105461022990610100900460ff1681565b34801561041e57600080fd5b50610253610bcd565b34801561043357600080fd5b506010546102299060ff1681565b34801561044d57600080fd5b50610253610c5b565b34801561046257600080fd5b50610280610471366004611a9c565b610c68565b34801561048257600080fd5b5061030f610491366004611c4f565b610cc8565b3480156104a257600080fd5b506102b8610d4e565b3480156104b757600080fd5b506102b86104c6366004611b95565b610d62565b3480156104d757600080fd5b506006546001600160a01b0316610280565b3480156104f557600080fd5b50610253610d76565b34801561050a57600080fd5b506102b8610519366004611cb0565b610d85565b34801561052a57600080fd5b50610253610d90565b34801561053f57600080fd5b506102b861054e366004611ce5565b610d9d565b34801561055f57600080fd5b5061025361056e366004611a9c565b610dd5565b34801561057f57600080fd5b50600e54610280906001600160a01b031681565b34801561059f57600080fd5b5061030f600f5481565b3480156105b557600080fd5b506102b86105c4366004611d65565b610f59565b3480156105d557600080fd5b506102296105e4366004611c4f565b600a6020526000908152604090205460ff1681565b34801561060557600080fd5b506102b8610614366004611bf3565b6110f4565b34801561062557600080fd5b50610229610634366004611e0b565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b34801561066e57600080fd5b506102b861067d366004611c4f565b611116565b60006001600160e01b031982166380ac58cd60e01b14806106b357506001600160e01b03198216635b5e139f60e01b145b806106ce57506301ffc9a760e01b6001600160e01b03198316145b92915050565b6060600080546106e390611e44565b80601f016020809104026020016040519081016040528092919081815260200182805461070f90611e44565b801561075c5780601f106107315761010080835404028352916020019161075c565b820191906000526020600020905b81548152906001019060200180831161073f57829003601f168201915b5050505050905090565b60006107718261118c565b506000908152600460205260409020546001600160a01b031690565b600061079882610c68565b9050806001600160a01b0316836001600160a01b03160361080a5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084015b60405180910390fd5b336001600160a01b038216148061082657506108268133610634565b6108985760405162461bcd60e51b815260206004820152603e60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c00006064820152608401610801565b6108a283836111eb565b505050565b6108af611259565b600c6108bb8282611ecc565b5050565b6108c7611259565b6010805460ff1916911515919091179055565b60006108e560085490565b905090565b6108f433826112b3565b6109105760405162461bcd60e51b815260040161080190611f8c565b6108a2838383611332565b60105460ff161561096e5760405162461bcd60e51b815260206004820152601a60248201527f4275726e657220636f6e747261637420697320706175736564210000000000006044820152606401610801565b600e546040516331a9108f60e11b81526004810183905233916001600160a01b031690636352211e90602401602060405180830381865afa1580156109b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109db9190611fda565b6001600160a01b031603610a5557600e5460405163c396ce8960e01b8152600481018390526001600160a01b039091169063c396ce8990602401600060405180830381600087803b158015610a2f57600080fd5b505af1158015610a43573d6000803e3d6000fd5b50505050610a523360016114ce565b50565b60405162461bcd60e51b8152602060048201526014602482015273139bdd081d1a19481bdddb995c881bd98813919560621b6044820152606401610801565b610a9c611259565b600e80546001600160a01b0319166001600160a01b0392909216919091179055565b6108a283838360405180602001604052806000815250610d9d565b60606000610ae683610cc8565b905060008167ffffffffffffffff811115610b0357610b03611af6565b604051908082528060200260200182016040528015610b2c578160200160208202803683370190505b509050600160005b8381108015610b455750600f548211155b15610baf576000610b5583610c68565b9050866001600160a01b0316816001600160a01b031603610b9c5782848381518110610b8357610b83611ff7565b602090810291909101015281610b9881612023565b9250505b82610ba681612023565b93505050610b34565b5090949350505050565b610bc1611259565b600d6108bb8282611ecc565b600c8054610bda90611e44565b80601f0160208091040260200160405190810160405280929190818152602001828054610c0690611e44565b8015610c535780601f10610c2857610100808354040283529160200191610c53565b820191906000526020600020905b815481529060010190602001808311610c3657829003601f168201915b505050505081565b600b8054610bda90611e44565b6000818152600260205260408120546001600160a01b0316806106ce5760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610801565b60006001600160a01b038216610d325760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b6064820152608401610801565b506001600160a01b031660009081526003602052604090205490565b610d56611259565b610d60600061150b565b565b610d6a611259565b600b6108bb8282611ecc565b6060600180546106e390611e44565b6108bb33838361155d565b600d8054610bda90611e44565b610da733836112b3565b610dc35760405162461bcd60e51b815260040161080190611f8c565b610dcf8484848461162b565b50505050565b6000818152600260205260409020546060906001600160a01b0316610e545760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610801565b601054610100900460ff161515600003610efa57600d8054610e7590611e44565b80601f0160208091040260200160405190810160405280929190818152602001828054610ea190611e44565b8015610eee5780601f10610ec357610100808354040283529160200191610eee565b820191906000526020600020905b815481529060010190602001808311610ed157829003601f168201915b50505050509050919050565b6000610f0461165e565b90506000815111610f245760405180602001604052806000815250610f52565b80610f2e8461166d565b600c604051602001610f429392919061203c565b6040516020818303038152906040525b9392505050565b60105460ff1615610fac5760405162461bcd60e51b815260206004820152601a60248201527f4275726e657220636f6e747261637420697320706175736564210000000000006044820152606401610801565b60005b81518110156108bb57600e54825133916001600160a01b031690636352211e90859085908110610fe157610fe1611ff7565b60200260200101516040518263ffffffff1660e01b815260040161100791815260200190565b602060405180830381865afa158015611024573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110489190611fda565b6001600160a01b031603610a5557600e5482516001600160a01b039091169063c396ce899084908490811061107f5761107f611ff7565b60200260200101516040518263ffffffff1660e01b81526004016110a591815260200190565b600060405180830381600087803b1580156110bf57600080fd5b505af11580156110d3573d6000803e3d6000fd5b505050506110e23360016114ce565b806110ec81612023565b915050610faf565b6110fc611259565b601080549115156101000261ff0019909216919091179055565b61111e611259565b6001600160a01b0381166111835760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610801565b610a528161150b565b6000818152600260205260409020546001600160a01b0316610a525760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610801565b600081815260046020526040902080546001600160a01b0319166001600160a01b038416908117909155819061122082610c68565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6006546001600160a01b03163314610d605760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610801565b6000806112bf83610c68565b9050806001600160a01b0316846001600160a01b0316148061130657506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b8061132a5750836001600160a01b031661131f84610766565b6001600160a01b0316145b949350505050565b826001600160a01b031661134582610c68565b6001600160a01b0316146113a95760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b6064820152608401610801565b6001600160a01b03821661140b5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610801565b6114166000826111eb565b6001600160a01b038316600090815260036020526040812080546001929061143f9084906120dc565b90915550506001600160a01b038216600090815260036020526040812080546001929061146d9084906120f3565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b60005b818110156108a2576114e7600880546001019055565b6114f9836114f460085490565b61176e565b8061150381612023565b9150506114d1565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b816001600160a01b0316836001600160a01b0316036115be5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610801565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b611636848484611332565b61164284848484611788565b610dcf5760405162461bcd60e51b81526004016108019061210b565b6060600b80546106e390611e44565b6060816000036116945750506040805180820190915260018152600360fc1b602082015290565b8160005b81156116be57806116a881612023565b91506116b79050600a83612173565b9150611698565b60008167ffffffffffffffff8111156116d9576116d9611af6565b6040519080825280601f01601f191660200182016040528015611703576020820181803683370190505b5090505b841561132a576117186001836120dc565b9150611725600a86612187565b6117309060306120f3565b60f81b81838151811061174557611745611ff7565b60200101906001600160f81b031916908160001a905350611767600a86612173565b9450611707565b6108bb828260405180602001604052806000815250611889565b60006001600160a01b0384163b1561187e57604051630a85bd0160e11b81526001600160a01b0385169063150b7a02906117cc90339089908890889060040161219b565b6020604051808303816000875af1925050508015611807575060408051601f3d908101601f19168201909252611804918101906121d8565b60015b611864573d808015611835576040519150601f19603f3d011682016040523d82523d6000602084013e61183a565b606091505b50805160000361185c5760405162461bcd60e51b81526004016108019061210b565b805181602001fd5b6001600160e01b031916630a85bd0160e11b14905061132a565b506001949350505050565b61189383836118bc565b6118a06000848484611788565b6108a25760405162461bcd60e51b81526004016108019061210b565b6001600160a01b0382166119125760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610801565b6000818152600260205260409020546001600160a01b0316156119775760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610801565b6001600160a01b03821660009081526003602052604081208054600192906119a09084906120f3565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6001600160e01b031981168114610a5257600080fd5b600060208284031215611a2657600080fd5b8135610f52816119fe565b60005b83811015611a4c578181015183820152602001611a34565b83811115610dcf5750506000910152565b60008151808452611a75816020860160208601611a31565b601f01601f19169290920160200192915050565b602081526000610f526020830184611a5d565b600060208284031215611aae57600080fd5b5035919050565b6001600160a01b0381168114610a5257600080fd5b60008060408385031215611add57600080fd5b8235611ae881611ab5565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611b3557611b35611af6565b604052919050565b600067ffffffffffffffff831115611b5757611b57611af6565b611b6a601f8401601f1916602001611b0c565b9050828152838383011115611b7e57600080fd5b828260208301376000602084830101529392505050565b600060208284031215611ba757600080fd5b813567ffffffffffffffff811115611bbe57600080fd5b8201601f81018413611bcf57600080fd5b61132a84823560208401611b3d565b80358015158114611bee57600080fd5b919050565b600060208284031215611c0557600080fd5b610f5282611bde565b600080600060608486031215611c2357600080fd5b8335611c2e81611ab5565b92506020840135611c3e81611ab5565b929592945050506040919091013590565b600060208284031215611c6157600080fd5b8135610f5281611ab5565b6020808252825182820181905260009190848201906040850190845b81811015611ca457835183529284019291840191600101611c88565b50909695505050505050565b60008060408385031215611cc357600080fd5b8235611cce81611ab5565b9150611cdc60208401611bde565b90509250929050565b60008060008060808587031215611cfb57600080fd5b8435611d0681611ab5565b93506020850135611d1681611ab5565b925060408501359150606085013567ffffffffffffffff811115611d3957600080fd5b8501601f81018713611d4a57600080fd5b611d5987823560208401611b3d565b91505092959194509250565b60006020808385031215611d7857600080fd5b823567ffffffffffffffff80821115611d9057600080fd5b818501915085601f830112611da457600080fd5b813581811115611db657611db6611af6565b8060051b9150611dc7848301611b0c565b8181529183018401918481019088841115611de157600080fd5b938501935b83851015611dff57843582529385019390850190611de6565b98975050505050505050565b60008060408385031215611e1e57600080fd5b8235611e2981611ab5565b91506020830135611e3981611ab5565b809150509250929050565b600181811c90821680611e5857607f821691505b602082108103611e7857634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156108a257600081815260208120601f850160051c81016020861015611ea55750805b601f850160051c820191505b81811015611ec457828155600101611eb1565b505050505050565b815167ffffffffffffffff811115611ee657611ee6611af6565b611efa81611ef48454611e44565b84611e7e565b602080601f831160018114611f2f5760008415611f175750858301515b600019600386901b1c1916600185901b178555611ec4565b600085815260208120601f198616915b82811015611f5e57888601518255948401946001909101908401611f3f565b5085821015611f7c5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6020808252602e908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526d1c881b9bdc88185c1c1c9bdd995960921b606082015260800190565b600060208284031215611fec57600080fd5b8151610f5281611ab5565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016120355761203561200d565b5060010190565b60008451602061204f8285838a01611a31565b8551918401916120628184848a01611a31565b855492019160009061207381611e44565b6001828116801561208b57600181146120a0576120cc565b60ff19841687528215158302870194506120cc565b896000528560002060005b848110156120c4578154898201529083019087016120ab565b505082870194505b50929a9950505050505050505050565b6000828210156120ee576120ee61200d565b500390565b600082198211156121065761210661200d565b500190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b634e487b7160e01b600052601260045260246000fd5b6000826121825761218261215d565b500490565b6000826121965761219661215d565b500690565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906121ce90830184611a5d565b9695505050505050565b6000602082840312156121ea57600080fd5b8151610f52816119fe56fea264697066735822122056247bf9c27c820b3b58ee5818d4649d9a2e51f620d2a2cccb7937b52e8fde3664736f6c634300080f0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000c800000000000000000000000000000000000000000000000000000000000001200000000000000000000000002c9ebb9b66b566c5490ef9150bd0bbefa7e80cec0000000000000000000000000000000000000000000000000000000000000010484f444cc4935220455448204d455441000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010484f444cc4935220455448204d455441000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _tokenName (string): HODLēR ETH META
Arg [1] : _tokenSymbol (string): HODLēR ETH META
Arg [2] : _maxSupply (uint256): 200
Arg [3] : _hiddenMetadataUri (string):
Arg [4] : _mainContract (address): 0x2C9EBB9B66B566c5490eF9150bD0bBeFa7e80Cec
-----Encoded View---------------
10 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000c8
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000120
Arg [4] : 0000000000000000000000002c9ebb9b66b566c5490ef9150bd0bbefa7e80cec
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000010
Arg [6] : 484f444cc4935220455448204d45544100000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000010
Arg [8] : 484f444cc4935220455448204d45544100000000000000000000000000000000
Arg [9] : 0000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
43123:3947:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28996:305;;;;;;;;;;-1:-1:-1;28996:305:0;;;;;:::i;:::-;;:::i;:::-;;;565:14:1;;558:22;540:41;;528:2;513:18;28996:305:0;;;;;;;;29923:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;31436:171::-;;;;;;;;;;-1:-1:-1;31436:171:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;1692:32:1;;;1674:51;;1662:2;1647:18;31436:171:0;1528:203:1;30953:417:0;;;;;;;;;;-1:-1:-1;30953:417:0;;;;;:::i;:::-;;:::i;:::-;;46562:100;;;;;;;;;;-1:-1:-1;46562:100:0;;;;;:::i;:::-;;:::i;46668:77::-;;;;;;;;;;-1:-1:-1;46668:77:0;;;;;:::i;:::-;;:::i;43955:89::-;;;;;;;;;;;;;:::i;:::-;;;3968:25:1;;;3956:2;3941:18;43955:89:0;3822:177:1;32136:336:0;;;;;;;;;;-1:-1:-1;32136:336:0;;;;;:::i;:::-;;:::i;44050:413::-;;;;;;:::i;:::-;;:::i;43301:25::-;;;;;;;;;;;;;;;;46110:114;;;;;;;;;;-1:-1:-1;46110:114:0;;;;;:::i;:::-;;:::i;32543:185::-;;;;;;;;;;-1:-1:-1;32543:185:0;;;;;:::i;:::-;;:::i;44969:635::-;;;;;;;;;;-1:-1:-1;44969:635:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;46423:133::-;;;;;;;;;;-1:-1:-1;46423:133:0;;;;;:::i;:::-;;:::i;43589:28::-;;;;;;;;;;-1:-1:-1;43589:28:0;;;;;;;;;;;43419:33;;;;;;;;;;;;;:::i;43558:26::-;;;;;;;;;;-1:-1:-1;43558:26:0;;;;;;;;43386:28;;;;;;;;;;;;;:::i;29634:222::-;;;;;;;;;;-1:-1:-1;29634:222:0;;;;;:::i;:::-;;:::i;29365:207::-;;;;;;;;;;-1:-1:-1;29365:207:0;;;;;:::i;:::-;;:::i;9532:103::-;;;;;;;;;;;;;:::i;46317:100::-;;;;;;;;;;-1:-1:-1;46317:100:0;;;;;:::i;:::-;;:::i;8884:87::-;;;;;;;;;;-1:-1:-1;8957:6:0;;-1:-1:-1;;;;;8957:6:0;8884:87;;30092:104;;;;;;;;;;;;;:::i;31679:155::-;;;;;;;;;;-1:-1:-1;31679:155:0;;;;;:::i;:::-;;:::i;43457:31::-;;;;;;;;;;;;;:::i;32799:323::-;;;;;;;;;;-1:-1:-1;32799:323:0;;;;;:::i;:::-;;:::i;45610:494::-;;;;;;;;;;-1:-1:-1;45610:494:0;;;;;:::i;:::-;;:::i;43493:27::-;;;;;;;;;;-1:-1:-1;43493:27:0;;;;-1:-1:-1;;;;;43493:27:0;;;43527:24;;;;;;;;;;;;;;;;44469:494;;;;;;;;;;-1:-1:-1;44469:494:0;;;;;:::i;:::-;;:::i;43331:48::-;;;;;;;;;;-1:-1:-1;43331:48:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;46230:81;;;;;;;;;;-1:-1:-1;46230:81:0;;;;;:::i;:::-;;:::i;31905:164::-;;;;;;;;;;-1:-1:-1;31905:164:0;;;;;:::i;:::-;-1:-1:-1;;;;;32026:25:0;;;32002:4;32026:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;31905:164;9790:201;;;;;;;;;;-1:-1:-1;9790:201:0;;;;;:::i;:::-;;:::i;28996:305::-;29098:4;-1:-1:-1;;;;;;29135:40:0;;-1:-1:-1;;;29135:40:0;;:105;;-1:-1:-1;;;;;;;29192:48:0;;-1:-1:-1;;;29192:48:0;29135:105;:158;;;-1:-1:-1;;;;;;;;;;21847:40:0;;;29257:36;29115:178;28996:305;-1:-1:-1;;28996:305:0:o;29923:100::-;29977:13;30010:5;30003:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29923:100;:::o;31436:171::-;31512:7;31532:23;31547:7;31532:14;:23::i;:::-;-1:-1:-1;31575:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;31575:24:0;;31436:171::o;30953:417::-;31034:13;31050:23;31065:7;31050:14;:23::i;:::-;31034:39;;31098:5;-1:-1:-1;;;;;31092:11:0;:2;-1:-1:-1;;;;;31092:11:0;;31084:57;;;;-1:-1:-1;;;31084:57:0;;8587:2:1;31084:57:0;;;8569:21:1;8626:2;8606:18;;;8599:30;8665:34;8645:18;;;8638:62;-1:-1:-1;;;8716:18:1;;;8709:31;8757:19;;31084:57:0;;;;;;;;;7515:10;-1:-1:-1;;;;;31176:21:0;;;;:62;;-1:-1:-1;31201:37:0;31218:5;7515:10;31905:164;:::i;31201:37::-;31154:174;;;;-1:-1:-1;;;31154:174:0;;8989:2:1;31154:174:0;;;8971:21:1;9028:2;9008:18;;;9001:30;9067:34;9047:18;;;9040:62;9138:32;9118:18;;;9111:60;9188:19;;31154:174:0;8787:426:1;31154:174:0;31341:21;31350:2;31354:7;31341:8;:21::i;:::-;31023:347;30953:417;;:::o;46562:100::-;8770:13;:11;:13::i;:::-;46634:9:::1;:22;46646:10:::0;46634:9;:22:::1;:::i;:::-;;46562:100:::0;:::o;46668:77::-;8770:13;:11;:13::i;:::-;46724:6:::1;:15:::0;;-1:-1:-1;;46724:15:0::1;::::0;::::1;;::::0;;;::::1;::::0;;46668:77::o;43955:89::-;43999:7;44022:16;:6;3758:14;;3666:114;44022:16;44015:23;;43955:89;:::o;32136:336::-;32331:41;7515:10;32364:7;32331:18;:41::i;:::-;32323:100;;;;-1:-1:-1;;;32323:100:0;;;;;;;:::i;:::-;32436:28;32446:4;32452:2;32456:7;32436:9;:28::i;44050:413::-;44121:6;;;;44120:7;44112:46;;;;-1:-1:-1;;;44112:46:0;;12039:2:1;44112:46:0;;;12021:21:1;12078:2;12058:18;;;12051:30;12117:28;12097:18;;;12090:56;12163:18;;44112:46:0;11837:350:1;44112:46:0;44245:12;;44237:38;;-1:-1:-1;;;44237:38:0;;;;;3968:25:1;;;44279:10:0;;-1:-1:-1;;;;;44245:12:0;;44237:29;;3941:18:1;;44237:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;44237:52:0;;44234:220;;44309:12;;44304:39;;-1:-1:-1;;;44304:39:0;;;;;3968:25:1;;;-1:-1:-1;;;;;44309:12:0;;;;44304:30;;3941:18:1;;44304:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44354:24;44364:10;44376:1;44354:9;:24::i;:::-;44050:413;:::o;44234:220::-;44414:30;;-1:-1:-1;;;44414:30:0;;12650:2:1;44414:30:0;;;12632:21:1;12689:2;12669:18;;;12662:30;-1:-1:-1;;;12708:18:1;;;12701:50;12768:18;;44414:30:0;12448:344:1;46110:114:0;8770:13;:11;:13::i;:::-;46188:12:::1;:28:::0;;-1:-1:-1;;;;;;46188:28:0::1;-1:-1:-1::0;;;;;46188:28:0;;;::::1;::::0;;;::::1;::::0;;46110:114::o;32543:185::-;32681:39;32698:4;32704:2;32708:7;32681:39;;;;;;;;;;;;:16;:39::i;44969:635::-;45044:16;45072:23;45098:17;45108:6;45098:9;:17::i;:::-;45072:43;;45122:30;45169:15;45155:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;45155:30:0;-1:-1:-1;45122:63:0;-1:-1:-1;45217:1:0;45192:22;45261:309;45286:15;45268;:33;:64;;;;;45323:9;;45305:14;:27;;45268:64;45261:309;;;45343:25;45371:23;45379:14;45371:7;:23::i;:::-;45343:51;;45430:6;-1:-1:-1;;;;;45409:27:0;:17;-1:-1:-1;;;;;45409:27:0;;45405:131;;45482:14;45449:13;45463:15;45449:30;;;;;;;;:::i;:::-;;;;;;;;;;:47;45509:17;;;;:::i;:::-;;;;45405:131;45546:16;;;;:::i;:::-;;;;45334:236;45261:309;;;-1:-1:-1;45585:13:0;;44969:635;-1:-1:-1;;;;44969:635:0:o;46423:133::-;8770:13;:11;:13::i;:::-;46512:17:::1;:38;46532:18:::0;46512:17;:38:::1;:::i;43419:33::-:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;43386:28::-;;;;;;;:::i;29634:222::-;29706:7;29742:16;;;:7;:16;;;;;;-1:-1:-1;;;;;29742:16:0;;29769:56;;;;-1:-1:-1;;;29769:56:0;;13403:2:1;29769:56:0;;;13385:21:1;13442:2;13422:18;;;13415:30;-1:-1:-1;;;13461:18:1;;;13454:54;13525:18;;29769:56:0;13201:348:1;29365:207:0;29437:7;-1:-1:-1;;;;;29465:19:0;;29457:73;;;;-1:-1:-1;;;29457:73:0;;13756:2:1;29457:73:0;;;13738:21:1;13795:2;13775:18;;;13768:30;13834:34;13814:18;;;13807:62;-1:-1:-1;;;13885:18:1;;;13878:39;13934:19;;29457:73:0;13554:405:1;29457:73:0;-1:-1:-1;;;;;;29548:16:0;;;;;:9;:16;;;;;;;29365:207::o;9532:103::-;8770:13;:11;:13::i;:::-;9597:30:::1;9624:1;9597:18;:30::i;:::-;9532:103::o:0;46317:100::-;8770:13;:11;:13::i;:::-;46389:9:::1;:22;46401:10:::0;46389:9;:22:::1;:::i;30092:104::-:0;30148:13;30181:7;30174:14;;;;;:::i;31679:155::-;31774:52;7515:10;31807:8;31817;31774:18;:52::i;43457:31::-;;;;;;;:::i;32799:323::-;32973:41;7515:10;33006:7;32973:18;:41::i;:::-;32965:100;;;;-1:-1:-1;;;32965:100:0;;;;;;;:::i;:::-;33076:38;33090:4;33096:2;33100:7;33109:4;33076:13;:38::i;:::-;32799:323;;;;:::o;45610:494::-;34694:4;34718:16;;;:7;:16;;;;;;45709:13;;-1:-1:-1;;;;;34718:16:0;45734:98;;;;-1:-1:-1;;;45734:98:0;;14166:2:1;45734:98:0;;;14148:21:1;14205:2;14185:18;;;14178:30;14244:34;14224:18;;;14217:62;-1:-1:-1;;;14295:18:1;;;14288:45;14350:19;;45734:98:0;13964:411:1;45734:98:0;45845:8;;;;;;;:17;;45857:5;45845:17;45841:64;;45880:17;45873:24;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45610:494;;;:::o;45841:64::-;45913:28;45944:10;:8;:10::i;:::-;45913:41;;45999:1;45974:14;45968:28;:32;:130;;;;;;;;;;;;;;;;;46036:14;46052:19;:8;:17;:19::i;:::-;46073:9;46019:64;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;45968:130;45961:137;45610:494;-1:-1:-1;;;45610:494:0:o;44469:::-;44543:6;;;;44542:7;44534:46;;;;-1:-1:-1;;;44534:46:0;;12039:2:1;44534:46:0;;;12021:21:1;12078:2;12058:18;;;12051:30;12117:28;12097:18;;;12090:56;12163:18;;44534:46:0;11837:350:1;44534:46:0;44656:9;44652:306;44675:8;:15;44671:1;:19;44652:306;;;44718:12;;44740:11;;44756:10;;-1:-1:-1;;;;;44718:12:0;;44710:29;;44740:8;;44749:1;;44740:11;;;;;;:::i;:::-;;;;;;;44710:42;;;;;;;;;;;;;3968:25:1;;3956:2;3941:18;;3822:177;44710:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;44710:56:0;;44707:244;;44790:12;;44816:11;;-1:-1:-1;;;;;44790:12:0;;;;44785:30;;44816:8;;44825:1;;44816:11;;;;;;:::i;:::-;;;;;;;44785:43;;;;;;;;;;;;;3968:25:1;;3956:2;3941:18;;3822:177;44785:43:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44843:24;44853:10;44865:1;44843:9;:24::i;:::-;44692:3;;;;:::i;:::-;;;;44652:306;;46230:81;8770:13;:11;:13::i;:::-;46288:8:::1;:17:::0;;;::::1;;;;-1:-1:-1::0;;46288:17:0;;::::1;::::0;;;::::1;::::0;;46230:81::o;9790:201::-;8770:13;:11;:13::i;:::-;-1:-1:-1;;;;;9879:22:0;::::1;9871:73;;;::::0;-1:-1:-1;;;9871:73:0;;15817:2:1;9871:73:0::1;::::0;::::1;15799:21:1::0;15856:2;15836:18;;;15829:30;15895:34;15875:18;;;15868:62;-1:-1:-1;;;15946:18:1;;;15939:36;15992:19;;9871:73:0::1;15615:402:1::0;9871:73:0::1;9955:28;9974:8;9955:18;:28::i;39411:135::-:0;34694:4;34718:16;;;:7;:16;;;;;;-1:-1:-1;;;;;34718:16:0;39485:53;;;;-1:-1:-1;;;39485:53:0;;13403:2:1;39485:53:0;;;13385:21:1;13442:2;13422:18;;;13415:30;-1:-1:-1;;;13461:18:1;;;13454:54;13525:18;;39485:53:0;13201:348:1;38690:174:0;38765:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;38765:29:0;-1:-1:-1;;;;;38765:29:0;;;;;;;;:24;;38819:23;38765:24;38819:14;:23::i;:::-;-1:-1:-1;;;;;38810:46:0;;;;;;;;;;;38690:174;;:::o;9049:132::-;8957:6;;-1:-1:-1;;;;;8957:6:0;7515:10;9113:23;9105:68;;;;-1:-1:-1;;;9105:68:0;;16224:2:1;9105:68:0;;;16206:21:1;;;16243:18;;;16236:30;16302:34;16282:18;;;16275:62;16354:18;;9105:68:0;16022:356:1;34923:264:0;35016:4;35033:13;35049:23;35064:7;35049:14;:23::i;:::-;35033:39;;35102:5;-1:-1:-1;;;;;35091:16:0;:7;-1:-1:-1;;;;;35091:16:0;;:52;;;-1:-1:-1;;;;;;32026:25:0;;;32002:4;32026:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;35111:32;35091:87;;;;35171:7;-1:-1:-1;;;;;35147:31:0;:20;35159:7;35147:11;:20::i;:::-;-1:-1:-1;;;;;35147:31:0;;35091:87;35083:96;34923:264;-1:-1:-1;;;;34923:264:0:o;37946:625::-;38105:4;-1:-1:-1;;;;;38078:31:0;:23;38093:7;38078:14;:23::i;:::-;-1:-1:-1;;;;;38078:31:0;;38070:81;;;;-1:-1:-1;;;38070:81:0;;16585:2:1;38070:81:0;;;16567:21:1;16624:2;16604:18;;;16597:30;16663:34;16643:18;;;16636:62;-1:-1:-1;;;16714:18:1;;;16707:35;16759:19;;38070:81:0;16383:401:1;38070:81:0;-1:-1:-1;;;;;38170:16:0;;38162:65;;;;-1:-1:-1;;;38162:65:0;;16991:2:1;38162:65:0;;;16973:21:1;17030:2;17010:18;;;17003:30;17069:34;17049:18;;;17042:62;-1:-1:-1;;;17120:18:1;;;17113:34;17164:19;;38162:65:0;16789:400:1;38162:65:0;38344:29;38361:1;38365:7;38344:8;:29::i;:::-;-1:-1:-1;;;;;38386:15:0;;;;;;:9;:15;;;;;:20;;38405:1;;38386:15;:20;;38405:1;;38386:20;:::i;:::-;;;;-1:-1:-1;;;;;;;38417:13:0;;;;;;:9;:13;;;;;:18;;38434:1;;38417:13;:18;;38434:1;;38417:18;:::i;:::-;;;;-1:-1:-1;;38446:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;38446:21:0;-1:-1:-1;;;;;38446:21:0;;;;;;;;;38485:27;;38446:16;;38485:27;;;;;;;31023:347;30953:417;;:::o;46751:206::-;46833:9;46828:124;46852:11;46848:1;:15;46828:124;;;46879:18;:6;3877:19;;3895:1;3877:19;;;3788:127;46879:18;46906:38;46916:9;46927:16;:6;3758:14;;3666:114;46927:16;46906:9;:38::i;:::-;46865:3;;;;:::i;:::-;;;;46828:124;;10151:191;10244:6;;;-1:-1:-1;;;;;10261:17:0;;;-1:-1:-1;;;;;;10261:17:0;;;;;;;10294:40;;10244:6;;;10261:17;10244:6;;10294:40;;10225:16;;10294:40;10214:128;10151:191;:::o;39007:315::-;39162:8;-1:-1:-1;;;;;39153:17:0;:5;-1:-1:-1;;;;;39153:17:0;;39145:55;;;;-1:-1:-1;;;39145:55:0;;17659:2:1;39145:55:0;;;17641:21:1;17698:2;17678:18;;;17671:30;17737:27;17717:18;;;17710:55;17782:18;;39145:55:0;17457:349:1;39145:55:0;-1:-1:-1;;;;;39211:25:0;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;:46;;-1:-1:-1;;39211:46:0;;;;;;;;;;39273:41;;540::1;;;39273::0;;513:18:1;39273:41:0;;;;;;;39007:315;;;:::o;34003:313::-;34159:28;34169:4;34175:2;34179:7;34159:9;:28::i;:::-;34206:47;34229:4;34235:2;34239:7;34248:4;34206:22;:47::i;:::-;34198:110;;;;-1:-1:-1;;;34198:110:0;;;;;;;:::i;46963:104::-;47023:13;47052:9;47045:16;;;;;:::i;4689:723::-;4745:13;4966:5;4975:1;4966:10;4962:53;;-1:-1:-1;;4993:10:0;;;;;;;;;;;;-1:-1:-1;;;4993:10:0;;;;;4689:723::o;4962:53::-;5040:5;5025:12;5081:78;5088:9;;5081:78;;5114:8;;;;:::i;:::-;;-1:-1:-1;5137:10:0;;-1:-1:-1;5145:2:0;5137:10;;:::i;:::-;;;5081:78;;;5169:19;5201:6;5191:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5191:17:0;;5169:39;;5219:154;5226:10;;5219:154;;5253:11;5263:1;5253:11;;:::i;:::-;;-1:-1:-1;5322:10:0;5330:2;5322:5;:10;:::i;:::-;5309:24;;:2;:24;:::i;:::-;5296:39;;5279:6;5286;5279:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;5279:56:0;;;;;;;;-1:-1:-1;5350:11:0;5359:2;5350:11;;:::i;:::-;;;5219:154;;35529:110;35605:26;35615:2;35619:7;35605:26;;;;;;;;;;;;:9;:26::i;40110:853::-;40264:4;-1:-1:-1;;;;;40285:13:0;;11877:19;:23;40281:675;;40321:71;;-1:-1:-1;;;40321:71:0;;-1:-1:-1;;;;;40321:36:0;;;;;:71;;7515:10;;40372:4;;40378:7;;40387:4;;40321:71;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;40321:71:0;;;;;;;;-1:-1:-1;;40321:71:0;;;;;;;;;;;;:::i;:::-;;;40317:584;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40562:6;:13;40579:1;40562:18;40558:328;;40605:60;;-1:-1:-1;;;40605:60:0;;;;;;;:::i;40558:328::-;40836:6;40830:13;40821:6;40817:2;40813:15;40806:38;40317:584;-1:-1:-1;;;;;;40443:51:0;-1:-1:-1;;;40443:51:0;;-1:-1:-1;40436:58:0;;40281:675;-1:-1:-1;40940:4:0;40110:853;;;;;;:::o;35866:319::-;35995:18;36001:2;36005:7;35995:5;:18::i;:::-;36046:53;36077:1;36081:2;36085:7;36094:4;36046:22;:53::i;:::-;36024:153;;;;-1:-1:-1;;;36024:153:0;;;;;;;:::i;36521:439::-;-1:-1:-1;;;;;36601:16:0;;36593:61;;;;-1:-1:-1;;;36593:61:0;;19554:2:1;36593:61:0;;;19536:21:1;;;19573:18;;;19566:30;19632:34;19612:18;;;19605:62;19684:18;;36593:61:0;19352:356:1;36593:61:0;34694:4;34718:16;;;:7;:16;;;;;;-1:-1:-1;;;;;34718:16:0;:30;36665:58;;;;-1:-1:-1;;;36665:58:0;;19915:2:1;36665:58:0;;;19897:21:1;19954:2;19934:18;;;19927:30;19993;19973:18;;;19966:58;20041:18;;36665:58:0;19713:352:1;36665:58:0;-1:-1:-1;;;;;36794:13:0;;;;;;:9;:13;;;;;:18;;36811:1;;36794:13;:18;;36811:1;;36794:18;:::i;:::-;;;;-1:-1:-1;;36823:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;36823:21:0;-1:-1:-1;;;;;36823:21:0;;;;;;;;36862:33;;36823:16;;;36862:33;;36823:16;;36862:33;46634:22:::1;46562:100:::0;:::o;14:131:1:-;-1:-1:-1;;;;;;88:32:1;;78:43;;68:71;;135:1;132;125:12;150:245;208:6;261:2;249:9;240:7;236:23;232:32;229:52;;;277:1;274;267:12;229:52;316:9;303:23;335:30;359:5;335:30;:::i;592:258::-;664:1;674:113;688:6;685:1;682:13;674:113;;;764:11;;;758:18;745:11;;;738:39;710:2;703:10;674:113;;;805:6;802:1;799:13;796:48;;;-1:-1:-1;;840:1:1;822:16;;815:27;592:258::o;855:::-;897:3;935:5;929:12;962:6;957:3;950:19;978:63;1034:6;1027:4;1022:3;1018:14;1011:4;1004:5;1000:16;978:63;:::i;:::-;1095:2;1074:15;-1:-1:-1;;1070:29:1;1061:39;;;;1102:4;1057:50;;855:258;-1:-1:-1;;855:258:1:o;1118:220::-;1267:2;1256:9;1249:21;1230:4;1287:45;1328:2;1317:9;1313:18;1305:6;1287:45;:::i;1343:180::-;1402:6;1455:2;1443:9;1434:7;1430:23;1426:32;1423:52;;;1471:1;1468;1461:12;1423:52;-1:-1:-1;1494:23:1;;1343:180;-1:-1:-1;1343:180:1:o;1736:131::-;-1:-1:-1;;;;;1811:31:1;;1801:42;;1791:70;;1857:1;1854;1847:12;1872:315;1940:6;1948;2001:2;1989:9;1980:7;1976:23;1972:32;1969:52;;;2017:1;2014;2007:12;1969:52;2056:9;2043:23;2075:31;2100:5;2075:31;:::i;:::-;2125:5;2177:2;2162:18;;;;2149:32;;-1:-1:-1;;;1872:315:1:o;2192:127::-;2253:10;2248:3;2244:20;2241:1;2234:31;2284:4;2281:1;2274:15;2308:4;2305:1;2298:15;2324:275;2395:2;2389:9;2460:2;2441:13;;-1:-1:-1;;2437:27:1;2425:40;;2495:18;2480:34;;2516:22;;;2477:62;2474:88;;;2542:18;;:::i;:::-;2578:2;2571:22;2324:275;;-1:-1:-1;2324:275:1:o;2604:407::-;2669:5;2703:18;2695:6;2692:30;2689:56;;;2725:18;;:::i;:::-;2763:57;2808:2;2787:15;;-1:-1:-1;;2783:29:1;2814:4;2779:40;2763:57;:::i;:::-;2754:66;;2843:6;2836:5;2829:21;2883:3;2874:6;2869:3;2865:16;2862:25;2859:45;;;2900:1;2897;2890:12;2859:45;2949:6;2944:3;2937:4;2930:5;2926:16;2913:43;3003:1;2996:4;2987:6;2980:5;2976:18;2972:29;2965:40;2604:407;;;;;:::o;3016:451::-;3085:6;3138:2;3126:9;3117:7;3113:23;3109:32;3106:52;;;3154:1;3151;3144:12;3106:52;3194:9;3181:23;3227:18;3219:6;3216:30;3213:50;;;3259:1;3256;3249:12;3213:50;3282:22;;3335:4;3327:13;;3323:27;-1:-1:-1;3313:55:1;;3364:1;3361;3354:12;3313:55;3387:74;3453:7;3448:2;3435:16;3430:2;3426;3422:11;3387:74;:::i;3472:160::-;3537:20;;3593:13;;3586:21;3576:32;;3566:60;;3622:1;3619;3612:12;3566:60;3472:160;;;:::o;3637:180::-;3693:6;3746:2;3734:9;3725:7;3721:23;3717:32;3714:52;;;3762:1;3759;3752:12;3714:52;3785:26;3801:9;3785:26;:::i;4004:456::-;4081:6;4089;4097;4150:2;4138:9;4129:7;4125:23;4121:32;4118:52;;;4166:1;4163;4156:12;4118:52;4205:9;4192:23;4224:31;4249:5;4224:31;:::i;:::-;4274:5;-1:-1:-1;4331:2:1;4316:18;;4303:32;4344:33;4303:32;4344:33;:::i;:::-;4004:456;;4396:7;;-1:-1:-1;;;4450:2:1;4435:18;;;;4422:32;;4004:456::o;4647:247::-;4706:6;4759:2;4747:9;4738:7;4734:23;4730:32;4727:52;;;4775:1;4772;4765:12;4727:52;4814:9;4801:23;4833:31;4858:5;4833:31;:::i;4899:632::-;5070:2;5122:21;;;5192:13;;5095:18;;;5214:22;;;5041:4;;5070:2;5293:15;;;;5267:2;5252:18;;;5041:4;5336:169;5350:6;5347:1;5344:13;5336:169;;;5411:13;;5399:26;;5480:15;;;;5445:12;;;;5372:1;5365:9;5336:169;;;-1:-1:-1;5522:3:1;;4899:632;-1:-1:-1;;;;;;4899:632:1:o;5536:315::-;5601:6;5609;5662:2;5650:9;5641:7;5637:23;5633:32;5630:52;;;5678:1;5675;5668:12;5630:52;5717:9;5704:23;5736:31;5761:5;5736:31;:::i;:::-;5786:5;-1:-1:-1;5810:35:1;5841:2;5826:18;;5810:35;:::i;:::-;5800:45;;5536:315;;;;;:::o;5856:795::-;5951:6;5959;5967;5975;6028:3;6016:9;6007:7;6003:23;5999:33;5996:53;;;6045:1;6042;6035:12;5996:53;6084:9;6071:23;6103:31;6128:5;6103:31;:::i;:::-;6153:5;-1:-1:-1;6210:2:1;6195:18;;6182:32;6223:33;6182:32;6223:33;:::i;:::-;6275:7;-1:-1:-1;6329:2:1;6314:18;;6301:32;;-1:-1:-1;6384:2:1;6369:18;;6356:32;6411:18;6400:30;;6397:50;;;6443:1;6440;6433:12;6397:50;6466:22;;6519:4;6511:13;;6507:27;-1:-1:-1;6497:55:1;;6548:1;6545;6538:12;6497:55;6571:74;6637:7;6632:2;6619:16;6614:2;6610;6606:11;6571:74;:::i;:::-;6561:84;;;5856:795;;;;;;;:::o;6656:946::-;6740:6;6771:2;6814;6802:9;6793:7;6789:23;6785:32;6782:52;;;6830:1;6827;6820:12;6782:52;6870:9;6857:23;6899:18;6940:2;6932:6;6929:14;6926:34;;;6956:1;6953;6946:12;6926:34;6994:6;6983:9;6979:22;6969:32;;7039:7;7032:4;7028:2;7024:13;7020:27;7010:55;;7061:1;7058;7051:12;7010:55;7097:2;7084:16;7119:2;7115;7112:10;7109:36;;;7125:18;;:::i;:::-;7171:2;7168:1;7164:10;7154:20;;7194:28;7218:2;7214;7210:11;7194:28;:::i;:::-;7256:15;;;7326:11;;;7322:20;;;7287:12;;;;7354:19;;;7351:39;;;7386:1;7383;7376:12;7351:39;7410:11;;;;7430:142;7446:6;7441:3;7438:15;7430:142;;;7512:17;;7500:30;;7463:12;;;;7550;;;;7430:142;;;7591:5;6656:946;-1:-1:-1;;;;;;;;6656:946:1:o;7607:388::-;7675:6;7683;7736:2;7724:9;7715:7;7711:23;7707:32;7704:52;;;7752:1;7749;7742:12;7704:52;7791:9;7778:23;7810:31;7835:5;7810:31;:::i;:::-;7860:5;-1:-1:-1;7917:2:1;7902:18;;7889:32;7930:33;7889:32;7930:33;:::i;:::-;7982:7;7972:17;;;7607:388;;;;;:::o;8000:380::-;8079:1;8075:12;;;;8122;;;8143:61;;8197:4;8189:6;8185:17;8175:27;;8143:61;8250:2;8242:6;8239:14;8219:18;8216:38;8213:161;;8296:10;8291:3;8287:20;8284:1;8277:31;8331:4;8328:1;8321:15;8359:4;8356:1;8349:15;8213:161;;8000:380;;;:::o;9344:545::-;9446:2;9441:3;9438:11;9435:448;;;9482:1;9507:5;9503:2;9496:17;9552:4;9548:2;9538:19;9622:2;9610:10;9606:19;9603:1;9599:27;9593:4;9589:38;9658:4;9646:10;9643:20;9640:47;;;-1:-1:-1;9681:4:1;9640:47;9736:2;9731:3;9727:12;9724:1;9720:20;9714:4;9710:31;9700:41;;9791:82;9809:2;9802:5;9799:13;9791:82;;;9854:17;;;9835:1;9824:13;9791:82;;;9795:3;;;9344:545;;;:::o;10065:1352::-;10191:3;10185:10;10218:18;10210:6;10207:30;10204:56;;;10240:18;;:::i;:::-;10269:97;10359:6;10319:38;10351:4;10345:11;10319:38;:::i;:::-;10313:4;10269:97;:::i;:::-;10421:4;;10485:2;10474:14;;10502:1;10497:663;;;;11204:1;11221:6;11218:89;;;-1:-1:-1;11273:19:1;;;11267:26;11218:89;-1:-1:-1;;10022:1:1;10018:11;;;10014:24;10010:29;10000:40;10046:1;10042:11;;;9997:57;11320:81;;10467:944;;10497:663;9291:1;9284:14;;;9328:4;9315:18;;-1:-1:-1;;10533:20:1;;;10651:236;10665:7;10662:1;10659:14;10651:236;;;10754:19;;;10748:26;10733:42;;10846:27;;;;10814:1;10802:14;;;;10681:19;;10651:236;;;10655:3;10915:6;10906:7;10903:19;10900:201;;;10976:19;;;10970:26;-1:-1:-1;;11059:1:1;11055:14;;;11071:3;11051:24;11047:37;11043:42;11028:58;11013:74;;10900:201;-1:-1:-1;;;;;11147:1:1;11131:14;;;11127:22;11114:36;;-1:-1:-1;10065:1352:1:o;11422:410::-;11624:2;11606:21;;;11663:2;11643:18;;;11636:30;11702:34;11697:2;11682:18;;11675:62;-1:-1:-1;;;11768:2:1;11753:18;;11746:44;11822:3;11807:19;;11422:410::o;12192:251::-;12262:6;12315:2;12303:9;12294:7;12290:23;12286:32;12283:52;;;12331:1;12328;12321:12;12283:52;12363:9;12357:16;12382:31;12407:5;12382:31;:::i;12797:127::-;12858:10;12853:3;12849:20;12846:1;12839:31;12889:4;12886:1;12879:15;12913:4;12910:1;12903:15;12929:127;12990:10;12985:3;12981:20;12978:1;12971:31;13021:4;13018:1;13011:15;13045:4;13042:1;13035:15;13061:135;13100:3;13121:17;;;13118:43;;13141:18;;:::i;:::-;-1:-1:-1;13188:1:1;13177:13;;13061:135::o;14380:1230::-;14604:3;14642:6;14636:13;14668:4;14681:51;14725:6;14720:3;14715:2;14707:6;14703:15;14681:51;:::i;:::-;14795:13;;14754:16;;;;14817:55;14795:13;14754:16;14839:15;;;14817:55;:::i;:::-;14961:13;;14894:20;;;14934:1;;14999:36;14961:13;14999:36;:::i;:::-;15054:1;15071:18;;;15098:141;;;;15253:1;15248:337;;;;15064:521;;15098:141;-1:-1:-1;;15133:24:1;;15119:39;;15210:16;;15203:24;15189:39;;15178:51;;;-1:-1:-1;15098:141:1;;15248:337;15279:6;15276:1;15269:17;15327:2;15324:1;15314:16;15352:1;15366:169;15380:8;15377:1;15374:15;15366:169;;;15462:14;;15447:13;;;15440:37;15505:16;;;;15397:10;;15366:169;;;15370:3;;15566:8;15559:5;15555:20;15548:27;;15064:521;-1:-1:-1;15601:3:1;;14380:1230;-1:-1:-1;;;;;;;;;;14380:1230:1:o;17194:125::-;17234:4;17262:1;17259;17256:8;17253:34;;;17267:18;;:::i;:::-;-1:-1:-1;17304:9:1;;17194:125::o;17324:128::-;17364:3;17395:1;17391:6;17388:1;17385:13;17382:39;;;17401:18;;:::i;:::-;-1:-1:-1;17437:9:1;;17324:128::o;17811:414::-;18013:2;17995:21;;;18052:2;18032:18;;;18025:30;18091:34;18086:2;18071:18;;18064:62;-1:-1:-1;;;18157:2:1;18142:18;;18135:48;18215:3;18200:19;;17811:414::o;18230:127::-;18291:10;18286:3;18282:20;18279:1;18272:31;18322:4;18319:1;18312:15;18346:4;18343:1;18336:15;18362:120;18402:1;18428;18418:35;;18433:18;;:::i;:::-;-1:-1:-1;18467:9:1;;18362:120::o;18487:112::-;18519:1;18545;18535:35;;18550:18;;:::i;:::-;-1:-1:-1;18584:9:1;;18487:112::o;18604:489::-;-1:-1:-1;;;;;18873:15:1;;;18855:34;;18925:15;;18920:2;18905:18;;18898:43;18972:2;18957:18;;18950:34;;;19020:3;19015:2;19000:18;;18993:31;;;18798:4;;19041:46;;19067:19;;19059:6;19041:46;:::i;:::-;19033:54;18604:489;-1:-1:-1;;;;;;18604:489:1:o;19098:249::-;19167:6;19220:2;19208:9;19199:7;19195:23;19191:32;19188:52;;;19236:1;19233;19226:12;19188:52;19268:9;19262:16;19287:30;19311:5;19287:30;:::i
Swarm Source
ipfs://56247bf9c27c820b3b58ee5818d4649d9a2e51f620d2a2cccb7937b52e8fde36
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ 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.