Token Fingerstaches
Overview ERC-721
Total Supply:
997 Finger
Holders:
157 addresses
Transfers:
-
Contract:
[ Download CSV Export ]
[ Download CSV Export ]
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Fingerstaches
Compiler Version
v0.8.11+commit.d7f03943
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-11-20 */ // DEVLAMB // // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts (last updated v4.7.0) (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; uint8 private constant _ADDRESS_LENGTH = 20; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } /** * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation. */ function toHexString(address addr) internal pure returns (string memory) { return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH); } } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly /// @solidity memory-safe-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol // OpenZeppelin Contracts (last updated v4.7.0) (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/extensions/IERC721Enumerable.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: @openzeppelin/contracts/token/ERC721/ERC721.sol // OpenZeppelin Contracts (last updated v4.7.0) (token/ERC721/ERC721.sol) pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: address zero is not a valid owner"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: invalid token ID"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { _requireMinted(tokenId); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overridden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not token owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { _requireMinted(tokenId); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: caller is not token owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: caller is not token owner nor approved"); _safeTransfer(from, to, tokenId, data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { address owner = ERC721.ownerOf(tokenId); return (spender == owner || isApprovedForAll(owner, spender) || getApproved(tokenId) == spender); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); _afterTokenTransfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); _afterTokenTransfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer from incorrect owner"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); _afterTokenTransfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits an {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits an {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC721: approve to caller"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Reverts if the `tokenId` has not been minted yet. */ function _requireMinted(uint256 tokenId) internal view virtual { require(_exists(tokenId), "ERC721: invalid token ID"); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { /// @solidity memory-safe-assembly assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File: @openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/ERC721Enumerable.sol) pragma solidity ^0.8.0; /** * @dev This implements an optional extension of {ERC721} defined in the EIP that adds * enumerability of all the token ids in the contract as well as all token ids owned by each * account. */ abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => mapping(uint256 => uint256)) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds"); return _ownedTokens[owner][index]; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds"); return _allTokens[index]; } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` cannot be the zero address. * - `to` cannot be the zero address. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array delete _allTokensIndex[tokenId]; _allTokens.pop(); } } // File: contracts/BitFishes.sol pragma solidity >=0.7.0 <0.9.0; contract Fingerstaches is ERC721Enumerable, Ownable { using Strings for uint256; struct UserData { uint256 minted; } string baseURI; string public baseExtension = ".json"; uint256 public cost = 10 ether; uint256 public maxSupply = 1000; uint256 public maxPerTx = 10; bool public paused = true; uint256 private _scopeIndex = 0; // Clamping cache for random TokenID generation in the anti-sniping algo uint256 private immutable _scopeCap; // Size of initial randomized number pool & max generated value (zero indexed) mapping(uint256 => uint256) _swappedIDs; // TokenID cache for random TokenID generation in the anti-sniping algo uint256 private _preMinted = 10; // Numbers of tokens that need to be preminted mapping(address => UserData) private userData; // Mapping to save how many tokens each address mints uint256 public maxPerWallet = 200; // Max amount of tokenIDs allowed to be minted by single wallet bool public whitelistedOnly = true; mapping(address => uint256) public whiteListed; mapping (uint256 => string) private _tokenURIs; constructor( string memory _name, string memory _symbol, string memory _initBaseURI ) ERC721(_name, _symbol) { setBaseURI(_initBaseURI); _scopeCap = maxSupply - _preMinted; } // internal function _baseURI() internal view virtual override returns (string memory) { return baseURI; } function _genClampedNonce() internal virtual returns (uint256) { uint256 scope = _scopeCap - _scopeIndex; uint256 swap; uint256 result; uint256 i = randomNumber() % scope; //Setup the value to swap in for the selected number if (_swappedIDs[scope - 1] == 0) { swap = scope - 1; } else { swap = _swappedIDs[scope - 1]; } //Select a random number, swap it out with an unselected one then shorten the selection range by 1 if (_swappedIDs[i] == 0) { result = i; _swappedIDs[i] = swap; } else { result = _swappedIDs[i]; _swappedIDs[i] = swap; } _scopeIndex++; return result + _preMinted; } function randomNumber() internal view returns (uint256) { return uint256(keccak256(abi.encodePacked(block.difficulty, block.timestamp))); } // public function mint(uint256 _mintAmount) public payable { uint256 supply = totalSupply(); require(!paused); require(_mintAmount > 0); require(_mintAmount <= maxPerTx); require(supply + _mintAmount <= maxSupply); require(userData[msg.sender].minted + _mintAmount <= maxPerWallet, "You are trying to mint more NFTs than allowed for your wallet"); if(whitelistedOnly) require(whiteListed[msg.sender] >= 1,"Error: you are not whitelisted or amount is higher than limit"); if (msg.sender != owner()) { require(msg.value >= cost * _mintAmount); } for (uint256 i = 1; i <= _mintAmount; i++) { uint tokenId = _genClampedNonce() + 1; _safeMint(msg.sender, tokenId); userData[msg.sender].minted += 1; if(whitelistedOnly) whiteListed[msg.sender] -= 1; } } function walletOfOwner(address _owner) public view returns (uint256[] memory) { uint256 ownerTokenCount = balanceOf(_owner); uint256[] memory tokenIds = new uint256[](ownerTokenCount); for (uint256 i; i < ownerTokenCount; i++) { tokenIds[i] = tokenOfOwnerByIndex(_owner, i); } return tokenIds; } function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory _tokenURI = _tokenURIs[tokenId]; string memory currentBaseURI = _baseURI(); // If there is no base URI, return the token URI. if (bytes(currentBaseURI).length == 0) { return _tokenURI; } // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked). if (bytes(_tokenURI).length > 0) { return string(abi.encodePacked(_tokenURI)); } // If there is a baseURI but no tokenURI, concatenate the tokenID to the baseURI. return string(abi.encodePacked(currentBaseURI, tokenId.toString(), baseExtension)); } //only owner function setCost(uint256 _newCost) public onlyOwner { cost = _newCost; } function setMaxPerTx(uint256 value) public onlyOwner { maxPerTx = value; } function setBaseURI(string memory _newBaseURI) public onlyOwner { baseURI = _newBaseURI; } function setBaseExtension(string memory _newBaseExtension) public onlyOwner { baseExtension = _newBaseExtension; } function postSetTokenURI(uint256 tokenId, string memory _tokenURI) external onlyOwner { require(_exists(tokenId), "ERC721Metadata: URI set of nonexistent token"); _tokenURIs[tokenId] = _tokenURI; } function pause(bool _state) public onlyOwner { paused = _state; } function preMint(uint256 _mintAmount) public onlyOwner { uint256 supply = totalSupply(); require(_mintAmount > 0); require(_mintAmount <= _preMinted); require(supply + _mintAmount <= maxSupply); for (uint256 i = 1; i <= _mintAmount ; i++) { _safeMint(msg.sender, supply + i); } } function setMaxPerWallet(uint256 value) public onlyOwner { maxPerWallet = value; } function whiteList(address[] memory _addressList, uint256 count) external onlyOwner { require(_addressList.length > 0,"Error: list is empty"); for(uint256 i = 0;i < _addressList.length; i++) { require(_addressList[i] != address(0), "Address cannot be 0."); whiteListed[_addressList[i]] = count; } } function removeWhiteList(address[] memory addressList) external onlyOwner { require(addressList.length > 0,"Error: list is empty"); for(uint256 i = 0;i<addressList.length;i++) whiteListed[addressList[i]] = 0; } function updateWhitelistStatus() external onlyOwner { whitelistedOnly = !whitelistedOnly; } function withdraw() public payable onlyOwner { (bool success, ) = payable(msg.sender).call{value: address(this).balance}(""); require(success); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"string","name":"_initBaseURI","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPerTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPerWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"string","name":"_tokenURI","type":"string"}],"name":"postSetTokenURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"preMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addressList","type":"address[]"}],"name":"removeWhiteList","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":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseExtension","type":"string"}],"name":"setBaseExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"setMaxPerTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"setMaxPerWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"updateWhitelistStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_addressList","type":"address[]"},{"internalType":"uint256","name":"count","type":"uint256"}],"name":"whiteList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whiteListed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"whitelistedOnly","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
60a06040526040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600c9080519060200190620000519291906200031f565b50678ac7230489e80000600d556103e8600e55600a600f556001601060006101000a81548160ff0219169083151502179055506000601155600a60135560c86015556001601660006101000a81548160ff021916908315150217905550348015620000bb57600080fd5b506040516200522c3803806200522c8339818101604052810190620000e191906200056c565b82828160009080519060200190620000fb9291906200031f565b508060019080519060200190620001149291906200031f565b505050620001376200012b6200016a60201b60201c565b6200017260201b60201c565b62000148816200023860201b60201c565b601354600e546200015a91906200065e565b6080818152505050505062000781565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620002486200026460201b60201c565b80600b9080519060200190620002609291906200031f565b5050565b620002746200016a60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200029a620002f560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620002f3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002ea90620006fa565b60405180910390fd5b565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b8280546200032d906200074b565b90600052602060002090601f0160209004810192826200035157600085556200039d565b82601f106200036c57805160ff19168380011785556200039d565b828001600101855582156200039d579182015b828111156200039c5782518255916020019190600101906200037f565b5b509050620003ac9190620003b0565b5090565b5b80821115620003cb576000816000905550600101620003b1565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200043882620003ed565b810181811067ffffffffffffffff821117156200045a5762000459620003fe565b5b80604052505050565b60006200046f620003cf565b90506200047d82826200042d565b919050565b600067ffffffffffffffff821115620004a0576200049f620003fe565b5b620004ab82620003ed565b9050602081019050919050565b60005b83811015620004d8578082015181840152602081019050620004bb565b83811115620004e8576000848401525b50505050565b600062000505620004ff8462000482565b62000463565b905082815260208101848484011115620005245762000523620003e8565b5b62000531848285620004b8565b509392505050565b600082601f830112620005515762000550620003e3565b5b815162000563848260208601620004ee565b91505092915050565b600080600060608486031215620005885762000587620003d9565b5b600084015167ffffffffffffffff811115620005a957620005a8620003de565b5b620005b78682870162000539565b935050602084015167ffffffffffffffff811115620005db57620005da620003de565b5b620005e98682870162000539565b925050604084015167ffffffffffffffff8111156200060d576200060c620003de565b5b6200061b8682870162000539565b9150509250925092565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006200066b8262000625565b9150620006788362000625565b9250828210156200068e576200068d6200062f565b5b828203905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000620006e260208362000699565b9150620006ef82620006aa565b602082019050919050565b600060208201905081810360008301526200071581620006d3565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200076457607f821691505b602082108114156200077b576200077a6200071c565b5b50919050565b608051614a8f6200079d600039600061226e0152614a8f6000f3fe6080604052600436106102465760003560e01c806370a0823111610139578063b9bfa0bc116100b6578063da3ef23f1161007a578063da3ef23f1461084a578063e268e4d314610873578063e985e9c51461089c578063f2fde38b146108d9578063f968adbe14610902578063fa0fca841461092d57610246565b8063b9bfa0bc14610777578063c66828621461078e578063c6f6f216146107b9578063c87b56dd146107e2578063d5abeb011461081f57610246565b80639186b425116100fd5780639186b425146106b357806395d89b41146106de578063a0712d6814610709578063a22cb46514610725578063b88d4fde1461074e57610246565b806370a08231146105e2578063715018a61461061f5780637e0586f1146106365780638ad433ac1461065f5780638da5cb5b1461068857610246565b80633ccfd60b116101c75780634f6ccce71161018b5780634f6ccce7146104eb57806355f804b31461052857806357997081146105515780635c975abb1461057a5780636352211e146105a557610246565b80633ccfd60b1461042757806342842e0e14610431578063438b63001461045a57806344a0d68a14610497578063453c2310146104c057610246565b806313faede61161020e57806313faede61461034257806318160ddd1461036d57806323b872dd146103985780632f745c59146103c157806339745791146103fe57610246565b806301ffc9a71461024b57806302329a291461028857806306fdde03146102b1578063081812fc146102dc578063095ea7b314610319575b600080fd5b34801561025757600080fd5b50610272600480360381019061026d9190613118565b61096a565b60405161027f9190613160565b60405180910390f35b34801561029457600080fd5b506102af60048036038101906102aa91906131a7565b6109e4565b005b3480156102bd57600080fd5b506102c6610a09565b6040516102d3919061326d565b60405180910390f35b3480156102e857600080fd5b5061030360048036038101906102fe91906132c5565b610a9b565b6040516103109190613333565b60405180910390f35b34801561032557600080fd5b50610340600480360381019061033b919061337a565b610ae1565b005b34801561034e57600080fd5b50610357610bf9565b60405161036491906133c9565b60405180910390f35b34801561037957600080fd5b50610382610bff565b60405161038f91906133c9565b60405180910390f35b3480156103a457600080fd5b506103bf60048036038101906103ba91906133e4565b610c0c565b005b3480156103cd57600080fd5b506103e860048036038101906103e3919061337a565b610c6c565b6040516103f591906133c9565b60405180910390f35b34801561040a57600080fd5b506104256004803603810190610420919061357f565b610d11565b005b61042f610ddf565b005b34801561043d57600080fd5b50610458600480360381019061045391906133e4565b610e60565b005b34801561046657600080fd5b50610481600480360381019061047c91906135c8565b610e80565b60405161048e91906136b3565b60405180910390f35b3480156104a357600080fd5b506104be60048036038101906104b991906132c5565b610f2e565b005b3480156104cc57600080fd5b506104d5610f40565b6040516104e291906133c9565b60405180910390f35b3480156104f757600080fd5b50610512600480360381019061050d91906132c5565b610f46565b60405161051f91906133c9565b60405180910390f35b34801561053457600080fd5b5061054f600480360381019061054a919061378a565b610fb7565b005b34801561055d57600080fd5b50610578600480360381019061057391906137d3565b610fd9565b005b34801561058657600080fd5b5061058f611055565b60405161059c9190613160565b60405180910390f35b3480156105b157600080fd5b506105cc60048036038101906105c791906132c5565b611068565b6040516105d99190613333565b60405180910390f35b3480156105ee57600080fd5b50610609600480360381019061060491906135c8565b61111a565b60405161061691906133c9565b60405180910390f35b34801561062b57600080fd5b506106346111d2565b005b34801561064257600080fd5b5061065d6004803603810190610658919061382f565b6111e6565b005b34801561066b57600080fd5b50610686600480360381019061068191906132c5565b61133e565b005b34801561069457600080fd5b5061069d6113c3565b6040516106aa9190613333565b60405180910390f35b3480156106bf57600080fd5b506106c86113ed565b6040516106d59190613160565b60405180910390f35b3480156106ea57600080fd5b506106f3611400565b604051610700919061326d565b60405180910390f35b610723600480360381019061071e91906132c5565b611492565b005b34801561073157600080fd5b5061074c6004803603810190610747919061388b565b61177e565b005b34801561075a57600080fd5b506107756004803603810190610770919061396c565b611794565b005b34801561078357600080fd5b5061078c6117f6565b005b34801561079a57600080fd5b506107a361182a565b6040516107b0919061326d565b60405180910390f35b3480156107c557600080fd5b506107e060048036038101906107db91906132c5565b6118b8565b005b3480156107ee57600080fd5b50610809600480360381019061080491906132c5565b6118ca565b604051610816919061326d565b60405180910390f35b34801561082b57600080fd5b50610834611a3e565b60405161084191906133c9565b60405180910390f35b34801561085657600080fd5b50610871600480360381019061086c919061378a565b611a44565b005b34801561087f57600080fd5b5061089a600480360381019061089591906132c5565b611a66565b005b3480156108a857600080fd5b506108c360048036038101906108be91906139ef565b611a78565b6040516108d09190613160565b60405180910390f35b3480156108e557600080fd5b5061090060048036038101906108fb91906135c8565b611b0c565b005b34801561090e57600080fd5b50610917611b90565b60405161092491906133c9565b60405180910390f35b34801561093957600080fd5b50610954600480360381019061094f91906135c8565b611b96565b60405161096191906133c9565b60405180910390f35b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109dd57506109dc82611bae565b5b9050919050565b6109ec611c90565b80601060006101000a81548160ff02191690831515021790555050565b606060008054610a1890613a5e565b80601f0160208091040260200160405190810160405280929190818152602001828054610a4490613a5e565b8015610a915780601f10610a6657610100808354040283529160200191610a91565b820191906000526020600020905b815481529060010190602001808311610a7457829003601f168201915b5050505050905090565b6000610aa682611d0e565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610aec82611068565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5490613b02565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b7c611d59565b73ffffffffffffffffffffffffffffffffffffffff161480610bab5750610baa81610ba5611d59565b611a78565b5b610bea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be190613b94565b60405180910390fd5b610bf48383611d61565b505050565b600d5481565b6000600880549050905090565b610c1d610c17611d59565b82611e1a565b610c5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5390613c26565b60405180910390fd5b610c67838383611eaf565b505050565b6000610c778361111a565b8210610cb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610caf90613cb8565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610d19611c90565b6000815111610d5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5490613d24565b60405180910390fd5b60005b8151811015610ddb57600060176000848481518110610d8257610d81613d44565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508080610dd390613da2565b915050610d60565b5050565b610de7611c90565b60003373ffffffffffffffffffffffffffffffffffffffff1647604051610e0d90613e1c565b60006040518083038185875af1925050503d8060008114610e4a576040519150601f19603f3d011682016040523d82523d6000602084013e610e4f565b606091505b5050905080610e5d57600080fd5b50565b610e7b83838360405180602001604052806000815250611794565b505050565b60606000610e8d8361111a565b905060008167ffffffffffffffff811115610eab57610eaa61343c565b5b604051908082528060200260200182016040528015610ed95781602001602082028036833780820191505090505b50905060005b82811015610f2357610ef18582610c6c565b828281518110610f0457610f03613d44565b5b6020026020010181815250508080610f1b90613da2565b915050610edf565b508092505050919050565b610f36611c90565b80600d8190555050565b60155481565b6000610f50610bff565b8210610f91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8890613ea3565b60405180910390fd5b60088281548110610fa557610fa4613d44565b5b90600052602060002001549050919050565b610fbf611c90565b80600b9080519060200190610fd5929190613009565b5050565b610fe1611c90565b610fea82612116565b611029576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102090613f35565b60405180910390fd5b80601860008481526020019081526020016000209080519060200190611050929190613009565b505050565b601060009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611111576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110890613fa1565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561118b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118290614033565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6111da611c90565b6111e46000612182565b565b6111ee611c90565b6000825111611232576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122990613d24565b60405180910390fd5b60005b825181101561133957600073ffffffffffffffffffffffffffffffffffffffff1683828151811061126957611268613d44565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1614156112c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112bf9061409f565b60405180910390fd5b81601760008584815181106112e0576112df613d44565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550808061133190613da2565b915050611235565b505050565b611346611c90565b6000611350610bff565b90506000821161135f57600080fd5b60135482111561136e57600080fd5b600e54828261137d91906140bf565b111561138857600080fd5b6000600190505b8281116113be576113ab3382846113a691906140bf565b612248565b80806113b690613da2565b91505061138f565b505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b601660009054906101000a900460ff1681565b60606001805461140f90613a5e565b80601f016020809104026020016040519081016040528092919081815260200182805461143b90613a5e565b80156114885780601f1061145d57610100808354040283529160200191611488565b820191906000526020600020905b81548152906001019060200180831161146b57829003601f168201915b5050505050905090565b600061149c610bff565b9050601060009054906101000a900460ff16156114b857600080fd5b600082116114c557600080fd5b600f548211156114d457600080fd5b600e5482826114e391906140bf565b11156114ee57600080fd5b60155482601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015461153f91906140bf565b1115611580576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157790614187565b60405180910390fd5b601660009054906101000a900460ff1615611619576001601760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015611618576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160f90614219565b60405180910390fd5b5b6116216113c3565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461166e5781600d546116619190614239565b34101561166d57600080fd5b5b6000600190505b8281116117795760006001611688612266565b61169291906140bf565b905061169e3382612248565b6001601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282546116f191906140bf565b92505081905550601660009054906101000a900460ff1615611765576001601760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461175d9190614293565b925050819055505b50808061177190613da2565b915050611675565b505050565b611790611789611d59565b83836123ac565b5050565b6117a561179f611d59565b83611e1a565b6117e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117db90613c26565b60405180910390fd5b6117f084848484612519565b50505050565b6117fe611c90565b601660009054906101000a900460ff1615601660006101000a81548160ff021916908315150217905550565b600c805461183790613a5e565b80601f016020809104026020016040519081016040528092919081815260200182805461186390613a5e565b80156118b05780601f10611885576101008083540402835291602001916118b0565b820191906000526020600020905b81548152906001019060200180831161189357829003601f168201915b505050505081565b6118c0611c90565b80600f8190555050565b60606118d582612116565b611914576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190b90614339565b60405180910390fd5b600060186000848152602001908152602001600020805461193490613a5e565b80601f016020809104026020016040519081016040528092919081815260200182805461196090613a5e565b80156119ad5780601f10611982576101008083540402835291602001916119ad565b820191906000526020600020905b81548152906001019060200180831161199057829003601f168201915b5050505050905060006119be612575565b90506000815114156119d4578192505050611a39565b600082511115611a0757816040516020016119ef9190614395565b60405160208183030381529060405292505050611a39565b80611a1185612607565b600c604051602001611a2593929190614440565b604051602081830303815290604052925050505b919050565b600e5481565b611a4c611c90565b80600c9080519060200190611a62929190613009565b5050565b611a6e611c90565b8060158190555050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611b14611c90565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611b84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7b906144e3565b60405180910390fd5b611b8d81612182565b50565b600f5481565b60176020528060005260406000206000915090505481565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611c7957507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611c895750611c8882612768565b5b9050919050565b611c98611d59565b73ffffffffffffffffffffffffffffffffffffffff16611cb66113c3565b73ffffffffffffffffffffffffffffffffffffffff1614611d0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d039061454f565b60405180910390fd5b565b611d1781612116565b611d56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4d90613fa1565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611dd483611068565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600080611e2683611068565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611e685750611e678185611a78565b5b80611ea657508373ffffffffffffffffffffffffffffffffffffffff16611e8e84610a9b565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611ecf82611068565b73ffffffffffffffffffffffffffffffffffffffff1614611f25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1c906145e1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8c90614673565b60405180910390fd5b611fa08383836127d2565b611fab600082611d61565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611ffb9190614293565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461205291906140bf565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46121118383836128e6565b505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6122628282604051806020016040528060008152506128eb565b5050565b6000806011547f00000000000000000000000000000000000000000000000000000000000000006122979190614293565b90506000806000836122a7612946565b6122b191906146c2565b90506000601260006001876122c69190614293565b81526020019081526020016000205414156122ef576001846122e89190614293565b9250612312565b601260006001866123009190614293565b81526020019081526020016000205492505b60006012600083815260200190815260200160002054141561234e5780915082601260008381526020019081526020016000208190555061237d565b601260008281526020019081526020016000205491508260126000838152602001908152602001600020819055505b6011600081548092919061239090613da2565b9190505550601354826123a391906140bf565b94505050505090565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561241b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124129061473f565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161250c9190613160565b60405180910390a3505050565b612524848484611eaf565b61253084848484612979565b61256f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612566906147d1565b60405180910390fd5b50505050565b6060600b805461258490613a5e565b80601f01602080910402602001604051908101604052809291908181526020018280546125b090613a5e565b80156125fd5780601f106125d2576101008083540402835291602001916125fd565b820191906000526020600020905b8154815290600101906020018083116125e057829003601f168201915b5050505050905090565b6060600082141561264f576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612763565b600082905060005b6000821461268157808061266a90613da2565b915050600a8261267a91906147f1565b9150612657565b60008167ffffffffffffffff81111561269d5761269c61343c565b5b6040519080825280601f01601f1916602001820160405280156126cf5781602001600182028036833780820191505090505b5090505b6000851461275c576001826126e89190614293565b9150600a856126f791906146c2565b603061270391906140bf565b60f81b81838151811061271957612718613d44565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561275591906147f1565b94506126d3565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6127dd838383612b01565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156128205761281b81612b06565b61285f565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461285e5761285d8382612b4f565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156128a25761289d81612cbc565b6128e1565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146128e0576128df8282612d8d565b5b5b505050565b505050565b6128f58383612e0c565b6129026000848484612979565b612941576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612938906147d1565b60405180910390fd5b505050565b6000444260405160200161295b929190614843565b6040516020818303038152906040528051906020012060001c905090565b600061299a8473ffffffffffffffffffffffffffffffffffffffff16612fe6565b15612af4578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026129c3611d59565b8786866040518563ffffffff1660e01b81526004016129e594939291906148c4565b6020604051808303816000875af1925050508015612a2157506040513d601f19601f82011682018060405250810190612a1e9190614925565b60015b612aa4573d8060008114612a51576040519150601f19603f3d011682016040523d82523d6000602084013e612a56565b606091505b50600081511415612a9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a93906147d1565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612af9565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612b5c8461111a565b612b669190614293565b9050600060076000848152602001908152602001600020549050818114612c4b576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612cd09190614293565b9050600060096000848152602001908152602001600020549050600060088381548110612d0057612cff613d44565b5b906000526020600020015490508060088381548110612d2257612d21613d44565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612d7157612d70614952565b5b6001900381819060005260206000200160009055905550505050565b6000612d988361111a565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612e7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e73906149cd565b60405180910390fd5b612e8581612116565b15612ec5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ebc90614a39565b60405180910390fd5b612ed1600083836127d2565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612f2191906140bf565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612fe2600083836128e6565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b82805461301590613a5e565b90600052602060002090601f016020900481019282613037576000855561307e565b82601f1061305057805160ff191683800117855561307e565b8280016001018555821561307e579182015b8281111561307d578251825591602001919060010190613062565b5b50905061308b919061308f565b5090565b5b808211156130a8576000816000905550600101613090565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6130f5816130c0565b811461310057600080fd5b50565b600081359050613112816130ec565b92915050565b60006020828403121561312e5761312d6130b6565b5b600061313c84828501613103565b91505092915050565b60008115159050919050565b61315a81613145565b82525050565b60006020820190506131756000830184613151565b92915050565b61318481613145565b811461318f57600080fd5b50565b6000813590506131a18161317b565b92915050565b6000602082840312156131bd576131bc6130b6565b5b60006131cb84828501613192565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561320e5780820151818401526020810190506131f3565b8381111561321d576000848401525b50505050565b6000601f19601f8301169050919050565b600061323f826131d4565b61324981856131df565b93506132598185602086016131f0565b61326281613223565b840191505092915050565b600060208201905081810360008301526132878184613234565b905092915050565b6000819050919050565b6132a28161328f565b81146132ad57600080fd5b50565b6000813590506132bf81613299565b92915050565b6000602082840312156132db576132da6130b6565b5b60006132e9848285016132b0565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061331d826132f2565b9050919050565b61332d81613312565b82525050565b60006020820190506133486000830184613324565b92915050565b61335781613312565b811461336257600080fd5b50565b6000813590506133748161334e565b92915050565b60008060408385031215613391576133906130b6565b5b600061339f85828601613365565b92505060206133b0858286016132b0565b9150509250929050565b6133c38161328f565b82525050565b60006020820190506133de60008301846133ba565b92915050565b6000806000606084860312156133fd576133fc6130b6565b5b600061340b86828701613365565b935050602061341c86828701613365565b925050604061342d868287016132b0565b9150509250925092565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61347482613223565b810181811067ffffffffffffffff821117156134935761349261343c565b5b80604052505050565b60006134a66130ac565b90506134b2828261346b565b919050565b600067ffffffffffffffff8211156134d2576134d161343c565b5b602082029050602081019050919050565b600080fd5b60006134fb6134f6846134b7565b61349c565b9050808382526020820190506020840283018581111561351e5761351d6134e3565b5b835b8181101561354757806135338882613365565b845260208401935050602081019050613520565b5050509392505050565b600082601f83011261356657613565613437565b5b81356135768482602086016134e8565b91505092915050565b600060208284031215613595576135946130b6565b5b600082013567ffffffffffffffff8111156135b3576135b26130bb565b5b6135bf84828501613551565b91505092915050565b6000602082840312156135de576135dd6130b6565b5b60006135ec84828501613365565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61362a8161328f565b82525050565b600061363c8383613621565b60208301905092915050565b6000602082019050919050565b6000613660826135f5565b61366a8185613600565b935061367583613611565b8060005b838110156136a657815161368d8882613630565b975061369883613648565b925050600181019050613679565b5085935050505092915050565b600060208201905081810360008301526136cd8184613655565b905092915050565b600080fd5b600067ffffffffffffffff8211156136f5576136f461343c565b5b6136fe82613223565b9050602081019050919050565b82818337600083830152505050565b600061372d613728846136da565b61349c565b905082815260208101848484011115613749576137486136d5565b5b61375484828561370b565b509392505050565b600082601f83011261377157613770613437565b5b813561378184826020860161371a565b91505092915050565b6000602082840312156137a05761379f6130b6565b5b600082013567ffffffffffffffff8111156137be576137bd6130bb565b5b6137ca8482850161375c565b91505092915050565b600080604083850312156137ea576137e96130b6565b5b60006137f8858286016132b0565b925050602083013567ffffffffffffffff811115613819576138186130bb565b5b6138258582860161375c565b9150509250929050565b60008060408385031215613846576138456130b6565b5b600083013567ffffffffffffffff811115613864576138636130bb565b5b61387085828601613551565b9250506020613881858286016132b0565b9150509250929050565b600080604083850312156138a2576138a16130b6565b5b60006138b085828601613365565b92505060206138c185828601613192565b9150509250929050565b600067ffffffffffffffff8211156138e6576138e561343c565b5b6138ef82613223565b9050602081019050919050565b600061390f61390a846138cb565b61349c565b90508281526020810184848401111561392b5761392a6136d5565b5b61393684828561370b565b509392505050565b600082601f83011261395357613952613437565b5b81356139638482602086016138fc565b91505092915050565b60008060008060808587031215613986576139856130b6565b5b600061399487828801613365565b94505060206139a587828801613365565b93505060406139b6878288016132b0565b925050606085013567ffffffffffffffff8111156139d7576139d66130bb565b5b6139e38782880161393e565b91505092959194509250565b60008060408385031215613a0657613a056130b6565b5b6000613a1485828601613365565b9250506020613a2585828601613365565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613a7657607f821691505b60208210811415613a8a57613a89613a2f565b5b50919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000613aec6021836131df565b9150613af782613a90565b604082019050919050565b60006020820190508181036000830152613b1b81613adf565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c0000602082015250565b6000613b7e603e836131df565b9150613b8982613b22565b604082019050919050565b60006020820190508181036000830152613bad81613b71565b9050919050565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206e6f7220617070726f766564000000000000000000000000000000000000602082015250565b6000613c10602e836131df565b9150613c1b82613bb4565b604082019050919050565b60006020820190508181036000830152613c3f81613c03565b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b6000613ca2602b836131df565b9150613cad82613c46565b604082019050919050565b60006020820190508181036000830152613cd181613c95565b9050919050565b7f4572726f723a206c69737420697320656d707479000000000000000000000000600082015250565b6000613d0e6014836131df565b9150613d1982613cd8565b602082019050919050565b60006020820190508181036000830152613d3d81613d01565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613dad8261328f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613de057613ddf613d73565b5b600182019050919050565b600081905092915050565b50565b6000613e06600083613deb565b9150613e1182613df6565b600082019050919050565b6000613e2782613df9565b9150819050919050565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b6000613e8d602c836131df565b9150613e9882613e31565b604082019050919050565b60006020820190508181036000830152613ebc81613e80565b9050919050565b7f4552433732314d657461646174613a2055524920736574206f66206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000613f1f602c836131df565b9150613f2a82613ec3565b604082019050919050565b60006020820190508181036000830152613f4e81613f12565b9050919050565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b6000613f8b6018836131df565b9150613f9682613f55565b602082019050919050565b60006020820190508181036000830152613fba81613f7e565b9050919050565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b600061401d6029836131df565b915061402882613fc1565b604082019050919050565b6000602082019050818103600083015261404c81614010565b9050919050565b7f416464726573732063616e6e6f7420626520302e000000000000000000000000600082015250565b60006140896014836131df565b915061409482614053565b602082019050919050565b600060208201905081810360008301526140b88161407c565b9050919050565b60006140ca8261328f565b91506140d58361328f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561410a57614109613d73565b5b828201905092915050565b7f596f752061726520747279696e6720746f206d696e74206d6f7265204e46547360008201527f207468616e20616c6c6f77656420666f7220796f75722077616c6c6574000000602082015250565b6000614171603d836131df565b915061417c82614115565b604082019050919050565b600060208201905081810360008301526141a081614164565b9050919050565b7f4572726f723a20796f7520617265206e6f742077686974656c6973746564206f60008201527f7220616d6f756e7420697320686967686572207468616e206c696d6974000000602082015250565b6000614203603d836131df565b915061420e826141a7565b604082019050919050565b60006020820190508181036000830152614232816141f6565b9050919050565b60006142448261328f565b915061424f8361328f565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561428857614287613d73565b5b828202905092915050565b600061429e8261328f565b91506142a98361328f565b9250828210156142bc576142bb613d73565b5b828203905092915050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000614323602f836131df565b915061432e826142c7565b604082019050919050565b6000602082019050818103600083015261435281614316565b9050919050565b600081905092915050565b600061436f826131d4565b6143798185614359565b93506143898185602086016131f0565b80840191505092915050565b60006143a18284614364565b915081905092915050565b60008190508160005260206000209050919050565b600081546143ce81613a5e565b6143d88186614359565b945060018216600081146143f3576001811461440457614437565b60ff19831686528186019350614437565b61440d856143ac565b60005b8381101561442f57815481890152600182019150602081019050614410565b838801955050505b50505092915050565b600061444c8286614364565b91506144588285614364565b915061446482846143c1565b9150819050949350505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006144cd6026836131df565b91506144d882614471565b604082019050919050565b600060208201905081810360008301526144fc816144c0565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006145396020836131df565b915061454482614503565b602082019050919050565b600060208201905081810360008301526145688161452c565b9050919050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b60006145cb6025836131df565b91506145d68261456f565b604082019050919050565b600060208201905081810360008301526145fa816145be565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061465d6024836131df565b915061466882614601565b604082019050919050565b6000602082019050818103600083015261468c81614650565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006146cd8261328f565b91506146d88361328f565b9250826146e8576146e7614693565b5b828206905092915050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b60006147296019836131df565b9150614734826146f3565b602082019050919050565b600060208201905081810360008301526147588161471c565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b60006147bb6032836131df565b91506147c68261475f565b604082019050919050565b600060208201905081810360008301526147ea816147ae565b9050919050565b60006147fc8261328f565b91506148078361328f565b92508261481757614816614693565b5b828204905092915050565b6000819050919050565b61483d6148388261328f565b614822565b82525050565b600061484f828561482c565b60208201915061485f828461482c565b6020820191508190509392505050565b600081519050919050565b600082825260208201905092915050565b60006148968261486f565b6148a0818561487a565b93506148b08185602086016131f0565b6148b981613223565b840191505092915050565b60006080820190506148d96000830187613324565b6148e66020830186613324565b6148f360408301856133ba565b8181036060830152614905818461488b565b905095945050505050565b60008151905061491f816130ec565b92915050565b60006020828403121561493b5761493a6130b6565b5b600061494984828501614910565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b60006149b76020836131df565b91506149c282614981565b602082019050919050565b600060208201905081810360008301526149e6816149aa565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000614a23601c836131df565b9150614a2e826149ed565b602082019050919050565b60006020820190508181036000830152614a5281614a16565b905091905056fea2646970667358221220dc53e072b007e0fe70f53469c0d32f2729c1210c9216b400013b002365da79c764736f6c634300080b0033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000d46696e6765727374616368657300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000646696e67657200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d5362643937536a3757477048674a6f786d6b3546664e6b76524c43314656346f33645a5641376768706f42352f00000000000000000000
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000d46696e6765727374616368657300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000646696e67657200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d5362643937536a3757477048674a6f786d6b3546664e6b76524c43314656346f33645a5641376768706f42352f00000000000000000000
-----Decoded View---------------
Arg [0] : _name (string): Fingerstaches
Arg [1] : _symbol (string): Finger
Arg [2] : _initBaseURI (string): ipfs://QmSbd97Sj7WGpHgJoxmk5FfNkvRLC1FV4o3dZVA7ghpoB5/
-----Encoded View---------------
10 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [3] : 000000000000000000000000000000000000000000000000000000000000000d
Arg [4] : 46696e6765727374616368657300000000000000000000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000006
Arg [6] : 46696e6765720000000000000000000000000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [8] : 697066733a2f2f516d5362643937536a3757477048674a6f786d6b3546664e6b
Arg [9] : 76524c43314656346f33645a5641376768706f42352f00000000000000000000
Deployed ByteCode Sourcemap
46256:6611:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40029:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51463:73;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26763:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28276:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27793:417;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46455:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40669:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28976:336;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40337:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52345:242;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52706:158;;;:::i;:::-;;29383:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49519:348;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50811:80;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47164:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40859:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50987:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51225:232;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46559:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26474:222;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26205:207;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5292:103;;;;;;;;;;;;;:::i;:::-;;51967:370;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51546:321;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4644:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47278:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26932:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48665:848;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28519:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29639:323;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52595:105;;;;;;;;;;;;;:::i;:::-;;46413:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50897:82;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49879:900;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46490:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51091:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51873:90;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28745:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5550:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46526:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47317:46;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40029:224;40131:4;40170:35;40155:50;;;:11;:50;;;;:90;;;;40209:36;40233:11;40209:23;:36::i;:::-;40155:90;40148:97;;40029:224;;;:::o;51463:73::-;4530:13;:11;:13::i;:::-;51524:6:::1;51515;;:15;;;;;;;;;;;;;;;;;;51463:73:::0;:::o;26763:100::-;26817:13;26850:5;26843:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26763:100;:::o;28276:171::-;28352:7;28372:23;28387:7;28372:14;:23::i;:::-;28415:15;:24;28431:7;28415:24;;;;;;;;;;;;;;;;;;;;;28408:31;;28276:171;;;:::o;27793:417::-;27874:13;27890:23;27905:7;27890:14;:23::i;:::-;27874:39;;27938:5;27932:11;;:2;:11;;;;27924:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;28032:5;28016:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;28041:37;28058:5;28065:12;:10;:12::i;:::-;28041:16;:37::i;:::-;28016:62;27994:174;;;;;;;;;;;;:::i;:::-;;;;;;;;;28181:21;28190:2;28194:7;28181:8;:21::i;:::-;27863:347;27793:417;;:::o;46455:30::-;;;;:::o;40669:113::-;40730:7;40757:10;:17;;;;40750:24;;40669:113;:::o;28976:336::-;29171:41;29190:12;:10;:12::i;:::-;29204:7;29171:18;:41::i;:::-;29163:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;29276:28;29286:4;29292:2;29296:7;29276:9;:28::i;:::-;28976:336;;;:::o;40337:256::-;40434:7;40470:23;40487:5;40470:16;:23::i;:::-;40462:5;:31;40454:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;40559:12;:19;40572:5;40559:19;;;;;;;;;;;;;;;:26;40579:5;40559:26;;;;;;;;;;;;40552:33;;40337:256;;;;:::o;52345:242::-;4530:13;:11;:13::i;:::-;52459:1:::1;52438:11;:18;:22;52430:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;52499:9;52495:84;52515:11;:18;52513:1;:20;52495:84;;;52578:1;52548:11;:27;52560:11;52572:1;52560:14;;;;;;;;:::i;:::-;;;;;;;;52548:27;;;;;;;;;;;;;;;:31;;;;52534:3;;;;;:::i;:::-;;;;52495:84;;;;52345:242:::0;:::o;52706:158::-;4530:13;:11;:13::i;:::-;52759:12:::1;52785:10;52777:24;;52809:21;52777:58;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52758:77;;;52850:7;52842:16;;;::::0;::::1;;52751:113;52706:158::o:0;29383:185::-;29521:39;29538:4;29544:2;29548:7;29521:39;;;;;;;;;;;;:16;:39::i;:::-;29383:185;;;:::o;49519:348::-;49594:16;49622:23;49648:17;49658:6;49648:9;:17::i;:::-;49622:43;;49672:25;49714:15;49700:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49672:58;;49742:9;49737:103;49757:15;49753:1;:19;49737:103;;;49802:30;49822:6;49830:1;49802:19;:30::i;:::-;49788:8;49797:1;49788:11;;;;;;;;:::i;:::-;;;;;;;:44;;;;;49774:3;;;;;:::i;:::-;;;;49737:103;;;;49853:8;49846:15;;;;49519:348;;;:::o;50811:80::-;4530:13;:11;:13::i;:::-;50877:8:::1;50870:4;:15;;;;50811:80:::0;:::o;47164:33::-;;;;:::o;40859:233::-;40934:7;40970:30;:28;:30::i;:::-;40962:5;:38;40954:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;41067:10;41078:5;41067:17;;;;;;;;:::i;:::-;;;;;;;;;;41060:24;;40859:233;;;:::o;50987:98::-;4530:13;:11;:13::i;:::-;51068:11:::1;51058:7;:21;;;;;;;;;;;;:::i;:::-;;50987:98:::0;:::o;51225:232::-;4530:13;:11;:13::i;:::-;51334:16:::1;51342:7;51334;:16::i;:::-;51326:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;51436:9;51414:10;:19;51425:7;51414:19;;;;;;;;;;;:31;;;;;;;;;;;;:::i;:::-;;51225:232:::0;;:::o;46559:25::-;;;;;;;;;;;;;:::o;26474:222::-;26546:7;26566:13;26582:7;:16;26590:7;26582:16;;;;;;;;;;;;;;;;;;;;;26566:32;;26634:1;26617:19;;:5;:19;;;;26609:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;26683:5;26676:12;;;26474:222;;;:::o;26205:207::-;26277:7;26322:1;26305:19;;:5;:19;;;;26297:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26388:9;:16;26398:5;26388:16;;;;;;;;;;;;;;;;26381:23;;26205:207;;;:::o;5292:103::-;4530:13;:11;:13::i;:::-;5357:30:::1;5384:1;5357:18;:30::i;:::-;5292:103::o:0;51967:370::-;4530:13;:11;:13::i;:::-;52092:1:::1;52070:12;:19;:23;52062:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;52134:9;52130:190;52152:12;:19;52148:1;:23;52130:190;;;52229:1;52202:29;;:12;52215:1;52202:15;;;;;;;;:::i;:::-;;;;;;;;:29;;;;52194:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;52303:5;52272:11;:28;52284:12;52297:1;52284:15;;;;;;;;:::i;:::-;;;;;;;;52272:28;;;;;;;;;;;;;;;:36;;;;52173:3;;;;;:::i;:::-;;;;52130:190;;;;51967:370:::0;;:::o;51546:321::-;4530:13;:11;:13::i;:::-;51608:14:::1;51625:13;:11;:13::i;:::-;51608:30;;51667:1;51653:11;:15;51645:24;;;::::0;::::1;;51699:10;;51684:11;:25;;51676:34;;;::::0;::::1;;51749:9;;51734:11;51725:6;:20;;;;:::i;:::-;:33;;51717:42;;;::::0;::::1;;51773:9;51785:1;51773:13;;51768:94;51793:11;51788:1;:16;51768:94;;51821:33;51831:10;51852:1;51843:6;:10;;;;:::i;:::-;51821:9;:33::i;:::-;51807:3;;;;;:::i;:::-;;;;51768:94;;;;51601:266;51546:321:::0;:::o;4644:87::-;4690:7;4717:6;;;;;;;;;;;4710:13;;4644:87;:::o;47278:34::-;;;;;;;;;;;;;:::o;26932:104::-;26988:13;27021:7;27014:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26932:104;:::o;48665:848::-;48722:14;48739:13;:11;:13::i;:::-;48722:30;;48768:6;;;;;;;;;;;48767:7;48759:16;;;;;;48804:1;48790:11;:15;48782:24;;;;;;48836:8;;48821:11;:23;;48813:32;;;;;;48884:9;;48869:11;48860:6;:20;;;;:::i;:::-;:33;;48852:42;;;;;;48954:12;;48939:11;48909:8;:20;48918:10;48909:20;;;;;;;;;;;;;;;:27;;;:41;;;;:::i;:::-;:57;;48901:132;;;;;;;;;;;;:::i;:::-;;;;;;;;;49043:15;;;;;;;;;;;49040:126;;;49100:1;49073:11;:23;49085:10;49073:23;;;;;;;;;;;;;;;;:28;;49065:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;49040:126;49193:7;:5;:7::i;:::-;49179:21;;:10;:21;;;49175:84;;49239:11;49232:4;;:18;;;;:::i;:::-;49219:9;:31;;49211:40;;;;;;49175:84;49272:9;49284:1;49272:13;;49267:241;49292:11;49287:1;:16;49267:241;;49319:12;49355:1;49334:18;:16;:18::i;:::-;:22;;;;:::i;:::-;49319:37;;49365:30;49375:10;49387:7;49365:9;:30::i;:::-;49435:1;49404:8;:20;49413:10;49404:20;;;;;;;;;;;;;;;:27;;;:32;;;;;;;:::i;:::-;;;;;;;;49448:15;;;;;;;;;;;49445:55;;;49499:1;49472:11;:23;49484:10;49472:23;;;;;;;;;;;;;;;;:28;;;;;;;:::i;:::-;;;;;;;;49445:55;49310:198;49305:3;;;;;:::i;:::-;;;;49267:241;;;;48715:798;48665:848;:::o;28519:155::-;28614:52;28633:12;:10;:12::i;:::-;28647:8;28657;28614:18;:52::i;:::-;28519:155;;:::o;29639:323::-;29813:41;29832:12;:10;:12::i;:::-;29846:7;29813:18;:41::i;:::-;29805:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;29916:38;29930:4;29936:2;29940:7;29949:4;29916:13;:38::i;:::-;29639:323;;;;:::o;52595:105::-;4530:13;:11;:13::i;:::-;52677:15:::1;;;;;;;;;;;52676:16;52658:15;;:34;;;;;;;;;;;;;;;;;;52595:105::o:0;46413:37::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;50897:82::-;4530:13;:11;:13::i;:::-;50968:5:::1;50957:8;:16;;;;50897:82:::0;:::o;49879:900::-;49952:13;49990:16;49998:7;49990;:16::i;:::-;49982:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;50075:23;50101:10;:19;50112:7;50101:19;;;;;;;;;;;50075:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50135:28;50166:10;:8;:10::i;:::-;50135:41;;50304:1;50278:14;50272:28;:33;50268:90;;;50333:9;50326:16;;;;;;50268:90;50496:1;50476:9;50470:23;:27;50466:110;;;50549:9;50532:27;;;;;;;;:::i;:::-;;;;;;;;;;;;;50518:42;;;;;;50466:110;50716:14;50732:18;:7;:16;:18::i;:::-;50752:13;50699:67;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;50685:82;;;;49879:900;;;;:::o;46490:31::-;;;;:::o;51091:122::-;4530:13;:11;:13::i;:::-;51190:17:::1;51174:13;:33;;;;;;;;;;;;:::i;:::-;;51091:122:::0;:::o;51873:90::-;4530:13;:11;:13::i;:::-;51952:5:::1;51937:12;:20;;;;51873:90:::0;:::o;28745:164::-;28842:4;28866:18;:25;28885:5;28866:25;;;;;;;;;;;;;;;:35;28892:8;28866:35;;;;;;;;;;;;;;;;;;;;;;;;;28859:42;;28745:164;;;;:::o;5550:201::-;4530:13;:11;:13::i;:::-;5659:1:::1;5639:22;;:8;:22;;;;5631:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;5715:28;5734:8;5715:18;:28::i;:::-;5550:201:::0;:::o;46526:28::-;;;;:::o;47317:46::-;;;;;;;;;;;;;;;;;:::o;25836:305::-;25938:4;25990:25;25975:40;;;:11;:40;;;;:105;;;;26047:33;26032:48;;;:11;:48;;;;25975:105;:158;;;;26097:36;26121:11;26097:23;:36::i;:::-;25975:158;25955:178;;25836:305;;;:::o;4809:132::-;4884:12;:10;:12::i;:::-;4873:23;;:7;:5;:7::i;:::-;:23;;;4865:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4809:132::o;36251:135::-;36333:16;36341:7;36333;:16::i;:::-;36325:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;36251:135;:::o;3195:98::-;3248:7;3275:10;3268:17;;3195:98;:::o;35530:174::-;35632:2;35605:15;:24;35621:7;35605:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;35688:7;35684:2;35650:46;;35659:23;35674:7;35659:14;:23::i;:::-;35650:46;;;;;;;;;;;;35530:174;;:::o;31763:264::-;31856:4;31873:13;31889:23;31904:7;31889:14;:23::i;:::-;31873:39;;31942:5;31931:16;;:7;:16;;;:52;;;;31951:32;31968:5;31975:7;31951:16;:32::i;:::-;31931:52;:87;;;;32011:7;31987:31;;:20;31999:7;31987:11;:20::i;:::-;:31;;;31931:87;31923:96;;;31763:264;;;;:::o;34786:625::-;34945:4;34918:31;;:23;34933:7;34918:14;:23::i;:::-;:31;;;34910:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;35024:1;35010:16;;:2;:16;;;;35002:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;35080:39;35101:4;35107:2;35111:7;35080:20;:39::i;:::-;35184:29;35201:1;35205:7;35184:8;:29::i;:::-;35245:1;35226:9;:15;35236:4;35226:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;35274:1;35257:9;:13;35267:2;35257:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;35305:2;35286:7;:16;35294:7;35286:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;35344:7;35340:2;35325:27;;35334:4;35325:27;;;;;;;;;;;;35365:38;35385:4;35391:2;35395:7;35365:19;:38::i;:::-;34786:625;;;:::o;31469:127::-;31534:4;31586:1;31558:30;;:7;:16;31566:7;31558:16;;;;;;;;;;;;;;;;;;;;;:30;;;;31551:37;;31469:127;;;:::o;5911:191::-;5985:16;6004:6;;;;;;;;;;;5985:25;;6030:8;6021:6;;:17;;;;;;;;;;;;;;;;;;6085:8;6054:40;;6075:8;6054:40;;;;;;;;;;;;5974:128;5911:191;:::o;32369:110::-;32445:26;32455:2;32459:7;32445:26;;;;;;;;;;;;:9;:26::i;:::-;32369:110;;:::o;47755:735::-;47809:7;47825:13;47853:11;;47841:9;:23;;;;:::i;:::-;47825:39;;47871:12;47890:14;47913:9;47942:5;47925:14;:12;:14::i;:::-;:22;;;;:::i;:::-;47913:34;;48044:1;48018:11;:22;48038:1;48030:5;:9;;;;:::i;:::-;48018:22;;;;;;;;;;;;:27;48014:122;;;48073:1;48065:5;:9;;;;:::i;:::-;48058:16;;48014:122;;;48106:11;:22;48126:1;48118:5;:9;;;;:::i;:::-;48106:22;;;;;;;;;;;;48099:29;;48014:122;48272:1;48254:11;:14;48266:1;48254:14;;;;;;;;;;;;:19;48250:178;;;48297:1;48288:10;;48328:4;48311:11;:14;48323:1;48311:14;;;;;;;;;;;:21;;;;48250:178;;;48370:11;:14;48382:1;48370:14;;;;;;;;;;;;48361:23;;48414:4;48397:11;:14;48409:1;48397:14;;;;;;;;;;;:21;;;;48250:178;48436:11;;:13;;;;;;;;;:::i;:::-;;;;;;48474:10;;48465:6;:19;;;;:::i;:::-;48458:26;;;;;;47755:735;:::o;35847:315::-;36002:8;35993:17;;:5;:17;;;;35985:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;36089:8;36051:18;:25;36070:5;36051:25;;;;;;;;;;;;;;;:35;36077:8;36051:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;36135:8;36113:41;;36128:5;36113:41;;;36145:8;36113:41;;;;;;:::i;:::-;;;;;;;;35847:315;;;:::o;30843:313::-;30999:28;31009:4;31015:2;31019:7;30999:9;:28::i;:::-;31046:47;31069:4;31075:2;31079:7;31088:4;31046:22;:47::i;:::-;31038:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;30843:313;;;;:::o;47645:102::-;47705:13;47734:7;47727:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47645:102;:::o;449:723::-;505:13;735:1;726:5;:10;722:53;;;753:10;;;;;;;;;;;;;;;;;;;;;722:53;785:12;800:5;785:20;;816:14;841:78;856:1;848:4;:9;841:78;;874:8;;;;;:::i;:::-;;;;905:2;897:10;;;;;:::i;:::-;;;841:78;;;929:19;961:6;951:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;929:39;;979:154;995:1;986:5;:10;979:154;;1023:1;1013:11;;;;;:::i;:::-;;;1090:2;1082:5;:10;;;;:::i;:::-;1069:2;:24;;;;:::i;:::-;1056:39;;1039:6;1046;1039:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;1119:2;1110:11;;;;;:::i;:::-;;;979:154;;;1157:6;1143:21;;;;;449:723;;;;:::o;17498:157::-;17583:4;17622:25;17607:40;;;:11;:40;;;;17600:47;;17498:157;;;:::o;41705:589::-;41849:45;41876:4;41882:2;41886:7;41849:26;:45::i;:::-;41927:1;41911:18;;:4;:18;;;41907:187;;;41946:40;41978:7;41946:31;:40::i;:::-;41907:187;;;42016:2;42008:10;;:4;:10;;;42004:90;;42035:47;42068:4;42074:7;42035:32;:47::i;:::-;42004:90;41907:187;42122:1;42108:16;;:2;:16;;;42104:183;;;42141:45;42178:7;42141:36;:45::i;:::-;42104:183;;;42214:4;42208:10;;:2;:10;;;42204:83;;42235:40;42263:2;42267:7;42235:27;:40::i;:::-;42204:83;42104:183;41705:589;;;:::o;38886:125::-;;;;:::o;32706:319::-;32835:18;32841:2;32845:7;32835:5;:18::i;:::-;32886:53;32917:1;32921:2;32925:7;32934:4;32886:22;:53::i;:::-;32864:153;;;;;;;;;;;;:::i;:::-;;;;;;;;;32706:319;;;:::o;48496:149::-;48543:7;48603:16;48621:15;48586:51;;;;;;;;;:::i;:::-;;;;;;;;;;;;;48576:62;;;;;;48568:71;;48561:78;;48496:149;:::o;36950:853::-;37104:4;37125:15;:2;:13;;;:15::i;:::-;37121:675;;;37177:2;37161:36;;;37198:12;:10;:12::i;:::-;37212:4;37218:7;37227:4;37161:71;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;37157:584;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37419:1;37402:6;:13;:18;37398:328;;;37445:60;;;;;;;;;;:::i;:::-;;;;;;;;37398:328;37676:6;37670:13;37661:6;37657:2;37653:15;37646:38;37157:584;37293:41;;;37283:51;;;:6;:51;;;;37276:58;;;;;37121:675;37780:4;37773:11;;36950:853;;;;;;;:::o;38375:126::-;;;;:::o;43017:164::-;43121:10;:17;;;;43094:15;:24;43110:7;43094:24;;;;;;;;;;;:44;;;;43149:10;43165:7;43149:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43017:164;:::o;43808:988::-;44074:22;44124:1;44099:22;44116:4;44099:16;:22::i;:::-;:26;;;;:::i;:::-;44074:51;;44136:18;44157:17;:26;44175:7;44157:26;;;;;;;;;;;;44136:47;;44304:14;44290:10;:28;44286:328;;44335:19;44357:12;:18;44370:4;44357:18;;;;;;;;;;;;;;;:34;44376:14;44357:34;;;;;;;;;;;;44335:56;;44441:11;44408:12;:18;44421:4;44408:18;;;;;;;;;;;;;;;:30;44427:10;44408:30;;;;;;;;;;;:44;;;;44558:10;44525:17;:30;44543:11;44525:30;;;;;;;;;;;:43;;;;44320:294;44286:328;44710:17;:26;44728:7;44710:26;;;;;;;;;;;44703:33;;;44754:12;:18;44767:4;44754:18;;;;;;;;;;;;;;;:34;44773:14;44754:34;;;;;;;;;;;44747:41;;;43889:907;;43808:988;;:::o;45091:1079::-;45344:22;45389:1;45369:10;:17;;;;:21;;;;:::i;:::-;45344:46;;45401:18;45422:15;:24;45438:7;45422:24;;;;;;;;;;;;45401:45;;45773:19;45795:10;45806:14;45795:26;;;;;;;;:::i;:::-;;;;;;;;;;45773:48;;45859:11;45834:10;45845;45834:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;45970:10;45939:15;:28;45955:11;45939:28;;;;;;;;;;;:41;;;;46111:15;:24;46127:7;46111:24;;;;;;;;;;;46104:31;;;46146:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;45162:1008;;;45091:1079;:::o;42595:221::-;42680:14;42697:20;42714:2;42697:16;:20::i;:::-;42680:37;;42755:7;42728:12;:16;42741:2;42728:16;;;;;;;;;;;;;;;:24;42745:6;42728:24;;;;;;;;;;;:34;;;;42802:6;42773:17;:26;42791:7;42773:26;;;;;;;;;;;:35;;;;42669:147;42595:221;;:::o;33361:439::-;33455:1;33441:16;;:2;:16;;;;33433:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;33514:16;33522:7;33514;:16::i;:::-;33513:17;33505:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;33576:45;33605:1;33609:2;33613:7;33576:20;:45::i;:::-;33651:1;33634:9;:13;33644:2;33634:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;33682:2;33663:7;:16;33671:7;33663:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;33727:7;33723:2;33702:33;;33719:1;33702:33;;;;;;;;;;;;33748:44;33776:1;33780:2;33784:7;33748:19;:44::i;:::-;33361:439;;:::o;7342:326::-;7402:4;7659:1;7637:7;:19;;;:23;7630:30;;7342:326;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::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:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:116::-;1588:21;1603:5;1588:21;:::i;:::-;1581:5;1578:32;1568:60;;1624:1;1621;1614:12;1568:60;1518:116;:::o;1640:133::-;1683:5;1721:6;1708:20;1699:29;;1737:30;1761:5;1737:30;:::i;:::-;1640:133;;;;:::o;1779:323::-;1835:6;1884:2;1872:9;1863:7;1859:23;1855:32;1852:119;;;1890:79;;:::i;:::-;1852:119;2010:1;2035:50;2077:7;2068:6;2057:9;2053:22;2035:50;:::i;:::-;2025:60;;1981:114;1779:323;;;;:::o;2108:99::-;2160:6;2194:5;2188:12;2178:22;;2108:99;;;:::o;2213:169::-;2297:11;2331:6;2326:3;2319:19;2371:4;2366:3;2362:14;2347:29;;2213:169;;;;:::o;2388:307::-;2456:1;2466:113;2480:6;2477:1;2474:13;2466:113;;;2565:1;2560:3;2556:11;2550:18;2546:1;2541:3;2537:11;2530:39;2502:2;2499:1;2495:10;2490:15;;2466:113;;;2597:6;2594:1;2591:13;2588:101;;;2677:1;2668:6;2663:3;2659:16;2652:27;2588:101;2437:258;2388:307;;;:::o;2701:102::-;2742:6;2793:2;2789:7;2784:2;2777:5;2773:14;2769:28;2759:38;;2701:102;;;:::o;2809:364::-;2897:3;2925:39;2958:5;2925:39;:::i;:::-;2980:71;3044:6;3039:3;2980:71;:::i;:::-;2973:78;;3060:52;3105:6;3100:3;3093:4;3086:5;3082:16;3060:52;:::i;:::-;3137:29;3159:6;3137:29;:::i;:::-;3132:3;3128:39;3121:46;;2901:272;2809:364;;;;:::o;3179:313::-;3292:4;3330:2;3319:9;3315:18;3307:26;;3379:9;3373:4;3369:20;3365:1;3354:9;3350:17;3343:47;3407:78;3480:4;3471:6;3407:78;:::i;:::-;3399:86;;3179:313;;;;:::o;3498:77::-;3535:7;3564:5;3553:16;;3498:77;;;:::o;3581:122::-;3654:24;3672:5;3654:24;:::i;:::-;3647:5;3644:35;3634:63;;3693:1;3690;3683:12;3634:63;3581:122;:::o;3709:139::-;3755:5;3793:6;3780:20;3771:29;;3809:33;3836:5;3809:33;:::i;:::-;3709:139;;;;:::o;3854:329::-;3913:6;3962:2;3950:9;3941:7;3937:23;3933:32;3930:119;;;3968:79;;:::i;:::-;3930:119;4088:1;4113:53;4158:7;4149:6;4138:9;4134:22;4113:53;:::i;:::-;4103:63;;4059:117;3854:329;;;;:::o;4189:126::-;4226:7;4266:42;4259:5;4255:54;4244:65;;4189:126;;;:::o;4321:96::-;4358:7;4387:24;4405:5;4387:24;:::i;:::-;4376:35;;4321:96;;;:::o;4423:118::-;4510:24;4528:5;4510:24;:::i;:::-;4505:3;4498:37;4423:118;;:::o;4547:222::-;4640:4;4678:2;4667:9;4663:18;4655:26;;4691:71;4759:1;4748:9;4744:17;4735:6;4691:71;:::i;:::-;4547:222;;;;:::o;4775:122::-;4848:24;4866:5;4848:24;:::i;:::-;4841:5;4838:35;4828:63;;4887:1;4884;4877:12;4828:63;4775:122;:::o;4903:139::-;4949:5;4987:6;4974:20;4965:29;;5003:33;5030:5;5003:33;:::i;:::-;4903:139;;;;:::o;5048:474::-;5116:6;5124;5173:2;5161:9;5152:7;5148:23;5144:32;5141:119;;;5179:79;;:::i;:::-;5141:119;5299:1;5324:53;5369:7;5360:6;5349:9;5345:22;5324:53;:::i;:::-;5314:63;;5270:117;5426:2;5452:53;5497:7;5488:6;5477:9;5473:22;5452:53;:::i;:::-;5442:63;;5397:118;5048:474;;;;;:::o;5528:118::-;5615:24;5633:5;5615:24;:::i;:::-;5610:3;5603:37;5528:118;;:::o;5652:222::-;5745:4;5783:2;5772:9;5768:18;5760:26;;5796:71;5864:1;5853:9;5849:17;5840:6;5796:71;:::i;:::-;5652:222;;;;:::o;5880:619::-;5957:6;5965;5973;6022:2;6010:9;6001:7;5997:23;5993:32;5990:119;;;6028:79;;:::i;:::-;5990:119;6148:1;6173:53;6218:7;6209:6;6198:9;6194:22;6173:53;:::i;:::-;6163:63;;6119:117;6275:2;6301:53;6346:7;6337:6;6326:9;6322:22;6301:53;:::i;:::-;6291:63;;6246:118;6403:2;6429:53;6474:7;6465:6;6454:9;6450:22;6429:53;:::i;:::-;6419:63;;6374:118;5880:619;;;;;:::o;6505:117::-;6614:1;6611;6604:12;6628:180;6676:77;6673:1;6666:88;6773:4;6770:1;6763:15;6797:4;6794:1;6787:15;6814:281;6897:27;6919:4;6897:27;:::i;:::-;6889:6;6885:40;7027:6;7015:10;7012:22;6991:18;6979:10;6976:34;6973:62;6970:88;;;7038:18;;:::i;:::-;6970:88;7078:10;7074:2;7067:22;6857:238;6814:281;;:::o;7101:129::-;7135:6;7162:20;;:::i;:::-;7152:30;;7191:33;7219:4;7211:6;7191:33;:::i;:::-;7101:129;;;:::o;7236:311::-;7313:4;7403:18;7395:6;7392:30;7389:56;;;7425:18;;:::i;:::-;7389:56;7475:4;7467:6;7463:17;7455:25;;7535:4;7529;7525:15;7517:23;;7236:311;;;:::o;7553:117::-;7662:1;7659;7652:12;7693:710;7789:5;7814:81;7830:64;7887:6;7830:64;:::i;:::-;7814:81;:::i;:::-;7805:90;;7915:5;7944:6;7937:5;7930:21;7978:4;7971:5;7967:16;7960:23;;8031:4;8023:6;8019:17;8011:6;8007:30;8060:3;8052:6;8049:15;8046:122;;;8079:79;;:::i;:::-;8046:122;8194:6;8177:220;8211:6;8206:3;8203:15;8177:220;;;8286:3;8315:37;8348:3;8336:10;8315:37;:::i;:::-;8310:3;8303:50;8382:4;8377:3;8373:14;8366:21;;8253:144;8237:4;8232:3;8228:14;8221:21;;8177:220;;;8181:21;7795:608;;7693:710;;;;;:::o;8426:370::-;8497:5;8546:3;8539:4;8531:6;8527:17;8523:27;8513:122;;8554:79;;:::i;:::-;8513:122;8671:6;8658:20;8696:94;8786:3;8778:6;8771:4;8763:6;8759:17;8696:94;:::i;:::-;8687:103;;8503:293;8426:370;;;;:::o;8802:539::-;8886:6;8935:2;8923:9;8914:7;8910:23;8906:32;8903:119;;;8941:79;;:::i;:::-;8903:119;9089:1;9078:9;9074:17;9061:31;9119:18;9111:6;9108:30;9105:117;;;9141:79;;:::i;:::-;9105:117;9246:78;9316:7;9307:6;9296:9;9292:22;9246:78;:::i;:::-;9236:88;;9032:302;8802:539;;;;:::o;9347:329::-;9406:6;9455:2;9443:9;9434:7;9430:23;9426:32;9423:119;;;9461:79;;:::i;:::-;9423:119;9581:1;9606:53;9651:7;9642:6;9631:9;9627:22;9606:53;:::i;:::-;9596:63;;9552:117;9347:329;;;;:::o;9682:114::-;9749:6;9783:5;9777:12;9767:22;;9682:114;;;:::o;9802:184::-;9901:11;9935:6;9930:3;9923:19;9975:4;9970:3;9966:14;9951:29;;9802:184;;;;:::o;9992:132::-;10059:4;10082:3;10074:11;;10112:4;10107:3;10103:14;10095:22;;9992:132;;;:::o;10130:108::-;10207:24;10225:5;10207:24;:::i;:::-;10202:3;10195:37;10130:108;;:::o;10244:179::-;10313:10;10334:46;10376:3;10368:6;10334:46;:::i;:::-;10412:4;10407:3;10403:14;10389:28;;10244:179;;;;:::o;10429:113::-;10499:4;10531;10526:3;10522:14;10514:22;;10429:113;;;:::o;10578:732::-;10697:3;10726:54;10774:5;10726:54;:::i;:::-;10796:86;10875:6;10870:3;10796:86;:::i;:::-;10789:93;;10906:56;10956:5;10906:56;:::i;:::-;10985:7;11016:1;11001:284;11026:6;11023:1;11020:13;11001:284;;;11102:6;11096:13;11129:63;11188:3;11173:13;11129:63;:::i;:::-;11122:70;;11215:60;11268:6;11215:60;:::i;:::-;11205:70;;11061:224;11048:1;11045;11041:9;11036:14;;11001:284;;;11005:14;11301:3;11294:10;;10702:608;;;10578:732;;;;:::o;11316:373::-;11459:4;11497:2;11486:9;11482:18;11474:26;;11546:9;11540:4;11536:20;11532:1;11521:9;11517:17;11510:47;11574:108;11677:4;11668:6;11574:108;:::i;:::-;11566:116;;11316:373;;;;:::o;11695:117::-;11804:1;11801;11794:12;11818:308;11880:4;11970:18;11962:6;11959:30;11956:56;;;11992:18;;:::i;:::-;11956:56;12030:29;12052:6;12030:29;:::i;:::-;12022:37;;12114:4;12108;12104:15;12096:23;;11818:308;;;:::o;12132:154::-;12216:6;12211:3;12206;12193:30;12278:1;12269:6;12264:3;12260:16;12253:27;12132:154;;;:::o;12292:412::-;12370:5;12395:66;12411:49;12453:6;12411:49;:::i;:::-;12395:66;:::i;:::-;12386:75;;12484:6;12477:5;12470:21;12522:4;12515:5;12511:16;12560:3;12551:6;12546:3;12542:16;12539:25;12536:112;;;12567:79;;:::i;:::-;12536:112;12657:41;12691:6;12686:3;12681;12657:41;:::i;:::-;12376:328;12292:412;;;;;:::o;12724:340::-;12780:5;12829:3;12822:4;12814:6;12810:17;12806:27;12796:122;;12837:79;;:::i;:::-;12796:122;12954:6;12941:20;12979:79;13054:3;13046:6;13039:4;13031:6;13027:17;12979:79;:::i;:::-;12970:88;;12786:278;12724:340;;;;:::o;13070:509::-;13139:6;13188:2;13176:9;13167:7;13163:23;13159:32;13156:119;;;13194:79;;:::i;:::-;13156:119;13342:1;13331:9;13327:17;13314:31;13372:18;13364:6;13361:30;13358:117;;;13394:79;;:::i;:::-;13358:117;13499:63;13554:7;13545:6;13534:9;13530:22;13499:63;:::i;:::-;13489:73;;13285:287;13070:509;;;;:::o;13585:654::-;13663:6;13671;13720:2;13708:9;13699:7;13695:23;13691:32;13688:119;;;13726:79;;:::i;:::-;13688:119;13846:1;13871:53;13916:7;13907:6;13896:9;13892:22;13871:53;:::i;:::-;13861:63;;13817:117;14001:2;13990:9;13986:18;13973:32;14032:18;14024:6;14021:30;14018:117;;;14054:79;;:::i;:::-;14018:117;14159:63;14214:7;14205:6;14194:9;14190:22;14159:63;:::i;:::-;14149:73;;13944:288;13585:654;;;;;:::o;14245:684::-;14338:6;14346;14395:2;14383:9;14374:7;14370:23;14366:32;14363:119;;;14401:79;;:::i;:::-;14363:119;14549:1;14538:9;14534:17;14521:31;14579:18;14571:6;14568:30;14565:117;;;14601:79;;:::i;:::-;14565:117;14706:78;14776:7;14767:6;14756:9;14752:22;14706:78;:::i;:::-;14696:88;;14492:302;14833:2;14859:53;14904:7;14895:6;14884:9;14880:22;14859:53;:::i;:::-;14849:63;;14804:118;14245:684;;;;;:::o;14935:468::-;15000:6;15008;15057:2;15045:9;15036:7;15032:23;15028:32;15025:119;;;15063:79;;:::i;:::-;15025:119;15183:1;15208:53;15253:7;15244:6;15233:9;15229:22;15208:53;:::i;:::-;15198:63;;15154:117;15310:2;15336:50;15378:7;15369:6;15358:9;15354:22;15336:50;:::i;:::-;15326:60;;15281:115;14935:468;;;;;:::o;15409:307::-;15470:4;15560:18;15552:6;15549:30;15546:56;;;15582:18;;:::i;:::-;15546:56;15620:29;15642:6;15620:29;:::i;:::-;15612:37;;15704:4;15698;15694:15;15686:23;;15409:307;;;:::o;15722:410::-;15799:5;15824:65;15840:48;15881:6;15840:48;:::i;:::-;15824:65;:::i;:::-;15815:74;;15912:6;15905:5;15898:21;15950:4;15943:5;15939:16;15988:3;15979:6;15974:3;15970:16;15967:25;15964:112;;;15995:79;;:::i;:::-;15964:112;16085:41;16119:6;16114:3;16109;16085:41;:::i;:::-;15805:327;15722:410;;;;;:::o;16151:338::-;16206:5;16255:3;16248:4;16240:6;16236:17;16232:27;16222:122;;16263:79;;:::i;:::-;16222:122;16380:6;16367:20;16405:78;16479:3;16471:6;16464:4;16456:6;16452:17;16405:78;:::i;:::-;16396:87;;16212:277;16151:338;;;;:::o;16495:943::-;16590:6;16598;16606;16614;16663:3;16651:9;16642:7;16638:23;16634:33;16631:120;;;16670:79;;:::i;:::-;16631:120;16790:1;16815:53;16860:7;16851:6;16840:9;16836:22;16815:53;:::i;:::-;16805:63;;16761:117;16917:2;16943:53;16988:7;16979:6;16968:9;16964:22;16943:53;:::i;:::-;16933:63;;16888:118;17045:2;17071:53;17116:7;17107:6;17096:9;17092:22;17071:53;:::i;:::-;17061:63;;17016:118;17201:2;17190:9;17186:18;17173:32;17232:18;17224:6;17221:30;17218:117;;;17254:79;;:::i;:::-;17218:117;17359:62;17413:7;17404:6;17393:9;17389:22;17359:62;:::i;:::-;17349:72;;17144:287;16495:943;;;;;;;:::o;17444:474::-;17512:6;17520;17569:2;17557:9;17548:7;17544:23;17540:32;17537:119;;;17575:79;;:::i;:::-;17537:119;17695:1;17720:53;17765:7;17756:6;17745:9;17741:22;17720:53;:::i;:::-;17710:63;;17666:117;17822:2;17848:53;17893:7;17884:6;17873:9;17869:22;17848:53;:::i;:::-;17838:63;;17793:118;17444:474;;;;;:::o;17924:180::-;17972:77;17969:1;17962:88;18069:4;18066:1;18059:15;18093:4;18090:1;18083:15;18110:320;18154:6;18191:1;18185:4;18181:12;18171:22;;18238:1;18232:4;18228:12;18259:18;18249:81;;18315:4;18307:6;18303:17;18293:27;;18249:81;18377:2;18369:6;18366:14;18346:18;18343:38;18340:84;;;18396:18;;:::i;:::-;18340:84;18161:269;18110:320;;;:::o;18436:220::-;18576:34;18572:1;18564:6;18560:14;18553:58;18645:3;18640:2;18632:6;18628:15;18621:28;18436:220;:::o;18662:366::-;18804:3;18825:67;18889:2;18884:3;18825:67;:::i;:::-;18818:74;;18901:93;18990:3;18901:93;:::i;:::-;19019:2;19014:3;19010:12;19003:19;;18662:366;;;:::o;19034:419::-;19200:4;19238:2;19227:9;19223:18;19215:26;;19287:9;19281:4;19277:20;19273:1;19262:9;19258:17;19251:47;19315:131;19441:4;19315:131;:::i;:::-;19307:139;;19034:419;;;:::o;19459:249::-;19599:34;19595:1;19587:6;19583:14;19576:58;19668:32;19663:2;19655:6;19651:15;19644:57;19459:249;:::o;19714:366::-;19856:3;19877:67;19941:2;19936:3;19877:67;:::i;:::-;19870:74;;19953:93;20042:3;19953:93;:::i;:::-;20071:2;20066:3;20062:12;20055:19;;19714:366;;;:::o;20086:419::-;20252:4;20290:2;20279:9;20275:18;20267:26;;20339:9;20333:4;20329:20;20325:1;20314:9;20310:17;20303:47;20367:131;20493:4;20367:131;:::i;:::-;20359:139;;20086:419;;;:::o;20511:233::-;20651:34;20647:1;20639:6;20635:14;20628:58;20720:16;20715:2;20707:6;20703:15;20696:41;20511:233;:::o;20750:366::-;20892:3;20913:67;20977:2;20972:3;20913:67;:::i;:::-;20906:74;;20989:93;21078:3;20989:93;:::i;:::-;21107:2;21102:3;21098:12;21091:19;;20750:366;;;:::o;21122:419::-;21288:4;21326:2;21315:9;21311:18;21303:26;;21375:9;21369:4;21365:20;21361:1;21350:9;21346:17;21339:47;21403:131;21529:4;21403:131;:::i;:::-;21395:139;;21122:419;;;:::o;21547:230::-;21687:34;21683:1;21675:6;21671:14;21664:58;21756:13;21751:2;21743:6;21739:15;21732:38;21547:230;:::o;21783:366::-;21925:3;21946:67;22010:2;22005:3;21946:67;:::i;:::-;21939:74;;22022:93;22111:3;22022:93;:::i;:::-;22140:2;22135:3;22131:12;22124:19;;21783:366;;;:::o;22155:419::-;22321:4;22359:2;22348:9;22344:18;22336:26;;22408:9;22402:4;22398:20;22394:1;22383:9;22379:17;22372:47;22436:131;22562:4;22436:131;:::i;:::-;22428:139;;22155:419;;;:::o;22580:170::-;22720:22;22716:1;22708:6;22704:14;22697:46;22580:170;:::o;22756:366::-;22898:3;22919:67;22983:2;22978:3;22919:67;:::i;:::-;22912:74;;22995:93;23084:3;22995:93;:::i;:::-;23113:2;23108:3;23104:12;23097:19;;22756:366;;;:::o;23128:419::-;23294:4;23332:2;23321:9;23317:18;23309:26;;23381:9;23375:4;23371:20;23367:1;23356:9;23352:17;23345:47;23409:131;23535:4;23409:131;:::i;:::-;23401:139;;23128:419;;;:::o;23553:180::-;23601:77;23598:1;23591:88;23698:4;23695:1;23688:15;23722:4;23719:1;23712:15;23739:180;23787:77;23784:1;23777:88;23884:4;23881:1;23874:15;23908:4;23905:1;23898:15;23925:233;23964:3;23987:24;24005:5;23987:24;:::i;:::-;23978:33;;24033:66;24026:5;24023:77;24020:103;;;24103:18;;:::i;:::-;24020:103;24150:1;24143:5;24139:13;24132:20;;23925:233;;;:::o;24164:147::-;24265:11;24302:3;24287:18;;24164:147;;;;:::o;24317:114::-;;:::o;24437:398::-;24596:3;24617:83;24698:1;24693:3;24617:83;:::i;:::-;24610:90;;24709:93;24798:3;24709:93;:::i;:::-;24827:1;24822:3;24818:11;24811:18;;24437:398;;;:::o;24841:379::-;25025:3;25047:147;25190:3;25047:147;:::i;:::-;25040:154;;25211:3;25204:10;;24841:379;;;:::o;25226:231::-;25366:34;25362:1;25354:6;25350:14;25343:58;25435:14;25430:2;25422:6;25418:15;25411:39;25226:231;:::o;25463:366::-;25605:3;25626:67;25690:2;25685:3;25626:67;:::i;:::-;25619:74;;25702:93;25791:3;25702:93;:::i;:::-;25820:2;25815:3;25811:12;25804:19;;25463:366;;;:::o;25835:419::-;26001:4;26039:2;26028:9;26024:18;26016:26;;26088:9;26082:4;26078:20;26074:1;26063:9;26059:17;26052:47;26116:131;26242:4;26116:131;:::i;:::-;26108:139;;25835:419;;;:::o;26260:231::-;26400:34;26396:1;26388:6;26384:14;26377:58;26469:14;26464:2;26456:6;26452:15;26445:39;26260:231;:::o;26497:366::-;26639:3;26660:67;26724:2;26719:3;26660:67;:::i;:::-;26653:74;;26736:93;26825:3;26736:93;:::i;:::-;26854:2;26849:3;26845:12;26838:19;;26497:366;;;:::o;26869:419::-;27035:4;27073:2;27062:9;27058:18;27050:26;;27122:9;27116:4;27112:20;27108:1;27097:9;27093:17;27086:47;27150:131;27276:4;27150:131;:::i;:::-;27142:139;;26869:419;;;:::o;27294:174::-;27434:26;27430:1;27422:6;27418:14;27411:50;27294:174;:::o;27474:366::-;27616:3;27637:67;27701:2;27696:3;27637:67;:::i;:::-;27630:74;;27713:93;27802:3;27713:93;:::i;:::-;27831:2;27826:3;27822:12;27815:19;;27474:366;;;:::o;27846:419::-;28012:4;28050:2;28039:9;28035:18;28027:26;;28099:9;28093:4;28089:20;28085:1;28074:9;28070:17;28063:47;28127:131;28253:4;28127:131;:::i;:::-;28119:139;;27846:419;;;:::o;28271:228::-;28411:34;28407:1;28399:6;28395:14;28388:58;28480:11;28475:2;28467:6;28463:15;28456:36;28271:228;:::o;28505:366::-;28647:3;28668:67;28732:2;28727:3;28668:67;:::i;:::-;28661:74;;28744:93;28833:3;28744:93;:::i;:::-;28862:2;28857:3;28853:12;28846:19;;28505:366;;;:::o;28877:419::-;29043:4;29081:2;29070:9;29066:18;29058:26;;29130:9;29124:4;29120:20;29116:1;29105:9;29101:17;29094:47;29158:131;29284:4;29158:131;:::i;:::-;29150:139;;28877:419;;;:::o;29302:170::-;29442:22;29438:1;29430:6;29426:14;29419:46;29302:170;:::o;29478:366::-;29620:3;29641:67;29705:2;29700:3;29641:67;:::i;:::-;29634:74;;29717:93;29806:3;29717:93;:::i;:::-;29835:2;29830:3;29826:12;29819:19;;29478:366;;;:::o;29850:419::-;30016:4;30054:2;30043:9;30039:18;30031:26;;30103:9;30097:4;30093:20;30089:1;30078:9;30074:17;30067:47;30131:131;30257:4;30131:131;:::i;:::-;30123:139;;29850:419;;;:::o;30275:305::-;30315:3;30334:20;30352:1;30334:20;:::i;:::-;30329:25;;30368:20;30386:1;30368:20;:::i;:::-;30363:25;;30522:1;30454:66;30450:74;30447:1;30444:81;30441:107;;;30528:18;;:::i;:::-;30441:107;30572:1;30569;30565:9;30558:16;;30275:305;;;;:::o;30586:248::-;30726:34;30722:1;30714:6;30710:14;30703:58;30795:31;30790:2;30782:6;30778:15;30771:56;30586:248;:::o;30840:366::-;30982:3;31003:67;31067:2;31062:3;31003:67;:::i;:::-;30996:74;;31079:93;31168:3;31079:93;:::i;:::-;31197:2;31192:3;31188:12;31181:19;;30840:366;;;:::o;31212:419::-;31378:4;31416:2;31405:9;31401:18;31393:26;;31465:9;31459:4;31455:20;31451:1;31440:9;31436:17;31429:47;31493:131;31619:4;31493:131;:::i;:::-;31485:139;;31212:419;;;:::o;31637:248::-;31777:34;31773:1;31765:6;31761:14;31754:58;31846:31;31841:2;31833:6;31829:15;31822:56;31637:248;:::o;31891:366::-;32033:3;32054:67;32118:2;32113:3;32054:67;:::i;:::-;32047:74;;32130:93;32219:3;32130:93;:::i;:::-;32248:2;32243:3;32239:12;32232:19;;31891:366;;;:::o;32263:419::-;32429:4;32467:2;32456:9;32452:18;32444:26;;32516:9;32510:4;32506:20;32502:1;32491:9;32487:17;32480:47;32544:131;32670:4;32544:131;:::i;:::-;32536:139;;32263:419;;;:::o;32688:348::-;32728:7;32751:20;32769:1;32751:20;:::i;:::-;32746:25;;32785:20;32803:1;32785:20;:::i;:::-;32780:25;;32973:1;32905:66;32901:74;32898:1;32895:81;32890:1;32883:9;32876:17;32872:105;32869:131;;;32980:18;;:::i;:::-;32869:131;33028:1;33025;33021:9;33010:20;;32688:348;;;;:::o;33042:191::-;33082:4;33102:20;33120:1;33102:20;:::i;:::-;33097:25;;33136:20;33154:1;33136:20;:::i;:::-;33131:25;;33175:1;33172;33169:8;33166:34;;;33180:18;;:::i;:::-;33166:34;33225:1;33222;33218:9;33210:17;;33042:191;;;;:::o;33239:234::-;33379:34;33375:1;33367:6;33363:14;33356:58;33448:17;33443:2;33435:6;33431:15;33424:42;33239:234;:::o;33479:366::-;33621:3;33642:67;33706:2;33701:3;33642:67;:::i;:::-;33635:74;;33718:93;33807:3;33718:93;:::i;:::-;33836:2;33831:3;33827:12;33820:19;;33479:366;;;:::o;33851:419::-;34017:4;34055:2;34044:9;34040:18;34032:26;;34104:9;34098:4;34094:20;34090:1;34079:9;34075:17;34068:47;34132:131;34258:4;34132:131;:::i;:::-;34124:139;;33851:419;;;:::o;34276:148::-;34378:11;34415:3;34400:18;;34276:148;;;;:::o;34430:377::-;34536:3;34564:39;34597:5;34564:39;:::i;:::-;34619:89;34701:6;34696:3;34619:89;:::i;:::-;34612:96;;34717:52;34762:6;34757:3;34750:4;34743:5;34739:16;34717:52;:::i;:::-;34794:6;34789:3;34785:16;34778:23;;34540:267;34430:377;;;;:::o;34813:275::-;34945:3;34967:95;35058:3;35049:6;34967:95;:::i;:::-;34960:102;;35079:3;35072:10;;34813:275;;;;:::o;35094:141::-;35143:4;35166:3;35158:11;;35189:3;35186:1;35179:14;35223:4;35220:1;35210:18;35202:26;;35094:141;;;:::o;35265:845::-;35368:3;35405:5;35399:12;35434:36;35460:9;35434:36;:::i;:::-;35486:89;35568:6;35563:3;35486:89;:::i;:::-;35479:96;;35606:1;35595:9;35591:17;35622:1;35617:137;;;;35768:1;35763:341;;;;35584:520;;35617:137;35701:4;35697:9;35686;35682:25;35677:3;35670:38;35737:6;35732:3;35728:16;35721:23;;35617:137;;35763:341;35830:38;35862:5;35830:38;:::i;:::-;35890:1;35904:154;35918:6;35915:1;35912:13;35904:154;;;35992:7;35986:14;35982:1;35977:3;35973:11;35966:35;36042:1;36033:7;36029:15;36018:26;;35940:4;35937:1;35933:12;35928:17;;35904:154;;;36087:6;36082:3;36078:16;36071:23;;35770:334;;35584:520;;35372:738;;35265:845;;;;:::o;36116:589::-;36341:3;36363:95;36454:3;36445:6;36363:95;:::i;:::-;36356:102;;36475:95;36566:3;36557:6;36475:95;:::i;:::-;36468:102;;36587:92;36675:3;36666:6;36587:92;:::i;:::-;36580:99;;36696:3;36689:10;;36116:589;;;;;;:::o;36711:225::-;36851:34;36847:1;36839:6;36835:14;36828:58;36920:8;36915:2;36907:6;36903:15;36896:33;36711:225;:::o;36942:366::-;37084:3;37105:67;37169:2;37164:3;37105:67;:::i;:::-;37098:74;;37181:93;37270:3;37181:93;:::i;:::-;37299:2;37294:3;37290:12;37283:19;;36942:366;;;:::o;37314:419::-;37480:4;37518:2;37507:9;37503:18;37495:26;;37567:9;37561:4;37557:20;37553:1;37542:9;37538:17;37531:47;37595:131;37721:4;37595:131;:::i;:::-;37587:139;;37314:419;;;:::o;37739:182::-;37879:34;37875:1;37867:6;37863:14;37856:58;37739:182;:::o;37927:366::-;38069:3;38090:67;38154:2;38149:3;38090:67;:::i;:::-;38083:74;;38166:93;38255:3;38166:93;:::i;:::-;38284:2;38279:3;38275:12;38268:19;;37927:366;;;:::o;38299:419::-;38465:4;38503:2;38492:9;38488:18;38480:26;;38552:9;38546:4;38542:20;38538:1;38527:9;38523:17;38516:47;38580:131;38706:4;38580:131;:::i;:::-;38572:139;;38299:419;;;:::o;38724:224::-;38864:34;38860:1;38852:6;38848:14;38841:58;38933:7;38928:2;38920:6;38916:15;38909:32;38724:224;:::o;38954:366::-;39096:3;39117:67;39181:2;39176:3;39117:67;:::i;:::-;39110:74;;39193:93;39282:3;39193:93;:::i;:::-;39311:2;39306:3;39302:12;39295:19;;38954:366;;;:::o;39326:419::-;39492:4;39530:2;39519:9;39515:18;39507:26;;39579:9;39573:4;39569:20;39565:1;39554:9;39550:17;39543:47;39607:131;39733:4;39607:131;:::i;:::-;39599:139;;39326:419;;;:::o;39751:223::-;39891:34;39887:1;39879:6;39875:14;39868:58;39960:6;39955:2;39947:6;39943:15;39936:31;39751:223;:::o;39980:366::-;40122:3;40143:67;40207:2;40202:3;40143:67;:::i;:::-;40136:74;;40219:93;40308:3;40219:93;:::i;:::-;40337:2;40332:3;40328:12;40321:19;;39980:366;;;:::o;40352:419::-;40518:4;40556:2;40545:9;40541:18;40533:26;;40605:9;40599:4;40595:20;40591:1;40580:9;40576:17;40569:47;40633:131;40759:4;40633:131;:::i;:::-;40625:139;;40352:419;;;:::o;40777:180::-;40825:77;40822:1;40815:88;40922:4;40919:1;40912:15;40946:4;40943:1;40936:15;40963:176;40995:1;41012:20;41030:1;41012:20;:::i;:::-;41007:25;;41046:20;41064:1;41046:20;:::i;:::-;41041:25;;41085:1;41075:35;;41090:18;;:::i;:::-;41075:35;41131:1;41128;41124:9;41119:14;;40963:176;;;;:::o;41145:175::-;41285:27;41281:1;41273:6;41269:14;41262:51;41145:175;:::o;41326:366::-;41468:3;41489:67;41553:2;41548:3;41489:67;:::i;:::-;41482:74;;41565:93;41654:3;41565:93;:::i;:::-;41683:2;41678:3;41674:12;41667:19;;41326:366;;;:::o;41698:419::-;41864:4;41902:2;41891:9;41887:18;41879:26;;41951:9;41945:4;41941:20;41937:1;41926:9;41922:17;41915:47;41979:131;42105:4;41979:131;:::i;:::-;41971:139;;41698:419;;;:::o;42123:237::-;42263:34;42259:1;42251:6;42247:14;42240:58;42332:20;42327:2;42319:6;42315:15;42308:45;42123:237;:::o;42366:366::-;42508:3;42529:67;42593:2;42588:3;42529:67;:::i;:::-;42522:74;;42605:93;42694:3;42605:93;:::i;:::-;42723:2;42718:3;42714:12;42707:19;;42366:366;;;:::o;42738:419::-;42904:4;42942:2;42931:9;42927:18;42919:26;;42991:9;42985:4;42981:20;42977:1;42966:9;42962:17;42955:47;43019:131;43145:4;43019:131;:::i;:::-;43011:139;;42738:419;;;:::o;43163:185::-;43203:1;43220:20;43238:1;43220:20;:::i;:::-;43215:25;;43254:20;43272:1;43254:20;:::i;:::-;43249:25;;43293:1;43283:35;;43298:18;;:::i;:::-;43283:35;43340:1;43337;43333:9;43328:14;;43163:185;;;;:::o;43354:79::-;43393:7;43422:5;43411:16;;43354:79;;;:::o;43439:157::-;43544:45;43564:24;43582:5;43564:24;:::i;:::-;43544:45;:::i;:::-;43539:3;43532:58;43439:157;;:::o;43602:397::-;43742:3;43757:75;43828:3;43819:6;43757:75;:::i;:::-;43857:2;43852:3;43848:12;43841:19;;43870:75;43941:3;43932:6;43870:75;:::i;:::-;43970:2;43965:3;43961:12;43954:19;;43990:3;43983:10;;43602:397;;;;;:::o;44005:98::-;44056:6;44090:5;44084:12;44074:22;;44005:98;;;:::o;44109:168::-;44192:11;44226:6;44221:3;44214:19;44266:4;44261:3;44257:14;44242:29;;44109:168;;;;:::o;44283:360::-;44369:3;44397:38;44429:5;44397:38;:::i;:::-;44451:70;44514:6;44509:3;44451:70;:::i;:::-;44444:77;;44530:52;44575:6;44570:3;44563:4;44556:5;44552:16;44530:52;:::i;:::-;44607:29;44629:6;44607:29;:::i;:::-;44602:3;44598:39;44591:46;;44373:270;44283:360;;;;:::o;44649:640::-;44844:4;44882:3;44871:9;44867:19;44859:27;;44896:71;44964:1;44953:9;44949:17;44940:6;44896:71;:::i;:::-;44977:72;45045:2;45034:9;45030:18;45021:6;44977:72;:::i;:::-;45059;45127:2;45116:9;45112:18;45103:6;45059:72;:::i;:::-;45178:9;45172:4;45168:20;45163:2;45152:9;45148:18;45141:48;45206:76;45277:4;45268:6;45206:76;:::i;:::-;45198:84;;44649:640;;;;;;;:::o;45295:141::-;45351:5;45382:6;45376:13;45367:22;;45398:32;45424:5;45398:32;:::i;:::-;45295:141;;;;:::o;45442:349::-;45511:6;45560:2;45548:9;45539:7;45535:23;45531:32;45528:119;;;45566:79;;:::i;:::-;45528:119;45686:1;45711:63;45766:7;45757:6;45746:9;45742:22;45711:63;:::i;:::-;45701:73;;45657:127;45442:349;;;;:::o;45797:180::-;45845:77;45842:1;45835:88;45942:4;45939:1;45932:15;45966:4;45963:1;45956:15;45983:182;46123:34;46119:1;46111:6;46107:14;46100:58;45983:182;:::o;46171:366::-;46313:3;46334:67;46398:2;46393:3;46334:67;:::i;:::-;46327:74;;46410:93;46499:3;46410:93;:::i;:::-;46528:2;46523:3;46519:12;46512:19;;46171:366;;;:::o;46543:419::-;46709:4;46747:2;46736:9;46732:18;46724:26;;46796:9;46790:4;46786:20;46782:1;46771:9;46767:17;46760:47;46824:131;46950:4;46824:131;:::i;:::-;46816:139;;46543:419;;;:::o;46968:178::-;47108:30;47104:1;47096:6;47092:14;47085:54;46968:178;:::o;47152:366::-;47294:3;47315:67;47379:2;47374:3;47315:67;:::i;:::-;47308:74;;47391:93;47480:3;47391:93;:::i;:::-;47509:2;47504:3;47500:12;47493:19;;47152:366;;;:::o;47524:419::-;47690:4;47728:2;47717:9;47713:18;47705:26;;47777:9;47771:4;47767:20;47763:1;47752:9;47748:17;47741:47;47805:131;47931:4;47805:131;:::i;:::-;47797:139;;47524:419;;;:::o
Swarm Source
ipfs://dc53e072b007e0fe70f53469c0d32f2729c1210c9216b400013b002365da79c7