Contract Overview
Balance:
0 AVAX
AVAX Value:
$0.00
[ Download CSV Export ]
Latest 9 internal transactions
[ Download CSV Export ]
Contract Name:
ThortlesNFTClub
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at snowtrace.io on 2022-02-11 */ /* ████████╗██╗░░██╗░█████╗░██████╗░████████╗██╗░░░░░███████╗░██████╗ ███╗░░██╗███████╗████████╗ ╚══██╔══╝██║░░██║██╔══██╗██╔══██╗╚══██╔══╝██║░░░░░██╔════╝██╔════╝ ████╗░██║██╔════╝╚══██╔══╝ ░░░██║░░░███████║██║░░██║██████╔╝░░░██║░░░██║░░░░░█████╗░░╚█████╗░ ██╔██╗██║█████╗░░░░░██║░░░ ░░░██║░░░██╔══██║██║░░██║██╔══██╗░░░██║░░░██║░░░░░██╔══╝░░░╚═══██╗ ██║╚████║██╔══╝░░░░░██║░░░ ░░░██║░░░██║░░██║╚█████╔╝██║░░██║░░░██║░░░███████╗███████╗██████╔╝ ██║░╚███║██║░░░░░░░░██║░░░ ░░░╚═╝░░░╚═╝░░╚═╝░╚════╝░╚═╝░░╚═╝░░░╚═╝░░░╚══════╝╚══════╝╚═════╝░ ╚═╝░░╚══╝╚═╝░░░░░░░░╚═╝░░░ ░█████╗░██╗░░░░░██╗░░░██╗██████╗░ ██╔══██╗██║░░░░░██║░░░██║██╔══██╗ ██║░░╚═╝██║░░░░░██║░░░██║██████╦╝ ██║░░██╗██║░░░░░██║░░░██║██╔══██╗ ╚█████╔╝███████╗╚██████╔╝██████╦╝ ░╚════╝░╚══════╝░╚═════╝░╚═════╝░ */ // SPDX-License-Identifier: GPL-3.0 // File: contracts/ThortlesNFTClub.sol // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/contracts/utils/Context.sol // 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 v4.4.1 (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 Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts v4.4.1 (utils/Address.sol) pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // 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 v4.4.1 (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Enumerable.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // File: @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 v4.4.1 (token/ERC721/ERC721.sol) pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits a {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC721: approve to caller"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File: @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/ThortlesNFTClub.sol pragma solidity >=0.7.0 <0.9.0; contract ThortlesNFTClub is ERC721Enumerable, Ownable { using Strings for uint256; struct Winner { uint256 date; address winner; uint256 tokenId; } string public baseURI; string public baseExtension = ".json"; uint256 public cost = 3.5 ether; uint256 public whiteListedCost = 2.5 ether; uint256 public maxSupply = 5000; uint256 public maxMintAmount = 5; uint256 public maxWalletAmount = 10; uint256 public maxMintAmountForWhitelist = 2; uint256 public giveawayIntervalDays = 7; uint256 public drawNumber = 0; uint256[] private giveawayDates; uint256 private epochDay = 86400; uint256 public whitelistCount = 0; uint256 public whitelistAddedCount = 0; bool public paused = true; bool public giveawayActive = false; bool public airDropActive = false; bool public onlyWhitelisted = true; bool public dynamicCost = true; bool public withdrawPaused = true; address[] private airDropAddresses; mapping(address => bool) public whiteListAddresses; mapping(address => uint256) private addressMints; mapping(address => uint256) private addressMintedBalance; mapping(uint256 => Winner[]) private winnerLog; mapping(address => uint256) private _winners; mapping(address => uint) private ThortlesNFTsPreSale; constructor( string memory _name, string memory _symbol, string memory _initBaseURI ) ERC721(_name, _symbol) { setBaseURI(_initBaseURI); } // internal function _baseURI() internal view virtual override returns (string memory) { return baseURI; } function updateCost(bool isWhitelistedAdd) internal view returns (uint256 _cost) { if (isWhitelistedAdd) { return whiteListedCost; } if (!isWhitelistedAdd) { return cost; } } /* @function mint(_mintAmount) @description - Mints _mintAmount of Thortles NFTs for sender address. @param <uint256> _mintAmount - The number of Thortles NFTs to mint. */ function mint(uint256 _mintAmount) public payable { require(!paused, "The contract is paused"); uint256 supply = totalSupply(); require(_mintAmount > 0, "You need to mint at least 1 Thortle NFT"); require(_mintAmount <= maxMintAmount, "Max mint amount per session exceeded"); require(supply + _mintAmount <= maxSupply, "Max Thortles NFT limit exceeded"); if (msg.sender != owner()) { if(onlyWhitelisted == true) { require(isWhitelisted(msg.sender), "Sorry, address is not whitelisted"); uint256 ownerMintedCount = addressMintedBalance[msg.sender]; require(ownerMintedCount + _mintAmount <= maxMintAmountForWhitelist, "Max Thortles NFT per whitelisted address exceeded"); whitelistCount = ThortlesNFTsPreSale[msg.sender] += _mintAmount; } else { uint256 ownerMintedCount = addressMintedBalance[msg.sender]; require(_mintAmount <= maxMintAmount, "Max Thortles NFT per transaction exceeded"); require(ownerMintedCount + _mintAmount <= maxWalletAmount + whitelistCount, "Max Thortles NFT per wallet exceeded"); } if (dynamicCost) { require(msg.value >= updateCost(onlyWhitelisted) * _mintAmount, "Insufficient funds. Please add more AVAX to whitelist address."); } else { require(msg.value >= cost * _mintAmount, "Insufficient funds. Please add more AVAX to address."); } } for (uint256 i = 1; i <= _mintAmount; i++) { uint256 sply = totalSupply(); uint256 tokenId = sply + 1; addressMintedBalance[msg.sender]++; _safeMint(msg.sender, supply + i); if (tokenId == maxSupply) { activateGiveaway(); } sply = totalSupply(); } } /* @function activateGiveaway() @description - Activates the giveaway */ function activateGiveaway() private { giveawayActive = true; giveawayDates.push(block.timestamp + (epochDay * giveawayIntervalDays)); drawNumber++; } function manualGiveawayActivation() public onlyOwner { giveawayActive = true; giveawayDates.push(block.timestamp + (epochDay * giveawayIntervalDays)); drawNumber++; } /* @function isWhitelisted(_user) @description - Returns a True/False if owner address is whitelisted */ function isWhitelisted(address _user) public view returns (bool) { if (whiteListAddresses[_user]) { return true; } return false; } /* @function walletOfOwner(_owner) @description - Returns tokenIds per wallet address of owner */ 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(tokenId) @description - Gets the tokenId's URI */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory currentBaseURI = _baseURI(); return bytes(currentBaseURI).length > 0 ? string(abi.encodePacked(currentBaseURI, tokenId.toString(), baseExtension)) : ""; } /* @function setCost(newCost) @description - Sets the cost per NFT */ function setCost(uint256 newCost) public onlyOwner { cost = newCost; } /* @function setWhiteListCost(newWLCost) @description - Sets the cost per NFT for whitelist */ function setWhiteListCost(uint256 newWLCost) public onlyOwner { whiteListedCost = newWLCost; } /* @function setMaxWalletAmount(newMaxWalletAmount) @description - Sets max wallet amount */ function setMaxWalletAmount(uint256 newMaxWalletAmount) public onlyOwner { maxWalletAmount = newMaxWalletAmount; } /* @function setMaxMintAmount(newmaxMintAmount) @description - Sets max mint amount */ function setMaxMintAmount(uint256 newmaxMintAmount) public onlyOwner { maxMintAmount = newmaxMintAmount; } /* @function setNftPerAddressLimit(limit) @description - Sets the number of NFTs a whitelisted address can mint */ function setMaxMintAmountForWhitelist(uint256 limit) public onlyOwner { maxMintAmountForWhitelist = limit; } /* @function setBaseURI(newBaseURI) @description - Sets base URI (string) */ function setBaseURI(string memory newBaseURI) public onlyOwner { baseURI = newBaseURI; } /* @function setBaseExtension(newBaseExtension) @description - Sets base extension (string) */ function setBaseExtension(string memory newBaseExtension) public onlyOwner { baseExtension = newBaseExtension; } /* @function pause(state) @description - Pauses the contract (True/False) */ function pause(bool state) public onlyOwner { paused = state; } /* @function pauseWithdrawals(state) @description - Pauses withdrawal (True/False) */ function pauseWithdrawals(bool state) public onlyOwner { withdrawPaused = state; } /* @function dynamicCostState(state) @description - Turns dynamic costs on or off (True/False) */ function dynamicCostState(bool state) public onlyOwner { dynamicCost = state; } /* @function setOnlyWhitelisted(state) @description - Setting whitelist address to True/False for minting */ function setOnlyWhitelisted(bool state) public onlyOwner { onlyWhitelisted = state; } /* @function whitelistUsers() @description - Add user address to whitelist for priority minting */ function addWhitelistUsers(address[] memory addresses) public onlyOwner { for (uint256 account = 0; account < addresses.length; account++) { addToWhiteList(addresses[account]); whitelistAddedCount++; } } function addToWhiteList(address addr) private onlyOwner { whiteListAddresses[addr] = true; } /* @function selectWinners(noOfWinners) @description - Selects a winner if the current date allows. Uses NFT id to select winner. @param <uint> noOfWinners - The number of winners @returns <address> - The winner */ function selectWinners(uint256 noOfWinners) public onlyOwner { require(!paused, "ERROR: Contract is paused"); require(giveawayActive, "ERROR: Giveaway not active yet"); require(noOfWinners <= 50, "ERROR: Too many winners selected"); uint256 epochNow = block.timestamp; uint256 nextGiveawayDate = giveawayDates[giveawayDates.length - 1]; require( epochNow >= nextGiveawayDate, "ERROR: Cannot draw yet, too early" ); for (uint256 i = 0; i < noOfWinners; i++) { selectAWinner( 0, epochNow, msg.sender, nextGiveawayDate, msg.sender, 0 ); } giveawayDates.push(epochNow + (epochDay * giveawayIntervalDays)); drawNumber++; } /* @function selectAWinner() @param <uint> no - The number of winners @returns <address> - The winner */ function selectAWinner( uint256 it, uint256 epochNow, address sender, uint256 giveawayDate, address randomAddr, uint256 randomNo ) internal { uint256 winningToken = rand(randomAddr, randomNo); address winnerAddress = ERC721.ownerOf(winningToken); uint256 lastWon = _winners[winnerAddress]; bool alreadyWon = (lastWon == giveawayDate); Winner memory win; if ((it < 5) && alreadyWon) { uint256 newIt = it + 1; return selectAWinner( newIt, epochNow, sender, giveawayDate, winnerAddress, winningToken ); } else if ((it >= 5) && alreadyWon) { return; } else { win.date = giveawayDate; win.winner = winnerAddress; win.tokenId = winningToken; winnerLog[drawNumber].push(win); _winners[winnerAddress] = giveawayDate; } return; } function rand(address randomAddress, uint256 randomNo) internal view returns (uint256) { uint256 seed = uint256( keccak256( abi.encodePacked( (block.timestamp - randomNo) + block.difficulty + (( uint256(keccak256(abi.encodePacked(block.coinbase))) ) / (block.timestamp)) + block.gaslimit + ((uint256(keccak256(abi.encodePacked(randomAddress)))) / (block.timestamp)) + block.number ) ) ); return (seed - ((seed / maxSupply) * maxSupply)) + 1; } /* @function setGiveawayState(state) @description - Sets the giveaway state to active/not active (true/false) @param <address> state - The giveaway state */ function setGiveawayState(bool state) public onlyOwner { giveawayActive = state; } /* @function setGiveawayIntervalDays(noDays) @description - Set the number of days between each giveaway draw. @param <uint256> noDays - The number of days. */ function setGiveawayIntervalDays(uint256 noDays) public onlyOwner { giveawayIntervalDays = noDays; } /* @function airDrop(to) @description - Air drop an nft to address @param <address> to - The address to airdrop nft */ function airDrop(address to) public onlyOwner { uint256 supply = totalSupply(); require(airDropActive, "ERROR: Air drop is not active"); require(supply < maxSupply, "Max supply exceeded"); airDropAddresses.push(to); uint256 tokenId = supply + 1; _safeMint(to, tokenId); addressMintedBalance[to]++; if (tokenId == maxSupply) { activateGiveaway(); } supply = totalSupply(); } /* @function setAirDropStatus(value) @description - Sets the status of airdrop to true/false @param <bool> value - true/false */ function setAirDropStatus(bool value) public onlyOwner { airDropActive = value; } /* @function getWinnersForDraw(drawNo) @description - Gets all the winners for a given draw */ function getWinnersForDraw(uint256 drawNo) public view returns (Winner[] memory) { return winnerLog[drawNo]; } /* @function clearWinnersForDraw(drawNo) @description - clears out all the winner logs for that draw. This is for when the array gets large! */ function clearWinnersForDraw(uint256 drawNo) public onlyOwner { for (uint256 i = 0; i < 50; i++) { delete winnerLog[drawNo][i]; } } /* @function withDrawToInvest() @description - Sends contract balance to wallet for staking. */ function withDrawToInvest() public payable onlyOwner { require(!paused, "ERROR: Contract paused!"); require(!withdrawPaused, "ERROR: Withdrawals currently paused!"); (bool success, ) = payable(owner()).call{value: address(this).balance}(""); require(success); } }
[{"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":"addresses","type":"address[]"}],"name":"addWhitelistUsers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"airDrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"airDropActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"drawNo","type":"uint256"}],"name":"clearWinnersForDraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"drawNumber","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dynamicCost","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"state","type":"bool"}],"name":"dynamicCostState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"drawNo","type":"uint256"}],"name":"getWinnersForDraw","outputs":[{"components":[{"internalType":"uint256","name":"date","type":"uint256"},{"internalType":"address","name":"winner","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"internalType":"struct ThortlesNFTClub.Winner[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"giveawayActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"giveawayIntervalDays","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"isWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualGiveawayActivation","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxMintAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintAmountForWhitelist","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","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":"onlyWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[{"internalType":"bool","name":"state","type":"bool"}],"name":"pauseWithdrawals","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"noOfWinners","type":"uint256"}],"name":"selectWinners","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"value","type":"bool"}],"name":"setAirDropStatus","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":"noDays","type":"uint256"}],"name":"setGiveawayIntervalDays","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"state","type":"bool"}],"name":"setGiveawayState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newmaxMintAmount","type":"uint256"}],"name":"setMaxMintAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"limit","type":"uint256"}],"name":"setMaxMintAmountForWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxWalletAmount","type":"uint256"}],"name":"setMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"state","type":"bool"}],"name":"setOnlyWhitelisted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newWLCost","type":"uint256"}],"name":"setWhiteListCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whiteListAddresses","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"whiteListedCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"whitelistAddedCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"whitelistCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withDrawToInvest","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"withdrawPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60c06040526005608081905264173539b7b760d91b60a09081526200002891600c9190620001e6565b506730927f74c9de0000600d556722b1c8c1227a0000600e55611388600f556005601055600a60115560026012556007601355600060148190556201518060165560178190556018556019805465ffffffffffff1916650101010000011790553480156200009557600080fd5b5060405162003d5438038062003d54833981016040819052620000b89162000343565b825183908390620000d1906000906020850190620001e6565b508051620000e7906001906020840190620001e6565b50505062000104620000fe6200011860201b60201c565b6200011c565b6200010f816200016e565b50505062000427565b3390565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600a546001600160a01b03163314620001cd5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640160405180910390fd5b8051620001e290600b906020840190620001e6565b5050565b828054620001f490620003d4565b90600052602060002090601f01602090048101928262000218576000855562000263565b82601f106200023357805160ff191683800117855562000263565b8280016001018555821562000263579182015b828111156200026357825182559160200191906001019062000246565b506200027192915062000275565b5090565b5b8082111562000271576000815560010162000276565b600082601f8301126200029e57600080fd5b81516001600160401b0380821115620002bb57620002bb62000411565b604051601f8301601f19908116603f01168101908282118183101715620002e657620002e662000411565b816040528381526020925086838588010111156200030357600080fd5b600091505b8382101562000327578582018301518183018401529082019062000308565b83821115620003395760008385830101525b9695505050505050565b6000806000606084860312156200035957600080fd5b83516001600160401b03808211156200037157600080fd5b6200037f878388016200028c565b945060208601519150808211156200039657600080fd5b620003a4878388016200028c565b93506040860151915080821115620003bb57600080fd5b50620003ca868287016200028c565b9150509250925092565b600181811c90821680620003e957607f821691505b602082108114156200040b57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b61391d80620004376000396000f3fe6080604052600436106103ad5760003560e01c80635c975abb116101e7578063be745f771161010d578063d80ffb20116100a0578063f2624b5d1161006f578063f2624b5d14610aca578063f2fde38b14610ae0578063f4cc87ba14610b00578063f7cf8cf514610b2057600080fd5b8063d80ffb2014610a36578063da3ef23f14610a4c578063e62b1b1d14610a6c578063e985e9c514610a8157600080fd5b8063c87b56dd116100dc578063c87b56dd146109d8578063cd18d5a4146109f8578063d5abeb0114610a18578063d7d92cbc14610a2e57600080fd5b8063be745f771461096b578063c1b19de61461098d578063c6682862146109a3578063c7e9d141146109b857600080fd5b80638da5cb5b11610185578063a0712d6811610154578063a0712d6814610902578063a22cb46514610915578063aa4bde2814610935578063b88d4fde1461094b57600080fd5b80638da5cb5b1461087e578063920674dc1461089c57806395d89b41146108cc5780639c70b512146108e157600080fd5b8063686b2812116101c1578063686b2812146108145780636c0360eb1461083457806370a0823114610849578063715018a61461086957600080fd5b80635c975abb146107ba5780636352211e146107d4578063682a56eb146107f457600080fd5b806327a14fc2116102d75780633c9527641161026a57806344a0d68a1161023957806344a0d68a1461073b5780634616d4b21461075b5780634f6ccce71461077a57806355f804b31461079a57600080fd5b80633c952764146106ae57806341a1968d146106ce57806342842e0e146106ee578063438b63001461070e57600080fd5b806332e204eb116102a657806332e204eb1461062e578063342fdb521461064e57806339a2eb2a1461066e5780633af32abf1461068e57600080fd5b806327a14fc2146105b55780632bd71f79146105d55780632f3ffb9f146105eb5780632f745c591461060e57600080fd5b806310f37d9b1161034f5780631959ac071161031e5780631959ac07146105495780631c916b4014610569578063239c70ae1461057f57806323b872dd1461059557600080fd5b806310f37d9b146104c357806311560b32146104e357806313faede61461051057806318160ddd1461053457600080fd5b8063081812fc1161038b578063081812fc1461042b578063088a4ed014610463578063095ea7b3146104835780630e19fd66146104a357600080fd5b806301ffc9a7146103b257806302329a29146103e757806306fdde0314610409575b600080fd5b3480156103be57600080fd5b506103d26103cd3660046133e0565b610b36565b60405190151581526020015b60405180910390f35b3480156103f357600080fd5b506104076104023660046133c5565b610b61565b005b34801561041557600080fd5b5061041e610ba7565b6040516103de919061364f565b34801561043757600080fd5b5061044b610446366004613463565b610c39565b6040516001600160a01b0390911681526020016103de565b34801561046f57600080fd5b5061040761047e366004613463565b610cce565b34801561048f57600080fd5b5061040761049e3660046132e7565b610cfd565b3480156104af57600080fd5b506104076104be366004613463565b610e13565b3480156104cf57600080fd5b506104076104de3660046133c5565b610e42565b3480156104ef57600080fd5b506105036104fe366004613463565b610e86565b6040516103de91906135a9565b34801561051c57600080fd5b50610526600d5481565b6040519081526020016103de565b34801561054057600080fd5b50600854610526565b34801561055557600080fd5b50610407610564366004613463565b610f1b565b34801561057557600080fd5b5061052660135481565b34801561058b57600080fd5b5061052660105481565b3480156105a157600080fd5b506104076105b0366004613205565b610faf565b3480156105c157600080fd5b506104076105d0366004613463565b610fe0565b3480156105e157600080fd5b5061052660185481565b3480156105f757600080fd5b506019546103d29065010000000000900460ff1681565b34801561061a57600080fd5b506105266106293660046132e7565b61100f565b34801561063a57600080fd5b506104076106493660046133c5565b6110a5565b34801561065a57600080fd5b506019546103d29062010000900460ff1681565b34801561067a57600080fd5b50610407610689366004613463565b6110eb565b34801561069a57600080fd5b506103d26106a93660046131b7565b611311565b3480156106ba57600080fd5b506104076106c93660046133c5565b611342565b3480156106da57600080fd5b506104076106e9366004613463565b61138a565b3480156106fa57600080fd5b50610407610709366004613205565b6113b9565b34801561071a57600080fd5b5061072e6107293660046131b7565b6113d4565b6040516103de919061360b565b34801561074757600080fd5b50610407610756366004613463565b611476565b34801561076757600080fd5b506019546103d290610100900460ff1681565b34801561078657600080fd5b50610526610795366004613463565b6114a5565b3480156107a657600080fd5b506104076107b536600461341a565b611538565b3480156107c657600080fd5b506019546103d29060ff1681565b3480156107e057600080fd5b5061044b6107ef366004613463565b611575565b34801561080057600080fd5b5061040761080f3660046133c5565b6115ec565b34801561082057600080fd5b5061040761082f366004613311565b611636565b34801561084057600080fd5b5061041e6116b6565b34801561085557600080fd5b506105266108643660046131b7565b611744565b34801561087557600080fd5b506104076117cb565b34801561088a57600080fd5b50600a546001600160a01b031661044b565b3480156108a857600080fd5b506103d26108b73660046131b7565b601b6020526000908152604090205460ff1681565b3480156108d857600080fd5b5061041e611801565b3480156108ed57600080fd5b506019546103d2906301000000900460ff1681565b610407610910366004613463565b611810565b34801561092157600080fd5b506104076109303660046132bd565b611d52565b34801561094157600080fd5b5061052660115481565b34801561095757600080fd5b50610407610966366004613241565b611d5d565b34801561097757600080fd5b506019546103d290640100000000900460ff1681565b34801561099957600080fd5b5061052660125481565b3480156109af57600080fd5b5061041e611d95565b3480156109c457600080fd5b506104076109d3366004613463565b611da2565b3480156109e457600080fd5b5061041e6109f3366004613463565b611dd1565b348015610a0457600080fd5b50610407610a133660046131b7565b611eaf565b348015610a2457600080fd5b50610526600f5481565b61040761202d565b348015610a4257600080fd5b5061052660145481565b348015610a5857600080fd5b50610407610a6736600461341a565b612188565b348015610a7857600080fd5b506104076121c5565b348015610a8d57600080fd5b506103d2610a9c3660046131d2565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b348015610ad657600080fd5b5061052660175481565b348015610aec57600080fd5b50610407610afb3660046131b7565b612242565b348015610b0c57600080fd5b50610407610b1b3660046133c5565b6122da565b348015610b2c57600080fd5b50610526600e5481565b60006001600160e01b0319821663780e9d6360e01b1480610b5b5750610b5b82612326565b92915050565b600a546001600160a01b03163314610b945760405162461bcd60e51b8152600401610b8b906136b4565b60405180910390fd5b6019805460ff1916911515919091179055565b606060008054610bb6906137f9565b80601f0160208091040260200160405190810160405280929190818152602001828054610be2906137f9565b8015610c2f5780601f10610c0457610100808354040283529160200191610c2f565b820191906000526020600020905b815481529060010190602001808311610c1257829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b0316610cb25760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610b8b565b506000908152600460205260409020546001600160a01b031690565b600a546001600160a01b03163314610cf85760405162461bcd60e51b8152600401610b8b906136b4565b601055565b6000610d0882611575565b9050806001600160a01b0316836001600160a01b03161415610d765760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610b8b565b336001600160a01b0382161480610d925750610d928133610a9c565b610e045760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610b8b565b610e0e8383612376565b505050565b600a546001600160a01b03163314610e3d5760405162461bcd60e51b8152600401610b8b906136b4565b601355565b600a546001600160a01b03163314610e6c5760405162461bcd60e51b8152600401610b8b906136b4565b601980549115156101000261ff0019909216919091179055565b6060601e6000838152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b82821015610f105760008481526020908190206040805160608101825260038602909201805483526001808201546001600160a01b031684860152600290910154918301919091529083529092019101610ebb565b505050509050919050565b600a546001600160a01b03163314610f455760405162461bcd60e51b8152600401610b8b906136b4565b60005b6032811015610fab576000828152601e60205260409020805482908110610f7157610f716138a5565b6000918252602082206003909102018181556001810180546001600160a01b03191690556002015580610fa381613834565b915050610f48565b5050565b610fb933826123e4565b610fd55760405162461bcd60e51b8152600401610b8b906136e9565b610e0e8383836124db565b600a546001600160a01b0316331461100a5760405162461bcd60e51b8152600401610b8b906136b4565b601155565b600061101a83611744565b821061107c5760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b6064820152608401610b8b565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b600a546001600160a01b031633146110cf5760405162461bcd60e51b8152600401610b8b906136b4565b60198054911515620100000262ff000019909216919091179055565b600a546001600160a01b031633146111155760405162461bcd60e51b8152600401610b8b906136b4565b60195460ff16156111685760405162461bcd60e51b815260206004820152601960248201527f4552524f523a20436f6e747261637420697320706175736564000000000000006044820152606401610b8b565b601954610100900460ff166111bf5760405162461bcd60e51b815260206004820152601e60248201527f4552524f523a204769766561776179206e6f74206163746976652079657400006044820152606401610b8b565b60328111156112105760405162461bcd60e51b815260206004820181905260248201527f4552524f523a20546f6f206d616e792077696e6e6572732073656c65637465646044820152606401610b8b565b601580544291600091611225906001906137b6565b81548110611235576112356138a5565b906000526020600020015490508082101561129c5760405162461bcd60e51b815260206004820152602160248201527f4552524f523a2043616e6e6f742064726177207965742c20746f6f206561726c6044820152607960f81b6064820152608401610b8b565b60005b838110156112c9576112b76000843385336000612686565b806112c181613834565b91505061129f565b5060156013546016546112dc9190613797565b6112e6908461376b565b81546001810183556000928352602083200155601480549161130783613834565b9190505550505050565b6001600160a01b0381166000908152601b602052604081205460ff161561133a57506001919050565b506000919050565b600a546001600160a01b0316331461136c5760405162461bcd60e51b8152600401610b8b906136b4565b6019805491151563010000000263ff00000019909216919091179055565b600a546001600160a01b031633146113b45760405162461bcd60e51b8152600401610b8b906136b4565b601255565b610e0e83838360405180602001604052806000815250611d5d565b606060006113e183611744565b905060008167ffffffffffffffff8111156113fe576113fe6138bb565b604051908082528060200260200182016040528015611427578160200160208202803683370190505b50905060005b8281101561146e5761143f858261100f565b828281518110611451576114516138a5565b60209081029190910101528061146681613834565b91505061142d565b509392505050565b600a546001600160a01b031633146114a05760405162461bcd60e51b8152600401610b8b906136b4565b600d55565b60006114b060085490565b82106115135760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b6064820152608401610b8b565b60088281548110611526576115266138a5565b90600052602060002001549050919050565b600a546001600160a01b031633146115625760405162461bcd60e51b8152600401610b8b906136b4565b8051610fab90600b90602084019061309f565b6000818152600260205260408120546001600160a01b031680610b5b5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610b8b565b600a546001600160a01b031633146116165760405162461bcd60e51b8152600401610b8b906136b4565b601980549115156401000000000264ff0000000019909216919091179055565b600a546001600160a01b031633146116605760405162461bcd60e51b8152600401610b8b906136b4565b60005b8151811015610fab5761168e828281518110611681576116816138a5565b60200260200101516127b8565b6018805490600061169e83613834565b919050555080806116ae90613834565b915050611663565b600b80546116c3906137f9565b80601f01602080910402602001604051908101604052809291908181526020018280546116ef906137f9565b801561173c5780601f106117115761010080835404028352916020019161173c565b820191906000526020600020905b81548152906001019060200180831161171f57829003601f168201915b505050505081565b60006001600160a01b0382166117af5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610b8b565b506001600160a01b031660009081526003602052604090205490565b600a546001600160a01b031633146117f55760405162461bcd60e51b8152600401610b8b906136b4565b6117ff6000612806565b565b606060018054610bb6906137f9565b60195460ff161561185c5760405162461bcd60e51b8152602060048201526016602482015275151a194818dbdb9d1c9858dd081a5cc81c185d5cd95960521b6044820152606401610b8b565b600061186760085490565b9050600082116118c95760405162461bcd60e51b815260206004820152602760248201527f596f75206e65656420746f206d696e74206174206c6561737420312054686f726044820152661d1b194813919560ca1b6064820152608401610b8b565b6010548211156119275760405162461bcd60e51b8152602060048201526024808201527f4d6178206d696e7420616d6f756e74207065722073657373696f6e20657863656044820152631959195960e21b6064820152608401610b8b565b600f54611934838361376b565b11156119825760405162461bcd60e51b815260206004820152601f60248201527f4d61782054686f72746c6573204e4654206c696d6974206578636565646564006044820152606401610b8b565b600a546001600160a01b03163314611cd0576019546301000000900460ff16151560011415611abd576119b433611311565b611a0a5760405162461bcd60e51b815260206004820152602160248201527f536f7272792c2061646472657373206973206e6f742077686974656c697374656044820152601960fa1b6064820152608401610b8b565b336000908152601d6020526040902054601254611a27848361376b565b1115611a8f5760405162461bcd60e51b815260206004820152603160248201527f4d61782054686f72746c6573204e4654207065722077686974656c6973746564604482015270081859191c995cdcc8195e18d959591959607a1b6064820152608401610b8b565b33600090815260208052604081208054859290611aad90849061376b565b918290555060175550611ba79050565b336000908152601d6020526040902054601054831115611b315760405162461bcd60e51b815260206004820152602960248201527f4d61782054686f72746c6573204e465420706572207472616e73616374696f6e60448201526808195e18d95959195960ba1b6064820152608401610b8b565b601754601154611b41919061376b565b611b4b848361376b565b1115611ba55760405162461bcd60e51b8152602060048201526024808201527f4d61782054686f72746c6573204e4654207065722077616c6c657420657863656044820152631959195960e21b6064820152608401610b8b565b505b601954640100000000900460ff1615611c56576019548290611bd2906301000000900460ff16612858565b611bdc9190613797565b341015611c515760405162461bcd60e51b815260206004820152603e60248201527f496e73756666696369656e742066756e64732e20506c6561736520616464206d60448201527f6f7265204156415820746f2077686974656c69737420616464726573732e00006064820152608401610b8b565b611cd0565b81600d54611c649190613797565b341015611cd05760405162461bcd60e51b815260206004820152603460248201527f496e73756666696369656e742066756e64732e20506c6561736520616464206d60448201527337b9329020ab20ac103a379030b2323932b9b99760611b6064820152608401610b8b565b60015b828111610e0e576000611ce560085490565b90506000611cf482600161376b565b336000908152601d60205260408120805492935090611d1283613834565b90915550611d2b905033611d26858761376b565b61287a565b600f54811415611d3d57611d3d6121ef565b50819050611d4a81613834565b915050611cd3565b610fab338383612894565b611d6733836123e4565b611d835760405162461bcd60e51b8152600401610b8b906136e9565b611d8f84848484612963565b50505050565b600c80546116c3906137f9565b600a546001600160a01b03163314611dcc5760405162461bcd60e51b8152600401610b8b906136b4565b600e55565b6000818152600260205260409020546060906001600160a01b0316611e505760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610b8b565b6000611e5a612996565b90506000815111611e7a5760405180602001604052806000815250611ea8565b80611e84846129a5565b600c604051602001611e98939291906134a8565b6040516020818303038152906040525b9392505050565b600a546001600160a01b03163314611ed95760405162461bcd60e51b8152600401610b8b906136b4565b6000611ee460085490565b60195490915062010000900460ff16611f3f5760405162461bcd60e51b815260206004820152601d60248201527f4552524f523a204169722064726f70206973206e6f74206163746976650000006044820152606401610b8b565b600f548110611f865760405162461bcd60e51b815260206004820152601360248201527213585e081cdd5c1c1b1e48195e18d959591959606a1b6044820152606401610b8b565b601a80546001808201835560009283527f057c384a7d1c54f3a1b2e5e67b2617b8224fdfd1ea7234eea573a6ff665ff63e90910180546001600160a01b0319166001600160a01b038616179055611fde90839061376b565b9050611fea838261287a565b6001600160a01b0383166000908152601d6020526040812080549161200e83613834565b9190505550600f54811415612025576120256121ef565b600854611d8f565b600a546001600160a01b031633146120575760405162461bcd60e51b8152600401610b8b906136b4565b60195460ff16156120aa5760405162461bcd60e51b815260206004820152601760248201527f4552524f523a20436f6e747261637420706175736564210000000000000000006044820152606401610b8b565b60195465010000000000900460ff16156121145760405162461bcd60e51b815260206004820152602560248201527f4552524f523a20205769746864726177616c732063757272656e746c79207061604482015264757365642160d81b6064820152608401610b8b565b6000612128600a546001600160a01b031690565b6001600160a01b03164760405160006040518083038185875af1925050503d8060008114612172576040519150601f19603f3d011682016040523d82523d6000602084013e612177565b606091505b505090508061218557600080fd5b50565b600a546001600160a01b031633146121b25760405162461bcd60e51b8152600401610b8b906136b4565b8051610fab90600c90602084019061309f565b600a546001600160a01b031633146121ef5760405162461bcd60e51b8152600401610b8b906136b4565b6019805461ff00191661010017905560135460165460159161221091613797565b61221a904261376b565b81546001810183556000928352602083200155601480549161223b83613834565b9190505550565b600a546001600160a01b0316331461226c5760405162461bcd60e51b8152600401610b8b906136b4565b6001600160a01b0381166122d15760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b8b565b61218581612806565b600a546001600160a01b031633146123045760405162461bcd60e51b8152600401610b8b906136b4565b60198054911515650100000000000265ff000000000019909216919091179055565b60006001600160e01b031982166380ac58cd60e01b148061235757506001600160e01b03198216635b5e139f60e01b145b80610b5b57506301ffc9a760e01b6001600160e01b0319831614610b5b565b600081815260046020526040902080546001600160a01b0319166001600160a01b03841690811790915581906123ab82611575565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600260205260408120546001600160a01b031661245d5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610b8b565b600061246883611575565b9050806001600160a01b0316846001600160a01b031614806124a35750836001600160a01b031661249884610c39565b6001600160a01b0316145b806124d357506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b03166124ee82611575565b6001600160a01b0316146125565760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401610b8b565b6001600160a01b0382166125b85760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610b8b565b6125c3838383612aa3565b6125ce600082612376565b6001600160a01b03831660009081526003602052604081208054600192906125f79084906137b6565b90915550506001600160a01b038216600090815260036020526040812080546001929061262590849061376b565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b60006126928383612b5b565b9050600061269f82611575565b6001600160a01b0381166000908152601f6020908152604080832054815160608101835284815292830184905290820192909252919250908682149060058b1080156126e85750815b156127155760006126fa8c600161376b565b905061270a818c8c8c898b612686565b5050505050506127b0565b60058b101580156127235750815b156127325750505050506127b0565b8781526001600160a01b03808516602080840182815260408086018a81526014546000908152601e85528281208054600181810183559183528683208a5160039092020190815594519085018054919098166001600160a01b03199091161790965551600290920191909155918352601f9052902088905550505050505b505050505050565b600a546001600160a01b031633146127e25760405162461bcd60e51b8152600401610b8b906136b4565b6001600160a01b03166000908152601b60205260409020805460ff19166001179055565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60008115612868575050600e5490565b81612875575050600d5490565b919050565b610fab828260405180602001604052806000815250612c81565b816001600160a01b0316836001600160a01b031614156128f65760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610b8b565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b61296e8484846124db565b61297a84848484612cb4565b611d8f5760405162461bcd60e51b8152600401610b8b90613662565b6060600b8054610bb6906137f9565b6060816129c95750506040805180820190915260018152600360fc1b602082015290565b8160005b81156129f357806129dd81613834565b91506129ec9050600a83613783565b91506129cd565b60008167ffffffffffffffff811115612a0e57612a0e6138bb565b6040519080825280601f01601f191660200182016040528015612a38576020820181803683370190505b5090505b84156124d357612a4d6001836137b6565b9150612a5a600a8661384f565b612a6590603061376b565b60f81b818381518110612a7a57612a7a6138a5565b60200101906001600160f81b031916908160001a905350612a9c600a86613783565b9450612a3c565b6001600160a01b038316612afe57612af981600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b612b21565b816001600160a01b0316836001600160a01b031614612b2157612b218382612dc1565b6001600160a01b038216612b3857610e0e81612e5e565b826001600160a01b0316826001600160a01b031614610e0e57610e0e8282612f0d565b6040516bffffffffffffffffffffffff19606084901b1660208201526000908190439042906034016040516020818303038152906040528051906020012060001c612ba69190613783565b6040516bffffffffffffffffffffffff194160601b166020820152459042906034016040516020818303038152906040528051906020012060001c612beb9190613783565b44612bf688426137b6565b612c00919061376b565b612c0a919061376b565b612c14919061376b565b612c1e919061376b565b612c28919061376b565b604051602001612c3a91815260200190565b60408051601f198184030181529190528051602090910120600f54909150612c628183613783565b612c6c9190613797565b612c7690826137b6565b6124d390600161376b565b612c8b8383612f51565b612c986000848484612cb4565b610e0e5760405162461bcd60e51b8152600401610b8b90613662565b60006001600160a01b0384163b15612db657604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290612cf890339089908890889060040161356c565b602060405180830381600087803b158015612d1257600080fd5b505af1925050508015612d42575060408051601f3d908101601f19168201909252612d3f918101906133fd565b60015b612d9c573d808015612d70576040519150601f19603f3d011682016040523d82523d6000602084013e612d75565b606091505b508051612d945760405162461bcd60e51b8152600401610b8b90613662565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506124d3565b506001949350505050565b60006001612dce84611744565b612dd891906137b6565b600083815260076020526040902054909150808214612e2b576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b600854600090612e70906001906137b6565b60008381526009602052604081205460088054939450909284908110612e9857612e986138a5565b906000526020600020015490508060088381548110612eb957612eb96138a5565b6000918252602080832090910192909255828152600990915260408082208490558582528120556008805480612ef157612ef161388f565b6001900381819060005260206000200160009055905550505050565b6000612f1883611744565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b6001600160a01b038216612fa75760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610b8b565b6000818152600260205260409020546001600160a01b03161561300c5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610b8b565b61301860008383612aa3565b6001600160a01b038216600090815260036020526040812080546001929061304190849061376b565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b8280546130ab906137f9565b90600052602060002090601f0160209004810192826130cd5760008555613113565b82601f106130e657805160ff1916838001178555613113565b82800160010185558215613113579182015b828111156131135782518255916020019190600101906130f8565b5061311f929150613123565b5090565b5b8082111561311f5760008155600101613124565b600067ffffffffffffffff831115613152576131526138bb565b613165601f8401601f191660200161373a565b905082815283838301111561317957600080fd5b828260208301376000602084830101529392505050565b80356001600160a01b038116811461287557600080fd5b8035801515811461287557600080fd5b6000602082840312156131c957600080fd5b611ea882613190565b600080604083850312156131e557600080fd5b6131ee83613190565b91506131fc60208401613190565b90509250929050565b60008060006060848603121561321a57600080fd5b61322384613190565b925061323160208501613190565b9150604084013590509250925092565b6000806000806080858703121561325757600080fd5b61326085613190565b935061326e60208601613190565b925060408501359150606085013567ffffffffffffffff81111561329157600080fd5b8501601f810187136132a257600080fd5b6132b187823560208401613138565b91505092959194509250565b600080604083850312156132d057600080fd5b6132d983613190565b91506131fc602084016131a7565b600080604083850312156132fa57600080fd5b61330383613190565b946020939093013593505050565b6000602080838503121561332457600080fd5b823567ffffffffffffffff8082111561333c57600080fd5b818501915085601f83011261335057600080fd5b813581811115613362576133626138bb565b8060051b915061337384830161373a565b8181528481019084860184860187018a101561338e57600080fd5b600095505b838610156133b8576133a481613190565b835260019590950194918601918601613393565b5098975050505050505050565b6000602082840312156133d757600080fd5b611ea8826131a7565b6000602082840312156133f257600080fd5b8135611ea8816138d1565b60006020828403121561340f57600080fd5b8151611ea8816138d1565b60006020828403121561342c57600080fd5b813567ffffffffffffffff81111561344357600080fd5b8201601f8101841361345457600080fd5b6124d384823560208401613138565b60006020828403121561347557600080fd5b5035919050565b600081518084526134948160208601602086016137cd565b601f01601f19169290920160200192915050565b6000845160206134bb8285838a016137cd565b8551918401916134ce8184848a016137cd565b8554920191600090600181811c90808316806134eb57607f831692505b85831081141561350957634e487b7160e01b85526022600452602485fd5b80801561351d576001811461352e5761355b565b60ff1985168852838801955061355b565b60008b81526020902060005b858110156135535781548a82015290840190880161353a565b505083880195505b50939b9a5050505050505050505050565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061359f9083018461347c565b9695505050505050565b602080825282518282018190526000919060409081850190868401855b828110156135fe57815180518552868101516001600160a01b03168786015285015185850152606090930192908501906001016135c6565b5091979650505050505050565b6020808252825182820181905260009190848201906040850190845b8181101561364357835183529284019291840191600101613627565b50909695505050505050565b602081526000611ea8602083018461347c565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b604051601f8201601f1916810167ffffffffffffffff81118282101715613763576137636138bb565b604052919050565b6000821982111561377e5761377e613863565b500190565b60008261379257613792613879565b500490565b60008160001904831182151516156137b1576137b1613863565b500290565b6000828210156137c8576137c8613863565b500390565b60005b838110156137e85781810151838201526020016137d0565b83811115611d8f5750506000910152565b600181811c9082168061380d57607f821691505b6020821081141561382e57634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561384857613848613863565b5060010190565b60008261385e5761385e613879565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b03198116811461218557600080fdfea26469706673582212204b2a51bb35caa95085406b868b5b6ad2a44c12a4b57c4f0edb1fab6053c5764664736f6c63430008070033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000001154686f72746c6573204e465420436c75620000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003544e4300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d644359717a4a75634e4c37467a6231635951755a70707478525a3271364a4a756943576b6b3768394d71394a2f00000000000000000000
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000001154686f72746c6573204e465420436c75620000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003544e4300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d644359717a4a75634e4c37467a6231635951755a70707478525a3271364a4a756943576b6b3768394d71394a2f00000000000000000000
-----Decoded View---------------
Arg [0] : _name (string): Thortles NFT Club
Arg [1] : _symbol (string): TNC
Arg [2] : _initBaseURI (string): ipfs://QmdCYqzJucNL7Fzb1cYQuZpptxRZ2q6JJuiCWkk7h9Mq9J/
-----Encoded View---------------
10 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000011
Arg [4] : 54686f72746c6573204e465420436c7562000000000000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [6] : 544e430000000000000000000000000000000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [8] : 697066733a2f2f516d644359717a4a75634e4c37467a6231635951755a707074
Arg [9] : 78525a3271364a4a756943576b6b3768394d71394a2f00000000000000000000
Deployed ByteCode Sourcemap
47120:14234:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40887:224;;;;;;;;;;-1:-1:-1;40887:224:0;;;;;:::i;:::-;;:::i;:::-;;;10093:14:1;;10086:22;10068:41;;10056:2;10041:18;40887:224:0;;;;;;;;54376:71;;;;;;;;;;-1:-1:-1;54376:71:0;;;;;:::i;:::-;;:::i;:::-;;28381:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;29940:221::-;;;;;;;;;;-1:-1:-1;29940:221:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;7882:32:1;;;7864:51;;7852:2;7837:18;29940:221:0;7718:203:1;53477:114:0;;;;;;;;;;-1:-1:-1;53477:114:0;;;;;:::i;:::-;;:::i;29463:411::-;;;;;;;;;;-1:-1:-1;29463:411:0;;;;;:::i;:::-;;:::i;59289:114::-;;;;;;;;;;-1:-1:-1;59289:114:0;;;;;:::i;:::-;;:::i;58994:96::-;;;;;;;;;;-1:-1:-1;58994:96:0;;;;;:::i;:::-;;:::i;60452:124::-;;;;;;;;;;-1:-1:-1;60452:124:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;47387:31::-;;;;;;;;;;;;;;;;;;;24648:25:1;;;24636:2;24621:18;47387:31:0;24502:177:1;41527:113:0;;;;;;;;;;-1:-1:-1;41615:10:0;:17;41527:113;;60748:167;;;;;;;;;;-1:-1:-1;60748:167:0;;;;;:::i;:::-;;:::i;47632:39::-;;;;;;;;;;;;;;;;47506:32;;;;;;;;;;;;;;;;30690:339;;;;;;;;;;-1:-1:-1;30690:339:0;;;;;:::i;:::-;;:::i;53246:122::-;;;;;;;;;;-1:-1:-1;53246:122:0;;;;;:::i;:::-;;:::i;47821:38::-;;;;;;;;;;;;;;;;48047:33;;;;;;;;;;-1:-1:-1;48047:33:0;;;;;;;;;;;41195:256;;;;;;;;;;-1:-1:-1;41195:256:0;;;;;:::i;:::-;;:::i;60230:95::-;;;;;;;;;;-1:-1:-1;60230:95:0;;;;;:::i;:::-;;:::i;47935:33::-;;;;;;;;;;-1:-1:-1;47935:33:0;;;;;;;;;;;55819:885;;;;;;;;;;-1:-1:-1;55819:885:0;;;;;:::i;:::-;;:::i;51647:165::-;;;;;;;;;;-1:-1:-1;51647:165:0;;;;;:::i;:::-;;:::i;54987:93::-;;;;;;;;;;-1:-1:-1;54987:93:0;;;;;:::i;:::-;;:::i;53729:116::-;;;;;;;;;;-1:-1:-1;53729:116:0;;;;;:::i;:::-;;:::i;31100:185::-;;;;;;;;;;-1:-1:-1;31100:185:0;;;;;:::i;:::-;;:::i;51932:330::-;;;;;;;;;;-1:-1:-1;51932:330:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;52828:78::-;;;;;;;;;;-1:-1:-1;52828:78:0;;;;;:::i;:::-;;:::i;47896:34::-;;;;;;;;;;-1:-1:-1;47896:34:0;;;;;;;;;;;41717:233;;;;;;;;;;-1:-1:-1;41717:233:0;;;;;:::i;:::-;;:::i;53944:96::-;;;;;;;;;;-1:-1:-1;53944:96:0;;;;;:::i;:::-;;:::i;47866:25::-;;;;;;;;;;-1:-1:-1;47866:25:0;;;;;;;;28075:239;;;;;;;;;;-1:-1:-1;28075:239:0;;;;;:::i;:::-;;:::i;54767:89::-;;;;;;;;;;-1:-1:-1;54767:89:0;;;;;:::i;:::-;;:::i;55204:252::-;;;;;;;;;;-1:-1:-1;55204:252:0;;;;;:::i;:::-;;:::i;47319:21::-;;;;;;;;;;;;;:::i;27805:208::-;;;;;;;;;;-1:-1:-1;27805:208:0;;;;;:::i;:::-;;:::i;7351:103::-;;;;;;;;;;;;;:::i;6700:87::-;;;;;;;;;;-1:-1:-1;6773:6:0;;-1:-1:-1;;;;;6773:6:0;6700:87;;48128:50;;;;;;;;;;-1:-1:-1;48128:50:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;28550:104;;;;;;;;;;;;;:::i;47973:34::-;;;;;;;;;;-1:-1:-1;47973:34:0;;;;;;;;;;;49181:1845;;;;;;:::i;:::-;;:::i;30233:155::-;;;;;;;;;;-1:-1:-1;30233:155:0;;;;;:::i;:::-;;:::i;47543:35::-;;;;;;;;;;;;;;;;31356:328;;;;;;;;;;-1:-1:-1;31356:328:0;;;;;:::i;:::-;;:::i;48012:30::-;;;;;;;;;;-1:-1:-1;48012:30:0;;;;;;;;;;;47583:44;;;;;;;;;;;;;;;;47345:37;;;;;;;;;;;;;:::i;53025:104::-;;;;;;;;;;-1:-1:-1;53025:104:0;;;;;:::i;:::-;;:::i;52356:378::-;;;;;;;;;;-1:-1:-1;52356:378:0;;;;;:::i;:::-;;:::i;59561:501::-;;;;;;;;;;-1:-1:-1;59561:501:0;;;;;:::i;:::-;;:::i;47470:31::-;;;;;;;;;;;;;;;;61045:306;;;:::i;47676:29::-;;;;;;;;;;;;;;;;54157:120;;;;;;;;;;-1:-1:-1;54157:120:0;;;;;:::i;:::-;;:::i;51318:198::-;;;;;;;;;;;;;:::i;30459:164::-;;;;;;;;;;-1:-1:-1;30459:164:0;;;;;:::i;:::-;-1:-1:-1;;;;;30580:25:0;;;30556:4;30580:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;30459:164;47783:33;;;;;;;;;;;;;;;;7609:201;;;;;;;;;;-1:-1:-1;7609:201:0;;;;;:::i;:::-;;:::i;54557:90::-;;;;;;;;;;-1:-1:-1;54557:90:0;;;;;:::i;:::-;;:::i;47423:42::-;;;;;;;;;;;;;;;;40887:224;40989:4;-1:-1:-1;;;;;;41013:50:0;;-1:-1:-1;;;41013:50:0;;:90;;;41067:36;41091:11;41067:23;:36::i;:::-;41006:97;40887:224;-1:-1:-1;;40887:224:0:o;54376:71::-;6773:6;;-1:-1:-1;;;;;6773:6:0;5504:10;6920:23;6912:68;;;;-1:-1:-1;;;6912:68:0;;;;;;;:::i;:::-;;;;;;;;;54427:6:::1;:14:::0;;-1:-1:-1;;54427:14:0::1;::::0;::::1;;::::0;;;::::1;::::0;;54376:71::o;28381:100::-;28435:13;28468:5;28461:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28381:100;:::o;29940:221::-;30016:7;33283:16;;;:7;:16;;;;;;-1:-1:-1;;;;;33283:16:0;30036:73;;;;-1:-1:-1;;;30036:73:0;;20345:2:1;30036:73:0;;;20327:21:1;20384:2;20364:18;;;20357:30;20423:34;20403:18;;;20396:62;-1:-1:-1;;;20474:18:1;;;20467:42;20526:19;;30036:73:0;20143:408:1;30036:73:0;-1:-1:-1;30129:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;30129:24:0;;29940:221::o;53477:114::-;6773:6;;-1:-1:-1;;;;;6773:6:0;5504:10;6920:23;6912:68;;;;-1:-1:-1;;;6912:68:0;;;;;;;:::i;:::-;53553:13:::1;:32:::0;53477:114::o;29463:411::-;29544:13;29560:23;29575:7;29560:14;:23::i;:::-;29544:39;;29608:5;-1:-1:-1;;;;;29602:11:0;:2;-1:-1:-1;;;;;29602:11:0;;;29594:57;;;;-1:-1:-1;;;29594:57:0;;22353:2:1;29594:57:0;;;22335:21:1;22392:2;22372:18;;;22365:30;22431:34;22411:18;;;22404:62;-1:-1:-1;;;22482:18:1;;;22475:31;22523:19;;29594:57:0;22151:397:1;29594:57:0;5504:10;-1:-1:-1;;;;;29686:21:0;;;;:62;;-1:-1:-1;29711:37:0;29728:5;5504:10;30459:164;:::i;29711:37::-;29664:168;;;;-1:-1:-1;;;29664:168:0;;17148:2:1;29664:168:0;;;17130:21:1;17187:2;17167:18;;;17160:30;17226:34;17206:18;;;17199:62;17297:26;17277:18;;;17270:54;17341:19;;29664:168:0;16946:420:1;29664:168:0;29845:21;29854:2;29858:7;29845:8;:21::i;:::-;29533:341;29463:411;;:::o;59289:114::-;6773:6;;-1:-1:-1;;;;;6773:6:0;5504:10;6920:23;6912:68;;;;-1:-1:-1;;;6912:68:0;;;;;;;:::i;:::-;59366:20:::1;:29:::0;59289:114::o;58994:96::-;6773:6;;-1:-1:-1;;;;;6773:6:0;5504:10;6920:23;6912:68;;;;-1:-1:-1;;;6912:68:0;;;;;;;:::i;:::-;59060:14:::1;:22:::0;;;::::1;;;;-1:-1:-1::0;;59060:22:0;;::::1;::::0;;;::::1;::::0;;58994:96::o;60452:124::-;60516:15;60551:9;:17;60561:6;60551:17;;;;;;;;;;;60544:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;60544:24:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;60452:124;;;:::o;60748:167::-;6773:6;;-1:-1:-1;;;;;6773:6:0;5504:10;6920:23;6912:68;;;;-1:-1:-1;;;6912:68:0;;;;;;;:::i;:::-;60826:9:::1;60821:87;60845:2;60841:1;:6;60821:87;;;60876:17;::::0;;;:9:::1;:17;::::0;;;;:20;;60894:1;;60876:20;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;::::1;::::0;;::::1;;60869:27:::0;;;::::1;::::0;::::1;::::0;;-1:-1:-1;;;;;;60869:27:0::1;::::0;;::::1;;::::0;60849:3;::::1;::::0;::::1;:::i;:::-;;;;60821:87;;;;60748:167:::0;:::o;30690:339::-;30885:41;5504:10;30918:7;30885:18;:41::i;:::-;30877:103;;;;-1:-1:-1;;;30877:103:0;;;;;;;:::i;:::-;30993:28;31003:4;31009:2;31013:7;30993:9;:28::i;53246:122::-;6773:6;;-1:-1:-1;;;;;6773:6:0;5504:10;6920:23;6912:68;;;;-1:-1:-1;;;6912:68:0;;;;;;;:::i;:::-;53326:15:::1;:36:::0;53246:122::o;41195:256::-;41292:7;41328:23;41345:5;41328:16;:23::i;:::-;41320:5;:31;41312:87;;;;-1:-1:-1;;;41312:87:0;;11727:2:1;41312:87:0;;;11709:21:1;11766:2;11746:18;;;11739:30;11805:34;11785:18;;;11778:62;-1:-1:-1;;;11856:18:1;;;11849:41;11907:19;;41312:87:0;11525:407:1;41312:87:0;-1:-1:-1;;;;;;41417:19:0;;;;;;;;:12;:19;;;;;;;;:26;;;;;;;;;41195:256::o;60230:95::-;6773:6;;-1:-1:-1;;;;;6773:6:0;5504:10;6920:23;6912:68;;;;-1:-1:-1;;;6912:68:0;;;;;;;:::i;:::-;60296:13:::1;:21:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;60296:21:0;;::::1;::::0;;;::::1;::::0;;60230:95::o;55819:885::-;6773:6;;-1:-1:-1;;;;;6773:6:0;5504:10;6920:23;6912:68;;;;-1:-1:-1;;;6912:68:0;;;;;;;:::i;:::-;55900:6:::1;::::0;::::1;;55899:7;55891:45;;;::::0;-1:-1:-1;;;55891:45:0;;24350:2:1;55891:45:0::1;::::0;::::1;24332:21:1::0;24389:2;24369:18;;;24362:30;24428:27;24408:18;;;24401:55;24473:18;;55891:45:0::1;24148:349:1::0;55891:45:0::1;55955:14;::::0;::::1;::::0;::::1;;;55947:57;;;::::0;-1:-1:-1;;;55947:57:0;;23991:2:1;55947:57:0::1;::::0;::::1;23973:21:1::0;24030:2;24010:18;;;24003:30;24069:32;24049:18;;;24042:60;24119:18;;55947:57:0::1;23789:354:1::0;55947:57:0::1;56038:2;56023:11;:17;;56015:62;;;::::0;-1:-1:-1;;;56015:62:0;;16787:2:1;56015:62:0::1;::::0;::::1;16769:21:1::0;;;16806:18;;;16799:30;16865:34;16845:18;;;16838:62;16917:18;;56015:62:0::1;16585:356:1::0;56015:62:0::1;56162:13;56176:20:::0;;56109:15:::1;::::0;56090:16:::1;::::0;56176:24:::1;::::0;56199:1:::1;::::0;56176:24:::1;:::i;:::-;56162:39;;;;;;;;:::i;:::-;;;;;;;;;56135:66;;56248:16;56236:8;:28;;56214:111;;;::::0;-1:-1:-1;;;56214:111:0;;11325:2:1;56214:111:0::1;::::0;::::1;11307:21:1::0;11364:2;11344:18;;;11337:30;11403:34;11383:18;;;11376:62;-1:-1:-1;;;11454:18:1;;;11447:31;11495:19;;56214:111:0::1;11123:397:1::0;56214:111:0::1;56343:9;56338:257;56362:11;56358:1;:15;56338:257;;;56395:188;56427:1;56447:8;56474:10;56503:16;56538:10;56567:1;56395:13;:188::i;:::-;56375:3:::0;::::1;::::0;::::1;:::i;:::-;;;;56338:257;;;;56607:13;56649:20;;56638:8;;:31;;;;:::i;:::-;56626:44;::::0;:8;:44:::1;:::i;:::-;56607:64:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;56607:64:0;;;::::1;::::0;;::::1;::::0;56684:10:::1;:12:::0;;;::::1;::::0;::::1;:::i;:::-;;;;;;55880:824;;55819:885:::0;:::o;51647:165::-;-1:-1:-1;;;;;51725:25:0;;51706:4;51725:25;;;:18;:25;;;;;;;;51721:65;;;-1:-1:-1;51772:4:0;;51647:165;-1:-1:-1;51647:165:0:o;51721:65::-;-1:-1:-1;51801:5:0;;51647:165;-1:-1:-1;51647:165:0:o;54987:93::-;6773:6;;-1:-1:-1;;;;;6773:6:0;5504:10;6920:23;6912:68;;;;-1:-1:-1;;;6912:68:0;;;;;;;:::i;:::-;55051:15:::1;:23:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;55051:23:0;;::::1;::::0;;;::::1;::::0;;54987:93::o;53729:116::-;6773:6;;-1:-1:-1;;;;;6773:6:0;5504:10;6920:23;6912:68;;;;-1:-1:-1;;;6912:68:0;;;;;;;:::i;:::-;53806:25:::1;:33:::0;53729:116::o;31100:185::-;31238:39;31255:4;31261:2;31265:7;31238:39;;;;;;;;;;;;:16;:39::i;51932:330::-;51992:16;52017:23;52043:17;52053:6;52043:9;:17::i;:::-;52017:43;;52067:25;52109:15;52095:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;52095:30:0;;52067:58;;52137:9;52132:103;52152:15;52148:1;:19;52132:103;;;52197:30;52217:6;52225:1;52197:19;:30::i;:::-;52183:8;52192:1;52183:11;;;;;;;;:::i;:::-;;;;;;;;;;:44;52169:3;;;;:::i;:::-;;;;52132:103;;;-1:-1:-1;52248:8:0;51932:330;-1:-1:-1;;;51932:330:0:o;52828:78::-;6773:6;;-1:-1:-1;;;;;6773:6:0;5504:10;6920:23;6912:68;;;;-1:-1:-1;;;6912:68:0;;;;;;;:::i;:::-;52886:4:::1;:14:::0;52828:78::o;41717:233::-;41792:7;41828:30;41615:10;:17;;41527:113;41828:30;41820:5;:38;41812:95;;;;-1:-1:-1;;;41812:95:0;;23173:2:1;41812:95:0;;;23155:21:1;23212:2;23192:18;;;23185:30;23251:34;23231:18;;;23224:62;-1:-1:-1;;;23302:18:1;;;23295:42;23354:19;;41812:95:0;22971:408:1;41812:95:0;41925:10;41936:5;41925:17;;;;;;;;:::i;:::-;;;;;;;;;41918:24;;41717:233;;;:::o;53944:96::-;6773:6;;-1:-1:-1;;;;;6773:6:0;5504:10;6920:23;6912:68;;;;-1:-1:-1;;;6912:68:0;;;;;;;:::i;:::-;54014:20;;::::1;::::0;:7:::1;::::0;:20:::1;::::0;::::1;::::0;::::1;:::i;28075:239::-:0;28147:7;28183:16;;;:7;:16;;;;;;-1:-1:-1;;;;;28183:16:0;28218:19;28210:73;;;;-1:-1:-1;;;28210:73:0;;17984:2:1;28210:73:0;;;17966:21:1;18023:2;18003:18;;;17996:30;18062:34;18042:18;;;18035:62;-1:-1:-1;;;18113:18:1;;;18106:39;18162:19;;28210:73:0;17782:405:1;54767:89:0;6773:6;;-1:-1:-1;;;;;6773:6:0;5504:10;6920:23;6912:68;;;;-1:-1:-1;;;6912:68:0;;;;;;;:::i;:::-;54831:11:::1;:19:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;54831:19:0;;::::1;::::0;;;::::1;::::0;;54767:89::o;55204:252::-;6773:6;;-1:-1:-1;;;;;6773:6:0;5504:10;6920:23;6912:68;;;;-1:-1:-1;;;6912:68:0;;;;;;;:::i;:::-;55292:15:::1;55287:162;55323:9;:16;55313:7;:26;55287:162;;;55367:34;55382:9;55392:7;55382:18;;;;;;;;:::i;:::-;;;;;;;55367:14;:34::i;:::-;55416:19;:21:::0;;;:19:::1;:21;::::0;::::1;:::i;:::-;;;;;;55341:9;;;;;:::i;:::-;;;;55287:162;;47319:21:::0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;27805:208::-;27877:7;-1:-1:-1;;;;;27905:19:0;;27897:74;;;;-1:-1:-1;;;27897:74:0;;17573:2:1;27897:74:0;;;17555:21:1;17612:2;17592:18;;;17585:30;17651:34;17631:18;;;17624:62;-1:-1:-1;;;17702:18:1;;;17695:40;17752:19;;27897:74:0;17371:406:1;27897:74:0;-1:-1:-1;;;;;;27989:16:0;;;;;:9;:16;;;;;;;27805:208::o;7351:103::-;6773:6;;-1:-1:-1;;;;;6773:6:0;5504:10;6920:23;6912:68;;;;-1:-1:-1;;;6912:68:0;;;;;;;:::i;:::-;7416:30:::1;7443:1;7416:18;:30::i;:::-;7351:103::o:0;28550:104::-;28606:13;28639:7;28632:14;;;;;:::i;49181:1845::-;49247:6;;;;49246:7;49238:42;;;;-1:-1:-1;;;49238:42:0;;12558:2:1;49238:42:0;;;12540:21:1;12597:2;12577:18;;;12570:30;-1:-1:-1;;;12616:18:1;;;12609:52;12678:18;;49238:42:0;12356:346:1;49238:42:0;49287:14;49304:13;41615:10;:17;;41527:113;49304:13;49287:30;;49346:1;49332:11;:15;49324:67;;;;-1:-1:-1;;;49324:67:0;;20758:2:1;49324:67:0;;;20740:21:1;20797:2;20777:18;;;20770:30;20836:34;20816:18;;;20809:62;-1:-1:-1;;;20887:18:1;;;20880:37;20934:19;;49324:67:0;20556:403:1;49324:67:0;49421:13;;49406:11;:28;;49398:77;;;;-1:-1:-1;;;49398:77:0;;16382:2:1;49398:77:0;;;16364:21:1;16421:2;16401:18;;;16394:30;16460:34;16440:18;;;16433:62;-1:-1:-1;;;16511:18:1;;;16504:34;16555:19;;49398:77:0;16180:400:1;49398:77:0;49514:9;;49490:20;49499:11;49490:6;:20;:::i;:::-;:33;;49482:77;;;;-1:-1:-1;;;49482:77:0;;18812:2:1;49482:77:0;;;18794:21:1;18851:2;18831:18;;;18824:30;18890:33;18870:18;;;18863:61;18941:18;;49482:77:0;18610:355:1;49482:77:0;6773:6;;-1:-1:-1;;;;;6773:6:0;49572:10;:21;49568:1096;;49609:15;;;;;;;:23;;49628:4;49609:23;49606:734;;;49657:25;49671:10;49657:13;:25::i;:::-;49649:71;;;;-1:-1:-1;;;49649:71:0;;19172:2:1;49649:71:0;;;19154:21:1;19211:2;19191:18;;;19184:30;19250:34;19230:18;;;19223:62;-1:-1:-1;;;19301:18:1;;;19294:31;19342:19;;49649:71:0;18970:397:1;49649:71:0;49783:10;49735:24;49762:32;;;:20;:32;;;;;;49852:25;;49818:30;49837:11;49762:32;49818:30;:::i;:::-;:59;;49810:121;;;;-1:-1:-1;;;49810:121:0;;18394:2:1;49810:121:0;;;18376:21:1;18433:2;18413:18;;;18406:30;18472:34;18452:18;;;18445:62;-1:-1:-1;;;18523:18:1;;;18516:47;18580:19;;49810:121:0;18192:413:1;49810:121:0;49983:10;49963:31;;;;:19;:31;;;;;:46;;49998:11;;49963:31;:46;;49998:11;;49963:46;:::i;:::-;;;;;-1:-1:-1;49946:14:0;:63;-1:-1:-1;49606:734:0;;-1:-1:-1;49606:734:0;;50090:10;50042:24;50069:32;;;:20;:32;;;;;;50139:13;;50124:28;;;50116:82;;;;-1:-1:-1;;;50116:82:0;;19574:2:1;50116:82:0;;;19556:21:1;19613:2;19593:18;;;19586:30;19652:34;19632:18;;;19625:62;-1:-1:-1;;;19703:18:1;;;19696:39;19752:19;;50116:82:0;19372:405:1;50116:82:0;50273:14;;50255:15;;:32;;;;:::i;:::-;50221:30;50240:11;50221:16;:30;:::i;:::-;:66;;50213:115;;;;-1:-1:-1;;;50213:115:0;;23586:2:1;50213:115:0;;;23568:21:1;23625:2;23605:18;;;23598:30;23664:34;23644:18;;;23637:62;-1:-1:-1;;;23715:18:1;;;23708:34;23759:19;;50213:115:0;23384:400:1;50213:115:0;50027:313;49606:734;50356:11;;;;;;;50352:305;;;50416:15;;50435:11;;50405:27;;50416:15;;;;;50405:10;:27::i;:::-;:41;;;;:::i;:::-;50392:9;:54;;50384:129;;;;-1:-1:-1;;;50384:129:0;;10546:2:1;50384:129:0;;;10528:21:1;10585:2;10565:18;;;10558:30;10624:34;10604:18;;;10597:62;10695:32;10675:18;;;10668:60;10745:19;;50384:129:0;10344:426:1;50384:129:0;50352:305;;;50577:11;50570:4;;:18;;;;:::i;:::-;50557:9;:31;;50549:96;;;;-1:-1:-1;;;50549:96:0;;12909:2:1;50549:96:0;;;12891:21:1;12948:2;12928:18;;;12921:30;12987:34;12967:18;;;12960:62;-1:-1:-1;;;13038:18:1;;;13031:50;13098:19;;50549:96:0;12707:416:1;50549:96:0;50693:1;50676:345;50701:11;50696:1;:16;50676:345;;50730:12;50745:13;41615:10;:17;;41527:113;50745:13;50730:28;-1:-1:-1;50769:15:0;50787:8;50730:28;50794:1;50787:8;:::i;:::-;50827:10;50806:32;;;;:20;:32;;;;;:34;;50769:26;;-1:-1:-1;50806:32:0;:34;;;:::i;:::-;;;;-1:-1:-1;50849:33:0;;-1:-1:-1;50859:10:0;50871;50880:1;50871:6;:10;:::i;:::-;50849:9;:33::i;:::-;50914:9;;50903:7;:20;50899:79;;;50944:18;:16;:18::i;:::-;-1:-1:-1;50714:3:0;;-1:-1:-1;50714:3:0;;;:::i;:::-;;;;50676:345;;30233:155;30328:52;5504:10;30361:8;30371;30328:18;:52::i;31356:328::-;31531:41;5504:10;31564:7;31531:18;:41::i;:::-;31523:103;;;;-1:-1:-1;;;31523:103:0;;;;;;;:::i;:::-;31637:39;31651:4;31657:2;31661:7;31670:5;31637:13;:39::i;:::-;31356:328;;;;:::o;47345:37::-;;;;;;;:::i;53025:104::-;6773:6;;-1:-1:-1;;;;;6773:6:0;5504:10;6920:23;6912:68;;;;-1:-1:-1;;;6912:68:0;;;;;;;:::i;:::-;53096:15:::1;:27:::0;53025:104::o;52356:378::-;33259:4;33283:16;;;:7;:16;;;;;;52429:13;;-1:-1:-1;;;;;33283:16:0;52451:76;;;;-1:-1:-1;;;52451:76:0;;21937:2:1;52451:76:0;;;21919:21:1;21976:2;21956:18;;;21949:30;22015:34;21995:18;;;21988:62;-1:-1:-1;;;22066:18:1;;;22059:45;22121:19;;52451:76:0;21735:411:1;52451:76:0;52540:28;52571:10;:8;:10::i;:::-;52540:41;;52626:1;52601:14;52595:28;:32;:133;;;;;;;;;;;;;;;;;52663:14;52679:18;:7;:16;:18::i;:::-;52699:13;52646:67;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;52595:133;52588:140;52356:378;-1:-1:-1;;;52356:378:0:o;59561:501::-;6773:6;;-1:-1:-1;;;;;6773:6:0;5504:10;6920:23;6912:68;;;;-1:-1:-1;;;6912:68:0;;;;;;;:::i;:::-;59618:14:::1;59635:13;41615:10:::0;:17;;41527:113;59635:13:::1;59667;::::0;59618:30;;-1:-1:-1;59667:13:0;;::::1;;;59659:55;;;::::0;-1:-1:-1;;;59659:55:0;;15205:2:1;59659:55:0::1;::::0;::::1;15187:21:1::0;15244:2;15224:18;;;15217:30;15283:31;15263:18;;;15256:59;15332:18;;59659:55:0::1;15003:353:1::0;59659:55:0::1;59742:9;;59733:6;:18;59725:50;;;::::0;-1:-1:-1;;;59725:50:0;;10977:2:1;59725:50:0::1;::::0;::::1;10959:21:1::0;11016:2;10996:18;;;10989:30;-1:-1:-1;;;11035:18:1;;;11028:49;11094:18;;59725:50:0::1;10775:343:1::0;59725:50:0::1;59786:16;:25:::0;;::::1;::::0;;::::1;::::0;;-1:-1:-1;59786:25:0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;59786:25:0::1;-1:-1:-1::0;;;;;59786:25:0;::::1;;::::0;;59842:10:::1;::::0;:6;;:10:::1;:::i;:::-;59824:28;;59865:22;59875:2;59879:7;59865:9;:22::i;:::-;-1:-1:-1::0;;;;;59898:24:0;::::1;;::::0;;;:20:::1;:24;::::0;;;;:26;;;::::1;::::0;::::1;:::i;:::-;;;;;;59953:9;;59942:7;:20;59938:79;;;59983:18;:16;:18::i;:::-;41615:10:::0;:17;60041:13:::1;41527:113:::0;61045:306;6773:6;;-1:-1:-1;;;;;6773:6:0;5504:10;6920:23;6912:68;;;;-1:-1:-1;;;6912:68:0;;;;;;;:::i;:::-;61118:6:::1;::::0;::::1;;61117:7;61109:43;;;::::0;-1:-1:-1;;;61109:43:0;;14094:2:1;61109:43:0::1;::::0;::::1;14076:21:1::0;14133:2;14113:18;;;14106:30;14172:25;14152:18;;;14145:53;14215:18;;61109:43:0::1;13892:347:1::0;61109:43:0::1;61172:14;::::0;;;::::1;;;61171:15;61163:65;;;::::0;-1:-1:-1;;;61163:65:0;;15563:2:1;61163:65:0::1;::::0;::::1;15545:21:1::0;15602:2;15582:18;;;15575:30;15641:34;15621:18;;;15614:62;-1:-1:-1;;;15692:18:1;;;15685:35;15737:19;;61163:65:0::1;15361:401:1::0;61163:65:0::1;61243:12;61269:7;6773:6:::0;;-1:-1:-1;;;;;6773:6:0;;6700:87;61269:7:::1;-1:-1:-1::0;;;;;61261:21:0::1;61290;61261:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;61242:74;;;61335:7;61327:16;;;::::0;::::1;;61098:253;61045:306::o:0;54157:120::-;6773:6;;-1:-1:-1;;;;;6773:6:0;5504:10;6920:23;6912:68;;;;-1:-1:-1;;;6912:68:0;;;;;;;:::i;:::-;54239:32;;::::1;::::0;:13:::1;::::0;:32:::1;::::0;::::1;::::0;::::1;:::i;51318:198::-:0;6773:6;;-1:-1:-1;;;;;6773:6:0;5504:10;6920:23;6912:68;;;;-1:-1:-1;;;6912:68:0;;;;;;;:::i;:::-;51382:14:::1;:21:::0;;-1:-1:-1;;51382:21:0::1;;;::::0;;51463:20:::1;::::0;51452:8:::1;::::0;51414:13:::1;::::0;51452:31:::1;::::0;::::1;:::i;:::-;51433:51;::::0;:15:::1;:51;:::i;:::-;51414:71:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;51414:71:0;;;::::1;::::0;;::::1;::::0;51496:10:::1;:12:::0;;;::::1;::::0;::::1;:::i;:::-;;;;;;51318:198::o:0;7609:201::-;6773:6;;-1:-1:-1;;;;;6773:6:0;5504:10;6920:23;6912:68;;;;-1:-1:-1;;;6912:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7698:22:0;::::1;7690:73;;;::::0;-1:-1:-1;;;7690:73:0;;13330:2:1;7690:73:0::1;::::0;::::1;13312:21:1::0;13369:2;13349:18;;;13342:30;13408:34;13388:18;;;13381:62;-1:-1:-1;;;13459:18:1;;;13452:36;13505:19;;7690:73:0::1;13128:402:1::0;7690:73:0::1;7774:28;7793:8;7774:18;:28::i;54557:90::-:0;6773:6;;-1:-1:-1;;;;;6773:6:0;5504:10;6920:23;6912:68;;;;-1:-1:-1;;;6912:68:0;;;;;;;:::i;:::-;54619:14:::1;:22:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;54619:22:0;;::::1;::::0;;;::::1;::::0;;54557:90::o;27436:305::-;27538:4;-1:-1:-1;;;;;;27575:40:0;;-1:-1:-1;;;27575:40:0;;:105;;-1:-1:-1;;;;;;;27632:48:0;;-1:-1:-1;;;27632:48:0;27575:105;:158;;;-1:-1:-1;;;;;;;;;;19241:40:0;;;27697:36;19132:157;37176:174;37251:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;37251:29:0;-1:-1:-1;;;;;37251:29:0;;;;;;;;:24;;37305:23;37251:24;37305:14;:23::i;:::-;-1:-1:-1;;;;;37296:46:0;;;;;;;;;;;37176:174;;:::o;33488:348::-;33581:4;33283:16;;;:7;:16;;;;;;-1:-1:-1;;;;;33283:16:0;33598:73;;;;-1:-1:-1;;;33598:73:0;;15969:2:1;33598:73:0;;;15951:21:1;16008:2;15988:18;;;15981:30;16047:34;16027:18;;;16020:62;-1:-1:-1;;;16098:18:1;;;16091:42;16150:19;;33598:73:0;15767:408:1;33598:73:0;33682:13;33698:23;33713:7;33698:14;:23::i;:::-;33682:39;;33751:5;-1:-1:-1;;;;;33740:16:0;:7;-1:-1:-1;;;;;33740:16:0;;:51;;;;33784:7;-1:-1:-1;;;;;33760:31:0;:20;33772:7;33760:11;:20::i;:::-;-1:-1:-1;;;;;33760:31:0;;33740:51;:87;;;-1:-1:-1;;;;;;30580:25:0;;;30556:4;30580:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;33795:32;33732:96;33488:348;-1:-1:-1;;;;33488:348:0:o;36480:578::-;36639:4;-1:-1:-1;;;;;36612:31:0;:23;36627:7;36612:14;:23::i;:::-;-1:-1:-1;;;;;36612:31:0;;36604:85;;;;-1:-1:-1;;;36604:85:0;;21527:2:1;36604:85:0;;;21509:21:1;21566:2;21546:18;;;21539:30;21605:34;21585:18;;;21578:62;-1:-1:-1;;;21656:18:1;;;21649:39;21705:19;;36604:85:0;21325:405:1;36604:85:0;-1:-1:-1;;;;;36708:16:0;;36700:65;;;;-1:-1:-1;;;36700:65:0;;14446:2:1;36700:65:0;;;14428:21:1;14485:2;14465:18;;;14458:30;14524:34;14504:18;;;14497:62;-1:-1:-1;;;14575:18:1;;;14568:34;14619:19;;36700:65:0;14244:400:1;36700:65:0;36778:39;36799:4;36805:2;36809:7;36778:20;:39::i;:::-;36882:29;36899:1;36903:7;36882:8;:29::i;:::-;-1:-1:-1;;;;;36924:15:0;;;;;;:9;:15;;;;;:20;;36943:1;;36924:15;:20;;36943:1;;36924:20;:::i;:::-;;;;-1:-1:-1;;;;;;;36955:13:0;;;;;;:9;:13;;;;;:18;;36972:1;;36955:13;:18;;36972:1;;36955:18;:::i;:::-;;;;-1:-1:-1;;36984:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;36984:21:0;-1:-1:-1;;;;;36984:21:0;;;;;;;;;37023:27;;36984:16;;37023:27;;;;;;;36480:578;;;:::o;56842:1150::-;57054:20;57077:26;57082:10;57094:8;57077:4;:26::i;:::-;57054:49;;57114:21;57138:28;57153:12;57138:14;:28::i;:::-;-1:-1:-1;;;;;57195:23:0;;57177:15;57195:23;;;:8;:23;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;57114:52:0;;-1:-1:-1;57195:23:0;57250;;;;57327:1;57322:2;:6;57321:22;;;;;57333:10;57321:22;57317:649;;;57360:13;57376:6;:2;57381:1;57376:6;:::i;:::-;57360:22;;57421:226;57457:5;57485:8;57516:6;57545:12;57580:13;57616:12;57421:13;:226::i;:::-;57397:250;;;;;;;;57317:649;57676:1;57670:2;:7;;57669:23;;;;;57682:10;57669:23;57665:301;;;57709:7;;;;;;;57665:301;57748:23;;;-1:-1:-1;;;;;57786:26:0;;;:10;;;;:26;;;57827:11;;;;:26;;;57878:10;;57748:8;57868:21;;;:9;:21;;;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;57868:31:0;;;;;;;;;;;;;;;;57916:23;;;:8;:23;;;;:38;;;57978:7;;;;;56842:1150;;;;;;;:::o;55464:106::-;6773:6;;-1:-1:-1;;;;;6773:6:0;5504:10;6920:23;6912:68;;;;-1:-1:-1;;;6912:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;55531:24:0::1;;::::0;;;:18:::1;:24;::::0;;;;:31;;-1:-1:-1;;55531:31:0::1;55558:4;55531:31;::::0;;55464:106::o;7970:191::-;8063:6;;;-1:-1:-1;;;;;8080:17:0;;;-1:-1:-1;;;;;;8080:17:0;;;;;;;8113:40;;8063:6;;;8080:17;8063:6;;8113:40;;8044:16;;8113:40;8033:128;7970:191;:::o;48753:227::-;48819:13;48847:16;48843:67;;;-1:-1:-1;;48885:15:0;;;48753:227::o;48843:67::-;48923:16;48918:57;;-1:-1:-1;;48961:4:0;;;48753:227::o;48918:57::-;48753:227;;;:::o;34178:110::-;34254:26;34264:2;34268:7;34254:26;;;;;;;;;;;;:9;:26::i;37492:315::-;37647:8;-1:-1:-1;;;;;37638:17:0;:5;-1:-1:-1;;;;;37638:17:0;;;37630:55;;;;-1:-1:-1;;;37630:55:0;;14851:2:1;37630:55:0;;;14833:21:1;14890:2;14870:18;;;14863:30;14929:27;14909:18;;;14902:55;14974:18;;37630:55:0;14649:349:1;37630:55:0;-1:-1:-1;;;;;37696:25:0;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;:46;;-1:-1:-1;;37696:46:0;;;;;;;;;;37758:41;;10068::1;;;37758::0;;10041:18:1;37758:41:0;;;;;;;37492:315;;;:::o;32566:::-;32723:28;32733:4;32739:2;32743:7;32723:9;:28::i;:::-;32770:48;32793:4;32799:2;32803:7;32812:5;32770:22;:48::i;:::-;32762:111;;;;-1:-1:-1;;;32762:111:0;;;;;;;:::i;48645:102::-;48705:13;48734:7;48727:14;;;;;:::i;2986:723::-;3042:13;3263:10;3259:53;;-1:-1:-1;;3290:10:0;;;;;;;;;;;;-1:-1:-1;;;3290:10:0;;;;;2986:723::o;3259:53::-;3337:5;3322:12;3378:78;3385:9;;3378:78;;3411:8;;;;:::i;:::-;;-1:-1:-1;3434:10:0;;-1:-1:-1;3442:2:0;3434:10;;:::i;:::-;;;3378:78;;;3466:19;3498:6;3488:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3488:17:0;;3466:39;;3516:154;3523:10;;3516:154;;3550:11;3560:1;3550:11;;:::i;:::-;;-1:-1:-1;3619:10:0;3627:2;3619:5;:10;:::i;:::-;3606:24;;:2;:24;:::i;:::-;3593:39;;3576:6;3583;3576:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;3576:56:0;;;;;;;;-1:-1:-1;3647:11:0;3656:2;3647:11;;:::i;:::-;;;3516:154;;42563:589;-1:-1:-1;;;;;42769:18:0;;42765:187;;42804:40;42836:7;43979:10;:17;;43952:24;;;;:15;:24;;;;;:44;;;44007:24;;;;;;;;;;;;43875:164;42804:40;42765:187;;;42874:2;-1:-1:-1;;;;;42866:10:0;:4;-1:-1:-1;;;;;42866:10:0;;42862:90;;42893:47;42926:4;42932:7;42893:32;:47::i;:::-;-1:-1:-1;;;;;42966:16:0;;42962:183;;42999:45;43036:7;42999:36;:45::i;42962:183::-;43072:4;-1:-1:-1;;;;;43066:10:0;:2;-1:-1:-1;;;;;43066:10:0;;43062:83;;43093:40;43121:2;43125:7;43093:27;:40::i;58000:798::-;58556:31;;-1:-1:-1;;5454:2:1;5450:15;;;5446:53;58556:31:0;;;5434:66:1;58105:7:0;;;;58668:12;;58623:15;;5516:12:1;;58556:31:0;;;;;;;;;;;;58546:42;;;;;;58538:51;;58537:102;;;;:::i;:::-;58384:32;;-1:-1:-1;;58401:14:0;5454:2:1;5450:15;5446:53;58384:32:0;;;5434:66:1;58494:14:0;;58449:15;;5516:12:1;;58384:32:0;;;;;;;;;;;;58374:43;;;;;;58366:52;;58335:130;;;;:::i;:::-;58290:16;58235:26;58253:8;58235:15;:26;:::i;:::-;58234:72;;;;:::i;:::-;:232;;;;:::i;:::-;:274;;;;:::i;:::-;:406;;;;:::i;:::-;:446;;;;:::i;:::-;58195:504;;;;;;7660:19:1;;7704:2;7695:12;;7531:182;58195:504:0;;;;-1:-1:-1;;58195:504:0;;;;;;;;;58167:547;;58195:504;58167:547;;;;58775:9;;58167:547;;-1:-1:-1;58755:16:0;58775:9;58167:547;58755:16;:::i;:::-;58754:30;;;;:::i;:::-;58746:39;;:4;:39;:::i;:::-;58745:45;;58789:1;58745:45;:::i;34515:321::-;34645:18;34651:2;34655:7;34645:5;:18::i;:::-;34696:54;34727:1;34731:2;34735:7;34744:5;34696:22;:54::i;:::-;34674:154;;;;-1:-1:-1;;;34674:154:0;;;;;;;:::i;38372:799::-;38527:4;-1:-1:-1;;;;;38548:13:0;;9311:20;9359:8;38544:620;;38584:72;;-1:-1:-1;;;38584:72:0;;-1:-1:-1;;;;;38584:36:0;;;;;:72;;5504:10;;38635:4;;38641:7;;38650:5;;38584:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38584:72:0;;;;;;;;-1:-1:-1;;38584:72:0;;;;;;;;;;;;:::i;:::-;;;38580:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38826:13:0;;38822:272;;38869:60;;-1:-1:-1;;;38869:60:0;;;;;;;:::i;38822:272::-;39044:6;39038:13;39029:6;39025:2;39021:15;39014:38;38580:529;-1:-1:-1;;;;;;38707:51:0;-1:-1:-1;;;38707:51:0;;-1:-1:-1;38700:58:0;;38544:620;-1:-1:-1;39148:4:0;38372:799;;;;;;:::o;44666:988::-;44932:22;44982:1;44957:22;44974:4;44957:16;:22::i;:::-;:26;;;;:::i;:::-;44994:18;45015:26;;;:17;:26;;;;;;44932:51;;-1:-1:-1;45148:28:0;;;45144:328;;-1:-1:-1;;;;;45215:18:0;;45193:19;45215:18;;;:12;:18;;;;;;;;:34;;;;;;;;;45266:30;;;;;;:44;;;45383:30;;:17;:30;;;;;:43;;;45144:328;-1:-1:-1;45568:26:0;;;;:17;:26;;;;;;;;45561:33;;;-1:-1:-1;;;;;45612:18:0;;;;;:12;:18;;;;;:34;;;;;;;45605:41;44666:988::o;45949:1079::-;46227:10;:17;46202:22;;46227:21;;46247:1;;46227:21;:::i;:::-;46259:18;46280:24;;;:15;:24;;;;;;46653:10;:26;;46202:46;;-1:-1:-1;46280:24:0;;46202:46;;46653:26;;;;;;:::i;:::-;;;;;;;;;46631:48;;46717:11;46692:10;46703;46692:22;;;;;;;;:::i;:::-;;;;;;;;;;;;:36;;;;46797:28;;;:15;:28;;;;;;;:41;;;46969:24;;;;;46962:31;47004:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;46020:1008;;;45949:1079;:::o;43453:221::-;43538:14;43555:20;43572:2;43555:16;:20::i;:::-;-1:-1:-1;;;;;43586:16:0;;;;;;;:12;:16;;;;;;;;:24;;;;;;;;:34;;;43631:26;;;:17;:26;;;;;;:35;;;;-1:-1:-1;43453:221:0:o;35172:382::-;-1:-1:-1;;;;;35252:16:0;;35244:61;;;;-1:-1:-1;;;35244:61:0;;19984:2:1;35244:61:0;;;19966:21:1;;;20003:18;;;19996:30;20062:34;20042:18;;;20035:62;20114:18;;35244:61:0;19782:356:1;35244:61:0;33259:4;33283:16;;;:7;:16;;;;;;-1:-1:-1;;;;;33283:16:0;:30;35316:58;;;;-1:-1:-1;;;35316:58:0;;13737:2:1;35316:58:0;;;13719:21:1;13776:2;13756:18;;;13749:30;13815;13795:18;;;13788:58;13863:18;;35316:58:0;13535:352:1;35316:58:0;35387:45;35416:1;35420:2;35424:7;35387:20;:45::i;:::-;-1:-1:-1;;;;;35445:13:0;;;;;;:9;:13;;;;;:18;;35462:1;;35445:13;:18;;35462:1;;35445:18;:::i;:::-;;;;-1:-1:-1;;35474:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;35474:21:0;-1:-1:-1;;;;;35474:21:0;;;;;;;;35513:33;;35474:16;;;35513:33;;35474:16;;35513:33;35172:382;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:406:1;78:5;112:18;104:6;101:30;98:56;;;134:18;;:::i;:::-;172:57;217:2;196:15;;-1:-1:-1;;192:29:1;223:4;188:40;172:57;:::i;:::-;163:66;;252:6;245:5;238:21;292:3;283:6;278:3;274:16;271:25;268:45;;;309:1;306;299:12;268:45;358:6;353:3;346:4;339:5;335:16;322:43;412:1;405:4;396:6;389:5;385:18;381:29;374:40;14:406;;;;;:::o;425:173::-;493:20;;-1:-1:-1;;;;;542:31:1;;532:42;;522:70;;588:1;585;578:12;603:160;668:20;;724:13;;717:21;707:32;;697:60;;753:1;750;743:12;768:186;827:6;880:2;868:9;859:7;855:23;851:32;848:52;;;896:1;893;886:12;848:52;919:29;938:9;919:29;:::i;959:260::-;1027:6;1035;1088:2;1076:9;1067:7;1063:23;1059:32;1056:52;;;1104:1;1101;1094:12;1056:52;1127:29;1146:9;1127:29;:::i;:::-;1117:39;;1175:38;1209:2;1198:9;1194:18;1175:38;:::i;:::-;1165:48;;959:260;;;;;:::o;1224:328::-;1301:6;1309;1317;1370:2;1358:9;1349:7;1345:23;1341:32;1338:52;;;1386:1;1383;1376:12;1338:52;1409:29;1428:9;1409:29;:::i;:::-;1399:39;;1457:38;1491:2;1480:9;1476:18;1457:38;:::i;:::-;1447:48;;1542:2;1531:9;1527:18;1514:32;1504:42;;1224:328;;;;;:::o;1557:666::-;1652:6;1660;1668;1676;1729:3;1717:9;1708:7;1704:23;1700:33;1697:53;;;1746:1;1743;1736:12;1697:53;1769:29;1788:9;1769:29;:::i;:::-;1759:39;;1817:38;1851:2;1840:9;1836:18;1817:38;:::i;:::-;1807:48;;1902:2;1891:9;1887:18;1874:32;1864:42;;1957:2;1946:9;1942:18;1929:32;1984:18;1976:6;1973:30;1970:50;;;2016:1;2013;2006:12;1970:50;2039:22;;2092:4;2084:13;;2080:27;-1:-1:-1;2070:55:1;;2121:1;2118;2111:12;2070:55;2144:73;2209:7;2204:2;2191:16;2186:2;2182;2178:11;2144:73;:::i;:::-;2134:83;;;1557:666;;;;;;;:::o;2228:254::-;2293:6;2301;2354:2;2342:9;2333:7;2329:23;2325:32;2322:52;;;2370:1;2367;2360:12;2322:52;2393:29;2412:9;2393:29;:::i;:::-;2383:39;;2441:35;2472:2;2461:9;2457:18;2441:35;:::i;2487:254::-;2555:6;2563;2616:2;2604:9;2595:7;2591:23;2587:32;2584:52;;;2632:1;2629;2622:12;2584:52;2655:29;2674:9;2655:29;:::i;:::-;2645:39;2731:2;2716:18;;;;2703:32;;-1:-1:-1;;;2487:254:1:o;2746:963::-;2830:6;2861:2;2904;2892:9;2883:7;2879:23;2875:32;2872:52;;;2920:1;2917;2910:12;2872:52;2960:9;2947:23;2989:18;3030:2;3022:6;3019:14;3016:34;;;3046:1;3043;3036:12;3016:34;3084:6;3073:9;3069:22;3059:32;;3129:7;3122:4;3118:2;3114:13;3110:27;3100:55;;3151:1;3148;3141:12;3100:55;3187:2;3174:16;3209:2;3205;3202:10;3199:36;;;3215:18;;:::i;:::-;3261:2;3258:1;3254:10;3244:20;;3284:28;3308:2;3304;3300:11;3284:28;:::i;:::-;3346:15;;;3377:12;;;;3409:11;;;3439;;;3435:20;;3432:33;-1:-1:-1;3429:53:1;;;3478:1;3475;3468:12;3429:53;3500:1;3491:10;;3510:169;3524:2;3521:1;3518:9;3510:169;;;3581:23;3600:3;3581:23;:::i;:::-;3569:36;;3542:1;3535:9;;;;;3625:12;;;;3657;;3510:169;;;-1:-1:-1;3698:5:1;2746:963;-1:-1:-1;;;;;;;;2746:963:1:o;3714:180::-;3770:6;3823:2;3811:9;3802:7;3798:23;3794:32;3791:52;;;3839:1;3836;3829:12;3791:52;3862:26;3878:9;3862:26;:::i;3899:245::-;3957:6;4010:2;3998:9;3989:7;3985:23;3981:32;3978:52;;;4026:1;4023;4016:12;3978:52;4065:9;4052:23;4084:30;4108:5;4084:30;:::i;4149:249::-;4218:6;4271:2;4259:9;4250:7;4246:23;4242:32;4239:52;;;4287:1;4284;4277:12;4239:52;4319:9;4313:16;4338:30;4362:5;4338:30;:::i;4403:450::-;4472:6;4525:2;4513:9;4504:7;4500:23;4496:32;4493:52;;;4541:1;4538;4531:12;4493:52;4581:9;4568:23;4614:18;4606:6;4603:30;4600:50;;;4646:1;4643;4636:12;4600:50;4669:22;;4722:4;4714:13;;4710:27;-1:-1:-1;4700:55:1;;4751:1;4748;4741:12;4700:55;4774:73;4839:7;4834:2;4821:16;4816:2;4812;4808:11;4774:73;:::i;4858:180::-;4917:6;4970:2;4958:9;4949:7;4945:23;4941:32;4938:52;;;4986:1;4983;4976:12;4938:52;-1:-1:-1;5009:23:1;;4858:180;-1:-1:-1;4858:180:1:o;5043:257::-;5084:3;5122:5;5116:12;5149:6;5144:3;5137:19;5165:63;5221:6;5214:4;5209:3;5205:14;5198:4;5191:5;5187:16;5165:63;:::i;:::-;5282:2;5261:15;-1:-1:-1;;5257:29:1;5248:39;;;;5289:4;5244:50;;5043:257;-1:-1:-1;;5043:257:1:o;5789:1527::-;6013:3;6051:6;6045:13;6077:4;6090:51;6134:6;6129:3;6124:2;6116:6;6112:15;6090:51;:::i;:::-;6204:13;;6163:16;;;;6226:55;6204:13;6163:16;6248:15;;;6226:55;:::i;:::-;6370:13;;6303:20;;;6343:1;;6430;6452:18;;;;6505;;;;6532:93;;6610:4;6600:8;6596:19;6584:31;;6532:93;6673:2;6663:8;6660:16;6640:18;6637:40;6634:167;;;-1:-1:-1;;;6700:33:1;;6756:4;6753:1;6746:15;6786:4;6707:3;6774:17;6634:167;6817:18;6844:110;;;;6968:1;6963:328;;;;6810:481;;6844:110;-1:-1:-1;;6879:24:1;;6865:39;;6924:20;;;;-1:-1:-1;6844:110:1;;6963:328;25037:1;25030:14;;;25074:4;25061:18;;7058:1;7072:169;7086:8;7083:1;7080:15;7072:169;;;7168:14;;7153:13;;;7146:37;7211:16;;;;7103:10;;7072:169;;;7076:3;;7272:8;7265:5;7261:20;7254:27;;6810:481;-1:-1:-1;7307:3:1;;5789:1527;-1:-1:-1;;;;;;;;;;;5789:1527:1:o;7926:488::-;-1:-1:-1;;;;;8195:15:1;;;8177:34;;8247:15;;8242:2;8227:18;;8220:43;8294:2;8279:18;;8272:34;;;8342:3;8337:2;8322:18;;8315:31;;;8120:4;;8363:45;;8388:19;;8380:6;8363:45;:::i;:::-;8355:53;7926:488;-1:-1:-1;;;;;;7926:488:1:o;8419:867::-;8638:2;8690:21;;;8760:13;;8663:18;;;8782:22;;;8609:4;;8638:2;8823;;8841:18;;;;8882:15;;;8609:4;8925:335;8939:6;8936:1;8933:13;8925:335;;;8998:13;;9036:9;;9024:22;;9090:11;;;9084:18;-1:-1:-1;;;;;9080:44:1;9066:12;;;9059:66;9165:11;;9159:18;9145:12;;;9138:40;9207:4;9198:14;;;;9235:15;;;;9121:1;8954:9;8925:335;;;-1:-1:-1;9277:3:1;;8419:867;-1:-1:-1;;;;;;;8419:867:1:o;9291:632::-;9462:2;9514:21;;;9584:13;;9487:18;;;9606:22;;;9433:4;;9462:2;9685:15;;;;9659:2;9644:18;;;9433:4;9728:169;9742:6;9739:1;9736:13;9728:169;;;9803:13;;9791:26;;9872:15;;;;9837:12;;;;9764:1;9757:9;9728:169;;;-1:-1:-1;9914:3:1;;9291:632;-1:-1:-1;;;;;;9291:632:1:o;10120:219::-;10269:2;10258:9;10251:21;10232:4;10289:44;10329:2;10318:9;10314:18;10306:6;10289:44;:::i;11937:414::-;12139:2;12121:21;;;12178:2;12158:18;;;12151:30;12217:34;12212:2;12197:18;;12190:62;-1:-1:-1;;;12283:2:1;12268:18;;12261:48;12341:3;12326:19;;11937:414::o;20964:356::-;21166:2;21148:21;;;21185:18;;;21178:30;21244:34;21239:2;21224:18;;21217:62;21311:2;21296:18;;20964:356::o;22553:413::-;22755:2;22737:21;;;22794:2;22774:18;;;22767:30;22833:34;22828:2;22813:18;;22806:62;-1:-1:-1;;;22899:2:1;22884:18;;22877:47;22956:3;22941:19;;22553:413::o;24684:275::-;24755:2;24749:9;24820:2;24801:13;;-1:-1:-1;;24797:27:1;24785:40;;24855:18;24840:34;;24876:22;;;24837:62;24834:88;;;24902:18;;:::i;:::-;24938:2;24931:22;24684:275;;-1:-1:-1;24684:275:1:o;25090:128::-;25130:3;25161:1;25157:6;25154:1;25151:13;25148:39;;;25167:18;;:::i;:::-;-1:-1:-1;25203:9:1;;25090:128::o;25223:120::-;25263:1;25289;25279:35;;25294:18;;:::i;:::-;-1:-1:-1;25328:9:1;;25223:120::o;25348:168::-;25388:7;25454:1;25450;25446:6;25442:14;25439:1;25436:21;25431:1;25424:9;25417:17;25413:45;25410:71;;;25461:18;;:::i;:::-;-1:-1:-1;25501:9:1;;25348:168::o;25521:125::-;25561:4;25589:1;25586;25583:8;25580:34;;;25594:18;;:::i;:::-;-1:-1:-1;25631:9:1;;25521:125::o;25651:258::-;25723:1;25733:113;25747:6;25744:1;25741:13;25733:113;;;25823:11;;;25817:18;25804:11;;;25797:39;25769:2;25762:10;25733:113;;;25864:6;25861:1;25858:13;25855:48;;;-1:-1:-1;;25899:1:1;25881:16;;25874:27;25651:258::o;25914:380::-;25993:1;25989:12;;;;26036;;;26057:61;;26111:4;26103:6;26099:17;26089:27;;26057:61;26164:2;26156:6;26153:14;26133:18;26130:38;26127:161;;;26210:10;26205:3;26201:20;26198:1;26191:31;26245:4;26242:1;26235:15;26273:4;26270:1;26263:15;26127:161;;25914:380;;;:::o;26299:135::-;26338:3;-1:-1:-1;;26359:17:1;;26356:43;;;26379:18;;:::i;:::-;-1:-1:-1;26426:1:1;26415:13;;26299:135::o;26439:112::-;26471:1;26497;26487:35;;26502:18;;:::i;:::-;-1:-1:-1;26536:9:1;;26439:112::o;26556:127::-;26617:10;26612:3;26608:20;26605:1;26598:31;26648:4;26645:1;26638:15;26672:4;26669:1;26662:15;26688:127;26749:10;26744:3;26740:20;26737:1;26730:31;26780:4;26777:1;26770:15;26804:4;26801:1;26794:15;26820:127;26881:10;26876:3;26872:20;26869:1;26862:31;26912:4;26909:1;26902:15;26936:4;26933:1;26926:15;26952:127;27013:10;27008:3;27004:20;27001:1;26994:31;27044:4;27041:1;27034:15;27068:4;27065:1;27058:15;27084:127;27145:10;27140:3;27136:20;27133:1;27126:31;27176:4;27173:1;27166:15;27200:4;27197:1;27190:15;27216:131;-1:-1:-1;;;;;;27290:32:1;;27280:43;;27270:71;;27337:1;27334;27327:12
Swarm Source
ipfs://4b2a51bb35caa95085406b868b5b6ad2a44c12a4b57c4f0edb1fab6053c57646
Age | Block | Fee Address | BC Fee Address | Voting Power | Jailed | Incoming |
---|
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.