Feature Tip: Add private address tag to any address under My Name Tag !
Overview
TokenID
1602
Total Transfers
-
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Floaties
Compiler Version
v0.8.9+commit.e5eed63a
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-08-16 */ // Sources flattened with hardhat v2.10.1 https://hardhat.org // File @openzeppelin/contracts/utils/introspection/[email protected] // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File @openzeppelin/contracts/token/ERC721/[email protected] // OpenZeppelin Contracts (last updated v4.7.0) (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); } // File @openzeppelin/contracts/token/ERC721/[email protected] // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File @openzeppelin/contracts/token/ERC721/extensions/[email protected] // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File @openzeppelin/contracts/utils/[email protected] // OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly /// @solidity memory-safe-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File @openzeppelin/contracts/utils/[email protected] // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File @openzeppelin/contracts/utils/[email protected] // OpenZeppelin Contracts (last updated v4.7.0) (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; uint8 private constant _ADDRESS_LENGTH = 20; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } /** * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation. */ function toHexString(address addr) internal pure returns (string memory) { return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH); } } // File @openzeppelin/contracts/utils/introspection/[email protected] // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File contracts/ERC721A.sol // Creator: Chiru Labs pragma solidity ^0.8.4; error ApprovalCallerNotOwnerNorApproved(); error ApprovalQueryForNonexistentToken(); error ApproveToCaller(); error ApprovalToCurrentOwner(); error BalanceQueryForZeroAddress(); error MintToZeroAddress(); error MintZeroQuantity(); error OwnerQueryForNonexistentToken(); error TransferCallerNotOwnerNorApproved(); error TransferFromIncorrectOwner(); error TransferToNonERC721ReceiverImplementer(); error TransferToZeroAddress(); error URIQueryForNonexistentToken(); /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension. Built to optimize for lower gas during batch mints. * * Assumes serials are sequentially minted starting at _startTokenId() (defaults to 0, e.g. 0, 1, 2, 3..). * * Assumes that an owner cannot have more than 2**64 - 1 (max value of uint64) of supply. * * Assumes that the maximum token id cannot exceed 2**256 - 1 (max value of uint256). */ contract ERC721A is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Compiler will pack this into a single 256bit word. struct TokenOwnership { // The address of the owner. address addr; // Keeps track of the start time of ownership with minimal overhead for tokenomics. uint64 startTimestamp; // Whether the token has been burned. bool burned; } // Compiler will pack this into a single 256bit word. struct AddressData { // Realistically, 2**64-1 is more than enough. uint64 balance; // Keeps track of mint count with minimal overhead for tokenomics. uint64 numberMinted; // Keeps track of burn count with minimal overhead for tokenomics. uint64 numberBurned; // For miscellaneous variable(s) pertaining to the address // (e.g. number of whitelist mint slots used). // If there are multiple variables, please pack them into a uint64. uint64 aux; } // The tokenId of the next token to be minted. uint256 internal _currentIndex; // The number of tokens burned. uint256 internal _burnCounter; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to ownership details // An empty struct value does not necessarily mean the token is unowned. See _ownershipOf implementation for details. mapping(uint256 => TokenOwnership) internal _ownerships; // Mapping owner address to address data mapping(address => AddressData) private _addressData; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) internal _operatorApprovals; constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; _currentIndex = _startTokenId(); } /** * To change the starting tokenId, please override this function. */ function _startTokenId() internal view virtual returns (uint256) { return 0; } /** * @dev Burned tokens are calculated here, use _totalMinted() if you want to count just minted tokens. */ function totalSupply() public view returns (uint256) { // Counter underflow is impossible as _burnCounter cannot be incremented // more than _currentIndex - _startTokenId() times unchecked { return _currentIndex - _burnCounter - _startTokenId(); } } /** * Returns the total amount of tokens minted in the contract. */ function _totalMinted() internal view returns (uint256) { // Counter underflow is impossible as _currentIndex does not decrement, // and it is initialized to _startTokenId() unchecked { return _currentIndex - _startTokenId(); } } /** * @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 override returns (uint256) { if (owner == address(0)) revert BalanceQueryForZeroAddress(); return uint256(_addressData[owner].balance); } /** * Returns the number of tokens minted by `owner`. */ function _numberMinted(address owner) internal view returns (uint256) { return uint256(_addressData[owner].numberMinted); } /** * Returns the number of tokens burned by or on behalf of `owner`. */ function _numberBurned(address owner) internal view returns (uint256) { return uint256(_addressData[owner].numberBurned); } /** * Returns the auxillary data for `owner`. (e.g. number of whitelist mint slots used). */ function _getAux(address owner) internal view returns (uint64) { return _addressData[owner].aux; } /** * Sets the auxillary data for `owner`. (e.g. number of whitelist mint slots used). * If there are multiple variables, please pack them into a uint64. */ function _setAux(address owner, uint64 aux) internal { _addressData[owner].aux = aux; } /** * Gas spent here starts off proportional to the maximum mint batch size. * It gradually moves to O(1) as tokens get transferred around in the collection over time. */ function _ownershipOf(uint256 tokenId) internal view returns (TokenOwnership memory) { uint256 curr = tokenId; unchecked { if (_startTokenId() <= curr && curr < _currentIndex) { TokenOwnership memory ownership = _ownerships[curr]; if (!ownership.burned) { if (ownership.addr != address(0)) { return ownership; } // Invariant: // There will always be an ownership that has an address and is not burned // before an ownership that does not have an address and is not burned. // Hence, curr will not underflow. while (true) { curr--; ownership = _ownerships[curr]; if (ownership.addr != address(0)) { return ownership; } } } } } revert OwnerQueryForNonexistentToken(); } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view override returns (address) { return _ownershipOf(tokenId).addr; } /** * @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) { if (!_exists(tokenId)) revert URIQueryForNonexistentToken(); 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 {} /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view override returns (address) { if (!_exists(tokenId)) revert ApprovalQueryForNonexistentToken(); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual {} /** * @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 { _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 { _transfer(from, to, tokenId); if (to.isContract() && !_checkContractOnERC721Received(from, to, tokenId, _data)) { revert TransferToNonERC721ReceiverImplementer(); } } /** * @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`), */ function _exists(uint256 tokenId) internal view returns (bool) { return _startTokenId() <= tokenId && tokenId < _currentIndex && !_ownerships[tokenId].burned; } /** * @dev Equivalent to `_safeMint(to, quantity, '')`. */ function _safeMint(address to, uint256 quantity) internal { _safeMint(to, quantity, ''); } /** * @dev Safely mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - If `to` refers to a smart contract, it must implement * {IERC721Receiver-onERC721Received}, which is called for each safe transfer. * - `quantity` must be greater than 0. * * Emits a {Transfer} event. */ function _safeMint( address to, uint256 quantity, bytes memory _data ) internal { uint256 startTokenId = _currentIndex; if (to == address(0)) revert MintToZeroAddress(); if (quantity == 0) revert MintZeroQuantity(); _beforeTokenTransfers(address(0), to, startTokenId, quantity); // Overflows are incredibly unrealistic. // balance or numberMinted overflow if current value of either + quantity > 1.8e19 (2**64) - 1 // updatedIndex overflows if _currentIndex + quantity > 1.2e77 (2**256) - 1 unchecked { _addressData[to].balance += uint64(quantity); _addressData[to].numberMinted += uint64(quantity); _ownerships[startTokenId].addr = to; _ownerships[startTokenId].startTimestamp = uint64(block.timestamp); uint256 updatedIndex = startTokenId; uint256 end = updatedIndex + quantity; if (to.isContract()) { do { emit Transfer(address(0), to, updatedIndex); if (!_checkContractOnERC721Received(address(0), to, updatedIndex++, _data)) { revert TransferToNonERC721ReceiverImplementer(); } } while (updatedIndex != end); // Reentrancy protection if (_currentIndex != startTokenId) revert(); } else { do { emit Transfer(address(0), to, updatedIndex++); } while (updatedIndex != end); } _currentIndex = updatedIndex; } _afterTokenTransfers(address(0), to, startTokenId, quantity); } /** * @dev Mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - `to` cannot be the zero address. * - `quantity` must be greater than 0. * * Emits a {Transfer} event. */ function _mint(address to, uint256 quantity) internal { uint256 startTokenId = _currentIndex; if (to == address(0)) revert MintToZeroAddress(); if (quantity == 0) revert MintZeroQuantity(); _beforeTokenTransfers(address(0), to, startTokenId, quantity); // Overflows are incredibly unrealistic. // balance or numberMinted overflow if current value of either + quantity > 1.8e19 (2**64) - 1 // updatedIndex overflows if _currentIndex + quantity > 1.2e77 (2**256) - 1 unchecked { _addressData[to].balance += uint64(quantity); _addressData[to].numberMinted += uint64(quantity); _ownerships[startTokenId].addr = to; _ownerships[startTokenId].startTimestamp = uint64(block.timestamp); uint256 updatedIndex = startTokenId; uint256 end = updatedIndex + quantity; do { emit Transfer(address(0), to, updatedIndex++); } while (updatedIndex != end); _currentIndex = updatedIndex; } _afterTokenTransfers(address(0), to, startTokenId, quantity); } /** * @dev Transfers `tokenId` from `from` to `to`. * * 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 ) private { TokenOwnership memory prevOwnership = _ownershipOf(tokenId); if (prevOwnership.addr != from) revert TransferFromIncorrectOwner(); bool isApprovedOrOwner = (_msgSender() == from || isApprovedForAll(from, _msgSender()) || getApproved(tokenId) == _msgSender()); if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved(); if (to == address(0)) revert TransferToZeroAddress(); _beforeTokenTransfers(from, to, tokenId, 1); // Clear approvals from the previous owner _approve(address(0), tokenId, from); // Underflow of the sender's balance is impossible because we check for // ownership above and the recipient's balance can't realistically overflow. // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256. unchecked { _addressData[from].balance -= 1; _addressData[to].balance += 1; TokenOwnership storage currSlot = _ownerships[tokenId]; currSlot.addr = to; currSlot.startTimestamp = uint64(block.timestamp); // If the ownership slot of tokenId+1 is not explicitly set, that means the transfer initiator owns it. // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls. uint256 nextTokenId = tokenId + 1; TokenOwnership storage nextSlot = _ownerships[nextTokenId]; if (nextSlot.addr == address(0)) { // This will suffice for checking _exists(nextTokenId), // as a burned slot cannot contain the zero address. if (nextTokenId != _currentIndex) { nextSlot.addr = from; nextSlot.startTimestamp = prevOwnership.startTimestamp; } } } emit Transfer(from, to, tokenId); _afterTokenTransfers(from, to, tokenId, 1); } /** * @dev Equivalent to `_burn(tokenId, false)`. */ function _burn(uint256 tokenId) internal virtual { _burn(tokenId, false); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId, bool approvalCheck) internal virtual { TokenOwnership memory prevOwnership = _ownershipOf(tokenId); address from = prevOwnership.addr; if (approvalCheck) { bool isApprovedOrOwner = (_msgSender() == from || isApprovedForAll(from, _msgSender()) || getApproved(tokenId) == _msgSender()); if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved(); } _beforeTokenTransfers(from, address(0), tokenId, 1); // Clear approvals from the previous owner _approve(address(0), tokenId, from); // Underflow of the sender's balance is impossible because we check for // ownership above and the recipient's balance can't realistically overflow. // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256. unchecked { AddressData storage addressData = _addressData[from]; addressData.balance -= 1; addressData.numberBurned += 1; // Keep track of who burned the token, and the timestamp of burning. TokenOwnership storage currSlot = _ownerships[tokenId]; currSlot.addr = from; currSlot.startTimestamp = uint64(block.timestamp); currSlot.burned = true; // If the ownership slot of tokenId+1 is not explicitly set, that means the burn initiator owns it. // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls. uint256 nextTokenId = tokenId + 1; TokenOwnership storage nextSlot = _ownerships[nextTokenId]; if (nextSlot.addr == address(0)) { // This will suffice for checking _exists(nextTokenId), // as a burned slot cannot contain the zero address. if (nextTokenId != _currentIndex) { nextSlot.addr = from; nextSlot.startTimestamp = prevOwnership.startTimestamp; } } } emit Transfer(from, address(0), tokenId); _afterTokenTransfers(from, address(0), tokenId, 1); // Overflow not possible, as _burnCounter cannot be exceed _currentIndex times. unchecked { _burnCounter++; } } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve( address to, uint256 tokenId, address owner ) internal { _tokenApprovals[tokenId] = to; emit Approval(owner, to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target 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 _checkContractOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver(to).onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert TransferToNonERC721ReceiverImplementer(); } else { assembly { revert(add(32, reason), mload(reason)) } } } } /** * @dev Hook that is called before a set of serially-ordered token ids are about to be transferred. This includes minting. * And also called before burning one token. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * 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, `tokenId` will be burned by `from`. * - `from` and `to` are never both zero. */ function _beforeTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} /** * @dev Hook that is called after a set of serially-ordered token ids have been transferred. This includes * minting. * And also called after one token has been burned. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * Calling conditions: * * - When `from` and `to` are both non-zero, `from`'s `tokenId` has been * transferred to `to`. * - When `from` is zero, `tokenId` has been minted for `to`. * - When `to` is zero, `tokenId` has been burned by `from`. * - `from` and `to` are never both zero. */ function _afterTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} } // File @openzeppelin/contracts/access/[email protected] // OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File contracts/MerkleProof.sol // OpenZeppelin Contracts v4.4.1 (utils/cryptography/MerkleProof.sol) pragma solidity ^0.8.0; /** * @dev These functions deal with verification of Merkle Trees proofs. * * The proofs can be generated using the JavaScript library * https://github.com/miguelmota/merkletreejs[merkletreejs]. * Note: the hashing algorithm should be keccak256 and pair sorting should be enabled. * * See `test/utils/cryptography/MerkleProof.test.js` for some examples. */ library MerkleProof { /** * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree * defined by `root`. For this, a `proof` must be provided, containing * sibling hashes on the branch from the leaf to the root of the tree. Each * pair of leaves and each pair of pre-images are assumed to be sorted. */ function verify( bytes32[] memory proof, bytes32 root, bytes32 leaf ) internal pure returns (bool) { return processProof(proof, leaf) == root; } /** * @dev Returns the rebuilt hash obtained by traversing a Merklee tree up * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt * hash matches the root of the tree. When processing the proof, the pairs * of leafs & pre-images are assumed to be sorted. * * _Available since v4.4._ */ function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) { bytes32 computedHash = leaf; for (uint256 i = 0; i < proof.length; i++) { bytes32 proofElement = proof[i]; if (computedHash <= proofElement) { // Hash(current computed hash + current element of the proof) computedHash = keccak256(abi.encodePacked(computedHash, proofElement)); } else { // Hash(current element of the proof + current computed hash) computedHash = keccak256(abi.encodePacked(proofElement, computedHash)); } } return computedHash; } } // File contracts/Floaties.sol // SPDX-License-Identifier: Unlicense pragma solidity ^0.8.9; contract Floaties is ERC721A, Ownable { string private _baseTokenURI; bytes32 public merkleRoot; mapping(address => bool) public bannedExchanges; mapping(address => uint256) public whitelistMints; bool public saleIsActive = false; bool public whitelistSaleIsActive = false; uint256 public maxAmount = 3333; uint256 public maxPerMint = 8; uint256 public maxPerWhitelist = 8; uint256 public nftPrice = 0.07 ether; uint256 public whitelistLength = 0; address private mktWallet = 0xd6544adA9811B74899EB7aAEE742a8B9f552C5Cf; address private lowIQWallet = 0xe4446D52e2bdB3E31470643Ab1753a4c2aEee3eA; address private devWallet = 0x5f55F579beB3beaD4163604a630731556B52a9f0; address private artWallet = 0xa64c09B57d311f0a9240b75f6Ead51f83D1732EA; address private copyWallet = 0xB09e818F51E054eB50b570ED476951aB0F974b14; address private ideaWallet = 0x9114B6E313A29fd8eCe8Ca8fE7A834024434DA18; constructor(bytes32 merkleRoot_) ERC721A("Floaties", "FLOATIES") { merkleRoot = merkleRoot_; bannedExchanges[0x1E0049783F008A0085193E00003D00cd54003c71] = true; bannedExchanges[0xF849de01B080aDC3A814FaBE1E2087475cF2E354] = true; bannedExchanges[0xf42aa99F011A1fA7CDA90E5E98b277E306BcA83e] = true; } receive() external payable {} function _baseURI() internal view virtual override returns (string memory) { return _baseTokenURI; } function setBaseURI(string calldata baseURI) external onlyOwner { _baseTokenURI = baseURI; } function flipSaleState() public onlyOwner { saleIsActive = !saleIsActive; } function flipWhitelistSaleState() public onlyOwner { whitelistSaleIsActive = !whitelistSaleIsActive; } function mintReserveTokens(uint256 numberOfTokens) public onlyOwner { _safeMint(msg.sender, numberOfTokens); require(totalSupply() <= maxAmount, "Limit reached"); } function mintNFTWhitelist( bytes32[] calldata _merkleProof, uint256 numberOfTokens ) public payable { require(whitelistSaleIsActive, "Whitelist sale is not active"); require( nftPrice * numberOfTokens <= msg.value, "Ether value incorrect" ); bytes32 leaf = keccak256(abi.encodePacked(msg.sender)); require( MerkleProof.verify(_merkleProof, merkleRoot, leaf) == true, "Incorrect Merkle Proof" ); uint256 mintedSoFar = whitelistMints[msg.sender] + numberOfTokens; require(mintedSoFar <= maxPerWhitelist, "You can't mint that many"); whitelistMints[msg.sender] = mintedSoFar; _safeMint(msg.sender, numberOfTokens); require(totalSupply() <= maxAmount, "Limit reached"); } function mintNFT(uint256 numberOfTokens) public payable { require(saleIsActive, "Sale is not active"); require( numberOfTokens <= maxPerMint, "You can't mint that many at once" ); require( nftPrice * numberOfTokens <= msg.value, "Ether value sent is not correct" ); _safeMint(msg.sender, numberOfTokens); require(totalSupply() <= maxAmount, "Limit reached"); } function withdrawMoney() external onlyOwner { payable(msg.sender).transfer(address(this).balance); } function sendPayouts() public onlyOwner { uint256 payout = (address(this).balance * 70) / 100; uint256 dev = (payout * 1950) / 10000; uint256 art = (payout * 1750) / 10000; uint256 copy = (payout * 1750) / 10000; uint256 idea = (payout * 1750) / 10000; uint256 lowiq = (payout * 1000) / 10000; uint256 mkt = (payout * 1800) / 10000; require(payable(devWallet).send(dev)); require(payable(artWallet).send(art)); require(payable(copyWallet).send(copy)); require(payable(mktWallet).send(mkt)); require(payable(ideaWallet).send(idea)); require(payable(lowIQWallet).send(lowiq)); } function addBannedExchange(address account) external onlyOwner { bannedExchanges[account] = true; } function removeBannedExchange(address account) external onlyOwner { bannedExchanges[account] = false; } function approve(address to, uint256 tokenId) public override { address owner = ERC721A.ownerOf(tokenId); if (to == owner) revert ApprovalToCurrentOwner(); if (_msgSender() != owner && !isApprovedForAll(owner, _msgSender())) { revert ApprovalCallerNotOwnerNorApproved(); } require(!bannedExchanges[to], "This exchange is not allowed."); _approve(to, tokenId, owner); } function setApprovalForAll(address operator, bool approved) public override { require(!bannedExchanges[operator], "This exchange is not allowed."); if (operator == _msgSender()) revert ApproveToCaller(); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } function setMerkleRoot(bytes32 merkleRoot_) external onlyOwner { merkleRoot = merkleRoot_; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"bytes32","name":"merkleRoot_","type":"bytes32"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ApprovalCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"ApprovalQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"ApprovalToCurrentOwner","type":"error"},{"inputs":[],"name":"ApproveToCaller","type":"error"},{"inputs":[],"name":"BalanceQueryForZeroAddress","type":"error"},{"inputs":[],"name":"MintToZeroAddress","type":"error"},{"inputs":[],"name":"MintZeroQuantity","type":"error"},{"inputs":[],"name":"OwnerQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"TransferCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"TransferFromIncorrectOwner","type":"error"},{"inputs":[],"name":"TransferToNonERC721ReceiverImplementer","type":"error"},{"inputs":[],"name":"TransferToZeroAddress","type":"error"},{"inputs":[],"name":"URIQueryForNonexistentToken","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addBannedExchange","outputs":[],"stateMutability":"nonpayable","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":[{"internalType":"address","name":"","type":"address"}],"name":"bannedExchanges","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"flipSaleState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"flipWhitelistSaleState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPerMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPerWhitelist","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"merkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"numberOfTokens","type":"uint256"}],"name":"mintNFT","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"_merkleProof","type":"bytes32[]"},{"internalType":"uint256","name":"numberOfTokens","type":"uint256"}],"name":"mintNFTWhitelist","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numberOfTokens","type":"uint256"}],"name":"mintReserveTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nftPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeBannedExchange","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"saleIsActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sendPayouts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"merkleRoot_","type":"bytes32"}],"name":"setMerkleRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"whitelistLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelistMints","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"whitelistSaleIsActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawMoney","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60806040526000600d60006101000a81548160ff0219169083151502179055506000600d60016101000a81548160ff021916908315150217905550610d05600e556008600f55600860105566f8b0a10e470000601155600060125573d6544ada9811b74899eb7aaee742a8b9f552c5cf601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073e4446d52e2bdb3e31470643ab1753a4c2aeee3ea601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550735f55f579beb3bead4163604a630731556b52a9f0601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073a64c09b57d311f0a9240b75f6ead51f83d1732ea601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073b09e818f51e054eb50b570ed476951ab0f974b14601760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550739114b6e313a29fd8ece8ca8fe7a834024434da18601860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156200026557600080fd5b50604051620047293803806200472983398181016040528101906200028b919062000676565b6040518060400160405280600881526020017f466c6f61746965730000000000000000000000000000000000000000000000008152506040518060400160405280600881526020017f464c4f415449455300000000000000000000000000000000000000000000000081525081600290805190602001906200030f92919062000586565b5080600390805190602001906200032892919062000586565b5062000339620004b360201b60201c565b60008190555050506200036162000355620004b860201b60201c565b620004c060201b60201c565b80600a819055506001600b6000731e0049783f008a0085193e00003d00cd54003c7173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b600073f849de01b080adc3a814fabe1e2087475cf2e35473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b600073f42aa99f011a1fa7cda90e5e98b277e306bca83e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550506200070d565b600090565b600033905090565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200059490620006d7565b90600052602060002090601f016020900481019282620005b8576000855562000604565b82601f10620005d357805160ff191683800117855562000604565b8280016001018555821562000604579182015b8281111562000603578251825591602001919060010190620005e6565b5b50905062000613919062000617565b5090565b5b808211156200063257600081600090555060010162000618565b5090565b600080fd5b6000819050919050565b62000650816200063b565b81146200065c57600080fd5b50565b600081519050620006708162000645565b92915050565b6000602082840312156200068f576200068e62000636565b5b60006200069f848285016200065f565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620006f057607f821691505b60208210811415620007075762000706620006a8565b5b50919050565b61400c806200071d6000396000f3fe6080604052600436106102285760003560e01c8063715018a611610123578063b88d4fde116100ab578063e2e7bfb11161006f578063e2e7bfb1146107b8578063e985e9c5146107e1578063eb832d211461081e578063eb8d24441461083a578063f2fde38b146108655761022f565b8063b88d4fde146106fb578063c534b74c14610724578063c87b56dd1461074d578063d1beca641461078a578063d53016d5146107a15761022f565b806392642744116100f2578063926427441461063757806395d89b4114610653578063a22cb4651461067e578063ac446002146106a7578063b5c1847d146106be5761022f565b8063715018a6146105a157806378bb5164146105b85780637cb64759146105e35780638da5cb5b1461060c5761022f565b8063288bd8fd116101b157806355f804b31161017557806355f804b3146104a85780635f48f393146104d15780636352211e146104fc57806366cc5f0d1461053957806370a08231146105645761022f565b8063288bd8fd146103e95780632eb4a7ab1461041257806334918dfd1461043d57806342842e0e14610454578063507e094f1461047d5761022f565b8063095ea7b3116101f8578063095ea7b3146103165780630d39fc811461033f57806310b5454d1461036a57806318160ddd1461039557806323b872dd146103c05761022f565b80628af2e61461023457806301ffc9a71461027157806306fdde03146102ae578063081812fc146102d95761022f565b3661022f57005b600080fd5b34801561024057600080fd5b5061025b60048036038101906102569190612f5b565b61088e565b6040516102689190612fa1565b60405180910390f35b34801561027d57600080fd5b5061029860048036038101906102939190613014565b6108a6565b6040516102a5919061305c565b60405180910390f35b3480156102ba57600080fd5b506102c3610988565b6040516102d09190613110565b60405180910390f35b3480156102e557600080fd5b5061030060048036038101906102fb919061315e565b610a1a565b60405161030d919061319a565b60405180910390f35b34801561032257600080fd5b5061033d600480360381019061033891906131b5565b610a96565b005b34801561034b57600080fd5b50610354610c2e565b6040516103619190612fa1565b60405180910390f35b34801561037657600080fd5b5061037f610c34565b60405161038c919061305c565b60405180910390f35b3480156103a157600080fd5b506103aa610c47565b6040516103b79190612fa1565b60405180910390f35b3480156103cc57600080fd5b506103e760048036038101906103e291906131f5565b610c5e565b005b3480156103f557600080fd5b50610410600480360381019061040b919061315e565b610c6e565b005b34801561041e57600080fd5b50610427610ccf565b6040516104349190613261565b60405180910390f35b34801561044957600080fd5b50610452610cd5565b005b34801561046057600080fd5b5061047b600480360381019061047691906131f5565b610d09565b005b34801561048957600080fd5b50610492610d29565b60405161049f9190612fa1565b60405180910390f35b3480156104b457600080fd5b506104cf60048036038101906104ca91906132e1565b610d2f565b005b3480156104dd57600080fd5b506104e6610d4d565b6040516104f39190612fa1565b60405180910390f35b34801561050857600080fd5b50610523600480360381019061051e919061315e565b610d53565b604051610530919061319a565b60405180910390f35b34801561054557600080fd5b5061054e610d69565b60405161055b9190612fa1565b60405180910390f35b34801561057057600080fd5b5061058b60048036038101906105869190612f5b565b610d6f565b6040516105989190612fa1565b60405180910390f35b3480156105ad57600080fd5b506105b6610e3f565b005b3480156105c457600080fd5b506105cd610e53565b6040516105da9190612fa1565b60405180910390f35b3480156105ef57600080fd5b5061060a6004803603810190610605919061335a565b610e59565b005b34801561061857600080fd5b50610621610e6b565b60405161062e919061319a565b60405180910390f35b610651600480360381019061064c919061315e565b610e95565b005b34801561065f57600080fd5b50610668610fd2565b6040516106759190613110565b60405180910390f35b34801561068a57600080fd5b506106a560048036038101906106a091906133b3565b611064565b005b3480156106b357600080fd5b506106bc611269565b005b3480156106ca57600080fd5b506106e560048036038101906106e09190612f5b565b6112ba565b6040516106f2919061305c565b60405180910390f35b34801561070757600080fd5b50610722600480360381019061071d9190613523565b6112da565b005b34801561073057600080fd5b5061074b60048036038101906107469190612f5b565b611356565b005b34801561075957600080fd5b50610774600480360381019061076f919061315e565b6113b9565b6040516107819190613110565b60405180910390f35b34801561079657600080fd5b5061079f611458565b005b3480156107ad57600080fd5b506107b661148c565b005b3480156107c457600080fd5b506107df60048036038101906107da9190612f5b565b6117b4565b005b3480156107ed57600080fd5b50610808600480360381019061080391906135a6565b611817565b604051610815919061305c565b60405180910390f35b6108386004803603810190610833919061363c565b6118ab565b005b34801561084657600080fd5b5061084f611b3e565b60405161085c919061305c565b60405180910390f35b34801561087157600080fd5b5061088c60048036038101906108879190612f5b565b611b51565b005b600c6020528060005260406000206000915090505481565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061097157507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610981575061098082611bd5565b5b9050919050565b606060028054610997906136cb565b80601f01602080910402602001604051908101604052809291908181526020018280546109c3906136cb565b8015610a105780601f106109e557610100808354040283529160200191610a10565b820191906000526020600020905b8154815290600101906020018083116109f357829003601f168201915b5050505050905090565b6000610a2582611c3f565b610a5b576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610aa182610d53565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b09576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b28611c8d565b73ffffffffffffffffffffffffffffffffffffffff1614158015610b5a5750610b5881610b53611c8d565b611817565b155b15610b91576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610c1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1590613749565b60405180910390fd5b610c29838383611c95565b505050565b60115481565b600d60019054906101000a900460ff1681565b6000610c51611d47565b6001546000540303905090565b610c69838383611d4c565b505050565b610c76612202565b610c803382612280565b600e54610c8b610c47565b1115610ccc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc3906137b5565b60405180910390fd5b50565b600a5481565b610cdd612202565b600d60009054906101000a900460ff1615600d60006101000a81548160ff021916908315150217905550565b610d24838383604051806020016040528060008152506112da565b505050565b600f5481565b610d37612202565b818160099190610d48929190612e03565b505050565b600e5481565b6000610d5e8261229e565b600001519050919050565b60105481565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610dd7576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b610e47612202565b610e51600061252d565b565b60125481565b610e61612202565b80600a8190555050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600d60009054906101000a900460ff16610ee4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610edb90613821565b60405180910390fd5b600f54811115610f29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f209061388d565b60405180910390fd5b3481601154610f3891906138dc565b1115610f79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7090613982565b60405180910390fd5b610f833382612280565b600e54610f8e610c47565b1115610fcf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc6906137b5565b60405180910390fd5b50565b606060038054610fe1906136cb565b80601f016020809104026020016040519081016040528092919081815260200182805461100d906136cb565b801561105a5780601f1061102f5761010080835404028352916020019161105a565b820191906000526020600020905b81548152906001019060200180831161103d57829003601f168201915b5050505050905090565b600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156110f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e890613749565b60405180910390fd5b6110f9611c8d565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561115e576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806007600061116b611c8d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611218611c8d565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161125d919061305c565b60405180910390a35050565b611271612202565b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050501580156112b7573d6000803e3d6000fd5b50565b600b6020528060005260406000206000915054906101000a900460ff1681565b6112e5848484611d4c565b6113048373ffffffffffffffffffffffffffffffffffffffff166125f3565b8015611319575061131784848484612616565b155b15611350576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b61135e612202565b6001600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60606113c482611c3f565b6113fa576040517fa14c4b5000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611404612776565b90506000815114156114255760405180602001604052806000815250611450565b8061142f84612808565b6040516020016114409291906139de565b6040516020818303038152906040525b915050919050565b611460612202565b600d60019054906101000a900460ff1615600d60016101000a81548160ff021916908315150217905550565b611494612202565b600060646046476114a591906138dc565b6114af9190613a31565b9050600061271061079e836114c491906138dc565b6114ce9190613a31565b905060006127106106d6846114e391906138dc565b6114ed9190613a31565b905060006127106106d68561150291906138dc565b61150c9190613a31565b905060006127106106d68661152191906138dc565b61152b9190613a31565b905060006127106103e88761154091906138dc565b61154a9190613a31565b905060006127106107088861155f91906138dc565b6115699190613a31565b9050601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc879081150290604051600060405180830381858888f193505050506115cb57600080fd5b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc869081150290604051600060405180830381858888f1935050505061162b57600080fd5b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc859081150290604051600060405180830381858888f1935050505061168b57600080fd5b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050506116eb57600080fd5b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f1935050505061174b57600080fd5b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f193505050506117ab57600080fd5b50505050505050565b6117bc612202565b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600d60019054906101000a900460ff166118fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f190613aae565b60405180910390fd5b348160115461190991906138dc565b111561194a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194190613b1a565b60405180910390fd5b60003360405160200161195d9190613b82565b604051602081830303815290604052805190602001209050600115156119c7858580806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050600a5484612969565b151514611a09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0090613be9565b60405180910390fd5b600082600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611a569190613c09565b9050601054811115611a9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9490613cab565b60405180910390fd5b80600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611aeb3384612280565b600e54611af6610c47565b1115611b37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2e906137b5565b60405180910390fd5b5050505050565b600d60009054906101000a900460ff1681565b611b59612202565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611bc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc090613d3d565b60405180910390fd5b611bd28161252d565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600081611c4a611d47565b11158015611c59575060005482105b8015611c86575060046000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b600033905090565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600090565b6000611d578261229e565b90508373ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614611dc2576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008473ffffffffffffffffffffffffffffffffffffffff16611de3611c8d565b73ffffffffffffffffffffffffffffffffffffffff161480611e125750611e1185611e0c611c8d565b611817565b5b80611e575750611e20611c8d565b73ffffffffffffffffffffffffffffffffffffffff16611e3f84610a1a565b73ffffffffffffffffffffffffffffffffffffffff16145b905080611e90576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611ef7576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611f048585856001612980565b611f1060008487611c95565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600460008581526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550428160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060006001850190506000600460008381526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561219057600054821461218f57878160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084602001518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b505050828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46121fb8585856001612986565b5050505050565b61220a611c8d565b73ffffffffffffffffffffffffffffffffffffffff16612228610e6b565b73ffffffffffffffffffffffffffffffffffffffff161461227e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227590613da9565b60405180910390fd5b565b61229a82826040518060200160405280600081525061298c565b5050565b6122a6612e89565b6000829050806122b4611d47565b111580156122c3575060005481105b156124f6576000600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff161515151581525050905080604001516124f457600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146123d8578092505050612528565b5b6001156124f357818060019003925050600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146124ee578092505050612528565b6123d9565b5b505b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261263c611c8d565b8786866040518563ffffffff1660e01b815260040161265e9493929190613e1e565b602060405180830381600087803b15801561267857600080fd5b505af19250505080156126a957506040513d601f19601f820116820180604052508101906126a69190613e7f565b60015b612723573d80600081146126d9576040519150601f19603f3d011682016040523d82523d6000602084013e6126de565b606091505b5060008151141561271b576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b606060098054612785906136cb565b80601f01602080910402602001604051908101604052809291908181526020018280546127b1906136cb565b80156127fe5780601f106127d3576101008083540402835291602001916127fe565b820191906000526020600020905b8154815290600101906020018083116127e157829003601f168201915b5050505050905090565b60606000821415612850576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612964565b600082905060005b6000821461288257808061286b90613eac565b915050600a8261287b9190613a31565b9150612858565b60008167ffffffffffffffff81111561289e5761289d6133f8565b5b6040519080825280601f01601f1916602001820160405280156128d05781602001600182028036833780820191505090505b5090505b6000851461295d576001826128e99190613ef5565b9150600a856128f89190613f29565b60306129049190613c09565b60f81b81838151811061291a57612919613f5a565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856129569190613a31565b94506128d4565b8093505050505b919050565b6000826129768584612d50565b1490509392505050565b50505050565b50505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156129f9576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000831415612a34576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612a416000858386612980565b82600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555082600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550836004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600081905060008482019050612c028673ffffffffffffffffffffffffffffffffffffffff166125f3565b15612cc8575b818673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612c776000878480600101955087612616565b612cad576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80821415612c08578260005414612cc357600080fd5b612d34565b5b818060010192508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a480821415612cc9575b816000819055505050612d4a6000858386612986565b50505050565b60008082905060005b8451811015612df8576000858281518110612d7757612d76613f5a565b5b60200260200101519050808311612db8578281604051602001612d9b929190613faa565b604051602081830303815290604052805190602001209250612de4565b8083604051602001612dcb929190613faa565b6040516020818303038152906040528051906020012092505b508080612df090613eac565b915050612d59565b508091505092915050565b828054612e0f906136cb565b90600052602060002090601f016020900481019282612e315760008555612e78565b82601f10612e4a57803560ff1916838001178555612e78565b82800160010185558215612e78579182015b82811115612e77578235825591602001919060010190612e5c565b5b509050612e859190612ecc565b5090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b5b80821115612ee5576000816000905550600101612ecd565b5090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612f2882612efd565b9050919050565b612f3881612f1d565b8114612f4357600080fd5b50565b600081359050612f5581612f2f565b92915050565b600060208284031215612f7157612f70612ef3565b5b6000612f7f84828501612f46565b91505092915050565b6000819050919050565b612f9b81612f88565b82525050565b6000602082019050612fb66000830184612f92565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612ff181612fbc565b8114612ffc57600080fd5b50565b60008135905061300e81612fe8565b92915050565b60006020828403121561302a57613029612ef3565b5b600061303884828501612fff565b91505092915050565b60008115159050919050565b61305681613041565b82525050565b6000602082019050613071600083018461304d565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156130b1578082015181840152602081019050613096565b838111156130c0576000848401525b50505050565b6000601f19601f8301169050919050565b60006130e282613077565b6130ec8185613082565b93506130fc818560208601613093565b613105816130c6565b840191505092915050565b6000602082019050818103600083015261312a81846130d7565b905092915050565b61313b81612f88565b811461314657600080fd5b50565b60008135905061315881613132565b92915050565b60006020828403121561317457613173612ef3565b5b600061318284828501613149565b91505092915050565b61319481612f1d565b82525050565b60006020820190506131af600083018461318b565b92915050565b600080604083850312156131cc576131cb612ef3565b5b60006131da85828601612f46565b92505060206131eb85828601613149565b9150509250929050565b60008060006060848603121561320e5761320d612ef3565b5b600061321c86828701612f46565b935050602061322d86828701612f46565b925050604061323e86828701613149565b9150509250925092565b6000819050919050565b61325b81613248565b82525050565b60006020820190506132766000830184613252565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126132a1576132a061327c565b5b8235905067ffffffffffffffff8111156132be576132bd613281565b5b6020830191508360018202830111156132da576132d9613286565b5b9250929050565b600080602083850312156132f8576132f7612ef3565b5b600083013567ffffffffffffffff81111561331657613315612ef8565b5b6133228582860161328b565b92509250509250929050565b61333781613248565b811461334257600080fd5b50565b6000813590506133548161332e565b92915050565b6000602082840312156133705761336f612ef3565b5b600061337e84828501613345565b91505092915050565b61339081613041565b811461339b57600080fd5b50565b6000813590506133ad81613387565b92915050565b600080604083850312156133ca576133c9612ef3565b5b60006133d885828601612f46565b92505060206133e98582860161339e565b9150509250929050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613430826130c6565b810181811067ffffffffffffffff8211171561344f5761344e6133f8565b5b80604052505050565b6000613462612ee9565b905061346e8282613427565b919050565b600067ffffffffffffffff82111561348e5761348d6133f8565b5b613497826130c6565b9050602081019050919050565b82818337600083830152505050565b60006134c66134c184613473565b613458565b9050828152602081018484840111156134e2576134e16133f3565b5b6134ed8482856134a4565b509392505050565b600082601f83011261350a5761350961327c565b5b813561351a8482602086016134b3565b91505092915050565b6000806000806080858703121561353d5761353c612ef3565b5b600061354b87828801612f46565b945050602061355c87828801612f46565b935050604061356d87828801613149565b925050606085013567ffffffffffffffff81111561358e5761358d612ef8565b5b61359a878288016134f5565b91505092959194509250565b600080604083850312156135bd576135bc612ef3565b5b60006135cb85828601612f46565b92505060206135dc85828601612f46565b9150509250929050565b60008083601f8401126135fc576135fb61327c565b5b8235905067ffffffffffffffff81111561361957613618613281565b5b60208301915083602082028301111561363557613634613286565b5b9250929050565b60008060006040848603121561365557613654612ef3565b5b600084013567ffffffffffffffff81111561367357613672612ef8565b5b61367f868287016135e6565b9350935050602061369286828701613149565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806136e357607f821691505b602082108114156136f7576136f661369c565b5b50919050565b7f546869732065786368616e6765206973206e6f7420616c6c6f7765642e000000600082015250565b6000613733601d83613082565b915061373e826136fd565b602082019050919050565b6000602082019050818103600083015261376281613726565b9050919050565b7f4c696d6974207265616368656400000000000000000000000000000000000000600082015250565b600061379f600d83613082565b91506137aa82613769565b602082019050919050565b600060208201905081810360008301526137ce81613792565b9050919050565b7f53616c65206973206e6f74206163746976650000000000000000000000000000600082015250565b600061380b601283613082565b9150613816826137d5565b602082019050919050565b6000602082019050818103600083015261383a816137fe565b9050919050565b7f596f752063616e2774206d696e742074686174206d616e79206174206f6e6365600082015250565b6000613877602083613082565b915061388282613841565b602082019050919050565b600060208201905081810360008301526138a68161386a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006138e782612f88565b91506138f283612f88565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561392b5761392a6138ad565b5b828202905092915050565b7f45746865722076616c75652073656e74206973206e6f7420636f727265637400600082015250565b600061396c601f83613082565b915061397782613936565b602082019050919050565b6000602082019050818103600083015261399b8161395f565b9050919050565b600081905092915050565b60006139b882613077565b6139c281856139a2565b93506139d2818560208601613093565b80840191505092915050565b60006139ea82856139ad565b91506139f682846139ad565b91508190509392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613a3c82612f88565b9150613a4783612f88565b925082613a5757613a56613a02565b5b828204905092915050565b7f57686974656c6973742073616c65206973206e6f742061637469766500000000600082015250565b6000613a98601c83613082565b9150613aa382613a62565b602082019050919050565b60006020820190508181036000830152613ac781613a8b565b9050919050565b7f45746865722076616c756520696e636f72726563740000000000000000000000600082015250565b6000613b04601583613082565b9150613b0f82613ace565b602082019050919050565b60006020820190508181036000830152613b3381613af7565b9050919050565b60008160601b9050919050565b6000613b5282613b3a565b9050919050565b6000613b6482613b47565b9050919050565b613b7c613b7782612f1d565b613b59565b82525050565b6000613b8e8284613b6b565b60148201915081905092915050565b7f496e636f7272656374204d65726b6c652050726f6f6600000000000000000000600082015250565b6000613bd3601683613082565b9150613bde82613b9d565b602082019050919050565b60006020820190508181036000830152613c0281613bc6565b9050919050565b6000613c1482612f88565b9150613c1f83612f88565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613c5457613c536138ad565b5b828201905092915050565b7f596f752063616e2774206d696e742074686174206d616e790000000000000000600082015250565b6000613c95601883613082565b9150613ca082613c5f565b602082019050919050565b60006020820190508181036000830152613cc481613c88565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613d27602683613082565b9150613d3282613ccb565b604082019050919050565b60006020820190508181036000830152613d5681613d1a565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613d93602083613082565b9150613d9e82613d5d565b602082019050919050565b60006020820190508181036000830152613dc281613d86565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000613df082613dc9565b613dfa8185613dd4565b9350613e0a818560208601613093565b613e13816130c6565b840191505092915050565b6000608082019050613e33600083018761318b565b613e40602083018661318b565b613e4d6040830185612f92565b8181036060830152613e5f8184613de5565b905095945050505050565b600081519050613e7981612fe8565b92915050565b600060208284031215613e9557613e94612ef3565b5b6000613ea384828501613e6a565b91505092915050565b6000613eb782612f88565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613eea57613ee96138ad565b5b600182019050919050565b6000613f0082612f88565b9150613f0b83612f88565b925082821015613f1e57613f1d6138ad565b5b828203905092915050565b6000613f3482612f88565b9150613f3f83612f88565b925082613f4f57613f4e613a02565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b613fa4613f9f82613248565b613f89565b82525050565b6000613fb68285613f93565b602082019150613fc68284613f93565b602082019150819050939250505056fea264697066735822122051604abac4647200417737fd767d89f2fa273291883517e53c126cbd43dfacf664736f6c634300080900336ee6dc0c8ffddca9f889fb352fd6f145e5d453a2908ad19611a8d40a359c9bf0
Deployed Bytecode
0x6080604052600436106102285760003560e01c8063715018a611610123578063b88d4fde116100ab578063e2e7bfb11161006f578063e2e7bfb1146107b8578063e985e9c5146107e1578063eb832d211461081e578063eb8d24441461083a578063f2fde38b146108655761022f565b8063b88d4fde146106fb578063c534b74c14610724578063c87b56dd1461074d578063d1beca641461078a578063d53016d5146107a15761022f565b806392642744116100f2578063926427441461063757806395d89b4114610653578063a22cb4651461067e578063ac446002146106a7578063b5c1847d146106be5761022f565b8063715018a6146105a157806378bb5164146105b85780637cb64759146105e35780638da5cb5b1461060c5761022f565b8063288bd8fd116101b157806355f804b31161017557806355f804b3146104a85780635f48f393146104d15780636352211e146104fc57806366cc5f0d1461053957806370a08231146105645761022f565b8063288bd8fd146103e95780632eb4a7ab1461041257806334918dfd1461043d57806342842e0e14610454578063507e094f1461047d5761022f565b8063095ea7b3116101f8578063095ea7b3146103165780630d39fc811461033f57806310b5454d1461036a57806318160ddd1461039557806323b872dd146103c05761022f565b80628af2e61461023457806301ffc9a71461027157806306fdde03146102ae578063081812fc146102d95761022f565b3661022f57005b600080fd5b34801561024057600080fd5b5061025b60048036038101906102569190612f5b565b61088e565b6040516102689190612fa1565b60405180910390f35b34801561027d57600080fd5b5061029860048036038101906102939190613014565b6108a6565b6040516102a5919061305c565b60405180910390f35b3480156102ba57600080fd5b506102c3610988565b6040516102d09190613110565b60405180910390f35b3480156102e557600080fd5b5061030060048036038101906102fb919061315e565b610a1a565b60405161030d919061319a565b60405180910390f35b34801561032257600080fd5b5061033d600480360381019061033891906131b5565b610a96565b005b34801561034b57600080fd5b50610354610c2e565b6040516103619190612fa1565b60405180910390f35b34801561037657600080fd5b5061037f610c34565b60405161038c919061305c565b60405180910390f35b3480156103a157600080fd5b506103aa610c47565b6040516103b79190612fa1565b60405180910390f35b3480156103cc57600080fd5b506103e760048036038101906103e291906131f5565b610c5e565b005b3480156103f557600080fd5b50610410600480360381019061040b919061315e565b610c6e565b005b34801561041e57600080fd5b50610427610ccf565b6040516104349190613261565b60405180910390f35b34801561044957600080fd5b50610452610cd5565b005b34801561046057600080fd5b5061047b600480360381019061047691906131f5565b610d09565b005b34801561048957600080fd5b50610492610d29565b60405161049f9190612fa1565b60405180910390f35b3480156104b457600080fd5b506104cf60048036038101906104ca91906132e1565b610d2f565b005b3480156104dd57600080fd5b506104e6610d4d565b6040516104f39190612fa1565b60405180910390f35b34801561050857600080fd5b50610523600480360381019061051e919061315e565b610d53565b604051610530919061319a565b60405180910390f35b34801561054557600080fd5b5061054e610d69565b60405161055b9190612fa1565b60405180910390f35b34801561057057600080fd5b5061058b60048036038101906105869190612f5b565b610d6f565b6040516105989190612fa1565b60405180910390f35b3480156105ad57600080fd5b506105b6610e3f565b005b3480156105c457600080fd5b506105cd610e53565b6040516105da9190612fa1565b60405180910390f35b3480156105ef57600080fd5b5061060a6004803603810190610605919061335a565b610e59565b005b34801561061857600080fd5b50610621610e6b565b60405161062e919061319a565b60405180910390f35b610651600480360381019061064c919061315e565b610e95565b005b34801561065f57600080fd5b50610668610fd2565b6040516106759190613110565b60405180910390f35b34801561068a57600080fd5b506106a560048036038101906106a091906133b3565b611064565b005b3480156106b357600080fd5b506106bc611269565b005b3480156106ca57600080fd5b506106e560048036038101906106e09190612f5b565b6112ba565b6040516106f2919061305c565b60405180910390f35b34801561070757600080fd5b50610722600480360381019061071d9190613523565b6112da565b005b34801561073057600080fd5b5061074b60048036038101906107469190612f5b565b611356565b005b34801561075957600080fd5b50610774600480360381019061076f919061315e565b6113b9565b6040516107819190613110565b60405180910390f35b34801561079657600080fd5b5061079f611458565b005b3480156107ad57600080fd5b506107b661148c565b005b3480156107c457600080fd5b506107df60048036038101906107da9190612f5b565b6117b4565b005b3480156107ed57600080fd5b50610808600480360381019061080391906135a6565b611817565b604051610815919061305c565b60405180910390f35b6108386004803603810190610833919061363c565b6118ab565b005b34801561084657600080fd5b5061084f611b3e565b60405161085c919061305c565b60405180910390f35b34801561087157600080fd5b5061088c60048036038101906108879190612f5b565b611b51565b005b600c6020528060005260406000206000915090505481565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061097157507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610981575061098082611bd5565b5b9050919050565b606060028054610997906136cb565b80601f01602080910402602001604051908101604052809291908181526020018280546109c3906136cb565b8015610a105780601f106109e557610100808354040283529160200191610a10565b820191906000526020600020905b8154815290600101906020018083116109f357829003601f168201915b5050505050905090565b6000610a2582611c3f565b610a5b576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610aa182610d53565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b09576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b28611c8d565b73ffffffffffffffffffffffffffffffffffffffff1614158015610b5a5750610b5881610b53611c8d565b611817565b155b15610b91576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610c1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1590613749565b60405180910390fd5b610c29838383611c95565b505050565b60115481565b600d60019054906101000a900460ff1681565b6000610c51611d47565b6001546000540303905090565b610c69838383611d4c565b505050565b610c76612202565b610c803382612280565b600e54610c8b610c47565b1115610ccc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc3906137b5565b60405180910390fd5b50565b600a5481565b610cdd612202565b600d60009054906101000a900460ff1615600d60006101000a81548160ff021916908315150217905550565b610d24838383604051806020016040528060008152506112da565b505050565b600f5481565b610d37612202565b818160099190610d48929190612e03565b505050565b600e5481565b6000610d5e8261229e565b600001519050919050565b60105481565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610dd7576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b610e47612202565b610e51600061252d565b565b60125481565b610e61612202565b80600a8190555050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600d60009054906101000a900460ff16610ee4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610edb90613821565b60405180910390fd5b600f54811115610f29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f209061388d565b60405180910390fd5b3481601154610f3891906138dc565b1115610f79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7090613982565b60405180910390fd5b610f833382612280565b600e54610f8e610c47565b1115610fcf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc6906137b5565b60405180910390fd5b50565b606060038054610fe1906136cb565b80601f016020809104026020016040519081016040528092919081815260200182805461100d906136cb565b801561105a5780601f1061102f5761010080835404028352916020019161105a565b820191906000526020600020905b81548152906001019060200180831161103d57829003601f168201915b5050505050905090565b600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156110f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e890613749565b60405180910390fd5b6110f9611c8d565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561115e576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806007600061116b611c8d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611218611c8d565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161125d919061305c565b60405180910390a35050565b611271612202565b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050501580156112b7573d6000803e3d6000fd5b50565b600b6020528060005260406000206000915054906101000a900460ff1681565b6112e5848484611d4c565b6113048373ffffffffffffffffffffffffffffffffffffffff166125f3565b8015611319575061131784848484612616565b155b15611350576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b61135e612202565b6001600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60606113c482611c3f565b6113fa576040517fa14c4b5000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611404612776565b90506000815114156114255760405180602001604052806000815250611450565b8061142f84612808565b6040516020016114409291906139de565b6040516020818303038152906040525b915050919050565b611460612202565b600d60019054906101000a900460ff1615600d60016101000a81548160ff021916908315150217905550565b611494612202565b600060646046476114a591906138dc565b6114af9190613a31565b9050600061271061079e836114c491906138dc565b6114ce9190613a31565b905060006127106106d6846114e391906138dc565b6114ed9190613a31565b905060006127106106d68561150291906138dc565b61150c9190613a31565b905060006127106106d68661152191906138dc565b61152b9190613a31565b905060006127106103e88761154091906138dc565b61154a9190613a31565b905060006127106107088861155f91906138dc565b6115699190613a31565b9050601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc879081150290604051600060405180830381858888f193505050506115cb57600080fd5b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc869081150290604051600060405180830381858888f1935050505061162b57600080fd5b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc859081150290604051600060405180830381858888f1935050505061168b57600080fd5b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050506116eb57600080fd5b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f1935050505061174b57600080fd5b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f193505050506117ab57600080fd5b50505050505050565b6117bc612202565b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600d60019054906101000a900460ff166118fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f190613aae565b60405180910390fd5b348160115461190991906138dc565b111561194a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194190613b1a565b60405180910390fd5b60003360405160200161195d9190613b82565b604051602081830303815290604052805190602001209050600115156119c7858580806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050600a5484612969565b151514611a09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0090613be9565b60405180910390fd5b600082600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611a569190613c09565b9050601054811115611a9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9490613cab565b60405180910390fd5b80600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611aeb3384612280565b600e54611af6610c47565b1115611b37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2e906137b5565b60405180910390fd5b5050505050565b600d60009054906101000a900460ff1681565b611b59612202565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611bc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc090613d3d565b60405180910390fd5b611bd28161252d565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600081611c4a611d47565b11158015611c59575060005482105b8015611c86575060046000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b600033905090565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600090565b6000611d578261229e565b90508373ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614611dc2576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008473ffffffffffffffffffffffffffffffffffffffff16611de3611c8d565b73ffffffffffffffffffffffffffffffffffffffff161480611e125750611e1185611e0c611c8d565b611817565b5b80611e575750611e20611c8d565b73ffffffffffffffffffffffffffffffffffffffff16611e3f84610a1a565b73ffffffffffffffffffffffffffffffffffffffff16145b905080611e90576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611ef7576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611f048585856001612980565b611f1060008487611c95565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600460008581526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550428160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060006001850190506000600460008381526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561219057600054821461218f57878160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084602001518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b505050828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46121fb8585856001612986565b5050505050565b61220a611c8d565b73ffffffffffffffffffffffffffffffffffffffff16612228610e6b565b73ffffffffffffffffffffffffffffffffffffffff161461227e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227590613da9565b60405180910390fd5b565b61229a82826040518060200160405280600081525061298c565b5050565b6122a6612e89565b6000829050806122b4611d47565b111580156122c3575060005481105b156124f6576000600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff161515151581525050905080604001516124f457600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146123d8578092505050612528565b5b6001156124f357818060019003925050600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146124ee578092505050612528565b6123d9565b5b505b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261263c611c8d565b8786866040518563ffffffff1660e01b815260040161265e9493929190613e1e565b602060405180830381600087803b15801561267857600080fd5b505af19250505080156126a957506040513d601f19601f820116820180604052508101906126a69190613e7f565b60015b612723573d80600081146126d9576040519150601f19603f3d011682016040523d82523d6000602084013e6126de565b606091505b5060008151141561271b576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b606060098054612785906136cb565b80601f01602080910402602001604051908101604052809291908181526020018280546127b1906136cb565b80156127fe5780601f106127d3576101008083540402835291602001916127fe565b820191906000526020600020905b8154815290600101906020018083116127e157829003601f168201915b5050505050905090565b60606000821415612850576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612964565b600082905060005b6000821461288257808061286b90613eac565b915050600a8261287b9190613a31565b9150612858565b60008167ffffffffffffffff81111561289e5761289d6133f8565b5b6040519080825280601f01601f1916602001820160405280156128d05781602001600182028036833780820191505090505b5090505b6000851461295d576001826128e99190613ef5565b9150600a856128f89190613f29565b60306129049190613c09565b60f81b81838151811061291a57612919613f5a565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856129569190613a31565b94506128d4565b8093505050505b919050565b6000826129768584612d50565b1490509392505050565b50505050565b50505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156129f9576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000831415612a34576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612a416000858386612980565b82600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555082600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550836004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600081905060008482019050612c028673ffffffffffffffffffffffffffffffffffffffff166125f3565b15612cc8575b818673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612c776000878480600101955087612616565b612cad576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80821415612c08578260005414612cc357600080fd5b612d34565b5b818060010192508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a480821415612cc9575b816000819055505050612d4a6000858386612986565b50505050565b60008082905060005b8451811015612df8576000858281518110612d7757612d76613f5a565b5b60200260200101519050808311612db8578281604051602001612d9b929190613faa565b604051602081830303815290604052805190602001209250612de4565b8083604051602001612dcb929190613faa565b6040516020818303038152906040528051906020012092505b508080612df090613eac565b915050612d59565b508091505092915050565b828054612e0f906136cb565b90600052602060002090601f016020900481019282612e315760008555612e78565b82601f10612e4a57803560ff1916838001178555612e78565b82800160010185558215612e78579182015b82811115612e77578235825591602001919060010190612e5c565b5b509050612e859190612ecc565b5090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b5b80821115612ee5576000816000905550600101612ecd565b5090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612f2882612efd565b9050919050565b612f3881612f1d565b8114612f4357600080fd5b50565b600081359050612f5581612f2f565b92915050565b600060208284031215612f7157612f70612ef3565b5b6000612f7f84828501612f46565b91505092915050565b6000819050919050565b612f9b81612f88565b82525050565b6000602082019050612fb66000830184612f92565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612ff181612fbc565b8114612ffc57600080fd5b50565b60008135905061300e81612fe8565b92915050565b60006020828403121561302a57613029612ef3565b5b600061303884828501612fff565b91505092915050565b60008115159050919050565b61305681613041565b82525050565b6000602082019050613071600083018461304d565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156130b1578082015181840152602081019050613096565b838111156130c0576000848401525b50505050565b6000601f19601f8301169050919050565b60006130e282613077565b6130ec8185613082565b93506130fc818560208601613093565b613105816130c6565b840191505092915050565b6000602082019050818103600083015261312a81846130d7565b905092915050565b61313b81612f88565b811461314657600080fd5b50565b60008135905061315881613132565b92915050565b60006020828403121561317457613173612ef3565b5b600061318284828501613149565b91505092915050565b61319481612f1d565b82525050565b60006020820190506131af600083018461318b565b92915050565b600080604083850312156131cc576131cb612ef3565b5b60006131da85828601612f46565b92505060206131eb85828601613149565b9150509250929050565b60008060006060848603121561320e5761320d612ef3565b5b600061321c86828701612f46565b935050602061322d86828701612f46565b925050604061323e86828701613149565b9150509250925092565b6000819050919050565b61325b81613248565b82525050565b60006020820190506132766000830184613252565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126132a1576132a061327c565b5b8235905067ffffffffffffffff8111156132be576132bd613281565b5b6020830191508360018202830111156132da576132d9613286565b5b9250929050565b600080602083850312156132f8576132f7612ef3565b5b600083013567ffffffffffffffff81111561331657613315612ef8565b5b6133228582860161328b565b92509250509250929050565b61333781613248565b811461334257600080fd5b50565b6000813590506133548161332e565b92915050565b6000602082840312156133705761336f612ef3565b5b600061337e84828501613345565b91505092915050565b61339081613041565b811461339b57600080fd5b50565b6000813590506133ad81613387565b92915050565b600080604083850312156133ca576133c9612ef3565b5b60006133d885828601612f46565b92505060206133e98582860161339e565b9150509250929050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613430826130c6565b810181811067ffffffffffffffff8211171561344f5761344e6133f8565b5b80604052505050565b6000613462612ee9565b905061346e8282613427565b919050565b600067ffffffffffffffff82111561348e5761348d6133f8565b5b613497826130c6565b9050602081019050919050565b82818337600083830152505050565b60006134c66134c184613473565b613458565b9050828152602081018484840111156134e2576134e16133f3565b5b6134ed8482856134a4565b509392505050565b600082601f83011261350a5761350961327c565b5b813561351a8482602086016134b3565b91505092915050565b6000806000806080858703121561353d5761353c612ef3565b5b600061354b87828801612f46565b945050602061355c87828801612f46565b935050604061356d87828801613149565b925050606085013567ffffffffffffffff81111561358e5761358d612ef8565b5b61359a878288016134f5565b91505092959194509250565b600080604083850312156135bd576135bc612ef3565b5b60006135cb85828601612f46565b92505060206135dc85828601612f46565b9150509250929050565b60008083601f8401126135fc576135fb61327c565b5b8235905067ffffffffffffffff81111561361957613618613281565b5b60208301915083602082028301111561363557613634613286565b5b9250929050565b60008060006040848603121561365557613654612ef3565b5b600084013567ffffffffffffffff81111561367357613672612ef8565b5b61367f868287016135e6565b9350935050602061369286828701613149565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806136e357607f821691505b602082108114156136f7576136f661369c565b5b50919050565b7f546869732065786368616e6765206973206e6f7420616c6c6f7765642e000000600082015250565b6000613733601d83613082565b915061373e826136fd565b602082019050919050565b6000602082019050818103600083015261376281613726565b9050919050565b7f4c696d6974207265616368656400000000000000000000000000000000000000600082015250565b600061379f600d83613082565b91506137aa82613769565b602082019050919050565b600060208201905081810360008301526137ce81613792565b9050919050565b7f53616c65206973206e6f74206163746976650000000000000000000000000000600082015250565b600061380b601283613082565b9150613816826137d5565b602082019050919050565b6000602082019050818103600083015261383a816137fe565b9050919050565b7f596f752063616e2774206d696e742074686174206d616e79206174206f6e6365600082015250565b6000613877602083613082565b915061388282613841565b602082019050919050565b600060208201905081810360008301526138a68161386a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006138e782612f88565b91506138f283612f88565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561392b5761392a6138ad565b5b828202905092915050565b7f45746865722076616c75652073656e74206973206e6f7420636f727265637400600082015250565b600061396c601f83613082565b915061397782613936565b602082019050919050565b6000602082019050818103600083015261399b8161395f565b9050919050565b600081905092915050565b60006139b882613077565b6139c281856139a2565b93506139d2818560208601613093565b80840191505092915050565b60006139ea82856139ad565b91506139f682846139ad565b91508190509392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613a3c82612f88565b9150613a4783612f88565b925082613a5757613a56613a02565b5b828204905092915050565b7f57686974656c6973742073616c65206973206e6f742061637469766500000000600082015250565b6000613a98601c83613082565b9150613aa382613a62565b602082019050919050565b60006020820190508181036000830152613ac781613a8b565b9050919050565b7f45746865722076616c756520696e636f72726563740000000000000000000000600082015250565b6000613b04601583613082565b9150613b0f82613ace565b602082019050919050565b60006020820190508181036000830152613b3381613af7565b9050919050565b60008160601b9050919050565b6000613b5282613b3a565b9050919050565b6000613b6482613b47565b9050919050565b613b7c613b7782612f1d565b613b59565b82525050565b6000613b8e8284613b6b565b60148201915081905092915050565b7f496e636f7272656374204d65726b6c652050726f6f6600000000000000000000600082015250565b6000613bd3601683613082565b9150613bde82613b9d565b602082019050919050565b60006020820190508181036000830152613c0281613bc6565b9050919050565b6000613c1482612f88565b9150613c1f83612f88565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613c5457613c536138ad565b5b828201905092915050565b7f596f752063616e2774206d696e742074686174206d616e790000000000000000600082015250565b6000613c95601883613082565b9150613ca082613c5f565b602082019050919050565b60006020820190508181036000830152613cc481613c88565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613d27602683613082565b9150613d3282613ccb565b604082019050919050565b60006020820190508181036000830152613d5681613d1a565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613d93602083613082565b9150613d9e82613d5d565b602082019050919050565b60006020820190508181036000830152613dc281613d86565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000613df082613dc9565b613dfa8185613dd4565b9350613e0a818560208601613093565b613e13816130c6565b840191505092915050565b6000608082019050613e33600083018761318b565b613e40602083018661318b565b613e4d6040830185612f92565b8181036060830152613e5f8184613de5565b905095945050505050565b600081519050613e7981612fe8565b92915050565b600060208284031215613e9557613e94612ef3565b5b6000613ea384828501613e6a565b91505092915050565b6000613eb782612f88565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613eea57613ee96138ad565b5b600182019050919050565b6000613f0082612f88565b9150613f0b83612f88565b925082821015613f1e57613f1d6138ad565b5b828203905092915050565b6000613f3482612f88565b9150613f3f83612f88565b925082613f4f57613f4e613a02565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b613fa4613f9f82613248565b613f89565b82525050565b6000613fb68285613f93565b602082019150613fc68284613f93565b602082019150819050939250505056fea264697066735822122051604abac4647200417737fd767d89f2fa273291883517e53c126cbd43dfacf664736f6c63430008090033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
6ee6dc0c8ffddca9f889fb352fd6f145e5d453a2908ad19611a8d40a359c9bf0
-----Decoded View---------------
Arg [0] : merkleRoot_ (bytes32): 0x6ee6dc0c8ffddca9f889fb352fd6f145e5d453a2908ad19611a8d40a359c9bf0
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 6ee6dc0c8ffddca9f889fb352fd6f145e5d453a2908ad19611a8d40a359c9bf0
Deployed Bytecode Sourcemap
48259:5406:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48427:49;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25013:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28126:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29322:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52713:444;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48689:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48524:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24262:303;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29978:170;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50086:187;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48339:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49865:89;;;;;;;;;;;;;:::i;:::-;;30219:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48612:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49751:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48574:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27934:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48648:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25382:206;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45200:103;;;;;;;;;;;;;:::i;:::-;;48734:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53556:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44552:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51143:484;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28295:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53165:383;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51635:114;;;;;;;;;;;;;:::i;:::-;;48373:47;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30475:369;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52467:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28470:318;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49962:116;;;;;;;;;;;;;:::i;:::-;;51757:702;;;;;;;;;;;;;:::i;:::-;;52588:117;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29747:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50281:854;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48485:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45458:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48427:49;;;;;;;;;;;;;;;;;:::o;25013:305::-;25115:4;25167:25;25152:40;;;:11;:40;;;;:105;;;;25224:33;25209:48;;;:11;:48;;;;25152:105;:158;;;;25274:36;25298:11;25274:23;:36::i;:::-;25152:158;25132:178;;25013:305;;;:::o;28126:100::-;28180:13;28213:5;28206:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28126:100;:::o;29322:204::-;29390:7;29415:16;29423:7;29415;:16::i;:::-;29410:64;;29440:34;;;;;;;;;;;;;;29410:64;29494:15;:24;29510:7;29494:24;;;;;;;;;;;;;;;;;;;;;29487:31;;29322:204;;;:::o;52713:444::-;52786:13;52802:24;52818:7;52802:15;:24::i;:::-;52786:40;;52847:5;52841:11;;:2;:11;;;52837:48;;;52861:24;;;;;;;;;;;;;;52837:48;52918:5;52902:21;;:12;:10;:12::i;:::-;:21;;;;:63;;;;;52928:37;52945:5;52952:12;:10;:12::i;:::-;52928:16;:37::i;:::-;52927:38;52902:63;52898:138;;;52989:35;;;;;;;;;;;;;;52898:138;53055:15;:19;53071:2;53055:19;;;;;;;;;;;;;;;;;;;;;;;;;53054:20;53046:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;53121:28;53130:2;53134:7;53143:5;53121:8;:28::i;:::-;52775:382;52713:444;;:::o;48689:36::-;;;;:::o;48524:41::-;;;;;;;;;;;;;:::o;24262:303::-;24306:7;24531:15;:13;:15::i;:::-;24516:12;;24500:13;;:28;:46;24493:53;;24262:303;:::o;29978:170::-;30112:28;30122:4;30128:2;30132:7;30112:9;:28::i;:::-;29978:170;;;:::o;50086:187::-;44438:13;:11;:13::i;:::-;50165:37:::1;50175:10;50187:14;50165:9;:37::i;:::-;50238:9;;50221:13;:11;:13::i;:::-;:26;;50213:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;50086:187:::0;:::o;48339:25::-;;;;:::o;49865:89::-;44438:13;:11;:13::i;:::-;49934:12:::1;;;;;;;;;;;49933:13;49918:12;;:28;;;;;;;;;;;;;;;;;;49865:89::o:0;30219:185::-;30357:39;30374:4;30380:2;30384:7;30357:39;;;;;;;;;;;;:16;:39::i;:::-;30219:185;;;:::o;48612:29::-;;;;:::o;49751:106::-;44438:13;:11;:13::i;:::-;49842:7:::1;;49826:13;:23;;;;;;;:::i;:::-;;49751:106:::0;;:::o;48574:31::-;;;;:::o;27934:125::-;27998:7;28025:21;28038:7;28025:12;:21::i;:::-;:26;;;28018:33;;27934:125;;;:::o;48648:34::-;;;;:::o;25382:206::-;25446:7;25487:1;25470:19;;:5;:19;;;25466:60;;;25498:28;;;;;;;;;;;;;;25466:60;25552:12;:19;25565:5;25552:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;25544:36;;25537:43;;25382:206;;;:::o;45200:103::-;44438:13;:11;:13::i;:::-;45265:30:::1;45292:1;45265:18;:30::i;:::-;45200:103::o:0;48734:34::-;;;;:::o;53556:106::-;44438:13;:11;:13::i;:::-;53643:11:::1;53630:10;:24;;;;53556:106:::0;:::o;44552:87::-;44598:7;44625:6;;;;;;;;;;;44618:13;;44552:87;:::o;51143:484::-;51218:12;;;;;;;;;;;51210:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;51304:10;;51286:14;:28;;51264:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;51436:9;51418:14;51407:8;;:25;;;;:::i;:::-;:38;;51385:119;;;;;;;;;;;;:::i;:::-;;;;;;;;;51517:37;51527:10;51539:14;51517:9;:37::i;:::-;51592:9;;51575:13;:11;:13::i;:::-;:26;;51567:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;51143:484;:::o;28295:104::-;28351:13;28384:7;28377:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28295:104;:::o;53165:383::-;53284:15;:25;53300:8;53284:25;;;;;;;;;;;;;;;;;;;;;;;;;53283:26;53275:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53372:12;:10;:12::i;:::-;53360:24;;:8;:24;;;53356:54;;;53393:17;;;;;;;;;;;;;;53356:54;53468:8;53423:18;:32;53442:12;:10;:12::i;:::-;53423:32;;;;;;;;;;;;;;;:42;53456:8;53423:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;53521:8;53492:48;;53507:12;:10;:12::i;:::-;53492:48;;;53531:8;53492:48;;;;;;:::i;:::-;;;;;;;;53165:383;;:::o;51635:114::-;44438:13;:11;:13::i;:::-;51698:10:::1;51690:28;;:51;51719:21;51690:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;51635:114::o:0;48373:47::-;;;;;;;;;;;;;;;;;;;;;;:::o;30475:369::-;30642:28;30652:4;30658:2;30662:7;30642:9;:28::i;:::-;30685:15;:2;:13;;;:15::i;:::-;:76;;;;;30705:56;30736:4;30742:2;30746:7;30755:5;30705:30;:56::i;:::-;30704:57;30685:76;30681:156;;;30785:40;;;;;;;;;;;;;;30681:156;30475:369;;;;:::o;52467:113::-;44438:13;:11;:13::i;:::-;52568:4:::1;52541:15;:24;52557:7;52541:24;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;52467:113:::0;:::o;28470:318::-;28543:13;28574:16;28582:7;28574;:16::i;:::-;28569:59;;28599:29;;;;;;;;;;;;;;28569:59;28641:21;28665:10;:8;:10::i;:::-;28641:34;;28718:1;28699:7;28693:21;:26;;:87;;;;;;;;;;;;;;;;;28746:7;28755:18;:7;:16;:18::i;:::-;28729:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;28693:87;28686:94;;;28470:318;;;:::o;49962:116::-;44438:13;:11;:13::i;:::-;50049:21:::1;;;;;;;;;;;50048:22;50024:21;;:46;;;;;;;;;;;;;;;;;;49962:116::o:0;51757:702::-;44438:13;:11;:13::i;:::-;51808:14:::1;51856:3;51850:2;51826:21;:26;;;;:::i;:::-;51825:34;;;;:::i;:::-;51808:51;;51872:11;51904:5;51896:4;51887:6;:13;;;;:::i;:::-;51886:23;;;;:::i;:::-;51872:37;;51920:11;51952:5;51944:4;51935:6;:13;;;;:::i;:::-;51934:23;;;;:::i;:::-;51920:37;;51968:12;52001:5;51993:4;51984:6;:13;;;;:::i;:::-;51983:23;;;;:::i;:::-;51968:38;;52017:12;52050:5;52042:4;52033:6;:13;;;;:::i;:::-;52032:23;;;;:::i;:::-;52017:38;;52066:13;52100:5;52092:4;52083:6;:13;;;;:::i;:::-;52082:23;;;;:::i;:::-;52066:39;;52116:11;52148:5;52140:4;52131:6;:13;;;;:::i;:::-;52130:23;;;;:::i;:::-;52116:37;;52182:9;;;;;;;;;;;52174:23;;:28;52198:3;52174:28;;;;;;;;;;;;;;;;;;;;;;;52166:37;;;::::0;::::1;;52230:9;;;;;;;;;;;52222:23;;:28;52246:3;52222:28;;;;;;;;;;;;;;;;;;;;;;;52214:37;;;::::0;::::1;;52278:10;;;;;;;;;;;52270:24;;:30;52295:4;52270:30;;;;;;;;;;;;;;;;;;;;;;;52262:39;;;::::0;::::1;;52328:9;;;;;;;;;;;52320:23;;:28;52344:3;52320:28;;;;;;;;;;;;;;;;;;;;;;;52312:37;;;::::0;::::1;;52376:10;;;;;;;;;;;52368:24;;:30;52393:4;52368:30;;;;;;;;;;;;;;;;;;;;;;;52360:39;;;::::0;::::1;;52426:11;;;;;;;;;;;52418:25;;:32;52444:5;52418:32;;;;;;;;;;;;;;;;;;;;;;;52410:41;;;::::0;::::1;;51797:662;;;;;;;51757:702::o:0;52588:117::-;44438:13;:11;:13::i;:::-;52692:5:::1;52665:15;:24;52681:7;52665:24;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;52588:117:::0;:::o;29747:164::-;29844:4;29868:18;:25;29887:5;29868:25;;;;;;;;;;;;;;;:35;29894:8;29868:35;;;;;;;;;;;;;;;;;;;;;;;;;29861:42;;29747:164;;;;:::o;50281:854::-;50423:21;;;;;;;;;;;50415:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;50539:9;50521:14;50510:8;;:25;;;;:::i;:::-;:38;;50488:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;50608:12;50650:10;50633:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;50623:39;;;;;;50608:54;;50749:4;50695:58;;:50;50714:12;;50695:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50728:10;;50740:4;50695:18;:50::i;:::-;:58;;;50673:130;;;;;;;;;;;;:::i;:::-;;;;;;;;;50816:19;50867:14;50838;:26;50853:10;50838:26;;;;;;;;;;;;;;;;:43;;;;:::i;:::-;50816:65;;50915:15;;50900:11;:30;;50892:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;51001:11;50972:14;:26;50987:10;50972:26;;;;;;;;;;;;;;;:40;;;;51025:37;51035:10;51047:14;51025:9;:37::i;:::-;51100:9;;51083:13;:11;:13::i;:::-;:26;;51075:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;50404:731;;50281:854;;;:::o;48485:32::-;;;;;;;;;;;;;:::o;45458:201::-;44438:13;:11;:13::i;:::-;45567:1:::1;45547:22;;:8;:22;;;;45539:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;45623:28;45642:8;45623:18;:28::i;:::-;45458:201:::0;:::o;20587:157::-;20672:4;20711:25;20696:40;;;:11;:40;;;;20689:47;;20587:157;;;:::o;31099:174::-;31156:4;31199:7;31180:15;:13;:15::i;:::-;:26;;:53;;;;;31220:13;;31210:7;:23;31180:53;:85;;;;;31238:11;:20;31250:7;31238:20;;;;;;;;;;;:27;;;;;;;;;;;;31237:28;31180:85;31173:92;;31099:174;;;:::o;16997:98::-;17050:7;17077:10;17070:17;;16997:98;:::o;40324:197::-;40467:2;40440:15;:24;40456:7;40440:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;40505:7;40501:2;40485:28;;40494:5;40485:28;;;;;;;;;;;;40324:197;;;:::o;24036:92::-;24092:7;24036:92;:::o;35272:2130::-;35387:35;35425:21;35438:7;35425:12;:21::i;:::-;35387:59;;35485:4;35463:26;;:13;:18;;;:26;;;35459:67;;35498:28;;;;;;;;;;;;;;35459:67;35539:22;35581:4;35565:20;;:12;:10;:12::i;:::-;:20;;;:73;;;;35602:36;35619:4;35625:12;:10;:12::i;:::-;35602:16;:36::i;:::-;35565:73;:126;;;;35679:12;:10;:12::i;:::-;35655:36;;:20;35667:7;35655:11;:20::i;:::-;:36;;;35565:126;35539:153;;35710:17;35705:66;;35736:35;;;;;;;;;;;;;;35705:66;35800:1;35786:16;;:2;:16;;;35782:52;;;35811:23;;;;;;;;;;;;;;35782:52;35847:43;35869:4;35875:2;35879:7;35888:1;35847:21;:43::i;:::-;35955:35;35972:1;35976:7;35985:4;35955:8;:35::i;:::-;36316:1;36286:12;:18;36299:4;36286:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36360:1;36332:12;:16;36345:2;36332:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36378:31;36412:11;:20;36424:7;36412:20;;;;;;;;;;;36378:54;;36463:2;36447:8;:13;;;:18;;;;;;;;;;;;;;;;;;36513:15;36480:8;:23;;;:49;;;;;;;;;;;;;;;;;;36781:19;36813:1;36803:7;:11;36781:33;;36829:31;36863:11;:24;36875:11;36863:24;;;;;;;;;;;36829:58;;36931:1;36906:27;;:8;:13;;;;;;;;;;;;:27;;;36902:384;;;37116:13;;37101:11;:28;37097:174;;37170:4;37154:8;:13;;;:20;;;;;;;;;;;;;;;;;;37223:13;:28;;;37197:8;:23;;;:54;;;;;;;;;;;;;;;;;;37097:174;36902:384;36261:1036;;;37333:7;37329:2;37314:27;;37323:4;37314:27;;;;;;;;;;;;37352:42;37373:4;37379:2;37383:7;37392:1;37352:20;:42::i;:::-;35376:2026;;35272:2130;;;:::o;44717:132::-;44792:12;:10;:12::i;:::-;44781:23;;:7;:5;:7::i;:::-;:23;;;44773:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44717:132::o;31357:104::-;31426:27;31436:2;31440:8;31426:27;;;;;;;;;;;;:9;:27::i;:::-;31357:104;;:::o;26763:1109::-;26825:21;;:::i;:::-;26859:12;26874:7;26859:22;;26942:4;26923:15;:13;:15::i;:::-;:23;;:47;;;;;26957:13;;26950:4;:20;26923:47;26919:886;;;26991:31;27025:11;:17;27037:4;27025:17;;;;;;;;;;;26991:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27066:9;:16;;;27061:729;;27137:1;27111:28;;:9;:14;;;:28;;;27107:101;;27175:9;27168:16;;;;;;27107:101;27510:261;27517:4;27510:261;;;27550:6;;;;;;;;27595:11;:17;27607:4;27595:17;;;;;;;;;;;27583:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27669:1;27643:28;;:9;:14;;;:28;;;27639:109;;27711:9;27704:16;;;;;;27639:109;27510:261;;;27061:729;26972:833;26919:886;27833:31;;;;;;;;;;;;;;26763:1109;;;;:::o;45819:191::-;45893:16;45912:6;;;;;;;;;;;45893:25;;45938:8;45929:6;;:17;;;;;;;;;;;;;;;;;;45993:8;45962:40;;45983:8;45962:40;;;;;;;;;;;;45882:128;45819:191;:::o;8990:326::-;9050:4;9307:1;9285:7;:19;;;:23;9278:30;;8990:326;;;:::o;41013:667::-;41176:4;41213:2;41197:36;;;41234:12;:10;:12::i;:::-;41248:4;41254:7;41263:5;41197:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;41193:480;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41448:1;41431:6;:13;:18;41427:235;;;41477:40;;;;;;;;;;;;;;41427:235;41620:6;41614:13;41605:6;41601:2;41597:15;41590:38;41193:480;41326:45;;;41316:55;;;:6;:55;;;;41309:62;;;41013:667;;;;;;:::o;49629:114::-;49689:13;49722;49715:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49629:114;:::o;17649:723::-;17705:13;17935:1;17926:5;:10;17922:53;;;17953:10;;;;;;;;;;;;;;;;;;;;;17922:53;17985:12;18000:5;17985:20;;18016:14;18041:78;18056:1;18048:4;:9;18041:78;;18074:8;;;;;:::i;:::-;;;;18105:2;18097:10;;;;;:::i;:::-;;;18041:78;;;18129:19;18161:6;18151:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18129:39;;18179:154;18195:1;18186:5;:10;18179:154;;18223:1;18213:11;;;;;:::i;:::-;;;18290:2;18282:5;:10;;;;:::i;:::-;18269:2;:24;;;;:::i;:::-;18256:39;;18239:6;18246;18239:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;18319:2;18310:11;;;;;:::i;:::-;;;18179:154;;;18357:6;18343:21;;;;;17649:723;;;;:::o;46893:190::-;47018:4;47071;47042:25;47055:5;47062:4;47042:12;:25::i;:::-;:33;47035:40;;46893:190;;;;;:::o;42328:159::-;;;;;:::o;43146:158::-;;;;;:::o;31834:1751::-;31957:20;31980:13;;31957:36;;32022:1;32008:16;;:2;:16;;;32004:48;;;32033:19;;;;;;;;;;;;;;32004:48;32079:1;32067:8;:13;32063:44;;;32089:18;;;;;;;;;;;;;;32063:44;32120:61;32150:1;32154:2;32158:12;32172:8;32120:21;:61::i;:::-;32493:8;32458:12;:16;32471:2;32458:16;;;;;;;;;;;;;;;:24;;;:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32557:8;32517:12;:16;32530:2;32517:16;;;;;;;;;;;;;;;:29;;;:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32616:2;32583:11;:25;32595:12;32583:25;;;;;;;;;;;:30;;;:35;;;;;;;;;;;;;;;;;;32683:15;32633:11;:25;32645:12;32633:25;;;;;;;;;;;:40;;;:66;;;;;;;;;;;;;;;;;;32716:20;32739:12;32716:35;;32766:11;32795:8;32780:12;:23;32766:37;;32824:15;:2;:13;;;:15::i;:::-;32820:633;;;32860:314;32916:12;32912:2;32891:38;;32908:1;32891:38;;;;;;;;;;;;32957:69;32996:1;33000:2;33004:14;;;;;;33020:5;32957:30;:69::i;:::-;32952:174;;33062:40;;;;;;;;;;;;;;32952:174;33169:3;33153:12;:19;;32860:314;;33255:12;33238:13;;:29;33234:43;;33269:8;;;33234:43;32820:633;;;33318:120;33374:14;;;;;;33370:2;33349:40;;33366:1;33349:40;;;;;;;;;;;;33433:3;33417:12;:19;;33318:120;;32820:633;33483:12;33467:13;:28;;;;32433:1074;;33517:60;33546:1;33550:2;33554:12;33568:8;33517:20;:60::i;:::-;31946:1639;31834:1751;;;:::o;47445:701::-;47528:7;47548:20;47571:4;47548:27;;47591:9;47586:523;47610:5;:12;47606:1;:16;47586:523;;;47644:20;47667:5;47673:1;47667:8;;;;;;;;:::i;:::-;;;;;;;;47644:31;;47710:12;47694;:28;47690:408;;47864:12;47878;47847:44;;;;;;;;;:::i;:::-;;;;;;;;;;;;;47837:55;;;;;;47822:70;;47690:408;;;48054:12;48068;48037:44;;;;;;;;;:::i;:::-;;;;;;;;;;;;;48027:55;;;;;;48012:70;;47690:408;47629:480;47624:3;;;;;:::i;:::-;;;;47586:523;;;;48126:12;48119:19;;;47445:701;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:329::-;900:6;949:2;937:9;928:7;924:23;920:32;917:119;;;955:79;;:::i;:::-;917:119;1075:1;1100:53;1145:7;1136:6;1125:9;1121:22;1100:53;:::i;:::-;1090:63;;1046:117;841:329;;;;:::o;1176:77::-;1213:7;1242:5;1231:16;;1176:77;;;:::o;1259:118::-;1346:24;1364:5;1346:24;:::i;:::-;1341:3;1334:37;1259:118;;:::o;1383:222::-;1476:4;1514:2;1503:9;1499:18;1491:26;;1527:71;1595:1;1584:9;1580:17;1571:6;1527:71;:::i;:::-;1383:222;;;;:::o;1611:149::-;1647:7;1687:66;1680:5;1676:78;1665:89;;1611:149;;;:::o;1766:120::-;1838:23;1855:5;1838:23;:::i;:::-;1831:5;1828:34;1818:62;;1876:1;1873;1866:12;1818:62;1766:120;:::o;1892:137::-;1937:5;1975:6;1962:20;1953:29;;1991:32;2017:5;1991:32;:::i;:::-;1892:137;;;;:::o;2035:327::-;2093:6;2142:2;2130:9;2121:7;2117:23;2113:32;2110:119;;;2148:79;;:::i;:::-;2110:119;2268:1;2293:52;2337:7;2328:6;2317:9;2313:22;2293:52;:::i;:::-;2283:62;;2239:116;2035:327;;;;:::o;2368:90::-;2402:7;2445:5;2438:13;2431:21;2420:32;;2368:90;;;:::o;2464:109::-;2545:21;2560:5;2545:21;:::i;:::-;2540:3;2533:34;2464:109;;:::o;2579:210::-;2666:4;2704:2;2693:9;2689:18;2681:26;;2717:65;2779:1;2768:9;2764:17;2755:6;2717:65;:::i;:::-;2579:210;;;;:::o;2795:99::-;2847:6;2881:5;2875:12;2865:22;;2795:99;;;:::o;2900:169::-;2984:11;3018:6;3013:3;3006:19;3058:4;3053:3;3049:14;3034:29;;2900:169;;;;:::o;3075:307::-;3143:1;3153:113;3167:6;3164:1;3161:13;3153:113;;;3252:1;3247:3;3243:11;3237:18;3233:1;3228:3;3224:11;3217:39;3189:2;3186:1;3182:10;3177:15;;3153:113;;;3284:6;3281:1;3278:13;3275:101;;;3364:1;3355:6;3350:3;3346:16;3339:27;3275:101;3124:258;3075:307;;;:::o;3388:102::-;3429:6;3480:2;3476:7;3471:2;3464:5;3460:14;3456:28;3446:38;;3388:102;;;:::o;3496:364::-;3584:3;3612:39;3645:5;3612:39;:::i;:::-;3667:71;3731:6;3726:3;3667:71;:::i;:::-;3660:78;;3747:52;3792:6;3787:3;3780:4;3773:5;3769:16;3747:52;:::i;:::-;3824:29;3846:6;3824:29;:::i;:::-;3819:3;3815:39;3808:46;;3588:272;3496:364;;;;:::o;3866:313::-;3979:4;4017:2;4006:9;4002:18;3994:26;;4066:9;4060:4;4056:20;4052:1;4041:9;4037:17;4030:47;4094:78;4167:4;4158:6;4094:78;:::i;:::-;4086:86;;3866:313;;;;:::o;4185:122::-;4258:24;4276:5;4258:24;:::i;:::-;4251:5;4248:35;4238:63;;4297:1;4294;4287:12;4238:63;4185:122;:::o;4313:139::-;4359:5;4397:6;4384:20;4375:29;;4413:33;4440:5;4413:33;:::i;:::-;4313:139;;;;:::o;4458:329::-;4517:6;4566:2;4554:9;4545:7;4541:23;4537:32;4534:119;;;4572:79;;:::i;:::-;4534:119;4692:1;4717:53;4762:7;4753:6;4742:9;4738:22;4717:53;:::i;:::-;4707:63;;4663:117;4458:329;;;;:::o;4793:118::-;4880:24;4898:5;4880:24;:::i;:::-;4875:3;4868:37;4793:118;;:::o;4917:222::-;5010:4;5048:2;5037:9;5033:18;5025:26;;5061:71;5129:1;5118:9;5114:17;5105:6;5061:71;:::i;:::-;4917:222;;;;:::o;5145:474::-;5213:6;5221;5270:2;5258:9;5249:7;5245:23;5241:32;5238:119;;;5276:79;;:::i;:::-;5238:119;5396:1;5421:53;5466:7;5457:6;5446:9;5442:22;5421:53;:::i;:::-;5411:63;;5367:117;5523:2;5549:53;5594:7;5585:6;5574:9;5570:22;5549:53;:::i;:::-;5539:63;;5494:118;5145:474;;;;;:::o;5625:619::-;5702:6;5710;5718;5767:2;5755:9;5746:7;5742:23;5738:32;5735:119;;;5773:79;;:::i;:::-;5735:119;5893:1;5918:53;5963:7;5954:6;5943:9;5939:22;5918:53;:::i;:::-;5908:63;;5864:117;6020:2;6046:53;6091:7;6082:6;6071:9;6067:22;6046:53;:::i;:::-;6036:63;;5991:118;6148:2;6174:53;6219:7;6210:6;6199:9;6195:22;6174:53;:::i;:::-;6164:63;;6119:118;5625:619;;;;;:::o;6250:77::-;6287:7;6316:5;6305:16;;6250:77;;;:::o;6333:118::-;6420:24;6438:5;6420:24;:::i;:::-;6415:3;6408:37;6333:118;;:::o;6457:222::-;6550:4;6588:2;6577:9;6573:18;6565:26;;6601:71;6669:1;6658:9;6654:17;6645:6;6601:71;:::i;:::-;6457:222;;;;:::o;6685:117::-;6794:1;6791;6784:12;6808:117;6917:1;6914;6907:12;6931:117;7040:1;7037;7030:12;7068:553;7126:8;7136:6;7186:3;7179:4;7171:6;7167:17;7163:27;7153:122;;7194:79;;:::i;:::-;7153:122;7307:6;7294:20;7284:30;;7337:18;7329:6;7326:30;7323:117;;;7359:79;;:::i;:::-;7323:117;7473:4;7465:6;7461:17;7449:29;;7527:3;7519:4;7511:6;7507:17;7497:8;7493:32;7490:41;7487:128;;;7534:79;;:::i;:::-;7487:128;7068:553;;;;;:::o;7627:529::-;7698:6;7706;7755:2;7743:9;7734:7;7730:23;7726:32;7723:119;;;7761:79;;:::i;:::-;7723:119;7909:1;7898:9;7894:17;7881:31;7939:18;7931:6;7928:30;7925:117;;;7961:79;;:::i;:::-;7925:117;8074:65;8131:7;8122:6;8111:9;8107:22;8074:65;:::i;:::-;8056:83;;;;7852:297;7627:529;;;;;:::o;8162:122::-;8235:24;8253:5;8235:24;:::i;:::-;8228:5;8225:35;8215:63;;8274:1;8271;8264:12;8215:63;8162:122;:::o;8290:139::-;8336:5;8374:6;8361:20;8352:29;;8390:33;8417:5;8390:33;:::i;:::-;8290:139;;;;:::o;8435:329::-;8494:6;8543:2;8531:9;8522:7;8518:23;8514:32;8511:119;;;8549:79;;:::i;:::-;8511:119;8669:1;8694:53;8739:7;8730:6;8719:9;8715:22;8694:53;:::i;:::-;8684:63;;8640:117;8435:329;;;;:::o;8770:116::-;8840:21;8855:5;8840:21;:::i;:::-;8833:5;8830:32;8820:60;;8876:1;8873;8866:12;8820:60;8770:116;:::o;8892:133::-;8935:5;8973:6;8960:20;8951:29;;8989:30;9013:5;8989:30;:::i;:::-;8892:133;;;;:::o;9031:468::-;9096:6;9104;9153:2;9141:9;9132:7;9128:23;9124:32;9121:119;;;9159:79;;:::i;:::-;9121:119;9279:1;9304:53;9349:7;9340:6;9329:9;9325:22;9304:53;:::i;:::-;9294:63;;9250:117;9406:2;9432:50;9474:7;9465:6;9454:9;9450:22;9432:50;:::i;:::-;9422:60;;9377:115;9031:468;;;;;:::o;9505:117::-;9614:1;9611;9604:12;9628:180;9676:77;9673:1;9666:88;9773:4;9770:1;9763:15;9797:4;9794:1;9787:15;9814:281;9897:27;9919:4;9897:27;:::i;:::-;9889:6;9885:40;10027:6;10015:10;10012:22;9991:18;9979:10;9976:34;9973:62;9970:88;;;10038:18;;:::i;:::-;9970:88;10078:10;10074:2;10067:22;9857:238;9814:281;;:::o;10101:129::-;10135:6;10162:20;;:::i;:::-;10152:30;;10191:33;10219:4;10211:6;10191:33;:::i;:::-;10101:129;;;:::o;10236:307::-;10297:4;10387:18;10379:6;10376:30;10373:56;;;10409:18;;:::i;:::-;10373:56;10447:29;10469:6;10447:29;:::i;:::-;10439:37;;10531:4;10525;10521:15;10513:23;;10236:307;;;:::o;10549:154::-;10633:6;10628:3;10623;10610:30;10695:1;10686:6;10681:3;10677:16;10670:27;10549:154;;;:::o;10709:410::-;10786:5;10811:65;10827:48;10868:6;10827:48;:::i;:::-;10811:65;:::i;:::-;10802:74;;10899:6;10892:5;10885:21;10937:4;10930:5;10926:16;10975:3;10966:6;10961:3;10957:16;10954:25;10951:112;;;10982:79;;:::i;:::-;10951:112;11072:41;11106:6;11101:3;11096;11072:41;:::i;:::-;10792:327;10709:410;;;;;:::o;11138:338::-;11193:5;11242:3;11235:4;11227:6;11223:17;11219:27;11209:122;;11250:79;;:::i;:::-;11209:122;11367:6;11354:20;11392:78;11466:3;11458:6;11451:4;11443:6;11439:17;11392:78;:::i;:::-;11383:87;;11199:277;11138:338;;;;:::o;11482:943::-;11577:6;11585;11593;11601;11650:3;11638:9;11629:7;11625:23;11621:33;11618:120;;;11657:79;;:::i;:::-;11618:120;11777:1;11802:53;11847:7;11838:6;11827:9;11823:22;11802:53;:::i;:::-;11792:63;;11748:117;11904:2;11930:53;11975:7;11966:6;11955:9;11951:22;11930:53;:::i;:::-;11920:63;;11875:118;12032:2;12058:53;12103:7;12094:6;12083:9;12079:22;12058:53;:::i;:::-;12048:63;;12003:118;12188:2;12177:9;12173:18;12160:32;12219:18;12211:6;12208:30;12205:117;;;12241:79;;:::i;:::-;12205:117;12346:62;12400:7;12391:6;12380:9;12376:22;12346:62;:::i;:::-;12336:72;;12131:287;11482:943;;;;;;;:::o;12431:474::-;12499:6;12507;12556:2;12544:9;12535:7;12531:23;12527:32;12524:119;;;12562:79;;:::i;:::-;12524:119;12682:1;12707:53;12752:7;12743:6;12732:9;12728:22;12707:53;:::i;:::-;12697:63;;12653:117;12809:2;12835:53;12880:7;12871:6;12860:9;12856:22;12835:53;:::i;:::-;12825:63;;12780:118;12431:474;;;;;:::o;12928:568::-;13001:8;13011:6;13061:3;13054:4;13046:6;13042:17;13038:27;13028:122;;13069:79;;:::i;:::-;13028:122;13182:6;13169:20;13159:30;;13212:18;13204:6;13201:30;13198:117;;;13234:79;;:::i;:::-;13198:117;13348:4;13340:6;13336:17;13324:29;;13402:3;13394:4;13386:6;13382:17;13372:8;13368:32;13365:41;13362:128;;;13409:79;;:::i;:::-;13362:128;12928:568;;;;;:::o;13502:704::-;13597:6;13605;13613;13662:2;13650:9;13641:7;13637:23;13633:32;13630:119;;;13668:79;;:::i;:::-;13630:119;13816:1;13805:9;13801:17;13788:31;13846:18;13838:6;13835:30;13832:117;;;13868:79;;:::i;:::-;13832:117;13981:80;14053:7;14044:6;14033:9;14029:22;13981:80;:::i;:::-;13963:98;;;;13759:312;14110:2;14136:53;14181:7;14172:6;14161:9;14157:22;14136:53;:::i;:::-;14126:63;;14081:118;13502:704;;;;;:::o;14212:180::-;14260:77;14257:1;14250:88;14357:4;14354:1;14347:15;14381:4;14378:1;14371:15;14398:320;14442:6;14479:1;14473:4;14469:12;14459:22;;14526:1;14520:4;14516:12;14547:18;14537:81;;14603:4;14595:6;14591:17;14581:27;;14537:81;14665:2;14657:6;14654:14;14634:18;14631:38;14628:84;;;14684:18;;:::i;:::-;14628:84;14449:269;14398:320;;;:::o;14724:179::-;14864:31;14860:1;14852:6;14848:14;14841:55;14724:179;:::o;14909:366::-;15051:3;15072:67;15136:2;15131:3;15072:67;:::i;:::-;15065:74;;15148:93;15237:3;15148:93;:::i;:::-;15266:2;15261:3;15257:12;15250:19;;14909:366;;;:::o;15281:419::-;15447:4;15485:2;15474:9;15470:18;15462:26;;15534:9;15528:4;15524:20;15520:1;15509:9;15505:17;15498:47;15562:131;15688:4;15562:131;:::i;:::-;15554:139;;15281:419;;;:::o;15706:163::-;15846:15;15842:1;15834:6;15830:14;15823:39;15706:163;:::o;15875:366::-;16017:3;16038:67;16102:2;16097:3;16038:67;:::i;:::-;16031:74;;16114:93;16203:3;16114:93;:::i;:::-;16232:2;16227:3;16223:12;16216:19;;15875:366;;;:::o;16247:419::-;16413:4;16451:2;16440:9;16436:18;16428:26;;16500:9;16494:4;16490:20;16486:1;16475:9;16471:17;16464:47;16528:131;16654:4;16528:131;:::i;:::-;16520:139;;16247:419;;;:::o;16672:168::-;16812:20;16808:1;16800:6;16796:14;16789:44;16672:168;:::o;16846:366::-;16988:3;17009:67;17073:2;17068:3;17009:67;:::i;:::-;17002:74;;17085:93;17174:3;17085:93;:::i;:::-;17203:2;17198:3;17194:12;17187:19;;16846:366;;;:::o;17218:419::-;17384:4;17422:2;17411:9;17407:18;17399:26;;17471:9;17465:4;17461:20;17457:1;17446:9;17442:17;17435:47;17499:131;17625:4;17499:131;:::i;:::-;17491:139;;17218:419;;;:::o;17643:182::-;17783:34;17779:1;17771:6;17767:14;17760:58;17643:182;:::o;17831:366::-;17973:3;17994:67;18058:2;18053:3;17994:67;:::i;:::-;17987:74;;18070:93;18159:3;18070:93;:::i;:::-;18188:2;18183:3;18179:12;18172:19;;17831:366;;;:::o;18203:419::-;18369:4;18407:2;18396:9;18392:18;18384:26;;18456:9;18450:4;18446:20;18442:1;18431:9;18427:17;18420:47;18484:131;18610:4;18484:131;:::i;:::-;18476:139;;18203:419;;;:::o;18628:180::-;18676:77;18673:1;18666:88;18773:4;18770:1;18763:15;18797:4;18794:1;18787:15;18814:348;18854:7;18877:20;18895:1;18877:20;:::i;:::-;18872:25;;18911:20;18929:1;18911:20;:::i;:::-;18906:25;;19099:1;19031:66;19027:74;19024:1;19021:81;19016:1;19009:9;19002:17;18998:105;18995:131;;;19106:18;;:::i;:::-;18995:131;19154:1;19151;19147:9;19136:20;;18814:348;;;;:::o;19168:181::-;19308:33;19304:1;19296:6;19292:14;19285:57;19168:181;:::o;19355:366::-;19497:3;19518:67;19582:2;19577:3;19518:67;:::i;:::-;19511:74;;19594:93;19683:3;19594:93;:::i;:::-;19712:2;19707:3;19703:12;19696:19;;19355:366;;;:::o;19727:419::-;19893:4;19931:2;19920:9;19916:18;19908:26;;19980:9;19974:4;19970:20;19966:1;19955:9;19951:17;19944:47;20008:131;20134:4;20008:131;:::i;:::-;20000:139;;19727:419;;;:::o;20152:148::-;20254:11;20291:3;20276:18;;20152:148;;;;:::o;20306:377::-;20412:3;20440:39;20473:5;20440:39;:::i;:::-;20495:89;20577:6;20572:3;20495:89;:::i;:::-;20488:96;;20593:52;20638:6;20633:3;20626:4;20619:5;20615:16;20593:52;:::i;:::-;20670:6;20665:3;20661:16;20654:23;;20416:267;20306:377;;;;:::o;20689:435::-;20869:3;20891:95;20982:3;20973:6;20891:95;:::i;:::-;20884:102;;21003:95;21094:3;21085:6;21003:95;:::i;:::-;20996:102;;21115:3;21108:10;;20689:435;;;;;:::o;21130:180::-;21178:77;21175:1;21168:88;21275:4;21272:1;21265:15;21299:4;21296:1;21289:15;21316:185;21356:1;21373:20;21391:1;21373:20;:::i;:::-;21368:25;;21407:20;21425:1;21407:20;:::i;:::-;21402:25;;21446:1;21436:35;;21451:18;;:::i;:::-;21436:35;21493:1;21490;21486:9;21481:14;;21316:185;;;;:::o;21507:178::-;21647:30;21643:1;21635:6;21631:14;21624:54;21507:178;:::o;21691:366::-;21833:3;21854:67;21918:2;21913:3;21854:67;:::i;:::-;21847:74;;21930:93;22019:3;21930:93;:::i;:::-;22048:2;22043:3;22039:12;22032:19;;21691:366;;;:::o;22063:419::-;22229:4;22267:2;22256:9;22252:18;22244:26;;22316:9;22310:4;22306:20;22302:1;22291:9;22287:17;22280:47;22344:131;22470:4;22344:131;:::i;:::-;22336:139;;22063:419;;;:::o;22488:171::-;22628:23;22624:1;22616:6;22612:14;22605:47;22488:171;:::o;22665:366::-;22807:3;22828:67;22892:2;22887:3;22828:67;:::i;:::-;22821:74;;22904:93;22993:3;22904:93;:::i;:::-;23022:2;23017:3;23013:12;23006:19;;22665:366;;;:::o;23037:419::-;23203:4;23241:2;23230:9;23226:18;23218:26;;23290:9;23284:4;23280:20;23276:1;23265:9;23261:17;23254:47;23318:131;23444:4;23318:131;:::i;:::-;23310:139;;23037:419;;;:::o;23462:94::-;23495:8;23543:5;23539:2;23535:14;23514:35;;23462:94;;;:::o;23562:::-;23601:7;23630:20;23644:5;23630:20;:::i;:::-;23619:31;;23562:94;;;:::o;23662:100::-;23701:7;23730:26;23750:5;23730:26;:::i;:::-;23719:37;;23662:100;;;:::o;23768:157::-;23873:45;23893:24;23911:5;23893:24;:::i;:::-;23873:45;:::i;:::-;23868:3;23861:58;23768:157;;:::o;23931:256::-;24043:3;24058:75;24129:3;24120:6;24058:75;:::i;:::-;24158:2;24153:3;24149:12;24142:19;;24178:3;24171:10;;23931:256;;;;:::o;24193:172::-;24333:24;24329:1;24321:6;24317:14;24310:48;24193:172;:::o;24371:366::-;24513:3;24534:67;24598:2;24593:3;24534:67;:::i;:::-;24527:74;;24610:93;24699:3;24610:93;:::i;:::-;24728:2;24723:3;24719:12;24712:19;;24371:366;;;:::o;24743:419::-;24909:4;24947:2;24936:9;24932:18;24924:26;;24996:9;24990:4;24986:20;24982:1;24971:9;24967:17;24960:47;25024:131;25150:4;25024:131;:::i;:::-;25016:139;;24743:419;;;:::o;25168:305::-;25208:3;25227:20;25245:1;25227:20;:::i;:::-;25222:25;;25261:20;25279:1;25261:20;:::i;:::-;25256:25;;25415:1;25347:66;25343:74;25340:1;25337:81;25334:107;;;25421:18;;:::i;:::-;25334:107;25465:1;25462;25458:9;25451:16;;25168:305;;;;:::o;25479:174::-;25619:26;25615:1;25607:6;25603:14;25596:50;25479:174;:::o;25659:366::-;25801:3;25822:67;25886:2;25881:3;25822:67;:::i;:::-;25815:74;;25898:93;25987:3;25898:93;:::i;:::-;26016:2;26011:3;26007:12;26000:19;;25659:366;;;:::o;26031:419::-;26197:4;26235:2;26224:9;26220:18;26212:26;;26284:9;26278:4;26274:20;26270:1;26259:9;26255:17;26248:47;26312:131;26438:4;26312:131;:::i;:::-;26304:139;;26031:419;;;:::o;26456:225::-;26596:34;26592:1;26584:6;26580:14;26573:58;26665:8;26660:2;26652:6;26648:15;26641:33;26456:225;:::o;26687:366::-;26829:3;26850:67;26914:2;26909:3;26850:67;:::i;:::-;26843:74;;26926:93;27015:3;26926:93;:::i;:::-;27044:2;27039:3;27035:12;27028:19;;26687:366;;;:::o;27059:419::-;27225:4;27263:2;27252:9;27248:18;27240:26;;27312:9;27306:4;27302:20;27298:1;27287:9;27283:17;27276:47;27340:131;27466:4;27340:131;:::i;:::-;27332:139;;27059:419;;;:::o;27484:182::-;27624:34;27620:1;27612:6;27608:14;27601:58;27484:182;:::o;27672:366::-;27814:3;27835:67;27899:2;27894:3;27835:67;:::i;:::-;27828:74;;27911:93;28000:3;27911:93;:::i;:::-;28029:2;28024:3;28020:12;28013:19;;27672:366;;;:::o;28044:419::-;28210:4;28248:2;28237:9;28233:18;28225:26;;28297:9;28291:4;28287:20;28283:1;28272:9;28268:17;28261:47;28325:131;28451:4;28325:131;:::i;:::-;28317:139;;28044:419;;;:::o;28469:98::-;28520:6;28554:5;28548:12;28538:22;;28469:98;;;:::o;28573:168::-;28656:11;28690:6;28685:3;28678:19;28730:4;28725:3;28721:14;28706:29;;28573:168;;;;:::o;28747:360::-;28833:3;28861:38;28893:5;28861:38;:::i;:::-;28915:70;28978:6;28973:3;28915:70;:::i;:::-;28908:77;;28994:52;29039:6;29034:3;29027:4;29020:5;29016:16;28994:52;:::i;:::-;29071:29;29093:6;29071:29;:::i;:::-;29066:3;29062:39;29055:46;;28837:270;28747:360;;;;:::o;29113:640::-;29308:4;29346:3;29335:9;29331:19;29323:27;;29360:71;29428:1;29417:9;29413:17;29404:6;29360:71;:::i;:::-;29441:72;29509:2;29498:9;29494:18;29485:6;29441:72;:::i;:::-;29523;29591:2;29580:9;29576:18;29567:6;29523:72;:::i;:::-;29642:9;29636:4;29632:20;29627:2;29616:9;29612:18;29605:48;29670:76;29741:4;29732:6;29670:76;:::i;:::-;29662:84;;29113:640;;;;;;;:::o;29759:141::-;29815:5;29846:6;29840:13;29831:22;;29862:32;29888:5;29862:32;:::i;:::-;29759:141;;;;:::o;29906:349::-;29975:6;30024:2;30012:9;30003:7;29999:23;29995:32;29992:119;;;30030:79;;:::i;:::-;29992:119;30150:1;30175:63;30230:7;30221:6;30210:9;30206:22;30175:63;:::i;:::-;30165:73;;30121:127;29906:349;;;;:::o;30261:233::-;30300:3;30323:24;30341:5;30323:24;:::i;:::-;30314:33;;30369:66;30362:5;30359:77;30356:103;;;30439:18;;:::i;:::-;30356:103;30486:1;30479:5;30475:13;30468:20;;30261:233;;;:::o;30500:191::-;30540:4;30560:20;30578:1;30560:20;:::i;:::-;30555:25;;30594:20;30612:1;30594:20;:::i;:::-;30589:25;;30633:1;30630;30627:8;30624:34;;;30638:18;;:::i;:::-;30624:34;30683:1;30680;30676:9;30668:17;;30500:191;;;;:::o;30697:176::-;30729:1;30746:20;30764:1;30746:20;:::i;:::-;30741:25;;30780:20;30798:1;30780:20;:::i;:::-;30775:25;;30819:1;30809:35;;30824:18;;:::i;:::-;30809:35;30865:1;30862;30858:9;30853:14;;30697:176;;;;:::o;30879:180::-;30927:77;30924:1;30917:88;31024:4;31021:1;31014:15;31048:4;31045:1;31038:15;31065:79;31104:7;31133:5;31122:16;;31065:79;;;:::o;31150:157::-;31255:45;31275:24;31293:5;31275:24;:::i;:::-;31255:45;:::i;:::-;31250:3;31243:58;31150:157;;:::o;31313:397::-;31453:3;31468:75;31539:3;31530:6;31468:75;:::i;:::-;31568:2;31563:3;31559:12;31552:19;;31581:75;31652:3;31643:6;31581:75;:::i;:::-;31681:2;31676:3;31672:12;31665:19;;31701:3;31694:10;;31313:397;;;;;:::o
Swarm Source
ipfs://51604abac4647200417737fd767d89f2fa273291883517e53c126cbd43dfacf6
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.