ERC-721
Overview
Max Total Supply
1,331 PFSC
Holders
546
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract
Balance
2 PFSCLoading...
Loading
Loading...
Loading
Loading...
Loading
Contract Name:
PinkFlamingoSocialClub
Compiler Version
v0.8.0+commit.c7dfd78e
Contract Source Code (Solidity)
/** *Submitted for verification at ftmscan.com on 2021-10-28 */ // File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Strings.sol // OpenZeppelin Contracts v4.3.2 (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: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Context.sol // OpenZeppelin Contracts v4.3.2 (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: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Address.sol // OpenZeppelin Contracts v4.3.2 (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: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts v4.3.2 (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: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.3.2 (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: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.3.2 (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: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC721/IERC721.sol // OpenZeppelin Contracts v4.3.2 (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: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC721/extensions/IERC721Enumerable.sol // OpenZeppelin Contracts v4.3.2 (token/ERC721/extensions/IERC721Enumerable.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC721/extensions/IERC721Metadata.sol // OpenZeppelin Contracts v4.3.2 (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: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC721/ERC721.sol // OpenZeppelin Contracts v4.3.2 (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 { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || 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 Approve `operator` to operate on all of `owner` tokens * * Emits a {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC721: approve to caller"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC721/extensions/ERC721Enumerable.sol // OpenZeppelin Contracts v4.3.2 (token/ERC721/extensions/ERC721Enumerable.sol) pragma solidity ^0.8.0; /** * @dev This implements an optional extension of {ERC721} defined in the EIP that adds * enumerability of all the token ids in the contract as well as all token ids owned by each * account. */ abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => mapping(uint256 => uint256)) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds"); return _ownedTokens[owner][index]; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds"); return _allTokens[index]; } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` cannot be the zero address. * - `to` cannot be the zero address. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array delete _allTokensIndex[tokenId]; _allTokens.pop(); } } // File: contracts/PinkFlamingoSocialClub.sol pragma solidity ^0.8.0; contract PinkFlamingoSocialClub is ERC721Enumerable { /** @dev events */ event Mint(address indexed _to, uint256 indexed _tokenId); event Migration(address indexed _to, uint256 indexed _tokenId); /** @dev global */ address public admin; address public router; uint256 public nextTokenId = 1; uint256 public maxMint; uint256 public tokenPriceInWei; string public baseURI; bool public isMintPaused = true; /** @dev minters store */ mapping(uint256 => address) public tokenIdToMinterAddress; /** @dev constructor */ constructor( string memory _tokenName, string memory _tokenSymbol, address _router, uint256 _maxMint, uint256 _tokenPriceInWei ) ERC721(_tokenName, _tokenSymbol) { admin = msg.sender; maxMint = _maxMint; router = _router; tokenPriceInWei = _tokenPriceInWei; } /** @dev modifiers */ modifier onlyValidTokenId(uint256 _tokenId) { require(_exists(_tokenId), 'Token ID does not exist Yet'); _; } modifier onlyAdmin() { require(msg.sender == admin, 'Only admin'); _; } /** @dev helpers */ function _splitFunds() internal { if (msg.value > 0) { uint256 refund = msg.value - tokenPriceInWei; if (refund > 0) { payable(msg.sender).transfer(refund); } payable(admin).transfer(tokenPriceInWei); } } function pauseMint() public onlyAdmin { isMintPaused = !isMintPaused; } function addBaseURI(string memory _newBaseURI) public onlyAdmin { baseURI = _newBaseURI; } function contractURI() public pure returns (string memory) { return string( 'https://gateway.pinata.cloud/ipfs/QmPHQECr5EdhTgeWDjKJL7VNcSsFgrTeTVTgFtLpKmNbaA' ); } function tokenURI(uint256 _tokenId) public view override onlyValidTokenId(_tokenId) returns (string memory) { return string(abi.encodePacked(baseURI, '/nfts/', Strings.toString(_tokenId))); } /** @dev Mint Functions */ function _mintToken(address _to) internal returns (uint256 _tokenId) { uint256 tokenIdToBe = nextTokenId; nextTokenId += 1; _mint(_to, tokenIdToBe); tokenIdToMinterAddress[tokenIdToBe] = _to; emit Mint(_to, tokenIdToBe); return tokenIdToBe; } function mintFlamingo() public payable returns (uint256 _tokenId) { return mintFalmingoTo(msg.sender); } function mintFalmingoTo(address _to) public payable returns (uint256 _tokenId) { require(msg.value >= tokenPriceInWei, 'Must send at least current price for token'); require(nextTokenId <= maxMint, 'Must not exceed maximum mint on Fantom'); require(!isMintPaused || msg.sender == admin, 'Purchases must not be paused'); uint256 tokenId = _mintToken(_to); _splitFunds(); return tokenId; } /** @dev anySwap */ function updateRouter(address _router) external onlyAdmin { router = _router; } function _safeMigrationMint( address _router, uint256 _tokenId, address _to ) internal { _safeMint(_router, _tokenId); emit Migration(_to, _tokenId); } function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory data ) public virtual override { if (_msgSender() == router && from == router && to != router && !_exists(tokenId)) { require(tokenId > 0, 'Token ID invalid'); _safeMigrationMint(router, tokenId, to); } require( _isApprovedOrOwner(_msgSender(), tokenId), 'ERC721: transfer caller is not owner nor approved' ); _safeTransfer(from, to, tokenId, data); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_tokenName","type":"string"},{"internalType":"string","name":"_tokenSymbol","type":"string"},{"internalType":"address","name":"_router","type":"address"},{"internalType":"uint256","name":"_maxMint","type":"uint256"},{"internalType":"uint256","name":"_tokenPriceInWei","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_to","type":"address"},{"indexed":true,"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"Migration","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_to","type":"address"},{"indexed":true,"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"addBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"admin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","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":"isMintPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"}],"name":"mintFalmingoTo","outputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintFlamingo","outputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextTokenId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"pauseMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenIdToMinterAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenPriceInWei","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_router","type":"address"}],"name":"updateRouter","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526001600c8190556010805460ff191690911790553480156200002557600080fd5b50604051620025d8380380620025d883398101604081905262000048916200020b565b84518590859062000061906000906020850190620000ba565b50805162000077906001906020840190620000ba565b5050600a8054336001600160a01b031991821617909155600d9390935550600b80549092166001600160a01b0393909316929092179055600e5550620002f89050565b828054620000c890620002a5565b90600052602060002090601f016020900481019282620000ec576000855562000137565b82601f106200010757805160ff191683800117855562000137565b8280016001018555821562000137579182015b82811115620001375782518255916020019190600101906200011a565b506200014592915062000149565b5090565b5b808211156200014557600081556001016200014a565b600082601f83011262000171578081fd5b81516001600160401b03808211156200018e576200018e620002e2565b6040516020601f8401601f1916820181018381118382101715620001b657620001b6620002e2565b6040528382528584018101871015620001cd578485fd5b8492505b83831015620001f05785830181015182840182015291820191620001d1565b838311156200020157848185840101525b5095945050505050565b600080600080600060a0868803121562000223578081fd5b85516001600160401b03808211156200023a578283fd5b6200024889838a0162000160565b965060208801519150808211156200025e578283fd5b506200026d8882890162000160565b604088015190955090506001600160a01b03811681146200028c578182fd5b6060870151608090970151959894975095949392505050565b600281046001821680620002ba57607f821691505b60208210811415620002dc57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b6122d080620003086000396000f3fe6080604052600436106101cd5760003560e01c806370a08231116100f7578063b88d4fde11610095578063e8a3d48511610064578063e8a3d485146104c9578063e985e9c5146104de578063f851a440146104fe578063f887ea4014610513576101cd565b8063b88d4fde14610454578063c851cc3214610474578063c87b56dd14610494578063cd85cdb5146104b4576101cd565b806383b66cba116100d157806383b66cba146104045780639258b6e71461040c57806395d89b411461041f578063a22cb46514610434576101cd565b806370a08231146103ba5780637501f741146103da57806375794a3c146103ef576101cd565b806323b872dd1161016f57806342842e0e1161013e57806342842e0e146103455780634f6ccce7146103655780636352211e146103855780636c0360eb146103a5576101cd565b806323b872dd146102d057806327cfa7d2146102f05780632f745c59146103105780632f8de81014610330576101cd565b8063095ea7b3116101ab578063095ea7b31461025757806315839b301461027957806318160ddd1461028e57806321494e22146102b0576101cd565b806301ffc9a7146101d257806306fdde0314610208578063081812fc1461022a575b600080fd5b3480156101de57600080fd5b506101f26101ed36600461197b565b610528565b6040516101ff9190611b6a565b60405180910390f35b34801561021457600080fd5b5061021d610555565b6040516101ff9190611b75565b34801561023657600080fd5b5061024a6102453660046119f9565b6105e7565b6040516101ff9190611b19565b34801561026357600080fd5b50610277610272366004611952565b610633565b005b34801561028557600080fd5b506101f26106cb565b34801561029a57600080fd5b506102a36106d4565b6040516101ff9190612107565b3480156102bc57600080fd5b5061024a6102cb3660046119f9565b6106da565b3480156102dc57600080fd5b506102776102eb366004611864565b6106f5565b3480156102fc57600080fd5b5061027761030b3660046119b3565b61072d565b34801561031c57600080fd5b506102a361032b366004611952565b61076e565b34801561033c57600080fd5b506102a36107c0565b34801561035157600080fd5b50610277610360366004611864565b6107c6565b34801561037157600080fd5b506102a36103803660046119f9565b6107e1565b34801561039157600080fd5b5061024a6103a03660046119f9565b61083c565b3480156103b157600080fd5b5061021d610871565b3480156103c657600080fd5b506102a36103d5366004611811565b6108ff565b3480156103e657600080fd5b506102a3610943565b3480156103fb57600080fd5b506102a3610949565b6102a361094f565b6102a361041a366004611811565b61095f565b34801561042b57600080fd5b5061021d6109f4565b34801561044057600080fd5b5061027761044f366004611918565b610a03565b34801561046057600080fd5b5061027761046f36600461189f565b610a15565b34801561048057600080fd5b5061027761048f366004611811565b610af3565b3480156104a057600080fd5b5061021d6104af3660046119f9565b610b3f565b3480156104c057600080fd5b50610277610b9b565b3480156104d557600080fd5b5061021d610bd9565b3480156104ea57600080fd5b506101f26104f9366004611832565b610bf9565b34801561050a57600080fd5b5061024a610c27565b34801561051f57600080fd5b5061024a610c36565b60006001600160e01b0319821663780e9d6360e01b148061054d575061054d82610c45565b90505b919050565b6060600080546105649061218b565b80601f01602080910402602001604051908101604052809291908181526020018280546105909061218b565b80156105dd5780601f106105b2576101008083540402835291602001916105dd565b820191906000526020600020905b8154815290600101906020018083116105c057829003601f168201915b5050505050905090565b60006105f282610c85565b6106175760405162461bcd60e51b815260040161060e90611f33565b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b600061063e8261083c565b9050806001600160a01b0316836001600160a01b031614156106725760405162461bcd60e51b815260040161060e90612029565b806001600160a01b0316610684610ca2565b6001600160a01b031614806106a057506106a0816104f9610ca2565b6106bc5760405162461bcd60e51b815260040161060e90611e0e565b6106c68383610ca6565b505050565b60105460ff1681565b60085490565b6011602052600090815260409020546001600160a01b031681565b610706610700610ca2565b82610d14565b6107225760405162461bcd60e51b815260040161060e9061206a565b6106c6838383610d99565b600a546001600160a01b031633146107575760405162461bcd60e51b815260040161060e90611d58565b805161076a90600f9060208401906116f1565b5050565b6000610779836108ff565b82106107975760405162461bcd60e51b815260040161060e90611bbf565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b600e5481565b6106c683838360405180602001604052806000815250610a15565b60006107eb6106d4565b82106108095760405162461bcd60e51b815260040161060e906120bb565b6008828154811061082a57634e487b7160e01b600052603260045260246000fd5b90600052602060002001549050919050565b6000818152600260205260408120546001600160a01b03168061054d5760405162461bcd60e51b815260040161060e90611eb5565b600f805461087e9061218b565b80601f01602080910402602001604051908101604052809291908181526020018280546108aa9061218b565b80156108f75780601f106108cc576101008083540402835291602001916108f7565b820191906000526020600020905b8154815290600101906020018083116108da57829003601f168201915b505050505081565b60006001600160a01b0382166109275760405162461bcd60e51b815260040161060e90611e6b565b506001600160a01b031660009081526003602052604090205490565b600d5481565b600c5481565b600061095a3361095f565b905090565b6000600e543410156109835760405162461bcd60e51b815260040161060e90611c93565b600d54600c5411156109a75760405162461bcd60e51b815260040161060e90611dc8565b60105460ff1615806109c35750600a546001600160a01b031633145b6109df5760405162461bcd60e51b815260040161060e90611b88565b60006109ea83610ec6565b905061054d610f43565b6060600180546105649061218b565b61076a610a0e610ca2565b8383610fce565b600b546001600160a01b0316610a29610ca2565b6001600160a01b0316148015610a4c5750600b546001600160a01b038581169116145b8015610a665750600b546001600160a01b03848116911614155b8015610a785750610a7682610c85565b155b15610ab45760008211610a9d5760405162461bcd60e51b815260040161060e90611f7f565b600b54610ab4906001600160a01b03168385611071565b610ac5610abf610ca2565b83610d14565b610ae15760405162461bcd60e51b815260040161060e9061206a565b610aed848484846110b6565b50505050565b600a546001600160a01b03163314610b1d5760405162461bcd60e51b815260040161060e90611d58565b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b606081610b4b81610c85565b610b675760405162461bcd60e51b815260040161060e90611fa9565b600f610b72846110e9565b604051602001610b83929190611a6b565b60405160208183030381529060405291505b50919050565b600a546001600160a01b03163314610bc55760405162461bcd60e51b815260040161060e90611d58565b6010805460ff19811660ff90911615179055565b606060405180608001604052806050815260200161224b60509139905090565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b600a546001600160a01b031681565b600b546001600160a01b031681565b60006001600160e01b031982166380ac58cd60e01b1480610c7657506001600160e01b03198216635b5e139f60e01b145b8061054d575061054d82611204565b6000908152600260205260409020546001600160a01b0316151590565b3390565b600081815260046020526040902080546001600160a01b0319166001600160a01b0384169081179091558190610cdb8261083c565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000610d1f82610c85565b610d3b5760405162461bcd60e51b815260040161060e90611d7c565b6000610d468361083c565b9050806001600160a01b0316846001600160a01b03161480610d815750836001600160a01b0316610d76846105e7565b6001600160a01b0316145b80610d915750610d918185610bf9565b949350505050565b826001600160a01b0316610dac8261083c565b6001600160a01b031614610dd25760405162461bcd60e51b815260040161060e90611fe0565b6001600160a01b038216610df85760405162461bcd60e51b815260040161060e90611cdd565b610e0383838361121d565b610e0e600082610ca6565b6001600160a01b0383166000908152600360205260408120805460019290610e37908490612148565b90915550506001600160a01b0382166000908152600360205260408120805460019290610e6590849061211c565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600c805460009160019083610edb838561211c565b90915550610eeb905083826112a6565b60008181526011602052604080822080546001600160a01b0319166001600160a01b038716908117909155905183927f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d412139688591a392915050565b3415610fcc576000600e5434610f599190612148565b90508015610f9057604051339082156108fc029083906000818181858888f19350505050158015610f8e573d6000803e3d6000fd5b505b600a54600e546040516001600160a01b039092169181156108fc0291906000818181858888f1935050505015801561076a573d6000803e3d6000fd5b565b816001600160a01b0316836001600160a01b031614156110005760405162461bcd60e51b815260040161060e90611d21565b6001600160a01b0383811660008181526005602090815260408083209487168084529490915290819020805460ff1916851515179055517f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3190611064908590611b6a565b60405180910390a3505050565b61107b8383611385565b60405182906001600160a01b038316907f5c2da67751b5c2b8ffb1579ea16e70cf01e4b94068f0d42369de650adc07f61390600090a3505050565b6110c1848484610d99565b6110cd8484848461139f565b610aed5760405162461bcd60e51b815260040161060e90611c0a565b60608161110e57506040805180820190915260018152600360fc1b6020820152610550565b8160005b81156111385780611122816121c0565b91506111319050600a83612134565b9150611112565b60008167ffffffffffffffff81111561116157634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f19166020018201604052801561118b576020820181803683370190505b5090505b8415610d91576111a0600183612148565b91506111ad600a866121db565b6111b890603061211c565b60f81b8183815181106111db57634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a9053506111fd600a86612134565b945061118f565b6001600160e01b031981166301ffc9a760e01b14919050565b6112288383836106c6565b6001600160a01b0383166112445761123f816114ba565b611267565b816001600160a01b0316836001600160a01b0316146112675761126783826114fe565b6001600160a01b0382166112835761127e8161159b565b6106c6565b826001600160a01b0316826001600160a01b0316146106c6576106c68282611674565b6001600160a01b0382166112cc5760405162461bcd60e51b815260040161060e90611efe565b6112d581610c85565b156112f25760405162461bcd60e51b815260040161060e90611c5c565b6112fe6000838361121d565b6001600160a01b038216600090815260036020526040812080546001929061132790849061211c565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b61076a8282604051806020016040528060008152506116b8565b60006113b3846001600160a01b03166116eb565b156114af57836001600160a01b031663150b7a026113cf610ca2565b8786866040518563ffffffff1660e01b81526004016113f19493929190611b2d565b602060405180830381600087803b15801561140b57600080fd5b505af192505050801561143b575060408051601f3d908101601f1916820190925261143891810190611997565b60015b611495573d808015611469576040519150601f19603f3d011682016040523d82523d6000602084013e61146e565b606091505b50805161148d5760405162461bcd60e51b815260040161060e90611c0a565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050610d91565b506001949350505050565b600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b6000600161150b846108ff565b6115159190612148565b600083815260076020526040902054909150808214611568576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b6008546000906115ad90600190612148565b600083815260096020526040812054600880549394509092849081106115e357634e487b7160e01b600052603260045260246000fd5b90600052602060002001549050806008838154811061161257634e487b7160e01b600052603260045260246000fd5b600091825260208083209091019290925582815260099091526040808220849055858252812055600880548061165857634e487b7160e01b600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b600061167f836108ff565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b6116c283836112a6565b6116cf600084848461139f565b6106c65760405162461bcd60e51b815260040161060e90611c0a565b3b151590565b8280546116fd9061218b565b90600052602060002090601f01602090048101928261171f5760008555611765565b82601f1061173857805160ff1916838001178555611765565b82800160010185558215611765579182015b8281111561176557825182559160200191906001019061174a565b50611771929150611775565b5090565b5b808211156117715760008155600101611776565b600067ffffffffffffffff808411156117a5576117a561221b565b604051601f8501601f1916810160200182811182821017156117c9576117c961221b565b6040528481529150818385018610156117e157600080fd5b8484602083013760006020868301015250509392505050565b80356001600160a01b038116811461055057600080fd5b600060208284031215611822578081fd5b61182b826117fa565b9392505050565b60008060408385031215611844578081fd5b61184d836117fa565b915061185b602084016117fa565b90509250929050565b600080600060608486031215611878578081fd5b611881846117fa565b925061188f602085016117fa565b9150604084013590509250925092565b600080600080608085870312156118b4578081fd5b6118bd856117fa565b93506118cb602086016117fa565b925060408501359150606085013567ffffffffffffffff8111156118ed578182fd5b8501601f810187136118fd578182fd5b61190c8782356020840161178a565b91505092959194509250565b6000806040838503121561192a578182fd5b611933836117fa565b915060208301358015158114611947578182fd5b809150509250929050565b60008060408385031215611964578182fd5b61196d836117fa565b946020939093013593505050565b60006020828403121561198c578081fd5b813561182b81612231565b6000602082840312156119a8578081fd5b815161182b81612231565b6000602082840312156119c4578081fd5b813567ffffffffffffffff8111156119da578182fd5b8201601f810184136119ea578182fd5b610d918482356020840161178a565b600060208284031215611a0a578081fd5b5035919050565b60008151808452611a2981602086016020860161215f565b601f01601f19169290920160200192915050565b60008151611a4f81856020860161215f565b9290920192915050565b652f6e6674732f60d01b815260060190565b8254600090819060028104600180831680611a8757607f831692505b6020808410821415611aa757634e487b7160e01b87526022600452602487fd5b818015611abb5760018114611acc57611af8565b60ff19861689528489019650611af8565b611ad58b612110565b885b86811015611af05781548b820152908501908301611ad7565b505084890196505b505050505050611b10611b0a82611a59565b85611a3d565b95945050505050565b6001600160a01b0391909116815260200190565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090611b6090830184611a11565b9695505050505050565b901515815260200190565b60006020825261182b6020830184611a11565b6020808252601c908201527f507572636861736573206d757374206e6f742062652070617573656400000000604082015260600190565b6020808252602b908201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560408201526a74206f6620626f756e647360a81b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252601c908201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604082015260600190565b6020808252602a908201527f4d7573742073656e64206174206c656173742063757272656e74207072696365604082015269103337b9103a37b5b2b760b11b606082015260800190565b60208082526024908201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646040820152637265737360e01b606082015260800190565b60208082526019908201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604082015260600190565b6020808252600a908201526927b7363c9030b236b4b760b11b604082015260600190565b6020808252602c908201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860408201526b34b9ba32b73a103a37b5b2b760a11b606082015260800190565b60208082526026908201527f4d757374206e6f7420657863656564206d6178696d756d206d696e74206f6e2060408201526546616e746f6d60d01b606082015260800190565b60208082526038908201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760408201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000606082015260800190565b6020808252602a908201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604082015269726f206164647265737360b01b606082015260800190565b60208082526029908201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460408201526832b73a103a37b5b2b760b91b606082015260800190565b6020808252818101527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604082015260600190565b6020808252602c908201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860408201526b34b9ba32b73a103a37b5b2b760a11b606082015260800190565b60208082526010908201526f151bdad95b881251081a5b9d985b1a5960821b604082015260600190565b6020808252601b908201527f546f6b656e20494420646f6573206e6f74206578697374205965740000000000604082015260600190565b60208082526029908201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960408201526839903737ba1037bbb760b91b606082015260800190565b60208082526021908201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656040820152603960f91b606082015260800190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b6020808252602c908201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60408201526b7574206f6620626f756e647360a01b606082015260800190565b90815260200190565b60009081526020902090565b6000821982111561212f5761212f6121ef565b500190565b60008261214357612143612205565b500490565b60008282101561215a5761215a6121ef565b500390565b60005b8381101561217a578181015183820152602001612162565b83811115610aed5750506000910152565b60028104600182168061219f57607f821691505b60208210811415610b9557634e487b7160e01b600052602260045260246000fd5b60006000198214156121d4576121d46121ef565b5060010190565b6000826121ea576121ea612205565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b03198116811461224757600080fd5b5056fe68747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f516d5048514543723545646854676557446a4b4a4c37564e63537346677254655456546746744c704b6d4e626141a2646970667358221220dc1c34a4cb26fecdb921b634f08e73445f36ae06e672ec70a4171a710bdb4c5164736f6c6343000800003300000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000063d3f3b271dbbd43a788687b86d516fe185d25090000000000000000000000000000000000000000000000000000000000000309000000000000000000000000000000000000000000000002b5e3af16b1880000000000000000000000000000000000000000000000000000000000000000001950696e6b20466c616d696e676f20536f6369616c20436c75620000000000000000000000000000000000000000000000000000000000000000000000000000045046534300000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x6080604052600436106101cd5760003560e01c806370a08231116100f7578063b88d4fde11610095578063e8a3d48511610064578063e8a3d485146104c9578063e985e9c5146104de578063f851a440146104fe578063f887ea4014610513576101cd565b8063b88d4fde14610454578063c851cc3214610474578063c87b56dd14610494578063cd85cdb5146104b4576101cd565b806383b66cba116100d157806383b66cba146104045780639258b6e71461040c57806395d89b411461041f578063a22cb46514610434576101cd565b806370a08231146103ba5780637501f741146103da57806375794a3c146103ef576101cd565b806323b872dd1161016f57806342842e0e1161013e57806342842e0e146103455780634f6ccce7146103655780636352211e146103855780636c0360eb146103a5576101cd565b806323b872dd146102d057806327cfa7d2146102f05780632f745c59146103105780632f8de81014610330576101cd565b8063095ea7b3116101ab578063095ea7b31461025757806315839b301461027957806318160ddd1461028e57806321494e22146102b0576101cd565b806301ffc9a7146101d257806306fdde0314610208578063081812fc1461022a575b600080fd5b3480156101de57600080fd5b506101f26101ed36600461197b565b610528565b6040516101ff9190611b6a565b60405180910390f35b34801561021457600080fd5b5061021d610555565b6040516101ff9190611b75565b34801561023657600080fd5b5061024a6102453660046119f9565b6105e7565b6040516101ff9190611b19565b34801561026357600080fd5b50610277610272366004611952565b610633565b005b34801561028557600080fd5b506101f26106cb565b34801561029a57600080fd5b506102a36106d4565b6040516101ff9190612107565b3480156102bc57600080fd5b5061024a6102cb3660046119f9565b6106da565b3480156102dc57600080fd5b506102776102eb366004611864565b6106f5565b3480156102fc57600080fd5b5061027761030b3660046119b3565b61072d565b34801561031c57600080fd5b506102a361032b366004611952565b61076e565b34801561033c57600080fd5b506102a36107c0565b34801561035157600080fd5b50610277610360366004611864565b6107c6565b34801561037157600080fd5b506102a36103803660046119f9565b6107e1565b34801561039157600080fd5b5061024a6103a03660046119f9565b61083c565b3480156103b157600080fd5b5061021d610871565b3480156103c657600080fd5b506102a36103d5366004611811565b6108ff565b3480156103e657600080fd5b506102a3610943565b3480156103fb57600080fd5b506102a3610949565b6102a361094f565b6102a361041a366004611811565b61095f565b34801561042b57600080fd5b5061021d6109f4565b34801561044057600080fd5b5061027761044f366004611918565b610a03565b34801561046057600080fd5b5061027761046f36600461189f565b610a15565b34801561048057600080fd5b5061027761048f366004611811565b610af3565b3480156104a057600080fd5b5061021d6104af3660046119f9565b610b3f565b3480156104c057600080fd5b50610277610b9b565b3480156104d557600080fd5b5061021d610bd9565b3480156104ea57600080fd5b506101f26104f9366004611832565b610bf9565b34801561050a57600080fd5b5061024a610c27565b34801561051f57600080fd5b5061024a610c36565b60006001600160e01b0319821663780e9d6360e01b148061054d575061054d82610c45565b90505b919050565b6060600080546105649061218b565b80601f01602080910402602001604051908101604052809291908181526020018280546105909061218b565b80156105dd5780601f106105b2576101008083540402835291602001916105dd565b820191906000526020600020905b8154815290600101906020018083116105c057829003601f168201915b5050505050905090565b60006105f282610c85565b6106175760405162461bcd60e51b815260040161060e90611f33565b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b600061063e8261083c565b9050806001600160a01b0316836001600160a01b031614156106725760405162461bcd60e51b815260040161060e90612029565b806001600160a01b0316610684610ca2565b6001600160a01b031614806106a057506106a0816104f9610ca2565b6106bc5760405162461bcd60e51b815260040161060e90611e0e565b6106c68383610ca6565b505050565b60105460ff1681565b60085490565b6011602052600090815260409020546001600160a01b031681565b610706610700610ca2565b82610d14565b6107225760405162461bcd60e51b815260040161060e9061206a565b6106c6838383610d99565b600a546001600160a01b031633146107575760405162461bcd60e51b815260040161060e90611d58565b805161076a90600f9060208401906116f1565b5050565b6000610779836108ff565b82106107975760405162461bcd60e51b815260040161060e90611bbf565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b600e5481565b6106c683838360405180602001604052806000815250610a15565b60006107eb6106d4565b82106108095760405162461bcd60e51b815260040161060e906120bb565b6008828154811061082a57634e487b7160e01b600052603260045260246000fd5b90600052602060002001549050919050565b6000818152600260205260408120546001600160a01b03168061054d5760405162461bcd60e51b815260040161060e90611eb5565b600f805461087e9061218b565b80601f01602080910402602001604051908101604052809291908181526020018280546108aa9061218b565b80156108f75780601f106108cc576101008083540402835291602001916108f7565b820191906000526020600020905b8154815290600101906020018083116108da57829003601f168201915b505050505081565b60006001600160a01b0382166109275760405162461bcd60e51b815260040161060e90611e6b565b506001600160a01b031660009081526003602052604090205490565b600d5481565b600c5481565b600061095a3361095f565b905090565b6000600e543410156109835760405162461bcd60e51b815260040161060e90611c93565b600d54600c5411156109a75760405162461bcd60e51b815260040161060e90611dc8565b60105460ff1615806109c35750600a546001600160a01b031633145b6109df5760405162461bcd60e51b815260040161060e90611b88565b60006109ea83610ec6565b905061054d610f43565b6060600180546105649061218b565b61076a610a0e610ca2565b8383610fce565b600b546001600160a01b0316610a29610ca2565b6001600160a01b0316148015610a4c5750600b546001600160a01b038581169116145b8015610a665750600b546001600160a01b03848116911614155b8015610a785750610a7682610c85565b155b15610ab45760008211610a9d5760405162461bcd60e51b815260040161060e90611f7f565b600b54610ab4906001600160a01b03168385611071565b610ac5610abf610ca2565b83610d14565b610ae15760405162461bcd60e51b815260040161060e9061206a565b610aed848484846110b6565b50505050565b600a546001600160a01b03163314610b1d5760405162461bcd60e51b815260040161060e90611d58565b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b606081610b4b81610c85565b610b675760405162461bcd60e51b815260040161060e90611fa9565b600f610b72846110e9565b604051602001610b83929190611a6b565b60405160208183030381529060405291505b50919050565b600a546001600160a01b03163314610bc55760405162461bcd60e51b815260040161060e90611d58565b6010805460ff19811660ff90911615179055565b606060405180608001604052806050815260200161224b60509139905090565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b600a546001600160a01b031681565b600b546001600160a01b031681565b60006001600160e01b031982166380ac58cd60e01b1480610c7657506001600160e01b03198216635b5e139f60e01b145b8061054d575061054d82611204565b6000908152600260205260409020546001600160a01b0316151590565b3390565b600081815260046020526040902080546001600160a01b0319166001600160a01b0384169081179091558190610cdb8261083c565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000610d1f82610c85565b610d3b5760405162461bcd60e51b815260040161060e90611d7c565b6000610d468361083c565b9050806001600160a01b0316846001600160a01b03161480610d815750836001600160a01b0316610d76846105e7565b6001600160a01b0316145b80610d915750610d918185610bf9565b949350505050565b826001600160a01b0316610dac8261083c565b6001600160a01b031614610dd25760405162461bcd60e51b815260040161060e90611fe0565b6001600160a01b038216610df85760405162461bcd60e51b815260040161060e90611cdd565b610e0383838361121d565b610e0e600082610ca6565b6001600160a01b0383166000908152600360205260408120805460019290610e37908490612148565b90915550506001600160a01b0382166000908152600360205260408120805460019290610e6590849061211c565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600c805460009160019083610edb838561211c565b90915550610eeb905083826112a6565b60008181526011602052604080822080546001600160a01b0319166001600160a01b038716908117909155905183927f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d412139688591a392915050565b3415610fcc576000600e5434610f599190612148565b90508015610f9057604051339082156108fc029083906000818181858888f19350505050158015610f8e573d6000803e3d6000fd5b505b600a54600e546040516001600160a01b039092169181156108fc0291906000818181858888f1935050505015801561076a573d6000803e3d6000fd5b565b816001600160a01b0316836001600160a01b031614156110005760405162461bcd60e51b815260040161060e90611d21565b6001600160a01b0383811660008181526005602090815260408083209487168084529490915290819020805460ff1916851515179055517f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3190611064908590611b6a565b60405180910390a3505050565b61107b8383611385565b60405182906001600160a01b038316907f5c2da67751b5c2b8ffb1579ea16e70cf01e4b94068f0d42369de650adc07f61390600090a3505050565b6110c1848484610d99565b6110cd8484848461139f565b610aed5760405162461bcd60e51b815260040161060e90611c0a565b60608161110e57506040805180820190915260018152600360fc1b6020820152610550565b8160005b81156111385780611122816121c0565b91506111319050600a83612134565b9150611112565b60008167ffffffffffffffff81111561116157634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f19166020018201604052801561118b576020820181803683370190505b5090505b8415610d91576111a0600183612148565b91506111ad600a866121db565b6111b890603061211c565b60f81b8183815181106111db57634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a9053506111fd600a86612134565b945061118f565b6001600160e01b031981166301ffc9a760e01b14919050565b6112288383836106c6565b6001600160a01b0383166112445761123f816114ba565b611267565b816001600160a01b0316836001600160a01b0316146112675761126783826114fe565b6001600160a01b0382166112835761127e8161159b565b6106c6565b826001600160a01b0316826001600160a01b0316146106c6576106c68282611674565b6001600160a01b0382166112cc5760405162461bcd60e51b815260040161060e90611efe565b6112d581610c85565b156112f25760405162461bcd60e51b815260040161060e90611c5c565b6112fe6000838361121d565b6001600160a01b038216600090815260036020526040812080546001929061132790849061211c565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b61076a8282604051806020016040528060008152506116b8565b60006113b3846001600160a01b03166116eb565b156114af57836001600160a01b031663150b7a026113cf610ca2565b8786866040518563ffffffff1660e01b81526004016113f19493929190611b2d565b602060405180830381600087803b15801561140b57600080fd5b505af192505050801561143b575060408051601f3d908101601f1916820190925261143891810190611997565b60015b611495573d808015611469576040519150601f19603f3d011682016040523d82523d6000602084013e61146e565b606091505b50805161148d5760405162461bcd60e51b815260040161060e90611c0a565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050610d91565b506001949350505050565b600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b6000600161150b846108ff565b6115159190612148565b600083815260076020526040902054909150808214611568576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b6008546000906115ad90600190612148565b600083815260096020526040812054600880549394509092849081106115e357634e487b7160e01b600052603260045260246000fd5b90600052602060002001549050806008838154811061161257634e487b7160e01b600052603260045260246000fd5b600091825260208083209091019290925582815260099091526040808220849055858252812055600880548061165857634e487b7160e01b600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b600061167f836108ff565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b6116c283836112a6565b6116cf600084848461139f565b6106c65760405162461bcd60e51b815260040161060e90611c0a565b3b151590565b8280546116fd9061218b565b90600052602060002090601f01602090048101928261171f5760008555611765565b82601f1061173857805160ff1916838001178555611765565b82800160010185558215611765579182015b8281111561176557825182559160200191906001019061174a565b50611771929150611775565b5090565b5b808211156117715760008155600101611776565b600067ffffffffffffffff808411156117a5576117a561221b565b604051601f8501601f1916810160200182811182821017156117c9576117c961221b565b6040528481529150818385018610156117e157600080fd5b8484602083013760006020868301015250509392505050565b80356001600160a01b038116811461055057600080fd5b600060208284031215611822578081fd5b61182b826117fa565b9392505050565b60008060408385031215611844578081fd5b61184d836117fa565b915061185b602084016117fa565b90509250929050565b600080600060608486031215611878578081fd5b611881846117fa565b925061188f602085016117fa565b9150604084013590509250925092565b600080600080608085870312156118b4578081fd5b6118bd856117fa565b93506118cb602086016117fa565b925060408501359150606085013567ffffffffffffffff8111156118ed578182fd5b8501601f810187136118fd578182fd5b61190c8782356020840161178a565b91505092959194509250565b6000806040838503121561192a578182fd5b611933836117fa565b915060208301358015158114611947578182fd5b809150509250929050565b60008060408385031215611964578182fd5b61196d836117fa565b946020939093013593505050565b60006020828403121561198c578081fd5b813561182b81612231565b6000602082840312156119a8578081fd5b815161182b81612231565b6000602082840312156119c4578081fd5b813567ffffffffffffffff8111156119da578182fd5b8201601f810184136119ea578182fd5b610d918482356020840161178a565b600060208284031215611a0a578081fd5b5035919050565b60008151808452611a2981602086016020860161215f565b601f01601f19169290920160200192915050565b60008151611a4f81856020860161215f565b9290920192915050565b652f6e6674732f60d01b815260060190565b8254600090819060028104600180831680611a8757607f831692505b6020808410821415611aa757634e487b7160e01b87526022600452602487fd5b818015611abb5760018114611acc57611af8565b60ff19861689528489019650611af8565b611ad58b612110565b885b86811015611af05781548b820152908501908301611ad7565b505084890196505b505050505050611b10611b0a82611a59565b85611a3d565b95945050505050565b6001600160a01b0391909116815260200190565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090611b6090830184611a11565b9695505050505050565b901515815260200190565b60006020825261182b6020830184611a11565b6020808252601c908201527f507572636861736573206d757374206e6f742062652070617573656400000000604082015260600190565b6020808252602b908201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560408201526a74206f6620626f756e647360a81b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252601c908201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604082015260600190565b6020808252602a908201527f4d7573742073656e64206174206c656173742063757272656e74207072696365604082015269103337b9103a37b5b2b760b11b606082015260800190565b60208082526024908201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646040820152637265737360e01b606082015260800190565b60208082526019908201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604082015260600190565b6020808252600a908201526927b7363c9030b236b4b760b11b604082015260600190565b6020808252602c908201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860408201526b34b9ba32b73a103a37b5b2b760a11b606082015260800190565b60208082526026908201527f4d757374206e6f7420657863656564206d6178696d756d206d696e74206f6e2060408201526546616e746f6d60d01b606082015260800190565b60208082526038908201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760408201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000606082015260800190565b6020808252602a908201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604082015269726f206164647265737360b01b606082015260800190565b60208082526029908201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460408201526832b73a103a37b5b2b760b91b606082015260800190565b6020808252818101527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604082015260600190565b6020808252602c908201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860408201526b34b9ba32b73a103a37b5b2b760a11b606082015260800190565b60208082526010908201526f151bdad95b881251081a5b9d985b1a5960821b604082015260600190565b6020808252601b908201527f546f6b656e20494420646f6573206e6f74206578697374205965740000000000604082015260600190565b60208082526029908201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960408201526839903737ba1037bbb760b91b606082015260800190565b60208082526021908201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656040820152603960f91b606082015260800190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b6020808252602c908201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60408201526b7574206f6620626f756e647360a01b606082015260800190565b90815260200190565b60009081526020902090565b6000821982111561212f5761212f6121ef565b500190565b60008261214357612143612205565b500490565b60008282101561215a5761215a6121ef565b500390565b60005b8381101561217a578181015183820152602001612162565b83811115610aed5750506000910152565b60028104600182168061219f57607f821691505b60208210811415610b9557634e487b7160e01b600052602260045260246000fd5b60006000198214156121d4576121d46121ef565b5060010190565b6000826121ea576121ea612205565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b03198116811461224757600080fd5b5056fe68747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f516d5048514543723545646854676557446a4b4a4c37564e63537346677254655456546746744c704b6d4e626141a2646970667358221220dc1c34a4cb26fecdb921b634f08e73445f36ae06e672ec70a4171a710bdb4c5164736f6c63430008000033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000063d3f3b271dbbd43a788687b86d516fe185d25090000000000000000000000000000000000000000000000000000000000000309000000000000000000000000000000000000000000000002b5e3af16b1880000000000000000000000000000000000000000000000000000000000000000001950696e6b20466c616d696e676f20536f6369616c20436c75620000000000000000000000000000000000000000000000000000000000000000000000000000045046534300000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _tokenName (string): Pink Flamingo Social Club
Arg [1] : _tokenSymbol (string): PFSC
Arg [2] : _router (address): 0x63D3F3b271dBbd43A788687B86D516Fe185D2509
Arg [3] : _maxMint (uint256): 777
Arg [4] : _tokenPriceInWei (uint256): 50000000000000000000
-----Encoded View---------------
9 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [2] : 00000000000000000000000063d3f3b271dbbd43a788687b86d516fe185d2509
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000309
Arg [4] : 000000000000000000000000000000000000000000000002b5e3af16b1880000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000019
Arg [6] : 50696e6b20466c616d696e676f20536f6369616c20436c756200000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [8] : 5046534300000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
42547:3756:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36319:224;;;;;;;;;;-1:-1:-1;36319:224:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23760:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;25319:221::-;;;;;;;;;;-1:-1:-1;25319:221:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;24842:411::-;;;;;;;;;;-1:-1:-1;24842:411:0;;;;;:::i;:::-;;:::i;:::-;;42963:31;;;;;;;;;;;;;:::i;36959:113::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;43033:57::-;;;;;;;;;;-1:-1:-1;43033:57:0;;;;;:::i;:::-;;:::i;26069:339::-;;;;;;;;;;-1:-1:-1;26069:339:0;;;;;:::i;:::-;;:::i;44071:98::-;;;;;;;;;;-1:-1:-1;44071:98:0;;;;;:::i;:::-;;:::i;36627:256::-;;;;;;;;;;-1:-1:-1;36627:256:0;;;;;:::i;:::-;;:::i;42902:30::-;;;;;;;;;;;;;:::i;26479:185::-;;;;;;;;;;-1:-1:-1;26479:185:0;;;;;:::i;:::-;;:::i;37149:233::-;;;;;;;;;;-1:-1:-1;37149:233:0;;;;;:::i;:::-;;:::i;23454:239::-;;;;;;;;;;-1:-1:-1;23454:239:0;;;;;:::i;:::-;;:::i;42937:21::-;;;;;;;;;;;;;:::i;23184:208::-;;;;;;;;;;-1:-1:-1;23184:208:0;;;;;:::i;:::-;;:::i;42875:22::-;;;;;;;;;;;;;:::i;42840:30::-;;;;;;;;;;;;;:::i;44926:112::-;;;:::i;45044:420::-;;;;;;:::i;:::-;;:::i;23929:104::-;;;;;;;;;;;;;:::i;25612:155::-;;;;;;;;;;-1:-1:-1;25612:155:0;;;;;:::i;:::-;;:::i;45787:513::-;;;;;;;;;;-1:-1:-1;45787:513:0;;;;;:::i;:::-;;:::i;45506:87::-;;;;;;;;;;-1:-1:-1;45506:87:0;;;;;:::i;:::-;;:::i;44375:227::-;;;;;;;;;;-1:-1:-1;44375:227:0;;;;;:::i;:::-;;:::i;43986:79::-;;;;;;;;;;;;;:::i;44175:194::-;;;;;;;;;;;;;:::i;25838:164::-;;;;;;;;;;-1:-1:-1;25838:164:0;;;;;:::i;:::-;;:::i;42789:20::-;;;;;;;;;;;;;:::i;42814:21::-;;;;;;;;;;;;;:::i;36319:224::-;36421:4;-1:-1:-1;;;;;;36445:50:0;;-1:-1:-1;;;36445:50:0;;:90;;;36499:36;36523:11;36499:23;:36::i;:::-;36438:97;;36319:224;;;;:::o;23760:100::-;23814:13;23847:5;23840:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23760:100;:::o;25319:221::-;25395:7;25423:16;25431:7;25423;:16::i;:::-;25415:73;;;;-1:-1:-1;;;25415:73:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;25508:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;25508:24:0;;25319:221::o;24842:411::-;24923:13;24939:23;24954:7;24939:14;:23::i;:::-;24923:39;;24987:5;-1:-1:-1;;;;;24981:11:0;:2;-1:-1:-1;;;;;24981:11:0;;;24973:57;;;;-1:-1:-1;;;24973:57:0;;;;;;;:::i;:::-;25081:5;-1:-1:-1;;;;;25065:21:0;:12;:10;:12::i;:::-;-1:-1:-1;;;;;25065:21:0;;:62;;;;25090:37;25107:5;25114:12;:10;:12::i;25090:37::-;25043:168;;;;-1:-1:-1;;;25043:168:0;;;;;;;:::i;:::-;25224:21;25233:2;25237:7;25224:8;:21::i;:::-;24842:411;;;:::o;42963:31::-;;;;;;:::o;36959:113::-;37047:10;:17;36959:113;:::o;43033:57::-;;;;;;;;;;;;-1:-1:-1;;;;;43033:57:0;;:::o;26069:339::-;26264:41;26283:12;:10;:12::i;:::-;26297:7;26264:18;:41::i;:::-;26256:103;;;;-1:-1:-1;;;26256:103:0;;;;;;;:::i;:::-;26372:28;26382:4;26388:2;26392:7;26372:9;:28::i;44071:98::-;43657:5;;-1:-1:-1;;;;;43657:5:0;43643:10;:19;43635:42;;;;-1:-1:-1;;;43635:42:0;;;;;;;:::i;:::-;44142:21;;::::1;::::0;:7:::1;::::0;:21:::1;::::0;::::1;::::0;::::1;:::i;:::-;;44071:98:::0;:::o;36627:256::-;36724:7;36760:23;36777:5;36760:16;:23::i;:::-;36752:5;:31;36744:87;;;;-1:-1:-1;;;36744:87:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;;36849:19:0;;;;;;;;:12;:19;;;;;;;;:26;;;;;;;;;36627:256::o;42902:30::-;;;;:::o;26479:185::-;26617:39;26634:4;26640:2;26644:7;26617:39;;;;;;;;;;;;:16;:39::i;37149:233::-;37224:7;37260:30;:28;:30::i;:::-;37252:5;:38;37244:95;;;;-1:-1:-1;;;37244:95:0;;;;;;;:::i;:::-;37357:10;37368:5;37357:17;;;;;;-1:-1:-1;;;37357:17:0;;;;;;;;;;;;;;;;;37350:24;;37149:233;;;:::o;23454:239::-;23526:7;23562:16;;;:7;:16;;;;;;-1:-1:-1;;;;;23562:16:0;23597:19;23589:73;;;;-1:-1:-1;;;23589:73:0;;;;;;;:::i;42937:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;23184:208::-;23256:7;-1:-1:-1;;;;;23284:19:0;;23276:74;;;;-1:-1:-1;;;23276:74:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;;23368:16:0;;;;;:9;:16;;;;;;;23184:208::o;42875:22::-;;;;:::o;42840:30::-;;;;:::o;44926:112::-;44974:16;45006:26;45021:10;45006:14;:26::i;:::-;44999:33;;44926:112;:::o;45044:420::-;45105:16;45151:15;;45138:9;:28;;45130:83;;;;-1:-1:-1;;;45130:83:0;;;;;;;:::i;:::-;45243:7;;45228:11;;:22;;45220:73;;;;-1:-1:-1;;;45220:73:0;;;;;;;:::i;:::-;45309:12;;;;45308:13;;:36;;-1:-1:-1;45339:5:0;;-1:-1:-1;;;;;45339:5:0;45325:10;:19;45308:36;45300:77;;;;-1:-1:-1;;;45300:77:0;;;;;;;:::i;:::-;45384:15;45402;45413:3;45402:10;:15::i;:::-;45384:33;;45424:13;:11;:13::i;23929:104::-;23985:13;24018:7;24011:14;;;;;:::i;25612:155::-;25707:52;25726:12;:10;:12::i;:::-;25740:8;25750;25707:18;:52::i;45787:513::-;45951:6;;-1:-1:-1;;;;;45951:6:0;45935:12;:10;:12::i;:::-;-1:-1:-1;;;;;45935:22:0;;:40;;;;-1:-1:-1;45969:6:0;;-1:-1:-1;;;;;45961:14:0;;;45969:6;;45961:14;45935:40;:56;;;;-1:-1:-1;45985:6:0;;-1:-1:-1;;;;;45979:12:0;;;45985:6;;45979:12;;45935:56;:77;;;;;45996:16;46004:7;45996;:16::i;:::-;45995:17;45935:77;45931:188;;;46041:1;46031:7;:11;46023:40;;;;-1:-1:-1;;;46023:40:0;;;;;;;:::i;:::-;46091:6;;46072:39;;-1:-1:-1;;;;;46091:6:0;46099:7;46108:2;46072:18;:39::i;:::-;46141:41;46160:12;:10;:12::i;:::-;46174:7;46141:18;:41::i;:::-;46125:124;;;;-1:-1:-1;;;46125:124:0;;;;;;;:::i;:::-;46256:38;46270:4;46276:2;46280:7;46289:4;46256:13;:38::i;:::-;45787:513;;;;:::o;45506:87::-;43657:5;;-1:-1:-1;;;;;43657:5:0;43643:10;:19;43635:42;;;;-1:-1:-1;;;43635:42:0;;;;;;;:::i;:::-;45571:6:::1;:16:::0;;-1:-1:-1;;;;;;45571:16:0::1;-1:-1:-1::0;;;;;45571:16:0;;;::::1;::::0;;;::::1;::::0;;45506:87::o;44375:227::-;44493:13;44469:8;43538:17;43546:8;43538:7;:17::i;:::-;43530:57;;;;-1:-1:-1;;;43530:57:0;;;;;;;:::i;:::-;44549:7:::1;44568:26;44585:8;44568:16;:26::i;:::-;44532:63;;;;;;;;;:::i;:::-;;;;;;;;;;;;;44518:78;;43594:1;44375:227:::0;;;;:::o;43986:79::-;43657:5;;-1:-1:-1;;;;;43657:5:0;43643:10;:19;43635:42;;;;-1:-1:-1;;;43635:42:0;;;;;;;:::i;:::-;44047:12:::1;::::0;;-1:-1:-1;;44031:28:0;::::1;44047:12;::::0;;::::1;44046:13;44031:28;::::0;;43986:79::o;44175:194::-;44219:13;44255:108;;;;;;;;;;;;;;;;;44241:122;;44175:194;:::o;25838:164::-;-1:-1:-1;;;;;25959:25:0;;;25935:4;25959:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;25838:164::o;42789:20::-;;;-1:-1:-1;;;;;42789:20:0;;:::o;42814:21::-;;;-1:-1:-1;;;;;42814:21:0;;:::o;22815:305::-;22917:4;-1:-1:-1;;;;;;22954:40:0;;-1:-1:-1;;;22954:40:0;;:105;;-1:-1:-1;;;;;;;23011:48:0;;-1:-1:-1;;;23011:48:0;22954:105;:158;;;;23076:36;23100:11;23076:23;:36::i;28573:127::-;28638:4;28662:16;;;:7;:16;;;;;;-1:-1:-1;;;;;28662:16:0;:30;;;28573:127::o;2909:98::-;2989:10;2909:98;:::o;32555:174::-;32630:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;32630:29:0;-1:-1:-1;;;;;32630:29:0;;;;;;;;:24;;32684:23;32630:24;32684:14;:23::i;:::-;-1:-1:-1;;;;;32675:46:0;;;;;;;;;;;32555:174;;:::o;28867:348::-;28960:4;28985:16;28993:7;28985;:16::i;:::-;28977:73;;;;-1:-1:-1;;;28977:73:0;;;;;;;:::i;:::-;29061:13;29077:23;29092:7;29077:14;:23::i;:::-;29061:39;;29130:5;-1:-1:-1;;;;;29119:16:0;:7;-1:-1:-1;;;;;29119:16:0;;:51;;;;29163:7;-1:-1:-1;;;;;29139:31:0;:20;29151:7;29139:11;:20::i;:::-;-1:-1:-1;;;;;29139:31:0;;29119:51;:87;;;;29174:32;29191:5;29198:7;29174:16;:32::i;:::-;29111:96;28867:348;-1:-1:-1;;;;28867:348:0:o;31859:578::-;32018:4;-1:-1:-1;;;;;31991:31:0;:23;32006:7;31991:14;:23::i;:::-;-1:-1:-1;;;;;31991:31:0;;31983:85;;;;-1:-1:-1;;;31983:85:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32087:16:0;;32079:65;;;;-1:-1:-1;;;32079:65:0;;;;;;;:::i;:::-;32157:39;32178:4;32184:2;32188:7;32157:20;:39::i;:::-;32261:29;32278:1;32282:7;32261:8;:29::i;:::-;-1:-1:-1;;;;;32303:15:0;;;;;;:9;:15;;;;;:20;;32322:1;;32303:15;:20;;32322:1;;32303:20;:::i;:::-;;;;-1:-1:-1;;;;;;;32334:13:0;;;;;;:9;:13;;;;;:18;;32351:1;;32334:13;:18;;32351:1;;32334:18;:::i;:::-;;;;-1:-1:-1;;32363:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;32363:21:0;-1:-1:-1;;;;;32363:21:0;;;;;;;;;32402:27;;32363:16;;32402:27;;;;;;;31859:578;;;:::o;44645:275::-;44743:11;;;44696:16;;44776:1;;44696:16;44761;44776:1;44743:11;44761:16;:::i;:::-;;;;-1:-1:-1;44784:23:0;;-1:-1:-1;44790:3:0;44795:11;44784:5;:23::i;:::-;44814:35;;;;:22;:35;;;;;;:41;;-1:-1:-1;;;;;;44814:41:0;-1:-1:-1;;;;;44814:41:0;;;;;;;;44867:22;;44814:35;;44867:22;;;44903:11;44645:275;-1:-1:-1;;44645:275:0:o;43726:254::-;43769:9;:13;43765:210;;43793:14;43822:15;;43810:9;:27;;;;:::i;:::-;43793:44;-1:-1:-1;43850:10:0;;43846:73;;43873:36;;43881:10;;43873:36;;;;;43902:6;;43873:36;;;;43902:6;43881:10;43873:36;;;;;;;;;;;;;;;;;;;;;43846:73;43935:5;;43951:15;;43927:40;;-1:-1:-1;;;;;43935:5:0;;;;43927:40;;;;;43951:15;43935:5;43927:40;43935:5;43927:40;43951:15;43935:5;43927:40;;;;;;;;;;;;;;;;;;;43765:210;43726:254::o;32871:315::-;33026:8;-1:-1:-1;;;;;33017:17:0;:5;-1:-1:-1;;;;;33017:17:0;;;33009:55;;;;-1:-1:-1;;;33009:55:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33075:25:0;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;:46;;-1:-1:-1;;33075:46:0;;;;;;;33137:41;;;;;33075:46;;33137:41;:::i;:::-;;;;;;;;32871:315;;;:::o;45599:182::-;45711:28;45721:7;45730:8;45711:9;:28::i;:::-;45751:24;;45766:8;;-1:-1:-1;;;;;45751:24:0;;;;;;;;45599:182;;;:::o;27945:315::-;28102:28;28112:4;28118:2;28122:7;28102:9;:28::i;:::-;28149:48;28172:4;28178:2;28182:7;28191:5;28149:22;:48::i;:::-;28141:111;;;;-1:-1:-1;;;28141:111:0;;;;;;;:::i;418:723::-;474:13;695:10;691:53;;-1:-1:-1;722:10:0;;;;;;;;;;;;-1:-1:-1;;;722:10:0;;;;;;691:53;769:5;754:12;810:78;817:9;;810:78;;843:8;;;;:::i;:::-;;-1:-1:-1;866:10:0;;-1:-1:-1;874:2:0;866:10;;:::i;:::-;;;810:78;;;898:19;930:6;920:17;;;;;;-1:-1:-1;;;920:17:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;920:17:0;;898:39;;948:154;955:10;;948:154;;982:11;992:1;982:11;;:::i;:::-;;-1:-1:-1;1051:10:0;1059:2;1051:5;:10;:::i;:::-;1038:24;;:2;:24;:::i;:::-;1025:39;;1008:6;1015;1008:14;;;;;;-1:-1:-1;;;1008:14:0;;;;;;;;;;;;:56;-1:-1:-1;;;;;1008:56:0;;;;;;;;-1:-1:-1;1079:11:0;1088:2;1079:11;;:::i;:::-;;;948:154;;14299:157;-1:-1:-1;;;;;;14408:40:0;;-1:-1:-1;;;14408:40:0;14299:157;;;:::o;37995:589::-;38139:45;38166:4;38172:2;38176:7;38139:26;:45::i;:::-;-1:-1:-1;;;;;38201:18:0;;38197:187;;38236:40;38268:7;38236:31;:40::i;:::-;38197:187;;;38306:2;-1:-1:-1;;;;;38298:10:0;:4;-1:-1:-1;;;;;38298:10:0;;38294:90;;38325:47;38358:4;38364:7;38325:32;:47::i;:::-;-1:-1:-1;;;;;38398:16:0;;38394:183;;38431:45;38468:7;38431:36;:45::i;:::-;38394:183;;;38504:4;-1:-1:-1;;;;;38498:10:0;:2;-1:-1:-1;;;;;38498:10:0;;38494:83;;38525:40;38553:2;38557:7;38525:27;:40::i;30551:382::-;-1:-1:-1;;;;;30631:16:0;;30623:61;;;;-1:-1:-1;;;30623:61:0;;;;;;;:::i;:::-;30704:16;30712:7;30704;:16::i;:::-;30703:17;30695:58;;;;-1:-1:-1;;;30695:58:0;;;;;;;:::i;:::-;30766:45;30795:1;30799:2;30803:7;30766:20;:45::i;:::-;-1:-1:-1;;;;;30824:13:0;;;;;;:9;:13;;;;;:18;;30841:1;;30824:13;:18;;30841:1;;30824:18;:::i;:::-;;;;-1:-1:-1;;30853:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;30853:21:0;-1:-1:-1;;;;;30853:21:0;;;;;;;;30892:33;;30853:16;;;30892:33;;30853:16;;30892:33;30551:382;;:::o;29557:110::-;29633:26;29643:2;29647:7;29633:26;;;;;;;;;;;;:9;:26::i;33751:799::-;33906:4;33927:15;:2;-1:-1:-1;;;;;33927:13:0;;:15::i;:::-;33923:620;;;33979:2;-1:-1:-1;;;;;33963:36:0;;34000:12;:10;:12::i;:::-;34014:4;34020:7;34029:5;33963:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33963:72:0;;;;;;;;-1:-1:-1;;33963:72:0;;;;;;;;;;;;:::i;:::-;;;33959:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34205:13:0;;34201:272;;34248:60;;-1:-1:-1;;;34248:60:0;;;;;;;:::i;34201:272::-;34423:6;34417:13;34408:6;34404:2;34400:15;34393:38;33959:529;-1:-1:-1;;;;;;34086:51:0;-1:-1:-1;;;34086:51:0;;-1:-1:-1;34079:58:0;;33923:620;-1:-1:-1;34527:4:0;33751:799;;;;;;:::o;39307:164::-;39411:10;:17;;39384:24;;;;:15;:24;;;;;:44;;;39439:24;;;;;;;;;;;;39307:164::o;40098:988::-;40364:22;40414:1;40389:22;40406:4;40389:16;:22::i;:::-;:26;;;;:::i;:::-;40426:18;40447:26;;;:17;:26;;;;;;40364:51;;-1:-1:-1;40580:28:0;;;40576:328;;-1:-1:-1;;;;;40647:18:0;;40625:19;40647:18;;;:12;:18;;;;;;;;:34;;;;;;;;;40698:30;;;;;;:44;;;40815:30;;:17;:30;;;;;:43;;;40576:328;-1:-1:-1;41000:26:0;;;;:17;:26;;;;;;;;40993:33;;;-1:-1:-1;;;;;41044:18:0;;;;;:12;:18;;;;;:34;;;;;;;41037:41;40098:988::o;41381:1079::-;41659:10;:17;41634:22;;41659:21;;41679:1;;41659:21;:::i;:::-;41691:18;41712:24;;;:15;:24;;;;;;42085:10;:26;;41634:46;;-1:-1:-1;41712:24:0;;41634:46;;42085:26;;;;-1:-1:-1;;;42085:26:0;;;;;;;;;;;;;;;;;42063:48;;42149:11;42124:10;42135;42124:22;;;;;;-1:-1:-1;;;42124:22:0;;;;;;;;;;;;;;;;;;;;:36;;;;42229:28;;;:15;:28;;;;;;;:41;;;42401:24;;;;;42394:31;42436:10;:16;;;;;-1:-1:-1;;;42436:16:0;;;;;;;;;;;;;;;;;;;;;;;;;;41381:1079;;;;:::o;38885:221::-;38970:14;38987:20;39004:2;38987:16;:20::i;:::-;-1:-1:-1;;;;;39018:16:0;;;;;;;:12;:16;;;;;;;;:24;;;;;;;;:34;;;39063:26;;;:17;:26;;;;;;:35;;;;-1:-1:-1;38885:221:0:o;29894:321::-;30024:18;30030:2;30034:7;30024:5;:18::i;:::-;30075:54;30106:1;30110:2;30114:7;30123:5;30075:22;:54::i;:::-;30053:154;;;;-1:-1:-1;;;30053:154:0;;;;;;;:::i;3996:387::-;4319:20;4367:8;;;3996:387::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:607:1;;110:18;151:2;143:6;140:14;137:2;;;157:18;;:::i;:::-;206:2;200:9;279:2;256:17;;-1:-1:-1;;252:31:1;240:44;;286:4;236:55;306:18;;;326:22;;;303:46;300:2;;;352:18;;:::i;:::-;388:2;381:22;436;;;421:6;-1:-1:-1;421:6:1;473:16;;;470:25;-1:-1:-1;467:2:1;;;508:1;505;498:12;467:2;558:6;553:3;546:4;538:6;534:17;521:44;613:1;606:4;597:6;589;585:19;581:30;574:41;;;90:531;;;;;:::o;626:175::-;696:20;;-1:-1:-1;;;;;745:31:1;;735:42;;725:2;;791:1;788;781:12;806:198;;918:2;906:9;897:7;893:23;889:32;886:2;;;939:6;931;924:22;886:2;967:31;988:9;967:31;:::i;:::-;957:41;876:128;-1:-1:-1;;;876:128:1:o;1009:274::-;;;1138:2;1126:9;1117:7;1113:23;1109:32;1106:2;;;1159:6;1151;1144:22;1106:2;1187:31;1208:9;1187:31;:::i;:::-;1177:41;;1237:40;1273:2;1262:9;1258:18;1237:40;:::i;:::-;1227:50;;1096:187;;;;;:::o;1288:342::-;;;;1434:2;1422:9;1413:7;1409:23;1405:32;1402:2;;;1455:6;1447;1440:22;1402:2;1483:31;1504:9;1483:31;:::i;:::-;1473:41;;1533:40;1569:2;1558:9;1554:18;1533:40;:::i;:::-;1523:50;;1620:2;1609:9;1605:18;1592:32;1582:42;;1392:238;;;;;:::o;1635:702::-;;;;;1807:3;1795:9;1786:7;1782:23;1778:33;1775:2;;;1829:6;1821;1814:22;1775:2;1857:31;1878:9;1857:31;:::i;:::-;1847:41;;1907:40;1943:2;1932:9;1928:18;1907:40;:::i;:::-;1897:50;;1994:2;1983:9;1979:18;1966:32;1956:42;;2049:2;2038:9;2034:18;2021:32;2076:18;2068:6;2065:30;2062:2;;;2113:6;2105;2098:22;2062:2;2141:22;;2194:4;2186:13;;2182:27;-1:-1:-1;2172:2:1;;2228:6;2220;2213:22;2172:2;2256:75;2323:7;2318:2;2305:16;2300:2;2296;2292:11;2256:75;:::i;:::-;2246:85;;;1765:572;;;;;;;:::o;2342:369::-;;;2468:2;2456:9;2447:7;2443:23;2439:32;2436:2;;;2489:6;2481;2474:22;2436:2;2517:31;2538:9;2517:31;:::i;:::-;2507:41;;2598:2;2587:9;2583:18;2570:32;2645:5;2638:13;2631:21;2624:5;2621:32;2611:2;;2672:6;2664;2657:22;2611:2;2700:5;2690:15;;;2426:285;;;;;:::o;2716:266::-;;;2845:2;2833:9;2824:7;2820:23;2816:32;2813:2;;;2866:6;2858;2851:22;2813:2;2894:31;2915:9;2894:31;:::i;:::-;2884:41;2972:2;2957:18;;;;2944:32;;-1:-1:-1;;;2803:179:1:o;2987:257::-;;3098:2;3086:9;3077:7;3073:23;3069:32;3066:2;;;3119:6;3111;3104:22;3066:2;3163:9;3150:23;3182:32;3208:5;3182:32;:::i;3249:261::-;;3371:2;3359:9;3350:7;3346:23;3342:32;3339:2;;;3392:6;3384;3377:22;3339:2;3429:9;3423:16;3448:32;3474:5;3448:32;:::i;3515:482::-;;3637:2;3625:9;3616:7;3612:23;3608:32;3605:2;;;3658:6;3650;3643:22;3605:2;3703:9;3690:23;3736:18;3728:6;3725:30;3722:2;;;3773:6;3765;3758:22;3722:2;3801:22;;3854:4;3846:13;;3842:27;-1:-1:-1;3832:2:1;;3888:6;3880;3873:22;3832:2;3916:75;3983:7;3978:2;3965:16;3960:2;3956;3952:11;3916:75;:::i;4002:190::-;;4114:2;4102:9;4093:7;4089:23;4085:32;4082:2;;;4135:6;4127;4120:22;4082:2;-1:-1:-1;4163:23:1;;4072:120;-1:-1:-1;4072:120:1:o;4197:259::-;;4278:5;4272:12;4305:6;4300:3;4293:19;4321:63;4377:6;4370:4;4365:3;4361:14;4354:4;4347:5;4343:16;4321:63;:::i;:::-;4438:2;4417:15;-1:-1:-1;;4413:29:1;4404:39;;;;4445:4;4400:50;;4248:208;-1:-1:-1;;4248:208:1:o;4461:187::-;;4543:5;4537:12;4558:52;4603:6;4598:3;4591:4;4584:5;4580:16;4558:52;:::i;:::-;4626:16;;;;;4513:135;-1:-1:-1;;4513:135:1:o;4653:121::-;-1:-1:-1;;;4720:21:1;;4766:1;4757:11;;4710:64::o;4779:1315::-;5114:13;;4779:1315;;;;5187:1;5172:17;;5208:1;5244:18;;;;5271:2;;5325:4;5317:6;5313:17;5303:27;;5271:2;5351;5399;5391:6;5388:14;5368:18;5365:38;5362:2;;;-1:-1:-1;;;5426:33:1;;5482:4;5479:1;5472:15;5512:4;5433:3;5500:17;5362:2;5543:18;5570:104;;;;5688:1;5683:324;;;;5536:471;;5570:104;-1:-1:-1;;5603:24:1;;5591:37;;5648:16;;;;-1:-1:-1;5570:104:1;;5683:324;5719:39;5751:6;5719:39;:::i;:::-;5780:3;5796:165;5810:6;5807:1;5804:13;5796:165;;;5888:14;;5875:11;;;5868:35;5931:16;;;;5825:10;;5796:165;;;5800:3;;5990:6;5985:3;5981:16;5974:23;;5536:471;;;;;;;6023:65;6051:36;6083:3;6051:36;:::i;:::-;6043:6;6023:65;:::i;:::-;6016:72;5064:1030;-1:-1:-1;;;;;5064:1030:1:o;6099:203::-;-1:-1:-1;;;;;6263:32:1;;;;6245:51;;6233:2;6218:18;;6200:102::o;6307:490::-;-1:-1:-1;;;;;6576:15:1;;;6558:34;;6628:15;;6623:2;6608:18;;6601:43;6675:2;6660:18;;6653:34;;;6723:3;6718:2;6703:18;;6696:31;;;6307:490;;6744:47;;6771:19;;6763:6;6744:47;:::i;:::-;6736:55;6510:287;-1:-1:-1;;;;;;6510:287:1:o;6802:187::-;6967:14;;6960:22;6942:41;;6930:2;6915:18;;6897:92::o;6994:221::-;;7143:2;7132:9;7125:21;7163:46;7205:2;7194:9;7190:18;7182:6;7163:46;:::i;7220:352::-;7422:2;7404:21;;;7461:2;7441:18;;;7434:30;7500;7495:2;7480:18;;7473:58;7563:2;7548:18;;7394:178::o;7577:407::-;7779:2;7761:21;;;7818:2;7798:18;;;7791:30;7857:34;7852:2;7837:18;;7830:62;-1:-1:-1;;;7923:2:1;7908:18;;7901:41;7974:3;7959:19;;7751:233::o;7989:414::-;8191:2;8173:21;;;8230:2;8210:18;;;8203:30;8269:34;8264:2;8249:18;;8242:62;-1:-1:-1;;;8335:2:1;8320:18;;8313:48;8393:3;8378:19;;8163:240::o;8408:352::-;8610:2;8592:21;;;8649:2;8629:18;;;8622:30;8688;8683:2;8668:18;;8661:58;8751:2;8736:18;;8582:178::o;8765:406::-;8967:2;8949:21;;;9006:2;8986:18;;;8979:30;9045:34;9040:2;9025:18;;9018:62;-1:-1:-1;;;9111:2:1;9096:18;;9089:40;9161:3;9146:19;;8939:232::o;9176:400::-;9378:2;9360:21;;;9417:2;9397:18;;;9390:30;9456:34;9451:2;9436:18;;9429:62;-1:-1:-1;;;9522:2:1;9507:18;;9500:34;9566:3;9551:19;;9350:226::o;9581:349::-;9783:2;9765:21;;;9822:2;9802:18;;;9795:30;9861:27;9856:2;9841:18;;9834:55;9921:2;9906:18;;9755:175::o;9935:334::-;10137:2;10119:21;;;10176:2;10156:18;;;10149:30;-1:-1:-1;;;10210:2:1;10195:18;;10188:40;10260:2;10245:18;;10109:160::o;10274:408::-;10476:2;10458:21;;;10515:2;10495:18;;;10488:30;10554:34;10549:2;10534:18;;10527:62;-1:-1:-1;;;10620:2:1;10605:18;;10598:42;10672:3;10657:19;;10448:234::o;10687:402::-;10889:2;10871:21;;;10928:2;10908:18;;;10901:30;10967:34;10962:2;10947:18;;10940:62;-1:-1:-1;;;11033:2:1;11018:18;;11011:36;11079:3;11064:19;;10861:228::o;11094:420::-;11296:2;11278:21;;;11335:2;11315:18;;;11308:30;11374:34;11369:2;11354:18;;11347:62;11445:26;11440:2;11425:18;;11418:54;11504:3;11489:19;;11268:246::o;11519:406::-;11721:2;11703:21;;;11760:2;11740:18;;;11733:30;11799:34;11794:2;11779:18;;11772:62;-1:-1:-1;;;11865:2:1;11850:18;;11843:40;11915:3;11900:19;;11693:232::o;11930:405::-;12132:2;12114:21;;;12171:2;12151:18;;;12144:30;12210:34;12205:2;12190:18;;12183:62;-1:-1:-1;;;12276:2:1;12261:18;;12254:39;12325:3;12310:19;;12104:231::o;12340:356::-;12542:2;12524:21;;;12561:18;;;12554:30;12620:34;12615:2;12600:18;;12593:62;12687:2;12672:18;;12514:182::o;12701:408::-;12903:2;12885:21;;;12942:2;12922:18;;;12915:30;12981:34;12976:2;12961:18;;12954:62;-1:-1:-1;;;13047:2:1;13032:18;;13025:42;13099:3;13084:19;;12875:234::o;13114:340::-;13316:2;13298:21;;;13355:2;13335:18;;;13328:30;-1:-1:-1;;;13389:2:1;13374:18;;13367:46;13445:2;13430:18;;13288:166::o;13459:351::-;13661:2;13643:21;;;13700:2;13680:18;;;13673:30;13739:29;13734:2;13719:18;;13712:57;13801:2;13786:18;;13633:177::o;13815:405::-;14017:2;13999:21;;;14056:2;14036:18;;;14029:30;14095:34;14090:2;14075:18;;14068:62;-1:-1:-1;;;14161:2:1;14146:18;;14139:39;14210:3;14195:19;;13989:231::o;14225:397::-;14427:2;14409:21;;;14466:2;14446:18;;;14439:30;14505:34;14500:2;14485:18;;14478:62;-1:-1:-1;;;14571:2:1;14556:18;;14549:31;14612:3;14597:19;;14399:223::o;14627:413::-;14829:2;14811:21;;;14868:2;14848:18;;;14841:30;14907:34;14902:2;14887:18;;14880:62;-1:-1:-1;;;14973:2:1;14958:18;;14951:47;15030:3;15015:19;;14801:239::o;15045:408::-;15247:2;15229:21;;;15286:2;15266:18;;;15259:30;15325:34;15320:2;15305:18;;15298:62;-1:-1:-1;;;15391:2:1;15376:18;;15369:42;15443:3;15428:19;;15219:234::o;15458:177::-;15604:25;;;15592:2;15577:18;;15559:76::o;15640:129::-;;15708:17;;;15758:4;15742:21;;;15698:71::o;15774:128::-;;15845:1;15841:6;15838:1;15835:13;15832:2;;;15851:18;;:::i;:::-;-1:-1:-1;15887:9:1;;15822:80::o;15907:120::-;;15973:1;15963:2;;15978:18;;:::i;:::-;-1:-1:-1;16012:9:1;;15953:74::o;16032:125::-;;16100:1;16097;16094:8;16091:2;;;16105:18;;:::i;:::-;-1:-1:-1;16142:9:1;;16081:76::o;16162:258::-;16234:1;16244:113;16258:6;16255:1;16252:13;16244:113;;;16334:11;;;16328:18;16315:11;;;16308:39;16280:2;16273:10;16244:113;;;16375:6;16372:1;16369:13;16366:2;;;-1:-1:-1;;16410:1:1;16392:16;;16385:27;16215:205::o;16425:380::-;16510:1;16500:12;;16557:1;16547:12;;;16568:2;;16622:4;16614:6;16610:17;16600:27;;16568:2;16675;16667:6;16664:14;16644:18;16641:38;16638:2;;;16721:10;16716:3;16712:20;16709:1;16702:31;16756:4;16753:1;16746:15;16784:4;16781:1;16774:15;16810:135;;-1:-1:-1;;16870:17:1;;16867:2;;;16890:18;;:::i;:::-;-1:-1:-1;16937:1:1;16926:13;;16857:88::o;16950:112::-;;17008:1;16998:2;;17013:18;;:::i;:::-;-1:-1:-1;17047:9:1;;16988:74::o;17067:127::-;17128:10;17123:3;17119:20;17116:1;17109:31;17159:4;17156:1;17149:15;17183:4;17180:1;17173:15;17199:127;17260:10;17255:3;17251:20;17248:1;17241:31;17291:4;17288:1;17281:15;17315:4;17312:1;17305:15;17331:127;17392:10;17387:3;17383:20;17380:1;17373:31;17423:4;17420:1;17413:15;17447:4;17444:1;17437:15;17463:133;-1:-1:-1;;;;;;17539:32:1;;17529:43;;17519:2;;17586:1;17583;17576:12;17519:2;17509:87;:::o
Swarm Source
ipfs://dc1c34a4cb26fecdb921b634f08e73445f36ae06e672ec70a4171a710bdb4c51
Loading...
Loading
[ Download: CSV Export ]
[ 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.