ERC-721
Overview
Max Total Supply
500 SlothCondo
Holders
172
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract
Balance
6 SlothCondoLoading...
Loading
Loading...
Loading
Loading...
Loading
Contract Name:
SlothtopiaLiving
Compiler Version
v0.8.12+commit.f00d7308
Contract Source Code (Solidity)
/** *Submitted for verification at ftmscan.com on 2022-05-21 */ //SPDX-License-Identifier: Unlicensed // File: @openzeppelin/contracts/utils/Counters.sol // OpenZeppelin Contracts v4.4.1 (utils/Counters.sol) pragma solidity ^0.8.0; /** * @title Counters * @author Matt Condon (@shrugs) * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number * of elements in a mapping, issuing ERC721 ids, or counting request ids. * * Include with `using Counters for Counters.Counter;` */ library Counters { struct Counter { // This variable should never be directly accessed by users of the library: interactions must be restricted to // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add // this feature: see https://github.com/ethereum/solidity/issues/4637 uint256 _value; // default: 0 } function current(Counter storage counter) internal view returns (uint256) { return counter._value; } function increment(Counter storage counter) internal { unchecked { counter._value += 1; } } function decrement(Counter storage counter) internal { uint256 value = counter._value; require(value > 0, "Counter: decrement overflow"); unchecked { counter._value = value - 1; } } function reset(Counter storage counter) internal { counter._value = 0; } } // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: @openzeppelin/contracts/token/ERC721/ERC721.sol // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/ERC721.sol) pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); _afterTokenTransfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); _afterTokenTransfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer from incorrect owner"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); _afterTokenTransfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits a {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC721: approve to caller"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } pragma solidity ^0.8.12; contract SlothtopiaLiving is ERC721, Ownable { using Strings for uint256; using Counters for Counters.Counter; Counters.Counter private supply; string public uriPrefix = ""; string public uriSuffix = ".json"; mapping (address => bool) public whitelist; uint256 public WLcost = 100 ether; //100 FTM uint256 public PScost = 200 ether;// 200 FTM uint256 public maxSupply = 500; uint256 public maxMintAmountPerTx = 5; uint256 public WlSupply = 500; uint256 public reserveAmount = 10; bool private allow = true; bool public whitelistSale = false; bool public publicSale = false; constructor() ERC721("LuxuryLiving", "SlothCondo") { } modifier mintCompliance(uint256 _mintAmount) { require(whitelistSale == true, " whitelist sale is not started yet or sold already"); require(whitelist[msg.sender] , "you're not whitelisted"); require(_mintAmount > 0 && _mintAmount <= maxMintAmountPerTx, "Invalid mint amount!"); require(supply.current() + _mintAmount <= WlSupply, "Whitelist supply exceeded!"); _; } modifier mintCompliance1 (uint256 _mintAmount) { require(publicSale == true, "public sale is not started yet or sold already"); require(_mintAmount > 0 && _mintAmount <= maxMintAmountPerTx, "Invalid mint amount!"); require(supply.current() + _mintAmount <= maxSupply, "max supply exceeded!"); _; } function totalSupply() public view returns (uint256) { return supply.current(); } function setWhitelist (address wl, bool value) public onlyOwner { whitelist[wl] = value; } function setWhitelistMultiple (address [] calldata addr, bool value) external onlyOwner { uint256 len = addr.length; for (uint256 i = 0; i < len; i++) { whitelist[addr[i]] = value; } } function mintWL(uint256 _mintAmount) public payable mintCompliance(_mintAmount) { require(msg.value >= WLcost * _mintAmount, "Insufficient funds!"); _mintLoop(msg.sender, _mintAmount); } function mintWLForAddress(uint256 _mintAmount, address _receiver) public payable mintCompliance(_mintAmount) { _mintLoop(_receiver, _mintAmount); } function mintPS(uint256 _mintAmount) public payable mintCompliance1(_mintAmount) { require(msg.value >= PScost * _mintAmount, "Insufficient funds!"); _mintLoop(msg.sender, _mintAmount); } function mintPSForAddress(uint256 _mintAmount, address _receiver) public payable mintCompliance1(_mintAmount) { _mintLoop(_receiver, _mintAmount); } function walletOfOwner(address _owner) public view returns (uint256[] memory) { uint256 ownerTokenCount = balanceOf(_owner); uint256[] memory ownedTokenIds = new uint256[](ownerTokenCount); uint256 currentTokenId = 1; uint256 ownedTokenIndex = 0; while (ownedTokenIndex < ownerTokenCount && currentTokenId <= maxSupply) { address currentTokenOwner = ownerOf(currentTokenId); if (currentTokenOwner == _owner) { ownedTokenIds[ownedTokenIndex] = currentTokenId; ownedTokenIndex++; } currentTokenId++; } return ownedTokenIds; } 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(), uriSuffix)) : ""; } // change Whitelist sale Price function setWlCost(uint256 _cost) public onlyOwner { WLcost = _cost; } // change Public sale cost function setPScost(uint256 _cost) public onlyOwner { PScost = _cost; } // set Max mint amount per transaction function setMaxMintAmountPerTx(uint256 _maxMintAmountPerTx) public onlyOwner { maxMintAmountPerTx = _maxMintAmountPerTx; } // set base URI function setBaseUri(string memory _uriPrefix) public onlyOwner { uriPrefix = _uriPrefix; } function setUriSuffix(string memory _uriSuffix) public onlyOwner { uriSuffix = _uriSuffix; } function EnableWhitelistSale() public onlyOwner { whitelistSale = true; } function EnablePublicSale() public onlyOwner { publicSale = true; whitelistSale = false; } function withdraw() public onlyOwner { // This will transfer the remaining contract balance to the owner. // Do not remove this otherwise you will not be able to withdraw the funds. // ============================================================================= (bool os, ) = payable(owner()).call{value: address(this).balance}(""); require(os); // ============================================================================= } //NFT's for giveaways function reserve() external onlyOwner { require (allow == true, "reserveAmount minted already"); require (supply.current() + reserveAmount <= maxSupply); _mintLoop (owner(), reserveAmount); allow = false; } function _mintLoop(address _receiver, uint256 _mintAmount) internal { for (uint256 i = 0; i < _mintAmount; i++) { supply.increment(); _safeMint(_receiver, supply.current()); } } function _baseURI() internal view virtual override returns (string memory) { return uriPrefix; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"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":[],"name":"EnablePublicSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"EnableWhitelistSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"PScost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WLcost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WlSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintAmountPerTx","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":"mintPS","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"},{"internalType":"address","name":"_receiver","type":"address"}],"name":"mintPSForAddress","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mintWL","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"},{"internalType":"address","name":"_receiver","type":"address"}],"name":"mintWLForAddress","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicSale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reserve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reserveAmount","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":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uriPrefix","type":"string"}],"name":"setBaseUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxMintAmountPerTx","type":"uint256"}],"name":"setMaxMintAmountPerTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_cost","type":"uint256"}],"name":"setPScost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uriSuffix","type":"string"}],"name":"setUriSuffix","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wl","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addr","type":"address[]"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setWhitelistMultiple","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_cost","type":"uint256"}],"name":"setWlCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uriPrefix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uriSuffix","outputs":[{"internalType":"string","name":"","type":"string"}],"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":"whitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"whitelistSale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60a06040819052600060808190526200001b916008916200017c565b5060408051808201909152600580825264173539b7b760d91b60209092019182526200004a916009916200017c565b5068056bc75e2d63100000600b55680ad78ebc5ac6200000600c556101f4600d8190556005600e55600f55600a6010556011805462ffffff191660011790553480156200009657600080fd5b50604080518082018252600c81526b4c75787572794c6976696e6760a01b60208083019182528351808501909452600a845269536c6f7468436f6e646f60b01b908401528151919291620000ed916000916200017c565b508051620001039060019060208401906200017c565b505050620001206200011a6200012660201b60201c565b6200012a565b6200025f565b3390565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280546200018a9062000222565b90600052602060002090601f016020900481019282620001ae5760008555620001f9565b82601f10620001c957805160ff1916838001178555620001f9565b82800160010185558215620001f9579182015b82811115620001f9578251825591602001919060010190620001dc565b50620002079291506200020b565b5090565b5b808211156200020757600081556001016200020c565b600181811c908216806200023757607f821691505b602082108114156200025957634e487b7160e01b600052602260045260246000fd5b50919050565b6127c9806200026f6000396000f3fe6080604052600436106102675760003560e01c80635b66e7c311610144578063a22cb465116100b6578063ca29b3921161007a578063ca29b392146106d2578063cd3293de146106e7578063d5abeb01146106fc578063e985e9c514610712578063f12f6d5d1461075b578063f2fde38b1461077b57600080fd5b8063a22cb4651461063f578063b071401b1461065f578063b88d4fde1461067f578063ba419de01461069f578063c87b56dd146106b257600080fd5b80638da5cb5b116101085780638da5cb5b1461059057806394354fd0146105ae57806395d89b41146105c457806396e8f7ad146105d95780639b19251a146105ef578063a0bcfc7f1461061f57600080fd5b80635b66e7c31461051357806362b99ad4146105265780636352211e1461053b57806370a082311461055b578063715018a61461057b57600080fd5b80633ccfd60b116101dd57806344c7fbd2116101a157806344c7fbd21461047d5780634b09b72a1461049257806352417630146104a857806353d6fd59146104be5780635503a0e8146104de5780635a38438e146104f357600080fd5b80633ccfd60b146103f55780633daaeb091461040a578063414b66ff1461041d57806342842e0e14610430578063438b63001461045057600080fd5b806316ba10e01161022f57806316ba10e01461034157806318160ddd1461036157806323b872dd146103765780632b023de01461039657806331ffd6f1146103b657806333bc1c5c146103d557600080fd5b806301ffc9a71461026c57806306fdde03146102a1578063081812fc146102c3578063095ea7b3146102fb5780630bddb6131461031d575b600080fd5b34801561027857600080fd5b5061028c610287366004611fda565b61079b565b60405190151581526020015b60405180910390f35b3480156102ad57600080fd5b506102b66107ed565b604051610298919061204f565b3480156102cf57600080fd5b506102e36102de366004612062565b61087f565b6040516001600160a01b039091168152602001610298565b34801561030757600080fd5b5061031b610316366004612097565b610919565b005b34801561032957600080fd5b50610333600f5481565b604051908152602001610298565b34801561034d57600080fd5b5061031b61035c36600461214d565b610a2f565b34801561036d57600080fd5b50610333610a70565b34801561038257600080fd5b5061031b610391366004612196565b610a80565b3480156103a257600080fd5b5061031b6103b1366004612062565b610ab1565b3480156103c257600080fd5b5060115461028c90610100900460ff1681565b3480156103e157600080fd5b5060115461028c9062010000900460ff1681565b34801561040157600080fd5b5061031b610ae0565b61031b6104183660046121d2565b610b7e565b61031b61042b3660046121d2565b610ca2565b34801561043c57600080fd5b5061031b61044b366004612196565b610d5b565b34801561045c57600080fd5b5061047061046b3660046121fe565b610d76565b6040516102989190612219565b34801561048957600080fd5b5061031b610e57565b34801561049e57600080fd5b5061033360105481565b3480156104b457600080fd5b50610333600b5481565b3480156104ca57600080fd5b5061031b6104d936600461226d565b610e92565b3480156104ea57600080fd5b506102b6610ee7565b3480156104ff57600080fd5b5061031b61050e366004612297565b610f75565b61031b610521366004612062565b611018565b34801561053257600080fd5b506102b661112e565b34801561054757600080fd5b506102e3610556366004612062565b61113b565b34801561056757600080fd5b506103336105763660046121fe565b6111b2565b34801561058757600080fd5b5061031b611239565b34801561059c57600080fd5b506006546001600160a01b03166102e3565b3480156105ba57600080fd5b50610333600e5481565b3480156105d057600080fd5b506102b661126f565b3480156105e557600080fd5b50610333600c5481565b3480156105fb57600080fd5b5061028c61060a3660046121fe565b600a6020526000908152604090205460ff1681565b34801561062b57600080fd5b5061031b61063a36600461214d565b61127e565b34801561064b57600080fd5b5061031b61065a36600461226d565b6112bb565b34801561066b57600080fd5b5061031b61067a366004612062565b6112c6565b34801561068b57600080fd5b5061031b61069a36600461231b565b6112f5565b61031b6106ad366004612062565b61132d565b3480156106be57600080fd5b506102b66106cd366004612062565b611455565b3480156106de57600080fd5b5061031b611533565b3480156106f357600080fd5b5061031b611570565b34801561070857600080fd5b50610333600d5481565b34801561071e57600080fd5b5061028c61072d366004612397565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b34801561076757600080fd5b5061031b610776366004612062565b611638565b34801561078757600080fd5b5061031b6107963660046121fe565b611667565b60006001600160e01b031982166380ac58cd60e01b14806107cc57506001600160e01b03198216635b5e139f60e01b145b806107e757506301ffc9a760e01b6001600160e01b03198316145b92915050565b6060600080546107fc906123c1565b80601f0160208091040260200160405190810160405280929190818152602001828054610828906123c1565b80156108755780601f1061084a57610100808354040283529160200191610875565b820191906000526020600020905b81548152906001019060200180831161085857829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b03166108fd5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b60006109248261113b565b9050806001600160a01b0316836001600160a01b031614156109925760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084016108f4565b336001600160a01b03821614806109ae57506109ae813361072d565b610a205760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c000000000000000060648201526084016108f4565b610a2a83836116ff565b505050565b6006546001600160a01b03163314610a595760405162461bcd60e51b81526004016108f4906123fc565b8051610a6c906009906020840190611f2b565b5050565b6000610a7b60075490565b905090565b610a8a338261176d565b610aa65760405162461bcd60e51b81526004016108f490612431565b610a2a838383611864565b6006546001600160a01b03163314610adb5760405162461bcd60e51b81526004016108f4906123fc565b600c55565b6006546001600160a01b03163314610b0a5760405162461bcd60e51b81526004016108f4906123fc565b6000610b1e6006546001600160a01b031690565b6001600160a01b03164760405160006040518083038185875af1925050503d8060008114610b68576040519150601f19603f3d011682016040523d82523d6000602084013e610b6d565b606091505b5050905080610b7b57600080fd5b50565b601154829060ff610100909104161515600114610bad5760405162461bcd60e51b81526004016108f490612482565b336000908152600a602052604090205460ff16610c055760405162461bcd60e51b81526020600482015260166024820152751e5bdd49dc99481b9bdd081dda1a5d195b1a5cdd195960521b60448201526064016108f4565b600081118015610c175750600e548111155b610c335760405162461bcd60e51b81526004016108f4906124d4565b600f5481610c4060075490565b610c4a9190612518565b1115610c985760405162461bcd60e51b815260206004820152601a60248201527f57686974656c69737420737570706c792065786365656465642100000000000060448201526064016108f4565b610a2a8284611a00565b601154829062010000900460ff161515600114610cd15760405162461bcd60e51b81526004016108f490612530565b600081118015610ce35750600e548111155b610cff5760405162461bcd60e51b81526004016108f4906124d4565b600d5481610d0c60075490565b610d169190612518565b1115610c985760405162461bcd60e51b81526020600482015260146024820152736d617820737570706c792065786365656465642160601b60448201526064016108f4565b610a2a838383604051806020016040528060008152506112f5565b60606000610d83836111b2565b905060008167ffffffffffffffff811115610da057610da06120c1565b604051908082528060200260200182016040528015610dc9578160200160208202803683370190505b509050600160005b8381108015610de25750600d548211155b15610e4d576000610df28361113b565b9050866001600160a01b0316816001600160a01b03161415610e3a5782848381518110610e2157610e2161257e565b602090810291909101015281610e3681612594565b9250505b82610e4481612594565b93505050610dd1565b5090949350505050565b6006546001600160a01b03163314610e815760405162461bcd60e51b81526004016108f4906123fc565b6011805461ff001916610100179055565b6006546001600160a01b03163314610ebc5760405162461bcd60e51b81526004016108f4906123fc565b6001600160a01b03919091166000908152600a60205260409020805460ff1916911515919091179055565b60098054610ef4906123c1565b80601f0160208091040260200160405190810160405280929190818152602001828054610f20906123c1565b8015610f6d5780601f10610f4257610100808354040283529160200191610f6d565b820191906000526020600020905b815481529060010190602001808311610f5057829003601f168201915b505050505081565b6006546001600160a01b03163314610f9f5760405162461bcd60e51b81526004016108f4906123fc565b8160005b818110156110115782600a6000878785818110610fc257610fc261257e565b9050602002016020810190610fd791906121fe565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558061100981612594565b915050610fa3565b5050505050565b601154819062010000900460ff1615156001146110475760405162461bcd60e51b81526004016108f490612530565b6000811180156110595750600e548111155b6110755760405162461bcd60e51b81526004016108f4906124d4565b600d548161108260075490565b61108c9190612518565b11156110d15760405162461bcd60e51b81526020600482015260146024820152736d617820737570706c792065786365656465642160601b60448201526064016108f4565b81600c546110df91906125af565b3410156111245760405162461bcd60e51b8152602060048201526013602482015272496e73756666696369656e742066756e64732160681b60448201526064016108f4565b610a6c3383611a00565b60088054610ef4906123c1565b6000818152600260205260408120546001600160a01b0316806107e75760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b60648201526084016108f4565b60006001600160a01b03821661121d5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b60648201526084016108f4565b506001600160a01b031660009081526003602052604090205490565b6006546001600160a01b031633146112635760405162461bcd60e51b81526004016108f4906123fc565b61126d6000611a3d565b565b6060600180546107fc906123c1565b6006546001600160a01b031633146112a85760405162461bcd60e51b81526004016108f4906123fc565b8051610a6c906008906020840190611f2b565b610a6c338383611a8f565b6006546001600160a01b031633146112f05760405162461bcd60e51b81526004016108f4906123fc565b600e55565b6112ff338361176d565b61131b5760405162461bcd60e51b81526004016108f490612431565b61132784848484611b5e565b50505050565b601154819060ff61010090910416151560011461135c5760405162461bcd60e51b81526004016108f490612482565b336000908152600a602052604090205460ff166113b45760405162461bcd60e51b81526020600482015260166024820152751e5bdd49dc99481b9bdd081dda1a5d195b1a5cdd195960521b60448201526064016108f4565b6000811180156113c65750600e548111155b6113e25760405162461bcd60e51b81526004016108f4906124d4565b600f54816113ef60075490565b6113f99190612518565b11156114475760405162461bcd60e51b815260206004820152601a60248201527f57686974656c69737420737570706c792065786365656465642100000000000060448201526064016108f4565b81600b546110df91906125af565b6000818152600260205260409020546060906001600160a01b03166114d45760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b60648201526084016108f4565b60006114de611b91565b905060008151116114fe576040518060200160405280600081525061152c565b8061150884611ba0565b600960405160200161151c939291906125ce565b6040516020818303038152906040525b9392505050565b6006546001600160a01b0316331461155d5760405162461bcd60e51b81526004016108f4906123fc565b6011805462ffff00191662010000179055565b6006546001600160a01b0316331461159a5760405162461bcd60e51b81526004016108f4906123fc565b60115460ff1615156001146115f15760405162461bcd60e51b815260206004820152601c60248201527f72657365727665416d6f756e74206d696e74656420616c72656164790000000060448201526064016108f4565b600d546010546007546116049190612518565b111561160f57600080fd5b61162c6116246006546001600160a01b031690565b601054611a00565b6011805460ff19169055565b6006546001600160a01b031633146116625760405162461bcd60e51b81526004016108f4906123fc565b600b55565b6006546001600160a01b031633146116915760405162461bcd60e51b81526004016108f4906123fc565b6001600160a01b0381166116f65760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016108f4565b610b7b81611a3d565b600081815260046020526040902080546001600160a01b0319166001600160a01b03841690811790915581906117348261113b565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600260205260408120546001600160a01b03166117e65760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016108f4565b60006117f18361113b565b9050806001600160a01b0316846001600160a01b0316148061182c5750836001600160a01b03166118218461087f565b6001600160a01b0316145b8061185c57506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b03166118778261113b565b6001600160a01b0316146118db5760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b60648201526084016108f4565b6001600160a01b03821661193d5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016108f4565b6119486000826116ff565b6001600160a01b0383166000908152600360205260408120805460019290611971908490612692565b90915550506001600160a01b038216600090815260036020526040812080546001929061199f908490612518565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b60005b81811015610a2a57611a19600780546001019055565b611a2b83611a2660075490565b611c9e565b80611a3581612594565b915050611a03565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b816001600160a01b0316836001600160a01b03161415611af15760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016108f4565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b611b69848484611864565b611b7584848484611cb8565b6113275760405162461bcd60e51b81526004016108f4906126a9565b6060600880546107fc906123c1565b606081611bc45750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611bee5780611bd881612594565b9150611be79050600a83612711565b9150611bc8565b60008167ffffffffffffffff811115611c0957611c096120c1565b6040519080825280601f01601f191660200182016040528015611c33576020820181803683370190505b5090505b841561185c57611c48600183612692565b9150611c55600a86612725565b611c60906030612518565b60f81b818381518110611c7557611c7561257e565b60200101906001600160f81b031916908160001a905350611c97600a86612711565b9450611c37565b610a6c828260405180602001604052806000815250611db6565b60006001600160a01b0384163b15611dab57604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611cfc903390899088908890600401612739565b6020604051808303816000875af1925050508015611d37575060408051601f3d908101601f19168201909252611d3491810190612776565b60015b611d91573d808015611d65576040519150601f19603f3d011682016040523d82523d6000602084013e611d6a565b606091505b508051611d895760405162461bcd60e51b81526004016108f4906126a9565b805181602001fd5b6001600160e01b031916630a85bd0160e11b14905061185c565b506001949350505050565b611dc08383611de9565b611dcd6000848484611cb8565b610a2a5760405162461bcd60e51b81526004016108f4906126a9565b6001600160a01b038216611e3f5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016108f4565b6000818152600260205260409020546001600160a01b031615611ea45760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016108f4565b6001600160a01b0382166000908152600360205260408120805460019290611ecd908490612518565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b828054611f37906123c1565b90600052602060002090601f016020900481019282611f595760008555611f9f565b82601f10611f7257805160ff1916838001178555611f9f565b82800160010185558215611f9f579182015b82811115611f9f578251825591602001919060010190611f84565b50611fab929150611faf565b5090565b5b80821115611fab5760008155600101611fb0565b6001600160e01b031981168114610b7b57600080fd5b600060208284031215611fec57600080fd5b813561152c81611fc4565b60005b83811015612012578181015183820152602001611ffa565b838111156113275750506000910152565b6000815180845261203b816020860160208601611ff7565b601f01601f19169290920160200192915050565b60208152600061152c6020830184612023565b60006020828403121561207457600080fd5b5035919050565b80356001600160a01b038116811461209257600080fd5b919050565b600080604083850312156120aa57600080fd5b6120b38361207b565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff808411156120f2576120f26120c1565b604051601f8501601f19908116603f0116810190828211818310171561211a5761211a6120c1565b8160405280935085815286868601111561213357600080fd5b858560208301376000602087830101525050509392505050565b60006020828403121561215f57600080fd5b813567ffffffffffffffff81111561217657600080fd5b8201601f8101841361218757600080fd5b61185c848235602084016120d7565b6000806000606084860312156121ab57600080fd5b6121b48461207b565b92506121c26020850161207b565b9150604084013590509250925092565b600080604083850312156121e557600080fd5b823591506121f56020840161207b565b90509250929050565b60006020828403121561221057600080fd5b61152c8261207b565b6020808252825182820181905260009190848201906040850190845b8181101561225157835183529284019291840191600101612235565b50909695505050505050565b8035801515811461209257600080fd5b6000806040838503121561228057600080fd5b6122898361207b565b91506121f56020840161225d565b6000806000604084860312156122ac57600080fd5b833567ffffffffffffffff808211156122c457600080fd5b818601915086601f8301126122d857600080fd5b8135818111156122e757600080fd5b8760208260051b85010111156122fc57600080fd5b602092830195509350612312918601905061225d565b90509250925092565b6000806000806080858703121561233157600080fd5b61233a8561207b565b93506123486020860161207b565b925060408501359150606085013567ffffffffffffffff81111561236b57600080fd5b8501601f8101871361237c57600080fd5b61238b878235602084016120d7565b91505092959194509250565b600080604083850312156123aa57600080fd5b6123b38361207b565b91506121f56020840161207b565b600181811c908216806123d557607f821691505b602082108114156123f657634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b60208082526032908201527f2077686974656c6973742073616c65206973206e6f74207374617274656420796040820152716574206f7220736f6c6420616c726561647960701b606082015260800190565b602080825260149082015273496e76616c6964206d696e7420616d6f756e742160601b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b6000821982111561252b5761252b612502565b500190565b6020808252602e908201527f7075626c69632073616c65206973206e6f74207374617274656420796574206f60408201526d7220736f6c6420616c726561647960901b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b60006000198214156125a8576125a8612502565b5060010190565b60008160001904831182151516156125c9576125c9612502565b500290565b6000845160206125e18285838a01611ff7565b8551918401916125f48184848a01611ff7565b8554920191600090600181811c908083168061261157607f831692505b85831081141561262f57634e487b7160e01b85526022600452602485fd5b808015612643576001811461265457612681565b60ff19851688528388019550612681565b60008b81526020902060005b858110156126795781548a820152908401908801612660565b505083880195505b50939b9a5050505050505050505050565b6000828210156126a4576126a4612502565b500390565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b634e487b7160e01b600052601260045260246000fd5b600082612720576127206126fb565b500490565b600082612734576127346126fb565b500690565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061276c90830184612023565b9695505050505050565b60006020828403121561278857600080fd5b815161152c81611fc456fea2646970667358221220647ec96476b3dee3356396b68a6d91151cdfeb00703c7e8b2dacab9803eedde564736f6c634300080c0033
Deployed Bytecode
0x6080604052600436106102675760003560e01c80635b66e7c311610144578063a22cb465116100b6578063ca29b3921161007a578063ca29b392146106d2578063cd3293de146106e7578063d5abeb01146106fc578063e985e9c514610712578063f12f6d5d1461075b578063f2fde38b1461077b57600080fd5b8063a22cb4651461063f578063b071401b1461065f578063b88d4fde1461067f578063ba419de01461069f578063c87b56dd146106b257600080fd5b80638da5cb5b116101085780638da5cb5b1461059057806394354fd0146105ae57806395d89b41146105c457806396e8f7ad146105d95780639b19251a146105ef578063a0bcfc7f1461061f57600080fd5b80635b66e7c31461051357806362b99ad4146105265780636352211e1461053b57806370a082311461055b578063715018a61461057b57600080fd5b80633ccfd60b116101dd57806344c7fbd2116101a157806344c7fbd21461047d5780634b09b72a1461049257806352417630146104a857806353d6fd59146104be5780635503a0e8146104de5780635a38438e146104f357600080fd5b80633ccfd60b146103f55780633daaeb091461040a578063414b66ff1461041d57806342842e0e14610430578063438b63001461045057600080fd5b806316ba10e01161022f57806316ba10e01461034157806318160ddd1461036157806323b872dd146103765780632b023de01461039657806331ffd6f1146103b657806333bc1c5c146103d557600080fd5b806301ffc9a71461026c57806306fdde03146102a1578063081812fc146102c3578063095ea7b3146102fb5780630bddb6131461031d575b600080fd5b34801561027857600080fd5b5061028c610287366004611fda565b61079b565b60405190151581526020015b60405180910390f35b3480156102ad57600080fd5b506102b66107ed565b604051610298919061204f565b3480156102cf57600080fd5b506102e36102de366004612062565b61087f565b6040516001600160a01b039091168152602001610298565b34801561030757600080fd5b5061031b610316366004612097565b610919565b005b34801561032957600080fd5b50610333600f5481565b604051908152602001610298565b34801561034d57600080fd5b5061031b61035c36600461214d565b610a2f565b34801561036d57600080fd5b50610333610a70565b34801561038257600080fd5b5061031b610391366004612196565b610a80565b3480156103a257600080fd5b5061031b6103b1366004612062565b610ab1565b3480156103c257600080fd5b5060115461028c90610100900460ff1681565b3480156103e157600080fd5b5060115461028c9062010000900460ff1681565b34801561040157600080fd5b5061031b610ae0565b61031b6104183660046121d2565b610b7e565b61031b61042b3660046121d2565b610ca2565b34801561043c57600080fd5b5061031b61044b366004612196565b610d5b565b34801561045c57600080fd5b5061047061046b3660046121fe565b610d76565b6040516102989190612219565b34801561048957600080fd5b5061031b610e57565b34801561049e57600080fd5b5061033360105481565b3480156104b457600080fd5b50610333600b5481565b3480156104ca57600080fd5b5061031b6104d936600461226d565b610e92565b3480156104ea57600080fd5b506102b6610ee7565b3480156104ff57600080fd5b5061031b61050e366004612297565b610f75565b61031b610521366004612062565b611018565b34801561053257600080fd5b506102b661112e565b34801561054757600080fd5b506102e3610556366004612062565b61113b565b34801561056757600080fd5b506103336105763660046121fe565b6111b2565b34801561058757600080fd5b5061031b611239565b34801561059c57600080fd5b506006546001600160a01b03166102e3565b3480156105ba57600080fd5b50610333600e5481565b3480156105d057600080fd5b506102b661126f565b3480156105e557600080fd5b50610333600c5481565b3480156105fb57600080fd5b5061028c61060a3660046121fe565b600a6020526000908152604090205460ff1681565b34801561062b57600080fd5b5061031b61063a36600461214d565b61127e565b34801561064b57600080fd5b5061031b61065a36600461226d565b6112bb565b34801561066b57600080fd5b5061031b61067a366004612062565b6112c6565b34801561068b57600080fd5b5061031b61069a36600461231b565b6112f5565b61031b6106ad366004612062565b61132d565b3480156106be57600080fd5b506102b66106cd366004612062565b611455565b3480156106de57600080fd5b5061031b611533565b3480156106f357600080fd5b5061031b611570565b34801561070857600080fd5b50610333600d5481565b34801561071e57600080fd5b5061028c61072d366004612397565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b34801561076757600080fd5b5061031b610776366004612062565b611638565b34801561078757600080fd5b5061031b6107963660046121fe565b611667565b60006001600160e01b031982166380ac58cd60e01b14806107cc57506001600160e01b03198216635b5e139f60e01b145b806107e757506301ffc9a760e01b6001600160e01b03198316145b92915050565b6060600080546107fc906123c1565b80601f0160208091040260200160405190810160405280929190818152602001828054610828906123c1565b80156108755780601f1061084a57610100808354040283529160200191610875565b820191906000526020600020905b81548152906001019060200180831161085857829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b03166108fd5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b60006109248261113b565b9050806001600160a01b0316836001600160a01b031614156109925760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084016108f4565b336001600160a01b03821614806109ae57506109ae813361072d565b610a205760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c000000000000000060648201526084016108f4565b610a2a83836116ff565b505050565b6006546001600160a01b03163314610a595760405162461bcd60e51b81526004016108f4906123fc565b8051610a6c906009906020840190611f2b565b5050565b6000610a7b60075490565b905090565b610a8a338261176d565b610aa65760405162461bcd60e51b81526004016108f490612431565b610a2a838383611864565b6006546001600160a01b03163314610adb5760405162461bcd60e51b81526004016108f4906123fc565b600c55565b6006546001600160a01b03163314610b0a5760405162461bcd60e51b81526004016108f4906123fc565b6000610b1e6006546001600160a01b031690565b6001600160a01b03164760405160006040518083038185875af1925050503d8060008114610b68576040519150601f19603f3d011682016040523d82523d6000602084013e610b6d565b606091505b5050905080610b7b57600080fd5b50565b601154829060ff610100909104161515600114610bad5760405162461bcd60e51b81526004016108f490612482565b336000908152600a602052604090205460ff16610c055760405162461bcd60e51b81526020600482015260166024820152751e5bdd49dc99481b9bdd081dda1a5d195b1a5cdd195960521b60448201526064016108f4565b600081118015610c175750600e548111155b610c335760405162461bcd60e51b81526004016108f4906124d4565b600f5481610c4060075490565b610c4a9190612518565b1115610c985760405162461bcd60e51b815260206004820152601a60248201527f57686974656c69737420737570706c792065786365656465642100000000000060448201526064016108f4565b610a2a8284611a00565b601154829062010000900460ff161515600114610cd15760405162461bcd60e51b81526004016108f490612530565b600081118015610ce35750600e548111155b610cff5760405162461bcd60e51b81526004016108f4906124d4565b600d5481610d0c60075490565b610d169190612518565b1115610c985760405162461bcd60e51b81526020600482015260146024820152736d617820737570706c792065786365656465642160601b60448201526064016108f4565b610a2a838383604051806020016040528060008152506112f5565b60606000610d83836111b2565b905060008167ffffffffffffffff811115610da057610da06120c1565b604051908082528060200260200182016040528015610dc9578160200160208202803683370190505b509050600160005b8381108015610de25750600d548211155b15610e4d576000610df28361113b565b9050866001600160a01b0316816001600160a01b03161415610e3a5782848381518110610e2157610e2161257e565b602090810291909101015281610e3681612594565b9250505b82610e4481612594565b93505050610dd1565b5090949350505050565b6006546001600160a01b03163314610e815760405162461bcd60e51b81526004016108f4906123fc565b6011805461ff001916610100179055565b6006546001600160a01b03163314610ebc5760405162461bcd60e51b81526004016108f4906123fc565b6001600160a01b03919091166000908152600a60205260409020805460ff1916911515919091179055565b60098054610ef4906123c1565b80601f0160208091040260200160405190810160405280929190818152602001828054610f20906123c1565b8015610f6d5780601f10610f4257610100808354040283529160200191610f6d565b820191906000526020600020905b815481529060010190602001808311610f5057829003601f168201915b505050505081565b6006546001600160a01b03163314610f9f5760405162461bcd60e51b81526004016108f4906123fc565b8160005b818110156110115782600a6000878785818110610fc257610fc261257e565b9050602002016020810190610fd791906121fe565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558061100981612594565b915050610fa3565b5050505050565b601154819062010000900460ff1615156001146110475760405162461bcd60e51b81526004016108f490612530565b6000811180156110595750600e548111155b6110755760405162461bcd60e51b81526004016108f4906124d4565b600d548161108260075490565b61108c9190612518565b11156110d15760405162461bcd60e51b81526020600482015260146024820152736d617820737570706c792065786365656465642160601b60448201526064016108f4565b81600c546110df91906125af565b3410156111245760405162461bcd60e51b8152602060048201526013602482015272496e73756666696369656e742066756e64732160681b60448201526064016108f4565b610a6c3383611a00565b60088054610ef4906123c1565b6000818152600260205260408120546001600160a01b0316806107e75760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b60648201526084016108f4565b60006001600160a01b03821661121d5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b60648201526084016108f4565b506001600160a01b031660009081526003602052604090205490565b6006546001600160a01b031633146112635760405162461bcd60e51b81526004016108f4906123fc565b61126d6000611a3d565b565b6060600180546107fc906123c1565b6006546001600160a01b031633146112a85760405162461bcd60e51b81526004016108f4906123fc565b8051610a6c906008906020840190611f2b565b610a6c338383611a8f565b6006546001600160a01b031633146112f05760405162461bcd60e51b81526004016108f4906123fc565b600e55565b6112ff338361176d565b61131b5760405162461bcd60e51b81526004016108f490612431565b61132784848484611b5e565b50505050565b601154819060ff61010090910416151560011461135c5760405162461bcd60e51b81526004016108f490612482565b336000908152600a602052604090205460ff166113b45760405162461bcd60e51b81526020600482015260166024820152751e5bdd49dc99481b9bdd081dda1a5d195b1a5cdd195960521b60448201526064016108f4565b6000811180156113c65750600e548111155b6113e25760405162461bcd60e51b81526004016108f4906124d4565b600f54816113ef60075490565b6113f99190612518565b11156114475760405162461bcd60e51b815260206004820152601a60248201527f57686974656c69737420737570706c792065786365656465642100000000000060448201526064016108f4565b81600b546110df91906125af565b6000818152600260205260409020546060906001600160a01b03166114d45760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b60648201526084016108f4565b60006114de611b91565b905060008151116114fe576040518060200160405280600081525061152c565b8061150884611ba0565b600960405160200161151c939291906125ce565b6040516020818303038152906040525b9392505050565b6006546001600160a01b0316331461155d5760405162461bcd60e51b81526004016108f4906123fc565b6011805462ffff00191662010000179055565b6006546001600160a01b0316331461159a5760405162461bcd60e51b81526004016108f4906123fc565b60115460ff1615156001146115f15760405162461bcd60e51b815260206004820152601c60248201527f72657365727665416d6f756e74206d696e74656420616c72656164790000000060448201526064016108f4565b600d546010546007546116049190612518565b111561160f57600080fd5b61162c6116246006546001600160a01b031690565b601054611a00565b6011805460ff19169055565b6006546001600160a01b031633146116625760405162461bcd60e51b81526004016108f4906123fc565b600b55565b6006546001600160a01b031633146116915760405162461bcd60e51b81526004016108f4906123fc565b6001600160a01b0381166116f65760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016108f4565b610b7b81611a3d565b600081815260046020526040902080546001600160a01b0319166001600160a01b03841690811790915581906117348261113b565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600260205260408120546001600160a01b03166117e65760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016108f4565b60006117f18361113b565b9050806001600160a01b0316846001600160a01b0316148061182c5750836001600160a01b03166118218461087f565b6001600160a01b0316145b8061185c57506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b03166118778261113b565b6001600160a01b0316146118db5760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b60648201526084016108f4565b6001600160a01b03821661193d5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016108f4565b6119486000826116ff565b6001600160a01b0383166000908152600360205260408120805460019290611971908490612692565b90915550506001600160a01b038216600090815260036020526040812080546001929061199f908490612518565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b60005b81811015610a2a57611a19600780546001019055565b611a2b83611a2660075490565b611c9e565b80611a3581612594565b915050611a03565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b816001600160a01b0316836001600160a01b03161415611af15760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016108f4565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b611b69848484611864565b611b7584848484611cb8565b6113275760405162461bcd60e51b81526004016108f4906126a9565b6060600880546107fc906123c1565b606081611bc45750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611bee5780611bd881612594565b9150611be79050600a83612711565b9150611bc8565b60008167ffffffffffffffff811115611c0957611c096120c1565b6040519080825280601f01601f191660200182016040528015611c33576020820181803683370190505b5090505b841561185c57611c48600183612692565b9150611c55600a86612725565b611c60906030612518565b60f81b818381518110611c7557611c7561257e565b60200101906001600160f81b031916908160001a905350611c97600a86612711565b9450611c37565b610a6c828260405180602001604052806000815250611db6565b60006001600160a01b0384163b15611dab57604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611cfc903390899088908890600401612739565b6020604051808303816000875af1925050508015611d37575060408051601f3d908101601f19168201909252611d3491810190612776565b60015b611d91573d808015611d65576040519150601f19603f3d011682016040523d82523d6000602084013e611d6a565b606091505b508051611d895760405162461bcd60e51b81526004016108f4906126a9565b805181602001fd5b6001600160e01b031916630a85bd0160e11b14905061185c565b506001949350505050565b611dc08383611de9565b611dcd6000848484611cb8565b610a2a5760405162461bcd60e51b81526004016108f4906126a9565b6001600160a01b038216611e3f5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016108f4565b6000818152600260205260409020546001600160a01b031615611ea45760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016108f4565b6001600160a01b0382166000908152600360205260408120805460019290611ecd908490612518565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b828054611f37906123c1565b90600052602060002090601f016020900481019282611f595760008555611f9f565b82601f10611f7257805160ff1916838001178555611f9f565b82800160010185558215611f9f579182015b82811115611f9f578251825591602001919060010190611f84565b50611fab929150611faf565b5090565b5b80821115611fab5760008155600101611fb0565b6001600160e01b031981168114610b7b57600080fd5b600060208284031215611fec57600080fd5b813561152c81611fc4565b60005b83811015612012578181015183820152602001611ffa565b838111156113275750506000910152565b6000815180845261203b816020860160208601611ff7565b601f01601f19169290920160200192915050565b60208152600061152c6020830184612023565b60006020828403121561207457600080fd5b5035919050565b80356001600160a01b038116811461209257600080fd5b919050565b600080604083850312156120aa57600080fd5b6120b38361207b565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff808411156120f2576120f26120c1565b604051601f8501601f19908116603f0116810190828211818310171561211a5761211a6120c1565b8160405280935085815286868601111561213357600080fd5b858560208301376000602087830101525050509392505050565b60006020828403121561215f57600080fd5b813567ffffffffffffffff81111561217657600080fd5b8201601f8101841361218757600080fd5b61185c848235602084016120d7565b6000806000606084860312156121ab57600080fd5b6121b48461207b565b92506121c26020850161207b565b9150604084013590509250925092565b600080604083850312156121e557600080fd5b823591506121f56020840161207b565b90509250929050565b60006020828403121561221057600080fd5b61152c8261207b565b6020808252825182820181905260009190848201906040850190845b8181101561225157835183529284019291840191600101612235565b50909695505050505050565b8035801515811461209257600080fd5b6000806040838503121561228057600080fd5b6122898361207b565b91506121f56020840161225d565b6000806000604084860312156122ac57600080fd5b833567ffffffffffffffff808211156122c457600080fd5b818601915086601f8301126122d857600080fd5b8135818111156122e757600080fd5b8760208260051b85010111156122fc57600080fd5b602092830195509350612312918601905061225d565b90509250925092565b6000806000806080858703121561233157600080fd5b61233a8561207b565b93506123486020860161207b565b925060408501359150606085013567ffffffffffffffff81111561236b57600080fd5b8501601f8101871361237c57600080fd5b61238b878235602084016120d7565b91505092959194509250565b600080604083850312156123aa57600080fd5b6123b38361207b565b91506121f56020840161207b565b600181811c908216806123d557607f821691505b602082108114156123f657634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b60208082526032908201527f2077686974656c6973742073616c65206973206e6f74207374617274656420796040820152716574206f7220736f6c6420616c726561647960701b606082015260800190565b602080825260149082015273496e76616c6964206d696e7420616d6f756e742160601b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b6000821982111561252b5761252b612502565b500190565b6020808252602e908201527f7075626c69632073616c65206973206e6f74207374617274656420796574206f60408201526d7220736f6c6420616c726561647960901b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b60006000198214156125a8576125a8612502565b5060010190565b60008160001904831182151516156125c9576125c9612502565b500290565b6000845160206125e18285838a01611ff7565b8551918401916125f48184848a01611ff7565b8554920191600090600181811c908083168061261157607f831692505b85831081141561262f57634e487b7160e01b85526022600452602485fd5b808015612643576001811461265457612681565b60ff19851688528388019550612681565b60008b81526020902060005b858110156126795781548a820152908401908801612660565b505083880195505b50939b9a5050505050505050505050565b6000828210156126a4576126a4612502565b500390565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b634e487b7160e01b600052601260045260246000fd5b600082612720576127206126fb565b500490565b600082612734576127346126fb565b500690565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061276c90830184612023565b9695505050505050565b60006020828403121561278857600080fd5b815161152c81611fc456fea2646970667358221220647ec96476b3dee3356396b68a6d91151cdfeb00703c7e8b2dacab9803eedde564736f6c634300080c0033
Deployed Bytecode Sourcemap
38759:5607:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25613:305;;;;;;;;;;-1:-1:-1;25613:305:0;;;;;:::i;:::-;;:::i;:::-;;;565:14:1;;558:22;540:41;;528:2;513:18;25613:305:0;;;;;;;;26558:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;28117:221::-;;;;;;;;;;-1:-1:-1;28117:221:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;1692:32:1;;;1674:51;;1662:2;1647:18;28117:221:0;1528:203:1;27640:411:0;;;;;;;;;;-1:-1:-1;27640:411:0;;;;;:::i;:::-;;:::i;:::-;;39218:29;;;;;;;;;;;;;;;;;;;2319:25:1;;;2307:2;2292:18;39218:29:0;2173:177:1;43005:100:0;;;;;;;;;;-1:-1:-1;43005:100:0;;;;;:::i;:::-;;:::i;40210:89::-;;;;;;;;;;;;;:::i;28867:339::-;;;;;;;;;;-1:-1:-1;28867:339:0;;;;;:::i;:::-;;:::i;42621:80::-;;;;;;;;;;-1:-1:-1;42621:80:0;;;;;:::i;:::-;;:::i;39326:33::-;;;;;;;;;;-1:-1:-1;39326:33:0;;;;;;;;;;;39364:30;;;;;;;;;;-1:-1:-1;39364:30:0;;;;;;;;;;;43315:468;;;;;;;;;;;;;:::i;40846:164::-;;;;;;:::i;:::-;;:::i;41230:166::-;;;;;;:::i;:::-;;:::i;29277:185::-;;;;;;;;;;-1:-1:-1;29277:185:0;;;;;:::i;:::-;;:::i;41402:635::-;;;;;;;;;;-1:-1:-1;41402:635:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;43111:81::-;;;;;;;;;;;;;:::i;39252:33::-;;;;;;;;;;;;;;;;39045;;;;;;;;;;;;;;;;40305:100;;;;;;;;;;-1:-1:-1;40305:100:0;;;;;:::i;:::-;;:::i;38952:33::-;;;;;;;;;;;;;:::i;40411:216::-;;;;;;;;;;-1:-1:-1;40411:216:0;;;;;:::i;:::-;;:::i;41016:207::-;;;;;;:::i;:::-;;:::i;38919:28::-;;;;;;;;;;;;;:::i;26252:239::-;;;;;;;;;;-1:-1:-1;26252:239:0;;;;;:::i;:::-;;:::i;25982:208::-;;;;;;;;;;-1:-1:-1;25982:208:0;;;;;:::i;:::-;;:::i;6234:103::-;;;;;;;;;;;;;:::i;5583:87::-;;;;;;;;;;-1:-1:-1;5656:6:0;;-1:-1:-1;;;;;5656:6:0;5583:87;;39176:37;;;;;;;;;;;;;;;;26727:104;;;;;;;;;;;;;:::i;39093:33::-;;;;;;;;;;;;;;;;38994:42;;;;;;;;;;-1:-1:-1;38994:42:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;42901:98;;;;;;;;;;-1:-1:-1;42901:98:0;;;;;:::i;:::-;;:::i;28410:155::-;;;;;;;;;;-1:-1:-1;28410:155:0;;;;;:::i;:::-;;:::i;42746:130::-;;;;;;;;;;-1:-1:-1;42746:130:0;;;;;:::i;:::-;;:::i;29533:328::-;;;;;;;;;;-1:-1:-1;29533:328:0;;;;;:::i;:::-;;:::i;40633:205::-;;;;;;:::i;:::-;;:::i;42043:424::-;;;;;;;;;;-1:-1:-1;42043:424:0;;;;;:::i;:::-;;:::i;43198:107::-;;;;;;;;;;;;;:::i;43811:232::-;;;;;;;;;;;;;:::i;39141:30::-;;;;;;;;;;;;;;;;28636:164;;;;;;;;;;-1:-1:-1;28636:164:0;;;;;:::i;:::-;-1:-1:-1;;;;;28757:25:0;;;28733:4;28757:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;28636:164;42509:78;;;;;;;;;;-1:-1:-1;42509:78:0;;;;;:::i;:::-;;:::i;6492:201::-;;;;;;;;;;-1:-1:-1;6492:201:0;;;;;:::i;:::-;;:::i;25613:305::-;25715:4;-1:-1:-1;;;;;;25752:40:0;;-1:-1:-1;;;25752:40:0;;:105;;-1:-1:-1;;;;;;;25809:48:0;;-1:-1:-1;;;25809:48:0;25752:105;:158;;;-1:-1:-1;;;;;;;;;;18476:40:0;;;25874:36;25732:178;25613:305;-1:-1:-1;;25613:305:0:o;26558:100::-;26612:13;26645:5;26638:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26558:100;:::o;28117:221::-;28193:7;31460:16;;;:7;:16;;;;;;-1:-1:-1;;;;;31460:16:0;28213:73;;;;-1:-1:-1;;;28213:73:0;;7642:2:1;28213:73:0;;;7624:21:1;7681:2;7661:18;;;7654:30;7720:34;7700:18;;;7693:62;-1:-1:-1;;;7771:18:1;;;7764:42;7823:19;;28213:73:0;;;;;;;;;-1:-1:-1;28306:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;28306:24:0;;28117:221::o;27640:411::-;27721:13;27737:23;27752:7;27737:14;:23::i;:::-;27721:39;;27785:5;-1:-1:-1;;;;;27779:11:0;:2;-1:-1:-1;;;;;27779:11:0;;;27771:57;;;;-1:-1:-1;;;27771:57:0;;8055:2:1;27771:57:0;;;8037:21:1;8094:2;8074:18;;;8067:30;8133:34;8113:18;;;8106:62;-1:-1:-1;;;8184:18:1;;;8177:31;8225:19;;27771:57:0;7853:397:1;27771:57:0;4387:10;-1:-1:-1;;;;;27863:21:0;;;;:62;;-1:-1:-1;27888:37:0;27905:5;4387:10;28636:164;:::i;27888:37::-;27841:168;;;;-1:-1:-1;;;27841:168:0;;8457:2:1;27841:168:0;;;8439:21:1;8496:2;8476:18;;;8469:30;8535:34;8515:18;;;8508:62;8606:26;8586:18;;;8579:54;8650:19;;27841:168:0;8255:420:1;27841:168:0;28022:21;28031:2;28035:7;28022:8;:21::i;:::-;27710:341;27640:411;;:::o;43005:100::-;5656:6;;-1:-1:-1;;;;;5656:6:0;4387:10;5803:23;5795:68;;;;-1:-1:-1;;;5795:68:0;;;;;;;:::i;:::-;43077:22;;::::1;::::0;:9:::1;::::0;:22:::1;::::0;::::1;::::0;::::1;:::i;:::-;;43005:100:::0;:::o;40210:89::-;40254:7;40277:16;:6;1003:14;;911:114;40277:16;40270:23;;40210:89;:::o;28867:339::-;29062:41;4387:10;29095:7;29062:18;:41::i;:::-;29054:103;;;;-1:-1:-1;;;29054:103:0;;;;;;;:::i;:::-;29170:28;29180:4;29186:2;29190:7;29170:9;:28::i;42621:80::-;5656:6;;-1:-1:-1;;;;;5656:6:0;4387:10;5803:23;5795:68;;;;-1:-1:-1;;;5795:68:0;;;;;;;:::i;:::-;42681:6:::1;:14:::0;42621:80::o;43315:468::-;5656:6;;-1:-1:-1;;;;;5656:6:0;4387:10;5803:23;5795:68;;;;-1:-1:-1;;;5795:68:0;;;;;;;:::i;:::-;43605:7:::1;43626;5656:6:::0;;-1:-1:-1;;;;;5656:6:0;;5583:87;43626:7:::1;-1:-1:-1::0;;;;;43618:21:0::1;43647;43618:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43604:69;;;43688:2;43680:11;;;::::0;::::1;;43352:431;43315:468::o:0;40846:164::-;39536:13;;40942:11;;39536:13;;;;;;:21;;:13;:21;39528:84;;;;-1:-1:-1;;;39528:84:0;;;;;;;:::i;:::-;39637:10;39627:21;;;;:9;:21;;;;;;;;39619:57;;;;-1:-1:-1;;;39619:57:0;;10290:2:1;39619:57:0;;;10272:21:1;10329:2;10309:18;;;10302:30;-1:-1:-1;;;10348:18:1;;;10341:52;10410:18;;39619:57:0;10088:346:1;39619:57:0;39705:1;39691:11;:15;:52;;;;;39725:18;;39710:11;:33;;39691:52;39683:85;;;;-1:-1:-1;;;39683:85:0;;;;;;;:::i;:::-;39817:8;;39802:11;39783:16;:6;1003:14;;911:114;39783:16;:30;;;;:::i;:::-;:42;;39775:81;;;;-1:-1:-1;;;39775:81:0;;11255:2:1;39775:81:0;;;11237:21:1;11294:2;11274:18;;;11267:30;11333:28;11313:18;;;11306:56;11379:18;;39775:81:0;11053:350:1;39775:81:0;40971:33:::1;40981:9;40992:11;40971:9;:33::i;41230:166::-:0;39940:10;;41327:11;;39940:10;;;;;:18;;39954:4;39940:18;39932:77;;;;-1:-1:-1;;;39932:77:0;;;;;;;:::i;:::-;40040:1;40026:11;:15;:52;;;;;40060:18;;40045:11;:33;;40026:52;40018:85;;;;-1:-1:-1;;;40018:85:0;;;;;;;:::i;:::-;40154:9;;40139:11;40120:16;:6;1003:14;;911:114;40120:16;:30;;;;:::i;:::-;:43;;40112:76;;;;-1:-1:-1;;;40112:76:0;;12025:2:1;40112:76:0;;;12007:21:1;12064:2;12044:18;;;12037:30;-1:-1:-1;;;12083:18:1;;;12076:50;12143:18;;40112:76:0;11823:344:1;29277:185:0;29415:39;29432:4;29438:2;29442:7;29415:39;;;;;;;;;;;;:16;:39::i;41402:635::-;41477:16;41505:23;41531:17;41541:6;41531:9;:17::i;:::-;41505:43;;41555:30;41602:15;41588:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;41588:30:0;-1:-1:-1;41555:63:0;-1:-1:-1;41650:1:0;41625:22;41694:309;41719:15;41701;:33;:64;;;;;41756:9;;41738:14;:27;;41701:64;41694:309;;;41776:25;41804:23;41812:14;41804:7;:23::i;:::-;41776:51;;41863:6;-1:-1:-1;;;;;41842:27:0;:17;-1:-1:-1;;;;;41842:27:0;;41838:131;;;41915:14;41882:13;41896:15;41882:30;;;;;;;;:::i;:::-;;;;;;;;;;:47;41942:17;;;;:::i;:::-;;;;41838:131;41979:16;;;;:::i;:::-;;;;41767:236;41694:309;;;-1:-1:-1;42018:13:0;;41402:635;-1:-1:-1;;;;41402:635:0:o;43111:81::-;5656:6;;-1:-1:-1;;;;;5656:6:0;4387:10;5803:23;5795:68;;;;-1:-1:-1;;;5795:68:0;;;;;;;:::i;:::-;43166:13:::1;:20:::0;;-1:-1:-1;;43166:20:0::1;;;::::0;;43111:81::o;40305:100::-;5656:6;;-1:-1:-1;;;;;5656:6:0;4387:10;5803:23;5795:68;;;;-1:-1:-1;;;5795:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;40378:13:0;;;::::1;;::::0;;;:9:::1;:13;::::0;;;;:21;;-1:-1:-1;;40378:21:0::1;::::0;::::1;;::::0;;;::::1;::::0;;40305:100::o;38952:33::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;40411:216::-;5656:6;;-1:-1:-1;;;;;5656:6:0;4387:10;5803:23;5795:68;;;;-1:-1:-1;;;5795:68:0;;;;;;;:::i;:::-;40521:4;40507:11:::1;40541:81;40565:3;40561:1;:7;40541:81;;;40607:5;40586:9;:18;40596:4;;40601:1;40596:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;40586:18:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;40586:18:0;:26;;-1:-1:-1;;40586:26:0::1;::::0;::::1;;::::0;;;::::1;::::0;;40570:3;::::1;::::0;::::1;:::i;:::-;;;;40541:81;;;;40499:128;40411:216:::0;;;:::o;41016:207::-;39940:10;;41084:11;;39940:10;;;;;:18;;39954:4;39940:18;39932:77;;;;-1:-1:-1;;;39932:77:0;;;;;;;:::i;:::-;40040:1;40026:11;:15;:52;;;;;40060:18;;40045:11;:33;;40026:52;40018:85;;;;-1:-1:-1;;;40018:85:0;;;;;;;:::i;:::-;40154:9;;40139:11;40120:16;:6;1003:14;;911:114;40120:16;:30;;;;:::i;:::-;:43;;40112:76;;;;-1:-1:-1;;;40112:76:0;;12025:2:1;40112:76:0;;;12007:21:1;12064:2;12044:18;;;12037:30;-1:-1:-1;;;12083:18:1;;;12076:50;12143:18;;40112:76:0;11823:344:1;40112:76:0;41139:11:::1;41130:6;;:20;;;;:::i;:::-;41117:9;:33;;41109:65;;;::::0;-1:-1:-1;;;41109:65:0;;12819:2:1;41109:65:0::1;::::0;::::1;12801:21:1::0;12858:2;12838:18;;;12831:30;-1:-1:-1;;;12877:18:1;;;12870:49;12936:18;;41109:65:0::1;12617:343:1::0;41109:65:0::1;41183:34;41193:10;41205:11;41183:9;:34::i;38919:28::-:0;;;;;;;:::i;26252:239::-;26324:7;26360:16;;;:7;:16;;;;;;-1:-1:-1;;;;;26360:16:0;26395:19;26387:73;;;;-1:-1:-1;;;26387:73:0;;13167:2:1;26387:73:0;;;13149:21:1;13206:2;13186:18;;;13179:30;13245:34;13225:18;;;13218:62;-1:-1:-1;;;13296:18:1;;;13289:39;13345:19;;26387:73:0;12965:405:1;25982:208:0;26054:7;-1:-1:-1;;;;;26082:19:0;;26074:74;;;;-1:-1:-1;;;26074:74:0;;13577:2:1;26074:74:0;;;13559:21:1;13616:2;13596:18;;;13589:30;13655:34;13635:18;;;13628:62;-1:-1:-1;;;13706:18:1;;;13699:40;13756:19;;26074:74:0;13375:406:1;26074:74:0;-1:-1:-1;;;;;;26166:16:0;;;;;:9;:16;;;;;;;25982:208::o;6234:103::-;5656:6;;-1:-1:-1;;;;;5656:6:0;4387:10;5803:23;5795:68;;;;-1:-1:-1;;;5795:68:0;;;;;;;:::i;:::-;6299:30:::1;6326:1;6299:18;:30::i;:::-;6234:103::o:0;26727:104::-;26783:13;26816:7;26809:14;;;;;:::i;42901:98::-;5656:6;;-1:-1:-1;;;;;5656:6:0;4387:10;5803:23;5795:68;;;;-1:-1:-1;;;5795:68:0;;;;;;;:::i;:::-;42971:22;;::::1;::::0;:9:::1;::::0;:22:::1;::::0;::::1;::::0;::::1;:::i;28410:155::-:0;28505:52;4387:10;28538:8;28548;28505:18;:52::i;42746:130::-;5656:6;;-1:-1:-1;;;;;5656:6:0;4387:10;5803:23;5795:68;;;;-1:-1:-1;;;5795:68:0;;;;;;;:::i;:::-;42830:18:::1;:40:::0;42746:130::o;29533:328::-;29708:41;4387:10;29741:7;29708:18;:41::i;:::-;29700:103;;;;-1:-1:-1;;;29700:103:0;;;;;;;:::i;:::-;29814:39;29828:4;29834:2;29838:7;29847:5;29814:13;:39::i;:::-;29533:328;;;;:::o;40633:205::-;39536:13;;40700:11;;39536:13;;;;;;:21;;:13;:21;39528:84;;;;-1:-1:-1;;;39528:84:0;;;;;;;:::i;:::-;39637:10;39627:21;;;;:9;:21;;;;;;;;39619:57;;;;-1:-1:-1;;;39619:57:0;;10290:2:1;39619:57:0;;;10272:21:1;10329:2;10309:18;;;10302:30;-1:-1:-1;;;10348:18:1;;;10341:52;10410:18;;39619:57:0;10088:346:1;39619:57:0;39705:1;39691:11;:15;:52;;;;;39725:18;;39710:11;:33;;39691:52;39683:85;;;;-1:-1:-1;;;39683:85:0;;;;;;;:::i;:::-;39817:8;;39802:11;39783:16;:6;1003:14;;911:114;39783:16;:30;;;;:::i;:::-;:42;;39775:81;;;;-1:-1:-1;;;39775:81:0;;11255:2:1;39775:81:0;;;11237:21:1;11294:2;11274:18;;;11267:30;11333:28;11313:18;;;11306:56;11379:18;;39775:81:0;11053:350:1;39775:81:0;40754:11:::1;40745:6;;:20;;;;:::i;42043:424::-:0;31436:4;31460:16;;;:7;:16;;;;;;42142:13;;-1:-1:-1;;;;;31460:16:0;42167:98;;;;-1:-1:-1;;;42167:98:0;;13988:2:1;42167:98:0;;;13970:21:1;14027:2;14007:18;;;14000:30;14066:34;14046:18;;;14039:62;-1:-1:-1;;;14117:18:1;;;14110:45;14172:19;;42167:98:0;13786:411:1;42167:98:0;42276:28;42307:10;:8;:10::i;:::-;42276:41;;42362:1;42337:14;42331:28;:32;:130;;;;;;;;;;;;;;;;;42399:14;42415:19;:8;:17;:19::i;:::-;42436:9;42382:64;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;42331:130;42324:137;42043:424;-1:-1:-1;;;42043:424:0:o;43198:107::-;5656:6;;-1:-1:-1;;;;;5656:6:0;4387:10;5803:23;5795:68;;;;-1:-1:-1;;;5795:68:0;;;;;;;:::i;:::-;43252:10:::1;:17:::0;;-1:-1:-1;;43278:21:0;43252:17;43278:21;;;43198:107::o;43811:232::-;5656:6;;-1:-1:-1;;;;;5656:6:0;4387:10;5803:23;5795:68;;;;-1:-1:-1;;;5795:68:0;;;;;;;:::i;:::-;43866:5:::1;::::0;::::1;;:13;;:5:::0;:13:::1;43857:55;;;::::0;-1:-1:-1;;;43857:55:0;;16062:2:1;43857:55:0::1;::::0;::::1;16044:21:1::0;16101:2;16081:18;;;16074:30;16140;16120:18;;;16113:58;16188:18;;43857:55:0::1;15860:352:1::0;43857:55:0::1;43965:9;::::0;43948:13:::1;::::0;43929:6:::1;1003:14:::0;43929:32:::1;;;;:::i;:::-;:45;;43920:55;;;::::0;::::1;;43983:34;43994:7;5656:6:::0;;-1:-1:-1;;;;;5656:6:0;;5583:87;43994:7:::1;44003:13;;43983:9;:34::i;:::-;44025:5;:13:::0;;-1:-1:-1;;44025:13:0::1;::::0;;43811:232::o;42509:78::-;5656:6;;-1:-1:-1;;;;;5656:6:0;4387:10;5803:23;5795:68;;;;-1:-1:-1;;;5795:68:0;;;;;;;:::i;:::-;42567:6:::1;:14:::0;42509:78::o;6492:201::-;5656:6;;-1:-1:-1;;;;;5656:6:0;4387:10;5803:23;5795:68;;;;-1:-1:-1;;;5795:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6581:22:0;::::1;6573:73;;;::::0;-1:-1:-1;;;6573:73:0;;16419:2:1;6573:73:0::1;::::0;::::1;16401:21:1::0;16458:2;16438:18;;;16431:30;16497:34;16477:18;;;16470:62;-1:-1:-1;;;16548:18:1;;;16541:36;16594:19;;6573:73:0::1;16217:402:1::0;6573:73:0::1;6657:28;6676:8;6657:18;:28::i;35517:174::-:0;35592:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;35592:29:0;-1:-1:-1;;;;;35592:29:0;;;;;;;;:24;;35646:23;35592:24;35646:14;:23::i;:::-;-1:-1:-1;;;;;35637:46:0;;;;;;;;;;;35517:174;;:::o;31665:348::-;31758:4;31460:16;;;:7;:16;;;;;;-1:-1:-1;;;;;31460:16:0;31775:73;;;;-1:-1:-1;;;31775:73:0;;16826:2:1;31775:73:0;;;16808:21:1;16865:2;16845:18;;;16838:30;16904:34;16884:18;;;16877:62;-1:-1:-1;;;16955:18:1;;;16948:42;17007:19;;31775:73:0;16624:408:1;31775:73:0;31859:13;31875:23;31890:7;31875:14;:23::i;:::-;31859:39;;31928:5;-1:-1:-1;;;;;31917:16:0;:7;-1:-1:-1;;;;;31917:16:0;;:51;;;;31961:7;-1:-1:-1;;;;;31937:31:0;:20;31949:7;31937:11;:20::i;:::-;-1:-1:-1;;;;;31937:31:0;;31917:51;:87;;;-1:-1:-1;;;;;;28757:25:0;;;28733:4;28757:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;31972:32;31909:96;31665:348;-1:-1:-1;;;;31665:348:0:o;34774:625::-;34933:4;-1:-1:-1;;;;;34906:31:0;:23;34921:7;34906:14;:23::i;:::-;-1:-1:-1;;;;;34906:31:0;;34898:81;;;;-1:-1:-1;;;34898:81:0;;17239:2:1;34898:81:0;;;17221:21:1;17278:2;17258:18;;;17251:30;17317:34;17297:18;;;17290:62;-1:-1:-1;;;17368:18:1;;;17361:35;17413:19;;34898:81:0;17037:401:1;34898:81:0;-1:-1:-1;;;;;34998:16:0;;34990:65;;;;-1:-1:-1;;;34990:65:0;;17645:2:1;34990:65:0;;;17627:21:1;17684:2;17664:18;;;17657:30;17723:34;17703:18;;;17696:62;-1:-1:-1;;;17774:18:1;;;17767:34;17818:19;;34990:65:0;17443:400:1;34990:65:0;35172:29;35189:1;35193:7;35172:8;:29::i;:::-;-1:-1:-1;;;;;35214:15:0;;;;;;:9;:15;;;;;:20;;35233:1;;35214:15;:20;;35233:1;;35214:20;:::i;:::-;;;;-1:-1:-1;;;;;;;35245:13:0;;;;;;:9;:13;;;;;:18;;35262:1;;35245:13;:18;;35262:1;;35245:18;:::i;:::-;;;;-1:-1:-1;;35274:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;35274:21:0;-1:-1:-1;;;;;35274:21:0;;;;;;;;;35313:27;;35274:16;;35313:27;;;;;;;27710:341;27640:411;;:::o;44049:204::-;44129:9;44124:124;44148:11;44144:1;:15;44124:124;;;44175:18;:6;1122:19;;1140:1;1122:19;;;1033:127;44175:18;44202:38;44212:9;44223:16;:6;1003:14;;911:114;44223:16;44202:9;:38::i;:::-;44161:3;;;;:::i;:::-;;;;44124:124;;6853:191;6946:6;;;-1:-1:-1;;;;;6963:17:0;;;-1:-1:-1;;;;;;6963:17:0;;;;;;;6996:40;;6946:6;;;6963:17;6946:6;;6996:40;;6927:16;;6996:40;6916:128;6853:191;:::o;35833:315::-;35988:8;-1:-1:-1;;;;;35979:17:0;:5;-1:-1:-1;;;;;35979:17:0;;;35971:55;;;;-1:-1:-1;;;35971:55:0;;18180:2:1;35971:55:0;;;18162:21:1;18219:2;18199:18;;;18192:30;18258:27;18238:18;;;18231:55;18303:18;;35971:55:0;17978:349:1;35971:55:0;-1:-1:-1;;;;;36037:25:0;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;:46;;-1:-1:-1;;36037:46:0;;;;;;;;;;36099:41;;540::1;;;36099::0;;513:18:1;36099:41:0;;;;;;;35833:315;;;:::o;30743:::-;30900:28;30910:4;30916:2;30920:7;30900:9;:28::i;:::-;30947:48;30970:4;30976:2;30980:7;30989:5;30947:22;:48::i;:::-;30939:111;;;;-1:-1:-1;;;30939:111:0;;;;;;;:::i;44259:104::-;44319:13;44348:9;44341:16;;;;;:::i;1869:723::-;1925:13;2146:10;2142:53;;-1:-1:-1;;2173:10:0;;;;;;;;;;;;-1:-1:-1;;;2173:10:0;;;;;1869:723::o;2142:53::-;2220:5;2205:12;2261:78;2268:9;;2261:78;;2294:8;;;;:::i;:::-;;-1:-1:-1;2317:10:0;;-1:-1:-1;2325:2:0;2317:10;;:::i;:::-;;;2261:78;;;2349:19;2381:6;2371:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2371:17:0;;2349:39;;2399:154;2406:10;;2399:154;;2433:11;2443:1;2433:11;;:::i;:::-;;-1:-1:-1;2502:10:0;2510:2;2502:5;:10;:::i;:::-;2489:24;;:2;:24;:::i;:::-;2476:39;;2459:6;2466;2459:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;2459:56:0;;;;;;;;-1:-1:-1;2530:11:0;2539:2;2530:11;;:::i;:::-;;;2399:154;;32355:110;32431:26;32441:2;32445:7;32431:26;;;;;;;;;;;;:9;:26::i;36713:799::-;36868:4;-1:-1:-1;;;;;36889:13:0;;8579:19;:23;36885:620;;36925:72;;-1:-1:-1;;;36925:72:0;;-1:-1:-1;;;;;36925:36:0;;;;;:72;;4387:10;;36976:4;;36982:7;;36991:5;;36925:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36925:72:0;;;;;;;;-1:-1:-1;;36925:72:0;;;;;;;;;;;;:::i;:::-;;;36921:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;37167:13:0;;37163:272;;37210:60;;-1:-1:-1;;;37210:60:0;;;;;;;:::i;37163:272::-;37385:6;37379:13;37370:6;37366:2;37362:15;37355:38;36921:529;-1:-1:-1;;;;;;37048:51:0;-1:-1:-1;;;37048:51:0;;-1:-1:-1;37041:58:0;;36885:620;-1:-1:-1;37489:4:0;36713:799;;;;;;:::o;32692:321::-;32822:18;32828:2;32832:7;32822:5;:18::i;:::-;32873:54;32904:1;32908:2;32912:7;32921:5;32873:22;:54::i;:::-;32851:154;;;;-1:-1:-1;;;32851:154:0;;;;;;;:::i;33349:439::-;-1:-1:-1;;;;;33429:16:0;;33421:61;;;;-1:-1:-1;;;33421:61:0;;20075:2:1;33421:61:0;;;20057:21:1;;;20094:18;;;20087:30;20153:34;20133:18;;;20126:62;20205:18;;33421:61:0;19873:356:1;33421:61:0;31436:4;31460:16;;;:7;:16;;;;;;-1:-1:-1;;;;;31460:16:0;:30;33493:58;;;;-1:-1:-1;;;33493:58:0;;20436:2:1;33493:58:0;;;20418:21:1;20475:2;20455:18;;;20448:30;20514;20494:18;;;20487:58;20562:18;;33493:58:0;20234:352:1;33493:58:0;-1:-1:-1;;;;;33622:13:0;;;;;;:9;:13;;;;;:18;;33639:1;;33622:13;:18;;33639:1;;33622:18;:::i;:::-;;;;-1:-1:-1;;33651:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;33651:21:0;-1:-1:-1;;;;;33651:21:0;;;;;;;;33690:33;;33651:16;;;33690:33;;33651:16;;33690:33;43077:22:::1;43005:100:::0;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:131:1;-1:-1:-1;;;;;;88:32:1;;78:43;;68:71;;135:1;132;125:12;150:245;208:6;261:2;249:9;240:7;236:23;232:32;229:52;;;277:1;274;267:12;229:52;316:9;303:23;335:30;359:5;335:30;:::i;592:258::-;664:1;674:113;688:6;685:1;682:13;674:113;;;764:11;;;758:18;745:11;;;738:39;710:2;703:10;674:113;;;805:6;802:1;799:13;796:48;;;-1:-1:-1;;840:1:1;822:16;;815:27;592:258::o;855:::-;897:3;935:5;929:12;962:6;957:3;950:19;978:63;1034:6;1027:4;1022:3;1018:14;1011:4;1004:5;1000:16;978:63;:::i;:::-;1095:2;1074:15;-1:-1:-1;;1070:29:1;1061:39;;;;1102:4;1057:50;;855:258;-1:-1:-1;;855:258:1:o;1118:220::-;1267:2;1256:9;1249:21;1230:4;1287:45;1328:2;1317:9;1313:18;1305:6;1287:45;:::i;1343:180::-;1402:6;1455:2;1443:9;1434:7;1430:23;1426:32;1423:52;;;1471:1;1468;1461:12;1423:52;-1:-1:-1;1494:23:1;;1343:180;-1:-1:-1;1343:180:1:o;1736:173::-;1804:20;;-1:-1:-1;;;;;1853:31:1;;1843:42;;1833:70;;1899:1;1896;1889:12;1833:70;1736:173;;;:::o;1914:254::-;1982:6;1990;2043:2;2031:9;2022:7;2018:23;2014:32;2011:52;;;2059:1;2056;2049:12;2011:52;2082:29;2101:9;2082:29;:::i;:::-;2072:39;2158:2;2143:18;;;;2130:32;;-1:-1:-1;;;1914:254:1:o;2355:127::-;2416:10;2411:3;2407:20;2404:1;2397:31;2447:4;2444:1;2437:15;2471:4;2468:1;2461:15;2487:632;2552:5;2582:18;2623:2;2615:6;2612:14;2609:40;;;2629:18;;:::i;:::-;2704:2;2698:9;2672:2;2758:15;;-1:-1:-1;;2754:24:1;;;2780:2;2750:33;2746:42;2734:55;;;2804:18;;;2824:22;;;2801:46;2798:72;;;2850:18;;:::i;:::-;2890:10;2886:2;2879:22;2919:6;2910:15;;2949:6;2941;2934:22;2989:3;2980:6;2975:3;2971:16;2968:25;2965:45;;;3006:1;3003;2996:12;2965:45;3056:6;3051:3;3044:4;3036:6;3032:17;3019:44;3111:1;3104:4;3095:6;3087;3083:19;3079:30;3072:41;;;;2487:632;;;;;:::o;3124:451::-;3193:6;3246:2;3234:9;3225:7;3221:23;3217:32;3214:52;;;3262:1;3259;3252:12;3214:52;3302:9;3289:23;3335:18;3327:6;3324:30;3321:50;;;3367:1;3364;3357:12;3321:50;3390:22;;3443:4;3435:13;;3431:27;-1:-1:-1;3421:55:1;;3472:1;3469;3462:12;3421:55;3495:74;3561:7;3556:2;3543:16;3538:2;3534;3530:11;3495:74;:::i;3580:328::-;3657:6;3665;3673;3726:2;3714:9;3705:7;3701:23;3697:32;3694:52;;;3742:1;3739;3732:12;3694:52;3765:29;3784:9;3765:29;:::i;:::-;3755:39;;3813:38;3847:2;3836:9;3832:18;3813:38;:::i;:::-;3803:48;;3898:2;3887:9;3883:18;3870:32;3860:42;;3580:328;;;;;:::o;3913:254::-;3981:6;3989;4042:2;4030:9;4021:7;4017:23;4013:32;4010:52;;;4058:1;4055;4048:12;4010:52;4094:9;4081:23;4071:33;;4123:38;4157:2;4146:9;4142:18;4123:38;:::i;:::-;4113:48;;3913:254;;;;;:::o;4172:186::-;4231:6;4284:2;4272:9;4263:7;4259:23;4255:32;4252:52;;;4300:1;4297;4290:12;4252:52;4323:29;4342:9;4323:29;:::i;4363:632::-;4534:2;4586:21;;;4656:13;;4559:18;;;4678:22;;;4505:4;;4534:2;4757:15;;;;4731:2;4716:18;;;4505:4;4800:169;4814:6;4811:1;4808:13;4800:169;;;4875:13;;4863:26;;4944:15;;;;4909:12;;;;4836:1;4829:9;4800:169;;;-1:-1:-1;4986:3:1;;4363:632;-1:-1:-1;;;;;;4363:632:1:o;5000:160::-;5065:20;;5121:13;;5114:21;5104:32;;5094:60;;5150:1;5147;5140:12;5165:254;5230:6;5238;5291:2;5279:9;5270:7;5266:23;5262:32;5259:52;;;5307:1;5304;5297:12;5259:52;5330:29;5349:9;5330:29;:::i;:::-;5320:39;;5378:35;5409:2;5398:9;5394:18;5378:35;:::i;5424:689::-;5516:6;5524;5532;5585:2;5573:9;5564:7;5560:23;5556:32;5553:52;;;5601:1;5598;5591:12;5553:52;5641:9;5628:23;5670:18;5711:2;5703:6;5700:14;5697:34;;;5727:1;5724;5717:12;5697:34;5765:6;5754:9;5750:22;5740:32;;5810:7;5803:4;5799:2;5795:13;5791:27;5781:55;;5832:1;5829;5822:12;5781:55;5872:2;5859:16;5898:2;5890:6;5887:14;5884:34;;;5914:1;5911;5904:12;5884:34;5969:7;5962:4;5952:6;5949:1;5945:14;5941:2;5937:23;5933:34;5930:47;5927:67;;;5990:1;5987;5980:12;5927:67;6021:4;6013:13;;;;-1:-1:-1;6045:6:1;-1:-1:-1;6070:37:1;;6086:20;;;-1:-1:-1;6070:37:1;:::i;:::-;6060:47;;5424:689;;;;;:::o;6118:667::-;6213:6;6221;6229;6237;6290:3;6278:9;6269:7;6265:23;6261:33;6258:53;;;6307:1;6304;6297:12;6258:53;6330:29;6349:9;6330:29;:::i;:::-;6320:39;;6378:38;6412:2;6401:9;6397:18;6378:38;:::i;:::-;6368:48;;6463:2;6452:9;6448:18;6435:32;6425:42;;6518:2;6507:9;6503:18;6490:32;6545:18;6537:6;6534:30;6531:50;;;6577:1;6574;6567:12;6531:50;6600:22;;6653:4;6645:13;;6641:27;-1:-1:-1;6631:55:1;;6682:1;6679;6672:12;6631:55;6705:74;6771:7;6766:2;6753:16;6748:2;6744;6740:11;6705:74;:::i;:::-;6695:84;;;6118:667;;;;;;;:::o;6790:260::-;6858:6;6866;6919:2;6907:9;6898:7;6894:23;6890:32;6887:52;;;6935:1;6932;6925:12;6887:52;6958:29;6977:9;6958:29;:::i;:::-;6948:39;;7006:38;7040:2;7029:9;7025:18;7006:38;:::i;7055:380::-;7134:1;7130:12;;;;7177;;;7198:61;;7252:4;7244:6;7240:17;7230:27;;7198:61;7305:2;7297:6;7294:14;7274:18;7271:38;7268:161;;;7351:10;7346:3;7342:20;7339:1;7332:31;7386:4;7383:1;7376:15;7414:4;7411:1;7404:15;7268:161;;7055:380;;;:::o;8680:356::-;8882:2;8864:21;;;8901:18;;;8894:30;8960:34;8955:2;8940:18;;8933:62;9027:2;9012:18;;8680:356::o;9041:413::-;9243:2;9225:21;;;9282:2;9262:18;;;9255:30;9321:34;9316:2;9301:18;;9294:62;-1:-1:-1;;;9387:2:1;9372:18;;9365:47;9444:3;9429:19;;9041:413::o;9669:414::-;9871:2;9853:21;;;9910:2;9890:18;;;9883:30;9949:34;9944:2;9929:18;;9922:62;-1:-1:-1;;;10015:2:1;10000:18;;9993:48;10073:3;10058:19;;9669:414::o;10439:344::-;10641:2;10623:21;;;10680:2;10660:18;;;10653:30;-1:-1:-1;;;10714:2:1;10699:18;;10692:50;10774:2;10759:18;;10439:344::o;10788:127::-;10849:10;10844:3;10840:20;10837:1;10830:31;10880:4;10877:1;10870:15;10904:4;10901:1;10894:15;10920:128;10960:3;10991:1;10987:6;10984:1;10981:13;10978:39;;;10997:18;;:::i;:::-;-1:-1:-1;11033:9:1;;10920:128::o;11408:410::-;11610:2;11592:21;;;11649:2;11629:18;;;11622:30;11688:34;11683:2;11668:18;;11661:62;-1:-1:-1;;;11754:2:1;11739:18;;11732:44;11808:3;11793:19;;11408:410::o;12172:127::-;12233:10;12228:3;12224:20;12221:1;12214:31;12264:4;12261:1;12254:15;12288:4;12285:1;12278:15;12304:135;12343:3;-1:-1:-1;;12364:17:1;;12361:43;;;12384:18;;:::i;:::-;-1:-1:-1;12431:1:1;12420:13;;12304:135::o;12444:168::-;12484:7;12550:1;12546;12542:6;12538:14;12535:1;12532:21;12527:1;12520:9;12513:17;12509:45;12506:71;;;12557:18;;:::i;:::-;-1:-1:-1;12597:9:1;;12444:168::o;14328:1527::-;14552:3;14590:6;14584:13;14616:4;14629:51;14673:6;14668:3;14663:2;14655:6;14651:15;14629:51;:::i;:::-;14743:13;;14702:16;;;;14765:55;14743:13;14702:16;14787:15;;;14765:55;:::i;:::-;14909:13;;14842:20;;;14882:1;;14969;14991:18;;;;15044;;;;15071:93;;15149:4;15139:8;15135:19;15123:31;;15071:93;15212:2;15202:8;15199:16;15179:18;15176:40;15173:167;;;-1:-1:-1;;;15239:33:1;;15295:4;15292:1;15285:15;15325:4;15246:3;15313:17;15173:167;15356:18;15383:110;;;;15507:1;15502:328;;;;15349:481;;15383:110;-1:-1:-1;;15418:24:1;;15404:39;;15463:20;;;;-1:-1:-1;15383:110:1;;15502:328;14275:1;14268:14;;;14312:4;14299:18;;15597:1;15611:169;15625:8;15622:1;15619:15;15611:169;;;15707:14;;15692:13;;;15685:37;15750:16;;;;15642:10;;15611:169;;;15615:3;;15811:8;15804:5;15800:20;15793:27;;15349:481;-1:-1:-1;15846:3:1;;14328:1527;-1:-1:-1;;;;;;;;;;;14328:1527:1:o;17848:125::-;17888:4;17916:1;17913;17910:8;17907:34;;;17921:18;;:::i;:::-;-1:-1:-1;17958:9:1;;17848:125::o;18332:414::-;18534:2;18516:21;;;18573:2;18553:18;;;18546:30;18612:34;18607:2;18592:18;;18585:62;-1:-1:-1;;;18678:2:1;18663:18;;18656:48;18736:3;18721:19;;18332:414::o;18751:127::-;18812:10;18807:3;18803:20;18800:1;18793:31;18843:4;18840:1;18833:15;18867:4;18864:1;18857:15;18883:120;18923:1;18949;18939:35;;18954:18;;:::i;:::-;-1:-1:-1;18988:9:1;;18883:120::o;19008:112::-;19040:1;19066;19056:35;;19071:18;;:::i;:::-;-1:-1:-1;19105:9:1;;19008:112::o;19125:489::-;-1:-1:-1;;;;;19394:15:1;;;19376:34;;19446:15;;19441:2;19426:18;;19419:43;19493:2;19478:18;;19471:34;;;19541:3;19536:2;19521:18;;19514:31;;;19319:4;;19562:46;;19588:19;;19580:6;19562:46;:::i;:::-;19554:54;19125:489;-1:-1:-1;;;;;;19125:489:1:o;19619:249::-;19688:6;19741:2;19729:9;19720:7;19716:23;19712:32;19709:52;;;19757:1;19754;19747:12;19709:52;19789:9;19783:16;19808:30;19832:5;19808:30;:::i
Swarm Source
ipfs://647ec96476b3dee3356396b68a6d91151cdfeb00703c7e8b2dacab9803eedde5
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.