ERC-721
Overview
Max Total Supply
6,666 FTMFROGS
Holders
2,127
Total Transfers
-
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract
Loading...
Loading
Loading...
Loading
Loading...
Loading
Contract Name:
FantomFrogs
Compiler Version
v0.8.0+commit.c7dfd78e
Contract Source Code (Solidity)
/** *Submitted for verification at ftmscan.com on 2022-01-31 */ /** *Submitted for verification at FtmScan.com on 2022-01-19 */ /** *Submitted for verification at snowtrace.io on 2021-12-31 */ /** *Submitted for verification at testnet.snowtrace.io on 2021-12-23 */ /** *Submitted for verification at testnet.snowtrace.io on 2021-12-09 */ /** *Submitted for verification at snowtrace.io on 2021-11-30 */ // SPDX-License-Identifier: MIT // File: @openzeppelin/contracts/utils/introspection/IERC165.sol pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/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 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/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/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/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/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/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/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/token/ERC721/ERC721.sol pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require( owner != address(0), "ERC721: balance query for the zero address" ); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require( owner != address(0), "ERC721: owner query for nonexistent token" ); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require( _exists(tokenId), "ERC721Metadata: URI query for nonexistent token" ); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require( _exists(tokenId), "ERC721: approved query for nonexistent token" ); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { require(operator != _msgSender(), "ERC721: approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require( _isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved" ); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require( _isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved" ); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require( _checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require( _exists(tokenId), "ERC721: operator query for nonexistent token" ); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require( ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own" ); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received( _msgSender(), from, tokenId, _data ) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert( "ERC721: transfer to non ERC721Receiver implementer" ); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File: @openzeppelin/contracts/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 token id to address. public mapping(uint256 => address) internal _tokenToAddressMap; // 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; // Original minter details mapping(uint256 => address) internal _originalMinter; /** * @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)) { // mint _addTokenToAllTokensEnumeration(tokenId); _updateTokenAddressMap(tokenId, to); _insertOriginalMinter(to, tokenId); } else if (from != to) { // transfer - remove token from 'from' enum _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { // burn _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { // transfer - add token to 'to' enum _addTokenToOwnerEnumeration(to, tokenId); _updateTokenAddressMap(tokenId, to); } } function _insertOriginalMinter(address addr, uint256 tokenId) private { _originalMinter[tokenId] = addr; } /** * @dev Private function to update the token=>address map. Will be called on * mint and transfer of token so that lottery winnings are always paid to * the current owner. Non-standard function created by DeFi Degen. * */ function _updateTokenAddressMap(uint256 tokenId, address to) private { _tokenToAddressMap[tokenId] = to; } /** * @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(); } } // OpenZeppelin Contracts v4.4.0 (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval( address indexed owner, address indexed spender, uint256 value ); } // File: @openzeppelin/contracts/access/Ownable.sol pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _setOwner(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _setOwner(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require( newOwner != address(0), "Ownable: new owner is the zero address" ); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } pragma solidity ^0.8.0; /// @title IERC2981Royalties /// @dev Interface for the ERC2981 - Token Royalty standard interface IERC2981Royalties { /// @notice Called with the sale price to determine how much royalty // is owed and to whom. /// @param _tokenId - the NFT asset queried for royalty information /// @param _value - the sale price of the NFT asset specified by _tokenId /// @return _receiver - address of who should be sent the royalty payment /// @return _royaltyAmount - the royalty payment amount for value sale price function royaltyInfo(uint256 _tokenId, uint256 _value) external view returns (address _receiver, uint256 _royaltyAmount); } pragma solidity ^0.8.0; /// @dev This is a contract used to add ERC2981 support to ERC721 and 1155 abstract contract ERC2981PerTokenRoyalties is ERC165, IERC2981Royalties { struct Royalty { address recipient; uint256 value; } mapping(uint256 => Royalty) internal _royalties; /// @inheritdoc ERC165 function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC2981Royalties).interfaceId || super.supportsInterface(interfaceId); } /// @dev Sets token royalties /// @param id the token id fir which we register the royalties /// @param recipient recipient of the royalties /// @param value percentage (using 2 decimals - 10000 = 100, 0 = 0) function _setTokenRoyalty( uint256 id, address recipient, uint256 value ) internal { require(value <= 10000, "ERC2981Royalties: Too high"); _royalties[id] = Royalty(recipient, value); } /// @inheritdoc IERC2981Royalties function royaltyInfo(uint256 tokenId, uint256 value) external view override returns (address receiver, uint256 royaltyAmount) { Royalty memory royalty = _royalties[tokenId]; return (royalty.recipient, (value * royalty.value) / 10000); } } pragma solidity ^0.8.0; contract FantomFrogs is ERC721Enumerable, Ownable, ERC2981PerTokenRoyalties { using Strings for uint256; struct Winner { uint256 date; address winner; uint256 tokenId; } mapping(uint256 => address) private winner; string baseURI; string public baseExtension = ".json"; string public pollName; uint256 public lotteryIntervalDays = 7; uint256 private epochDay = 86400; uint256 public cost = 33 ether; uint256 public maxSupply = 6666; uint256 public maxMintForTx = 1; uint256 public maxMintsForAddress = 3; uint256 public drawNumber = 0; uint256 private contractRoyalties = 500; bool public paused = true; bool public lotteryActive = false; bool public airDropActive = false; bool public pollState = false; bool private whiteListOnly = true; uint256[] public lotteryDates; string[] public pollOptions; mapping(string => bool) pollOptionsMap; mapping(string => uint256) public votes; mapping(address => bool) public whiteListAddresses; mapping(address => uint256) private addressMints; mapping(uint256 => Winner[]) public winnerLog; mapping(address => string) private votedAddresses; mapping(string => bool) private defaultpollOptions; mapping(address => uint256) private _winners; constructor( string memory _name, string memory _symbol, string memory _initBaseURI ) ERC721(_name, _symbol) { setBaseURI(_initBaseURI); } /* @function _baseURI() @description - Gets the current base URI for nft metadata @returns <string> */ function _baseURI() internal view virtual override returns (string memory) { return baseURI; } function supportsInterface(bytes4 interfaceId) public view virtual override(ERC721Enumerable, ERC2981PerTokenRoyalties) returns (bool) { return super.supportsInterface(interfaceId); } /* @function mint(_mintAmount) @description - Mints _mintAmount of NFTs for sender address. @param <uint256> _mintAmount - The number of NFTs to mint. */ function mint(uint256 _mintAmount) public payable { uint256 supply = totalSupply(); uint256 ownerCanMintCount = maxMintsForAddress - addressMints[msg.sender]; require( ownerCanMintCount >= _mintAmount, "ERROR: You cant mint that many frogs" ); require(!paused, "ERROR: Contract paused. Please check discord."); require( _mintAmount <= maxMintForTx, "ERROR: The max no mints per transaction exceeded" ); require( supply + _mintAmount <= maxSupply, "ERROR: Not enough Frogs left to mint!" ); require( msg.value >= cost * _mintAmount, "ERROR: Please send more AVAX" ); if (whiteListOnly) { require( whiteListAddresses[msg.sender] == true, "ERROR: You are not part of the white list." ); } for (uint256 i = 1; i <= _mintAmount; i++) { uint256 tokenId = supply + 1; _safeMint(msg.sender, tokenId); _setTokenRoyalty(tokenId, owner(), contractRoyalties); addressMints[msg.sender]++; // activate lottery once all minted using lotteryIntervalDays if (tokenId == maxSupply) { activateLottery(); } // This will have changes after a mint, so re-asign it supply = totalSupply(); } } /* @function activateLottery(_owner) @description - Activates the lottery */ function activateLottery() private { lotteryActive = true; lotteryDates.push(block.timestamp + (epochDay * lotteryIntervalDays)); drawNumber++; } /* @function walletOfOwner(_owner) @description - Gets the list ok NFT tokenIds that owner has. */ 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 tokenURL(tokenId) @description - Gets the metadata URI for a NFT tokenId @param <uint256> tokenId - The id ok the NFT token @returns <string> - The URI for the NFT metadata file */ 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 of a single NFT @param <uint256> _newCost - The cost of a single nft */ function setCost(uint256 _newCost) external onlyOwner { cost = _newCost; } /* @function setMaxMintForTx @description - Sets the maximum mintable amount in 1 tx @param <uint256> amount - The number of mintable tokens in 1 tx */ function setMaxMintForTx(uint256 amount) external onlyOwner { maxMintForTx = amount; } /* @function setMaxMintForAddress @description - Sets the maximum mintable amount for an address @param <uint256> amount - The number of mintable tokens in 1 tx */ function setMaxMintForAddress(uint256 amount) external onlyOwner { maxMintsForAddress = amount; } /* @function setBaseURI(_newBaseURI) @description - Sets the base URI for the meta data files @param <string> _newBaseURI - The new base URI for the metadata files */ function setBaseURI(string memory _newBaseURI) public onlyOwner { baseURI = _newBaseURI; } /* @function setBaseExtension(_newBaseExtension) @description - Sets the extension for the meta data file (default .json) @param <string> _newBaseExtension - The new file extension to use. */ function setBaseExtension(string memory _newBaseExtension) public onlyOwner { baseExtension = _newBaseExtension; } /* @function pause(_state) @description - Pauses the contract. @param <bool> _state - true/false */ function pause(bool _state) public onlyOwner { paused = _state; } /* @function stakeToTime() @description - Sends contract balance to wallet for staking. Kept manual to prevent hacks. */ function send_to_vault() public payable onlyOwner { require(!paused, "ERROR: Contract paused!"); (bool success, ) = payable(owner()).call{value: address(this).balance}( "" ); require(success); } /* @function selectWinner() @description - Selects a winner if the current date allows. Uses NFT id to select winner. @param <uint> no - The number of winners @returns <address> - The winner */ function selectWinners(uint256 noOfWinners) external onlyOwner { require(!paused, "ERROR: Contract is paused"); require(lotteryActive, "ERROR: Lottery not active yet"); require(noOfWinners <= 50, "ERROR: Too many winners selected"); uint256 epochNow = block.timestamp; uint256 nextLotteryDate = lotteryDates[lotteryDates.length - 1]; require( epochNow >= nextLotteryDate, "ERROR: Cannot draw yet, too early" ); for (uint256 i = 0; i < noOfWinners; i++) { selectAWinner( 0, epochNow, msg.sender, nextLotteryDate, msg.sender, 0 ); } lotteryDates.push(epochNow + (epochDay * lotteryIntervalDays)); // increment draw drawNumber++; } /* @function selectAWinner() @description - Selects a winner and does not allow the same address to win more than once. @param <uint> no - The number of winners @returns <address> - The winner */ function selectAWinner( uint256 it, uint256 epochNow, address sender, uint256 lotteryDate, address randomAddr, uint256 randomNo ) internal { // Generate random id between 1 - 5000 (corresponds to NFT id) uint256 winningToken = rand(randomAddr, randomNo); address winnerAddress = ERC721.ownerOf(winningToken); uint256 lastWon = _winners[winnerAddress]; bool alreadyWon = (lastWon == lotteryDate); Winner memory win; if ((it < 5) && alreadyWon) { uint256 newIt = it + 1; return selectAWinner( newIt, epochNow, sender, lotteryDate, winnerAddress, winningToken ); } else if ((it >= 5) && alreadyWon) { return; } else { win.date = lotteryDate; win.winner = winnerAddress; win.tokenId = winningToken; winnerLog[drawNumber].push(win); _winners[winnerAddress] = lotteryDate; } 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 setLotteryState() @description - Sets the lottery state to active/not active (true/false) @param <address> state - The lottery state */ function setLotteryState(bool state) external onlyOwner { lotteryActive = state; } /* @function setMaxSupply() @description - Sets the max supply that can be minted. This will be useful if the project sells out super fast and we want to add more mintable nfts. */ function setMaxSupply(uint256 amount) external onlyOwner { require( amount > maxSupply, "ERROR: Max supply is currently smaller than new supply" ); lotteryActive = false; maxSupply = amount; } /* @function setLotteryIntervalDays(noDays) @description - Set the number of days between each lottery draw. @param <uint256> noDays - The number of days. */ function setLotteryIntervalDays(uint256 noDays) external onlyOwner { lotteryIntervalDays = noDays; } /* @function airDrop(to, amount) @description - Air drop an nft to address @param <address> to - The address to airdrop nft */ function airDrop(address to) external onlyOwner { require(airDropActive, "ERROR: Air drop is not active"); uint256 supply = totalSupply(); uint256 tokenId = supply + 1; _setTokenRoyalty(tokenId, owner(), contractRoyalties); _safeMint(to, tokenId); } /* @function setAirDropStatus(value) @description - Sets the status of airdrop to true/false @param <bool> value - true/false */ function setAirDropStatus(bool value) external onlyOwner { airDropActive = value; } /* @function castVote(value) @description - Casts a vote if you own a frog @param <string> memory - The option chosen */ function castVote(string memory option) external { require(!paused, "ERROR: Contract paused"); require(pollState, "ERROR: No poll to vote on right now"); require(pollOptionsMap[option], "ERROR: Invalid voting option"); require( keccak256(abi.encodePacked(votedAddresses[msg.sender])) != keccak256(abi.encodePacked(pollName)), "ERROR: You have already voted in this poll!" ); uint256 noVotes = balanceOf(msg.sender); require( noVotes > 0, "ERROR: You have no voting rights. Get yourself a frog my fren!" ); votes[option] += noVotes; votedAddresses[msg.sender] = pollName; } /* @function addPollOption(option) @description - Adds an option for voting @param <string> memory - The option to add */ function addPollOption(string memory option) external onlyOwner { pollOptionsMap[option] = true; pollOptions.push(option); } /* @function clearPollOptions() @description - Clears the current poll */ function clearPollOptions() external onlyOwner { for (uint256 i = 0; i < pollOptions.length; i++) { votes[pollOptions[i]] = 0; pollOptionsMap[pollOptions[i]] = false; delete pollOptions[i]; } } /* @function setPollName(name) @description - Sets the poll name/quesstion @param <string> memory - The name/question of the poll */ function setPollName(string memory name) external onlyOwner { pollName = name; } /* @function getVoteCountForOption(option) @description - Gets the number of votes for a poll option @param <string> memory - The option to get the poll counts for */ function getVoteCountForOption(string memory option) external view returns (uint256) { return votes[option]; } /* @function togglePollVoting(state) @description - Turns the poll on/off @param <string> memory - The value true/false */ function setPollState(bool state) external onlyOwner { pollState = state; } /* @function getPollOptions(state) @description - returns the array of poll options */ function getPollOptions() external view returns (string[] memory) { return pollOptions; } /* @function clearPoll() @description - clears poll, options and votes */ function clearPoll() external onlyOwner { this.clearPollOptions(); pollState = false; pollName = ""; } /* @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) external onlyOwner { for (uint256 i = 0; i < 50; i++) { delete winnerLog[drawNo][i]; } } /* @function noPollOptions() @description - Gets the current number of options for the poll */ function noPollOptions() external view returns (uint256) { return pollOptions.length; } /* @function addWhiteListAddresses() @description - Adds a batch of addresses to white list */ function addWhiteListAddresses(address[] calldata _addresses) public onlyOwner { require(_addresses.length < 500, "ERROR: Too many in one tx"); for (uint256 i = 0; i < _addresses.length; i++) { whiteListAddresses[_addresses[i]] = true; } } function setWhiteList(bool _value) public onlyOwner { whiteListOnly = _value; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"string","name":"_initBaseURI","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"string","name":"option","type":"string"}],"name":"addPollOption","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_addresses","type":"address[]"}],"name":"addWhiteListAddresses","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":[{"internalType":"string","name":"option","type":"string"}],"name":"castVote","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"clearPoll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"clearPollOptions","outputs":[],"stateMutability":"nonpayable","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":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPollOptions","outputs":[{"internalType":"string[]","name":"","type":"string[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"option","type":"string"}],"name":"getVoteCountForOption","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":[],"name":"lotteryActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"lotteryDates","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lotteryIntervalDays","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintForTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintsForAddress","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"noPollOptions","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pollName","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"pollOptions","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pollState","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"royaltyInfo","outputs":[{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"royaltyAmount","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":"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":[],"name":"send_to_vault","outputs":[],"stateMutability":"payable","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":"setLotteryIntervalDays","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"state","type":"bool"}],"name":"setLotteryState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMaxMintForAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMaxMintForTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMaxSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"name","type":"string"}],"name":"setPollName","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"state","type":"bool"}],"name":"setPollState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_value","type":"bool"}],"name":"setWhiteList","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":"string","name":"","type":"string"}],"name":"votes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"winnerLog","outputs":[{"internalType":"uint256","name":"date","type":"uint256"},{"internalType":"address","name":"winner","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60c06040526005608081905264173539b7b760d91b60a0908152620000289160109190620001dd565b506007601255620151806013556801c9f78d2893e40000601455611a0a60155560016016819055600360175560006018556101f4601955601a805464ffffffff001960ff19909116909217919091166401000000001790553480156200008d57600080fd5b506040516200474c3803806200474c833981016040819052620000b0916200032e565b825183908390620000c9906000906020850190620001dd565b508051620000df906001906020840190620001dd565b505050620000fc620000f66200011060201b60201c565b62000114565b620001078162000166565b50505062000443565b3390565b600c80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6200017062000110565b6001600160a01b031662000183620001ce565b6001600160a01b031614620001b55760405162461bcd60e51b8152600401620001ac90620003bb565b60405180910390fd5b8051620001ca90600f906020840190620001dd565b5050565b600c546001600160a01b031690565b828054620001eb90620003f0565b90600052602060002090601f0160209004810192826200020f57600085556200025a565b82601f106200022a57805160ff19168380011785556200025a565b828001600101855582156200025a579182015b828111156200025a5782518255916020019190600101906200023d565b50620002689291506200026c565b5090565b5b808211156200026857600081556001016200026d565b600082601f83011262000294578081fd5b81516001600160401b0380821115620002b157620002b16200042d565b6040516020601f8401601f1916820181018381118382101715620002d957620002d96200042d565b6040528382528584018101871015620002f0578485fd5b8492505b83831015620003135785830181015182840182015291820191620002f4565b838311156200032457848185840101525b5095945050505050565b60008060006060848603121562000343578283fd5b83516001600160401b03808211156200035a578485fd5b620003688783880162000283565b945060208601519150808211156200037e578384fd5b6200038c8783880162000283565b93506040860151915080821115620003a2578283fd5b50620003b18682870162000283565b9150509250925092565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6002810460018216806200040557607f821691505b602082108114156200042757634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b6142f980620004536000396000f3fe6080604052600436106103c35760003560e01c806364d3f69c116101f2578063b69be8161161010d578063cef5ab65116100a0578063e3da6c821161006f578063e3da6c8214610ab0578063e654c33514610ad0578063e985e9c514610af2578063f2fde38b14610b12576103c3565b8063cef5ab6514610a51578063d5abeb0114610a66578063d80ffb2014610a7b578063da3ef23f14610a90576103c3565b8063bf5cf54a116100dc578063bf5cf54a146109e7578063c6682862146109fc578063c87b56dd14610a11578063cd18d5a414610a31576103c3565b8063b69be81614610972578063b88d4fde14610987578063b99ef1fa146109a7578063bf234202146109c7576103c3565b8063920674dc11610185578063a0712d6811610154578063a0712d681461090a578063a11ce1001461091d578063a22cb46514610932578063aa10304c14610952576103c3565b8063920674dc146108a057806394fcac1b146108c057806395d89b41146108d55780639cc2d993146108ea576103c3565b80638250544e116101c15780638250544e1461084c578063891ef238146108615780638da5cb5b146108765780638f58d3531461088b576103c3565b806364d3f69c146107d75780636f8b44b0146107f757806370a0823114610817578063715018a614610837576103c3565b80633233d537116102e2578063438b6300116102755780635994b5e1116102445780635994b5e1146107625780635b234462146107825780635c975abb146107a25780636352211e146107b7576103c3565b8063438b6300146106d557806344a0d68a146107025780634f6ccce71461072257806355f804b314610742576103c3565b806339a2eb2a116102b157806339a2eb2a1461066d5780633c970c6e1461068d57806341b18e4e1461069557806342842e0e146106b5576103c3565b80633233d537146105f857806332e204eb14610618578063342fdb521461063857806334d7aae31461064d576103c3565b806318160ddd1161035a578063250bcddb11610329578063250bcddb1461056a5780632a55205a1461058a5780632a9b746c146105b85780632f745c59146105d8576103c3565b806318160ddd1461050057806318769765146105155780631959ac071461052a57806323b872dd1461054a576103c3565b8063095ea7b311610396578063095ea7b31461046f5780630af8a0dd1461048f5780630e3d63a9146104be57806313faede6146104de576103c3565b806301ffc9a7146103c857806302329a29146103fe57806306fdde0314610420578063081812fc14610442575b600080fd5b3480156103d457600080fd5b506103e86103e3366004613407565b610b32565b6040516103f5919061371e565b60405180910390f35b34801561040a57600080fd5b5061041e6104193660046133ed565b610b45565b005b34801561042c57600080fd5b50610435610ba0565b6040516103f59190613729565b34801561044e57600080fd5b5061046261045d366004613485565b610c32565b6040516103f59190613610565b34801561047b57600080fd5b5061041e61048a366004613355565b610c75565b34801561049b57600080fd5b506104af6104aa36600461349d565b610d0d565b6040516103f593929190614148565b3480156104ca57600080fd5b5061041e6104d9366004613485565b610d59565b3480156104ea57600080fd5b506104f3610d9d565b6040516103f59190613607565b34801561050c57600080fd5b506104f3610da3565b34801561052157600080fd5b50610435610da9565b34801561053657600080fd5b5061041e610545366004613485565b610e37565b34801561055657600080fd5b5061041e610565366004613278565b610eee565b34801561057657600080fd5b5061041e610585366004613485565b610f26565b34801561059657600080fd5b506105aa6105a536600461349d565b610f6a565b6040516103f5929190613661565b3480156105c457600080fd5b5061041e6105d336600461343f565b610fc3565b3480156105e457600080fd5b506104f36105f3366004613355565b611077565b34801561060457600080fd5b506104f361061336600461343f565b6110c9565b34801561062457600080fd5b5061041e6106333660046133ed565b6110f1565b34801561064457600080fd5b506103e861114c565b34801561065957600080fd5b5061041e6106683660046133ed565b61115b565b34801561067957600080fd5b5061041e610688366004613485565b6111ba565b61041e611339565b3480156106a157600080fd5b5061041e6106b03660046133ed565b61140e565b3480156106c157600080fd5b5061041e6106d0366004613278565b611467565b3480156106e157600080fd5b506106f56106f036600461322c565b611482565b6040516103f591906136da565b34801561070e57600080fd5b5061041e61071d366004613485565b611540565b34801561072e57600080fd5b506104f361073d366004613485565b611584565b34801561074e57600080fd5b5061041e61075d36600461343f565b6115df565b34801561076e57600080fd5b5061041e61077d3660046133ed565b611631565b34801561078e57600080fd5b5061043561079d366004613485565b61168e565b3480156107ae57600080fd5b506103e86116b9565b3480156107c357600080fd5b506104626107d2366004613485565b6116c2565b3480156107e357600080fd5b5061041e6107f236600461343f565b6116f7565b34801561080357600080fd5b5061041e610812366004613485565b611749565b34801561082357600080fd5b506104f361083236600461322c565b6117b9565b34801561084357600080fd5b5061041e6117fd565b34801561085857600080fd5b506104f3611848565b34801561086d57600080fd5b506104f361184e565b34801561088257600080fd5b50610462611854565b34801561089757600080fd5b506103e8611863565b3480156108ac57600080fd5b506103e86108bb36600461322c565b611873565b3480156108cc57600080fd5b5061041e611888565b3480156108e157600080fd5b506104356119c8565b3480156108f657600080fd5b5061041e61090536600461343f565b6119d7565b61041e610918366004613485565b611b62565b34801561092957600080fd5b506104f3611d1f565b34801561093e57600080fd5b5061041e61094d36600461332c565b611d25565b34801561095e57600080fd5b506104f361096d366004613485565b611df3565b34801561097e57600080fd5b506104f3611e14565b34801561099357600080fd5b5061041e6109a23660046132b3565b611e1a565b3480156109b357600080fd5b506104f36109c236600461343f565b611e53565b3480156109d357600080fd5b5061041e6109e236600461337e565b611e70565b3480156109f357600080fd5b5061041e611f50565b348015610a0857600080fd5b5061043561200d565b348015610a1d57600080fd5b50610435610a2c366004613485565b61201a565b348015610a3d57600080fd5b5061041e610a4c36600461322c565b6120a0565b348015610a5d57600080fd5b506103e8612138565b348015610a7257600080fd5b506104f3612146565b348015610a8757600080fd5b506104f361214c565b348015610a9c57600080fd5b5061041e610aab36600461343f565b612152565b348015610abc57600080fd5b5061041e610acb366004613485565b6121a4565b348015610adc57600080fd5b50610ae56121e8565b6040516103f5919061367a565b348015610afe57600080fd5b506103e8610b0d366004613246565b6122c1565b348015610b1e57600080fd5b5061041e610b2d36600461322c565b6122ef565b6000610b3d8261235d565b90505b919050565b610b4d612382565b6001600160a01b0316610b5e611854565b6001600160a01b031614610b8d5760405162461bcd60e51b8152600401610b8490613d48565b60405180910390fd5b601a805460ff1916911515919091179055565b606060008054610baf90614201565b80601f0160208091040260200160405190810160405280929190818152602001828054610bdb90614201565b8015610c285780601f10610bfd57610100808354040283529160200191610c28565b820191906000526020600020905b815481529060010190602001808311610c0b57829003601f168201915b5050505050905090565b6000610c3d82612386565b610c595760405162461bcd60e51b8152600401610b8490613cfc565b506000908152600460205260409020546001600160a01b031690565b6000610c80826116c2565b9050806001600160a01b0316836001600160a01b03161415610cb45760405162461bcd60e51b8152600401610b8490613e6b565b806001600160a01b0316610cc6612382565b6001600160a01b03161480610ce25750610ce281610b0d612382565b610cfe5760405162461bcd60e51b8152600401610b8490613a83565b610d0883836123a3565b505050565b60216020528160005260406000208181548110610d2957600080fd5b60009182526020909120600390910201805460018201546002909201549093506001600160a01b03909116915083565b610d61612382565b6001600160a01b0316610d72611854565b6001600160a01b031614610d985760405162461bcd60e51b8152600401610b8490613d48565b601755565b60145481565b60095490565b60118054610db690614201565b80601f0160208091040260200160405190810160405280929190818152602001828054610de290614201565b8015610e2f5780601f10610e0457610100808354040283529160200191610e2f565b820191906000526020600020905b815481529060010190602001808311610e1257829003601f168201915b505050505081565b610e3f612382565b6001600160a01b0316610e50611854565b6001600160a01b031614610e765760405162461bcd60e51b8152600401610b8490613d48565b60005b6032811015610eea576000828152602160205260409020805482908110610eb057634e487b7160e01b600052603260045260246000fd5b6000918252602082206003909102018181556001810180546001600160a01b03191690556002015580610ee28161423c565b915050610e79565b5050565b610eff610ef9612382565b82612411565b610f1b5760405162461bcd60e51b8152600401610b8490613f26565b610d08838383612496565b610f2e612382565b6001600160a01b0316610f3f611854565b6001600160a01b031614610f655760405162461bcd60e51b8152600401610b8490613d48565b601255565b6000828152600d60209081526040808320815180830190925280546001600160a01b0316808352600190910154928201839052839261271090610fad908761419f565b610fb7919061418b565b92509250509250929050565b610fcb612382565b6001600160a01b0316610fdc611854565b6001600160a01b0316146110025760405162461bcd60e51b8152600401610b8490613d48565b6001601d82604051611014919061359f565b90815260405160209181900382019020805460ff191692151592909217909155601c80546001810182556000919091528251610eea927f0e4562a10381dec21b205ed72637e6b1b523bdd0e4d4d50af5cd23dd4500a2119092019184019061301b565b6000611082836117b9565b82106110a05760405162461bcd60e51b8152600401610b84906137ff565b506001600160a01b03919091166000908152600760209081526040808320938352929052205490565b6000601e826040516110db919061359f565b9081526020016040518091039020549050919050565b6110f9612382565b6001600160a01b031661110a611854565b6001600160a01b0316146111305760405162461bcd60e51b8152600401610b8490613d48565b601a8054911515620100000262ff000019909216919091179055565b601a5462010000900460ff1681565b611163612382565b6001600160a01b0316611174611854565b6001600160a01b03161461119a5760405162461bcd60e51b8152600401610b8490613d48565b601a80549115156401000000000264ff0000000019909216919091179055565b6111c2612382565b6001600160a01b03166111d3611854565b6001600160a01b0316146111f95760405162461bcd60e51b8152600401610b8490613d48565b601a5460ff161561121c5760405162461bcd60e51b8152600401610b8490614111565b601a54610100900460ff166112435760405162461bcd60e51b8152600401610b8490613bb8565b60328111156112645760405162461bcd60e51b8152600401610b8490613a4e565b601b80544291600091611279906001906141be565b8154811061129757634e487b7160e01b600052603260045260246000fd5b90600052602060002001549050808210156112c45760405162461bcd60e51b8152600401610b84906137be565b60005b838110156112f1576112df60008433853360006125c3565b806112e98161423c565b9150506112c7565b50601b601254601354611304919061419f565b61130e9084614173565b81546001810183556000928352602083200155601880549161132f8361423c565b9190505550505050565b611341612382565b6001600160a01b0316611352611854565b6001600160a01b0316146113785760405162461bcd60e51b8152600401610b8490613d48565b601a5460ff161561139b5760405162461bcd60e51b8152600401610b8490613919565b60006113a5611854565b6001600160a01b0316476040516113bb90613604565b60006040518083038185875af1925050503d80600081146113f8576040519150601f19603f3d011682016040523d82523d6000602084013e6113fd565b606091505b505090508061140b57600080fd5b50565b611416612382565b6001600160a01b0316611427611854565b6001600160a01b03161461144d5760405162461bcd60e51b8152600401610b8490613d48565b601a80549115156101000261ff0019909216919091179055565b610d0883838360405180602001604052806000815250611e1a565b6060600061148f836117b9565b905060008167ffffffffffffffff8111156114ba57634e487b7160e01b600052604160045260246000fd5b6040519080825280602002602001820160405280156114e3578160200160208202803683370190505b50905060005b82811015611538576114fb8582611077565b82828151811061151b57634e487b7160e01b600052603260045260246000fd5b6020908102919091010152806115308161423c565b9150506114e9565b509392505050565b611548612382565b6001600160a01b0316611559611854565b6001600160a01b03161461157f5760405162461bcd60e51b8152600401610b8490613d48565b601455565b600061158e610da3565b82106115ac5760405162461bcd60e51b8152600401610b8490613f77565b600982815481106115cd57634e487b7160e01b600052603260045260246000fd5b90600052602060002001549050919050565b6115e7612382565b6001600160a01b03166115f8611854565b6001600160a01b03161461161e5760405162461bcd60e51b8152600401610b8490613d48565b8051610eea90600f90602084019061301b565b611639612382565b6001600160a01b031661164a611854565b6001600160a01b0316146116705760405162461bcd60e51b8152600401610b8490613d48565b601a805491151563010000000263ff00000019909216919091179055565b601c818154811061169e57600080fd5b906000526020600020016000915090508054610db690614201565b601a5460ff1681565b6000818152600260205260408120546001600160a01b031680610b3d5760405162461bcd60e51b8152600401610b8490613b2a565b6116ff612382565b6001600160a01b0316611710611854565b6001600160a01b0316146117365760405162461bcd60e51b8152600401610b8490613d48565b8051610eea90601190602084019061301b565b611751612382565b6001600160a01b0316611762611854565b6001600160a01b0316146117885760405162461bcd60e51b8152600401610b8490613d48565b60155481116117a95760405162461bcd60e51b8152600401610b8490613e15565b601a805461ff0019169055601555565b60006001600160a01b0382166117e15760405162461bcd60e51b8152600401610b8490613ae0565b506001600160a01b031660009081526003602052604090205490565b611805612382565b6001600160a01b0316611816611854565b6001600160a01b03161461183c5760405162461bcd60e51b8152600401610b8490613d48565b61184660006126e0565b565b601c5490565b60175481565b600c546001600160a01b031690565b601a546301000000900460ff1681565b601f6020526000908152604090205460ff1681565b611890612382565b6001600160a01b03166118a1611854565b6001600160a01b0316146118c75760405162461bcd60e51b8152600401610b8490613d48565b60005b601c5481101561140b576000601e601c83815481106118f957634e487b7160e01b600052603260045260246000fd5b9060005260206000200160405161191091906135f8565b9081526020016040518091039020819055506000601d601c838154811061194757634e487b7160e01b600052603260045260246000fd5b9060005260206000200160405161195e91906135f8565b908152604051908190036020019020805491151560ff19909216919091179055601c8054829081106119a057634e487b7160e01b600052603260045260246000fd5b9060005260206000200160006119b6919061309f565b806119c08161423c565b9150506118ca565b606060018054610baf90614201565b601a5460ff16156119fa5760405162461bcd60e51b8152600401610b8490614060565b601a546301000000900460ff16611a235760405162461bcd60e51b8152600401610b8490613eac565b601d81604051611a33919061359f565b9081526040519081900360200190205460ff16611a625760405162461bcd60e51b8152600401610b8490613eef565b6011604051602001611a7491906135f8565b60408051601f19818403018152828252805160209182012033600090815260228352929092209192611aa79291016135f8565b604051602081830303815290604052805190602001201415611adb5760405162461bcd60e51b8152600401610b849061373c565b6000611ae6336117b9565b905060008111611b085760405162461bcd60e51b8152600401610b8490613c6a565b80601e83604051611b19919061359f565b90815260200160405180910390206000828254611b369190614173565b909155505033600090815260226020526040902060118054611b5790614201565b610d089291906130db565b6000611b6c610da3565b3360009081526020805260408120546017549293509091611b8d91906141be565b905082811015611baf5760405162461bcd60e51b8152600401610b8490613bef565b601a5460ff1615611bd25760405162461bcd60e51b8152600401610b8490614013565b601654831115611bf45760405162461bcd60e51b8152600401610b8490613fc3565b601554611c018484614173565b1115611c1f5760405162461bcd60e51b8152600401610b8490613b73565b82601454611c2d919061419f565b341015611c4c5760405162461bcd60e51b8152600401610b84906140da565b601a54640100000000900460ff1615611c9357336000908152601f602052604090205460ff161515600114611c935760405162461bcd60e51b8152600401610b8490614090565b60015b838111611d19576000611caa846001614173565b9050611cb63382612732565b611cca81611cc2611854565b60195461274c565b3360009081526020805260408120805491611ce48361423c565b9190505550601554811415611cfb57611cfb6127b6565b611d03610da3565b9350508080611d119061423c565b915050611c96565b50505050565b60165481565b611d2d612382565b6001600160a01b0316826001600160a01b03161415611d5e5760405162461bcd60e51b8152600401610b8490613994565b8060056000611d6b612382565b6001600160a01b03908116825260208083019390935260409182016000908120918716808252919093529120805460ff191692151592909217909155611daf612382565b6001600160a01b03167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611de7919061371e565b60405180910390a35050565b601b8181548110611e0357600080fd5b600091825260209091200154905081565b60125481565b611e2b611e25612382565b83612411565b611e475760405162461bcd60e51b8152600401610b8490613f26565b611d1984848484612809565b8051602081830181018051601e8252928201919093012091525481565b611e78612382565b6001600160a01b0316611e89611854565b6001600160a01b031614611eaf5760405162461bcd60e51b8152600401610b8490613d48565b6101f48110611ed05760405162461bcd60e51b8152600401610b8490613c33565b60005b81811015610d08576001601f6000858585818110611f0157634e487b7160e01b600052603260045260246000fd5b9050602002016020810190611f16919061322c565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580611f488161423c565b915050611ed3565b611f58612382565b6001600160a01b0316611f69611854565b6001600160a01b031614611f8f5760405162461bcd60e51b8152600401610b8490613d48565b306001600160a01b03166394fcac1b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611fca57600080fd5b505af1158015611fde573d6000803e3d6000fd5b5050601a805463ff00000019169055505060408051602081019182905260009081905261140b9160119161301b565b60108054610db690614201565b606061202582612386565b6120415760405162461bcd60e51b8152600401610b8490613dc6565b600061204b61283c565b9050600081511161206b5760405180602001604052806000815250612099565b806120758461284b565b6010604051602001612089939291906135bb565b6040516020818303038152906040525b9392505050565b6120a8612382565b6001600160a01b03166120b9611854565b6001600160a01b0316146120df5760405162461bcd60e51b8152600401610b8490613d48565b601a5462010000900460ff166121075760405162461bcd60e51b8152600401610b84906139cb565b6000612111610da3565b90506000612120826001614173565b905061212e81611cc2611854565b610d088382612732565b601a54610100900460ff1681565b60155481565b60185481565b61215a612382565b6001600160a01b031661216b611854565b6001600160a01b0316146121915760405162461bcd60e51b8152600401610b8490613d48565b8051610eea90601090602084019061301b565b6121ac612382565b6001600160a01b03166121bd611854565b6001600160a01b0316146121e35760405162461bcd60e51b8152600401610b8490613d48565b601655565b6060601c805480602002602001604051908101604052809291908181526020016000905b828210156122b857838290600052602060002001805461222b90614201565b80601f016020809104026020016040519081016040528092919081815260200182805461225790614201565b80156122a45780601f10612279576101008083540402835291602001916122a4565b820191906000526020600020905b81548152906001019060200180831161228757829003601f168201915b50505050508152602001906001019061220c565b50505050905090565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b6122f7612382565b6001600160a01b0316612308611854565b6001600160a01b03161461232e5760405162461bcd60e51b8152600401610b8490613d48565b6001600160a01b0381166123545760405162461bcd60e51b8152600401610b849061389c565b61140b816126e0565b60006001600160e01b0319821663152a902d60e11b1480610b3d5750610b3d82612966565b3390565b6000908152600260205260409020546001600160a01b0316151590565b600081815260046020526040902080546001600160a01b0319166001600160a01b03841690811790915581906123d8826116c2565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061241c82612386565b6124385760405162461bcd60e51b8152600401610b8490613a02565b6000612443836116c2565b9050806001600160a01b0316846001600160a01b0316148061247e5750836001600160a01b031661247384610c32565b6001600160a01b0316145b8061248e575061248e81856122c1565b949350505050565b826001600160a01b03166124a9826116c2565b6001600160a01b0316146124cf5760405162461bcd60e51b8152600401610b8490613d7d565b6001600160a01b0382166124f55760405162461bcd60e51b8152600401610b8490613950565b61250083838361298b565b61250b6000826123a3565b6001600160a01b03831660009081526003602052604081208054600192906125349084906141be565b90915550506001600160a01b0382166000908152600360205260408120805460019290612562908490614173565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b60006125cf8383612a32565b905060006125dc826116c2565b6001600160a01b038116600090815260246020526040902054909150858114612603613156565b60058b1080156126105750815b1561263d5760006126228c6001614173565b9050612632818c8c8c898b6125c3565b5050505050506126d8565b60058b1015801561264b5750815b1561265a5750505050506126d8565b8781526001600160a01b03808516602080840182815260408086018a81526018546000908152602185528281208054600181810183559183528683208a5160039092020190815594519085018054919098166001600160a01b0319909116179096555160029092019190915591835260249052902088905550505050505b505050505050565b600c80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b610eea828260405180602001604052806000815250612b35565b61271081111561276e5760405162461bcd60e51b8152600401610b8490613787565b6040805180820182526001600160a01b03938416815260208082019384526000958652600d90529320925183546001600160a01b031916921691909117825551600190910155565b601a805461ff001916610100179055601254601354601b916127d79161419f565b6127e19042614173565b8154600181018355600092835260208320015560188054916128028361423c565b9190505550565b612814848484612496565b61282084848484612b68565b611d195760405162461bcd60e51b8152600401610b849061384a565b6060600f8054610baf90614201565b60608161287057506040805180820190915260018152600360fc1b6020820152610b40565b8160005b811561289a57806128848161423c565b91506128939050600a8361418b565b9150612874565b60008167ffffffffffffffff8111156128c357634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156128ed576020820181803683370190505b5090505b841561248e576129026001836141be565b915061290f600a86614257565b61291a906030614173565b60f81b81838151811061293d57634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a90535061295f600a8661418b565b94506128f1565b60006001600160e01b0319821663780e9d6360e01b1480610b3d5750610b3d82612c83565b612996838383610d08565b6001600160a01b0383166129c6576129ad81612cc3565b6129b78183612d07565b6129c18282612d35565b6129e9565b816001600160a01b0316836001600160a01b0316146129e9576129e98382612d63565b6001600160a01b038216612a0557612a0081612e00565b610d08565b826001600160a01b0316826001600160a01b031614610d0857612a288282612ed9565b610d088183612d07565b600080434285604051602001612a489190613582565b6040516020818303038152906040528051906020012060001c612a6b919061418b565b454241604051602001612a7e9190613582565b6040516020818303038152906040528051906020012060001c612aa1919061418b565b44612aac88426141be565b612ab69190614173565b612ac09190614173565b612aca9190614173565b612ad49190614173565b612ade9190614173565b604051602001612aee9190613607565b60408051601f198184030181529190528051602090910120601554909150612b16818361418b565b612b20919061419f565b612b2a90826141be565b61248e906001614173565b612b3f8383612f1d565b612b4c6000848484612b68565b610d085760405162461bcd60e51b8152600401610b849061384a565b6000612b7c846001600160a01b0316612ffc565b15612c7857836001600160a01b031663150b7a02612b98612382565b8786866040518563ffffffff1660e01b8152600401612bba9493929190613624565b602060405180830381600087803b158015612bd457600080fd5b505af1925050508015612c04575060408051601f3d908101601f19168201909252612c0191810190613423565b60015b612c5e573d808015612c32576040519150601f19603f3d011682016040523d82523d6000602084013e612c37565b606091505b508051612c565760405162461bcd60e51b8152600401610b849061384a565b805181602001fd5b6001600160e01b031916630a85bd0160e11b14905061248e565b506001949350505050565b60006001600160e01b031982166380ac58cd60e01b1480612cb457506001600160e01b03198216635b5e139f60e01b145b80610b3d5750610b3d82613002565b600980546000838152600a60205260408120829055600182018355919091527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af0155565b60009182526006602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b6000908152600b6020526040902080546001600160a01b0319166001600160a01b0392909216919091179055565b60006001612d70846117b9565b612d7a91906141be565b600083815260086020526040902054909150808214612dcd576001600160a01b03841660009081526007602090815260408083208584528252808320548484528184208190558352600890915290208190555b5060009182526008602090815260408084208490556001600160a01b039094168352600781528383209183525290812055565b600954600090612e12906001906141be565b6000838152600a602052604081205460098054939450909284908110612e4857634e487b7160e01b600052603260045260246000fd5b906000526020600020015490508060098381548110612e7757634e487b7160e01b600052603260045260246000fd5b6000918252602080832090910192909255828152600a90915260408082208490558582528120556009805480612ebd57634e487b7160e01b600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b6000612ee4836117b9565b6001600160a01b039093166000908152600760209081526040808320868452825280832085905593825260089052919091209190915550565b6001600160a01b038216612f435760405162461bcd60e51b8152600401610b8490613cc7565b612f4c81612386565b15612f695760405162461bcd60e51b8152600401610b84906138e2565b612f756000838361298b565b6001600160a01b0382166000908152600360205260408120805460019290612f9e908490614173565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b3b151590565b6001600160e01b031981166301ffc9a760e01b14919050565b82805461302790614201565b90600052602060002090601f016020900481019282613049576000855561308f565b82601f1061306257805160ff191683800117855561308f565b8280016001018555821561308f579182015b8281111561308f578251825591602001919060010190613074565b5061309b929150613180565b5090565b5080546130ab90614201565b6000825580601f106130bd575061140b565b601f01602090049060005260206000209081019061140b9190613180565b8280546130e790614201565b90600052602060002090601f016020900481019282613109576000855561308f565b82601f1061311a578054855561308f565b8280016001018555821561308f57600052602060002091601f016020900482015b8281111561308f57825482559160010191906001019061313b565b60405180606001604052806000815260200160006001600160a01b03168152602001600081525090565b5b8082111561309b5760008155600101613181565b600067ffffffffffffffff808411156131b0576131b0614297565b604051601f8501601f1916810160200182811182821017156131d4576131d4614297565b6040528481529150818385018610156131ec57600080fd5b8484602083013760006020868301015250509392505050565b80356001600160a01b0381168114610b4057600080fd5b80358015158114610b4057600080fd5b60006020828403121561323d578081fd5b61209982613205565b60008060408385031215613258578081fd5b61326183613205565b915061326f60208401613205565b90509250929050565b60008060006060848603121561328c578081fd5b61329584613205565b92506132a360208501613205565b9150604084013590509250925092565b600080600080608085870312156132c8578081fd5b6132d185613205565b93506132df60208601613205565b925060408501359150606085013567ffffffffffffffff811115613301578182fd5b8501601f81018713613311578182fd5b61332087823560208401613195565b91505092959194509250565b6000806040838503121561333e578182fd5b61334783613205565b915061326f6020840161321c565b60008060408385031215613367578182fd5b61337083613205565b946020939093013593505050565b60008060208385031215613390578182fd5b823567ffffffffffffffff808211156133a7578384fd5b818501915085601f8301126133ba578384fd5b8135818111156133c8578485fd5b86602080830285010111156133db578485fd5b60209290920196919550909350505050565b6000602082840312156133fe578081fd5b6120998261321c565b600060208284031215613418578081fd5b8135612099816142ad565b600060208284031215613434578081fd5b8151612099816142ad565b600060208284031215613450578081fd5b813567ffffffffffffffff811115613466578182fd5b8201601f81018413613476578182fd5b61248e84823560208401613195565b600060208284031215613496578081fd5b5035919050565b600080604083850312156134af578182fd5b50508035926020909101359150565b600081518084526134d68160208601602086016141d5565b601f01601f19169290920160200192915050565b80546000906002810460018083168061350457607f831692505b602080841082141561352457634e487b7160e01b86526022600452602486fd5b818015613538576001811461354957613576565b60ff19861689528489019650613576565b61355288614167565b60005b8681101561356e5781548b820152908501908301613555565b505084890196505b50505050505092915050565b60609190911b6bffffffffffffffffffffffff1916815260140190565b600082516135b18184602087016141d5565b9190910192915050565b600084516135cd8184602089016141d5565b8451908301906135e18183602089016141d5565b6135ed818301866134ea565b979650505050505050565b600061209982846134ea565b90565b90815260200190565b6001600160a01b0391909116815260200190565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090613657908301846134be565b9695505050505050565b6001600160a01b03929092168252602082015260400190565b6000602080830181845280855180835260408601915060408482028701019250838701855b828110156136cd57603f198886030184526136bb8583516134be565b9450928501929085019060010161369f565b5092979650505050505050565b6020808252825182820181905260009190848201906040850190845b81811015613712578351835292840192918401916001016136f6565b50909695505050505050565b901515815260200190565b60006020825261209960208301846134be565b6020808252602b908201527f4552524f523a20596f75206861766520616c726561647920766f74656420696e60408201526a207468697320706f6c6c2160a81b606082015260800190565b6020808252601a908201527f45524332393831526f79616c746965733a20546f6f2068696768000000000000604082015260600190565b60208082526021908201527f4552524f523a2043616e6e6f742064726177207965742c20746f6f206561726c6040820152607960f81b606082015260800190565b6020808252602b908201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560408201526a74206f6620626f756e647360a81b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b6020808252601c908201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604082015260600190565b60208082526017908201527f4552524f523a20436f6e74726163742070617573656421000000000000000000604082015260600190565b60208082526024908201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646040820152637265737360e01b606082015260800190565b60208082526019908201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604082015260600190565b6020808252601d908201527f4552524f523a204169722064726f70206973206e6f7420616374697665000000604082015260600190565b6020808252602c908201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860408201526b34b9ba32b73a103a37b5b2b760a11b606082015260800190565b6020808252818101527f4552524f523a20546f6f206d616e792077696e6e6572732073656c6563746564604082015260600190565b60208082526038908201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760408201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000606082015260800190565b6020808252602a908201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604082015269726f206164647265737360b01b606082015260800190565b60208082526029908201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460408201526832b73a103a37b5b2b760b91b606082015260800190565b60208082526025908201527f4552524f523a204e6f7420656e6f7567682046726f6773206c65667420746f206040820152646d696e742160d81b606082015260800190565b6020808252601d908201527f4552524f523a204c6f7474657279206e6f742061637469766520796574000000604082015260600190565b60208082526024908201527f4552524f523a20596f752063616e74206d696e742074686174206d616e792066604082015263726f677360e01b606082015260800190565b60208082526019908201527f4552524f523a20546f6f206d616e7920696e206f6e6520747800000000000000604082015260600190565b6020808252603e908201527f4552524f523a20596f752068617665206e6f20766f74696e672072696768747360408201527f2e2047657420796f757273656c6620612066726f67206d79206672656e210000606082015260800190565b6020808252818101527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604082015260600190565b6020808252602c908201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860408201526b34b9ba32b73a103a37b5b2b760a11b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526029908201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960408201526839903737ba1037bbb760b91b606082015260800190565b6020808252602f908201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60408201526e3732bc34b9ba32b73a103a37b5b2b760891b606082015260800190565b60208082526036908201527f4552524f523a204d617820737570706c792069732063757272656e746c7920736040820152756d616c6c6572207468616e206e657720737570706c7960501b606082015260800190565b60208082526021908201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656040820152603960f91b606082015260800190565b60208082526023908201527f4552524f523a204e6f20706f6c6c20746f20766f7465206f6e207269676874206040820152626e6f7760e81b606082015260800190565b6020808252601c908201527f4552524f523a20496e76616c696420766f74696e67206f7074696f6e00000000604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b6020808252602c908201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60408201526b7574206f6620626f756e647360a01b606082015260800190565b60208082526030908201527f4552524f523a20546865206d6178206e6f206d696e747320706572207472616e60408201526f1cd858dd1a5bdb88195e18d95959195960821b606082015260800190565b6020808252602d908201527f4552524f523a20436f6e7472616374207061757365642e20506c65617365206360408201526c3432b1b5903234b9b1b7b9321760991b606082015260800190565b60208082526016908201527511549493d48e8810dbdb9d1c9858dd081c185d5cd95960521b604082015260600190565b6020808252602a908201527f4552524f523a20596f7520617265206e6f742070617274206f662074686520776040820152693434ba32903634b9ba1760b11b606082015260800190565b6020808252601c908201527f4552524f523a20506c656173652073656e64206d6f7265204156415800000000604082015260600190565b60208082526019908201527f4552524f523a20436f6e74726163742069732070617573656400000000000000604082015260600190565b9283526001600160a01b03919091166020830152604082015260600190565b60009081526020902090565b600082198211156141865761418661426b565b500190565b60008261419a5761419a614281565b500490565b60008160001904831182151516156141b9576141b961426b565b500290565b6000828210156141d0576141d061426b565b500390565b60005b838110156141f05781810151838201526020016141d8565b83811115611d195750506000910152565b60028104600182168061421557607f821691505b6020821081141561423657634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156142505761425061426b565b5060010190565b60008261426657614266614281565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b03198116811461140b57600080fdfea2646970667358221220694cb1866eb00df5dd33be169f5558785d071e24e1d97538a0aa9fc29ed2b8ae64736f6c63430008000033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000b46616e746f6d46726f6773000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000846544d46524f4753000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004068747470733a2f2f73332e65752d776573742d322e616d617a6f6e6177732e636f6d2f6e6674646174612e66616e746f6d66726f67732e6e66742f6d6574612f
Deployed Bytecode
0x6080604052600436106103c35760003560e01c806364d3f69c116101f2578063b69be8161161010d578063cef5ab65116100a0578063e3da6c821161006f578063e3da6c8214610ab0578063e654c33514610ad0578063e985e9c514610af2578063f2fde38b14610b12576103c3565b8063cef5ab6514610a51578063d5abeb0114610a66578063d80ffb2014610a7b578063da3ef23f14610a90576103c3565b8063bf5cf54a116100dc578063bf5cf54a146109e7578063c6682862146109fc578063c87b56dd14610a11578063cd18d5a414610a31576103c3565b8063b69be81614610972578063b88d4fde14610987578063b99ef1fa146109a7578063bf234202146109c7576103c3565b8063920674dc11610185578063a0712d6811610154578063a0712d681461090a578063a11ce1001461091d578063a22cb46514610932578063aa10304c14610952576103c3565b8063920674dc146108a057806394fcac1b146108c057806395d89b41146108d55780639cc2d993146108ea576103c3565b80638250544e116101c15780638250544e1461084c578063891ef238146108615780638da5cb5b146108765780638f58d3531461088b576103c3565b806364d3f69c146107d75780636f8b44b0146107f757806370a0823114610817578063715018a614610837576103c3565b80633233d537116102e2578063438b6300116102755780635994b5e1116102445780635994b5e1146107625780635b234462146107825780635c975abb146107a25780636352211e146107b7576103c3565b8063438b6300146106d557806344a0d68a146107025780634f6ccce71461072257806355f804b314610742576103c3565b806339a2eb2a116102b157806339a2eb2a1461066d5780633c970c6e1461068d57806341b18e4e1461069557806342842e0e146106b5576103c3565b80633233d537146105f857806332e204eb14610618578063342fdb521461063857806334d7aae31461064d576103c3565b806318160ddd1161035a578063250bcddb11610329578063250bcddb1461056a5780632a55205a1461058a5780632a9b746c146105b85780632f745c59146105d8576103c3565b806318160ddd1461050057806318769765146105155780631959ac071461052a57806323b872dd1461054a576103c3565b8063095ea7b311610396578063095ea7b31461046f5780630af8a0dd1461048f5780630e3d63a9146104be57806313faede6146104de576103c3565b806301ffc9a7146103c857806302329a29146103fe57806306fdde0314610420578063081812fc14610442575b600080fd5b3480156103d457600080fd5b506103e86103e3366004613407565b610b32565b6040516103f5919061371e565b60405180910390f35b34801561040a57600080fd5b5061041e6104193660046133ed565b610b45565b005b34801561042c57600080fd5b50610435610ba0565b6040516103f59190613729565b34801561044e57600080fd5b5061046261045d366004613485565b610c32565b6040516103f59190613610565b34801561047b57600080fd5b5061041e61048a366004613355565b610c75565b34801561049b57600080fd5b506104af6104aa36600461349d565b610d0d565b6040516103f593929190614148565b3480156104ca57600080fd5b5061041e6104d9366004613485565b610d59565b3480156104ea57600080fd5b506104f3610d9d565b6040516103f59190613607565b34801561050c57600080fd5b506104f3610da3565b34801561052157600080fd5b50610435610da9565b34801561053657600080fd5b5061041e610545366004613485565b610e37565b34801561055657600080fd5b5061041e610565366004613278565b610eee565b34801561057657600080fd5b5061041e610585366004613485565b610f26565b34801561059657600080fd5b506105aa6105a536600461349d565b610f6a565b6040516103f5929190613661565b3480156105c457600080fd5b5061041e6105d336600461343f565b610fc3565b3480156105e457600080fd5b506104f36105f3366004613355565b611077565b34801561060457600080fd5b506104f361061336600461343f565b6110c9565b34801561062457600080fd5b5061041e6106333660046133ed565b6110f1565b34801561064457600080fd5b506103e861114c565b34801561065957600080fd5b5061041e6106683660046133ed565b61115b565b34801561067957600080fd5b5061041e610688366004613485565b6111ba565b61041e611339565b3480156106a157600080fd5b5061041e6106b03660046133ed565b61140e565b3480156106c157600080fd5b5061041e6106d0366004613278565b611467565b3480156106e157600080fd5b506106f56106f036600461322c565b611482565b6040516103f591906136da565b34801561070e57600080fd5b5061041e61071d366004613485565b611540565b34801561072e57600080fd5b506104f361073d366004613485565b611584565b34801561074e57600080fd5b5061041e61075d36600461343f565b6115df565b34801561076e57600080fd5b5061041e61077d3660046133ed565b611631565b34801561078e57600080fd5b5061043561079d366004613485565b61168e565b3480156107ae57600080fd5b506103e86116b9565b3480156107c357600080fd5b506104626107d2366004613485565b6116c2565b3480156107e357600080fd5b5061041e6107f236600461343f565b6116f7565b34801561080357600080fd5b5061041e610812366004613485565b611749565b34801561082357600080fd5b506104f361083236600461322c565b6117b9565b34801561084357600080fd5b5061041e6117fd565b34801561085857600080fd5b506104f3611848565b34801561086d57600080fd5b506104f361184e565b34801561088257600080fd5b50610462611854565b34801561089757600080fd5b506103e8611863565b3480156108ac57600080fd5b506103e86108bb36600461322c565b611873565b3480156108cc57600080fd5b5061041e611888565b3480156108e157600080fd5b506104356119c8565b3480156108f657600080fd5b5061041e61090536600461343f565b6119d7565b61041e610918366004613485565b611b62565b34801561092957600080fd5b506104f3611d1f565b34801561093e57600080fd5b5061041e61094d36600461332c565b611d25565b34801561095e57600080fd5b506104f361096d366004613485565b611df3565b34801561097e57600080fd5b506104f3611e14565b34801561099357600080fd5b5061041e6109a23660046132b3565b611e1a565b3480156109b357600080fd5b506104f36109c236600461343f565b611e53565b3480156109d357600080fd5b5061041e6109e236600461337e565b611e70565b3480156109f357600080fd5b5061041e611f50565b348015610a0857600080fd5b5061043561200d565b348015610a1d57600080fd5b50610435610a2c366004613485565b61201a565b348015610a3d57600080fd5b5061041e610a4c36600461322c565b6120a0565b348015610a5d57600080fd5b506103e8612138565b348015610a7257600080fd5b506104f3612146565b348015610a8757600080fd5b506104f361214c565b348015610a9c57600080fd5b5061041e610aab36600461343f565b612152565b348015610abc57600080fd5b5061041e610acb366004613485565b6121a4565b348015610adc57600080fd5b50610ae56121e8565b6040516103f5919061367a565b348015610afe57600080fd5b506103e8610b0d366004613246565b6122c1565b348015610b1e57600080fd5b5061041e610b2d36600461322c565b6122ef565b6000610b3d8261235d565b90505b919050565b610b4d612382565b6001600160a01b0316610b5e611854565b6001600160a01b031614610b8d5760405162461bcd60e51b8152600401610b8490613d48565b60405180910390fd5b601a805460ff1916911515919091179055565b606060008054610baf90614201565b80601f0160208091040260200160405190810160405280929190818152602001828054610bdb90614201565b8015610c285780601f10610bfd57610100808354040283529160200191610c28565b820191906000526020600020905b815481529060010190602001808311610c0b57829003601f168201915b5050505050905090565b6000610c3d82612386565b610c595760405162461bcd60e51b8152600401610b8490613cfc565b506000908152600460205260409020546001600160a01b031690565b6000610c80826116c2565b9050806001600160a01b0316836001600160a01b03161415610cb45760405162461bcd60e51b8152600401610b8490613e6b565b806001600160a01b0316610cc6612382565b6001600160a01b03161480610ce25750610ce281610b0d612382565b610cfe5760405162461bcd60e51b8152600401610b8490613a83565b610d0883836123a3565b505050565b60216020528160005260406000208181548110610d2957600080fd5b60009182526020909120600390910201805460018201546002909201549093506001600160a01b03909116915083565b610d61612382565b6001600160a01b0316610d72611854565b6001600160a01b031614610d985760405162461bcd60e51b8152600401610b8490613d48565b601755565b60145481565b60095490565b60118054610db690614201565b80601f0160208091040260200160405190810160405280929190818152602001828054610de290614201565b8015610e2f5780601f10610e0457610100808354040283529160200191610e2f565b820191906000526020600020905b815481529060010190602001808311610e1257829003601f168201915b505050505081565b610e3f612382565b6001600160a01b0316610e50611854565b6001600160a01b031614610e765760405162461bcd60e51b8152600401610b8490613d48565b60005b6032811015610eea576000828152602160205260409020805482908110610eb057634e487b7160e01b600052603260045260246000fd5b6000918252602082206003909102018181556001810180546001600160a01b03191690556002015580610ee28161423c565b915050610e79565b5050565b610eff610ef9612382565b82612411565b610f1b5760405162461bcd60e51b8152600401610b8490613f26565b610d08838383612496565b610f2e612382565b6001600160a01b0316610f3f611854565b6001600160a01b031614610f655760405162461bcd60e51b8152600401610b8490613d48565b601255565b6000828152600d60209081526040808320815180830190925280546001600160a01b0316808352600190910154928201839052839261271090610fad908761419f565b610fb7919061418b565b92509250509250929050565b610fcb612382565b6001600160a01b0316610fdc611854565b6001600160a01b0316146110025760405162461bcd60e51b8152600401610b8490613d48565b6001601d82604051611014919061359f565b90815260405160209181900382019020805460ff191692151592909217909155601c80546001810182556000919091528251610eea927f0e4562a10381dec21b205ed72637e6b1b523bdd0e4d4d50af5cd23dd4500a2119092019184019061301b565b6000611082836117b9565b82106110a05760405162461bcd60e51b8152600401610b84906137ff565b506001600160a01b03919091166000908152600760209081526040808320938352929052205490565b6000601e826040516110db919061359f565b9081526020016040518091039020549050919050565b6110f9612382565b6001600160a01b031661110a611854565b6001600160a01b0316146111305760405162461bcd60e51b8152600401610b8490613d48565b601a8054911515620100000262ff000019909216919091179055565b601a5462010000900460ff1681565b611163612382565b6001600160a01b0316611174611854565b6001600160a01b03161461119a5760405162461bcd60e51b8152600401610b8490613d48565b601a80549115156401000000000264ff0000000019909216919091179055565b6111c2612382565b6001600160a01b03166111d3611854565b6001600160a01b0316146111f95760405162461bcd60e51b8152600401610b8490613d48565b601a5460ff161561121c5760405162461bcd60e51b8152600401610b8490614111565b601a54610100900460ff166112435760405162461bcd60e51b8152600401610b8490613bb8565b60328111156112645760405162461bcd60e51b8152600401610b8490613a4e565b601b80544291600091611279906001906141be565b8154811061129757634e487b7160e01b600052603260045260246000fd5b90600052602060002001549050808210156112c45760405162461bcd60e51b8152600401610b84906137be565b60005b838110156112f1576112df60008433853360006125c3565b806112e98161423c565b9150506112c7565b50601b601254601354611304919061419f565b61130e9084614173565b81546001810183556000928352602083200155601880549161132f8361423c565b9190505550505050565b611341612382565b6001600160a01b0316611352611854565b6001600160a01b0316146113785760405162461bcd60e51b8152600401610b8490613d48565b601a5460ff161561139b5760405162461bcd60e51b8152600401610b8490613919565b60006113a5611854565b6001600160a01b0316476040516113bb90613604565b60006040518083038185875af1925050503d80600081146113f8576040519150601f19603f3d011682016040523d82523d6000602084013e6113fd565b606091505b505090508061140b57600080fd5b50565b611416612382565b6001600160a01b0316611427611854565b6001600160a01b03161461144d5760405162461bcd60e51b8152600401610b8490613d48565b601a80549115156101000261ff0019909216919091179055565b610d0883838360405180602001604052806000815250611e1a565b6060600061148f836117b9565b905060008167ffffffffffffffff8111156114ba57634e487b7160e01b600052604160045260246000fd5b6040519080825280602002602001820160405280156114e3578160200160208202803683370190505b50905060005b82811015611538576114fb8582611077565b82828151811061151b57634e487b7160e01b600052603260045260246000fd5b6020908102919091010152806115308161423c565b9150506114e9565b509392505050565b611548612382565b6001600160a01b0316611559611854565b6001600160a01b03161461157f5760405162461bcd60e51b8152600401610b8490613d48565b601455565b600061158e610da3565b82106115ac5760405162461bcd60e51b8152600401610b8490613f77565b600982815481106115cd57634e487b7160e01b600052603260045260246000fd5b90600052602060002001549050919050565b6115e7612382565b6001600160a01b03166115f8611854565b6001600160a01b03161461161e5760405162461bcd60e51b8152600401610b8490613d48565b8051610eea90600f90602084019061301b565b611639612382565b6001600160a01b031661164a611854565b6001600160a01b0316146116705760405162461bcd60e51b8152600401610b8490613d48565b601a805491151563010000000263ff00000019909216919091179055565b601c818154811061169e57600080fd5b906000526020600020016000915090508054610db690614201565b601a5460ff1681565b6000818152600260205260408120546001600160a01b031680610b3d5760405162461bcd60e51b8152600401610b8490613b2a565b6116ff612382565b6001600160a01b0316611710611854565b6001600160a01b0316146117365760405162461bcd60e51b8152600401610b8490613d48565b8051610eea90601190602084019061301b565b611751612382565b6001600160a01b0316611762611854565b6001600160a01b0316146117885760405162461bcd60e51b8152600401610b8490613d48565b60155481116117a95760405162461bcd60e51b8152600401610b8490613e15565b601a805461ff0019169055601555565b60006001600160a01b0382166117e15760405162461bcd60e51b8152600401610b8490613ae0565b506001600160a01b031660009081526003602052604090205490565b611805612382565b6001600160a01b0316611816611854565b6001600160a01b03161461183c5760405162461bcd60e51b8152600401610b8490613d48565b61184660006126e0565b565b601c5490565b60175481565b600c546001600160a01b031690565b601a546301000000900460ff1681565b601f6020526000908152604090205460ff1681565b611890612382565b6001600160a01b03166118a1611854565b6001600160a01b0316146118c75760405162461bcd60e51b8152600401610b8490613d48565b60005b601c5481101561140b576000601e601c83815481106118f957634e487b7160e01b600052603260045260246000fd5b9060005260206000200160405161191091906135f8565b9081526020016040518091039020819055506000601d601c838154811061194757634e487b7160e01b600052603260045260246000fd5b9060005260206000200160405161195e91906135f8565b908152604051908190036020019020805491151560ff19909216919091179055601c8054829081106119a057634e487b7160e01b600052603260045260246000fd5b9060005260206000200160006119b6919061309f565b806119c08161423c565b9150506118ca565b606060018054610baf90614201565b601a5460ff16156119fa5760405162461bcd60e51b8152600401610b8490614060565b601a546301000000900460ff16611a235760405162461bcd60e51b8152600401610b8490613eac565b601d81604051611a33919061359f565b9081526040519081900360200190205460ff16611a625760405162461bcd60e51b8152600401610b8490613eef565b6011604051602001611a7491906135f8565b60408051601f19818403018152828252805160209182012033600090815260228352929092209192611aa79291016135f8565b604051602081830303815290604052805190602001201415611adb5760405162461bcd60e51b8152600401610b849061373c565b6000611ae6336117b9565b905060008111611b085760405162461bcd60e51b8152600401610b8490613c6a565b80601e83604051611b19919061359f565b90815260200160405180910390206000828254611b369190614173565b909155505033600090815260226020526040902060118054611b5790614201565b610d089291906130db565b6000611b6c610da3565b3360009081526020805260408120546017549293509091611b8d91906141be565b905082811015611baf5760405162461bcd60e51b8152600401610b8490613bef565b601a5460ff1615611bd25760405162461bcd60e51b8152600401610b8490614013565b601654831115611bf45760405162461bcd60e51b8152600401610b8490613fc3565b601554611c018484614173565b1115611c1f5760405162461bcd60e51b8152600401610b8490613b73565b82601454611c2d919061419f565b341015611c4c5760405162461bcd60e51b8152600401610b84906140da565b601a54640100000000900460ff1615611c9357336000908152601f602052604090205460ff161515600114611c935760405162461bcd60e51b8152600401610b8490614090565b60015b838111611d19576000611caa846001614173565b9050611cb63382612732565b611cca81611cc2611854565b60195461274c565b3360009081526020805260408120805491611ce48361423c565b9190505550601554811415611cfb57611cfb6127b6565b611d03610da3565b9350508080611d119061423c565b915050611c96565b50505050565b60165481565b611d2d612382565b6001600160a01b0316826001600160a01b03161415611d5e5760405162461bcd60e51b8152600401610b8490613994565b8060056000611d6b612382565b6001600160a01b03908116825260208083019390935260409182016000908120918716808252919093529120805460ff191692151592909217909155611daf612382565b6001600160a01b03167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611de7919061371e565b60405180910390a35050565b601b8181548110611e0357600080fd5b600091825260209091200154905081565b60125481565b611e2b611e25612382565b83612411565b611e475760405162461bcd60e51b8152600401610b8490613f26565b611d1984848484612809565b8051602081830181018051601e8252928201919093012091525481565b611e78612382565b6001600160a01b0316611e89611854565b6001600160a01b031614611eaf5760405162461bcd60e51b8152600401610b8490613d48565b6101f48110611ed05760405162461bcd60e51b8152600401610b8490613c33565b60005b81811015610d08576001601f6000858585818110611f0157634e487b7160e01b600052603260045260246000fd5b9050602002016020810190611f16919061322c565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580611f488161423c565b915050611ed3565b611f58612382565b6001600160a01b0316611f69611854565b6001600160a01b031614611f8f5760405162461bcd60e51b8152600401610b8490613d48565b306001600160a01b03166394fcac1b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611fca57600080fd5b505af1158015611fde573d6000803e3d6000fd5b5050601a805463ff00000019169055505060408051602081019182905260009081905261140b9160119161301b565b60108054610db690614201565b606061202582612386565b6120415760405162461bcd60e51b8152600401610b8490613dc6565b600061204b61283c565b9050600081511161206b5760405180602001604052806000815250612099565b806120758461284b565b6010604051602001612089939291906135bb565b6040516020818303038152906040525b9392505050565b6120a8612382565b6001600160a01b03166120b9611854565b6001600160a01b0316146120df5760405162461bcd60e51b8152600401610b8490613d48565b601a5462010000900460ff166121075760405162461bcd60e51b8152600401610b84906139cb565b6000612111610da3565b90506000612120826001614173565b905061212e81611cc2611854565b610d088382612732565b601a54610100900460ff1681565b60155481565b60185481565b61215a612382565b6001600160a01b031661216b611854565b6001600160a01b0316146121915760405162461bcd60e51b8152600401610b8490613d48565b8051610eea90601090602084019061301b565b6121ac612382565b6001600160a01b03166121bd611854565b6001600160a01b0316146121e35760405162461bcd60e51b8152600401610b8490613d48565b601655565b6060601c805480602002602001604051908101604052809291908181526020016000905b828210156122b857838290600052602060002001805461222b90614201565b80601f016020809104026020016040519081016040528092919081815260200182805461225790614201565b80156122a45780601f10612279576101008083540402835291602001916122a4565b820191906000526020600020905b81548152906001019060200180831161228757829003601f168201915b50505050508152602001906001019061220c565b50505050905090565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b6122f7612382565b6001600160a01b0316612308611854565b6001600160a01b03161461232e5760405162461bcd60e51b8152600401610b8490613d48565b6001600160a01b0381166123545760405162461bcd60e51b8152600401610b849061389c565b61140b816126e0565b60006001600160e01b0319821663152a902d60e11b1480610b3d5750610b3d82612966565b3390565b6000908152600260205260409020546001600160a01b0316151590565b600081815260046020526040902080546001600160a01b0319166001600160a01b03841690811790915581906123d8826116c2565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061241c82612386565b6124385760405162461bcd60e51b8152600401610b8490613a02565b6000612443836116c2565b9050806001600160a01b0316846001600160a01b0316148061247e5750836001600160a01b031661247384610c32565b6001600160a01b0316145b8061248e575061248e81856122c1565b949350505050565b826001600160a01b03166124a9826116c2565b6001600160a01b0316146124cf5760405162461bcd60e51b8152600401610b8490613d7d565b6001600160a01b0382166124f55760405162461bcd60e51b8152600401610b8490613950565b61250083838361298b565b61250b6000826123a3565b6001600160a01b03831660009081526003602052604081208054600192906125349084906141be565b90915550506001600160a01b0382166000908152600360205260408120805460019290612562908490614173565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b60006125cf8383612a32565b905060006125dc826116c2565b6001600160a01b038116600090815260246020526040902054909150858114612603613156565b60058b1080156126105750815b1561263d5760006126228c6001614173565b9050612632818c8c8c898b6125c3565b5050505050506126d8565b60058b1015801561264b5750815b1561265a5750505050506126d8565b8781526001600160a01b03808516602080840182815260408086018a81526018546000908152602185528281208054600181810183559183528683208a5160039092020190815594519085018054919098166001600160a01b0319909116179096555160029092019190915591835260249052902088905550505050505b505050505050565b600c80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b610eea828260405180602001604052806000815250612b35565b61271081111561276e5760405162461bcd60e51b8152600401610b8490613787565b6040805180820182526001600160a01b03938416815260208082019384526000958652600d90529320925183546001600160a01b031916921691909117825551600190910155565b601a805461ff001916610100179055601254601354601b916127d79161419f565b6127e19042614173565b8154600181018355600092835260208320015560188054916128028361423c565b9190505550565b612814848484612496565b61282084848484612b68565b611d195760405162461bcd60e51b8152600401610b849061384a565b6060600f8054610baf90614201565b60608161287057506040805180820190915260018152600360fc1b6020820152610b40565b8160005b811561289a57806128848161423c565b91506128939050600a8361418b565b9150612874565b60008167ffffffffffffffff8111156128c357634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156128ed576020820181803683370190505b5090505b841561248e576129026001836141be565b915061290f600a86614257565b61291a906030614173565b60f81b81838151811061293d57634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a90535061295f600a8661418b565b94506128f1565b60006001600160e01b0319821663780e9d6360e01b1480610b3d5750610b3d82612c83565b612996838383610d08565b6001600160a01b0383166129c6576129ad81612cc3565b6129b78183612d07565b6129c18282612d35565b6129e9565b816001600160a01b0316836001600160a01b0316146129e9576129e98382612d63565b6001600160a01b038216612a0557612a0081612e00565b610d08565b826001600160a01b0316826001600160a01b031614610d0857612a288282612ed9565b610d088183612d07565b600080434285604051602001612a489190613582565b6040516020818303038152906040528051906020012060001c612a6b919061418b565b454241604051602001612a7e9190613582565b6040516020818303038152906040528051906020012060001c612aa1919061418b565b44612aac88426141be565b612ab69190614173565b612ac09190614173565b612aca9190614173565b612ad49190614173565b612ade9190614173565b604051602001612aee9190613607565b60408051601f198184030181529190528051602090910120601554909150612b16818361418b565b612b20919061419f565b612b2a90826141be565b61248e906001614173565b612b3f8383612f1d565b612b4c6000848484612b68565b610d085760405162461bcd60e51b8152600401610b849061384a565b6000612b7c846001600160a01b0316612ffc565b15612c7857836001600160a01b031663150b7a02612b98612382565b8786866040518563ffffffff1660e01b8152600401612bba9493929190613624565b602060405180830381600087803b158015612bd457600080fd5b505af1925050508015612c04575060408051601f3d908101601f19168201909252612c0191810190613423565b60015b612c5e573d808015612c32576040519150601f19603f3d011682016040523d82523d6000602084013e612c37565b606091505b508051612c565760405162461bcd60e51b8152600401610b849061384a565b805181602001fd5b6001600160e01b031916630a85bd0160e11b14905061248e565b506001949350505050565b60006001600160e01b031982166380ac58cd60e01b1480612cb457506001600160e01b03198216635b5e139f60e01b145b80610b3d5750610b3d82613002565b600980546000838152600a60205260408120829055600182018355919091527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af0155565b60009182526006602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b6000908152600b6020526040902080546001600160a01b0319166001600160a01b0392909216919091179055565b60006001612d70846117b9565b612d7a91906141be565b600083815260086020526040902054909150808214612dcd576001600160a01b03841660009081526007602090815260408083208584528252808320548484528184208190558352600890915290208190555b5060009182526008602090815260408084208490556001600160a01b039094168352600781528383209183525290812055565b600954600090612e12906001906141be565b6000838152600a602052604081205460098054939450909284908110612e4857634e487b7160e01b600052603260045260246000fd5b906000526020600020015490508060098381548110612e7757634e487b7160e01b600052603260045260246000fd5b6000918252602080832090910192909255828152600a90915260408082208490558582528120556009805480612ebd57634e487b7160e01b600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b6000612ee4836117b9565b6001600160a01b039093166000908152600760209081526040808320868452825280832085905593825260089052919091209190915550565b6001600160a01b038216612f435760405162461bcd60e51b8152600401610b8490613cc7565b612f4c81612386565b15612f695760405162461bcd60e51b8152600401610b84906138e2565b612f756000838361298b565b6001600160a01b0382166000908152600360205260408120805460019290612f9e908490614173565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b3b151590565b6001600160e01b031981166301ffc9a760e01b14919050565b82805461302790614201565b90600052602060002090601f016020900481019282613049576000855561308f565b82601f1061306257805160ff191683800117855561308f565b8280016001018555821561308f579182015b8281111561308f578251825591602001919060010190613074565b5061309b929150613180565b5090565b5080546130ab90614201565b6000825580601f106130bd575061140b565b601f01602090049060005260206000209081019061140b9190613180565b8280546130e790614201565b90600052602060002090601f016020900481019282613109576000855561308f565b82601f1061311a578054855561308f565b8280016001018555821561308f57600052602060002091601f016020900482015b8281111561308f57825482559160010191906001019061313b565b60405180606001604052806000815260200160006001600160a01b03168152602001600081525090565b5b8082111561309b5760008155600101613181565b600067ffffffffffffffff808411156131b0576131b0614297565b604051601f8501601f1916810160200182811182821017156131d4576131d4614297565b6040528481529150818385018610156131ec57600080fd5b8484602083013760006020868301015250509392505050565b80356001600160a01b0381168114610b4057600080fd5b80358015158114610b4057600080fd5b60006020828403121561323d578081fd5b61209982613205565b60008060408385031215613258578081fd5b61326183613205565b915061326f60208401613205565b90509250929050565b60008060006060848603121561328c578081fd5b61329584613205565b92506132a360208501613205565b9150604084013590509250925092565b600080600080608085870312156132c8578081fd5b6132d185613205565b93506132df60208601613205565b925060408501359150606085013567ffffffffffffffff811115613301578182fd5b8501601f81018713613311578182fd5b61332087823560208401613195565b91505092959194509250565b6000806040838503121561333e578182fd5b61334783613205565b915061326f6020840161321c565b60008060408385031215613367578182fd5b61337083613205565b946020939093013593505050565b60008060208385031215613390578182fd5b823567ffffffffffffffff808211156133a7578384fd5b818501915085601f8301126133ba578384fd5b8135818111156133c8578485fd5b86602080830285010111156133db578485fd5b60209290920196919550909350505050565b6000602082840312156133fe578081fd5b6120998261321c565b600060208284031215613418578081fd5b8135612099816142ad565b600060208284031215613434578081fd5b8151612099816142ad565b600060208284031215613450578081fd5b813567ffffffffffffffff811115613466578182fd5b8201601f81018413613476578182fd5b61248e84823560208401613195565b600060208284031215613496578081fd5b5035919050565b600080604083850312156134af578182fd5b50508035926020909101359150565b600081518084526134d68160208601602086016141d5565b601f01601f19169290920160200192915050565b80546000906002810460018083168061350457607f831692505b602080841082141561352457634e487b7160e01b86526022600452602486fd5b818015613538576001811461354957613576565b60ff19861689528489019650613576565b61355288614167565b60005b8681101561356e5781548b820152908501908301613555565b505084890196505b50505050505092915050565b60609190911b6bffffffffffffffffffffffff1916815260140190565b600082516135b18184602087016141d5565b9190910192915050565b600084516135cd8184602089016141d5565b8451908301906135e18183602089016141d5565b6135ed818301866134ea565b979650505050505050565b600061209982846134ea565b90565b90815260200190565b6001600160a01b0391909116815260200190565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090613657908301846134be565b9695505050505050565b6001600160a01b03929092168252602082015260400190565b6000602080830181845280855180835260408601915060408482028701019250838701855b828110156136cd57603f198886030184526136bb8583516134be565b9450928501929085019060010161369f565b5092979650505050505050565b6020808252825182820181905260009190848201906040850190845b81811015613712578351835292840192918401916001016136f6565b50909695505050505050565b901515815260200190565b60006020825261209960208301846134be565b6020808252602b908201527f4552524f523a20596f75206861766520616c726561647920766f74656420696e60408201526a207468697320706f6c6c2160a81b606082015260800190565b6020808252601a908201527f45524332393831526f79616c746965733a20546f6f2068696768000000000000604082015260600190565b60208082526021908201527f4552524f523a2043616e6e6f742064726177207965742c20746f6f206561726c6040820152607960f81b606082015260800190565b6020808252602b908201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560408201526a74206f6620626f756e647360a81b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b6020808252601c908201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604082015260600190565b60208082526017908201527f4552524f523a20436f6e74726163742070617573656421000000000000000000604082015260600190565b60208082526024908201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646040820152637265737360e01b606082015260800190565b60208082526019908201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604082015260600190565b6020808252601d908201527f4552524f523a204169722064726f70206973206e6f7420616374697665000000604082015260600190565b6020808252602c908201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860408201526b34b9ba32b73a103a37b5b2b760a11b606082015260800190565b6020808252818101527f4552524f523a20546f6f206d616e792077696e6e6572732073656c6563746564604082015260600190565b60208082526038908201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760408201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000606082015260800190565b6020808252602a908201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604082015269726f206164647265737360b01b606082015260800190565b60208082526029908201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460408201526832b73a103a37b5b2b760b91b606082015260800190565b60208082526025908201527f4552524f523a204e6f7420656e6f7567682046726f6773206c65667420746f206040820152646d696e742160d81b606082015260800190565b6020808252601d908201527f4552524f523a204c6f7474657279206e6f742061637469766520796574000000604082015260600190565b60208082526024908201527f4552524f523a20596f752063616e74206d696e742074686174206d616e792066604082015263726f677360e01b606082015260800190565b60208082526019908201527f4552524f523a20546f6f206d616e7920696e206f6e6520747800000000000000604082015260600190565b6020808252603e908201527f4552524f523a20596f752068617665206e6f20766f74696e672072696768747360408201527f2e2047657420796f757273656c6620612066726f67206d79206672656e210000606082015260800190565b6020808252818101527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604082015260600190565b6020808252602c908201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860408201526b34b9ba32b73a103a37b5b2b760a11b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526029908201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960408201526839903737ba1037bbb760b91b606082015260800190565b6020808252602f908201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60408201526e3732bc34b9ba32b73a103a37b5b2b760891b606082015260800190565b60208082526036908201527f4552524f523a204d617820737570706c792069732063757272656e746c7920736040820152756d616c6c6572207468616e206e657720737570706c7960501b606082015260800190565b60208082526021908201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656040820152603960f91b606082015260800190565b60208082526023908201527f4552524f523a204e6f20706f6c6c20746f20766f7465206f6e207269676874206040820152626e6f7760e81b606082015260800190565b6020808252601c908201527f4552524f523a20496e76616c696420766f74696e67206f7074696f6e00000000604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b6020808252602c908201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60408201526b7574206f6620626f756e647360a01b606082015260800190565b60208082526030908201527f4552524f523a20546865206d6178206e6f206d696e747320706572207472616e60408201526f1cd858dd1a5bdb88195e18d95959195960821b606082015260800190565b6020808252602d908201527f4552524f523a20436f6e7472616374207061757365642e20506c65617365206360408201526c3432b1b5903234b9b1b7b9321760991b606082015260800190565b60208082526016908201527511549493d48e8810dbdb9d1c9858dd081c185d5cd95960521b604082015260600190565b6020808252602a908201527f4552524f523a20596f7520617265206e6f742070617274206f662074686520776040820152693434ba32903634b9ba1760b11b606082015260800190565b6020808252601c908201527f4552524f523a20506c656173652073656e64206d6f7265204156415800000000604082015260600190565b60208082526019908201527f4552524f523a20436f6e74726163742069732070617573656400000000000000604082015260600190565b9283526001600160a01b03919091166020830152604082015260600190565b60009081526020902090565b600082198211156141865761418661426b565b500190565b60008261419a5761419a614281565b500490565b60008160001904831182151516156141b9576141b961426b565b500290565b6000828210156141d0576141d061426b565b500390565b60005b838110156141f05781810151838201526020016141d8565b83811115611d195750506000910152565b60028104600182168061421557607f821691505b6020821081141561423657634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156142505761425061426b565b5060010190565b60008261426657614266614281565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b03198116811461140b57600080fdfea2646970667358221220694cb1866eb00df5dd33be169f5558785d071e24e1d97538a0aa9fc29ed2b8ae64736f6c63430008000033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000b46616e746f6d46726f6773000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000846544d46524f4753000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004068747470733a2f2f73332e65752d776573742d322e616d617a6f6e6177732e636f6d2f6e6674646174612e66616e746f6d66726f67732e6e66742f6d6574612f
-----Decoded View---------------
Arg [0] : _name (string): FantomFrogs
Arg [1] : _symbol (string): FTMFROGS
Arg [2] : _initBaseURI (string): https://s3.eu-west-2.amazonaws.com/nftdata.fantomfrogs.nft/meta/
-----Encoded View---------------
10 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [3] : 000000000000000000000000000000000000000000000000000000000000000b
Arg [4] : 46616e746f6d46726f6773000000000000000000000000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000008
Arg [6] : 46544d46524f4753000000000000000000000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [8] : 68747470733a2f2f73332e65752d776573742d322e616d617a6f6e6177732e63
Arg [9] : 6f6d2f6e6674646174612e66616e746f6d66726f67732e6e66742f6d6574612f
Deployed Bytecode Sourcemap
51623:16740:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53431:247;;;;;;;;;;-1:-1:-1;53431:247:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;58711:79;;;;;;;;;;-1:-1:-1;58711:79:0;;;;;:::i;:::-;;:::i;:::-;;23873:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;25566:308::-;;;;;;;;;;-1:-1:-1;25566:308:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;25089:411::-;;;;;;;;;;-1:-1:-1;25089:411:0;;;;;:::i;:::-;;:::i;52779:45::-;;;;;;;;;;-1:-1:-1;52779:45:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;57793:111::-;;;;;;;;;;-1:-1:-1;57793:111:0;;;;;:::i;:::-;;:::i;52073:30::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;37718:113::-;;;;;;;;;;;;;:::i;51960:22::-;;;;;;;;;;;;;:::i;67436:169::-;;;;;;;;;;-1:-1:-1;67436:169:0;;;;;:::i;:::-;;:::i;26625:376::-;;;;;;;;;;-1:-1:-1;26625:376:0;;;;;:::i;:::-;;:::i;63560:114::-;;;;;;;;;;-1:-1:-1;63560:114:0;;;;;:::i;:::-;;:::i;51289:300::-;;;;;;;;;;-1:-1:-1;51289:300:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;65445:147::-;;;;;;;;;;-1:-1:-1;65445:147:0;;;;;:::i;:::-;;:::i;37299:343::-;;;;;;;;;;-1:-1:-1;37299:343:0;;;;;:::i;:::-;;:::i;66409:156::-;;;;;;;;;;-1:-1:-1;66409:156:0;;;;;:::i;:::-;;:::i;64299:97::-;;;;;;;;;;-1:-1:-1;64299:97:0;;;;;:::i;:::-;;:::i;52386:33::-;;;;;;;;;;;;;:::i;68267:93::-;;;;;;;;;;-1:-1:-1;68267:93:0;;;;;:::i;:::-;;:::i;59421:905::-;;;;;;;;;;-1:-1:-1;59421:905:0;;;;;:::i;:::-;;:::i;58939:250::-;;;:::i;62765:96::-;;;;;;;;;;-1:-1:-1;62765:96:0;;;;;:::i;:::-;;:::i;27072:185::-;;;;;;;;;;-1:-1:-1;27072:185:0;;;;;:::i;:::-;;:::i;55802:390::-;;;;;;;;;;-1:-1:-1;55802:390:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;57227:88::-;;;;;;;;;;-1:-1:-1;57227:88:0;;;;;:::i;:::-;;:::i;37908:320::-;;;;;;;;;;-1:-1:-1;37908:320:0;;;;;:::i;:::-;;:::i;58102:104::-;;;;;;;;;;-1:-1:-1;58102:104:0;;;;;:::i;:::-;;:::i;66721:89::-;;;;;;;;;;-1:-1:-1;66721:89:0;;;;;:::i;:::-;;:::i;52540:27::-;;;;;;;;;;-1:-1:-1;52540:27:0;;;;;:::i;:::-;;:::i;52314:25::-;;;;;;;;;;;;;:::i;23480:326::-;;;;;;;;;;-1:-1:-1;23480:326:0;;;;;:::i;:::-;;:::i;66115:94::-;;;;;;;;;;-1:-1:-1;66115:94:0;;;;;:::i;:::-;;:::i;63110:259::-;;;;;;;;;;-1:-1:-1;63110:259:0;;;;;:::i;:::-;;:::i;23123:295::-;;;;;;;;;;-1:-1:-1;23123:295:0;;;;;:::i;:::-;;:::i;48732:94::-;;;;;;;;;;;;;:::i;67728:101::-;;;;;;;;;;;;;:::i;52186:37::-;;;;;;;;;;;;;:::i;48081:87::-;;;;;;;;;;;;;:::i;52426:29::-;;;;;;;;;;;;;:::i;52667:50::-;;;;;;;;;;-1:-1:-1;52667:50:0;;;;;:::i;:::-;;:::i;65694:255::-;;;;;;;;;;;;;:::i;24042:104::-;;;;;;;;;;;;;:::i;64550:740::-;;;;;;;;;;-1:-1:-1;64550:740:0;;;;;:::i;:::-;;:::i;53863:1534::-;;;;;;:::i;:::-;;:::i;52148:31::-;;;;;;;;;;;;;:::i;25946:327::-;;;;;;;;;;-1:-1:-1;25946:327:0;;;;;:::i;:::-;;:::i;52504:29::-;;;;;;;;;;-1:-1:-1;52504:29:0;;;;;:::i;:::-;;:::i;51989:38::-;;;;;;;;;;;;;:::i;27328:365::-;;;;;;;;;;-1:-1:-1;27328:365:0;;;;;:::i;:::-;;:::i;52621:39::-;;;;;;;;;;-1:-1:-1;52621:39:0;;;;;:::i;:::-;;:::i;67952:307::-;;;;;;;;;;-1:-1:-1;67952:307:0;;;;;:::i;:::-;;:::i;67130:134::-;;;;;;;;;;;;;:::i;51916:37::-;;;;;;;;;;;;;:::i;56422:642::-;;;;;;;;;;-1:-1:-1;56422:642:0;;;;;:::i;:::-;;:::i;63834:303::-;;;;;;;;;;-1:-1:-1;63834:303:0;;;;;:::i;:::-;;:::i;52346:33::-;;;;;;;;;;;;;:::i;52110:31::-;;;;;;;;;;;;;:::i;52230:29::-;;;;;;;;;;;;;:::i;58429:151::-;;;;;;;;;;-1:-1:-1;58429:151:0;;;;;:::i;:::-;;:::i;57498:100::-;;;;;;;;;;-1:-1:-1;57498:100:0;;;;;:::i;:::-;;:::i;66925:103::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;26344:214::-;;;;;;;;;;-1:-1:-1;26344:214:0;;;;;:::i;:::-;;:::i;48981:229::-;;;;;;;;;;-1:-1:-1;48981:229:0;;;;;:::i;:::-;;:::i;53431:247::-;53605:4;53634:36;53658:11;53634:23;:36::i;:::-;53627:43;;53431:247;;;;:::o;58711:79::-;48312:12;:10;:12::i;:::-;-1:-1:-1;;;;;48301:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;48301:23:0;;48293:68;;;;-1:-1:-1;;;48293:68:0;;;;;;;:::i;:::-;;;;;;;;;58767:6:::1;:15:::0;;-1:-1:-1;;58767:15:0::1;::::0;::::1;;::::0;;;::::1;::::0;;58711:79::o;23873:100::-;23927:13;23960:5;23953:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23873:100;:::o;25566:308::-;25687:7;25734:16;25742:7;25734;:16::i;:::-;25712:110;;;;-1:-1:-1;;;25712:110:0;;;;;;;:::i;:::-;-1:-1:-1;25842:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;25842:24:0;;25566:308::o;25089:411::-;25170:13;25186:23;25201:7;25186:14;:23::i;:::-;25170:39;;25234:5;-1:-1:-1;;;;;25228:11:0;:2;-1:-1:-1;;;;;25228:11:0;;;25220:57;;;;-1:-1:-1;;;25220:57:0;;;;;;;:::i;:::-;25328:5;-1:-1:-1;;;;;25312:21:0;:12;:10;:12::i;:::-;-1:-1:-1;;;;;25312:21:0;;:62;;;;25337:37;25354:5;25361:12;:10;:12::i;25337:37::-;25290:168;;;;-1:-1:-1;;;25290:168:0;;;;;;;:::i;:::-;25471:21;25480:2;25484:7;25471:8;:21::i;:::-;25089:411;;;:::o;52779:45::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;52779:45:0;;;;-1:-1:-1;52779:45:0;:::o;57793:111::-;48312:12;:10;:12::i;:::-;-1:-1:-1;;;;;48301:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;48301:23:0;;48293:68;;;;-1:-1:-1;;;48293:68:0;;;;;;;:::i;:::-;57869:18:::1;:27:::0;57793:111::o;52073:30::-;;;;:::o;37718:113::-;37806:10;:17;37718:113;:::o;51960:22::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;67436:169::-;48312:12;:10;:12::i;:::-;-1:-1:-1;;;;;48301:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;48301:23:0;;48293:68;;;;-1:-1:-1;;;48293:68:0;;;;;;;:::i;:::-;67516:9:::1;67511:87;67535:2;67531:1;:6;67511:87;;;67566:17;::::0;;;:9:::1;:17;::::0;;;;:20;;67584:1;;67566:20;::::1;;;-1:-1:-1::0;;;67566:20:0::1;;;;;;;;;;::::0;;;::::1;::::0;;::::1;::::0;;::::1;;67559:27:::0;;;::::1;::::0;::::1;::::0;;-1:-1:-1;;;;;;67559:27:0::1;::::0;;::::1;;::::0;67539:3;::::1;::::0;::::1;:::i;:::-;;;;67511:87;;;;67436:169:::0;:::o;26625:376::-;26834:41;26853:12;:10;:12::i;:::-;26867:7;26834:18;:41::i;:::-;26812:140;;;;-1:-1:-1;;;26812:140:0;;;;;;;:::i;:::-;26965:28;26975:4;26981:2;26985:7;26965:9;:28::i;63560:114::-;48312:12;:10;:12::i;:::-;-1:-1:-1;;;;;48301:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;48301:23:0;;48293:68;;;;-1:-1:-1;;;48293:68:0;;;;;;;:::i;:::-;63638:19:::1;:28:::0;63560:114::o;51289:300::-;51410:16;51492:19;;;:10;:19;;;;;;;;51467:44;;;;;;;;;;-1:-1:-1;;;;;51467:44:0;;;;;;;;;;;;;;;51410:16;;51575:5;;51550:21;;:5;:21;:::i;:::-;51549:31;;;;:::i;:::-;51522:59;;;;;51289:300;;;;;:::o;65445:147::-;48312:12;:10;:12::i;:::-;-1:-1:-1;;;;;48301:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;48301:23:0;;48293:68;;;;-1:-1:-1;;;48293:68:0;;;;;;;:::i;:::-;65545:4:::1;65520:14;65535:6;65520:22;;;;;;:::i;:::-;::::0;;;::::1;::::0;::::1;::::0;;;;;;;;:29;;-1:-1:-1;;65520:29:0::1;::::0;::::1;;::::0;;;::::1;::::0;;;65560:11:::1;:24:::0;;-1:-1:-1;65560:24:0;::::1;::::0;;-1:-1:-1;65560:24:0;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;::::0;::::1;:::i;37299:343::-:0;37441:7;37496:23;37513:5;37496:16;:23::i;:::-;37488:5;:31;37466:124;;;;-1:-1:-1;;;37466:124:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;;37608:19:0;;;;;;;;:12;:19;;;;;;;;:26;;;;;;;;;37299:343::o;66409:156::-;66512:7;66544:5;66550:6;66544:13;;;;;;:::i;:::-;;;;;;;;;;;;;;66537:20;;66409:156;;;:::o;64299:97::-;48312:12;:10;:12::i;:::-;-1:-1:-1;;;;;48301:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;48301:23:0;;48293:68;;;;-1:-1:-1;;;48293:68:0;;;;;;;:::i;:::-;64367:13:::1;:21:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;64367:21:0;;::::1;::::0;;;::::1;::::0;;64299:97::o;52386:33::-;;;;;;;;;:::o;68267:93::-;48312:12;:10;:12::i;:::-;-1:-1:-1;;;;;48301:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;48301:23:0;;48293:68;;;;-1:-1:-1;;;48293:68:0;;;;;;;:::i;:::-;68330:13:::1;:22:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;68330:22:0;;::::1;::::0;;;::::1;::::0;;68267:93::o;59421:905::-;48312:12;:10;:12::i;:::-;-1:-1:-1;;;;;48301:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;48301:23:0;;48293:68;;;;-1:-1:-1;;;48293:68:0;;;;;;;:::i;:::-;59504:6:::1;::::0;::::1;;59503:7;59495:45;;;;-1:-1:-1::0;;;59495:45:0::1;;;;;;;:::i;:::-;59559:13;::::0;::::1;::::0;::::1;;;59551:55;;;;-1:-1:-1::0;;;59551:55:0::1;;;;;;;:::i;:::-;59640:2;59625:11;:17;;59617:62;;;;-1:-1:-1::0;;;59617:62:0::1;;;;;;;:::i;:::-;59763:12;59776:19:::0;;59711:15:::1;::::0;59692:16:::1;::::0;59776:23:::1;::::0;59798:1:::1;::::0;59776:23:::1;:::i;:::-;59763:37;;;;;;-1:-1:-1::0;;;59763:37:0::1;;;;;;;;;;;;;;;;;59737:63;;59847:15;59835:8;:27;;59813:110;;;;-1:-1:-1::0;;;59813:110:0::1;;;;;;;:::i;:::-;59941:9;59936:256;59960:11;59956:1;:15;59936:256;;;59993:187;60025:1;60045:8;60072:10;60101:15;60135:10;60164:1;59993:13;:187::i;:::-;59973:3:::0;::::1;::::0;::::1;:::i;:::-;;;;59936:256;;;;60204:12;60245:19;;60234:8;;:30;;;;:::i;:::-;60222:43;::::0;:8;:43:::1;:::i;:::-;60204:62:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;60204:62:0;;;::::1;::::0;;::::1;::::0;60306:10:::1;:12:::0;;;::::1;::::0;::::1;:::i;:::-;;;;;;48372:1;;59421:905:::0;:::o;58939:250::-;48312:12;:10;:12::i;:::-;-1:-1:-1;;;;;48301:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;48301:23:0;;48293:68;;;;-1:-1:-1;;;48293:68:0;;;;;;;:::i;:::-;59009:6:::1;::::0;::::1;;59008:7;59000:43;;;;-1:-1:-1::0;;;59000:43:0::1;;;;;;;:::i;:::-;59055:12;59081:7;:5;:7::i;:::-;-1:-1:-1::0;;;;;59073:21:0::1;59102;59073:79;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;59054:98;;;59173:7;59165:16;;;::::0;::::1;;48372:1;58939:250::o:0;62765:96::-;48312:12;:10;:12::i;:::-;-1:-1:-1;;;;;48301:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;48301:23:0;;48293:68;;;;-1:-1:-1;;;48293:68:0;;;;;;;:::i;:::-;62832:13:::1;:21:::0;;;::::1;;;;-1:-1:-1::0;;62832:21:0;;::::1;::::0;;;::::1;::::0;;62765:96::o;27072:185::-;27210:39;27227:4;27233:2;27237:7;27210:39;;;;;;;;;;;;:16;:39::i;55802:390::-;55889:16;55923:23;55949:17;55959:6;55949:9;:17::i;:::-;55923:43;;55977:25;56019:15;56005:30;;;;;;-1:-1:-1;;;56005:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;56005:30:0;;55977:58;;56051:9;56046:113;56066:15;56062:1;:19;56046:113;;;56117:30;56137:6;56145:1;56117:19;:30::i;:::-;56103:8;56112:1;56103:11;;;;;;-1:-1:-1;;;56103:11:0;;;;;;;;;;;;;;;;;;:44;56083:3;;;;:::i;:::-;;;;56046:113;;;-1:-1:-1;56176:8:0;55802:390;-1:-1:-1;;;55802:390:0:o;57227:88::-;48312:12;:10;:12::i;:::-;-1:-1:-1;;;;;48301:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;48301:23:0;;48293:68;;;;-1:-1:-1;;;48293:68:0;;;;;;;:::i;:::-;57292:4:::1;:15:::0;57227:88::o;37908:320::-;38028:7;38083:30;:28;:30::i;:::-;38075:5;:38;38053:132;;;;-1:-1:-1;;;38053:132:0;;;;;;;:::i;:::-;38203:10;38214:5;38203:17;;;;;;-1:-1:-1;;;38203:17:0;;;;;;;;;;;;;;;;;38196:24;;37908:320;;;:::o;58102:104::-;48312:12;:10;:12::i;:::-;-1:-1:-1;;;;;48301:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;48301:23:0;;48293:68;;;;-1:-1:-1;;;48293:68:0;;;;;;;:::i;:::-;58177:21;;::::1;::::0;:7:::1;::::0;:21:::1;::::0;::::1;::::0;::::1;:::i;66721:89::-:0;48312:12;:10;:12::i;:::-;-1:-1:-1;;;;;48301:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;48301:23:0;;48293:68;;;;-1:-1:-1;;;48293:68:0;;;;;;;:::i;:::-;66785:9:::1;:17:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;66785:17:0;;::::1;::::0;;;::::1;::::0;;66721:89::o;52540:27::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;52314:25::-;;;;;;:::o;23480:326::-;23597:7;23638:16;;;:7;:16;;;;;;-1:-1:-1;;;;;23638:16:0;23687:19;23665:110;;;;-1:-1:-1;;;23665:110:0;;;;;;;:::i;66115:94::-;48312:12;:10;:12::i;:::-;-1:-1:-1;;;;;48301:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;48301:23:0;;48293:68;;;;-1:-1:-1;;;48293:68:0;;;;;;;:::i;:::-;66186:15;;::::1;::::0;:8:::1;::::0;:15:::1;::::0;::::1;::::0;::::1;:::i;63110:259::-:0;48312:12;:10;:12::i;:::-;-1:-1:-1;;;;;48301:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;48301:23:0;;48293:68;;;;-1:-1:-1;;;48293:68:0;;;;;;;:::i;:::-;63209:9:::1;;63200:6;:18;63178:122;;;;-1:-1:-1::0;;;63178:122:0::1;;;;;;;:::i;:::-;63311:13;:21:::0;;-1:-1:-1;;63311:21:0::1;::::0;;63343:9:::1;:18:::0;63110:259::o;23123:295::-;23240:7;-1:-1:-1;;;;;23287:19:0;;23265:111;;;;-1:-1:-1;;;23265:111:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;;23394:16:0;;;;;:9;:16;;;;;;;23123:295::o;48732:94::-;48312:12;:10;:12::i;:::-;-1:-1:-1;;;;;48301:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;48301:23:0;;48293:68;;;;-1:-1:-1;;;48293:68:0;;;;;;;:::i;:::-;48797:21:::1;48815:1;48797:9;:21::i;:::-;48732:94::o:0;67728:101::-;67803:11;:18;67728:101;:::o;52186:37::-;;;;:::o;48081:87::-;48154:6;;-1:-1:-1;;;;;48154:6:0;48081:87;:::o;52426:29::-;;;;;;;;;:::o;52667:50::-;;;;;;;;;;;;;;;:::o;65694:255::-;48312:12;:10;:12::i;:::-;-1:-1:-1;;;;;48301:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;48301:23:0;;48293:68;;;;-1:-1:-1;;;48293:68:0;;;;;;;:::i;:::-;65757:9:::1;65752:190;65776:11;:18:::0;65772:22;::::1;65752:190;;;65840:1;65816:5;65822:11;65834:1;65822:14;;;;;;-1:-1:-1::0;;;65822:14:0::1;;;;;;;;;;;;;;;;65816:21;;;;;;:::i;:::-;;;;;;;;;;;;;:25;;;;65889:5;65856:14;65871:11;65883:1;65871:14;;;;;;-1:-1:-1::0;;;65871:14:0::1;;;;;;;;;;;;;;;;65856:30;;;;;;:::i;:::-;::::0;;;::::1;::::0;;;;;::::1;::::0;;;:38;;;::::1;;-1:-1:-1::0;;65856:38:0;;::::1;::::0;;;::::1;::::0;;65916:11:::1;:14:::0;;65928:1;;65916:14;::::1;;;-1:-1:-1::0;;;65916:14:0::1;;;;;;;;;;;;;;;;;65909:21;;;;:::i;:::-;65796:3:::0;::::1;::::0;::::1;:::i;:::-;;;;65752:190;;24042:104:::0;24098:13;24131:7;24124:14;;;;;:::i;64550:740::-;64619:6;;;;64618:7;64610:42;;;;-1:-1:-1;;;64610:42:0;;;;;;;:::i;:::-;64671:9;;;;;;;64663:57;;;;-1:-1:-1;;;64663:57:0;;;;;;;:::i;:::-;64739:14;64754:6;64739:22;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;64731:63;;;;-1:-1:-1;;;64731:63:0;;;;;;;:::i;:::-;64930:8;64913:26;;;;;;;;:::i;:::-;;;;-1:-1:-1;;64913:26:0;;;;;;;;;64903:37;;64913:26;64903:37;;;;64869:10;64854:26;;;;:14;:26;;;;;;64903:37;;64837:44;;64854:26;64837:44;;:::i;:::-;;;;;;;;;;;;;64827:55;;;;;;:113;;64805:206;;;;-1:-1:-1;;;64805:206:0;;;;;;;:::i;:::-;65024:15;65042:21;65052:10;65042:9;:21::i;:::-;65024:39;;65108:1;65098:7;:11;65076:123;;;;-1:-1:-1;;;65076:123:0;;;;;;;:::i;:::-;65227:7;65210:5;65216:6;65210:13;;;;;;:::i;:::-;;;;;;;;;;;;;;:24;;;;;;;:::i;:::-;;;;-1:-1:-1;;65260:10:0;65245:26;;;;:14;:26;;;;;65274:8;65245:37;;;;;:::i;:::-;;;;;;:::i;53863:1534::-;53924:14;53941:13;:11;:13::i;:::-;54040:10;53965:25;54027:24;;;:12;:24;;;;;;53993:18;;53924:30;;-1:-1:-1;53965:25:0;;53993:58;;54027:24;53993:58;:::i;:::-;53965:86;;54107:11;54086:17;:32;;54064:118;;;;-1:-1:-1;;;54064:118:0;;;;;;;:::i;:::-;54202:6;;;;54201:7;54193:65;;;;-1:-1:-1;;;54193:65:0;;;;;;;:::i;:::-;54306:12;;54291:11;:27;;54269:125;;;;-1:-1:-1;;;54269:125:0;;;;;;;:::i;:::-;54451:9;;54427:20;54436:11;54427:6;:20;:::i;:::-;:33;;54405:120;;;;-1:-1:-1;;;54405:120:0;;;;;;;:::i;:::-;54580:11;54573:4;;:18;;;;:::i;:::-;54560:9;:31;;54538:109;;;;-1:-1:-1;;;54538:109:0;;;;;;;:::i;:::-;54664:13;;;;;;;54660:188;;;54739:10;54720:30;;;;:18;:30;;;;;;;;:38;;:30;:38;54694:142;;;;-1:-1:-1;;;54694:142:0;;;;;;;:::i;:::-;54877:1;54860:530;54885:11;54880:1;:16;54860:530;;54918:15;54936:10;:6;54945:1;54936:10;:::i;:::-;54918:28;;54961:30;54971:10;54983:7;54961:9;:30::i;:::-;55006:53;55023:7;55032;:5;:7::i;:::-;55041:17;;55006:16;:53::i;:::-;55089:10;55076:24;;;;:12;:24;;;;;:26;;;;;;:::i;:::-;;;;;;55209:9;;55198:7;:20;55194:78;;;55239:17;:15;:17::i;:::-;55365:13;:11;:13::i;:::-;55356:22;;54860:530;54898:3;;;;;:::i;:::-;;;;54860:530;;;;53863:1534;;;:::o;52148:31::-;;;;:::o;25946:327::-;26093:12;:10;:12::i;:::-;-1:-1:-1;;;;;26081:24:0;:8;-1:-1:-1;;;;;26081:24:0;;;26073:62;;;;-1:-1:-1;;;26073:62:0;;;;;;;:::i;:::-;26193:8;26148:18;:32;26167:12;:10;:12::i;:::-;-1:-1:-1;;;;;26148:32:0;;;;;;;;;;;;;;;;;-1:-1:-1;26148:32:0;;;:42;;;;;;;;;;;;:53;;-1:-1:-1;;26148:53:0;;;;;;;;;;;26232:12;:10;:12::i;:::-;-1:-1:-1;;;;;26217:48:0;;26256:8;26217:48;;;;;;:::i;:::-;;;;;;;;25946:327;;:::o;52504:29::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;52504:29:0;:::o;51989:38::-;;;;:::o;27328:365::-;27517:41;27536:12;:10;:12::i;:::-;27550:7;27517:18;:41::i;:::-;27495:140;;;;-1:-1:-1;;;27495:140:0;;;;;;;:::i;:::-;27646:39;27660:4;27666:2;27670:7;27679:5;27646:13;:39::i;52621:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;67952:307::-;48312:12;:10;:12::i;:::-;-1:-1:-1;;;;;48301:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;48301:23:0;;48293:68;;;;-1:-1:-1;;;48293:68:0;;;;;;;:::i;:::-;68093:3:::1;68073:23:::0;::::1;68065:61;;;;-1:-1:-1::0;;;68065:61:0::1;;;;;;;:::i;:::-;68142:9;68137:115;68157:21:::0;;::::1;68137:115;;;68236:4;68200:18;:33;68219:10;;68230:1;68219:13;;;;;-1:-1:-1::0;;;68219:13:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;68200:33:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;68200:33:0;:40;;-1:-1:-1;;68200:40:0::1;::::0;::::1;;::::0;;;::::1;::::0;;68180:3;::::1;::::0;::::1;:::i;:::-;;;;68137:115;;67130:134:::0;48312:12;:10;:12::i;:::-;-1:-1:-1;;;;;48301:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;48301:23:0;;48293:68;;;;-1:-1:-1;;;48293:68:0;;;;;;;:::i;:::-;67181:4:::1;-1:-1:-1::0;;;;;67181:21:0::1;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;67215:9:0::1;:17:::0;;-1:-1:-1;;67215:17:0::1;::::0;;-1:-1:-1;;67243:13:0::1;::::0;;::::1;::::0;::::1;::::0;;;;67227:5:::1;67243:13:::0;;;;::::1;::::0;:8:::1;::::0;:13:::1;:::i;51916:37::-:0;;;;;;;:::i;56422:642::-;56540:13;56593:16;56601:7;56593;:16::i;:::-;56571:113;;;;-1:-1:-1;;;56571:113:0;;;;;;;:::i;:::-;56697:28;56728:10;:8;:10::i;:::-;56697:41;;56800:1;56775:14;56769:28;:32;:287;;;;;;;;;;;;;;;;;56893:14;56934:18;:7;:16;:18::i;:::-;56979:13;56850:165;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;56769:287;56749:307;56422:642;-1:-1:-1;;;56422:642:0:o;63834:303::-;48312:12;:10;:12::i;:::-;-1:-1:-1;;;;;48301:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;48301:23:0;;48293:68;;;;-1:-1:-1;;;48293:68:0;;;;;;;:::i;:::-;63901:13:::1;::::0;;;::::1;;;63893:55;;;;-1:-1:-1::0;;;63893:55:0::1;;;;;;;:::i;:::-;63961:14;63978:13;:11;:13::i;:::-;63961:30:::0;-1:-1:-1;64002:15:0::1;64020:10;63961:30:::0;64029:1:::1;64020:10;:::i;:::-;64002:28;;64043:53;64060:7;64069;:5;:7::i;64043:53::-;64107:22;64117:2;64121:7;64107:9;:22::i;52346:33::-:0;;;;;;;;;:::o;52110:31::-;;;;:::o;52230:29::-;;;;:::o;58429:151::-;48312:12;:10;:12::i;:::-;-1:-1:-1;;;;;48301:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;48301:23:0;;48293:68;;;;-1:-1:-1;;;48293:68:0;;;;;;;:::i;:::-;58539:33;;::::1;::::0;:13:::1;::::0;:33:::1;::::0;::::1;::::0;::::1;:::i;57498:100::-:0;48312:12;:10;:12::i;:::-;-1:-1:-1;;;;;48301:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;48301:23:0;;48293:68;;;;-1:-1:-1;;;48293:68:0;;;;;;;:::i;:::-;57569:12:::1;:21:::0;57498:100::o;66925:103::-;66974:15;67009:11;67002:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;66925:103;:::o;26344:214::-;-1:-1:-1;;;;;26515:25:0;;;26486:4;26515:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;26344:214::o;48981:229::-;48312:12;:10;:12::i;:::-;-1:-1:-1;;;;;48301:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;48301:23:0;;48293:68;;;;-1:-1:-1;;;48293:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;49084:22:0;::::1;49062:110;;;;-1:-1:-1::0;;;49062:110:0::1;;;;;;;:::i;:::-;49183:19;49193:8;49183:9;:19::i;50480:283::-:0;50610:4;-1:-1:-1;;;;;;50652:50:0;;-1:-1:-1;;;50652:50:0;;:103;;;50719:36;50743:11;50719:23;:36::i;21178:98::-;21258:10;21178:98;:::o;29240:127::-;29305:4;29329:16;;;:7;:16;;;;;;-1:-1:-1;;;;;29329:16:0;:30;;;29240:127::o;33363:174::-;33438:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;33438:29:0;-1:-1:-1;;;;;33438:29:0;;;;;;;;:24;;33492:23;33438:24;33492:14;:23::i;:::-;-1:-1:-1;;;;;33483:46:0;;;;;;;;;;;33363:174;;:::o;29534:452::-;29663:4;29707:16;29715:7;29707;:16::i;:::-;29685:110;;;;-1:-1:-1;;;29685:110:0;;;;;;;:::i;:::-;29806:13;29822:23;29837:7;29822:14;:23::i;:::-;29806:39;;29875:5;-1:-1:-1;;;;;29864:16:0;:7;-1:-1:-1;;;;;29864:16:0;;:64;;;;29921:7;-1:-1:-1;;;;;29897:31:0;:20;29909:7;29897:11;:20::i;:::-;-1:-1:-1;;;;;29897:31:0;;29864:64;:113;;;;29945:32;29962:5;29969:7;29945:16;:32::i;:::-;29856:122;29534:452;-1:-1:-1;;;;29534:452:0:o;32630:615::-;32803:4;-1:-1:-1;;;;;32776:31:0;:23;32791:7;32776:14;:23::i;:::-;-1:-1:-1;;;;;32776:31:0;;32754:122;;;;-1:-1:-1;;;32754:122:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32895:16:0;;32887:65;;;;-1:-1:-1;;;32887:65:0;;;;;;;:::i;:::-;32965:39;32986:4;32992:2;32996:7;32965:20;:39::i;:::-;33069:29;33086:1;33090:7;33069:8;:29::i;:::-;-1:-1:-1;;;;;33111:15:0;;;;;;:9;:15;;;;;:20;;33130:1;;33111:15;:20;;33130:1;;33111:20;:::i;:::-;;;;-1:-1:-1;;;;;;;33142:13:0;;;;;;:9;:13;;;;;:18;;33159:1;;33142:13;:18;;33159:1;;33142:18;:::i;:::-;;;;-1:-1:-1;;33171:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;33171:21:0;-1:-1:-1;;;;;33171:21:0;;;;;;;;;33210:27;;33171:16;;33210:27;;;;;;;32630:615;;;:::o;60560:1217::-;60843:20;60866:26;60871:10;60883:8;60866:4;:26::i;:::-;60843:49;;60903:21;60927:28;60942:12;60927:14;:28::i;:::-;-1:-1:-1;;;;;60984:23:0;;60966:15;60984:23;;;:8;:23;;;;;;60903:52;;-1:-1:-1;61039:22:0;;;61075:17;;:::i;:::-;61115:1;61110:2;:6;61109:22;;;;;61121:10;61109:22;61105:646;;;61148:13;61164:6;:2;61169:1;61164:6;:::i;:::-;61148:22;;61209:225;61245:5;61273:8;61304:6;61333:11;61367:13;61403:12;61209:13;:225::i;:::-;61185:249;;;;;;;;61105:646;61463:1;61457:2;:7;;61456:23;;;;;61469:10;61456:23;61452:299;;;61496:7;;;;;;;61452:299;61535:22;;;-1:-1:-1;;;;;61572:26:0;;;:10;;;;:26;;;61613:11;;;;:26;;;61664:10;;61535:8;61654:21;;;:9;:21;;;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;61654:31:0;;;;;;;;;;;;;;;;61702:23;;;:8;:23;;;;:37;;;61763:7;;;;;60560:1217;;;;;;;:::o;49218:173::-;49293:6;;;-1:-1:-1;;;;;49310:17:0;;;-1:-1:-1;;;;;;49310:17:0;;;;;;;49343:40;;49293:6;;;49310:17;49293:6;;49343:40;;49274:16;;49343:40;49218:173;;:::o;30328:110::-;30404:26;30414:2;30418:7;30404:26;;;;;;;;;;;;:9;:26::i;51000:242::-;51143:5;51134;:14;;51126:53;;;;-1:-1:-1;;;51126:53:0;;;;;;;:::i;:::-;51209:25;;;;;;;;-1:-1:-1;;;;;51209:25:0;;;;;;;;;;;;-1:-1:-1;51192:14:0;;;:10;:14;;;;:42;;;;-1:-1:-1;;;;;;51192:42:0;;;;;;;;;;-1:-1:-1;51192:42:0;;;;51000:242::o;55500:177::-;55546:13;:20;;-1:-1:-1;;55546:20:0;;;;;55625:19;;55614:8;;55577:12;;55614:30;;;:::i;:::-;55595:50;;:15;:50;:::i;:::-;55577:69;;;;;;;-1:-1:-1;55577:69:0;;;;;;;;55657:10;:12;;;;;;:::i;:::-;;;;;;55500:177::o;28575:352::-;28732:28;28742:4;28748:2;28752:7;28732:9;:28::i;:::-;28793:48;28816:4;28822:2;28826:7;28835:5;28793:22;:48::i;:::-;28771:148;;;;-1:-1:-1;;;28771:148:0;;;;;;;:::i;53315:108::-;53375:13;53408:7;53401:14;;;;;:::i;8523:723::-;8579:13;8800:10;8796:53;;-1:-1:-1;8827:10:0;;;;;;;;;;;;-1:-1:-1;;;8827:10:0;;;;;;8796:53;8874:5;8859:12;8915:78;8922:9;;8915:78;;8948:8;;;;:::i;:::-;;-1:-1:-1;8971:10:0;;-1:-1:-1;8979:2:0;8971:10;;:::i;:::-;;;8915:78;;;9003:19;9035:6;9025:17;;;;;;-1:-1:-1;;;9025:17:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9025:17:0;;9003:39;;9053:154;9060:10;;9053:154;;9087:11;9097:1;9087:11;;:::i;:::-;;-1:-1:-1;9156:10:0;9164:2;9156:5;:10;:::i;:::-;9143:24;;:2;:24;:::i;:::-;9130:39;;9113:6;9120;9113:14;;;;;;-1:-1:-1;;;9113:14:0;;;;;;;;;;;;:56;-1:-1:-1;;;;;9113:56:0;;;;;;;;-1:-1:-1;9184:11:0;9193:2;9184:11;;:::i;:::-;;;9053:154;;36915:300;37062:4;-1:-1:-1;;;;;;37104:50:0;;-1:-1:-1;;;37104:50:0;;:103;;;37171:36;37195:11;37171:23;:36::i;38841:889::-;38985:45;39012:4;39018:2;39022:7;38985:26;:45::i;:::-;-1:-1:-1;;;;;39047:18:0;;39043:364;;39103:40;39135:7;39103:31;:40::i;:::-;39158:35;39181:7;39190:2;39158:22;:35::i;:::-;39208:34;39230:2;39234:7;39208:21;:34::i;:::-;39043:364;;;39272:2;-1:-1:-1;;;;;39264:10:0;:4;-1:-1:-1;;;;;39264:10:0;;39260:147;;39348:47;39381:4;39387:7;39348:32;:47::i;:::-;-1:-1:-1;;;;;39423:16:0;;39419:304;;39477:45;39514:7;39477:36;:45::i;:::-;39419:304;;;39550:4;-1:-1:-1;;;;;39544:10:0;:2;-1:-1:-1;;;;;39544:10:0;;39540:183;;39621:40;39649:2;39653:7;39621:27;:40::i;:::-;39676:35;39699:7;39708:2;39676:22;:35::i;61785:798::-;61890:7;61915:12;62453;62408:15;62358:13;62341:31;;;;;;;;:::i;:::-;;;;;;;;;;;;;62331:42;;;;;;62323:51;;62322:102;;;;:::i;:::-;62279:14;62234:15;62186:14;62169:32;;;;;;;;:::i;:::-;;;;;;;;;;;;;62159:43;;;;;;62151:52;;62120:130;;;;:::i;:::-;62075:16;62020:26;62038:8;62020:15;:26;:::i;:::-;62019:72;;;;:::i;:::-;:232;;;;:::i;:::-;:274;;;;:::i;:::-;:406;;;;:::i;:::-;:446;;;;:::i;:::-;61980:504;;;;;;;;:::i;:::-;;;;-1:-1:-1;;61980:504:0;;;;;;;;;61952:547;;61980:504;61952:547;;;;62560:9;;61952:547;;-1:-1:-1;62540:16:0;62560:9;61952:547;62540:16;:::i;:::-;62539:30;;;;:::i;:::-;62531:39;;:4;:39;:::i;:::-;62530:45;;62574:1;62530:45;:::i;30665:321::-;30795:18;30801:2;30805:7;30795:5;:18::i;:::-;30846:54;30877:1;30881:2;30885:7;30894:5;30846:22;:54::i;:::-;30824:154;;;;-1:-1:-1;;;30824:154:0;;;;;;;:::i;34102:980::-;34257:4;34278:15;:2;-1:-1:-1;;;;;34278:13:0;;:15::i;:::-;34274:801;;;34347:2;-1:-1:-1;;;;;34331:36:0;;34390:12;:10;:12::i;:::-;34425:4;34452:7;34482:5;34331:175;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34331:175:0;;;;;;;;-1:-1:-1;;34331:175:0;;;;;;;;;;;;:::i;:::-;;;34310:710;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34689:13:0;;34685:320;;34732:108;;-1:-1:-1;;;34732:108:0;;;;;;;:::i;34685:320::-;34955:6;34949:13;34940:6;34936:2;34932:15;34925:38;34310:710;-1:-1:-1;;;;;;34570:51:0;-1:-1:-1;;;34570:51:0;;-1:-1:-1;34563:58:0;;34274:801;-1:-1:-1;35059:4:0;34102:980;;;;;;:::o;22704:355::-;22851:4;-1:-1:-1;;;;;;22893:40:0;;-1:-1:-1;;;22893:40:0;;:105;;-1:-1:-1;;;;;;;22950:48:0;;-1:-1:-1;;;22950:48:0;22893:105;:158;;;;23015:36;23039:11;23015:23;:36::i;40978:164::-;41082:10;:17;;41055:24;;;;:15;:24;;;;;:44;;;41110:24;;;;;;;;;;;;40978:164::o;40135:120::-;40215:27;;;;:18;:27;;;;;;:32;;-1:-1:-1;;;;;;40215:32:0;-1:-1:-1;;;;;40215:32:0;;;;;;;;;40135:120::o;39738:::-;39819:24;;;;:15;:24;;;;;:31;;-1:-1:-1;;;;;;39819:31:0;-1:-1:-1;;;;;39819:31:0;;;;;;;;;;39738:120::o;41769:1002::-;42049:22;42099:1;42074:22;42091:4;42074:16;:22::i;:::-;:26;;;;:::i;:::-;42111:18;42132:26;;;:17;:26;;;;;;42049:51;;-1:-1:-1;42265:28:0;;;42261:328;;-1:-1:-1;;;;;42332:18:0;;42310:19;42332:18;;;:12;:18;;;;;;;;:34;;;;;;;;;42383:30;;;;;;:44;;;42500:30;;:17;:30;;;;;:43;;;42261:328;-1:-1:-1;42685:26:0;;;;:17;:26;;;;;;;;42678:33;;;-1:-1:-1;;;;;42729:18:0;;;;;:12;:18;;;;;:34;;;;;;;42722:41;41769:1002::o;43066:1079::-;43344:10;:17;43319:22;;43344:21;;43364:1;;43344:21;:::i;:::-;43376:18;43397:24;;;:15;:24;;;;;;43770:10;:26;;43319:46;;-1:-1:-1;43397:24:0;;43319:46;;43770:26;;;;-1:-1:-1;;;43770:26:0;;;;;;;;;;;;;;;;;43748:48;;43834:11;43809:10;43820;43809:22;;;;;;-1:-1:-1;;;43809:22:0;;;;;;;;;;;;;;;;;;;;:36;;;;43914:28;;;:15;:28;;;;;;;:41;;;44086:24;;;;;44079:31;44121:10;:16;;;;;-1:-1:-1;;;44121:16:0;;;;;;;;;;;;;;;;;;;;;;;;;;43066:1079;;;;:::o;40556:221::-;40641:14;40658:20;40675:2;40658:16;:20::i;:::-;-1:-1:-1;;;;;40689:16:0;;;;;;;:12;:16;;;;;;;;:24;;;;;;;;:34;;;40734:26;;;:17;:26;;;;;;:35;;;;-1:-1:-1;40556:221:0:o;31322:382::-;-1:-1:-1;;;;;31402:16:0;;31394:61;;;;-1:-1:-1;;;31394:61:0;;;;;;;:::i;:::-;31475:16;31483:7;31475;:16::i;:::-;31474:17;31466:58;;;;-1:-1:-1;;;31466:58:0;;;;;;;:::i;:::-;31537:45;31566:1;31570:2;31574:7;31537:20;:45::i;:::-;-1:-1:-1;;;;;31595:13:0;;;;;;:9;:13;;;;;:18;;31612:1;;31595:13;:18;;31612:1;;31595:18;:::i;:::-;;;;-1:-1:-1;;31624:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;31624:21:0;-1:-1:-1;;;;;31624:21:0;;;;;;;;31663:33;;31624:16;;;31663:33;;31624:16;;31663:33;31322:382;;:::o;11076:387::-;11399:20;11447:8;;;11076:387::o;8002:207::-;-1:-1:-1;;;;;;8161:40:0;;-1:-1:-1;;;8161:40:0;8002:207;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;14:607:1;;110:18;151:2;143:6;140:14;137:2;;;157:18;;:::i;:::-;206:2;200:9;279:2;256:17;;-1:-1:-1;;252:31:1;240:44;;286:4;236:55;306:18;;;326:22;;;303:46;300:2;;;352:18;;:::i;:::-;388:2;381:22;436;;;421:6;-1:-1:-1;421:6:1;473:16;;;470:25;-1:-1:-1;467:2:1;;;508:1;505;498:12;467:2;558:6;553:3;546:4;538:6;534:17;521:44;613:1;606:4;597:6;589;585:19;581:30;574:41;;;90:531;;;;;:::o;626:175::-;696:20;;-1:-1:-1;;;;;745:31:1;;735:42;;725:2;;791:1;788;781:12;806:162;873:20;;929:13;;922:21;912:32;;902:2;;958:1;955;948:12;973:198;;1085:2;1073:9;1064:7;1060:23;1056:32;1053:2;;;1106:6;1098;1091:22;1053:2;1134:31;1155:9;1134:31;:::i;1176:274::-;;;1305:2;1293:9;1284:7;1280:23;1276:32;1273:2;;;1326:6;1318;1311:22;1273:2;1354:31;1375:9;1354:31;:::i;:::-;1344:41;;1404:40;1440:2;1429:9;1425:18;1404:40;:::i;:::-;1394:50;;1263:187;;;;;:::o;1455:342::-;;;;1601:2;1589:9;1580:7;1576:23;1572:32;1569:2;;;1622:6;1614;1607:22;1569:2;1650:31;1671:9;1650:31;:::i;:::-;1640:41;;1700:40;1736:2;1725:9;1721:18;1700:40;:::i;:::-;1690:50;;1787:2;1776:9;1772:18;1759:32;1749:42;;1559:238;;;;;:::o;1802:702::-;;;;;1974:3;1962:9;1953:7;1949:23;1945:33;1942:2;;;1996:6;1988;1981:22;1942:2;2024:31;2045:9;2024:31;:::i;:::-;2014:41;;2074:40;2110:2;2099:9;2095:18;2074:40;:::i;:::-;2064:50;;2161:2;2150:9;2146:18;2133:32;2123:42;;2216:2;2205:9;2201:18;2188:32;2243:18;2235:6;2232:30;2229:2;;;2280:6;2272;2265:22;2229:2;2308:22;;2361:4;2353:13;;2349:27;-1:-1:-1;2339:2:1;;2395:6;2387;2380:22;2339:2;2423:75;2490:7;2485:2;2472:16;2467:2;2463;2459:11;2423:75;:::i;:::-;2413:85;;;1932:572;;;;;;;:::o;2509:268::-;;;2635:2;2623:9;2614:7;2610:23;2606:32;2603:2;;;2656:6;2648;2641:22;2603:2;2684:31;2705:9;2684:31;:::i;:::-;2674:41;;2734:37;2767:2;2756:9;2752:18;2734:37;:::i;2782:266::-;;;2911:2;2899:9;2890:7;2886:23;2882:32;2879:2;;;2932:6;2924;2917:22;2879:2;2960:31;2981:9;2960:31;:::i;:::-;2950:41;3038:2;3023:18;;;;3010:32;;-1:-1:-1;;;2869:179:1:o;3053:666::-;;;3200:2;3188:9;3179:7;3175:23;3171:32;3168:2;;;3221:6;3213;3206:22;3168:2;3266:9;3253:23;3295:18;3336:2;3328:6;3325:14;3322:2;;;3357:6;3349;3342:22;3322:2;3400:6;3389:9;3385:22;3375:32;;3445:7;3438:4;3434:2;3430:13;3426:27;3416:2;;3472:6;3464;3457:22;3416:2;3517;3504:16;3543:2;3535:6;3532:14;3529:2;;;3564:6;3556;3549:22;3529:2;3623:7;3618:2;3612;3604:6;3600:15;3596:2;3592:24;3588:33;3585:46;3582:2;;;3649:6;3641;3634:22;3582:2;3685;3677:11;;;;;3707:6;;-1:-1:-1;3158:561:1;;-1:-1:-1;;;;3158:561:1:o;3724:192::-;;3833:2;3821:9;3812:7;3808:23;3804:32;3801:2;;;3854:6;3846;3839:22;3801:2;3882:28;3900:9;3882:28;:::i;3921:257::-;;4032:2;4020:9;4011:7;4007:23;4003:32;4000:2;;;4053:6;4045;4038:22;4000:2;4097:9;4084:23;4116:32;4142:5;4116:32;:::i;4183:261::-;;4305:2;4293:9;4284:7;4280:23;4276:32;4273:2;;;4326:6;4318;4311:22;4273:2;4363:9;4357:16;4382:32;4408:5;4382:32;:::i;4449:482::-;;4571:2;4559:9;4550:7;4546:23;4542:32;4539:2;;;4592:6;4584;4577:22;4539:2;4637:9;4624:23;4670:18;4662:6;4659:30;4656:2;;;4707:6;4699;4692:22;4656:2;4735:22;;4788:4;4780:13;;4776:27;-1:-1:-1;4766:2:1;;4822:6;4814;4807:22;4766:2;4850:75;4917:7;4912:2;4899:16;4894:2;4890;4886:11;4850:75;:::i;4936:190::-;;5048:2;5036:9;5027:7;5023:23;5019:32;5016:2;;;5069:6;5061;5054:22;5016:2;-1:-1:-1;5097:23:1;;5006:120;-1:-1:-1;5006:120:1:o;5131:258::-;;;5260:2;5248:9;5239:7;5235:23;5231:32;5228:2;;;5281:6;5273;5266:22;5228:2;-1:-1:-1;;5309:23:1;;;5379:2;5364:18;;;5351:32;;-1:-1:-1;5218:171:1:o;5394:259::-;;5475:5;5469:12;5502:6;5497:3;5490:19;5518:63;5574:6;5567:4;5562:3;5558:14;5551:4;5544:5;5540:16;5518:63;:::i;:::-;5635:2;5614:15;-1:-1:-1;;5610:29:1;5601:39;;;;5642:4;5597:50;;5445:208;-1:-1:-1;;5445:208:1:o;5658:982::-;5745:12;;5658:982;;5817:1;5802:17;;5838:1;5874:18;;;;5901:2;;5955:4;5947:6;5943:17;5933:27;;5901:2;5981;6029;6021:6;6018:14;5998:18;5995:38;5992:2;;;-1:-1:-1;;;6056:33:1;;6112:4;6109:1;6102:15;6142:4;6063:3;6130:17;5992:2;6173:18;6200:104;;;;6318:1;6313:321;;;;6166:468;;6200:104;-1:-1:-1;;6233:24:1;;6221:37;;6278:16;;;;-1:-1:-1;6200:104:1;;6313:321;6349:38;6381:5;6349:38;:::i;:::-;6409:1;6423:165;6437:6;6434:1;6431:13;6423:165;;;6515:14;;6502:11;;;6495:35;6558:16;;;;6452:10;;6423:165;;;6427:3;;6617:6;6612:3;6608:16;6601:23;;6166:468;;;;;;;5718:922;;;;:::o;6645:229::-;6794:2;6790:15;;;;-1:-1:-1;;6786:53:1;6774:66;;6865:2;6856:12;;6764:110::o;7129:276::-;;7298:6;7292:13;7314:53;7360:6;7355:3;7348:4;7340:6;7336:17;7314:53;:::i;:::-;7383:16;;;;;7268:137;-1:-1:-1;;7268:137:1:o;7410:552::-;;7672:6;7666:13;7688:53;7734:6;7729:3;7722:4;7714:6;7710:17;7688:53;:::i;:::-;7804:13;;7763:16;;;;7826:57;7804:13;7763:16;7860:4;7848:17;;7826:57;:::i;:::-;7899;7946:8;7939:5;7935:20;7927:6;7899:57;:::i;:::-;7892:64;7642:320;-1:-1:-1;;;;;;;7642:320:1:o;7967:199::-;;8120:40;8156:3;8148:6;8120:40;:::i;8171:205::-;8371:3;8362:14::o;8381:182::-;8510:19;;;8554:2;8545:12;;8500:63::o;8568:203::-;-1:-1:-1;;;;;8732:32:1;;;;8714:51;;8702:2;8687:18;;8669:102::o;8776:490::-;-1:-1:-1;;;;;9045:15:1;;;9027:34;;9097:15;;9092:2;9077:18;;9070:43;9144:2;9129:18;;9122:34;;;9192:3;9187:2;9172:18;;9165:31;;;8776:490;;9213:47;;9240:19;;9232:6;9213:47;:::i;:::-;9205:55;8979:287;-1:-1:-1;;;;;;8979:287:1:o;9271:274::-;-1:-1:-1;;;;;9463:32:1;;;;9445:51;;9527:2;9512:18;;9505:34;9433:2;9418:18;;9400:145::o;9550:808::-;;9741:2;9781;9770:9;9766:18;9811:2;9800:9;9793:21;9834:6;9869;9863:13;9900:6;9892;9885:22;9938:2;9927:9;9923:18;9916:25;;10001:2;9995;9987:6;9983:15;9972:9;9968:31;9964:40;9950:54;;10039:2;10031:6;10027:15;10060:4;10073:256;10087:6;10084:1;10081:13;10073:256;;;10180:2;10176:7;10164:9;10156:6;10152:22;10148:36;10143:3;10136:49;10208:41;10242:6;10233;10227:13;10208:41;:::i;:::-;10198:51;-1:-1:-1;10307:12:1;;;;10272:15;;;;10109:1;10102:9;10073:256;;;-1:-1:-1;10346:6:1;;9721:637;-1:-1:-1;;;;;;;9721:637:1:o;10363:635::-;10534:2;10586:21;;;10656:13;;10559:18;;;10678:22;;;10363:635;;10534:2;10757:15;;;;10731:2;10716:18;;;10363:635;10803:169;10817:6;10814:1;10811:13;10803:169;;;10878:13;;10866:26;;10947:15;;;;10912:12;;;;10839:1;10832:9;10803:169;;;-1:-1:-1;10989:3:1;;10514:484;-1:-1:-1;;;;;;10514:484:1:o;11003:187::-;11168:14;;11161:22;11143:41;;11131:2;11116:18;;11098:92::o;11195:221::-;;11344:2;11333:9;11326:21;11364:46;11406:2;11395:9;11391:18;11383:6;11364:46;:::i;11421:407::-;11623:2;11605:21;;;11662:2;11642:18;;;11635:30;11701:34;11696:2;11681:18;;11674:62;-1:-1:-1;;;11767:2:1;11752:18;;11745:41;11818:3;11803:19;;11595:233::o;11833:350::-;12035:2;12017:21;;;12074:2;12054:18;;;12047:30;12113:28;12108:2;12093:18;;12086:56;12174:2;12159:18;;12007:176::o;12188:397::-;12390:2;12372:21;;;12429:2;12409:18;;;12402:30;12468:34;12463:2;12448:18;;12441:62;-1:-1:-1;;;12534:2:1;12519:18;;12512:31;12575:3;12560:19;;12362:223::o;12590:407::-;12792:2;12774:21;;;12831:2;12811:18;;;12804:30;12870:34;12865:2;12850:18;;12843:62;-1:-1:-1;;;12936:2:1;12921:18;;12914:41;12987:3;12972:19;;12764:233::o;13002:414::-;13204:2;13186:21;;;13243:2;13223:18;;;13216:30;13282:34;13277:2;13262:18;;13255:62;-1:-1:-1;;;13348:2:1;13333:18;;13326:48;13406:3;13391:19;;13176:240::o;13421:402::-;13623:2;13605:21;;;13662:2;13642:18;;;13635:30;13701:34;13696:2;13681:18;;13674:62;-1:-1:-1;;;13767:2:1;13752:18;;13745:36;13813:3;13798:19;;13595:228::o;13828:352::-;14030:2;14012:21;;;14069:2;14049:18;;;14042:30;14108;14103:2;14088:18;;14081:58;14171:2;14156:18;;14002:178::o;14185:347::-;14387:2;14369:21;;;14426:2;14406:18;;;14399:30;14465:25;14460:2;14445:18;;14438:53;14523:2;14508:18;;14359:173::o;14537:400::-;14739:2;14721:21;;;14778:2;14758:18;;;14751:30;14817:34;14812:2;14797:18;;14790:62;-1:-1:-1;;;14883:2:1;14868:18;;14861:34;14927:3;14912:19;;14711:226::o;14942:349::-;15144:2;15126:21;;;15183:2;15163:18;;;15156:30;15222:27;15217:2;15202:18;;15195:55;15282:2;15267:18;;15116:175::o;15296:353::-;15498:2;15480:21;;;15537:2;15517:18;;;15510:30;15576:31;15571:2;15556:18;;15549:59;15640:2;15625:18;;15470:179::o;15654:408::-;15856:2;15838:21;;;15895:2;15875:18;;;15868:30;15934:34;15929:2;15914:18;;15907:62;-1:-1:-1;;;16000:2:1;15985:18;;15978:42;16052:3;16037:19;;15828:234::o;16067:356::-;16269:2;16251:21;;;16288:18;;;16281:30;16347:34;16342:2;16327:18;;16320:62;16414:2;16399:18;;16241:182::o;16428:420::-;16630:2;16612:21;;;16669:2;16649:18;;;16642:30;16708:34;16703:2;16688:18;;16681:62;16779:26;16774:2;16759:18;;16752:54;16838:3;16823:19;;16602:246::o;16853:406::-;17055:2;17037:21;;;17094:2;17074:18;;;17067:30;17133:34;17128:2;17113:18;;17106:62;-1:-1:-1;;;17199:2:1;17184:18;;17177:40;17249:3;17234:19;;17027:232::o;17264:405::-;17466:2;17448:21;;;17505:2;17485:18;;;17478:30;17544:34;17539:2;17524:18;;17517:62;-1:-1:-1;;;17610:2:1;17595:18;;17588:39;17659:3;17644:19;;17438:231::o;17674:401::-;17876:2;17858:21;;;17915:2;17895:18;;;17888:30;17954:34;17949:2;17934:18;;17927:62;-1:-1:-1;;;18020:2:1;18005:18;;17998:35;18065:3;18050:19;;17848:227::o;18080:353::-;18282:2;18264:21;;;18321:2;18301:18;;;18294:30;18360:31;18355:2;18340:18;;18333:59;18424:2;18409:18;;18254:179::o;18438:400::-;18640:2;18622:21;;;18679:2;18659:18;;;18652:30;18718:34;18713:2;18698:18;;18691:62;-1:-1:-1;;;18784:2:1;18769:18;;18762:34;18828:3;18813:19;;18612:226::o;18843:349::-;19045:2;19027:21;;;19084:2;19064:18;;;19057:30;19123:27;19118:2;19103:18;;19096:55;19183:2;19168:18;;19017:175::o;19197:426::-;19399:2;19381:21;;;19438:2;19418:18;;;19411:30;19477:34;19472:2;19457:18;;19450:62;19548:32;19543:2;19528:18;;19521:60;19613:3;19598:19;;19371:252::o;19628:356::-;19830:2;19812:21;;;19849:18;;;19842:30;19908:34;19903:2;19888:18;;19881:62;19975:2;19960:18;;19802:182::o;19989:408::-;20191:2;20173:21;;;20230:2;20210:18;;;20203:30;20269:34;20264:2;20249:18;;20242:62;-1:-1:-1;;;20335:2:1;20320:18;;20313:42;20387:3;20372:19;;20163:234::o;20402:356::-;20604:2;20586:21;;;20623:18;;;20616:30;20682:34;20677:2;20662:18;;20655:62;20749:2;20734:18;;20576:182::o;20763:405::-;20965:2;20947:21;;;21004:2;20984:18;;;20977:30;21043:34;21038:2;21023:18;;21016:62;-1:-1:-1;;;21109:2:1;21094:18;;21087:39;21158:3;21143:19;;20937:231::o;21173:411::-;21375:2;21357:21;;;21414:2;21394:18;;;21387:30;21453:34;21448:2;21433:18;;21426:62;-1:-1:-1;;;21519:2:1;21504:18;;21497:45;21574:3;21559:19;;21347:237::o;21589:418::-;21791:2;21773:21;;;21830:2;21810:18;;;21803:30;21869:34;21864:2;21849:18;;21842:62;-1:-1:-1;;;21935:2:1;21920:18;;21913:52;21997:3;21982:19;;21763:244::o;22012:397::-;22214:2;22196:21;;;22253:2;22233:18;;;22226:30;22292:34;22287:2;22272:18;;22265:62;-1:-1:-1;;;22358:2:1;22343:18;;22336:31;22399:3;22384:19;;22186:223::o;22414:399::-;22616:2;22598:21;;;22655:2;22635:18;;;22628:30;22694:34;22689:2;22674:18;;22667:62;-1:-1:-1;;;22760:2:1;22745:18;;22738:33;22803:3;22788:19;;22588:225::o;22818:352::-;23020:2;23002:21;;;23059:2;23039:18;;;23032:30;23098;23093:2;23078:18;;23071:58;23161:2;23146:18;;22992:178::o;23175:413::-;23377:2;23359:21;;;23416:2;23396:18;;;23389:30;23455:34;23450:2;23435:18;;23428:62;-1:-1:-1;;;23521:2:1;23506:18;;23499:47;23578:3;23563:19;;23349:239::o;23593:408::-;23795:2;23777:21;;;23834:2;23814:18;;;23807:30;23873:34;23868:2;23853:18;;23846:62;-1:-1:-1;;;23939:2:1;23924:18;;23917:42;23991:3;23976:19;;23767:234::o;24006:412::-;24208:2;24190:21;;;24247:2;24227:18;;;24220:30;24286:34;24281:2;24266:18;;24259:62;-1:-1:-1;;;24352:2:1;24337:18;;24330:46;24408:3;24393:19;;24180:238::o;24423:409::-;24625:2;24607:21;;;24664:2;24644:18;;;24637:30;24703:34;24698:2;24683:18;;24676:62;-1:-1:-1;;;24769:2:1;24754:18;;24747:43;24822:3;24807:19;;24597:235::o;24837:346::-;25039:2;25021:21;;;25078:2;25058:18;;;25051:30;-1:-1:-1;;;25112:2:1;25097:18;;25090:52;25174:2;25159:18;;25011:172::o;25188:406::-;25390:2;25372:21;;;25429:2;25409:18;;;25402:30;25468:34;25463:2;25448:18;;25441:62;-1:-1:-1;;;25534:2:1;25519:18;;25512:40;25584:3;25569:19;;25362:232::o;25599:352::-;25801:2;25783:21;;;25840:2;25820:18;;;25813:30;25879;25874:2;25859:18;;25852:58;25942:2;25927:18;;25773:178::o;25956:349::-;26158:2;26140:21;;;26197:2;26177:18;;;26170:30;26236:27;26231:2;26216:18;;26209:55;26296:2;26281:18;;26130:175::o;26492:345::-;26694:25;;;-1:-1:-1;;;;;26755:32:1;;;;26750:2;26735:18;;26728:60;26819:2;26804:18;;26797:34;26682:2;26667:18;;26649:188::o;26842:129::-;;26910:17;;;26960:4;26944:21;;;26900:71::o;26976:128::-;;27047:1;27043:6;27040:1;27037:13;27034:2;;;27053:18;;:::i;:::-;-1:-1:-1;27089:9:1;;27024:80::o;27109:120::-;;27175:1;27165:2;;27180:18;;:::i;:::-;-1:-1:-1;27214:9:1;;27155:74::o;27234:168::-;;27340:1;27336;27332:6;27328:14;27325:1;27322:21;27317:1;27310:9;27303:17;27299:45;27296:2;;;27347:18;;:::i;:::-;-1:-1:-1;27387:9:1;;27286:116::o;27407:125::-;;27475:1;27472;27469:8;27466:2;;;27480:18;;:::i;:::-;-1:-1:-1;27517:9:1;;27456:76::o;27537:258::-;27609:1;27619:113;27633:6;27630:1;27627:13;27619:113;;;27709:11;;;27703:18;27690:11;;;27683:39;27655:2;27648:10;27619:113;;;27750:6;27747:1;27744:13;27741:2;;;-1:-1:-1;;27785:1:1;27767:16;;27760:27;27590:205::o;27800:380::-;27885:1;27875:12;;27932:1;27922:12;;;27943:2;;27997:4;27989:6;27985:17;27975:27;;27943:2;28050;28042:6;28039:14;28019:18;28016:38;28013:2;;;28096:10;28091:3;28087:20;28084:1;28077:31;28131:4;28128:1;28121:15;28159:4;28156:1;28149:15;28013:2;;27855:325;;;:::o;28185:135::-;;-1:-1:-1;;28245:17:1;;28242:2;;;28265:18;;:::i;:::-;-1:-1:-1;28312:1:1;28301:13;;28232:88::o;28325:112::-;;28383:1;28373:2;;28388:18;;:::i;:::-;-1:-1:-1;28422:9:1;;28363:74::o;28442:127::-;28503:10;28498:3;28494:20;28491:1;28484:31;28534:4;28531:1;28524:15;28558:4;28555:1;28548:15;28574:127;28635:10;28630:3;28626:20;28623:1;28616:31;28666:4;28663:1;28656:15;28690:4;28687:1;28680:15;28706:127;28767:10;28762:3;28758:20;28755:1;28748:31;28798:4;28795:1;28788:15;28822:4;28819:1;28812:15;28838:133;-1:-1:-1;;;;;;28914:32:1;;28904:43;;28894:2;;28961:1;28958;28951:12
Swarm Source
ipfs://694cb1866eb00df5dd33be169f5558785d071e24e1d97538a0aa9fc29ed2b8ae
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.