Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 520 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Set Approval For... | 17854829 | 546 days ago | IN | 0 ETH | 0.00064184 | ||||
Set Approval For... | 17799254 | 554 days ago | IN | 0 ETH | 0.00120629 | ||||
Set Approval For... | 17668884 | 572 days ago | IN | 0 ETH | 0.00069295 | ||||
Set Approval For... | 17668271 | 572 days ago | IN | 0 ETH | 0.0007276 | ||||
Set Approval For... | 17536572 | 591 days ago | IN | 0 ETH | 0.00097013 | ||||
Set Approval For... | 17335550 | 619 days ago | IN | 0 ETH | 0.00130331 | ||||
Set Approval For... | 17242298 | 632 days ago | IN | 0 ETH | 0.00300742 | ||||
Set Approval For... | 17212708 | 636 days ago | IN | 0 ETH | 0.00616036 | ||||
Set Approval For... | 17193863 | 639 days ago | IN | 0 ETH | 0.00407575 | ||||
Set Approval For... | 17148582 | 645 days ago | IN | 0 ETH | 0.00174624 | ||||
Set Approval For... | 17145299 | 646 days ago | IN | 0 ETH | 0.00198878 | ||||
Set Approval For... | 17142814 | 646 days ago | IN | 0 ETH | 0.0014783 | ||||
Set Approval For... | 17138350 | 647 days ago | IN | 0 ETH | 0.00227982 | ||||
Set Approval For... | 17129865 | 648 days ago | IN | 0 ETH | 0.00164208 | ||||
Set Approval For... | 17127508 | 648 days ago | IN | 0 ETH | 0.00160072 | ||||
Set Approval For... | 17092484 | 653 days ago | IN | 0 ETH | 0.00169773 | ||||
Set Approval For... | 17064670 | 657 days ago | IN | 0 ETH | 0.00126123 | ||||
Set Approval For... | 17051378 | 659 days ago | IN | 0 ETH | 0.00116416 | ||||
Set Approval For... | 17051125 | 659 days ago | IN | 0 ETH | 0.00112878 | ||||
Set Approval For... | 17050881 | 659 days ago | IN | 0 ETH | 0.00116416 | ||||
Set Approval For... | 17050799 | 659 days ago | IN | 0 ETH | 0.00106715 | ||||
Set Approval For... | 17049413 | 659 days ago | IN | 0 ETH | 0.00116416 | ||||
Set Approval For... | 17049402 | 659 days ago | IN | 0 ETH | 0.00063507 | ||||
Set Approval For... | 17049400 | 659 days ago | IN | 0 ETH | 0.00106715 | ||||
Set Approval For... | 17048104 | 660 days ago | IN | 0 ETH | 0.00125532 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|
16390780 | 752 days ago | 0.6 ETH | ||||
16190732 | 780 days ago | 1.5 ETH | ||||
16026501 | 803 days ago | 0.1 ETH | ||||
16026501 | 803 days ago | 0.2 ETH | ||||
15980731 | 809 days ago | 11.55 ETH | ||||
15973675 | 810 days ago | 0.5 ETH | ||||
15973675 | 810 days ago | 1 ETH | ||||
15973651 | 810 days ago | 0.05 ETH | ||||
15973651 | 810 days ago | 0.1 ETH | ||||
15936902 | 815 days ago | 8.4 ETH | ||||
15918964 | 818 days ago | 0.05 ETH | ||||
15918964 | 818 days ago | 0.1 ETH | ||||
15887467 | 822 days ago | 0.05 ETH | ||||
15887467 | 822 days ago | 0.1 ETH | ||||
15882340 | 823 days ago | 0.05 ETH | ||||
15882340 | 823 days ago | 0.1 ETH | ||||
15860059 | 826 days ago | 0.05 ETH | ||||
15860059 | 826 days ago | 0.1 ETH | ||||
15857628 | 826 days ago | 0.05 ETH | ||||
15857628 | 826 days ago | 0.1 ETH | ||||
15857393 | 826 days ago | 0.05 ETH | ||||
15857393 | 826 days ago | 0.1 ETH | ||||
15854410 | 827 days ago | 0.05 ETH | ||||
15854410 | 827 days ago | 0.1 ETH | ||||
15831413 | 830 days ago | 0.05 ETH |
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
YGMint
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-07-14 */ // SPDX-License-Identifier: MIT 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; } } /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } /** * @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; } } /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } /** * @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); } /** * @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); } /** * @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; } } /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); } /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } /** * @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); } /** * @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 Ownable , ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be 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 owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _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: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || 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 a {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 a {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 Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} /** * @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 {} } /** * @dev This implements an optional extension of {ERC721} defined in the EIP that adds * enumerability of all the token ids in the contract as well as all token ids owned by each * account. */ abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => mapping(uint256 => uint256)) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds"); return _ownedTokens[owner][index]; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds"); return _allTokens[index]; } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` cannot be the zero address. * - `to` cannot be the zero address. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array delete _allTokensIndex[tokenId]; _allTokens.pop(); } } /** * @dev ERC721 token with storage based token URI management. */ abstract contract ERC721URIStorage is ERC721Enumerable{ using Strings for uint256; bool public isStart; string openedUrl; uint lastOpenTokenId; // Optional mapping for token URIs mapping(uint256 => string) private _tokenURIs; function start() external onlyOwner { isStart = !isStart; } function open(string memory url, uint lastTokenId) external onlyOwner { if(0 == bytes(openedUrl).length){ openedUrl = url; } require(0 < lastTokenId && lastOpenTokenId < lastTokenId && lastTokenId <= totalSupply(), 'Invalid tokenid'); lastOpenTokenId = lastTokenId; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721URIStorage: URI query for nonexistent token"); if (bytes(openedUrl).length > 0 && tokenId <= lastOpenTokenId) { return string(abi.encodePacked(openedUrl, '/', tokenId.toString())); } return _baseURI(); } /** * @dev Sets `_tokenURI` as the tokenURI of `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual { require(_exists(tokenId), "ERC721URIStorage: URI set of nonexistent token"); _tokenURIs[tokenId] = _tokenURI; } /** * @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 override { super._burn(tokenId); if (bytes(_tokenURIs[tokenId]).length != 0) { delete _tokenURIs[tokenId]; } } } contract YGMint is ERC721URIStorage{ using Counters for Counters.Counter; Counters.Counter private _tokenIdCounter = Counters.Counter(1); uint mintTotal = 6666; uint teamMax = 666; uint teamMint = 0; uint mintMax = 12; uint mintFee = 10; uint mintEveryAmount = 12 * 10 ** 17; uint firstLeave = 1 * 10 ** 17; uint secondtLeave = 5 * 10 ** 16; mapping(address => bool) public isMint; mapping(address => address payable) recommender; constructor() ERC721("YGM", "YGM") { } function _baseURI() internal pure override returns (string memory) { return "ipfs://QmPAcZGzXzcrCfs399nASK2SJGEByjZr3atBpGML4vzfj1"; } function getAmount(uint mintCount) external view returns(uint){ require(totalSupply() + mintCount <= mintTotal, 'Maximum mint quantity exceeded'); address minter = _msgSender(); uint balanceMiner = balanceOf(minter); uint balanceWill = balanceMiner + mintCount; require(0 < mintCount && balanceWill <= mintMax, 'Invalid quantity'); if(balanceWill > mintFee){ if(balanceMiner < mintFee){ uint feeCount = mintFee - balanceMiner; return feeCount * mintEveryAmount; }else{ return 0; } }else{ return mintCount * mintEveryAmount; } } function safeMint(address payable _recommender, uint mintCount) external payable checkRecommender(_recommender){ require(isStart, 'Not started'); require(totalSupply() + mintCount <= mintTotal, 'Maximum mint quantity exceeded'); address minter = _msgSender(); uint balanceMiner = balanceOf(minter); uint balanceWill = balanceMiner + mintCount; require(0 < mintCount && balanceWill <= mintMax, 'Invalid quantity'); if(balanceWill > mintFee){ if(balanceMiner < mintFee){ uint feeCount = mintFee - balanceMiner; uint mintAmount = feeCount * mintEveryAmount; require(mintAmount <= msg.value, 'Insufficient payment quantity'); if(mintAmount < msg.value){ payable(minter).transfer(msg.value - mintAmount); } rewardRecommender(minter, feeCount); } }else{ uint mintAmount = mintCount * mintEveryAmount; require(mintAmount <= msg.value, 'Insufficient payment quantity'); if(mintAmount < msg.value){ payable(minter).transfer(msg.value - mintAmount); } rewardRecommender(minter, mintCount); } for(uint i = 0; i < mintCount; i++){ uint256 tokenId = _tokenIdCounter.current(); _tokenIdCounter.increment(); _safeMint(minter, tokenId); } if(!isMint[minter]){ isMint[minter] = true; } } function mint(address to, uint count) external onlyOwner { require(teamMint < teamMax, 'Mint end'); for(uint i = 0; i < count; i++){ uint256 tokenId = _tokenIdCounter.current(); _tokenIdCounter.increment(); _safeMint(to, tokenId); teamMint += 1; } if(!isMint[to]){ isMint[to] = true; } } function withdrawal(address payable to, uint amount) external onlyOwner { require(address(0) != to, "To can not be zero"); to.transfer(amount); } function rewardRecommender(address minter, uint count) private { address zero = address(0); address payable firstRecommender = recommender[minter]; if(zero != firstRecommender && isMint[firstRecommender]){ firstRecommender.transfer(firstLeave * count); } address payable secondRecommender = recommender[firstRecommender]; if(zero != secondRecommender && isMint[secondRecommender]){ secondRecommender.transfer(secondtLeave * count); } } modifier checkRecommender(address payable _recommender){ if(recommender[msg.sender] == address(0)){ require(address(0) != _recommender, "Recommender can not be zero"); require(msg.sender != _recommender, "Recommender can not to be same"); require(isMint[_recommender], "Recommender no mint"); recommender[msg.sender] = _recommender; } _; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":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":"mintCount","type":"uint256"}],"name":"getAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isMint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isStart","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"count","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"url","type":"string"},{"internalType":"uint256","name":"lastTokenId","type":"uint256"}],"name":"open","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_recommender","type":"address"},{"internalType":"uint256","name":"mintCount","type":"uint256"}],"name":"safeMint","outputs":[],"stateMutability":"payable","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":[],"name":"start","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":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":[{"internalType":"address payable","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawal","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60a060405260016080819052600f55611a0a60105561029a6011556000601255600c601355600a6014556710a741a46278000060155567016345785d8a000060165566b1a2bc2ec500006017553480156200005957600080fd5b506040518060400160405280600381526020016259474d60e81b8152506040518060400160405280600381526020016259474d60e81b815250620000ac620000a6620000e060201b60201c565b620000e4565b8151620000c190600190602085019062000134565b508051620000d790600290602084019062000134565b50505062000217565b3390565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b8280546200014290620001da565b90600052602060002090601f016020900481019282620001665760008555620001b1565b82601f106200018157805160ff1916838001178555620001b1565b82800160010185558215620001b1579182015b82811115620001b157825182559160200191906001019062000194565b50620001bf929150620001c3565b5090565b5b80821115620001bf5760008155600101620001c4565b600181811c90821680620001ef57607f821691505b602082108114156200021157634e487b7160e01b600052602260045260246000fd5b50919050565b6127b080620002276000396000f3fe60806040526004361061019c5760003560e01c8063715018a6116100ec578063a22cb4651161008a578063c87b56dd11610064578063c87b56dd1461047b578063e17b35ed1461049b578063e985e9c5146104cb578063f2fde38b1461051457600080fd5b8063a22cb46514610426578063b88d4fde14610446578063be9a65551461046657600080fd5b806395d89b41116100c657806395d89b41146103be5780639980ec86146103d357806399979ce4146103f3578063a14481941461041357600080fd5b8063715018a6146103715780638a55d36e146103865780638da5cb5b146103a057600080fd5b80632f745c59116101595780634f6ccce7116101335780634f6ccce7146102f15780635a6b26ba146103115780636352211e1461033157806370a082311461035157600080fd5b80632f745c591461029157806340c10f19146102b157806342842e0e146102d157600080fd5b806301ffc9a7146101a157806306fdde03146101d6578063081812fc146101f8578063095ea7b31461023057806318160ddd1461025257806323b872dd14610271575b600080fd5b3480156101ad57600080fd5b506101c16101bc3660046122f4565b610534565b60405190151581526020015b60405180910390f35b3480156101e257600080fd5b506101eb61055f565b6040516101cd91906124c9565b34801561020457600080fd5b50610218610213366004612387565b6105f1565b6040516001600160a01b0390911681526020016101cd565b34801561023c57600080fd5b5061025061024b36600461219b565b61068b565b005b34801561025e57600080fd5b506009545b6040519081526020016101cd565b34801561027d57600080fd5b5061025061028c366004612200565b6107a1565b34801561029d57600080fd5b506102636102ac36600461219b565b6107d2565b3480156102bd57600080fd5b506102506102cc36600461219b565b610868565b3480156102dd57600080fd5b506102506102ec366004612200565b610976565b3480156102fd57600080fd5b5061026361030c366004612387565b610991565b34801561031d57600080fd5b5061025061032c36600461219b565b610a24565b34801561033d57600080fd5b5061021861034c366004612387565b610acf565b34801561035d57600080fd5b5061026361036c366004612177565b610b46565b34801561037d57600080fd5b50610250610bcd565b34801561039257600080fd5b50600b546101c19060ff1681565b3480156103ac57600080fd5b506000546001600160a01b0316610218565b3480156103ca57600080fd5b506101eb610c03565b3480156103df57600080fd5b506102636103ee366004612387565b610c12565b3480156103ff57600080fd5b5061025061040e36600461232e565b610d45565b61025061042136600461219b565b610dfc565b34801561043257600080fd5b506102506104413660046122c1565b61128d565b34801561045257600080fd5b50610250610461366004612241565b611298565b34801561047257600080fd5b506102506112d0565b34801561048757600080fd5b506101eb610496366004612387565b61130e565b3480156104a757600080fd5b506101c16104b6366004612177565b60186020526000908152604090205460ff1681565b3480156104d757600080fd5b506101c16104e63660046121c7565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205460ff1690565b34801561052057600080fd5b5061025061052f366004612177565b6113ee565b60006001600160e01b0319821663780e9d6360e01b1480610559575061055982611489565b92915050565b60606001805461056e90612642565b80601f016020809104026020016040519081016040528092919081815260200182805461059a90612642565b80156105e75780601f106105bc576101008083540402835291602001916105e7565b820191906000526020600020905b8154815290600101906020018083116105ca57829003601f168201915b5050505050905090565b6000818152600360205260408120546001600160a01b031661066f5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600560205260409020546001600160a01b031690565b600061069682610acf565b9050806001600160a01b0316836001600160a01b031614156107045760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610666565b336001600160a01b0382161480610720575061072081336104e6565b6107925760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610666565b61079c83836114d9565b505050565b6107ab3382611547565b6107c75760405162461bcd60e51b815260040161066690612563565b61079c83838361163e565b60006107dd83610b46565b821061083f5760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b6064820152608401610666565b506001600160a01b03919091166000908152600760209081526040808320938352929052205490565b6000546001600160a01b031633146108925760405162461bcd60e51b81526004016106669061252e565b601154601254106108d05760405162461bcd60e51b8152602060048201526008602482015267135a5b9d08195b9960c21b6044820152606401610666565b60005b8181101561092d5760006108e6600f5490565b90506108f6600f80546001019055565b61090084826117e5565b60016012600082825461091391906125b4565b9091555082915061092590508161267d565b9150506108d3565b506001600160a01b03821660009081526018602052604090205460ff16610972576001600160a01b0382166000908152601860205260409020805460ff191660011790555b5050565b61079c83838360405180602001604052806000815250611298565b600061099c60095490565b82106109ff5760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b6064820152608401610666565b60098281548110610a1257610a126126ee565b90600052602060002001549050919050565b6000546001600160a01b03163314610a4e5760405162461bcd60e51b81526004016106669061252e565b6001600160a01b038216610a995760405162461bcd60e51b8152602060048201526012602482015271546f2063616e206e6f74206265207a65726f60701b6044820152606401610666565b6040516001600160a01b0383169082156108fc029083906000818181858888f1935050505015801561079c573d6000803e3d6000fd5b6000818152600360205260408120546001600160a01b0316806105595760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610666565b60006001600160a01b038216610bb15760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610666565b506001600160a01b031660009081526004602052604090205490565b6000546001600160a01b03163314610bf75760405162461bcd60e51b81526004016106669061252e565b610c0160006117ff565b565b60606002805461056e90612642565b600060105482610c2160095490565b610c2b91906125b4565b1115610c795760405162461bcd60e51b815260206004820152601e60248201527f4d6178696d756d206d696e74207175616e7469747920657863656564656400006044820152606401610666565b336000610c8582610b46565b90506000610c9385836125b4565b9050846000108015610ca757506013548111155b610ce65760405162461bcd60e51b815260206004820152601060248201526f496e76616c6964207175616e7469747960801b6044820152606401610666565b601454811115610d2f57601454821015610d2457600082601454610d0a91906125ff565b905060155481610d1a91906125e0565b9695505050505050565b506000949350505050565b601554610d3c90866125e0565b95945050505050565b6000546001600160a01b03163314610d6f5760405162461bcd60e51b81526004016106669061252e565b600c8054610d7c90612642565b15159050610d99578151610d9790600c906020850190612068565b505b806000108015610daa575080600d54105b8015610db857506009548111155b610df65760405162461bcd60e51b815260206004820152600f60248201526e125b9d985b1a59081d1bdad95b9a59608a1b6044820152606401610666565b600d5550565b3360009081526019602052604090205482906001600160a01b0316610f51576001600160a01b038116610e715760405162461bcd60e51b815260206004820152601b60248201527f5265636f6d6d656e6465722063616e206e6f74206265207a65726f00000000006044820152606401610666565b336001600160a01b0382161415610eca5760405162461bcd60e51b815260206004820152601e60248201527f5265636f6d6d656e6465722063616e206e6f7420746f2062652073616d6500006044820152606401610666565b6001600160a01b03811660009081526018602052604090205460ff16610f285760405162461bcd60e51b8152602060048201526013602482015272149958dbdb5b595b99195c881b9bc81b5a5b9d606a1b6044820152606401610666565b33600090815260196020526040902080546001600160a01b0319166001600160a01b0383161790555b600b5460ff16610f915760405162461bcd60e51b815260206004820152600b60248201526a139bdd081cdd185c9d195960aa1b6044820152606401610666565b60105482610f9e60095490565b610fa891906125b4565b1115610ff65760405162461bcd60e51b815260206004820152601e60248201527f4d6178696d756d206d696e74207175616e7469747920657863656564656400006044820152606401610666565b33600061100282610b46565b9050600061101085836125b4565b905084600010801561102457506013548111155b6110635760405162461bcd60e51b815260206004820152601060248201526f496e76616c6964207175616e7469747960801b6044820152606401610666565b601454811115611146576014548210156111415760008260145461108791906125ff565b905060006015548261109991906125e0565b9050348111156110eb5760405162461bcd60e51b815260206004820152601d60248201527f496e73756666696369656e74207061796d656e74207175616e746974790000006044820152606401610666565b34811015611134576001600160a01b0385166108fc61110a83346125ff565b6040518115909202916000818181858888f19350505050158015611132573d6000803e3d6000fd5b505b61113e858361184f565b50505b6111fd565b60006015548661115691906125e0565b9050348111156111a85760405162461bcd60e51b815260206004820152601d60248201527f496e73756666696369656e74207061796d656e74207175616e746974790000006044820152606401610666565b348110156111f1576001600160a01b0384166108fc6111c783346125ff565b6040518115909202916000818181858888f193505050501580156111ef573d6000803e3d6000fd5b505b6111fb848761184f565b505b60005b85811015611240576000611213600f5490565b9050611223600f80546001019055565b61122d85826117e5565b50806112388161267d565b915050611200565b506001600160a01b03831660009081526018602052604090205460ff16611285576001600160a01b0383166000908152601860205260409020805460ff191660011790555b505050505050565b610972338383611972565b6112a23383611547565b6112be5760405162461bcd60e51b815260040161066690612563565b6112ca84848484611a41565b50505050565b6000546001600160a01b031633146112fa5760405162461bcd60e51b81526004016106669061252e565b600b805460ff19811660ff90911615179055565b6000818152600360205260409020546060906001600160a01b031661138f5760405162461bcd60e51b815260206004820152603160248201527f45524337323155524953746f726167653a2055524920717565727920666f72206044820152703737b732bc34b9ba32b73a103a37b5b2b760791b6064820152608401610666565b6000600c805461139e90612642565b90501180156113af5750600d548211155b156113e657600c6113bf83611a74565b6040516020016113d09291906123e8565b6040516020818303038152906040529050919050565b610559611b72565b6000546001600160a01b031633146114185760405162461bcd60e51b81526004016106669061252e565b6001600160a01b03811661147d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610666565b611486816117ff565b50565b60006001600160e01b031982166380ac58cd60e01b14806114ba57506001600160e01b03198216635b5e139f60e01b145b8061055957506301ffc9a760e01b6001600160e01b0319831614610559565b600081815260056020526040902080546001600160a01b0319166001600160a01b038416908117909155819061150e82610acf565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600360205260408120546001600160a01b03166115c05760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610666565b60006115cb83610acf565b9050806001600160a01b0316846001600160a01b0316148061161257506001600160a01b0380821660009081526006602090815260408083209388168352929052205460ff165b806116365750836001600160a01b031661162b846105f1565b6001600160a01b0316145b949350505050565b826001600160a01b031661165182610acf565b6001600160a01b0316146116b55760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b6064820152608401610666565b6001600160a01b0382166117175760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610666565b611722838383611b92565b61172d6000826114d9565b6001600160a01b03831660009081526004602052604081208054600192906117569084906125ff565b90915550506001600160a01b03821660009081526004602052604081208054600192906117849084906125b4565b909155505060008181526003602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b610972828260405180602001604052806000815250611c4a565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03808316600090815260196020526040812054909116801580159061189357506001600160a01b03811660009081526018602052604090205460ff165b156118dd57806001600160a01b03166108fc846016546118b391906125e0565b6040518115909202916000818181858888f193505050501580156118db573d6000803e3d6000fd5b505b6001600160a01b038082166000908152601960205260409020548116908316811480159061192357506001600160a01b03811660009081526018602052604090205460ff165b1561196b57806001600160a01b03166108fc8560175461194391906125e0565b6040518115909202916000818181858888f19350505050158015611285573d6000803e3d6000fd5b5050505050565b816001600160a01b0316836001600160a01b031614156119d45760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610666565b6001600160a01b03838116600081815260066020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b611a4c84848461163e565b611a5884848484611c7d565b6112ca5760405162461bcd60e51b8152600401610666906124dc565b606081611a985750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611ac25780611aac8161267d565b9150611abb9050600a836125cc565b9150611a9c565b60008167ffffffffffffffff811115611add57611add612704565b6040519080825280601f01601f191660200182016040528015611b07576020820181803683370190505b5090505b841561163657611b1c6001836125ff565b9150611b29600a86612698565b611b349060306125b4565b60f81b818381518110611b4957611b496126ee565b60200101906001600160f81b031916908160001a905350611b6b600a866125cc565b9450611b0b565b606060405180606001604052806035815260200161274660359139905090565b6001600160a01b038316611bed57611be881600980546000838152600a60205260408120829055600182018355919091527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af0155565b611c10565b816001600160a01b0316836001600160a01b031614611c1057611c108382611d8a565b6001600160a01b038216611c275761079c81611e27565b826001600160a01b0316826001600160a01b03161461079c5761079c8282611ed6565b611c548383611f1a565b611c616000848484611c7d565b61079c5760405162461bcd60e51b8152600401610666906124dc565b60006001600160a01b0384163b15611d7f57604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611cc1903390899088908890600401612496565b602060405180830381600087803b158015611cdb57600080fd5b505af1925050508015611d0b575060408051601f3d908101601f19168201909252611d0891810190612311565b60015b611d65573d808015611d39576040519150601f19603f3d011682016040523d82523d6000602084013e611d3e565b606091505b508051611d5d5760405162461bcd60e51b8152600401610666906124dc565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611636565b506001949350505050565b60006001611d9784610b46565b611da191906125ff565b600083815260086020526040902054909150808214611df4576001600160a01b03841660009081526007602090815260408083208584528252808320548484528184208190558352600890915290208190555b5060009182526008602090815260408084208490556001600160a01b039094168352600781528383209183525290812055565b600954600090611e39906001906125ff565b6000838152600a602052604081205460098054939450909284908110611e6157611e616126ee565b906000526020600020015490508060098381548110611e8257611e826126ee565b6000918252602080832090910192909255828152600a90915260408082208490558582528120556009805480611eba57611eba6126d8565b6001900381819060005260206000200160009055905550505050565b6000611ee183610b46565b6001600160a01b039093166000908152600760209081526040808320868452825280832085905593825260089052919091209190915550565b6001600160a01b038216611f705760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610666565b6000818152600360205260409020546001600160a01b031615611fd55760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610666565b611fe160008383611b92565b6001600160a01b038216600090815260046020526040812080546001929061200a9084906125b4565b909155505060008181526003602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b82805461207490612642565b90600052602060002090601f01602090048101928261209657600085556120dc565b82601f106120af57805160ff19168380011785556120dc565b828001600101855582156120dc579182015b828111156120dc5782518255916020019190600101906120c1565b506120e89291506120ec565b5090565b5b808211156120e857600081556001016120ed565b600067ffffffffffffffff8084111561211c5761211c612704565b604051601f8501601f19908116603f0116810190828211818310171561214457612144612704565b8160405280935085815286868601111561215d57600080fd5b858560208301376000602087830101525050509392505050565b60006020828403121561218957600080fd5b81356121948161271a565b9392505050565b600080604083850312156121ae57600080fd5b82356121b98161271a565b946020939093013593505050565b600080604083850312156121da57600080fd5b82356121e58161271a565b915060208301356121f58161271a565b809150509250929050565b60008060006060848603121561221557600080fd5b83356122208161271a565b925060208401356122308161271a565b929592945050506040919091013590565b6000806000806080858703121561225757600080fd5b84356122628161271a565b935060208501356122728161271a565b925060408501359150606085013567ffffffffffffffff81111561229557600080fd5b8501601f810187136122a657600080fd5b6122b587823560208401612101565b91505092959194509250565b600080604083850312156122d457600080fd5b82356122df8161271a565b9150602083013580151581146121f557600080fd5b60006020828403121561230657600080fd5b81356121948161272f565b60006020828403121561232357600080fd5b81516121948161272f565b6000806040838503121561234157600080fd5b823567ffffffffffffffff81111561235857600080fd5b8301601f8101851361236957600080fd5b61237885823560208401612101565b95602094909401359450505050565b60006020828403121561239957600080fd5b5035919050565b600081518084526123b8816020860160208601612616565b601f01601f19169290920160200192915050565b600081516123de818560208601612616565b9290920192915050565b600080845481600182811c91508083168061240457607f831692505b602080841082141561242457634e487b7160e01b86526022600452602486fd5b818015612438576001811461244957612476565b60ff19861689528489019650612476565b60008b81526020902060005b8681101561246e5781548b820152908501908301612455565b505084890196505b505050505050610d3c61249082602f60f81b815260010190565b856123cc565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090610d1a908301846123a0565b60208152600061219460208301846123a0565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b600082198211156125c7576125c76126ac565b500190565b6000826125db576125db6126c2565b500490565b60008160001904831182151516156125fa576125fa6126ac565b500290565b600082821015612611576126116126ac565b500390565b60005b83811015612631578181015183820152602001612619565b838111156112ca5750506000910152565b600181811c9082168061265657607f821691505b6020821081141561267757634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415612691576126916126ac565b5060010190565b6000826126a7576126a76126c2565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461148657600080fd5b6001600160e01b03198116811461148657600080fdfe697066733a2f2f516d5041635a477a587a63724366733339396e41534b32534a474542796a5a723361744270474d4c34767a666a31a2646970667358221220aeb7ae7d5c86e92f70a9e0a4a7b672604f3c4f43f026e19f7f3749f6406a0b0b64736f6c63430008070033
Deployed Bytecode
0x60806040526004361061019c5760003560e01c8063715018a6116100ec578063a22cb4651161008a578063c87b56dd11610064578063c87b56dd1461047b578063e17b35ed1461049b578063e985e9c5146104cb578063f2fde38b1461051457600080fd5b8063a22cb46514610426578063b88d4fde14610446578063be9a65551461046657600080fd5b806395d89b41116100c657806395d89b41146103be5780639980ec86146103d357806399979ce4146103f3578063a14481941461041357600080fd5b8063715018a6146103715780638a55d36e146103865780638da5cb5b146103a057600080fd5b80632f745c59116101595780634f6ccce7116101335780634f6ccce7146102f15780635a6b26ba146103115780636352211e1461033157806370a082311461035157600080fd5b80632f745c591461029157806340c10f19146102b157806342842e0e146102d157600080fd5b806301ffc9a7146101a157806306fdde03146101d6578063081812fc146101f8578063095ea7b31461023057806318160ddd1461025257806323b872dd14610271575b600080fd5b3480156101ad57600080fd5b506101c16101bc3660046122f4565b610534565b60405190151581526020015b60405180910390f35b3480156101e257600080fd5b506101eb61055f565b6040516101cd91906124c9565b34801561020457600080fd5b50610218610213366004612387565b6105f1565b6040516001600160a01b0390911681526020016101cd565b34801561023c57600080fd5b5061025061024b36600461219b565b61068b565b005b34801561025e57600080fd5b506009545b6040519081526020016101cd565b34801561027d57600080fd5b5061025061028c366004612200565b6107a1565b34801561029d57600080fd5b506102636102ac36600461219b565b6107d2565b3480156102bd57600080fd5b506102506102cc36600461219b565b610868565b3480156102dd57600080fd5b506102506102ec366004612200565b610976565b3480156102fd57600080fd5b5061026361030c366004612387565b610991565b34801561031d57600080fd5b5061025061032c36600461219b565b610a24565b34801561033d57600080fd5b5061021861034c366004612387565b610acf565b34801561035d57600080fd5b5061026361036c366004612177565b610b46565b34801561037d57600080fd5b50610250610bcd565b34801561039257600080fd5b50600b546101c19060ff1681565b3480156103ac57600080fd5b506000546001600160a01b0316610218565b3480156103ca57600080fd5b506101eb610c03565b3480156103df57600080fd5b506102636103ee366004612387565b610c12565b3480156103ff57600080fd5b5061025061040e36600461232e565b610d45565b61025061042136600461219b565b610dfc565b34801561043257600080fd5b506102506104413660046122c1565b61128d565b34801561045257600080fd5b50610250610461366004612241565b611298565b34801561047257600080fd5b506102506112d0565b34801561048757600080fd5b506101eb610496366004612387565b61130e565b3480156104a757600080fd5b506101c16104b6366004612177565b60186020526000908152604090205460ff1681565b3480156104d757600080fd5b506101c16104e63660046121c7565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205460ff1690565b34801561052057600080fd5b5061025061052f366004612177565b6113ee565b60006001600160e01b0319821663780e9d6360e01b1480610559575061055982611489565b92915050565b60606001805461056e90612642565b80601f016020809104026020016040519081016040528092919081815260200182805461059a90612642565b80156105e75780601f106105bc576101008083540402835291602001916105e7565b820191906000526020600020905b8154815290600101906020018083116105ca57829003601f168201915b5050505050905090565b6000818152600360205260408120546001600160a01b031661066f5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600560205260409020546001600160a01b031690565b600061069682610acf565b9050806001600160a01b0316836001600160a01b031614156107045760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610666565b336001600160a01b0382161480610720575061072081336104e6565b6107925760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610666565b61079c83836114d9565b505050565b6107ab3382611547565b6107c75760405162461bcd60e51b815260040161066690612563565b61079c83838361163e565b60006107dd83610b46565b821061083f5760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b6064820152608401610666565b506001600160a01b03919091166000908152600760209081526040808320938352929052205490565b6000546001600160a01b031633146108925760405162461bcd60e51b81526004016106669061252e565b601154601254106108d05760405162461bcd60e51b8152602060048201526008602482015267135a5b9d08195b9960c21b6044820152606401610666565b60005b8181101561092d5760006108e6600f5490565b90506108f6600f80546001019055565b61090084826117e5565b60016012600082825461091391906125b4565b9091555082915061092590508161267d565b9150506108d3565b506001600160a01b03821660009081526018602052604090205460ff16610972576001600160a01b0382166000908152601860205260409020805460ff191660011790555b5050565b61079c83838360405180602001604052806000815250611298565b600061099c60095490565b82106109ff5760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b6064820152608401610666565b60098281548110610a1257610a126126ee565b90600052602060002001549050919050565b6000546001600160a01b03163314610a4e5760405162461bcd60e51b81526004016106669061252e565b6001600160a01b038216610a995760405162461bcd60e51b8152602060048201526012602482015271546f2063616e206e6f74206265207a65726f60701b6044820152606401610666565b6040516001600160a01b0383169082156108fc029083906000818181858888f1935050505015801561079c573d6000803e3d6000fd5b6000818152600360205260408120546001600160a01b0316806105595760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610666565b60006001600160a01b038216610bb15760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610666565b506001600160a01b031660009081526004602052604090205490565b6000546001600160a01b03163314610bf75760405162461bcd60e51b81526004016106669061252e565b610c0160006117ff565b565b60606002805461056e90612642565b600060105482610c2160095490565b610c2b91906125b4565b1115610c795760405162461bcd60e51b815260206004820152601e60248201527f4d6178696d756d206d696e74207175616e7469747920657863656564656400006044820152606401610666565b336000610c8582610b46565b90506000610c9385836125b4565b9050846000108015610ca757506013548111155b610ce65760405162461bcd60e51b815260206004820152601060248201526f496e76616c6964207175616e7469747960801b6044820152606401610666565b601454811115610d2f57601454821015610d2457600082601454610d0a91906125ff565b905060155481610d1a91906125e0565b9695505050505050565b506000949350505050565b601554610d3c90866125e0565b95945050505050565b6000546001600160a01b03163314610d6f5760405162461bcd60e51b81526004016106669061252e565b600c8054610d7c90612642565b15159050610d99578151610d9790600c906020850190612068565b505b806000108015610daa575080600d54105b8015610db857506009548111155b610df65760405162461bcd60e51b815260206004820152600f60248201526e125b9d985b1a59081d1bdad95b9a59608a1b6044820152606401610666565b600d5550565b3360009081526019602052604090205482906001600160a01b0316610f51576001600160a01b038116610e715760405162461bcd60e51b815260206004820152601b60248201527f5265636f6d6d656e6465722063616e206e6f74206265207a65726f00000000006044820152606401610666565b336001600160a01b0382161415610eca5760405162461bcd60e51b815260206004820152601e60248201527f5265636f6d6d656e6465722063616e206e6f7420746f2062652073616d6500006044820152606401610666565b6001600160a01b03811660009081526018602052604090205460ff16610f285760405162461bcd60e51b8152602060048201526013602482015272149958dbdb5b595b99195c881b9bc81b5a5b9d606a1b6044820152606401610666565b33600090815260196020526040902080546001600160a01b0319166001600160a01b0383161790555b600b5460ff16610f915760405162461bcd60e51b815260206004820152600b60248201526a139bdd081cdd185c9d195960aa1b6044820152606401610666565b60105482610f9e60095490565b610fa891906125b4565b1115610ff65760405162461bcd60e51b815260206004820152601e60248201527f4d6178696d756d206d696e74207175616e7469747920657863656564656400006044820152606401610666565b33600061100282610b46565b9050600061101085836125b4565b905084600010801561102457506013548111155b6110635760405162461bcd60e51b815260206004820152601060248201526f496e76616c6964207175616e7469747960801b6044820152606401610666565b601454811115611146576014548210156111415760008260145461108791906125ff565b905060006015548261109991906125e0565b9050348111156110eb5760405162461bcd60e51b815260206004820152601d60248201527f496e73756666696369656e74207061796d656e74207175616e746974790000006044820152606401610666565b34811015611134576001600160a01b0385166108fc61110a83346125ff565b6040518115909202916000818181858888f19350505050158015611132573d6000803e3d6000fd5b505b61113e858361184f565b50505b6111fd565b60006015548661115691906125e0565b9050348111156111a85760405162461bcd60e51b815260206004820152601d60248201527f496e73756666696369656e74207061796d656e74207175616e746974790000006044820152606401610666565b348110156111f1576001600160a01b0384166108fc6111c783346125ff565b6040518115909202916000818181858888f193505050501580156111ef573d6000803e3d6000fd5b505b6111fb848761184f565b505b60005b85811015611240576000611213600f5490565b9050611223600f80546001019055565b61122d85826117e5565b50806112388161267d565b915050611200565b506001600160a01b03831660009081526018602052604090205460ff16611285576001600160a01b0383166000908152601860205260409020805460ff191660011790555b505050505050565b610972338383611972565b6112a23383611547565b6112be5760405162461bcd60e51b815260040161066690612563565b6112ca84848484611a41565b50505050565b6000546001600160a01b031633146112fa5760405162461bcd60e51b81526004016106669061252e565b600b805460ff19811660ff90911615179055565b6000818152600360205260409020546060906001600160a01b031661138f5760405162461bcd60e51b815260206004820152603160248201527f45524337323155524953746f726167653a2055524920717565727920666f72206044820152703737b732bc34b9ba32b73a103a37b5b2b760791b6064820152608401610666565b6000600c805461139e90612642565b90501180156113af5750600d548211155b156113e657600c6113bf83611a74565b6040516020016113d09291906123e8565b6040516020818303038152906040529050919050565b610559611b72565b6000546001600160a01b031633146114185760405162461bcd60e51b81526004016106669061252e565b6001600160a01b03811661147d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610666565b611486816117ff565b50565b60006001600160e01b031982166380ac58cd60e01b14806114ba57506001600160e01b03198216635b5e139f60e01b145b8061055957506301ffc9a760e01b6001600160e01b0319831614610559565b600081815260056020526040902080546001600160a01b0319166001600160a01b038416908117909155819061150e82610acf565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600360205260408120546001600160a01b03166115c05760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610666565b60006115cb83610acf565b9050806001600160a01b0316846001600160a01b0316148061161257506001600160a01b0380821660009081526006602090815260408083209388168352929052205460ff165b806116365750836001600160a01b031661162b846105f1565b6001600160a01b0316145b949350505050565b826001600160a01b031661165182610acf565b6001600160a01b0316146116b55760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b6064820152608401610666565b6001600160a01b0382166117175760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610666565b611722838383611b92565b61172d6000826114d9565b6001600160a01b03831660009081526004602052604081208054600192906117569084906125ff565b90915550506001600160a01b03821660009081526004602052604081208054600192906117849084906125b4565b909155505060008181526003602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b610972828260405180602001604052806000815250611c4a565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03808316600090815260196020526040812054909116801580159061189357506001600160a01b03811660009081526018602052604090205460ff165b156118dd57806001600160a01b03166108fc846016546118b391906125e0565b6040518115909202916000818181858888f193505050501580156118db573d6000803e3d6000fd5b505b6001600160a01b038082166000908152601960205260409020548116908316811480159061192357506001600160a01b03811660009081526018602052604090205460ff165b1561196b57806001600160a01b03166108fc8560175461194391906125e0565b6040518115909202916000818181858888f19350505050158015611285573d6000803e3d6000fd5b5050505050565b816001600160a01b0316836001600160a01b031614156119d45760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610666565b6001600160a01b03838116600081815260066020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b611a4c84848461163e565b611a5884848484611c7d565b6112ca5760405162461bcd60e51b8152600401610666906124dc565b606081611a985750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611ac25780611aac8161267d565b9150611abb9050600a836125cc565b9150611a9c565b60008167ffffffffffffffff811115611add57611add612704565b6040519080825280601f01601f191660200182016040528015611b07576020820181803683370190505b5090505b841561163657611b1c6001836125ff565b9150611b29600a86612698565b611b349060306125b4565b60f81b818381518110611b4957611b496126ee565b60200101906001600160f81b031916908160001a905350611b6b600a866125cc565b9450611b0b565b606060405180606001604052806035815260200161274660359139905090565b6001600160a01b038316611bed57611be881600980546000838152600a60205260408120829055600182018355919091527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af0155565b611c10565b816001600160a01b0316836001600160a01b031614611c1057611c108382611d8a565b6001600160a01b038216611c275761079c81611e27565b826001600160a01b0316826001600160a01b03161461079c5761079c8282611ed6565b611c548383611f1a565b611c616000848484611c7d565b61079c5760405162461bcd60e51b8152600401610666906124dc565b60006001600160a01b0384163b15611d7f57604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611cc1903390899088908890600401612496565b602060405180830381600087803b158015611cdb57600080fd5b505af1925050508015611d0b575060408051601f3d908101601f19168201909252611d0891810190612311565b60015b611d65573d808015611d39576040519150601f19603f3d011682016040523d82523d6000602084013e611d3e565b606091505b508051611d5d5760405162461bcd60e51b8152600401610666906124dc565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611636565b506001949350505050565b60006001611d9784610b46565b611da191906125ff565b600083815260086020526040902054909150808214611df4576001600160a01b03841660009081526007602090815260408083208584528252808320548484528184208190558352600890915290208190555b5060009182526008602090815260408084208490556001600160a01b039094168352600781528383209183525290812055565b600954600090611e39906001906125ff565b6000838152600a602052604081205460098054939450909284908110611e6157611e616126ee565b906000526020600020015490508060098381548110611e8257611e826126ee565b6000918252602080832090910192909255828152600a90915260408082208490558582528120556009805480611eba57611eba6126d8565b6001900381819060005260206000200160009055905550505050565b6000611ee183610b46565b6001600160a01b039093166000908152600760209081526040808320868452825280832085905593825260089052919091209190915550565b6001600160a01b038216611f705760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610666565b6000818152600360205260409020546001600160a01b031615611fd55760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610666565b611fe160008383611b92565b6001600160a01b038216600090815260046020526040812080546001929061200a9084906125b4565b909155505060008181526003602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b82805461207490612642565b90600052602060002090601f01602090048101928261209657600085556120dc565b82601f106120af57805160ff19168380011785556120dc565b828001600101855582156120dc579182015b828111156120dc5782518255916020019190600101906120c1565b506120e89291506120ec565b5090565b5b808211156120e857600081556001016120ed565b600067ffffffffffffffff8084111561211c5761211c612704565b604051601f8501601f19908116603f0116810190828211818310171561214457612144612704565b8160405280935085815286868601111561215d57600080fd5b858560208301376000602087830101525050509392505050565b60006020828403121561218957600080fd5b81356121948161271a565b9392505050565b600080604083850312156121ae57600080fd5b82356121b98161271a565b946020939093013593505050565b600080604083850312156121da57600080fd5b82356121e58161271a565b915060208301356121f58161271a565b809150509250929050565b60008060006060848603121561221557600080fd5b83356122208161271a565b925060208401356122308161271a565b929592945050506040919091013590565b6000806000806080858703121561225757600080fd5b84356122628161271a565b935060208501356122728161271a565b925060408501359150606085013567ffffffffffffffff81111561229557600080fd5b8501601f810187136122a657600080fd5b6122b587823560208401612101565b91505092959194509250565b600080604083850312156122d457600080fd5b82356122df8161271a565b9150602083013580151581146121f557600080fd5b60006020828403121561230657600080fd5b81356121948161272f565b60006020828403121561232357600080fd5b81516121948161272f565b6000806040838503121561234157600080fd5b823567ffffffffffffffff81111561235857600080fd5b8301601f8101851361236957600080fd5b61237885823560208401612101565b95602094909401359450505050565b60006020828403121561239957600080fd5b5035919050565b600081518084526123b8816020860160208601612616565b601f01601f19169290920160200192915050565b600081516123de818560208601612616565b9290920192915050565b600080845481600182811c91508083168061240457607f831692505b602080841082141561242457634e487b7160e01b86526022600452602486fd5b818015612438576001811461244957612476565b60ff19861689528489019650612476565b60008b81526020902060005b8681101561246e5781548b820152908501908301612455565b505084890196505b505050505050610d3c61249082602f60f81b815260010190565b856123cc565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090610d1a908301846123a0565b60208152600061219460208301846123a0565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b600082198211156125c7576125c76126ac565b500190565b6000826125db576125db6126c2565b500490565b60008160001904831182151516156125fa576125fa6126ac565b500290565b600082821015612611576126116126ac565b500390565b60005b83811015612631578181015183820152602001612619565b838111156112ca5750506000910152565b600181811c9082168061265657607f821691505b6020821081141561267757634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415612691576126916126ac565b5060010190565b6000826126a7576126a76126c2565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461148657600080fd5b6001600160e01b03198116811461148657600080fdfe697066733a2f2f516d5041635a477a587a63724366733339396e41534b32534a474542796a5a723361744270474d4c34767a666a31a2646970667358221220aeb7ae7d5c86e92f70a9e0a4a7b672604f3c4f43f026e19f7f3749f6406a0b0b64736f6c63430008070033
Deployed Bytecode Sourcemap
46890:4639:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38715:224;;;;;;;;;;-1:-1:-1;38715:224:0;;;;;:::i;:::-;;:::i;:::-;;;7588:14:1;;7581:22;7563:41;;7551:2;7536:18;38715:224:0;;;;;;;;25729:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;27289:221::-;;;;;;;;;;-1:-1:-1;27289:221:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;6886:32:1;;;6868:51;;6856:2;6841:18;27289:221:0;6722:203:1;26812:411:0;;;;;;;;;;-1:-1:-1;26812:411:0;;;;;:::i;:::-;;:::i;:::-;;39355:113;;;;;;;;;;-1:-1:-1;39443:10:0;:17;39355:113;;;18682:25:1;;;18670:2;18655:18;39355:113:0;18536:177:1;28039:339:0;;;;;;;;;;-1:-1:-1;28039:339:0;;;;;:::i;:::-;;:::i;39023:256::-;;;;;;;;;;-1:-1:-1;39023:256:0;;;;;:::i;:::-;;:::i;49948:408::-;;;;;;;;;;-1:-1:-1;49948:408:0;;;;;:::i;:::-;;:::i;28449:185::-;;;;;;;;;;-1:-1:-1;28449:185:0;;;;;:::i;:::-;;:::i;39545:233::-;;;;;;;;;;-1:-1:-1;39545:233:0;;;;;:::i;:::-;;:::i;50366:168::-;;;;;;;;;;-1:-1:-1;50366:168:0;;;;;:::i;:::-;;:::i;25423:239::-;;;;;;;;;;-1:-1:-1;25423:239:0;;;;;:::i;:::-;;:::i;25153:208::-;;;;;;;;;;-1:-1:-1;25153:208:0;;;;;:::i;:::-;;:::i;5697:103::-;;;;;;;;;;;;;:::i;45033:19::-;;;;;;;;;;-1:-1:-1;45033:19:0;;;;;;;;5046:87;;;;;;;;;;-1:-1:-1;5092:7:0;5119:6;-1:-1:-1;;;;;5119:6:0;5046:87;;25898:104;;;;;;;;;;;;;:::i;47619:707::-;;;;;;;;;;-1:-1:-1;47619:707:0;;;;;:::i;:::-;;:::i;45293:325::-;;;;;;;;;;-1:-1:-1;45293:325:0;;;;;:::i;:::-;;:::i;48338:1594::-;;;;;;:::i;:::-;;:::i;27582:155::-;;;;;;;;;;-1:-1:-1;27582:155:0;;;;;:::i;:::-;;:::i;28705:328::-;;;;;;;;;;-1:-1:-1;28705:328:0;;;;;:::i;:::-;;:::i;45211:72::-;;;;;;;;;;;;;:::i;45689:384::-;;;;;;;;;;-1:-1:-1;45689:384:0;;;;;:::i;:::-;;:::i;47301:38::-;;;;;;;;;;-1:-1:-1;47301:38:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;27808:164;;;;;;;;;;-1:-1:-1;27808:164:0;;;;;:::i;:::-;-1:-1:-1;;;;;27929:25:0;;;27905:4;27929:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;27808:164;5955:201;;;;;;;;;;-1:-1:-1;5955:201:0;;;;;:::i;:::-;;:::i;38715:224::-;38817:4;-1:-1:-1;;;;;;38841:50:0;;-1:-1:-1;;;38841:50:0;;:90;;;38895:36;38919:11;38895:23;:36::i;:::-;38834:97;38715:224;-1:-1:-1;;38715:224:0:o;25729:100::-;25783:13;25816:5;25809:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25729:100;:::o;27289:221::-;27365:7;30632:16;;;:7;:16;;;;;;-1:-1:-1;;;;;30632:16:0;27385:73;;;;-1:-1:-1;;;27385:73:0;;15689:2:1;27385:73:0;;;15671:21:1;15728:2;15708:18;;;15701:30;15767:34;15747:18;;;15740:62;-1:-1:-1;;;15818:18:1;;;15811:42;15870:19;;27385:73:0;;;;;;;;;-1:-1:-1;27478:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;27478:24:0;;27289:221::o;26812:411::-;26893:13;26909:23;26924:7;26909:14;:23::i;:::-;26893:39;;26957:5;-1:-1:-1;;;;;26951:11:0;:2;-1:-1:-1;;;;;26951:11:0;;;26943:57;;;;-1:-1:-1;;;26943:57:0;;17146:2:1;26943:57:0;;;17128:21:1;17185:2;17165:18;;;17158:30;17224:34;17204:18;;;17197:62;-1:-1:-1;;;17275:18:1;;;17268:31;17316:19;;26943:57:0;16944:397:1;26943:57:0;3993:10;-1:-1:-1;;;;;27035:21:0;;;;:62;;-1:-1:-1;27060:37:0;27077:5;3993:10;27808:164;:::i;27060:37::-;27013:168;;;;-1:-1:-1;;;27013:168:0;;12971:2:1;27013:168:0;;;12953:21:1;13010:2;12990:18;;;12983:30;13049:34;13029:18;;;13022:62;13120:26;13100:18;;;13093:54;13164:19;;27013:168:0;12769:420:1;27013:168:0;27194:21;27203:2;27207:7;27194:8;:21::i;:::-;26882:341;26812:411;;:::o;28039:339::-;28234:41;3993:10;28267:7;28234:18;:41::i;:::-;28226:103;;;;-1:-1:-1;;;28226:103:0;;;;;;;:::i;:::-;28342:28;28352:4;28358:2;28362:7;28342:9;:28::i;39023:256::-;39120:7;39156:23;39173:5;39156:16;:23::i;:::-;39148:5;:31;39140:87;;;;-1:-1:-1;;;39140:87:0;;8041:2:1;39140:87:0;;;8023:21:1;8080:2;8060:18;;;8053:30;8119:34;8099:18;;;8092:62;-1:-1:-1;;;8170:18:1;;;8163:41;8221:19;;39140:87:0;7839:407:1;39140:87:0;-1:-1:-1;;;;;;39245:19:0;;;;;;;;:12;:19;;;;;;;;:26;;;;;;;;;39023:256::o;49948:408::-;5092:7;5119:6;-1:-1:-1;;;;;5119:6:0;3993:10;5266:23;5258:68;;;;-1:-1:-1;;;5258:68:0;;;;;;;:::i;:::-;50037:7:::1;;50026:8;;:18;50018:39;;;::::0;-1:-1:-1;;;50018:39:0;;16810:2:1;50018:39:0::1;::::0;::::1;16792:21:1::0;16849:1;16829:18;;;16822:29;-1:-1:-1;;;16867:18:1;;;16860:38;16915:18;;50018:39:0::1;16608:331:1::0;50018:39:0::1;50074:6;50070:208;50090:5;50086:1;:9;50070:208;;;50116:15;50134:25;:15;883:14:::0;;791:114;50134:25:::1;50116:43;;50174:27;:15;1002:19:::0;;1020:1;1002:19;;;913:127;50174:27:::1;50216:22;50226:2;50230:7;50216:9;:22::i;:::-;50265:1;50253:8;;:13;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;50097:3:0;;-1:-1:-1;50097:3:0::1;::::0;-1:-1:-1;50097:3:0;::::1;:::i;:::-;;;;50070:208;;;-1:-1:-1::0;;;;;;50294:10:0;::::1;;::::0;;;:6:::1;:10;::::0;;;;;::::1;;50290:59;;-1:-1:-1::0;;;;;50320:10:0;::::1;;::::0;;;:6:::1;:10;::::0;;;;:17;;-1:-1:-1;;50320:17:0::1;50333:4;50320:17;::::0;;50290:59:::1;49948:408:::0;;:::o;28449:185::-;28587:39;28604:4;28610:2;28614:7;28587:39;;;;;;;;;;;;:16;:39::i;39545:233::-;39620:7;39656:30;39443:10;:17;;39355:113;39656:30;39648:5;:38;39640:95;;;;-1:-1:-1;;;39640:95:0;;18325:2:1;39640:95:0;;;18307:21:1;18364:2;18344:18;;;18337:30;18403:34;18383:18;;;18376:62;-1:-1:-1;;;18454:18:1;;;18447:42;18506:19;;39640:95:0;18123:408:1;39640:95:0;39753:10;39764:5;39753:17;;;;;;;;:::i;:::-;;;;;;;;;39746:24;;39545:233;;;:::o;50366:168::-;5092:7;5119:6;-1:-1:-1;;;;;5119:6:0;3993:10;5266:23;5258:68;;;;-1:-1:-1;;;5258:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;50457:16:0;::::1;50449:47;;;::::0;-1:-1:-1;;;50449:47:0;;16463:2:1;50449:47:0::1;::::0;::::1;16445:21:1::0;16502:2;16482:18;;;16475:30;-1:-1:-1;;;16521:18:1;;;16514:48;16579:18;;50449:47:0::1;16261:342:1::0;50449:47:0::1;50507:19;::::0;-1:-1:-1;;;;;50507:11:0;::::1;::::0;:19;::::1;;;::::0;50519:6;;50507:19:::1;::::0;;;50519:6;50507:11;:19;::::1;;;;;;;;;;;;;::::0;::::1;;;;25423:239:::0;25495:7;25531:16;;;:7;:16;;;;;;-1:-1:-1;;;;;25531:16:0;25566:19;25558:73;;;;-1:-1:-1;;;25558:73:0;;14152:2:1;25558:73:0;;;14134:21:1;14191:2;14171:18;;;14164:30;14230:34;14210:18;;;14203:62;-1:-1:-1;;;14281:18:1;;;14274:39;14330:19;;25558:73:0;13950:405:1;25153:208:0;25225:7;-1:-1:-1;;;;;25253:19:0;;25245:74;;;;-1:-1:-1;;;25245:74:0;;13741:2:1;25245:74:0;;;13723:21:1;13780:2;13760:18;;;13753:30;13819:34;13799:18;;;13792:62;-1:-1:-1;;;13870:18:1;;;13863:40;13920:19;;25245:74:0;13539:406:1;25245:74:0;-1:-1:-1;;;;;;25337:16:0;;;;;:9;:16;;;;;;;25153:208::o;5697:103::-;5092:7;5119:6;-1:-1:-1;;;;;5119:6:0;3993:10;5266:23;5258:68;;;;-1:-1:-1;;;5258:68:0;;;;;;;:::i;:::-;5762:30:::1;5789:1;5762:18;:30::i;:::-;5697:103::o:0;25898:104::-;25954:13;25987:7;25980:14;;;;;:::i;47619:707::-;47676:4;47729:9;;47716;47700:13;39443:10;:17;;39355:113;47700:13;:25;;;;:::i;:::-;:38;;47692:81;;;;-1:-1:-1;;;47692:81:0;;17548:2:1;47692:81:0;;;17530:21:1;17587:2;17567:18;;;17560:30;17626:32;17606:18;;;17599:60;17676:18;;47692:81:0;17346:354:1;47692:81:0;3993:10;47784:14;47844:17;3993:10;47844:9;:17::i;:::-;47824:37;-1:-1:-1;47872:16:0;47891:24;47906:9;47824:37;47891:24;:::i;:::-;47872:43;;47938:9;47934:1;:13;:39;;;;;47966:7;;47951:11;:22;;47934:39;47926:68;;;;-1:-1:-1;;;47926:68:0;;13396:2:1;47926:68:0;;;13378:21:1;13435:2;13415:18;;;13408:30;-1:-1:-1;;;13454:18:1;;;13447:46;13510:18;;47926:68:0;13194:340:1;47926:68:0;48022:7;;48008:11;:21;48005:314;;;48063:7;;48048:12;:22;48045:198;;;48090:13;48116:12;48106:7;;:22;;;;:::i;:::-;48090:38;;48165:15;;48154:8;:26;;;;:::i;:::-;48147:33;47619:707;-1:-1:-1;;;;;;47619:707:0:o;48045:198::-;-1:-1:-1;48226:1:0;;47619:707;-1:-1:-1;;;;47619:707:0:o;48005:314::-;48292:15;;48280:27;;:9;:27;:::i;:::-;48273:34;47619:707;-1:-1:-1;;;;;47619:707:0:o;45293:325::-;5092:7;5119:6;-1:-1:-1;;;;;5119:6:0;3993:10;5266:23;5258:68;;;;-1:-1:-1;;;5258:68:0;;;;;;;:::i;:::-;45388:9:::1;45382:23;;;;;:::i;:::-;45377:28:::0;45374:74:::1;::::0;-1:-1:-1;45374:74:0::1;;45421:15:::0;;::::1;::::0;:9:::1;::::0;:15:::1;::::0;::::1;::::0;::::1;:::i;:::-;;45374:74;45472:11;45468:1;:15;:48;;;;;45505:11;45487:15;;:29;45468:48;:80;;;;-1:-1:-1::0;39443:10:0;:17;45520:11:::1;:28;;45468:80;45460:108;;;::::0;-1:-1:-1;;;45460:108:0;;12627:2:1;45460:108:0::1;::::0;::::1;12609:21:1::0;12666:2;12646:18;;;12639:30;-1:-1:-1;;;12685:18:1;;;12678:45;12740:18;;45460:108:0::1;12425:339:1::0;45460:108:0::1;45581:15;:29:::0;-1:-1:-1;45293:325:0:o;48338:1594::-;51172:10;51195:1;51160:23;;;:11;:23;;;;;;48436:12;;-1:-1:-1;;;;;51160:23:0;51157:338;;-1:-1:-1;;;;;51221:26:0;;51213:66;;;;-1:-1:-1;;;51213:66:0;;12271:2:1;51213:66:0;;;12253:21:1;12310:2;12290:18;;;12283:30;12349:29;12329:18;;;12322:57;12396:18;;51213:66:0;12069:351:1;51213:66:0;51302:10;-1:-1:-1;;;;;51302:26:0;;;;51294:69;;;;-1:-1:-1;;;51294:69:0;;11499:2:1;51294:69:0;;;11481:21:1;11538:2;11518:18;;;11511:30;11577:32;11557:18;;;11550:60;11627:18;;51294:69:0;11297:354:1;51294:69:0;-1:-1:-1;;;;;51386:20:0;;;;;;:6;:20;;;;;;;;51378:52;;;;-1:-1:-1;;;51378:52:0;;14562:2:1;51378:52:0;;;14544:21:1;14601:2;14581:18;;;14574:30;-1:-1:-1;;;14620:18:1;;;14613:49;14679:18;;51378:52:0;14360:343:1;51378:52:0;51457:10;51445:23;;;;:11;:23;;;;;:38;;-1:-1:-1;;;;;;51445:38:0;-1:-1:-1;;;;;51445:38:0;;;;;51157:338;48470:7:::1;::::0;::::1;;48462:31;;;::::0;-1:-1:-1;;;48462:31:0;;8453:2:1;48462:31:0::1;::::0;::::1;8435:21:1::0;8492:2;8472:18;;;8465:30;-1:-1:-1;;;8511:18:1;;;8504:41;8562:18;;48462:31:0::1;8251:335:1::0;48462:31:0::1;48543:9;;48530;48514:13;39443:10:::0;:17;;39355:113;48514:13:::1;:25;;;;:::i;:::-;:38;;48506:81;;;::::0;-1:-1:-1;;;48506:81:0;;17548:2:1;48506:81:0::1;::::0;::::1;17530:21:1::0;17587:2;17567:18;;;17560:30;17626:32;17606:18;;;17599:60;17676:18;;48506:81:0::1;17346:354:1::0;48506:81:0::1;3993:10:::0;48600:15:::1;48661:17;3993:10:::0;48661:9:::1;:17::i;:::-;48641:37:::0;-1:-1:-1;48689:16:0::1;48708:24;48723:9:::0;48641:37;48708:24:::1;:::i;:::-;48689:43;;48755:9;48751:1;:13;:39;;;;;48783:7;;48768:11;:22;;48751:39;48743:68;;;::::0;-1:-1:-1;;;48743:68:0;;13396:2:1;48743:68:0::1;::::0;::::1;13378:21:1::0;13435:2;13415:18;;;13408:30;-1:-1:-1;;;13454:18:1;;;13447:46;13510:18;;48743:68:0::1;13194:340:1::0;48743:68:0::1;48843:7;;48829:11;:21;48826:816;;;48884:7;;48869:12;:22;48866:435;;;48911:13;48937:12;48927:7;;:22;;;;:::i;:::-;48911:38;;48968:15;48997;;48986:8;:26;;;;:::i;:::-;48968:44;;49053:9;49039:10;:23;;49031:65;;;::::0;-1:-1:-1;;;49031:65:0;;11141:2:1;49031:65:0::1;::::0;::::1;11123:21:1::0;11180:2;11160:18;;;11153:30;11219:31;11199:18;;;11192:59;11268:18;;49031:65:0::1;10939:353:1::0;49031:65:0::1;49131:9;49118:10;:22;49115:117;;;-1:-1:-1::0;;;;;49164:24:0;::::1;:48;49189:22;49201:10:::0;49189:9:::1;:22;:::i;:::-;49164:48;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;49115:117;49250:35;49268:6;49276:8;49250:17;:35::i;:::-;48892:409;;48866:435;48826:816;;;49331:15;49361;;49349:9;:27;;;;:::i;:::-;49331:45;;49413:9;49399:10;:23;;49391:65;;;::::0;-1:-1:-1;;;49391:65:0;;11141:2:1;49391:65:0::1;::::0;::::1;11123:21:1::0;11180:2;11160:18;;;11153:30;11219:31;11199:18;;;11192:59;11268:18;;49391:65:0::1;10939:353:1::0;49391:65:0::1;49487:9;49474:10;:22;49471:109;;;-1:-1:-1::0;;;;;49516:24:0;::::1;:48;49541:22;49553:10:::0;49541:9:::1;:22;:::i;:::-;49516:48;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;49471:109;49594:36;49612:6;49620:9;49594:17;:36::i;:::-;49316:326;48826:816;49660:6;49656:188;49676:9;49672:1;:13;49656:188;;;49706:15;49724:25;:15;883:14:::0;;791:114;49724:25:::1;49706:43;;49764:27;:15;1002:19:::0;;1020:1;1002:19;;;913:127;49764:27:::1;49806:26;49816:6;49824:7;49806:9;:26::i;:::-;-1:-1:-1::0;49687:3:0;::::1;::::0;::::1;:::i;:::-;;;;49656:188;;;-1:-1:-1::0;;;;;;49860:14:0;::::1;;::::0;;;:6:::1;:14;::::0;;;;;::::1;;49856:67;;-1:-1:-1::0;;;;;49890:14:0;::::1;;::::0;;;:6:::1;:14;::::0;;;;:21;;-1:-1:-1;;49890:21:0::1;49907:4;49890:21;::::0;;49856:67:::1;48449:1483;;;48338:1594:::0;;;:::o;27582:155::-;27677:52;3993:10;27710:8;27720;27677:18;:52::i;28705:328::-;28880:41;3993:10;28913:7;28880:18;:41::i;:::-;28872:103;;;;-1:-1:-1;;;28872:103:0;;;;;;;:::i;:::-;28986:39;29000:4;29006:2;29010:7;29019:5;28986:13;:39::i;:::-;28705:328;;;;:::o;45211:72::-;5092:7;5119:6;-1:-1:-1;;;;;5119:6:0;3993:10;5266:23;5258:68;;;;-1:-1:-1;;;5258:68:0;;;;;;;:::i;:::-;45268:7:::1;::::0;;-1:-1:-1;;45257:18:0;::::1;45268:7;::::0;;::::1;45267:8;45257:18;::::0;;45211:72::o;45689:384::-;30608:4;30632:16;;;:7;:16;;;;;;45762:13;;-1:-1:-1;;;;;30632:16:0;45788:78;;;;-1:-1:-1;;;45788:78:0;;15271:2:1;45788:78:0;;;15253:21:1;15310:2;15290:18;;;15283:30;15349:34;15329:18;;;15322:62;-1:-1:-1;;;15400:18:1;;;15393:47;15457:19;;45788:78:0;15069:413:1;45788:78:0;45909:1;45889:9;45883:23;;;;;:::i;:::-;;;:27;:57;;;;;45925:15;;45914:7;:26;;45883:57;45879:157;;;45988:9;46004:18;:7;:16;:18::i;:::-;45971:52;;;;;;;;;:::i;:::-;;;;;;;;;;;;;45957:67;;45689:384;;;:::o;45879:157::-;46055:10;:8;:10::i;5955:201::-;5092:7;5119:6;-1:-1:-1;;;;;5119:6:0;3993:10;5266:23;5258:68;;;;-1:-1:-1;;;5258:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6044:22:0;::::1;6036:73;;;::::0;-1:-1:-1;;;6036:73:0;;9212:2:1;6036:73:0::1;::::0;::::1;9194:21:1::0;9251:2;9231:18;;;9224:30;9290:34;9270:18;;;9263:62;-1:-1:-1;;;9341:18:1;;;9334:36;9387:19;;6036:73:0::1;9010:402:1::0;6036:73:0::1;6120:28;6139:8;6120:18;:28::i;:::-;5955:201:::0;:::o;24784:305::-;24886:4;-1:-1:-1;;;;;;24923:40:0;;-1:-1:-1;;;24923:40:0;;:105;;-1:-1:-1;;;;;;;24980:48:0;;-1:-1:-1;;;24980:48:0;24923:105;:158;;;-1:-1:-1;;;;;;;;;;17298:40:0;;;25045:36;17189:157;34689:174;34764:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;34764:29:0;-1:-1:-1;;;;;34764:29:0;;;;;;;;:24;;34818:23;34764:24;34818:14;:23::i;:::-;-1:-1:-1;;;;;34809:46:0;;;;;;;;;;;34689:174;;:::o;30837:348::-;30930:4;30632:16;;;:7;:16;;;;;;-1:-1:-1;;;;;30632:16:0;30947:73;;;;-1:-1:-1;;;30947:73:0;;11858:2:1;30947:73:0;;;11840:21:1;11897:2;11877:18;;;11870:30;11936:34;11916:18;;;11909:62;-1:-1:-1;;;11987:18:1;;;11980:42;12039:19;;30947:73:0;11656:408:1;30947:73:0;31031:13;31047:23;31062:7;31047:14;:23::i;:::-;31031:39;;31100:5;-1:-1:-1;;;;;31089:16:0;:7;-1:-1:-1;;;;;31089:16:0;;:52;;;-1:-1:-1;;;;;;27929:25:0;;;27905:4;27929:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;31109:32;31089:87;;;;31169:7;-1:-1:-1;;;;;31145:31:0;:20;31157:7;31145:11;:20::i;:::-;-1:-1:-1;;;;;31145:31:0;;31089:87;31081:96;30837:348;-1:-1:-1;;;;30837:348:0:o;33946:625::-;34105:4;-1:-1:-1;;;;;34078:31:0;:23;34093:7;34078:14;:23::i;:::-;-1:-1:-1;;;;;34078:31:0;;34070:81;;;;-1:-1:-1;;;34070:81:0;;9619:2:1;34070:81:0;;;9601:21:1;9658:2;9638:18;;;9631:30;9697:34;9677:18;;;9670:62;-1:-1:-1;;;9748:18:1;;;9741:35;9793:19;;34070:81:0;9417:401:1;34070:81:0;-1:-1:-1;;;;;34170:16:0;;34162:65;;;;-1:-1:-1;;;34162:65:0;;10382:2:1;34162:65:0;;;10364:21:1;10421:2;10401:18;;;10394:30;10460:34;10440:18;;;10433:62;-1:-1:-1;;;10511:18:1;;;10504:34;10555:19;;34162:65:0;10180:400:1;34162:65:0;34240:39;34261:4;34267:2;34271:7;34240:20;:39::i;:::-;34344:29;34361:1;34365:7;34344:8;:29::i;:::-;-1:-1:-1;;;;;34386:15:0;;;;;;:9;:15;;;;;:20;;34405:1;;34386:15;:20;;34405:1;;34386:20;:::i;:::-;;;;-1:-1:-1;;;;;;;34417:13:0;;;;;;:9;:13;;;;;:18;;34434:1;;34417:13;:18;;34434:1;;34417:18;:::i;:::-;;;;-1:-1:-1;;34446:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;34446:21:0;-1:-1:-1;;;;;34446:21:0;;;;;;;;;34485:27;;34446:16;;34485:27;;;;;;;26882:341;26812:411;;:::o;31527:110::-;31603:26;31613:2;31617:7;31603:26;;;;;;;;;;;;:9;:26::i;6316:191::-;6390:16;6409:6;;-1:-1:-1;;;;;6426:17:0;;;-1:-1:-1;;;;;;6426:17:0;;;;;;6459:40;;6409:6;;;;;;;6459:40;;6390:16;6459:40;6379:128;6316:191;:::o;50544:535::-;-1:-1:-1;;;;;50691:19:0;;;50618:12;50691:19;;;:11;:19;;;;;;50618:12;;50691:19;50724:24;;;;;:52;;-1:-1:-1;;;;;;50752:24:0;;;;;;:6;:24;;;;;;;;50724:52;50721:128;;;50792:16;-1:-1:-1;;;;;50792:25:0;:45;50831:5;50818:10;;:18;;;;:::i;:::-;50792:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50721:128;-1:-1:-1;;;;;50899:29:0;;;50863:33;50899:29;;;:11;:29;;;;;;;;;50942:25;;;;;;;:54;;-1:-1:-1;;;;;;50971:25:0;;;;;;:6;:25;;;;;;;;50942:54;50939:133;;;51012:17;-1:-1:-1;;;;;51012:26:0;:48;51054:5;51039:12;;:20;;;;:::i;:::-;51012:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50939:133;50607:472;;;50544:535;;:::o;35005:315::-;35160:8;-1:-1:-1;;;;;35151:17:0;:5;-1:-1:-1;;;;;35151:17:0;;;35143:55;;;;-1:-1:-1;;;35143:55:0;;10787:2:1;35143:55:0;;;10769:21:1;10826:2;10806:18;;;10799:30;10865:27;10845:18;;;10838:55;10910:18;;35143:55:0;10585:349:1;35143:55:0;-1:-1:-1;;;;;35209:25:0;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;:46;;-1:-1:-1;;35209:46:0;;;;;;;;;;35271:41;;7563::1;;;35271::0;;7536:18:1;35271:41:0;;;;;;;35005:315;;;:::o;29915:::-;30072:28;30082:4;30088:2;30092:7;30072:9;:28::i;:::-;30119:48;30142:4;30148:2;30152:7;30161:5;30119:22;:48::i;:::-;30111:111;;;;-1:-1:-1;;;30111:111:0;;;;;;;:::i;1612:723::-;1668:13;1889:10;1885:53;;-1:-1:-1;;1916:10:0;;;;;;;;;;;;-1:-1:-1;;;1916:10:0;;;;;1612:723::o;1885:53::-;1963:5;1948:12;2004:78;2011:9;;2004:78;;2037:8;;;;:::i;:::-;;-1:-1:-1;2060:10:0;;-1:-1:-1;2068:2:0;2060:10;;:::i;:::-;;;2004:78;;;2092:19;2124:6;2114:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2114:17:0;;2092:39;;2142:154;2149:10;;2142:154;;2176:11;2186:1;2176:11;;:::i;:::-;;-1:-1:-1;2245:10:0;2253:2;2245:5;:10;:::i;:::-;2232:24;;:2;:24;:::i;:::-;2219:39;;2202:6;2209;2202:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;2202:56:0;;;;;;;;-1:-1:-1;2273:11:0;2282:2;2273:11;;:::i;:::-;;;2142:154;;47461:148;47513:13;47539:62;;;;;;;;;;;;;;;;;;;47461:148;:::o;40391:589::-;-1:-1:-1;;;;;40597:18:0;;40593:187;;40632:40;40664:7;41807:10;:17;;41780:24;;;;:15;:24;;;;;:44;;;41835:24;;;;;;;;;;;;41703:164;40632:40;40593:187;;;40702:2;-1:-1:-1;;;;;40694:10:0;:4;-1:-1:-1;;;;;40694:10:0;;40690:90;;40721:47;40754:4;40760:7;40721:32;:47::i;:::-;-1:-1:-1;;;;;40794:16:0;;40790:183;;40827:45;40864:7;40827:36;:45::i;40790:183::-;40900:4;-1:-1:-1;;;;;40894:10:0;:2;-1:-1:-1;;;;;40894:10:0;;40890:83;;40921:40;40949:2;40953:7;40921:27;:40::i;31864:321::-;31994:18;32000:2;32004:7;31994:5;:18::i;:::-;32045:54;32076:1;32080:2;32084:7;32093:5;32045:22;:54::i;:::-;32023:154;;;;-1:-1:-1;;;32023:154:0;;;;;;;:::i;35885:799::-;36040:4;-1:-1:-1;;;;;36061:13:0;;7890:19;:23;36057:620;;36097:72;;-1:-1:-1;;;36097:72:0;;-1:-1:-1;;;;;36097:36:0;;;;;:72;;3993:10;;36148:4;;36154:7;;36163:5;;36097:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36097:72:0;;;;;;;;-1:-1:-1;;36097:72:0;;;;;;;;;;;;:::i;:::-;;;36093:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36339:13:0;;36335:272;;36382:60;;-1:-1:-1;;;36382:60:0;;;;;;;:::i;36335:272::-;36557:6;36551:13;36542:6;36538:2;36534:15;36527:38;36093:529;-1:-1:-1;;;;;;36220:51:0;-1:-1:-1;;;36220:51:0;;-1:-1:-1;36213:58:0;;36057:620;-1:-1:-1;36661:4:0;35885:799;;;;;;:::o;42494:988::-;42760:22;42810:1;42785:22;42802:4;42785:16;:22::i;:::-;:26;;;;:::i;:::-;42822:18;42843:26;;;:17;:26;;;;;;42760:51;;-1:-1:-1;42976:28:0;;;42972:328;;-1:-1:-1;;;;;43043:18:0;;43021:19;43043:18;;;:12;:18;;;;;;;;:34;;;;;;;;;43094:30;;;;;;:44;;;43211:30;;:17;:30;;;;;:43;;;42972:328;-1:-1:-1;43396:26:0;;;;:17;:26;;;;;;;;43389:33;;;-1:-1:-1;;;;;43440:18:0;;;;;:12;:18;;;;;:34;;;;;;;43433:41;42494:988::o;43777:1079::-;44055:10;:17;44030:22;;44055:21;;44075:1;;44055:21;:::i;:::-;44087:18;44108:24;;;:15;:24;;;;;;44481:10;:26;;44030:46;;-1:-1:-1;44108:24:0;;44030:46;;44481:26;;;;;;:::i;:::-;;;;;;;;;44459:48;;44545:11;44520:10;44531;44520:22;;;;;;;;:::i;:::-;;;;;;;;;;;;:36;;;;44625:28;;;:15;:28;;;;;;;:41;;;44797:24;;;;;44790:31;44832:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;43848:1008;;;43777:1079;:::o;41281:221::-;41366:14;41383:20;41400:2;41383:16;:20::i;:::-;-1:-1:-1;;;;;41414:16:0;;;;;;;:12;:16;;;;;;;;:24;;;;;;;;:34;;;41459:26;;;:17;:26;;;;;;:35;;;;-1:-1:-1;41281:221:0:o;32521:439::-;-1:-1:-1;;;;;32601:16:0;;32593:61;;;;-1:-1:-1;;;32593:61:0;;14910:2:1;32593:61:0;;;14892:21:1;;;14929:18;;;14922:30;14988:34;14968:18;;;14961:62;15040:18;;32593:61:0;14708:356:1;32593:61:0;30608:4;30632:16;;;:7;:16;;;;;;-1:-1:-1;;;;;30632:16:0;:30;32665:58;;;;-1:-1:-1;;;32665:58:0;;10025:2:1;32665:58:0;;;10007:21:1;10064:2;10044:18;;;10037:30;10103;10083:18;;;10076:58;10151:18;;32665:58:0;9823:352:1;32665:58:0;32736:45;32765:1;32769:2;32773:7;32736:20;:45::i;:::-;-1:-1:-1;;;;;32794:13:0;;;;;;:9;:13;;;;;:18;;32811:1;;32794:13;:18;;32811:1;;32794:18;:::i;:::-;;;;-1:-1:-1;;32823:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;32823:21:0;-1:-1:-1;;;;;32823:21:0;;;;;;;;32862:33;;32823:16;;;32862:33;;32823:16;;32862:33;49948:408;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:631:1;78:5;108:18;149:2;141:6;138:14;135:40;;;155:18;;:::i;:::-;230:2;224:9;198:2;284:15;;-1:-1:-1;;280:24:1;;;306:2;276:33;272:42;260:55;;;330:18;;;350:22;;;327:46;324:72;;;376:18;;:::i;:::-;416:10;412:2;405:22;445:6;436:15;;475:6;467;460:22;515:3;506:6;501:3;497:16;494:25;491:45;;;532:1;529;522:12;491:45;582:6;577:3;570:4;562:6;558:17;545:44;637:1;630:4;621:6;613;609:19;605:30;598:41;;;;14:631;;;;;:::o;650:247::-;709:6;762:2;750:9;741:7;737:23;733:32;730:52;;;778:1;775;768:12;730:52;817:9;804:23;836:31;861:5;836:31;:::i;:::-;886:5;650:247;-1:-1:-1;;;650:247:1:o;902:323::-;978:6;986;1039:2;1027:9;1018:7;1014:23;1010:32;1007:52;;;1055:1;1052;1045:12;1007:52;1094:9;1081:23;1113:31;1138:5;1113:31;:::i;:::-;1163:5;1215:2;1200:18;;;;1187:32;;-1:-1:-1;;;902:323:1:o;1230:388::-;1298:6;1306;1359:2;1347:9;1338:7;1334:23;1330:32;1327:52;;;1375:1;1372;1365:12;1327:52;1414:9;1401:23;1433:31;1458:5;1433:31;:::i;:::-;1483:5;-1:-1:-1;1540:2:1;1525:18;;1512:32;1553:33;1512:32;1553:33;:::i;:::-;1605:7;1595:17;;;1230:388;;;;;:::o;1623:456::-;1700:6;1708;1716;1769:2;1757:9;1748:7;1744:23;1740:32;1737:52;;;1785:1;1782;1775:12;1737:52;1824:9;1811:23;1843:31;1868:5;1843:31;:::i;:::-;1893:5;-1:-1:-1;1950:2:1;1935:18;;1922:32;1963:33;1922:32;1963:33;:::i;:::-;1623:456;;2015:7;;-1:-1:-1;;;2069:2:1;2054:18;;;;2041:32;;1623:456::o;2084:794::-;2179:6;2187;2195;2203;2256:3;2244:9;2235:7;2231:23;2227:33;2224:53;;;2273:1;2270;2263:12;2224:53;2312:9;2299:23;2331:31;2356:5;2331:31;:::i;:::-;2381:5;-1:-1:-1;2438:2:1;2423:18;;2410:32;2451:33;2410:32;2451:33;:::i;:::-;2503:7;-1:-1:-1;2557:2:1;2542:18;;2529:32;;-1:-1:-1;2612:2:1;2597:18;;2584:32;2639:18;2628:30;;2625:50;;;2671:1;2668;2661:12;2625:50;2694:22;;2747:4;2739:13;;2735:27;-1:-1:-1;2725:55:1;;2776:1;2773;2766:12;2725:55;2799:73;2864:7;2859:2;2846:16;2841:2;2837;2833:11;2799:73;:::i;:::-;2789:83;;;2084:794;;;;;;;:::o;2883:416::-;2948:6;2956;3009:2;2997:9;2988:7;2984:23;2980:32;2977:52;;;3025:1;3022;3015:12;2977:52;3064:9;3051:23;3083:31;3108:5;3083:31;:::i;:::-;3133:5;-1:-1:-1;3190:2:1;3175:18;;3162:32;3232:15;;3225:23;3213:36;;3203:64;;3263:1;3260;3253:12;3624:245;3682:6;3735:2;3723:9;3714:7;3710:23;3706:32;3703:52;;;3751:1;3748;3741:12;3703:52;3790:9;3777:23;3809:30;3833:5;3809:30;:::i;3874:249::-;3943:6;3996:2;3984:9;3975:7;3971:23;3967:32;3964:52;;;4012:1;4009;4002:12;3964:52;4044:9;4038:16;4063:30;4087:5;4063:30;:::i;4128:522::-;4206:6;4214;4267:2;4255:9;4246:7;4242:23;4238:32;4235:52;;;4283:1;4280;4273:12;4235:52;4323:9;4310:23;4356:18;4348:6;4345:30;4342:50;;;4388:1;4385;4378:12;4342:50;4411:22;;4464:4;4456:13;;4452:27;-1:-1:-1;4442:55:1;;4493:1;4490;4483:12;4442:55;4516:75;4583:7;4578:2;4565:16;4558:4;4554:2;4550:13;4516:75;:::i;:::-;4506:85;4638:4;4623:20;;;;4610:34;;-1:-1:-1;;;;4128:522:1:o;4655:180::-;4714:6;4767:2;4755:9;4746:7;4742:23;4738:32;4735:52;;;4783:1;4780;4773:12;4735:52;-1:-1:-1;4806:23:1;;4655:180;-1:-1:-1;4655:180:1:o;4840:257::-;4881:3;4919:5;4913:12;4946:6;4941:3;4934:19;4962:63;5018:6;5011:4;5006:3;5002:14;4995:4;4988:5;4984:16;4962:63;:::i;:::-;5079:2;5058:15;-1:-1:-1;;5054:29:1;5045:39;;;;5086:4;5041:50;;4840:257;-1:-1:-1;;4840:257:1:o;5102:185::-;5144:3;5182:5;5176:12;5197:52;5242:6;5237:3;5230:4;5223:5;5219:16;5197:52;:::i;:::-;5265:16;;;;;5102:185;-1:-1:-1;;5102:185:1:o;5411:1306::-;5688:3;5717:1;5750:6;5744:13;5780:3;5802:1;5830:9;5826:2;5822:18;5812:28;;5890:2;5879:9;5875:18;5912;5902:61;;5956:4;5948:6;5944:17;5934:27;;5902:61;5982:2;6030;6022:6;6019:14;5999:18;5996:38;5993:165;;;-1:-1:-1;;;6057:33:1;;6113:4;6110:1;6103:15;6143:4;6064:3;6131:17;5993:165;6174:18;6201:104;;;;6319:1;6314:320;;;;6167:467;;6201:104;-1:-1:-1;;6234:24:1;;6222:37;;6279:16;;;;-1:-1:-1;6201:104:1;;6314:320;18791:1;18784:14;;;18828:4;18815:18;;6409:1;6423:165;6437:6;6434:1;6431:13;6423:165;;;6515:14;;6502:11;;;6495:35;6558:16;;;;6452:10;;6423:165;;;6427:3;;6617:6;6612:3;6608:16;6601:23;;6167:467;;;;;;;6650:61;6676:34;6706:3;-1:-1:-1;;;5357:16:1;;5398:1;5389:11;;5292:114;6676:34;6668:6;6650:61;:::i;6930:488::-;-1:-1:-1;;;;;7199:15:1;;;7181:34;;7251:15;;7246:2;7231:18;;7224:43;7298:2;7283:18;;7276:34;;;7346:3;7341:2;7326:18;;7319:31;;;7124:4;;7367:45;;7392:19;;7384:6;7367:45;:::i;7615:219::-;7764:2;7753:9;7746:21;7727:4;7784:44;7824:2;7813:9;7809:18;7801:6;7784:44;:::i;8591:414::-;8793:2;8775:21;;;8832:2;8812:18;;;8805:30;8871:34;8866:2;8851:18;;8844:62;-1:-1:-1;;;8937:2:1;8922:18;;8915:48;8995:3;8980:19;;8591:414::o;15900:356::-;16102:2;16084:21;;;16121:18;;;16114:30;16180:34;16175:2;16160:18;;16153:62;16247:2;16232:18;;15900:356::o;17705:413::-;17907:2;17889:21;;;17946:2;17926:18;;;17919:30;17985:34;17980:2;17965:18;;17958:62;-1:-1:-1;;;18051:2:1;18036:18;;18029:47;18108:3;18093:19;;17705:413::o;18844:128::-;18884:3;18915:1;18911:6;18908:1;18905:13;18902:39;;;18921:18;;:::i;:::-;-1:-1:-1;18957:9:1;;18844:128::o;18977:120::-;19017:1;19043;19033:35;;19048:18;;:::i;:::-;-1:-1:-1;19082:9:1;;18977:120::o;19102:168::-;19142:7;19208:1;19204;19200:6;19196:14;19193:1;19190:21;19185:1;19178:9;19171:17;19167:45;19164:71;;;19215:18;;:::i;:::-;-1:-1:-1;19255:9:1;;19102:168::o;19275:125::-;19315:4;19343:1;19340;19337:8;19334:34;;;19348:18;;:::i;:::-;-1:-1:-1;19385:9:1;;19275:125::o;19405:258::-;19477:1;19487:113;19501:6;19498:1;19495:13;19487:113;;;19577:11;;;19571:18;19558:11;;;19551:39;19523:2;19516:10;19487:113;;;19618:6;19615:1;19612:13;19609:48;;;-1:-1:-1;;19653:1:1;19635:16;;19628:27;19405:258::o;19668:380::-;19747:1;19743:12;;;;19790;;;19811:61;;19865:4;19857:6;19853:17;19843:27;;19811:61;19918:2;19910:6;19907:14;19887:18;19884:38;19881:161;;;19964:10;19959:3;19955:20;19952:1;19945:31;19999:4;19996:1;19989:15;20027:4;20024:1;20017:15;19881:161;;19668:380;;;:::o;20053:135::-;20092:3;-1:-1:-1;;20113:17:1;;20110:43;;;20133:18;;:::i;:::-;-1:-1:-1;20180:1:1;20169:13;;20053:135::o;20193:112::-;20225:1;20251;20241:35;;20256:18;;:::i;:::-;-1:-1:-1;20290:9:1;;20193:112::o;20310:127::-;20371:10;20366:3;20362:20;20359:1;20352:31;20402:4;20399:1;20392:15;20426:4;20423:1;20416:15;20442:127;20503:10;20498:3;20494:20;20491:1;20484:31;20534:4;20531:1;20524:15;20558:4;20555:1;20548:15;20574:127;20635:10;20630:3;20626:20;20623:1;20616:31;20666:4;20663:1;20656:15;20690:4;20687:1;20680:15;20706:127;20767:10;20762:3;20758:20;20755:1;20748:31;20798:4;20795:1;20788:15;20822:4;20819:1;20812:15;20838:127;20899:10;20894:3;20890:20;20887:1;20880:31;20930:4;20927:1;20920:15;20954:4;20951:1;20944:15;20970:131;-1:-1:-1;;;;;21045:31:1;;21035:42;;21025:70;;21091:1;21088;21081:12;21106:131;-1:-1:-1;;;;;;21180:32:1;;21170:43;;21160:71;;21227:1;21224;21217:12
Swarm Source
ipfs://aeb7ae7d5c86e92f70a9e0a4a7b672604f3c4f43f026e19f7f3749f6406a0b0b
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.