Feature Tip: Add private address tag to any address under My Name Tag !
Overview
TokenID
523
Total Transfers
-
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Phoodles
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-01-14 */ // SPDX-License-Identifier: MIT // File: @openzeppelin/contracts/utils/Counters.sol pragma solidity ^0.8.0; /** * @title Counters * @author Matt Condon (@shrugs) * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number * of elements in a mapping, issuing ERC721 ids, or counting request ids. * * Include with `using Counters for Counters.Counter;` */ library Counters { struct Counter { // This variable should never be directly accessed by users of the library: interactions must be restricted to // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add // this feature: see https://github.com/ethereum/solidity/issues/4637 uint256 _value; // default: 0 } function current(Counter storage counter) internal view returns (uint256) { return counter._value; } function increment(Counter storage counter) internal { unchecked { counter._value += 1; } } function decrement(Counter storage counter) internal { uint256 value = counter._value; require(value > 0, "Counter: decrement overflow"); unchecked { counter._value = value - 1; } } function reset(Counter storage counter) internal { counter._value = 0; } } // File: @openzeppelin/contracts/utils/Strings.sol pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/contracts/utils/Context.sol pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _setOwner(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _setOwner(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require( newOwner != address(0), "Ownable: new owner is the zero address" ); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/utils/Address.sol pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require( address(this).balance >= amount, "Address: insufficient balance" ); (bool success, ) = recipient.call{value: amount}(""); require( success, "Address: unable to send value, recipient may have reverted" ); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue( target, data, value, "Address: low-level call with value failed" ); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require( address(this).balance >= value, "Address: insufficient balance for call" ); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}( data ); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall( target, data, "Address: low-level static call failed" ); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall( target, data, "Address: low-level delegate call failed" ); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer( address indexed from, address indexed to, uint256 indexed tokenId ); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval( address indexed owner, address indexed approved, uint256 indexed tokenId ); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll( address indexed owner, address indexed operator, bool approved ); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: @openzeppelin/contracts/token/ERC721/ERC721.sol pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require( owner != address(0), "ERC721: balance query for the zero address" ); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require( owner != address(0), "ERC721: owner query for nonexistent token" ); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require( _exists(tokenId), "ERC721Metadata: URI query for nonexistent token" ); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require( _exists(tokenId), "ERC721: approved query for nonexistent token" ); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { require(operator != _msgSender(), "ERC721: approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require( _isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved" ); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require( _isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved" ); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require( _checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require( _exists(tokenId), "ERC721: operator query for nonexistent token" ); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require( ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own" ); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received( _msgSender(), from, tokenId, _data ) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert( "ERC721: transfer to non ERC721Receiver implementer" ); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File: contracts/Phoodles.sol pragma solidity >=0.8.0 <0.9.0; contract Phoodles is ERC721, Ownable { using Strings for uint256; using Counters for Counters.Counter; string public baseURI; bool public isPaused = true; uint256 public constant MAX_SUPPLY = 4444; uint256 public constant FREE_MINTS = 500; uint256 public constant MAX_MINT_PER_TRANSACTION = 8; uint256 public constant MAX_TOTAL_OWN_AMOUNT = 24; uint256 public cost = 0.04 ether; uint256 public marketingSupply = 150; Counters.Counter private _tokenSupply; event NewPhoodleMinted(address sender, uint256 tokenId); constructor( string memory _name, string memory _symbol, string memory _baseUri ) ERC721(_name, _symbol) { setBaseURI(_baseUri); _tokenSupply.increment(); } modifier mustPassChecks(uint256 _mintAmount) { if (totalSupply() < 5) { require((totalSupply() < 5 && msg.sender == owner()), "Only owner"); } else { require( !isPaused && _mintAmount > 0 && (_mintAmount <= MAX_MINT_PER_TRANSACTION) && totalSupply() + _mintAmount <= MAX_SUPPLY - marketingSupply, isPaused ? "Sale is paused" : ( _mintAmount == 0 ? "You need to mint at least 1" : ( _mintAmount > MAX_MINT_PER_TRANSACTION ? "Max mint amount exceed" : "Supply limit exceeded" ) ) ); uint256 ownerMintedCount = balanceOf(msg.sender); require( ownerMintedCount + _mintAmount <= MAX_TOTAL_OWN_AMOUNT, "Max own amount exceed" ); if ((totalSupply() + _mintAmount) <= FREE_MINTS) { require(msg.value == 0, "Mint cost not required"); } else { require( msg.value >= cost * ( totalSupply() >= FREE_MINTS ? _mintAmount : _mintAmount - (FREE_MINTS - totalSupply()) ), "Insufficient funds" ); } } _; } function totalSupply() public view returns (uint256) { return _tokenSupply.current() - 1; } function _baseURI() internal view virtual override returns (string memory) { return baseURI; } function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId)); string memory currentBaseURI = _baseURI(); return bytes(currentBaseURI).length > 0 ? string( abi.encodePacked( currentBaseURI, tokenId.toString(), ".json" ) ) : ""; } function mint(uint256 _mintAmount) public payable mustPassChecks(_mintAmount) { for (uint256 i = 1; i <= _mintAmount; i++) { uint256 id = _tokenSupply.current(); _safeMint(msg.sender, id); emit NewPhoodleMinted(msg.sender, id); _tokenSupply.increment(); } } function walletOfOwner(address _owner) public view returns (uint256[] memory) { uint256 ownerTokenCount = balanceOf(_owner); uint256[] memory ownedTokenIds = new uint256[](ownerTokenCount); uint256 currentTokenId = 1; uint256 ownedTokenIndex = 0; while ( ownedTokenIndex < ownerTokenCount && currentTokenId <= MAX_SUPPLY ) { address currentTokenOwner = ownerOf(currentTokenId); if (currentTokenOwner == _owner) { ownedTokenIds[ownedTokenIndex] = currentTokenId; ownedTokenIndex++; } currentTokenId++; } return ownedTokenIds; } function toggleIsPaused() public onlyOwner { isPaused = !isPaused; } function setCost(uint256 _newCost) public onlyOwner { cost = _newCost; } function setMarketingSupply(uint256 _newMarketingSupply) public onlyOwner { require( totalSupply() + _newMarketingSupply <= MAX_SUPPLY, "Marketing supply exceed remaining amount" ); marketingSupply = _newMarketingSupply; } function setBaseURI(string memory _newBaseURI) public onlyOwner { baseURI = _newBaseURI; } function airdrop(address[] calldata _users) public payable onlyOwner { require( marketingSupply > 0 && _users.length <= marketingSupply && _users.length > 0 && (totalSupply() + _users.length - 1 < MAX_SUPPLY - marketingSupply), marketingSupply <= 0 ? "Marketing supply empty" : ( _users.length > marketingSupply ? "Addresses exceed marketing supply" : ( _users.length == 0 ? "At least 1 address required" : "Supply limit exceeded" ) ) ); for (uint256 i = 0; i < _users.length; i++) { uint256 id = _tokenSupply.current(); _safeMint(_users[i], id); emit NewPhoodleMinted(_users[i], id); _tokenSupply.increment(); marketingSupply--; } } function withdraw() public payable onlyOwner { require(address(this).balance > 0, "No balance to withdraw"); (bool success, ) = payable(owner()).call{value: address(this).balance}( "" ); require(success, "Withdraw failed"); assert(address(this).balance == 0); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"string","name":"_baseUri","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"NewPhoodleMinted","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":[],"name":"FREE_MINTS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_MINT_PER_TRANSACTION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_TOTAL_OWN_AMOUNT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_users","type":"address[]"}],"name":"airdrop","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cost","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":[],"name":"isPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newMarketingSupply","type":"uint256"}],"name":"setMarketingSupply","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":[],"name":"toggleIsPaused","outputs":[],"stateMutability":"nonpayable","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","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
60806040526008805460ff19166001179055668e1bc9bf0400006009556096600a553480156200002e57600080fd5b506040516200288e3803806200288e8339810160408190526200005191620002fc565b8251839083906200006a9060009060208501906200019f565b508051620000809060019060208401906200019f565b5050506200009d62000097620000c860201b60201c565b620000cc565b620000a8816200011e565b620000bf600b6200019660201b620015f91760201c565b505050620003e0565b3390565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6006546001600160a01b031633146200017d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640160405180910390fd5b8051620001929060079060208401906200019f565b5050565b80546001019055565b828054620001ad906200038d565b90600052602060002090601f016020900481019282620001d157600085556200021c565b82601f10620001ec57805160ff19168380011785556200021c565b828001600101855582156200021c579182015b828111156200021c578251825591602001919060010190620001ff565b506200022a9291506200022e565b5090565b5b808211156200022a57600081556001016200022f565b600082601f8301126200025757600080fd5b81516001600160401b0380821115620002745762000274620003ca565b604051601f8301601f19908116603f011681019082821181831017156200029f576200029f620003ca565b81604052838152602092508683858801011115620002bc57600080fd5b600091505b83821015620002e05785820183015181830184015290820190620002c1565b83821115620002f25760008385830101525b9695505050505050565b6000806000606084860312156200031257600080fd5b83516001600160401b03808211156200032a57600080fd5b620003388783880162000245565b945060208601519150808211156200034f57600080fd5b6200035d8783880162000245565b935060408601519150808211156200037457600080fd5b50620003838682870162000245565b9150509250925092565b600181811c90821680620003a257607f821691505b60208210811415620003c457634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b61249e80620003f06000396000f3fe6080604052600436106101ee5760003560e01c80636352211e1161010d578063a0712d68116100a0578063c87b56dd1161006f578063c87b56dd1461051b578063e0bd29eb1461053b578063e985e9c51461055b578063f2fde38b146105a4578063f9613d7f146105c457600080fd5b8063a0712d68146104ae578063a22cb465146104c1578063b187bd26146104e1578063b88d4fde146104fb57600080fd5b8063729ad39e116100dc578063729ad39e14610452578063764267b6146104655780638da5cb5b1461047b57806395d89b411461049957600080fd5b80636352211e146103e85780636c0360eb1461040857806370a082311461041d578063715018a61461043d57600080fd5b806324ef901e11610185578063438b630011610154578063438b63001461036557806344a0d68a1461039257806355f804b3146103b2578063624bb58f146103d257600080fd5b806324ef901e1461031257806332cb6b0c146103275780633ccfd60b1461033d57806342842e0e1461034557600080fd5b806313faede6116101c157806313faede6146102a457806318160ddd146102c85780631e5454e4146102dd57806323b872dd146102f257600080fd5b806301ffc9a7146101f357806306fdde0314610228578063081812fc1461024a578063095ea7b314610282575b600080fd5b3480156101ff57600080fd5b5061021361020e366004612041565b6105d9565b60405190151581526020015b60405180910390f35b34801561023457600080fd5b5061023d61062b565b60405161021f91906121c9565b34801561025657600080fd5b5061026a6102653660046120c4565b6106bd565b6040516001600160a01b03909116815260200161021f565b34801561028e57600080fd5b506102a261029d366004611fa2565b610757565b005b3480156102b057600080fd5b506102ba60095481565b60405190815260200161021f565b3480156102d457600080fd5b506102ba61086d565b3480156102e957600080fd5b506102ba601881565b3480156102fe57600080fd5b506102a261030d366004611eae565b610889565b34801561031e57600080fd5b506102ba600881565b34801561033357600080fd5b506102ba61115c81565b6102a26108ba565b34801561035157600080fd5b506102a2610360366004611eae565b6109e4565b34801561037157600080fd5b50610385610380366004611e60565b6109ff565b60405161021f9190612185565b34801561039e57600080fd5b506102a26103ad3660046120c4565b610ae0565b3480156103be57600080fd5b506102a26103cd36600461207b565b610b0f565b3480156103de57600080fd5b506102ba600a5481565b3480156103f457600080fd5b5061026a6104033660046120c4565b610b50565b34801561041457600080fd5b5061023d610bc7565b34801561042957600080fd5b506102ba610438366004611e60565b610c55565b34801561044957600080fd5b506102a2610cdc565b6102a2610460366004611fcc565b610d12565b34801561047157600080fd5b506102ba6101f481565b34801561048757600080fd5b506006546001600160a01b031661026a565b3480156104a557600080fd5b5061023d610f6c565b6102a26104bc3660046120c4565b610f7b565b3480156104cd57600080fd5b506102a26104dc366004611f66565b611302565b3480156104ed57600080fd5b506008546102139060ff1681565b34801561050757600080fd5b506102a2610516366004611eea565b6113c7565b34801561052757600080fd5b5061023d6105363660046120c4565b6113ff565b34801561054757600080fd5b506102a26105563660046120c4565b61147f565b34801561056757600080fd5b50610213610576366004611e7b565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b3480156105b057600080fd5b506102a26105bf366004611e60565b611523565b3480156105d057600080fd5b506102a26115bb565b60006001600160e01b031982166380ac58cd60e01b148061060a57506001600160e01b03198216635b5e139f60e01b145b8061062557506301ffc9a760e01b6001600160e01b03198316145b92915050565b60606000805461063a90612359565b80601f016020809104026020016040519081016040528092919081815260200182805461066690612359565b80156106b35780601f10610688576101008083540402835291602001916106b3565b820191906000526020600020905b81548152906001019060200180831161069657829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b031661073b5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b600061076282610b50565b9050806001600160a01b0316836001600160a01b031614156107d05760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610732565b336001600160a01b03821614806107ec57506107ec8133610576565b61085e5760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610732565b6108688383611602565b505050565b6000600161087a600b5490565b61088491906122ff565b905090565b6108933382611670565b6108af5760405162461bcd60e51b815260040161073290612263565b610868838383611767565b6006546001600160a01b031633146108e45760405162461bcd60e51b81526004016107329061222e565b6000471161092d5760405162461bcd60e51b81526020600482015260166024820152754e6f2062616c616e636520746f20776974686472617760501b6044820152606401610732565b60006109416006546001600160a01b031690565b6001600160a01b03164760405160006040518083038185875af1925050503d806000811461098b576040519150601f19603f3d011682016040523d82523d6000602084013e610990565b606091505b50509050806109d35760405162461bcd60e51b815260206004820152600f60248201526e15da5d1a191c985dc819985a5b1959608a1b6044820152606401610732565b47156109e1576109e16123c3565b50565b610868838383604051806020016040528060008152506113c7565b60606000610a0c83610c55565b905060008167ffffffffffffffff811115610a2957610a2961241b565b604051908082528060200260200182016040528015610a52578160200160208202803683370190505b509050600160005b8381108015610a6b575061115c8211155b15610ad6576000610a7b83610b50565b9050866001600160a01b0316816001600160a01b03161415610ac35782848381518110610aaa57610aaa612405565b602090810291909101015281610abf81612394565b9250505b82610acd81612394565b93505050610a5a565b5090949350505050565b6006546001600160a01b03163314610b0a5760405162461bcd60e51b81526004016107329061222e565b600955565b6006546001600160a01b03163314610b395760405162461bcd60e51b81526004016107329061222e565b8051610b4c906007906020840190611d35565b5050565b6000818152600260205260408120546001600160a01b0316806106255760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610732565b60078054610bd490612359565b80601f0160208091040260200160405190810160405280929190818152602001828054610c0090612359565b8015610c4d5780601f10610c2257610100808354040283529160200191610c4d565b820191906000526020600020905b815481529060010190602001808311610c3057829003601f168201915b505050505081565b60006001600160a01b038216610cc05760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610732565b506001600160a01b031660009081526003602052604090205490565b6006546001600160a01b03163314610d065760405162461bcd60e51b81526004016107329061222e565b610d106000611907565b565b6006546001600160a01b03163314610d3c5760405162461bcd60e51b81526004016107329061222e565b6000600a54118015610d505750600a548111155b8015610d5b57508015155b8015610d925750600a54610d719061115c6122ff565b600182610d7c61086d565b610d8691906122b4565b610d9091906122ff565b105b600a5415610e3557600a548211610e17578115610ddc576040518060400160405280601581526020017414dd5c1c1b1e481b1a5b5a5d08195e18d959591959605a1b815250610e65565b6040518060400160405280601b81526020017f4174206c65617374203120616464726573732072657175697265640000000000815250610e65565b60405180606001604052806021815260200161244860219139610e65565b604051806040016040528060168152602001754d61726b6574696e6720737570706c7920656d70747960501b8152505b90610e835760405162461bcd60e51b815260040161073291906121c9565b5060005b81811015610868576000610e9a600b5490565b9050610ecc848484818110610eb157610eb1612405565b9050602002016020810190610ec69190611e60565b82611959565b7f38a472c3761ce172ce05c9286f6c87dc49511df95b07a7520abc3a38f816b42c848484818110610eff57610eff612405565b9050602002016020810190610f149190611e60565b604080516001600160a01b039092168252602082018490520160405180910390a1610f43600b80546001019055565b600a8054906000610f5383612342565b9190505550508080610f6490612394565b915050610e87565b60606001805461063a90612359565b806005610f8661086d565b1015610feb576005610f9661086d565b108015610fad57506006546001600160a01b031633145b610fe65760405162461bcd60e51b815260206004820152600a60248201526927b7363c9037bbb732b960b11b6044820152606401610732565b611287565b60085460ff16158015610ffe5750600081115b801561100b575060088111155b80156110375750600a546110219061115c6122ff565b8161102a61086d565b61103491906122b4565b11155b60085460ff166110f15781156110b65760088211611082576040518060400160405280601581526020017414dd5c1c1b1e481b1a5b5a5d08195e18d959591959605a1b815250611119565b6040518060400160405280601681526020017513585e081b5a5b9d08185b5bdd5b9d08195e18d9595960521b815250611119565b6040518060400160405280601b81526020017f596f75206e65656420746f206d696e74206174206c6561737420310000000000815250611119565b6040518060400160405280600e81526020016d14d85b19481a5cc81c185d5cd95960921b8152505b906111375760405162461bcd60e51b815260040161073291906121c9565b50600061114333610c55565b9050601861115183836122b4565b11156111975760405162461bcd60e51b815260206004820152601560248201527413585e081bdddb88185b5bdd5b9d08195e18d95959605a1b6044820152606401610732565b6101f4826111a361086d565b6111ad91906122b4565b116111fe5734156111f95760405162461bcd60e51b8152602060048201526016602482015275135a5b9d0818dbdcdd081b9bdd081c995c5d5a5c995960521b6044820152606401610732565b611285565b6101f461120961086d565b10156112325761121761086d565b611223906101f46122ff565b61122d90836122ff565b611234565b815b60095461124191906122e0565b3410156112855760405162461bcd60e51b8152602060048201526012602482015271496e73756666696369656e742066756e647360701b6044820152606401610732565b505b60015b82811161086857600061129c600b5490565b90506112a83382611959565b60408051338152602081018390527f38a472c3761ce172ce05c9286f6c87dc49511df95b07a7520abc3a38f816b42c910160405180910390a16112ef600b80546001019055565b50806112fa81612394565b91505061128a565b6001600160a01b03821633141561135b5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610732565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6113d13383611670565b6113ed5760405162461bcd60e51b815260040161073290612263565b6113f984848484611973565b50505050565b6000818152600260205260409020546060906001600160a01b031661142357600080fd5b600061142d6119a6565b9050600081511161144d5760405180602001604052806000815250611478565b80611457846119b5565b604051602001611468929190612109565b6040516020818303038152906040525b9392505050565b6006546001600160a01b031633146114a95760405162461bcd60e51b81526004016107329061222e565b61115c816114b561086d565b6114bf91906122b4565b111561151e5760405162461bcd60e51b815260206004820152602860248201527f4d61726b6574696e6720737570706c79206578636565642072656d61696e696e60448201526719c8185b5bdd5b9d60c21b6064820152608401610732565b600a55565b6006546001600160a01b0316331461154d5760405162461bcd60e51b81526004016107329061222e565b6001600160a01b0381166115b25760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610732565b6109e181611907565b6006546001600160a01b031633146115e55760405162461bcd60e51b81526004016107329061222e565b6008805460ff19811660ff90911615179055565b80546001019055565b600081815260046020526040902080546001600160a01b0319166001600160a01b038416908117909155819061163782610b50565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600260205260408120546001600160a01b03166116e95760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610732565b60006116f483610b50565b9050806001600160a01b0316846001600160a01b0316148061172f5750836001600160a01b0316611724846106bd565b6001600160a01b0316145b8061175f57506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b031661177a82610b50565b6001600160a01b0316146117e25760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401610732565b6001600160a01b0382166118445760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610732565b61184f600082611602565b6001600160a01b03831660009081526003602052604081208054600192906118789084906122ff565b90915550506001600160a01b03821660009081526003602052604081208054600192906118a69084906122b4565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b610b4c828260405180602001604052806000815250611ab3565b61197e848484611767565b61198a84848484611ae6565b6113f95760405162461bcd60e51b8152600401610732906121dc565b60606007805461063a90612359565b6060816119d95750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611a0357806119ed81612394565b91506119fc9050600a836122cc565b91506119dd565b60008167ffffffffffffffff811115611a1e57611a1e61241b565b6040519080825280601f01601f191660200182016040528015611a48576020820181803683370190505b5090505b841561175f57611a5d6001836122ff565b9150611a6a600a866123af565b611a759060306122b4565b60f81b818381518110611a8a57611a8a612405565b60200101906001600160f81b031916908160001a905350611aac600a866122cc565b9450611a4c565b611abd8383611bf3565b611aca6000848484611ae6565b6108685760405162461bcd60e51b8152600401610732906121dc565b60006001600160a01b0384163b15611be857604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611b2a903390899088908890600401612148565b602060405180830381600087803b158015611b4457600080fd5b505af1925050508015611b74575060408051601f3d908101601f19168201909252611b719181019061205e565b60015b611bce573d808015611ba2576040519150601f19603f3d011682016040523d82523d6000602084013e611ba7565b606091505b508051611bc65760405162461bcd60e51b8152600401610732906121dc565b805181602001fd5b6001600160e01b031916630a85bd0160e11b14905061175f565b506001949350505050565b6001600160a01b038216611c495760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610732565b6000818152600260205260409020546001600160a01b031615611cae5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610732565b6001600160a01b0382166000908152600360205260408120805460019290611cd79084906122b4565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b828054611d4190612359565b90600052602060002090601f016020900481019282611d635760008555611da9565b82601f10611d7c57805160ff1916838001178555611da9565b82800160010185558215611da9579182015b82811115611da9578251825591602001919060010190611d8e565b50611db5929150611db9565b5090565b5b80821115611db55760008155600101611dba565b600067ffffffffffffffff80841115611de957611de961241b565b604051601f8501601f19908116603f01168101908282118183101715611e1157611e1161241b565b81604052809350858152868686011115611e2a57600080fd5b858560208301376000602087830101525050509392505050565b80356001600160a01b0381168114611e5b57600080fd5b919050565b600060208284031215611e7257600080fd5b61147882611e44565b60008060408385031215611e8e57600080fd5b611e9783611e44565b9150611ea560208401611e44565b90509250929050565b600080600060608486031215611ec357600080fd5b611ecc84611e44565b9250611eda60208501611e44565b9150604084013590509250925092565b60008060008060808587031215611f0057600080fd5b611f0985611e44565b9350611f1760208601611e44565b925060408501359150606085013567ffffffffffffffff811115611f3a57600080fd5b8501601f81018713611f4b57600080fd5b611f5a87823560208401611dce565b91505092959194509250565b60008060408385031215611f7957600080fd5b611f8283611e44565b915060208301358015158114611f9757600080fd5b809150509250929050565b60008060408385031215611fb557600080fd5b611fbe83611e44565b946020939093013593505050565b60008060208385031215611fdf57600080fd5b823567ffffffffffffffff80821115611ff757600080fd5b818501915085601f83011261200b57600080fd5b81358181111561201a57600080fd5b8660208260051b850101111561202f57600080fd5b60209290920196919550909350505050565b60006020828403121561205357600080fd5b813561147881612431565b60006020828403121561207057600080fd5b815161147881612431565b60006020828403121561208d57600080fd5b813567ffffffffffffffff8111156120a457600080fd5b8201601f810184136120b557600080fd5b61175f84823560208401611dce565b6000602082840312156120d657600080fd5b5035919050565b600081518084526120f5816020860160208601612316565b601f01601f19169290920160200192915050565b6000835161211b818460208801612316565b83519083019061212f818360208801612316565b64173539b7b760d91b9101908152600501949350505050565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061217b908301846120dd565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b818110156121bd578351835292840192918401916001016121a1565b50909695505050505050565b60208152600061147860208301846120dd565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b600082198211156122c7576122c76123d9565b500190565b6000826122db576122db6123ef565b500490565b60008160001904831182151516156122fa576122fa6123d9565b500290565b600082821015612311576123116123d9565b500390565b60005b83811015612331578181015183820152602001612319565b838111156113f95750506000910152565b600081612351576123516123d9565b506000190190565b600181811c9082168061236d57607f821691505b6020821081141561238e57634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156123a8576123a86123d9565b5060010190565b6000826123be576123be6123ef565b500690565b634e487b7160e01b600052600160045260246000fd5b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b0319811681146109e157600080fdfe41646472657373657320657863656564206d61726b6574696e6720737570706c79a26469706673582212209a6250af8cce038136c9f253e2945218b7064a4bbdd18de340284f9ad53fdb0864736f6c63430008070033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000155468652050686f6f646c6573204f6666696369616c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000450484f44000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d5159655854797062504e344b38416568684d655a683965726650355959673948577061476b5754336f4369762f00000000000000000000
Deployed Bytecode
0x6080604052600436106101ee5760003560e01c80636352211e1161010d578063a0712d68116100a0578063c87b56dd1161006f578063c87b56dd1461051b578063e0bd29eb1461053b578063e985e9c51461055b578063f2fde38b146105a4578063f9613d7f146105c457600080fd5b8063a0712d68146104ae578063a22cb465146104c1578063b187bd26146104e1578063b88d4fde146104fb57600080fd5b8063729ad39e116100dc578063729ad39e14610452578063764267b6146104655780638da5cb5b1461047b57806395d89b411461049957600080fd5b80636352211e146103e85780636c0360eb1461040857806370a082311461041d578063715018a61461043d57600080fd5b806324ef901e11610185578063438b630011610154578063438b63001461036557806344a0d68a1461039257806355f804b3146103b2578063624bb58f146103d257600080fd5b806324ef901e1461031257806332cb6b0c146103275780633ccfd60b1461033d57806342842e0e1461034557600080fd5b806313faede6116101c157806313faede6146102a457806318160ddd146102c85780631e5454e4146102dd57806323b872dd146102f257600080fd5b806301ffc9a7146101f357806306fdde0314610228578063081812fc1461024a578063095ea7b314610282575b600080fd5b3480156101ff57600080fd5b5061021361020e366004612041565b6105d9565b60405190151581526020015b60405180910390f35b34801561023457600080fd5b5061023d61062b565b60405161021f91906121c9565b34801561025657600080fd5b5061026a6102653660046120c4565b6106bd565b6040516001600160a01b03909116815260200161021f565b34801561028e57600080fd5b506102a261029d366004611fa2565b610757565b005b3480156102b057600080fd5b506102ba60095481565b60405190815260200161021f565b3480156102d457600080fd5b506102ba61086d565b3480156102e957600080fd5b506102ba601881565b3480156102fe57600080fd5b506102a261030d366004611eae565b610889565b34801561031e57600080fd5b506102ba600881565b34801561033357600080fd5b506102ba61115c81565b6102a26108ba565b34801561035157600080fd5b506102a2610360366004611eae565b6109e4565b34801561037157600080fd5b50610385610380366004611e60565b6109ff565b60405161021f9190612185565b34801561039e57600080fd5b506102a26103ad3660046120c4565b610ae0565b3480156103be57600080fd5b506102a26103cd36600461207b565b610b0f565b3480156103de57600080fd5b506102ba600a5481565b3480156103f457600080fd5b5061026a6104033660046120c4565b610b50565b34801561041457600080fd5b5061023d610bc7565b34801561042957600080fd5b506102ba610438366004611e60565b610c55565b34801561044957600080fd5b506102a2610cdc565b6102a2610460366004611fcc565b610d12565b34801561047157600080fd5b506102ba6101f481565b34801561048757600080fd5b506006546001600160a01b031661026a565b3480156104a557600080fd5b5061023d610f6c565b6102a26104bc3660046120c4565b610f7b565b3480156104cd57600080fd5b506102a26104dc366004611f66565b611302565b3480156104ed57600080fd5b506008546102139060ff1681565b34801561050757600080fd5b506102a2610516366004611eea565b6113c7565b34801561052757600080fd5b5061023d6105363660046120c4565b6113ff565b34801561054757600080fd5b506102a26105563660046120c4565b61147f565b34801561056757600080fd5b50610213610576366004611e7b565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b3480156105b057600080fd5b506102a26105bf366004611e60565b611523565b3480156105d057600080fd5b506102a26115bb565b60006001600160e01b031982166380ac58cd60e01b148061060a57506001600160e01b03198216635b5e139f60e01b145b8061062557506301ffc9a760e01b6001600160e01b03198316145b92915050565b60606000805461063a90612359565b80601f016020809104026020016040519081016040528092919081815260200182805461066690612359565b80156106b35780601f10610688576101008083540402835291602001916106b3565b820191906000526020600020905b81548152906001019060200180831161069657829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b031661073b5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b600061076282610b50565b9050806001600160a01b0316836001600160a01b031614156107d05760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610732565b336001600160a01b03821614806107ec57506107ec8133610576565b61085e5760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610732565b6108688383611602565b505050565b6000600161087a600b5490565b61088491906122ff565b905090565b6108933382611670565b6108af5760405162461bcd60e51b815260040161073290612263565b610868838383611767565b6006546001600160a01b031633146108e45760405162461bcd60e51b81526004016107329061222e565b6000471161092d5760405162461bcd60e51b81526020600482015260166024820152754e6f2062616c616e636520746f20776974686472617760501b6044820152606401610732565b60006109416006546001600160a01b031690565b6001600160a01b03164760405160006040518083038185875af1925050503d806000811461098b576040519150601f19603f3d011682016040523d82523d6000602084013e610990565b606091505b50509050806109d35760405162461bcd60e51b815260206004820152600f60248201526e15da5d1a191c985dc819985a5b1959608a1b6044820152606401610732565b47156109e1576109e16123c3565b50565b610868838383604051806020016040528060008152506113c7565b60606000610a0c83610c55565b905060008167ffffffffffffffff811115610a2957610a2961241b565b604051908082528060200260200182016040528015610a52578160200160208202803683370190505b509050600160005b8381108015610a6b575061115c8211155b15610ad6576000610a7b83610b50565b9050866001600160a01b0316816001600160a01b03161415610ac35782848381518110610aaa57610aaa612405565b602090810291909101015281610abf81612394565b9250505b82610acd81612394565b93505050610a5a565b5090949350505050565b6006546001600160a01b03163314610b0a5760405162461bcd60e51b81526004016107329061222e565b600955565b6006546001600160a01b03163314610b395760405162461bcd60e51b81526004016107329061222e565b8051610b4c906007906020840190611d35565b5050565b6000818152600260205260408120546001600160a01b0316806106255760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610732565b60078054610bd490612359565b80601f0160208091040260200160405190810160405280929190818152602001828054610c0090612359565b8015610c4d5780601f10610c2257610100808354040283529160200191610c4d565b820191906000526020600020905b815481529060010190602001808311610c3057829003601f168201915b505050505081565b60006001600160a01b038216610cc05760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610732565b506001600160a01b031660009081526003602052604090205490565b6006546001600160a01b03163314610d065760405162461bcd60e51b81526004016107329061222e565b610d106000611907565b565b6006546001600160a01b03163314610d3c5760405162461bcd60e51b81526004016107329061222e565b6000600a54118015610d505750600a548111155b8015610d5b57508015155b8015610d925750600a54610d719061115c6122ff565b600182610d7c61086d565b610d8691906122b4565b610d9091906122ff565b105b600a5415610e3557600a548211610e17578115610ddc576040518060400160405280601581526020017414dd5c1c1b1e481b1a5b5a5d08195e18d959591959605a1b815250610e65565b6040518060400160405280601b81526020017f4174206c65617374203120616464726573732072657175697265640000000000815250610e65565b60405180606001604052806021815260200161244860219139610e65565b604051806040016040528060168152602001754d61726b6574696e6720737570706c7920656d70747960501b8152505b90610e835760405162461bcd60e51b815260040161073291906121c9565b5060005b81811015610868576000610e9a600b5490565b9050610ecc848484818110610eb157610eb1612405565b9050602002016020810190610ec69190611e60565b82611959565b7f38a472c3761ce172ce05c9286f6c87dc49511df95b07a7520abc3a38f816b42c848484818110610eff57610eff612405565b9050602002016020810190610f149190611e60565b604080516001600160a01b039092168252602082018490520160405180910390a1610f43600b80546001019055565b600a8054906000610f5383612342565b9190505550508080610f6490612394565b915050610e87565b60606001805461063a90612359565b806005610f8661086d565b1015610feb576005610f9661086d565b108015610fad57506006546001600160a01b031633145b610fe65760405162461bcd60e51b815260206004820152600a60248201526927b7363c9037bbb732b960b11b6044820152606401610732565b611287565b60085460ff16158015610ffe5750600081115b801561100b575060088111155b80156110375750600a546110219061115c6122ff565b8161102a61086d565b61103491906122b4565b11155b60085460ff166110f15781156110b65760088211611082576040518060400160405280601581526020017414dd5c1c1b1e481b1a5b5a5d08195e18d959591959605a1b815250611119565b6040518060400160405280601681526020017513585e081b5a5b9d08185b5bdd5b9d08195e18d9595960521b815250611119565b6040518060400160405280601b81526020017f596f75206e65656420746f206d696e74206174206c6561737420310000000000815250611119565b6040518060400160405280600e81526020016d14d85b19481a5cc81c185d5cd95960921b8152505b906111375760405162461bcd60e51b815260040161073291906121c9565b50600061114333610c55565b9050601861115183836122b4565b11156111975760405162461bcd60e51b815260206004820152601560248201527413585e081bdddb88185b5bdd5b9d08195e18d95959605a1b6044820152606401610732565b6101f4826111a361086d565b6111ad91906122b4565b116111fe5734156111f95760405162461bcd60e51b8152602060048201526016602482015275135a5b9d0818dbdcdd081b9bdd081c995c5d5a5c995960521b6044820152606401610732565b611285565b6101f461120961086d565b10156112325761121761086d565b611223906101f46122ff565b61122d90836122ff565b611234565b815b60095461124191906122e0565b3410156112855760405162461bcd60e51b8152602060048201526012602482015271496e73756666696369656e742066756e647360701b6044820152606401610732565b505b60015b82811161086857600061129c600b5490565b90506112a83382611959565b60408051338152602081018390527f38a472c3761ce172ce05c9286f6c87dc49511df95b07a7520abc3a38f816b42c910160405180910390a16112ef600b80546001019055565b50806112fa81612394565b91505061128a565b6001600160a01b03821633141561135b5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610732565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6113d13383611670565b6113ed5760405162461bcd60e51b815260040161073290612263565b6113f984848484611973565b50505050565b6000818152600260205260409020546060906001600160a01b031661142357600080fd5b600061142d6119a6565b9050600081511161144d5760405180602001604052806000815250611478565b80611457846119b5565b604051602001611468929190612109565b6040516020818303038152906040525b9392505050565b6006546001600160a01b031633146114a95760405162461bcd60e51b81526004016107329061222e565b61115c816114b561086d565b6114bf91906122b4565b111561151e5760405162461bcd60e51b815260206004820152602860248201527f4d61726b6574696e6720737570706c79206578636565642072656d61696e696e60448201526719c8185b5bdd5b9d60c21b6064820152608401610732565b600a55565b6006546001600160a01b0316331461154d5760405162461bcd60e51b81526004016107329061222e565b6001600160a01b0381166115b25760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610732565b6109e181611907565b6006546001600160a01b031633146115e55760405162461bcd60e51b81526004016107329061222e565b6008805460ff19811660ff90911615179055565b80546001019055565b600081815260046020526040902080546001600160a01b0319166001600160a01b038416908117909155819061163782610b50565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600260205260408120546001600160a01b03166116e95760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610732565b60006116f483610b50565b9050806001600160a01b0316846001600160a01b0316148061172f5750836001600160a01b0316611724846106bd565b6001600160a01b0316145b8061175f57506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b031661177a82610b50565b6001600160a01b0316146117e25760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401610732565b6001600160a01b0382166118445760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610732565b61184f600082611602565b6001600160a01b03831660009081526003602052604081208054600192906118789084906122ff565b90915550506001600160a01b03821660009081526003602052604081208054600192906118a69084906122b4565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b610b4c828260405180602001604052806000815250611ab3565b61197e848484611767565b61198a84848484611ae6565b6113f95760405162461bcd60e51b8152600401610732906121dc565b60606007805461063a90612359565b6060816119d95750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611a0357806119ed81612394565b91506119fc9050600a836122cc565b91506119dd565b60008167ffffffffffffffff811115611a1e57611a1e61241b565b6040519080825280601f01601f191660200182016040528015611a48576020820181803683370190505b5090505b841561175f57611a5d6001836122ff565b9150611a6a600a866123af565b611a759060306122b4565b60f81b818381518110611a8a57611a8a612405565b60200101906001600160f81b031916908160001a905350611aac600a866122cc565b9450611a4c565b611abd8383611bf3565b611aca6000848484611ae6565b6108685760405162461bcd60e51b8152600401610732906121dc565b60006001600160a01b0384163b15611be857604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611b2a903390899088908890600401612148565b602060405180830381600087803b158015611b4457600080fd5b505af1925050508015611b74575060408051601f3d908101601f19168201909252611b719181019061205e565b60015b611bce573d808015611ba2576040519150601f19603f3d011682016040523d82523d6000602084013e611ba7565b606091505b508051611bc65760405162461bcd60e51b8152600401610732906121dc565b805181602001fd5b6001600160e01b031916630a85bd0160e11b14905061175f565b506001949350505050565b6001600160a01b038216611c495760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610732565b6000818152600260205260409020546001600160a01b031615611cae5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610732565b6001600160a01b0382166000908152600360205260408120805460019290611cd79084906122b4565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b828054611d4190612359565b90600052602060002090601f016020900481019282611d635760008555611da9565b82601f10611d7c57805160ff1916838001178555611da9565b82800160010185558215611da9579182015b82811115611da9578251825591602001919060010190611d8e565b50611db5929150611db9565b5090565b5b80821115611db55760008155600101611dba565b600067ffffffffffffffff80841115611de957611de961241b565b604051601f8501601f19908116603f01168101908282118183101715611e1157611e1161241b565b81604052809350858152868686011115611e2a57600080fd5b858560208301376000602087830101525050509392505050565b80356001600160a01b0381168114611e5b57600080fd5b919050565b600060208284031215611e7257600080fd5b61147882611e44565b60008060408385031215611e8e57600080fd5b611e9783611e44565b9150611ea560208401611e44565b90509250929050565b600080600060608486031215611ec357600080fd5b611ecc84611e44565b9250611eda60208501611e44565b9150604084013590509250925092565b60008060008060808587031215611f0057600080fd5b611f0985611e44565b9350611f1760208601611e44565b925060408501359150606085013567ffffffffffffffff811115611f3a57600080fd5b8501601f81018713611f4b57600080fd5b611f5a87823560208401611dce565b91505092959194509250565b60008060408385031215611f7957600080fd5b611f8283611e44565b915060208301358015158114611f9757600080fd5b809150509250929050565b60008060408385031215611fb557600080fd5b611fbe83611e44565b946020939093013593505050565b60008060208385031215611fdf57600080fd5b823567ffffffffffffffff80821115611ff757600080fd5b818501915085601f83011261200b57600080fd5b81358181111561201a57600080fd5b8660208260051b850101111561202f57600080fd5b60209290920196919550909350505050565b60006020828403121561205357600080fd5b813561147881612431565b60006020828403121561207057600080fd5b815161147881612431565b60006020828403121561208d57600080fd5b813567ffffffffffffffff8111156120a457600080fd5b8201601f810184136120b557600080fd5b61175f84823560208401611dce565b6000602082840312156120d657600080fd5b5035919050565b600081518084526120f5816020860160208601612316565b601f01601f19169290920160200192915050565b6000835161211b818460208801612316565b83519083019061212f818360208801612316565b64173539b7b760d91b9101908152600501949350505050565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061217b908301846120dd565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b818110156121bd578351835292840192918401916001016121a1565b50909695505050505050565b60208152600061147860208301846120dd565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b600082198211156122c7576122c76123d9565b500190565b6000826122db576122db6123ef565b500490565b60008160001904831182151516156122fa576122fa6123d9565b500290565b600082821015612311576123116123d9565b500390565b60005b83811015612331578181015183820152602001612319565b838111156113f95750506000910152565b600081612351576123516123d9565b506000190190565b600181811c9082168061236d57607f821691505b6020821081141561238e57634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156123a8576123a86123d9565b5060010190565b6000826123be576123be6123ef565b500690565b634e487b7160e01b600052600160045260246000fd5b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b0319811681146109e157600080fdfe41646472657373657320657863656564206d61726b6574696e6720737570706c79a26469706673582212209a6250af8cce038136c9f253e2945218b7064a4bbdd18de340284f9ad53fdb0864736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000155468652050686f6f646c6573204f6666696369616c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000450484f44000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d5159655854797062504e344b38416568684d655a683965726650355959673948577061476b5754336f4369762f00000000000000000000
-----Decoded View---------------
Arg [0] : _name (string): The Phoodles Official
Arg [1] : _symbol (string): PHOD
Arg [2] : _baseUri (string): ipfs://QmQYeXTypbPN4K8AehhMeZh9erfP5YYg9HWpaGkWT3oCiv/
-----Encoded View---------------
10 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000015
Arg [4] : 5468652050686f6f646c6573204f6666696369616c0000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [6] : 50484f4400000000000000000000000000000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [8] : 697066733a2f2f516d5159655854797062504e344b38416568684d655a683965
Arg [9] : 726650355959673948577061476b5754336f4369762f00000000000000000000
Deployed Bytecode Sourcemap
38222:6467:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25069:355;;;;;;;;;;-1:-1:-1;25069:355:0;;;;;:::i;:::-;;:::i;:::-;;;7559:14:1;;7552:22;7534:41;;7522:2;7507:18;25069:355:0;;;;;;;;26238:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;27931:308::-;;;;;;;;;;-1:-1:-1;27931:308:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;5941:32:1;;;5923:51;;5911:2;5896:18;27931:308:0;5777:203:1;27454:411:0;;;;;;;;;;-1:-1:-1;27454:411:0;;;;;:::i;:::-;;:::i;:::-;;38620:32;;;;;;;;;;;;;;;;;;;16413:25:1;;;16401:2;16386:18;38620:32:0;16267:177:1;40784:105:0;;;;;;;;;;;;;:::i;38562:49::-;;;;;;;;;;;;38609:2;38562:49;;28990:376;;;;;;;;;;-1:-1:-1;28990:376:0;;;;;:::i;:::-;;:::i;38503:52::-;;;;;;;;;;;;38554:1;38503:52;;38408:41;;;;;;;;;;;;38445:4;38408:41;;44362:324;;;:::i;29437:185::-;;;;;;;;;;-1:-1:-1;29437:185:0;;;;;:::i;:::-;;:::i;41941:740::-;;;;;;;;;;-1:-1:-1;41941:740:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;42779:86::-;;;;;;;;;;-1:-1:-1;42779:86:0;;;;;:::i;:::-;;:::i;43161:104::-;;;;;;;;;;-1:-1:-1;43161:104:0;;;;;:::i;:::-;;:::i;38659:36::-;;;;;;;;;;;;;;;;25845:326;;;;;;;;;;-1:-1:-1;25845:326:0;;;;;:::i;:::-;;:::i;38342:21::-;;;;;;;;;;;;;:::i;25488:295::-;;;;;;;;;;-1:-1:-1;25488:295:0;;;;;:::i;:::-;;:::i;6042:94::-;;;;;;;;;;;;;:::i;43273:1081::-;;;;;;:::i;:::-;;:::i;38456:40::-;;;;;;;;;;;;38493:3;38456:40;;5391:87;;;;;;;;;;-1:-1:-1;5464:6:0;;-1:-1:-1;;;;;5464:6:0;5391:87;;26407:104;;;;;;;;;;;;;:::i;41569:364::-;;;;;;:::i;:::-;;:::i;28311:327::-;;;;;;;;;;-1:-1:-1;28311:327:0;;;;;:::i;:::-;;:::i;38372:27::-;;;;;;;;;;-1:-1:-1;38372:27:0;;;;;;;;29693:365;;;;;;;;;;-1:-1:-1;29693:365:0;;;;;:::i;:::-;;:::i;41013:548::-;;;;;;;;;;-1:-1:-1;41013:548:0;;;;;:::i;:::-;;:::i;42873:280::-;;;;;;;;;;-1:-1:-1;42873:280:0;;;;;:::i;:::-;;:::i;28709:214::-;;;;;;;;;;-1:-1:-1;28709:214:0;;;;;:::i;:::-;-1:-1:-1;;;;;28880:25:0;;;28851:4;28880:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;28709:214;6291:229;;;;;;;;;;-1:-1:-1;6291:229:0;;;;;:::i;:::-;;:::i;42689:82::-;;;;;;;;;;;;;:::i;25069:355::-;25216:4;-1:-1:-1;;;;;;25258:40:0;;-1:-1:-1;;;25258:40:0;;:105;;-1:-1:-1;;;;;;;25315:48:0;;-1:-1:-1;;;25315:48:0;25258:105;:158;;;-1:-1:-1;;;;;;;;;;18022:40:0;;;25380:36;25238:178;25069:355;-1:-1:-1;;25069:355:0:o;26238:100::-;26292:13;26325:5;26318:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26238:100;:::o;27931:308::-;28052:7;31694:16;;;:7;:16;;;;;;-1:-1:-1;;;;;31694:16:0;28077:110;;;;-1:-1:-1;;;28077:110:0;;14114:2:1;28077:110:0;;;14096:21:1;14153:2;14133:18;;;14126:30;14192:34;14172:18;;;14165:62;-1:-1:-1;;;14243:18:1;;;14236:42;14295:19;;28077:110:0;;;;;;;;;-1:-1:-1;28207:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;28207:24:0;;27931:308::o;27454:411::-;27535:13;27551:23;27566:7;27551:14;:23::i;:::-;27535:39;;27599:5;-1:-1:-1;;;;;27593:11:0;:2;-1:-1:-1;;;;;27593:11:0;;;27585:57;;;;-1:-1:-1;;;27585:57:0;;15649:2:1;27585:57:0;;;15631:21:1;15688:2;15668:18;;;15661:30;15727:34;15707:18;;;15700:62;-1:-1:-1;;;15778:18:1;;;15771:31;15819:19;;27585:57:0;15447:397:1;27585:57:0;4240:10;-1:-1:-1;;;;;27677:21:0;;;;:62;;-1:-1:-1;27702:37:0;27719:5;4240:10;28709:214;:::i;27702:37::-;27655:168;;;;-1:-1:-1;;;27655:168:0;;12098:2:1;27655:168:0;;;12080:21:1;12137:2;12117:18;;;12110:30;12176:34;12156:18;;;12149:62;12247:26;12227:18;;;12220:54;12291:19;;27655:168:0;11896:420:1;27655:168:0;27836:21;27845:2;27849:7;27836:8;:21::i;:::-;27524:341;27454:411;;:::o;40784:105::-;40828:7;40880:1;40855:22;:12;940:14;;848:114;40855:22;:26;;;;:::i;:::-;40848:33;;40784:105;:::o;28990:376::-;29199:41;4240:10;29232:7;29199:18;:41::i;:::-;29177:140;;;;-1:-1:-1;;;29177:140:0;;;;;;;:::i;:::-;29330:28;29340:4;29346:2;29350:7;29330:9;:28::i;44362:324::-;5464:6;;-1:-1:-1;;;;;5464:6:0;4240:10;5611:23;5603:68;;;;-1:-1:-1;;;5603:68:0;;;;;;;:::i;:::-;44450:1:::1;44426:21;:25;44418:60;;;::::0;-1:-1:-1;;;44418:60:0;;15298:2:1;44418:60:0::1;::::0;::::1;15280:21:1::0;15337:2;15317:18;;;15310:30;-1:-1:-1;;;15356:18:1;;;15349:52;15418:18;;44418:60:0::1;15096:346:1::0;44418:60:0::1;44490:12;44516:7;5464:6:::0;;-1:-1:-1;;;;;5464:6:0;;5391:87;44516:7:::1;-1:-1:-1::0;;;;;44508:21:0::1;44537;44508:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44489:98;;;44606:7;44598:35;;;::::0;-1:-1:-1;;;44598:35:0;;9885:2:1;44598:35:0::1;::::0;::::1;9867:21:1::0;9924:2;9904:18;;;9897:30;-1:-1:-1;;;9943:18:1;;;9936:45;9998:18;;44598:35:0::1;9683:339:1::0;44598:35:0::1;44651:21;:26:::0;44644:34:::1;;;;:::i;:::-;44407:279;44362:324::o:0;29437:185::-;29575:39;29592:4;29598:2;29602:7;29575:39;;;;;;;;;;;;:16;:39::i;41941:740::-;42028:16;42062:23;42088:17;42098:6;42088:9;:17::i;:::-;42062:43;;42116:30;42163:15;42149:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;42149:30:0;-1:-1:-1;42116:63:0;-1:-1:-1;42215:1:0;42190:22;42267:376;42306:15;42288;:33;:65;;;;;38445:4;42325:14;:28;;42288:65;42267:376;;;42380:25;42408:23;42416:14;42408:7;:23::i;:::-;42380:51;;42473:6;-1:-1:-1;;;;;42452:27:0;:17;-1:-1:-1;;;;;42452:27:0;;42448:151;;;42533:14;42500:13;42514:15;42500:30;;;;;;;;:::i;:::-;;;;;;;;;;:47;42566:17;;;;:::i;:::-;;;;42448:151;42615:16;;;;:::i;:::-;;;;42365:278;42267:376;;;-1:-1:-1;42660:13:0;;41941:740;-1:-1:-1;;;;41941:740:0:o;42779:86::-;5464:6;;-1:-1:-1;;;;;5464:6:0;4240:10;5611:23;5603:68;;;;-1:-1:-1;;;5603:68:0;;;;;;;:::i;:::-;42842:4:::1;:15:::0;42779:86::o;43161:104::-;5464:6;;-1:-1:-1;;;;;5464:6:0;4240:10;5611:23;5603:68;;;;-1:-1:-1;;;5603:68:0;;;;;;;:::i;:::-;43236:21;;::::1;::::0;:7:::1;::::0;:21:::1;::::0;::::1;::::0;::::1;:::i;:::-;;43161:104:::0;:::o;25845:326::-;25962:7;26003:16;;;:7;:16;;;;;;-1:-1:-1;;;;;26003:16:0;26052:19;26030:110;;;;-1:-1:-1;;;26030:110:0;;12934:2:1;26030:110:0;;;12916:21:1;12973:2;12953:18;;;12946:30;13012:34;12992:18;;;12985:62;-1:-1:-1;;;13063:18:1;;;13056:39;13112:19;;26030:110:0;12732:405:1;38342:21:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;25488:295::-;25605:7;-1:-1:-1;;;;;25652:19:0;;25630:111;;;;-1:-1:-1;;;25630:111:0;;12523:2:1;25630:111:0;;;12505:21:1;12562:2;12542:18;;;12535:30;12601:34;12581:18;;;12574:62;-1:-1:-1;;;12652:18:1;;;12645:40;12702:19;;25630:111:0;12321:406:1;25630:111:0;-1:-1:-1;;;;;;25759:16:0;;;;;:9;:16;;;;;;;25488:295::o;6042:94::-;5464:6;;-1:-1:-1;;;;;5464:6:0;4240:10;5611:23;5603:68;;;;-1:-1:-1;;;5603:68:0;;;;;;;:::i;:::-;6107:21:::1;6125:1;6107:9;:21::i;:::-;6042:94::o:0;43273:1081::-;5464:6;;-1:-1:-1;;;;;5464:6:0;4240:10;5611:23;5603:68;;;;-1:-1:-1;;;5603:68:0;;;;;;;:::i;:::-;43393:1:::1;43375:15;;:19;:72;;;;-1:-1:-1::0;43432:15:0::1;::::0;43415:32;::::1;;43375:72;:110;;;;-1:-1:-1::0;43468:17:0;;;43375:110:::1;:218;;;;-1:-1:-1::0;43577:15:0::1;::::0;43564:28:::1;::::0;38445:4:::1;43564:28;:::i;:::-;43539:1;43523:6:::0;43507:13:::1;:11;:13::i;:::-;:29;;;;:::i;:::-;:33;;;;:::i;:::-;:85;43375:218;43608:15;::::0;:20;:448:::1;;43731:15;::::0;43715:31;::::1;:322;;43868:18:::0;;:142:::1;;;;;;;;;;;;;;;-1:-1:-1::0;;;43868:142:0::1;;::::0;43608:448:::1;;43868:142;;;;;;;;;;;;;;;;;::::0;43608:448:::1;;43715:322;;;;;;;;;;;;;;;;;;43608:448;;;;;;;;;;;;;;;;-1:-1:-1::0;;;43608:448:0::1;;::::0;::::1;43353:714;;;;;-1:-1:-1::0;;;43353:714:0::1;;;;;;;;:::i;:::-;;44085:9;44080:267;44100:17:::0;;::::1;44080:267;;;44139:10;44152:22;:12;940:14:::0;;848:114;44152:22:::1;44139:35;;44189:24;44199:6;;44206:1;44199:9;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;44210:2;44189:9;:24::i;:::-;44233:31;44250:6;;44257:1;44250:9;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;44233:31;::::0;;-1:-1:-1;;;;;6670:32:1;;;6652:51;;6734:2;6719:18;;6712:34;;;6625:18;44233:31:0::1;;;;;;;44279:24;:12;1059:19:::0;;1077:1;1059:19;;;970:127;44279:24:::1;44318:15;:17:::0;;;:15:::1;:17;::::0;::::1;:::i;:::-;;;;;;44124:223;44119:3;;;;;:::i;:::-;;;;44080:267;;26407:104:::0;26463:13;26496:7;26489:14;;;;;:::i;41569:364::-;41661:11;39109:1;39093:13;:11;:13::i;:::-;:17;39089:1668;;;39152:1;39136:13;:11;:13::i;:::-;:17;:42;;;;-1:-1:-1;5464:6:0;;-1:-1:-1;;;;;5464:6:0;39157:10;:21;39136:42;39127:67;;;;-1:-1:-1;;;39127:67:0;;8363:2:1;39127:67:0;;;8345:21:1;8402:2;8382:18;;;8375:30;-1:-1:-1;;;8421:18:1;;;8414:40;8471:18;;39127:67:0;8161:334:1;39127:67:0;39089:1668;;;39254:8;;;;39253:9;:49;;;;;39301:1;39287:11;:15;39253:49;:115;;;;;38554:1;39328:11;:39;;39253:115;:199;;;;-1:-1:-1;39437:15:0;;39424:28;;38445:4;39424:28;:::i;:::-;39409:11;39393:13;:11;:13::i;:::-;:27;;;;:::i;:::-;:59;;39253:199;39471:8;;;;:462;;39570:16;;:340;;38554:1;39714:11;:38;:165;;;;;;;;;;;;;;;-1:-1:-1;;;39714:165:0;;;39471:462;;39714:165;;;;;;;;;;;;;;-1:-1:-1;;;39714:165:0;;;39471:462;;39570:340;;;;;;;;;;;;;;;;;;39471:462;;;;;;;;;;;;;;;;-1:-1:-1;;;39471:462:0;;;;39227:721;;;;;-1:-1:-1;;;39227:721:0;;;;;;;;:::i;:::-;;39965:24;39992:21;40002:10;39992:9;:21::i;:::-;39965:48;-1:-1:-1;38609:2:0;40054:30;40073:11;39965:48;40054:30;:::i;:::-;:54;;40028:137;;;;-1:-1:-1;;;40028:137:0;;10229:2:1;40028:137:0;;;10211:21:1;10268:2;10248:18;;;10241:30;-1:-1:-1;;;10287:18:1;;;10280:51;10348:18;;40028:137:0;10027:345:1;40028:137:0;38493:3;40201:11;40185:13;:11;:13::i;:::-;:27;;;;:::i;:::-;40184:43;40180:566;;40256:9;:14;40248:49;;;;-1:-1:-1;;;40248:49:0;;8012:2:1;40248:49:0;;;7994:21:1;8051:2;8031:18;;;8024:30;-1:-1:-1;;;8070:18:1;;;8063:52;8132:18;;40248:49:0;7810:346:1;40248:49:0;40180:566;;;38493:3;40477:13;:11;:13::i;:::-;:27;;:160;;40623:13;:11;:13::i;:::-;40610:26;;38493:3;40610:26;:::i;:::-;40595:42;;:11;:42;:::i;:::-;40477:160;;;40544:11;40477:160;40406:4;;:262;;;;:::i;:::-;40368:9;:300;;40338:392;;;;-1:-1:-1;;;40338:392:0;;11751:2:1;40338:392:0;;;11733:21:1;11790:2;11770:18;;;11763:30;-1:-1:-1;;;11809:18:1;;;11802:48;11867:18;;40338:392:0;11549:342:1;40338:392:0;39212:1545;39089:1668;41707:1:::1;41690:236;41715:11;41710:1;:16;41690:236;;41748:10;41761:22;:12;940:14:::0;;848:114;41761:22:::1;41748:35;;41798:25;41808:10;41820:2;41798:9;:25::i;:::-;41843:32;::::0;;41860:10:::1;6652:51:1::0;;6734:2;6719:18;;6712:34;;;41843:32:0::1;::::0;6625:18:1;41843:32:0::1;;;;;;;41890:24;:12;1059:19:::0;;1077:1;1059:19;;;970:127;41890:24:::1;-1:-1:-1::0;41728:3:0;::::1;::::0;::::1;:::i;:::-;;;;41690:236;;28311:327:::0;-1:-1:-1;;;;;28446:24:0;;4240:10;28446:24;;28438:62;;;;-1:-1:-1;;;28438:62:0;;10984:2:1;28438:62:0;;;10966:21:1;11023:2;11003:18;;;10996:30;11062:27;11042:18;;;11035:55;11107:18;;28438:62:0;10782:349:1;28438:62:0;4240:10;28513:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;28513:42:0;;;;;;;;;;;;:53;;-1:-1:-1;;28513:53:0;;;;;;;;;;28582:48;;7534:41:1;;;28513:42:0;;4240:10;28582:48;;7507:18:1;28582:48:0;;;;;;;28311:327;;:::o;29693:365::-;29882:41;4240:10;29915:7;29882:18;:41::i;:::-;29860:140;;;;-1:-1:-1;;;29860:140:0;;;;;;;:::i;:::-;30011:39;30025:4;30031:2;30035:7;30044:5;30011:13;:39::i;:::-;29693:365;;;;:::o;41013:548::-;31670:4;31694:16;;;:7;:16;;;;;;41131:13;;-1:-1:-1;;;;;31694:16:0;41162:25;;;;;;41200:28;41231:10;:8;:10::i;:::-;41200:41;;41303:1;41278:14;41272:28;:32;:281;;;;;;;;;;;;;;;;;41396:14;41437:18;:7;:16;:18::i;:::-;41353:159;;;;;;;;;:::i;:::-;;;;;;;;;;;;;41272:281;41252:301;41013:548;-1:-1:-1;;;41013:548:0:o;42873:280::-;5464:6;;-1:-1:-1;;;;;5464:6:0;4240:10;5611:23;5603:68;;;;-1:-1:-1;;;5603:68:0;;;;;;;:::i;:::-;38445:4:::1;42996:19;42980:13;:11;:13::i;:::-;:35;;;;:::i;:::-;:49;;42958:139;;;::::0;-1:-1:-1;;;42958:139:0;;13705:2:1;42958:139:0::1;::::0;::::1;13687:21:1::0;13744:2;13724:18;;;13717:30;13783:34;13763:18;;;13756:62;-1:-1:-1;;;13834:18:1;;;13827:38;13882:19;;42958:139:0::1;13503:404:1::0;42958:139:0::1;43108:15;:37:::0;42873:280::o;6291:229::-;5464:6;;-1:-1:-1;;;;;5464:6:0;4240:10;5611:23;5603:68;;;;-1:-1:-1;;;5603:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6394:22:0;::::1;6372:110;;;::::0;-1:-1:-1;;;6372:110:0;;9121:2:1;6372:110:0::1;::::0;::::1;9103:21:1::0;9160:2;9140:18;;;9133:30;9199:34;9179:18;;;9172:62;-1:-1:-1;;;9250:18:1;;;9243:36;9296:19;;6372:110:0::1;8919:402:1::0;6372:110:0::1;6493:19;6503:8;6493:9;:19::i;42689:82::-:0;5464:6;;-1:-1:-1;;;;;5464:6:0;4240:10;5611:23;5603:68;;;;-1:-1:-1;;;5603:68:0;;;;;;;:::i;:::-;42755:8:::1;::::0;;-1:-1:-1;;42743:20:0;::::1;42755:8;::::0;;::::1;42754:9;42743:20;::::0;;42689:82::o;970:127::-;1059:19;;1077:1;1059:19;;;970:127::o;35728:174::-;35803:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;35803:29:0;-1:-1:-1;;;;;35803:29:0;;;;;;;;:24;;35857:23;35803:24;35857:14;:23::i;:::-;-1:-1:-1;;;;;35848:46:0;;;;;;;;;;;35728:174;;:::o;31899:452::-;32028:4;31694:16;;;:7;:16;;;;;;-1:-1:-1;;;;;31694:16:0;32050:110;;;;-1:-1:-1;;;32050:110:0;;11338:2:1;32050:110:0;;;11320:21:1;11377:2;11357:18;;;11350:30;11416:34;11396:18;;;11389:62;-1:-1:-1;;;11467:18:1;;;11460:42;11519:19;;32050:110:0;11136:408:1;32050:110:0;32171:13;32187:23;32202:7;32187:14;:23::i;:::-;32171:39;;32240:5;-1:-1:-1;;;;;32229:16:0;:7;-1:-1:-1;;;;;32229:16:0;;:64;;;;32286:7;-1:-1:-1;;;;;32262:31:0;:20;32274:7;32262:11;:20::i;:::-;-1:-1:-1;;;;;32262:31:0;;32229:64;:113;;;-1:-1:-1;;;;;;28880:25:0;;;28851:4;28880:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;32310:32;32221:122;31899:452;-1:-1:-1;;;;31899:452:0:o;34995:615::-;35168:4;-1:-1:-1;;;;;35141:31:0;:23;35156:7;35141:14;:23::i;:::-;-1:-1:-1;;;;;35141:31:0;;35119:122;;;;-1:-1:-1;;;35119:122:0;;14888:2:1;35119:122:0;;;14870:21:1;14927:2;14907:18;;;14900:30;14966:34;14946:18;;;14939:62;-1:-1:-1;;;15017:18:1;;;15010:39;15066:19;;35119:122:0;14686:405:1;35119:122:0;-1:-1:-1;;;;;35260:16:0;;35252:65;;;;-1:-1:-1;;;35252:65:0;;10579:2:1;35252:65:0;;;10561:21:1;10618:2;10598:18;;;10591:30;10657:34;10637:18;;;10630:62;-1:-1:-1;;;10708:18:1;;;10701:34;10752:19;;35252:65:0;10377:400:1;35252:65:0;35434:29;35451:1;35455:7;35434:8;:29::i;:::-;-1:-1:-1;;;;;35476:15:0;;;;;;:9;:15;;;;;:20;;35495:1;;35476:15;:20;;35495:1;;35476:20;:::i;:::-;;;;-1:-1:-1;;;;;;;35507:13:0;;;;;;:9;:13;;;;;:18;;35524:1;;35507:13;:18;;35524:1;;35507:18;:::i;:::-;;;;-1:-1:-1;;35536:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;35536:21:0;-1:-1:-1;;;;;35536:21:0;;;;;;;;;35575:27;;35536:16;;35575:27;;;;;;;34995:615;;;:::o;6528:173::-;6603:6;;;-1:-1:-1;;;;;6620:17:0;;;-1:-1:-1;;;;;;6620:17:0;;;;;;;6653:40;;6603:6;;;6620:17;6603:6;;6653:40;;6584:16;;6653:40;6573:128;6528:173;:::o;32693:110::-;32769:26;32779:2;32783:7;32769:26;;;;;;;;;;;;:9;:26::i;30940:352::-;31097:28;31107:4;31113:2;31117:7;31097:9;:28::i;:::-;31158:48;31181:4;31187:2;31191:7;31200:5;31158:22;:48::i;:::-;31136:148;;;;-1:-1:-1;;;31136:148:0;;;;;;;:::i;40897:108::-;40957:13;40990:7;40983:14;;;;;:::i;1748:723::-;1804:13;2025:10;2021:53;;-1:-1:-1;;2052:10:0;;;;;;;;;;;;-1:-1:-1;;;2052:10:0;;;;;1748:723::o;2021:53::-;2099:5;2084:12;2140:78;2147:9;;2140:78;;2173:8;;;;:::i;:::-;;-1:-1:-1;2196:10:0;;-1:-1:-1;2204:2:0;2196:10;;:::i;:::-;;;2140:78;;;2228:19;2260:6;2250:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2250:17:0;;2228:39;;2278:154;2285:10;;2278:154;;2312:11;2322:1;2312:11;;:::i;:::-;;-1:-1:-1;2381:10:0;2389:2;2381:5;:10;:::i;:::-;2368:24;;:2;:24;:::i;:::-;2355:39;;2338:6;2345;2338:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;2338:56:0;;;;;;;;-1:-1:-1;2409:11:0;2418:2;2409:11;;:::i;:::-;;;2278:154;;33030:321;33160:18;33166:2;33170:7;33160:5;:18::i;:::-;33211:54;33242:1;33246:2;33250:7;33259:5;33211:22;:54::i;:::-;33189:154;;;;-1:-1:-1;;;33189:154:0;;;;;;;:::i;36467:980::-;36622:4;-1:-1:-1;;;;;36643:13:0;;7793:20;7841:8;36639:801;;36696:175;;-1:-1:-1;;;36696:175:0;;-1:-1:-1;;;;;36696:36:0;;;;;:175;;4240:10;;36790:4;;36817:7;;36847:5;;36696:175;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36696:175:0;;;;;;;;-1:-1:-1;;36696:175:0;;;;;;;;;;;;:::i;:::-;;;36675:710;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;37054:13:0;;37050:320;;37097:108;;-1:-1:-1;;;37097:108:0;;;;;;;:::i;37050:320::-;37320:6;37314:13;37305:6;37301:2;37297:15;37290:38;36675:710;-1:-1:-1;;;;;;36935:51:0;-1:-1:-1;;;36935:51:0;;-1:-1:-1;36928:58:0;;36639:801;-1:-1:-1;37424:4:0;36467:980;;;;;;:::o;33687:382::-;-1:-1:-1;;;;;33767:16:0;;33759:61;;;;-1:-1:-1;;;33759:61:0;;13344:2:1;33759:61:0;;;13326:21:1;;;13363:18;;;13356:30;13422:34;13402:18;;;13395:62;13474:18;;33759:61:0;13142:356:1;33759:61:0;31670:4;31694:16;;;:7;:16;;;;;;-1:-1:-1;;;;;31694:16:0;:30;33831:58;;;;-1:-1:-1;;;33831:58:0;;9528:2:1;33831:58:0;;;9510:21:1;9567:2;9547:18;;;9540:30;9606;9586:18;;;9579:58;9654:18;;33831:58:0;9326:352:1;33831:58:0;-1:-1:-1;;;;;33960:13:0;;;;;;:9;:13;;;;;:18;;33977:1;;33960:13;:18;;33977:1;;33960:18;:::i;:::-;;;;-1:-1:-1;;33989:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;33989:21:0;-1:-1:-1;;;;;33989:21:0;;;;;;;;34028:33;;33989:16;;;34028:33;;33989:16;;34028:33;33687:382;;:::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:173::-;718:20;;-1:-1:-1;;;;;767:31:1;;757:42;;747:70;;813:1;810;803:12;747:70;650:173;;;:::o;828:186::-;887:6;940:2;928:9;919:7;915:23;911:32;908:52;;;956:1;953;946:12;908:52;979:29;998:9;979:29;:::i;1019:260::-;1087:6;1095;1148:2;1136:9;1127:7;1123:23;1119:32;1116:52;;;1164:1;1161;1154:12;1116:52;1187:29;1206:9;1187:29;:::i;:::-;1177:39;;1235:38;1269:2;1258:9;1254:18;1235:38;:::i;:::-;1225:48;;1019:260;;;;;:::o;1284:328::-;1361:6;1369;1377;1430:2;1418:9;1409:7;1405:23;1401:32;1398:52;;;1446:1;1443;1436:12;1398:52;1469:29;1488:9;1469:29;:::i;:::-;1459:39;;1517:38;1551:2;1540:9;1536:18;1517:38;:::i;:::-;1507:48;;1602:2;1591:9;1587:18;1574:32;1564:42;;1284:328;;;;;:::o;1617:666::-;1712:6;1720;1728;1736;1789:3;1777:9;1768:7;1764:23;1760:33;1757:53;;;1806:1;1803;1796:12;1757:53;1829:29;1848:9;1829:29;:::i;:::-;1819:39;;1877:38;1911:2;1900:9;1896:18;1877:38;:::i;:::-;1867:48;;1962:2;1951:9;1947:18;1934:32;1924:42;;2017:2;2006:9;2002:18;1989:32;2044:18;2036:6;2033:30;2030:50;;;2076:1;2073;2066:12;2030:50;2099:22;;2152:4;2144:13;;2140:27;-1:-1:-1;2130:55:1;;2181:1;2178;2171:12;2130:55;2204:73;2269:7;2264:2;2251:16;2246:2;2242;2238:11;2204:73;:::i;:::-;2194:83;;;1617:666;;;;;;;:::o;2288:347::-;2353:6;2361;2414:2;2402:9;2393:7;2389:23;2385:32;2382:52;;;2430:1;2427;2420:12;2382:52;2453:29;2472:9;2453:29;:::i;:::-;2443:39;;2532:2;2521:9;2517:18;2504:32;2579:5;2572:13;2565:21;2558:5;2555:32;2545:60;;2601:1;2598;2591:12;2545:60;2624:5;2614:15;;;2288:347;;;;;:::o;2640:254::-;2708:6;2716;2769:2;2757:9;2748:7;2744:23;2740:32;2737:52;;;2785:1;2782;2775:12;2737:52;2808:29;2827:9;2808:29;:::i;:::-;2798:39;2884:2;2869:18;;;;2856:32;;-1:-1:-1;;;2640:254:1:o;2899:615::-;2985:6;2993;3046:2;3034:9;3025:7;3021:23;3017:32;3014:52;;;3062:1;3059;3052:12;3014:52;3102:9;3089:23;3131:18;3172:2;3164:6;3161:14;3158:34;;;3188:1;3185;3178:12;3158:34;3226:6;3215:9;3211:22;3201:32;;3271:7;3264:4;3260:2;3256:13;3252:27;3242:55;;3293:1;3290;3283:12;3242:55;3333:2;3320:16;3359:2;3351:6;3348:14;3345:34;;;3375:1;3372;3365:12;3345:34;3428:7;3423:2;3413:6;3410:1;3406:14;3402:2;3398:23;3394:32;3391:45;3388:65;;;3449:1;3446;3439:12;3388:65;3480:2;3472:11;;;;;3502:6;;-1:-1:-1;2899:615:1;;-1:-1:-1;;;;2899:615:1:o;3519:245::-;3577:6;3630:2;3618:9;3609:7;3605:23;3601:32;3598:52;;;3646:1;3643;3636:12;3598:52;3685:9;3672:23;3704:30;3728:5;3704:30;:::i;3769:249::-;3838:6;3891:2;3879:9;3870:7;3866:23;3862:32;3859:52;;;3907:1;3904;3897:12;3859:52;3939:9;3933:16;3958:30;3982:5;3958:30;:::i;4023:450::-;4092:6;4145:2;4133:9;4124:7;4120:23;4116:32;4113:52;;;4161:1;4158;4151:12;4113:52;4201:9;4188:23;4234:18;4226:6;4223:30;4220:50;;;4266:1;4263;4256:12;4220:50;4289:22;;4342:4;4334:13;;4330:27;-1:-1:-1;4320:55:1;;4371:1;4368;4361:12;4320:55;4394:73;4459:7;4454:2;4441:16;4436:2;4432;4428:11;4394:73;:::i;4478:180::-;4537:6;4590:2;4578:9;4569:7;4565:23;4561:32;4558:52;;;4606:1;4603;4596:12;4558:52;-1:-1:-1;4629:23:1;;4478:180;-1:-1:-1;4478:180:1:o;4663:257::-;4704:3;4742:5;4736:12;4769:6;4764:3;4757:19;4785:63;4841:6;4834:4;4829:3;4825:14;4818:4;4811:5;4807:16;4785:63;:::i;:::-;4902:2;4881:15;-1:-1:-1;;4877:29:1;4868:39;;;;4909:4;4864:50;;4663:257;-1:-1:-1;;4663:257:1:o;4925:637::-;5205:3;5243:6;5237:13;5259:53;5305:6;5300:3;5293:4;5285:6;5281:17;5259:53;:::i;:::-;5375:13;;5334:16;;;;5397:57;5375:13;5334:16;5431:4;5419:17;;5397:57;:::i;:::-;-1:-1:-1;;;5476:20:1;;5505:22;;;5554:1;5543:13;;4925:637;-1:-1:-1;;;;4925:637:1:o;5985:488::-;-1:-1:-1;;;;;6254:15:1;;;6236:34;;6306:15;;6301:2;6286:18;;6279:43;6353:2;6338:18;;6331:34;;;6401:3;6396:2;6381:18;;6374:31;;;6179:4;;6422:45;;6447:19;;6439:6;6422:45;:::i;:::-;6414:53;5985:488;-1:-1:-1;;;;;;5985:488:1:o;6757:632::-;6928:2;6980:21;;;7050:13;;6953:18;;;7072:22;;;6899:4;;6928:2;7151:15;;;;7125:2;7110:18;;;6899:4;7194:169;7208:6;7205:1;7202:13;7194:169;;;7269:13;;7257:26;;7338:15;;;;7303:12;;;;7230:1;7223:9;7194:169;;;-1:-1:-1;7380:3:1;;6757:632;-1:-1:-1;;;;;;6757:632:1:o;7586:219::-;7735:2;7724:9;7717:21;7698:4;7755:44;7795:2;7784:9;7780:18;7772:6;7755:44;:::i;8500:414::-;8702:2;8684:21;;;8741:2;8721:18;;;8714:30;8780:34;8775:2;8760:18;;8753:62;-1:-1:-1;;;8846:2:1;8831:18;;8824:48;8904:3;8889:19;;8500:414::o;14325:356::-;14527:2;14509:21;;;14546:18;;;14539:30;14605:34;14600:2;14585:18;;14578:62;14672:2;14657:18;;14325:356::o;15849:413::-;16051:2;16033:21;;;16090:2;16070:18;;;16063:30;16129:34;16124:2;16109:18;;16102:62;-1:-1:-1;;;16195:2:1;16180:18;;16173:47;16252:3;16237:19;;15849:413::o;16449:128::-;16489:3;16520:1;16516:6;16513:1;16510:13;16507:39;;;16526:18;;:::i;:::-;-1:-1:-1;16562:9:1;;16449:128::o;16582:120::-;16622:1;16648;16638:35;;16653:18;;:::i;:::-;-1:-1:-1;16687:9:1;;16582:120::o;16707:168::-;16747:7;16813:1;16809;16805:6;16801:14;16798:1;16795:21;16790:1;16783:9;16776:17;16772:45;16769:71;;;16820:18;;:::i;:::-;-1:-1:-1;16860:9:1;;16707:168::o;16880:125::-;16920:4;16948:1;16945;16942:8;16939:34;;;16953:18;;:::i;:::-;-1:-1:-1;16990:9:1;;16880:125::o;17010:258::-;17082:1;17092:113;17106:6;17103:1;17100:13;17092:113;;;17182:11;;;17176:18;17163:11;;;17156:39;17128:2;17121:10;17092:113;;;17223:6;17220:1;17217:13;17214:48;;;-1:-1:-1;;17258:1:1;17240:16;;17233:27;17010:258::o;17273:136::-;17312:3;17340:5;17330:39;;17349:18;;:::i;:::-;-1:-1:-1;;;17385:18:1;;17273:136::o;17414:380::-;17493:1;17489:12;;;;17536;;;17557:61;;17611:4;17603:6;17599:17;17589:27;;17557:61;17664:2;17656:6;17653:14;17633:18;17630:38;17627:161;;;17710:10;17705:3;17701:20;17698:1;17691:31;17745:4;17742:1;17735:15;17773:4;17770:1;17763:15;17627:161;;17414:380;;;:::o;17799:135::-;17838:3;-1:-1:-1;;17859:17:1;;17856:43;;;17879:18;;:::i;:::-;-1:-1:-1;17926:1:1;17915:13;;17799:135::o;17939:112::-;17971:1;17997;17987:35;;18002:18;;:::i;:::-;-1:-1:-1;18036:9:1;;17939:112::o;18056:127::-;18117:10;18112:3;18108:20;18105:1;18098:31;18148:4;18145:1;18138:15;18172:4;18169:1;18162:15;18188:127;18249:10;18244:3;18240:20;18237:1;18230:31;18280:4;18277:1;18270:15;18304:4;18301:1;18294:15;18320:127;18381:10;18376:3;18372:20;18369:1;18362:31;18412:4;18409:1;18402:15;18436:4;18433:1;18426:15;18452:127;18513:10;18508:3;18504:20;18501:1;18494:31;18544:4;18541:1;18534:15;18568:4;18565:1;18558:15;18584:127;18645:10;18640:3;18636:20;18633:1;18626:31;18676:4;18673:1;18666:15;18700:4;18697:1;18690:15;18716:131;-1:-1:-1;;;;;;18790:32:1;;18780:43;;18770:71;;18837:1;18834;18827:12
Swarm Source
ipfs://9a6250af8cce038136c9f253e2945218b7064a4bbdd18de340284f9ad53fdb08
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.