ERC-721
Overview
Max Total Supply
10,000 SKVLLZ
Holders
3,041
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
2 SKVLLZLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Skvllpvnkz
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-09-09 */ // File: @openzeppelin/contracts/security/ReentrancyGuard.sol pragma solidity ^0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and make it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } // File: @openzeppelin/contracts/utils/Context.sol pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _setOwner(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _setOwner(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/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 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 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 pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { require(operator != _msgSender(), "ERC721: approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // File: @openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol pragma solidity ^0.8.0; /** * @dev This implements an optional extension of {ERC721} defined in the EIP that adds * enumerability of all the token ids in the contract as well as all token ids owned by each * account. */ abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => mapping(uint256 => uint256)) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds"); return _ownedTokens[owner][index]; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds"); return _allTokens[index]; } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` cannot be the zero address. * - `to` cannot be the zero address. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array delete _allTokensIndex[tokenId]; _allTokens.pop(); } } // File: @openzeppelin/contracts/utils/Strings.sol pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/contracts/utils/Address.sol pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC721/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: contracts/skvllpvnkz.sol pragma solidity ^0.8.0; contract Skvllpvnkz is ERC721Enumerable, Ownable, ReentrancyGuard { using Strings for uint256; /* Events */ event SkvllpvnkzFreeMintStarted(); event SkvllpvnkzFreeMintPaused(); event SkvllpvnkzPublicSaleStarted(); event SkvllpvnkzPublicSalePaused(); event SkvllpvnkzPresaleStarted(); event SkvllpvnkzPresalePaused(); /* Supply Pools ** These are the total supply amounts for each pool. ** We have 3 supply pools: ** 1. Reserved giveaway pool for future giveaways ** 2. Reserved early free mint pool for previous collection owners ** 3. Public presale and open sale pool available to everyone */ uint256 private _maxSupply = 10000; uint256 private _rsrvdGiveawaySupply = 100; uint256 private _rsrvdEarlySupply = 356; uint256 private _unrsrvdSupply = _maxSupply - _rsrvdGiveawaySupply - _rsrvdEarlySupply; /* Token IDs ** Token ID ranges are reserved for the 3 different pools. ** _rsrvdGiveawayTID -> _rsrvdEarlyTID -> _tokenId */ uint256 private _rsrvdGiveawayTID = 0; // This is the starting ID uint256 private _rsrvdEarlyTID = _rsrvdGiveawaySupply; uint256 private _tokenId = _rsrvdGiveawaySupply + _rsrvdEarlySupply; // The base URI for the token string _baseTokenURI; // The maximum mint batch size per transaction for the public sale uint256 private _maxBatch = 10; // The maximum mint batch size per transaction for the presale uint256 private _maxBatchPresale = 2; // The price per mint uint256 private _price = 0.05 ether; // Flag to start / pause public sale bool public _publicSale = false; // Flag to start / pause presale bool public _presale = false; // Flag to start / pause presale bool public _ownerSale = false; bool private _provenanceSet = false; string private _contractURI = "http://api.skvllpvnkz.io/contract"; uint256 private _walletLimit = 200; string public provenance = ""; /* Whitelists ** We have 2 separte whitelists: ** 2. Presale whitelist for Outcasts */ mapping(address => uint256) private _presaleList; mapping(address => uint256) private _freeList; // Withdraw addresses address t1 = 0xAD5e57aCB70635671d6FEa67b08FB56f3eff596e; address t2 = 0xE3f33298381C7694cf5e999B36fD513a0Ddec8ba; address t3 = 0x58723Ef34C6F1197c30B35fC763365508d24b448; address t4 = 0x46F231aD0279dA2d249D690Ab1e92F1B1f1F0158; address t5 = 0xcdA2E4b965eCa883415107b624e971c4Cefc4D8C; modifier notContract { require( !_isContract( msg.sender ), "Cannot call this from a contract " ); _; } constructor() ERC721("Skvllpvnkz Hideout", "SKVLLZ") {} /* Presale Mint ** Presale minting is available before the public sale to users ** on the presale whitelist. Wallets on the whitelist will be allowed ** to mint a maximum of 2 avatars */ function presaleRecruit(uint256 num) external payable nonReentrant notContract{ require( _presale, "Presale paused" ); require( _presaleList[msg.sender] > 0, "Not on the whitelist"); require( num <= _maxBatchPresale, "Exceeds the maximum amount" ); require( _presaleList[msg.sender] >= num, 'Purchase exceeds max allowed'); require( num <= remainingSupply(), "Exceeds reserved supply" ); require( msg.value >= _price * num, "Ether sent is not correct" ); _presaleList[msg.sender] -= num; for(uint256 i; i < num; i++){ _tokenId ++; _safeMint( msg.sender, _tokenId ); } } /* Standard Mint ** This is the standard mint function allowing a user to mint a ** maximum of 10 avatars. It mints the tokens from a pool of IDs ** starting after the initial reserved token pools */ function recruit(uint256 num) external payable nonReentrant notContract { require( !_isContract( msg.sender ), "Cannot call this from a contract " ); require( _publicSale, "Sale paused" ); require( num <= _maxBatch, "Max 10 per TX" ); require( num <= remainingSupply(), "Exceeds maximum supply" ); require( balanceOf(msg.sender) + num <= _walletLimit, "Exceeds wallet limit"); require( msg.value >= _price * num, "Incorrect Ether sent" ); for( uint256 i; i < num; i++ ){ if (_tokenId <= _maxSupply) { _tokenId ++; _safeMint( msg.sender, _tokenId ); } } } /* Giveaway Mint ** This is the standard mint function allowing a user to mint a ** maximum of 20 avatars. It mints the tokens from a pool of IDs ** starting after the initial reserved token pools */ function giveAway(address _to, uint256 _amount) external onlyOwner() { require( _amount <= remainingGiveaways(), "Exceeds reserved supply" ); for(uint256 i; i < _amount; i++){ _rsrvdGiveawayTID ++; _safeMint( _to, _rsrvdGiveawayTID); } } function freeRecruit() external payable nonReentrant notContract { require( _ownerSale, "Free mint is not on" ); require( _freeList[msg.sender] > 0, "Not on the whitelist"); require( _freeList[msg.sender] <= remainingEarlySupply(), "Exceeds reserved supply" ); uint256 mintCnt = _freeList[msg.sender]; _freeList[msg.sender] = 0; for( uint256 i; i < mintCnt; i++ ){ _rsrvdEarlyTID ++; _safeMint( msg.sender, _rsrvdEarlyTID ); } } function _isContract(address _addr) internal view returns (bool) { uint32 _size; assembly { _size:= extcodesize(_addr) } return (_size > 0); } /* Remove wallet from the free mint whitelist */ function removeFromFreeList(address _address) external onlyOwner { _freeList[_address] = 0; } /* Add wallet to the presale whitelist */ function addToFreeList(address[] calldata addresses, uint256[] calldata count) external onlyOwner{ for (uint256 i = 0; i < addresses.length; i++) { _freeList[addresses[i]] = count[i]; } } /* Add wallet to the presale whitelist */ function addToPresaleList(address[] calldata addresses) external onlyOwner{ for (uint256 i = 0; i < addresses.length; i++) { require(addresses[i] != address(0), "Can't add a null address"); _presaleList[addresses[i]] = _maxBatchPresale; } } /* Remove wallet from the presale whitelist */ function removeFromPresaleList(address[] calldata addresses) external onlyOwner { for (uint256 i = 0; i < addresses.length; i++) { require(addresses[i] != address(0), "Can't remove a null address"); _presaleList[addresses[i]] = 0; } } function onPresaleList(address addr) external view returns (uint256) { return _presaleList[addr]; } function onFreeList(address addr) external view returns (uint256) { return _freeList[addr]; } function walletOfOwner(address _owner) external view returns(uint256[] memory) { uint256 tokenCount = balanceOf(_owner); uint256[] memory tokensId = new uint256[](tokenCount); for(uint256 i; i < tokenCount; i++){ tokensId[i] = tokenOfOwnerByIndex(_owner, i); } return tokensId; } function publicSale(bool val) external onlyOwner { _publicSale = val; if (val) { _presale = false; emit SkvllpvnkzPublicSaleStarted(); emit SkvllpvnkzPresalePaused(); } else { emit SkvllpvnkzPublicSalePaused(); } } function freeMint(bool val) external onlyOwner { _ownerSale = val; if (val) { emit SkvllpvnkzFreeMintStarted(); } else { emit SkvllpvnkzFreeMintPaused(); } } function presale(bool val) external onlyOwner { require(!_publicSale, "Can't have a presale during the public sale"); _presale = val; if (val) { emit SkvllpvnkzPresaleStarted(); } else { emit SkvllpvnkzPresalePaused(); } } function setPrice(uint256 _newPrice) external onlyOwner() { _price = _newPrice; } function _baseURI() internal view virtual override returns (string memory) { return _baseTokenURI; } function setBaseURI(string memory baseURI) external onlyOwner { _baseTokenURI = baseURI; } function setMaxBatch(uint256 maxBatch) external onlyOwner { _maxBatch = maxBatch; } function getMaxBatch() external view returns (uint256) { return _maxBatch; } function getPrice() external view returns (uint256){ return _price; } function remainingTotalSupply() external view returns (uint256){ return _maxSupply - totalSupply(); } function remainingSupply() public view returns (uint256) { return _unrsrvdSupply + _rsrvdEarlySupply + _rsrvdGiveawaySupply - _tokenId; } function remainingGiveaways() public view returns (uint256){ return _rsrvdGiveawaySupply - _rsrvdGiveawayTID; } function remainingEarlySupply() public view returns (uint256){ return _rsrvdEarlySupply + _rsrvdGiveawaySupply - _rsrvdEarlyTID; } function maxSupply() external view returns (uint256){ return _maxSupply; } function withdraw(uint256 amount) external payable onlyOwner { require(payable(msg.sender).send(amount)); } function withdrawAll() external payable onlyOwner { uint256 _each = address(this).balance / 100; require(payable(t1).send( _each * 31 )); // TM1 require(payable(t2).send( _each * 21 )); // TM2 require(payable(t3).send( _each * 21 )); // TM3 require(payable(t4).send( _each * 21 )); // TM4 require(payable(t5).send( _each * 6 )); // Comm } function setWalletLimit(uint256 limit) external onlyOwner { _walletLimit = limit; } function setContractURI(string memory uri) external onlyOwner { _contractURI = uri; } function contractURI() external view returns (string memory) { return _contractURI; } function setProvenance(string memory _provenance) external onlyOwner { require(!_provenanceSet, "Provenance has been set already"); provenance = _provenance; _provenanceSet = true; } }
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":[],"name":"SkvllpvnkzFreeMintPaused","type":"event"},{"anonymous":false,"inputs":[],"name":"SkvllpvnkzFreeMintStarted","type":"event"},{"anonymous":false,"inputs":[],"name":"SkvllpvnkzPresalePaused","type":"event"},{"anonymous":false,"inputs":[],"name":"SkvllpvnkzPresaleStarted","type":"event"},{"anonymous":false,"inputs":[],"name":"SkvllpvnkzPublicSalePaused","type":"event"},{"anonymous":false,"inputs":[],"name":"SkvllpvnkzPublicSaleStarted","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":"_ownerSale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_presale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_publicSale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256[]","name":"count","type":"uint256[]"}],"name":"addToFreeList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"addToPresaleList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"val","type":"bool"}],"name":"freeMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"freeRecruit","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaxBatch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"giveAway","outputs":[],"stateMutability":"nonpayable","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":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"onFreeList","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"onPresaleList","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"val","type":"bool"}],"name":"presale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"num","type":"uint256"}],"name":"presaleRecruit","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"provenance","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"val","type":"bool"}],"name":"publicSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"num","type":"uint256"}],"name":"recruit","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"remainingEarlySupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"remainingGiveaways","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"remainingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"remainingTotalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"removeFromFreeList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"removeFromPresaleList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"uri","type":"string"}],"name":"setContractURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxBatch","type":"uint256"}],"name":"setMaxBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPrice","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_provenance","type":"string"}],"name":"setProvenance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"limit","type":"uint256"}],"name":"setWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"withdrawAll","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
6080604052612710600c556064600d55610164600e55600e54600d54600c546200002a91906200032c565b6200003691906200032c565b600f556000601055600d546011819055600e54620000549162000311565b601255600a601455600260155566b1a2bc2ec500006016556017805463ffffffff19169055604080516060810190915260218082526200386a60208301398051620000a8916018916020909101906200026b565b5060c8601955604080516020810191829052600090819052620000ce91601a916200026b565b50601d80546001600160a01b031990811673ad5e57acb70635671d6fea67b08fb56f3eff596e17909155601e8054821673e3f33298381c7694cf5e999b36fd513a0ddec8ba179055601f805482167358723ef34c6f1197c30b35fc763365508d24b4481790556020805482167346f231ad0279da2d249d690ab1e92f1b1f1f01581790556021805490911673cda2e4b965eca883415107b624e971c4cefc4d8c1790553480156200017e57600080fd5b50604080518082018252601281527114dadd9b1b1c1d9b9ade88121a59195bdd5d60721b60208083019182528351808501909452600684526529a5ab26262d60d11b908401528151919291620001d7916000916200026b565b508051620001ed9060019060208401906200026b565b5050506200020a620002046200021560201b60201c565b62000219565b6001600b5562000399565b3390565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b828054620002799062000346565b90600052602060002090601f0160209004810192826200029d5760008555620002e8565b82601f10620002b857805160ff1916838001178555620002e8565b82800160010185558215620002e8579182015b82811115620002e8578251825591602001919060010190620002cb565b50620002f6929150620002fa565b5090565b5b80821115620002f65760008155600101620002fb565b6000821982111562000327576200032762000383565b500190565b60008282101562000341576200034162000383565b500390565b600181811c908216806200035b57607f821691505b602082108114156200037d57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6134c180620003a96000396000f3fe60806040526004361061031a5760003560e01c8063715018a6116101ab578063bec32851116100f7578063e360337011610095578063edc2fcfb1161006f578063edc2fcfb146108f8578063f1d5f51714610918578063f2fde38b14610938578063ffe630b51461095857600080fd5b8063e36033701461087a578063e8a3d4851461089a578063e985e9c5146108af57600080fd5b8063caab9182116100d1578063caab918214610811578063d5abeb0114610831578063da0239a614610846578063e2a71ef81461085b57600080fd5b8063bec32851146107bc578063c87b56dd146107d1578063ca800144146107f157600080fd5b806391b7f5ed1161016457806398d5fdca1161013e57806398d5fdca14610747578063a22cb4651461075c578063b179e0601461077c578063b88d4fde1461079c57600080fd5b806391b7f5ed146106f2578063938e3d7b1461071257806395d89b411461073257600080fd5b8063715018a6146106645780637204a3c914610679578063853828b61461069957806385d359d1146106a15780638c74ddda146106b45780638da5cb5b146106d457600080fd5b806334026e391161026a578063568fb73c116102235780636352211e116101fd5780636352211e146105ea5780636956ba191461060a5780636ab195091461062457806370a082311461064457600080fd5b8063568fb73c1461058a5780635bf677311461059f57806360954ac1146105b457600080fd5b806334026e39146104d5578063403fe4c8146104f557806342842e0e146104fd578063438b63001461051d5780634f6ccce71461054a57806355f804b31461056a57600080fd5b80631d2578ba116102d757806323b872dd116102b157806323b872dd146104625780632e1a7d4d146104825780632f745c5914610495578063300b23d8146104b557600080fd5b80631d2578ba146104045780631db958ca1461043a5780631e73ff4f1461044f57600080fd5b806301ffc9a71461031f57806306fdde0314610354578063081812fc14610376578063095ea7b3146103ae5780630f7309e8146103d057806318160ddd146103e5575b600080fd5b34801561032b57600080fd5b5061033f61033a366004612ffd565b610978565b60405190151581526020015b60405180910390f35b34801561036057600080fd5b506103696109a3565b60405161034b9190613175565b34801561038257600080fd5b50610396610391366004613080565b610a35565b6040516001600160a01b03909116815260200161034b565b3480156103ba57600080fd5b506103ce6103c9366004612f0a565b610acf565b005b3480156103dc57600080fd5b50610369610be5565b3480156103f157600080fd5b506008545b60405190815260200161034b565b34801561041057600080fd5b506103f661041f366004612dda565b6001600160a01b03166000908152601c602052604090205490565b34801561044657600080fd5b506103f6610c73565b6103ce61045d366004613080565b610c97565b34801561046e57600080fd5b506103ce61047d366004612e28565b610edd565b6103ce610490366004613080565b610f0e565b3480156104a157600080fd5b506103f66104b0366004612f0a565b610f60565b3480156104c157600080fd5b506103ce6104d0366004613080565b610ff6565b3480156104e157600080fd5b506103ce6104f0366004612fe2565b611025565b6103ce6110c7565b34801561050957600080fd5b506103ce610518366004612e28565b61123d565b34801561052957600080fd5b5061053d610538366004612dda565b611258565b60405161034b9190613131565b34801561055657600080fd5b506103f6610565366004613080565b6112fa565b34801561057657600080fd5b506103ce610585366004613037565b61138d565b34801561059657600080fd5b506103f66113ce565b3480156105ab57600080fd5b506103f66113e0565b3480156105c057600080fd5b506103f66105cf366004612dda565b6001600160a01b03166000908152601b602052604090205490565b3480156105f657600080fd5b50610396610605366004613080565b6113f8565b34801561061657600080fd5b5060175461033f9060ff1681565b34801561063057600080fd5b506103ce61063f366004612dda565b61146f565b34801561065057600080fd5b506103f661065f366004612dda565b6114b3565b34801561067057600080fd5b506103ce61153a565b34801561068557600080fd5b506103ce610694366004612f34565b611570565b6103ce61167f565b6103ce6106af366004613080565b6117db565b3480156106c057600080fd5b5060175461033f9062010000900460ff1681565b3480156106e057600080fd5b50600a546001600160a01b0316610396565b3480156106fe57600080fd5b506103ce61070d366004613080565b611a5b565b34801561071e57600080fd5b506103ce61072d366004613037565b611a8a565b34801561073e57600080fd5b50610369611ac7565b34801561075357600080fd5b506016546103f6565b34801561076857600080fd5b506103ce610777366004612ee0565b611ad6565b34801561078857600080fd5b506103ce610797366004612f34565b611b9b565b3480156107a857600080fd5b506103ce6107b7366004612e64565b611ca9565b3480156107c857600080fd5b506014546103f6565b3480156107dd57600080fd5b506103696107ec366004613080565b611ce1565b3480156107fd57600080fd5b506103ce61080c366004612f0a565b611dbc565b34801561081d57600080fd5b506103ce61082c366004612fe2565b611e4b565b34801561083d57600080fd5b50600c546103f6565b34801561085257600080fd5b506103f6611f18565b34801561086757600080fd5b5060175461033f90610100900460ff1681565b34801561088657600080fd5b506103ce610895366004612f76565b611f3a565b3480156108a657600080fd5b50610369611fe6565b3480156108bb57600080fd5b5061033f6108ca366004612df5565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b34801561090457600080fd5b506103ce610913366004612fe2565b611ff5565b34801561092457600080fd5b506103ce610933366004613080565b6120fc565b34801561094457600080fd5b506103ce610953366004612dda565b61212b565b34801561096457600080fd5b506103ce610973366004613037565b6121c3565b60006001600160e01b0319821663780e9d6360e01b148061099d575061099d82612271565b92915050565b6060600080546109b29061339d565b80601f01602080910402602001604051908101604052809291908181526020018280546109de9061339d565b8015610a2b5780601f10610a0057610100808354040283529160200191610a2b565b820191906000526020600020905b815481529060010190602001808311610a0e57829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b0316610ab35760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b6000610ada826113f8565b9050806001600160a01b0316836001600160a01b03161415610b485760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610aaa565b336001600160a01b0382161480610b645750610b6481336108ca565b610bd65760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610aaa565b610be083836122c1565b505050565b601a8054610bf29061339d565b80601f0160208091040260200160405190810160405280929190818152602001828054610c1e9061339d565b8015610c6b5780601f10610c4057610100808354040283529160200191610c6b565b820191906000526020600020905b815481529060010190602001808311610c4e57829003601f168201915b505050505081565b6000601154600d54600e54610c88919061330f565b610c92919061335a565b905090565b6002600b541415610cba5760405162461bcd60e51b8152600401610aaa906132d8565b6002600b55333b63ffffffff1615610ce45760405162461bcd60e51b8152600401610aaa906131da565b333b63ffffffff1615610d095760405162461bcd60e51b8152600401610aaa906131da565b60175460ff16610d495760405162461bcd60e51b815260206004820152600b60248201526a14d85b19481c185d5cd95960aa1b6044820152606401610aaa565b601454811115610d8b5760405162461bcd60e51b815260206004820152600d60248201526c09ac2f040626040e0cae440a8b609b1b6044820152606401610aaa565b610d93611f18565b811115610ddb5760405162461bcd60e51b815260206004820152601660248201527545786365656473206d6178696d756d20737570706c7960501b6044820152606401610aaa565b60195481610de8336114b3565b610df2919061330f565b1115610e375760405162461bcd60e51b8152602060048201526014602482015273115e18d959591cc81dd85b1b195d081b1a5b5a5d60621b6044820152606401610aaa565b80601654610e45919061333b565b341015610e8b5760405162461bcd60e51b8152602060048201526014602482015273125b98dbdc9c9958dd08115d1a195c881cd95b9d60621b6044820152606401610aaa565b60005b81811015610ed457600c5460125411610ec25760128054906000610eb1836133d8565b9190505550610ec23360125461232f565b80610ecc816133d8565b915050610e8e565b50506001600b55565b610ee73382612349565b610f035760405162461bcd60e51b8152600401610aaa90613287565b610be0838383612440565b600a546001600160a01b03163314610f385760405162461bcd60e51b8152600401610aaa90613252565b604051339082156108fc029083906000818181858888f19350505050610f5d57600080fd5b50565b6000610f6b836114b3565b8210610fcd5760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b6064820152608401610aaa565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b600a546001600160a01b031633146110205760405162461bcd60e51b8152600401610aaa90613252565b601455565b600a546001600160a01b0316331461104f5760405162461bcd60e51b8152600401610aaa90613252565b6017805482158015620100000262ff0000199092169190911790915561109b576040517f347cb692cd2bd01661be6b0a3821ae56341003757b026edcc4be761b7d1674ca90600090a150565b6040517fcced91af235ba65a0f6dc0058e435cf88fc90204e88152a687a781df3334309090600090a150565b6002600b5414156110ea5760405162461bcd60e51b8152600401610aaa906132d8565b6002600b55333b63ffffffff16156111145760405162461bcd60e51b8152600401610aaa906131da565b60175462010000900460ff166111625760405162461bcd60e51b8152602060048201526013602482015272233932b29036b4b73a1034b9903737ba1037b760691b6044820152606401610aaa565b336000908152601c60205260409020546111b55760405162461bcd60e51b8152602060048201526014602482015273139bdd081bdb881d1a19481dda1a5d195b1a5cdd60621b6044820152606401610aaa565b6111bd610c73565b336000908152601c602052604090205411156111eb5760405162461bcd60e51b8152600401610aaa9061321b565b336000908152601c60205260408120805490829055905b81811015610ed4576011805490600061121a836133d8565b919050555061122b3360115461232f565b80611235816133d8565b915050611202565b610be083838360405180602001604052806000815250611ca9565b60606000611265836114b3565b905060008167ffffffffffffffff8111156112825761128261345f565b6040519080825280602002602001820160405280156112ab578160200160208202803683370190505b50905060005b828110156112f2576112c38582610f60565b8282815181106112d5576112d5613449565b6020908102919091010152806112ea816133d8565b9150506112b1565b509392505050565b600061130560085490565b82106113685760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b6064820152608401610aaa565b6008828154811061137b5761137b613449565b90600052602060002001549050919050565b600a546001600160a01b031633146113b75760405162461bcd60e51b8152600401610aaa90613252565b80516113ca906013906020840190612c53565b5050565b6000601054600d54610c92919061335a565b60006113eb60085490565b600c54610c92919061335a565b6000818152600260205260408120546001600160a01b03168061099d5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610aaa565b600a546001600160a01b031633146114995760405162461bcd60e51b8152600401610aaa90613252565b6001600160a01b03166000908152601c6020526040812055565b60006001600160a01b03821661151e5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610aaa565b506001600160a01b031660009081526003602052604090205490565b600a546001600160a01b031633146115645760405162461bcd60e51b8152600401610aaa90613252565b61156e60006125eb565b565b600a546001600160a01b0316331461159a5760405162461bcd60e51b8152600401610aaa90613252565b60005b81811015610be05760008383838181106115b9576115b9613449565b90506020020160208101906115ce9190612dda565b6001600160a01b031614156116255760405162461bcd60e51b815260206004820152601860248201527f43616e2774206164642061206e756c6c206164647265737300000000000000006044820152606401610aaa565b601554601b600085858581811061163e5761163e613449565b90506020020160208101906116539190612dda565b6001600160a01b0316815260208101919091526040016000205580611677816133d8565b91505061159d565b600a546001600160a01b031633146116a95760405162461bcd60e51b8152600401610aaa90613252565b60006116b6606447613327565b601d549091506001600160a01b03166108fc6116d383601f61333b565b6040518115909202916000818181858888f193505050506116f357600080fd5b601e546001600160a01b03166108fc61170d83601561333b565b6040518115909202916000818181858888f1935050505061172d57600080fd5b601f546001600160a01b03166108fc61174783601561333b565b6040518115909202916000818181858888f1935050505061176757600080fd5b6020546001600160a01b03166108fc61178183601561333b565b6040518115909202916000818181858888f193505050506117a157600080fd5b6021546001600160a01b03166108fc6117bb83600661333b565b6040518115909202916000818181858888f19350505050610f5d57600080fd5b6002600b5414156117fe5760405162461bcd60e51b8152600401610aaa906132d8565b6002600b55333b63ffffffff16156118285760405162461bcd60e51b8152600401610aaa906131da565b601754610100900460ff166118705760405162461bcd60e51b815260206004820152600e60248201526d141c995cd85b19481c185d5cd95960921b6044820152606401610aaa565b336000908152601b60205260409020546118c35760405162461bcd60e51b8152602060048201526014602482015273139bdd081bdb881d1a19481dda1a5d195b1a5cdd60621b6044820152606401610aaa565b6015548111156119155760405162461bcd60e51b815260206004820152601a60248201527f4578636565647320746865206d6178696d756d20616d6f756e740000000000006044820152606401610aaa565b336000908152601b60205260409020548111156119745760405162461bcd60e51b815260206004820152601c60248201527f50757263686173652065786365656473206d617820616c6c6f776564000000006044820152606401610aaa565b61197c611f18565b81111561199b5760405162461bcd60e51b8152600401610aaa9061321b565b806016546119a9919061333b565b3410156119f85760405162461bcd60e51b815260206004820152601960248201527f45746865722073656e74206973206e6f7420636f7272656374000000000000006044820152606401610aaa565b336000908152601b602052604081208054839290611a1790849061335a565b90915550600090505b81811015610ed45760128054906000611a38836133d8565b9190505550611a493360125461232f565b80611a53816133d8565b915050611a20565b600a546001600160a01b03163314611a855760405162461bcd60e51b8152600401610aaa90613252565b601655565b600a546001600160a01b03163314611ab45760405162461bcd60e51b8152600401610aaa90613252565b80516113ca906018906020840190612c53565b6060600180546109b29061339d565b6001600160a01b038216331415611b2f5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610aaa565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b600a546001600160a01b03163314611bc55760405162461bcd60e51b8152600401610aaa90613252565b60005b81811015610be0576000838383818110611be457611be4613449565b9050602002016020810190611bf99190612dda565b6001600160a01b03161415611c505760405162461bcd60e51b815260206004820152601b60248201527f43616e27742072656d6f76652061206e756c6c206164647265737300000000006044820152606401610aaa565b6000601b6000858585818110611c6857611c68613449565b9050602002016020810190611c7d9190612dda565b6001600160a01b0316815260208101919091526040016000205580611ca1816133d8565b915050611bc8565b611cb33383612349565b611ccf5760405162461bcd60e51b8152600401610aaa90613287565b611cdb8484848461263d565b50505050565b6000818152600260205260409020546060906001600160a01b0316611d605760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610aaa565b6000611d6a612670565b90506000815111611d8a5760405180602001604052806000815250611db5565b80611d948461267f565b604051602001611da59291906130c5565b6040516020818303038152906040525b9392505050565b600a546001600160a01b03163314611de65760405162461bcd60e51b8152600401610aaa90613252565b611dee6113ce565b811115611e0d5760405162461bcd60e51b8152600401610aaa9061321b565b60005b81811015610be05760108054906000611e28836133d8565b9190505550611e398360105461232f565b80611e43816133d8565b915050611e10565b600a546001600160a01b03163314611e755760405162461bcd60e51b8152600401610aaa90613252565b6017805460ff19168215801591909117909155611eec576017805461ff00191690556040517f155e05ce97ed9856266a30fd49483a8c09210ef32e8fc0803e5b7b6284479ee590600090a16040517fc14896c7ad11b5bde06d750f2d557e80c373b9316344a59eb837cbad9bd41fbb90600090a150565b6040517f677263a54647cf15fa59b77113e6cc8b9e9a75e72e3e08a975174dfc4b4d096990600090a150565b6000601254600d54600e54600f54611f30919061330f565b610c88919061330f565b600a546001600160a01b03163314611f645760405162461bcd60e51b8152600401610aaa90613252565b60005b83811015611fdf57828282818110611f8157611f81613449565b90506020020135601c6000878785818110611f9e57611f9e613449565b9050602002016020810190611fb39190612dda565b6001600160a01b0316815260208101919091526040016000205580611fd7816133d8565b915050611f67565b5050505050565b6060601880546109b29061339d565b600a546001600160a01b0316331461201f5760405162461bcd60e51b8152600401610aaa90613252565b60175460ff16156120865760405162461bcd60e51b815260206004820152602b60248201527f43616e2774206861766520612070726573616c6520647572696e67207468652060448201526a7075626c69632073616c6560a81b6064820152608401610aaa565b60178054821580156101000261ff0019909216919091179091556120d0576040517ffa77bc7c59e4d3e1e0ce1943cd4019f061b20628d8d0675d647d5dcf5b033db890600090a150565b6040517fc14896c7ad11b5bde06d750f2d557e80c373b9316344a59eb837cbad9bd41fbb90600090a150565b600a546001600160a01b031633146121265760405162461bcd60e51b8152600401610aaa90613252565b601955565b600a546001600160a01b031633146121555760405162461bcd60e51b8152600401610aaa90613252565b6001600160a01b0381166121ba5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610aaa565b610f5d816125eb565b600a546001600160a01b031633146121ed5760405162461bcd60e51b8152600401610aaa90613252565b6017546301000000900460ff16156122475760405162461bcd60e51b815260206004820152601f60248201527f50726f76656e616e636520686173206265656e2073657420616c7265616479006044820152606401610aaa565b805161225a90601a906020840190612c53565b50506017805463ff00000019166301000000179055565b60006001600160e01b031982166380ac58cd60e01b14806122a257506001600160e01b03198216635b5e139f60e01b145b8061099d57506301ffc9a760e01b6001600160e01b031983161461099d565b600081815260046020526040902080546001600160a01b0319166001600160a01b03841690811790915581906122f6826113f8565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6113ca82826040518060200160405280600081525061277d565b6000818152600260205260408120546001600160a01b03166123c25760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610aaa565b60006123cd836113f8565b9050806001600160a01b0316846001600160a01b031614806124085750836001600160a01b03166123fd84610a35565b6001600160a01b0316145b8061243857506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b0316612453826113f8565b6001600160a01b0316146124bb5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401610aaa565b6001600160a01b03821661251d5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610aaa565b6125288383836127b0565b6125336000826122c1565b6001600160a01b038316600090815260036020526040812080546001929061255c90849061335a565b90915550506001600160a01b038216600090815260036020526040812080546001929061258a90849061330f565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b612648848484612440565b61265484848484612868565b611cdb5760405162461bcd60e51b8152600401610aaa90613188565b6060601380546109b29061339d565b6060816126a35750506040805180820190915260018152600360fc1b602082015290565b8160005b81156126cd57806126b7816133d8565b91506126c69050600a83613327565b91506126a7565b60008167ffffffffffffffff8111156126e8576126e861345f565b6040519080825280601f01601f191660200182016040528015612712576020820181803683370190505b5090505b84156124385761272760018361335a565b9150612734600a866133f3565b61273f90603061330f565b60f81b81838151811061275457612754613449565b60200101906001600160f81b031916908160001a905350612776600a86613327565b9450612716565b6127878383612975565b6127946000848484612868565b610be05760405162461bcd60e51b8152600401610aaa90613188565b6001600160a01b03831661280b5761280681600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b61282e565b816001600160a01b0316836001600160a01b03161461282e5761282e8382612ac3565b6001600160a01b03821661284557610be081612b60565b826001600160a01b0316826001600160a01b031614610be057610be08282612c0f565b60006001600160a01b0384163b1561296a57604051630a85bd0160e11b81526001600160a01b0385169063150b7a02906128ac9033908990889088906004016130f4565b602060405180830381600087803b1580156128c657600080fd5b505af19250505080156128f6575060408051601f3d908101601f191682019092526128f39181019061301a565b60015b612950573d808015612924576040519150601f19603f3d011682016040523d82523d6000602084013e612929565b606091505b5080516129485760405162461bcd60e51b8152600401610aaa90613188565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050612438565b506001949350505050565b6001600160a01b0382166129cb5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610aaa565b6000818152600260205260409020546001600160a01b031615612a305760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610aaa565b612a3c600083836127b0565b6001600160a01b0382166000908152600360205260408120805460019290612a6590849061330f565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60006001612ad0846114b3565b612ada919061335a565b600083815260076020526040902054909150808214612b2d576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b600854600090612b729060019061335a565b60008381526009602052604081205460088054939450909284908110612b9a57612b9a613449565b906000526020600020015490508060088381548110612bbb57612bbb613449565b6000918252602080832090910192909255828152600990915260408082208490558582528120556008805480612bf357612bf3613433565b6001900381819060005260206000200160009055905550505050565b6000612c1a836114b3565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b828054612c5f9061339d565b90600052602060002090601f016020900481019282612c815760008555612cc7565b82601f10612c9a57805160ff1916838001178555612cc7565b82800160010185558215612cc7579182015b82811115612cc7578251825591602001919060010190612cac565b50612cd3929150612cd7565b5090565b5b80821115612cd35760008155600101612cd8565b600067ffffffffffffffff80841115612d0757612d0761345f565b604051601f8501601f19908116603f01168101908282118183101715612d2f57612d2f61345f565b81604052809350858152868686011115612d4857600080fd5b858560208301376000602087830101525050509392505050565b80356001600160a01b0381168114612d7957600080fd5b919050565b60008083601f840112612d9057600080fd5b50813567ffffffffffffffff811115612da857600080fd5b6020830191508360208260051b8501011115612dc357600080fd5b9250929050565b80358015158114612d7957600080fd5b600060208284031215612dec57600080fd5b611db582612d62565b60008060408385031215612e0857600080fd5b612e1183612d62565b9150612e1f60208401612d62565b90509250929050565b600080600060608486031215612e3d57600080fd5b612e4684612d62565b9250612e5460208501612d62565b9150604084013590509250925092565b60008060008060808587031215612e7a57600080fd5b612e8385612d62565b9350612e9160208601612d62565b925060408501359150606085013567ffffffffffffffff811115612eb457600080fd5b8501601f81018713612ec557600080fd5b612ed487823560208401612cec565b91505092959194509250565b60008060408385031215612ef357600080fd5b612efc83612d62565b9150612e1f60208401612dca565b60008060408385031215612f1d57600080fd5b612f2683612d62565b946020939093013593505050565b60008060208385031215612f4757600080fd5b823567ffffffffffffffff811115612f5e57600080fd5b612f6a85828601612d7e565b90969095509350505050565b60008060008060408587031215612f8c57600080fd5b843567ffffffffffffffff80821115612fa457600080fd5b612fb088838901612d7e565b90965094506020870135915080821115612fc957600080fd5b50612fd687828801612d7e565b95989497509550505050565b600060208284031215612ff457600080fd5b611db582612dca565b60006020828403121561300f57600080fd5b8135611db581613475565b60006020828403121561302c57600080fd5b8151611db581613475565b60006020828403121561304957600080fd5b813567ffffffffffffffff81111561306057600080fd5b8201601f8101841361307157600080fd5b61243884823560208401612cec565b60006020828403121561309257600080fd5b5035919050565b600081518084526130b1816020860160208601613371565b601f01601f19169290920160200192915050565b600083516130d7818460208801613371565b8351908301906130eb818360208801613371565b01949350505050565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061312790830184613099565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b818110156131695783518352928401929184019160010161314d565b50909695505050505050565b602081526000611db56020830184613099565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60208082526021908201527f43616e6e6f742063616c6c20746869732066726f6d206120636f6e74726163746040820152600160fd1b606082015260800190565b60208082526017908201527f4578636565647320726573657276656420737570706c79000000000000000000604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b6000821982111561332257613322613407565b500190565b6000826133365761333661341d565b500490565b600081600019048311821515161561335557613355613407565b500290565b60008282101561336c5761336c613407565b500390565b60005b8381101561338c578181015183820152602001613374565b83811115611cdb5750506000910152565b600181811c908216806133b157607f821691505b602082108114156133d257634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156133ec576133ec613407565b5060010190565b6000826134025761340261341d565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b031981168114610f5d57600080fdfea2646970667358221220e10c6b4f9a84b570bc05c82772888af5db173361156910eadd4d6478a7be86d964736f6c63430008070033687474703a2f2f6170692e736b766c6c70766e6b7a2e696f2f636f6e7472616374
Deployed Bytecode
0x60806040526004361061031a5760003560e01c8063715018a6116101ab578063bec32851116100f7578063e360337011610095578063edc2fcfb1161006f578063edc2fcfb146108f8578063f1d5f51714610918578063f2fde38b14610938578063ffe630b51461095857600080fd5b8063e36033701461087a578063e8a3d4851461089a578063e985e9c5146108af57600080fd5b8063caab9182116100d1578063caab918214610811578063d5abeb0114610831578063da0239a614610846578063e2a71ef81461085b57600080fd5b8063bec32851146107bc578063c87b56dd146107d1578063ca800144146107f157600080fd5b806391b7f5ed1161016457806398d5fdca1161013e57806398d5fdca14610747578063a22cb4651461075c578063b179e0601461077c578063b88d4fde1461079c57600080fd5b806391b7f5ed146106f2578063938e3d7b1461071257806395d89b411461073257600080fd5b8063715018a6146106645780637204a3c914610679578063853828b61461069957806385d359d1146106a15780638c74ddda146106b45780638da5cb5b146106d457600080fd5b806334026e391161026a578063568fb73c116102235780636352211e116101fd5780636352211e146105ea5780636956ba191461060a5780636ab195091461062457806370a082311461064457600080fd5b8063568fb73c1461058a5780635bf677311461059f57806360954ac1146105b457600080fd5b806334026e39146104d5578063403fe4c8146104f557806342842e0e146104fd578063438b63001461051d5780634f6ccce71461054a57806355f804b31461056a57600080fd5b80631d2578ba116102d757806323b872dd116102b157806323b872dd146104625780632e1a7d4d146104825780632f745c5914610495578063300b23d8146104b557600080fd5b80631d2578ba146104045780631db958ca1461043a5780631e73ff4f1461044f57600080fd5b806301ffc9a71461031f57806306fdde0314610354578063081812fc14610376578063095ea7b3146103ae5780630f7309e8146103d057806318160ddd146103e5575b600080fd5b34801561032b57600080fd5b5061033f61033a366004612ffd565b610978565b60405190151581526020015b60405180910390f35b34801561036057600080fd5b506103696109a3565b60405161034b9190613175565b34801561038257600080fd5b50610396610391366004613080565b610a35565b6040516001600160a01b03909116815260200161034b565b3480156103ba57600080fd5b506103ce6103c9366004612f0a565b610acf565b005b3480156103dc57600080fd5b50610369610be5565b3480156103f157600080fd5b506008545b60405190815260200161034b565b34801561041057600080fd5b506103f661041f366004612dda565b6001600160a01b03166000908152601c602052604090205490565b34801561044657600080fd5b506103f6610c73565b6103ce61045d366004613080565b610c97565b34801561046e57600080fd5b506103ce61047d366004612e28565b610edd565b6103ce610490366004613080565b610f0e565b3480156104a157600080fd5b506103f66104b0366004612f0a565b610f60565b3480156104c157600080fd5b506103ce6104d0366004613080565b610ff6565b3480156104e157600080fd5b506103ce6104f0366004612fe2565b611025565b6103ce6110c7565b34801561050957600080fd5b506103ce610518366004612e28565b61123d565b34801561052957600080fd5b5061053d610538366004612dda565b611258565b60405161034b9190613131565b34801561055657600080fd5b506103f6610565366004613080565b6112fa565b34801561057657600080fd5b506103ce610585366004613037565b61138d565b34801561059657600080fd5b506103f66113ce565b3480156105ab57600080fd5b506103f66113e0565b3480156105c057600080fd5b506103f66105cf366004612dda565b6001600160a01b03166000908152601b602052604090205490565b3480156105f657600080fd5b50610396610605366004613080565b6113f8565b34801561061657600080fd5b5060175461033f9060ff1681565b34801561063057600080fd5b506103ce61063f366004612dda565b61146f565b34801561065057600080fd5b506103f661065f366004612dda565b6114b3565b34801561067057600080fd5b506103ce61153a565b34801561068557600080fd5b506103ce610694366004612f34565b611570565b6103ce61167f565b6103ce6106af366004613080565b6117db565b3480156106c057600080fd5b5060175461033f9062010000900460ff1681565b3480156106e057600080fd5b50600a546001600160a01b0316610396565b3480156106fe57600080fd5b506103ce61070d366004613080565b611a5b565b34801561071e57600080fd5b506103ce61072d366004613037565b611a8a565b34801561073e57600080fd5b50610369611ac7565b34801561075357600080fd5b506016546103f6565b34801561076857600080fd5b506103ce610777366004612ee0565b611ad6565b34801561078857600080fd5b506103ce610797366004612f34565b611b9b565b3480156107a857600080fd5b506103ce6107b7366004612e64565b611ca9565b3480156107c857600080fd5b506014546103f6565b3480156107dd57600080fd5b506103696107ec366004613080565b611ce1565b3480156107fd57600080fd5b506103ce61080c366004612f0a565b611dbc565b34801561081d57600080fd5b506103ce61082c366004612fe2565b611e4b565b34801561083d57600080fd5b50600c546103f6565b34801561085257600080fd5b506103f6611f18565b34801561086757600080fd5b5060175461033f90610100900460ff1681565b34801561088657600080fd5b506103ce610895366004612f76565b611f3a565b3480156108a657600080fd5b50610369611fe6565b3480156108bb57600080fd5b5061033f6108ca366004612df5565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b34801561090457600080fd5b506103ce610913366004612fe2565b611ff5565b34801561092457600080fd5b506103ce610933366004613080565b6120fc565b34801561094457600080fd5b506103ce610953366004612dda565b61212b565b34801561096457600080fd5b506103ce610973366004613037565b6121c3565b60006001600160e01b0319821663780e9d6360e01b148061099d575061099d82612271565b92915050565b6060600080546109b29061339d565b80601f01602080910402602001604051908101604052809291908181526020018280546109de9061339d565b8015610a2b5780601f10610a0057610100808354040283529160200191610a2b565b820191906000526020600020905b815481529060010190602001808311610a0e57829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b0316610ab35760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b6000610ada826113f8565b9050806001600160a01b0316836001600160a01b03161415610b485760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610aaa565b336001600160a01b0382161480610b645750610b6481336108ca565b610bd65760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610aaa565b610be083836122c1565b505050565b601a8054610bf29061339d565b80601f0160208091040260200160405190810160405280929190818152602001828054610c1e9061339d565b8015610c6b5780601f10610c4057610100808354040283529160200191610c6b565b820191906000526020600020905b815481529060010190602001808311610c4e57829003601f168201915b505050505081565b6000601154600d54600e54610c88919061330f565b610c92919061335a565b905090565b6002600b541415610cba5760405162461bcd60e51b8152600401610aaa906132d8565b6002600b55333b63ffffffff1615610ce45760405162461bcd60e51b8152600401610aaa906131da565b333b63ffffffff1615610d095760405162461bcd60e51b8152600401610aaa906131da565b60175460ff16610d495760405162461bcd60e51b815260206004820152600b60248201526a14d85b19481c185d5cd95960aa1b6044820152606401610aaa565b601454811115610d8b5760405162461bcd60e51b815260206004820152600d60248201526c09ac2f040626040e0cae440a8b609b1b6044820152606401610aaa565b610d93611f18565b811115610ddb5760405162461bcd60e51b815260206004820152601660248201527545786365656473206d6178696d756d20737570706c7960501b6044820152606401610aaa565b60195481610de8336114b3565b610df2919061330f565b1115610e375760405162461bcd60e51b8152602060048201526014602482015273115e18d959591cc81dd85b1b195d081b1a5b5a5d60621b6044820152606401610aaa565b80601654610e45919061333b565b341015610e8b5760405162461bcd60e51b8152602060048201526014602482015273125b98dbdc9c9958dd08115d1a195c881cd95b9d60621b6044820152606401610aaa565b60005b81811015610ed457600c5460125411610ec25760128054906000610eb1836133d8565b9190505550610ec23360125461232f565b80610ecc816133d8565b915050610e8e565b50506001600b55565b610ee73382612349565b610f035760405162461bcd60e51b8152600401610aaa90613287565b610be0838383612440565b600a546001600160a01b03163314610f385760405162461bcd60e51b8152600401610aaa90613252565b604051339082156108fc029083906000818181858888f19350505050610f5d57600080fd5b50565b6000610f6b836114b3565b8210610fcd5760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b6064820152608401610aaa565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b600a546001600160a01b031633146110205760405162461bcd60e51b8152600401610aaa90613252565b601455565b600a546001600160a01b0316331461104f5760405162461bcd60e51b8152600401610aaa90613252565b6017805482158015620100000262ff0000199092169190911790915561109b576040517f347cb692cd2bd01661be6b0a3821ae56341003757b026edcc4be761b7d1674ca90600090a150565b6040517fcced91af235ba65a0f6dc0058e435cf88fc90204e88152a687a781df3334309090600090a150565b6002600b5414156110ea5760405162461bcd60e51b8152600401610aaa906132d8565b6002600b55333b63ffffffff16156111145760405162461bcd60e51b8152600401610aaa906131da565b60175462010000900460ff166111625760405162461bcd60e51b8152602060048201526013602482015272233932b29036b4b73a1034b9903737ba1037b760691b6044820152606401610aaa565b336000908152601c60205260409020546111b55760405162461bcd60e51b8152602060048201526014602482015273139bdd081bdb881d1a19481dda1a5d195b1a5cdd60621b6044820152606401610aaa565b6111bd610c73565b336000908152601c602052604090205411156111eb5760405162461bcd60e51b8152600401610aaa9061321b565b336000908152601c60205260408120805490829055905b81811015610ed4576011805490600061121a836133d8565b919050555061122b3360115461232f565b80611235816133d8565b915050611202565b610be083838360405180602001604052806000815250611ca9565b60606000611265836114b3565b905060008167ffffffffffffffff8111156112825761128261345f565b6040519080825280602002602001820160405280156112ab578160200160208202803683370190505b50905060005b828110156112f2576112c38582610f60565b8282815181106112d5576112d5613449565b6020908102919091010152806112ea816133d8565b9150506112b1565b509392505050565b600061130560085490565b82106113685760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b6064820152608401610aaa565b6008828154811061137b5761137b613449565b90600052602060002001549050919050565b600a546001600160a01b031633146113b75760405162461bcd60e51b8152600401610aaa90613252565b80516113ca906013906020840190612c53565b5050565b6000601054600d54610c92919061335a565b60006113eb60085490565b600c54610c92919061335a565b6000818152600260205260408120546001600160a01b03168061099d5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610aaa565b600a546001600160a01b031633146114995760405162461bcd60e51b8152600401610aaa90613252565b6001600160a01b03166000908152601c6020526040812055565b60006001600160a01b03821661151e5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610aaa565b506001600160a01b031660009081526003602052604090205490565b600a546001600160a01b031633146115645760405162461bcd60e51b8152600401610aaa90613252565b61156e60006125eb565b565b600a546001600160a01b0316331461159a5760405162461bcd60e51b8152600401610aaa90613252565b60005b81811015610be05760008383838181106115b9576115b9613449565b90506020020160208101906115ce9190612dda565b6001600160a01b031614156116255760405162461bcd60e51b815260206004820152601860248201527f43616e2774206164642061206e756c6c206164647265737300000000000000006044820152606401610aaa565b601554601b600085858581811061163e5761163e613449565b90506020020160208101906116539190612dda565b6001600160a01b0316815260208101919091526040016000205580611677816133d8565b91505061159d565b600a546001600160a01b031633146116a95760405162461bcd60e51b8152600401610aaa90613252565b60006116b6606447613327565b601d549091506001600160a01b03166108fc6116d383601f61333b565b6040518115909202916000818181858888f193505050506116f357600080fd5b601e546001600160a01b03166108fc61170d83601561333b565b6040518115909202916000818181858888f1935050505061172d57600080fd5b601f546001600160a01b03166108fc61174783601561333b565b6040518115909202916000818181858888f1935050505061176757600080fd5b6020546001600160a01b03166108fc61178183601561333b565b6040518115909202916000818181858888f193505050506117a157600080fd5b6021546001600160a01b03166108fc6117bb83600661333b565b6040518115909202916000818181858888f19350505050610f5d57600080fd5b6002600b5414156117fe5760405162461bcd60e51b8152600401610aaa906132d8565b6002600b55333b63ffffffff16156118285760405162461bcd60e51b8152600401610aaa906131da565b601754610100900460ff166118705760405162461bcd60e51b815260206004820152600e60248201526d141c995cd85b19481c185d5cd95960921b6044820152606401610aaa565b336000908152601b60205260409020546118c35760405162461bcd60e51b8152602060048201526014602482015273139bdd081bdb881d1a19481dda1a5d195b1a5cdd60621b6044820152606401610aaa565b6015548111156119155760405162461bcd60e51b815260206004820152601a60248201527f4578636565647320746865206d6178696d756d20616d6f756e740000000000006044820152606401610aaa565b336000908152601b60205260409020548111156119745760405162461bcd60e51b815260206004820152601c60248201527f50757263686173652065786365656473206d617820616c6c6f776564000000006044820152606401610aaa565b61197c611f18565b81111561199b5760405162461bcd60e51b8152600401610aaa9061321b565b806016546119a9919061333b565b3410156119f85760405162461bcd60e51b815260206004820152601960248201527f45746865722073656e74206973206e6f7420636f7272656374000000000000006044820152606401610aaa565b336000908152601b602052604081208054839290611a1790849061335a565b90915550600090505b81811015610ed45760128054906000611a38836133d8565b9190505550611a493360125461232f565b80611a53816133d8565b915050611a20565b600a546001600160a01b03163314611a855760405162461bcd60e51b8152600401610aaa90613252565b601655565b600a546001600160a01b03163314611ab45760405162461bcd60e51b8152600401610aaa90613252565b80516113ca906018906020840190612c53565b6060600180546109b29061339d565b6001600160a01b038216331415611b2f5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610aaa565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b600a546001600160a01b03163314611bc55760405162461bcd60e51b8152600401610aaa90613252565b60005b81811015610be0576000838383818110611be457611be4613449565b9050602002016020810190611bf99190612dda565b6001600160a01b03161415611c505760405162461bcd60e51b815260206004820152601b60248201527f43616e27742072656d6f76652061206e756c6c206164647265737300000000006044820152606401610aaa565b6000601b6000858585818110611c6857611c68613449565b9050602002016020810190611c7d9190612dda565b6001600160a01b0316815260208101919091526040016000205580611ca1816133d8565b915050611bc8565b611cb33383612349565b611ccf5760405162461bcd60e51b8152600401610aaa90613287565b611cdb8484848461263d565b50505050565b6000818152600260205260409020546060906001600160a01b0316611d605760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610aaa565b6000611d6a612670565b90506000815111611d8a5760405180602001604052806000815250611db5565b80611d948461267f565b604051602001611da59291906130c5565b6040516020818303038152906040525b9392505050565b600a546001600160a01b03163314611de65760405162461bcd60e51b8152600401610aaa90613252565b611dee6113ce565b811115611e0d5760405162461bcd60e51b8152600401610aaa9061321b565b60005b81811015610be05760108054906000611e28836133d8565b9190505550611e398360105461232f565b80611e43816133d8565b915050611e10565b600a546001600160a01b03163314611e755760405162461bcd60e51b8152600401610aaa90613252565b6017805460ff19168215801591909117909155611eec576017805461ff00191690556040517f155e05ce97ed9856266a30fd49483a8c09210ef32e8fc0803e5b7b6284479ee590600090a16040517fc14896c7ad11b5bde06d750f2d557e80c373b9316344a59eb837cbad9bd41fbb90600090a150565b6040517f677263a54647cf15fa59b77113e6cc8b9e9a75e72e3e08a975174dfc4b4d096990600090a150565b6000601254600d54600e54600f54611f30919061330f565b610c88919061330f565b600a546001600160a01b03163314611f645760405162461bcd60e51b8152600401610aaa90613252565b60005b83811015611fdf57828282818110611f8157611f81613449565b90506020020135601c6000878785818110611f9e57611f9e613449565b9050602002016020810190611fb39190612dda565b6001600160a01b0316815260208101919091526040016000205580611fd7816133d8565b915050611f67565b5050505050565b6060601880546109b29061339d565b600a546001600160a01b0316331461201f5760405162461bcd60e51b8152600401610aaa90613252565b60175460ff16156120865760405162461bcd60e51b815260206004820152602b60248201527f43616e2774206861766520612070726573616c6520647572696e67207468652060448201526a7075626c69632073616c6560a81b6064820152608401610aaa565b60178054821580156101000261ff0019909216919091179091556120d0576040517ffa77bc7c59e4d3e1e0ce1943cd4019f061b20628d8d0675d647d5dcf5b033db890600090a150565b6040517fc14896c7ad11b5bde06d750f2d557e80c373b9316344a59eb837cbad9bd41fbb90600090a150565b600a546001600160a01b031633146121265760405162461bcd60e51b8152600401610aaa90613252565b601955565b600a546001600160a01b031633146121555760405162461bcd60e51b8152600401610aaa90613252565b6001600160a01b0381166121ba5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610aaa565b610f5d816125eb565b600a546001600160a01b031633146121ed5760405162461bcd60e51b8152600401610aaa90613252565b6017546301000000900460ff16156122475760405162461bcd60e51b815260206004820152601f60248201527f50726f76656e616e636520686173206265656e2073657420616c7265616479006044820152606401610aaa565b805161225a90601a906020840190612c53565b50506017805463ff00000019166301000000179055565b60006001600160e01b031982166380ac58cd60e01b14806122a257506001600160e01b03198216635b5e139f60e01b145b8061099d57506301ffc9a760e01b6001600160e01b031983161461099d565b600081815260046020526040902080546001600160a01b0319166001600160a01b03841690811790915581906122f6826113f8565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6113ca82826040518060200160405280600081525061277d565b6000818152600260205260408120546001600160a01b03166123c25760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610aaa565b60006123cd836113f8565b9050806001600160a01b0316846001600160a01b031614806124085750836001600160a01b03166123fd84610a35565b6001600160a01b0316145b8061243857506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b0316612453826113f8565b6001600160a01b0316146124bb5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401610aaa565b6001600160a01b03821661251d5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610aaa565b6125288383836127b0565b6125336000826122c1565b6001600160a01b038316600090815260036020526040812080546001929061255c90849061335a565b90915550506001600160a01b038216600090815260036020526040812080546001929061258a90849061330f565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b612648848484612440565b61265484848484612868565b611cdb5760405162461bcd60e51b8152600401610aaa90613188565b6060601380546109b29061339d565b6060816126a35750506040805180820190915260018152600360fc1b602082015290565b8160005b81156126cd57806126b7816133d8565b91506126c69050600a83613327565b91506126a7565b60008167ffffffffffffffff8111156126e8576126e861345f565b6040519080825280601f01601f191660200182016040528015612712576020820181803683370190505b5090505b84156124385761272760018361335a565b9150612734600a866133f3565b61273f90603061330f565b60f81b81838151811061275457612754613449565b60200101906001600160f81b031916908160001a905350612776600a86613327565b9450612716565b6127878383612975565b6127946000848484612868565b610be05760405162461bcd60e51b8152600401610aaa90613188565b6001600160a01b03831661280b5761280681600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b61282e565b816001600160a01b0316836001600160a01b03161461282e5761282e8382612ac3565b6001600160a01b03821661284557610be081612b60565b826001600160a01b0316826001600160a01b031614610be057610be08282612c0f565b60006001600160a01b0384163b1561296a57604051630a85bd0160e11b81526001600160a01b0385169063150b7a02906128ac9033908990889088906004016130f4565b602060405180830381600087803b1580156128c657600080fd5b505af19250505080156128f6575060408051601f3d908101601f191682019092526128f39181019061301a565b60015b612950573d808015612924576040519150601f19603f3d011682016040523d82523d6000602084013e612929565b606091505b5080516129485760405162461bcd60e51b8152600401610aaa90613188565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050612438565b506001949350505050565b6001600160a01b0382166129cb5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610aaa565b6000818152600260205260409020546001600160a01b031615612a305760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610aaa565b612a3c600083836127b0565b6001600160a01b0382166000908152600360205260408120805460019290612a6590849061330f565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60006001612ad0846114b3565b612ada919061335a565b600083815260076020526040902054909150808214612b2d576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b600854600090612b729060019061335a565b60008381526009602052604081205460088054939450909284908110612b9a57612b9a613449565b906000526020600020015490508060088381548110612bbb57612bbb613449565b6000918252602080832090910192909255828152600990915260408082208490558582528120556008805480612bf357612bf3613433565b6001900381819060005260206000200160009055905550505050565b6000612c1a836114b3565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b828054612c5f9061339d565b90600052602060002090601f016020900481019282612c815760008555612cc7565b82601f10612c9a57805160ff1916838001178555612cc7565b82800160010185558215612cc7579182015b82811115612cc7578251825591602001919060010190612cac565b50612cd3929150612cd7565b5090565b5b80821115612cd35760008155600101612cd8565b600067ffffffffffffffff80841115612d0757612d0761345f565b604051601f8501601f19908116603f01168101908282118183101715612d2f57612d2f61345f565b81604052809350858152868686011115612d4857600080fd5b858560208301376000602087830101525050509392505050565b80356001600160a01b0381168114612d7957600080fd5b919050565b60008083601f840112612d9057600080fd5b50813567ffffffffffffffff811115612da857600080fd5b6020830191508360208260051b8501011115612dc357600080fd5b9250929050565b80358015158114612d7957600080fd5b600060208284031215612dec57600080fd5b611db582612d62565b60008060408385031215612e0857600080fd5b612e1183612d62565b9150612e1f60208401612d62565b90509250929050565b600080600060608486031215612e3d57600080fd5b612e4684612d62565b9250612e5460208501612d62565b9150604084013590509250925092565b60008060008060808587031215612e7a57600080fd5b612e8385612d62565b9350612e9160208601612d62565b925060408501359150606085013567ffffffffffffffff811115612eb457600080fd5b8501601f81018713612ec557600080fd5b612ed487823560208401612cec565b91505092959194509250565b60008060408385031215612ef357600080fd5b612efc83612d62565b9150612e1f60208401612dca565b60008060408385031215612f1d57600080fd5b612f2683612d62565b946020939093013593505050565b60008060208385031215612f4757600080fd5b823567ffffffffffffffff811115612f5e57600080fd5b612f6a85828601612d7e565b90969095509350505050565b60008060008060408587031215612f8c57600080fd5b843567ffffffffffffffff80821115612fa457600080fd5b612fb088838901612d7e565b90965094506020870135915080821115612fc957600080fd5b50612fd687828801612d7e565b95989497509550505050565b600060208284031215612ff457600080fd5b611db582612dca565b60006020828403121561300f57600080fd5b8135611db581613475565b60006020828403121561302c57600080fd5b8151611db581613475565b60006020828403121561304957600080fd5b813567ffffffffffffffff81111561306057600080fd5b8201601f8101841361307157600080fd5b61243884823560208401612cec565b60006020828403121561309257600080fd5b5035919050565b600081518084526130b1816020860160208601613371565b601f01601f19169290920160200192915050565b600083516130d7818460208801613371565b8351908301906130eb818360208801613371565b01949350505050565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061312790830184613099565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b818110156131695783518352928401929184019160010161314d565b50909695505050505050565b602081526000611db56020830184613099565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60208082526021908201527f43616e6e6f742063616c6c20746869732066726f6d206120636f6e74726163746040820152600160fd1b606082015260800190565b60208082526017908201527f4578636565647320726573657276656420737570706c79000000000000000000604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b6000821982111561332257613322613407565b500190565b6000826133365761333661341d565b500490565b600081600019048311821515161561335557613355613407565b500290565b60008282101561336c5761336c613407565b500390565b60005b8381101561338c578181015183820152602001613374565b83811115611cdb5750506000910152565b600181811c908216806133b157607f821691505b602082108114156133d257634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156133ec576133ec613407565b5060010190565b6000826134025761340261341d565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b031981168114610f5d57600080fdfea2646970667358221220e10c6b4f9a84b570bc05c82772888af5db173361156910eadd4d6478a7be86d964736f6c63430008070033
Deployed Bytecode Sourcemap
45905:10959:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28550:224;;;;;;;;;;-1:-1:-1;28550:224:0;;;;;:::i;:::-;;:::i;:::-;;;8132:14:1;;8125:22;8107:41;;8095:2;8080:18;28550:224:0;;;;;;;;15443:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;17002:221::-;;;;;;;;;;-1:-1:-1;17002:221:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;6793:32:1;;;6775:51;;6763:2;6748:18;17002:221:0;6629:203:1;16525:411:0;;;;;;;;;;-1:-1:-1;16525:411:0;;;;;:::i;:::-;;:::i;:::-;;47965:29;;;;;;;;;;;;;:::i;29190:113::-;;;;;;;;;;-1:-1:-1;29278:10:0;:17;29190:113;;;22168:25:1;;;22156:2;22141:18;29190:113:0;22022:177:1;53122:107:0;;;;;;;;;;-1:-1:-1;53122:107:0;;;;;:::i;:::-;-1:-1:-1;;;;;53206:15:0;53179:7;53206:15;;;:9;:15;;;;;;;53122:107;55526:144;;;;;;;;;;;;;:::i;49899:692::-;;;;;;:::i;:::-;;:::i;17892:339::-;;;;;;;;;;-1:-1:-1;17892:339:0;;;;;:::i;:::-;;:::i;55778:121::-;;;;;;:::i;:::-;;:::i;28858:256::-;;;;;;;;;;-1:-1:-1;28858:256:0;;;;;:::i;:::-;;:::i;54793:97::-;;;;;;;;;;-1:-1:-1;54793:97:0;;;;;:::i;:::-;;:::i;53910:224::-;;;;;;;;;;-1:-1:-1;53910:224:0;;;;;:::i;:::-;;:::i;51131:542::-;;;:::i;18302:185::-;;;;;;;;;;-1:-1:-1;18302:185:0;;;;;:::i;:::-;;:::i;53237:342::-;;;;;;;;;;-1:-1:-1;53237:342:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;29380:233::-;;;;;;;;;;-1:-1:-1;29380:233:0;;;;;:::i;:::-;;:::i;54677:104::-;;;;;;;;;;-1:-1:-1;54677:104:0;;;;;:::i;:::-;;:::i;55389:125::-;;;;;;;;;;;;;:::i;55099:115::-;;;;;;;;;;;;;:::i;52997:113::-;;;;;;;;;;-1:-1:-1;52997:113:0;;;;;:::i;:::-;-1:-1:-1;;;;;53084:18:0;53057:7;53084:18;;;:12;:18;;;;;;;52997:113;15137:239;;;;;;;;;;-1:-1:-1;15137:239:0;;;;;:::i;:::-;;:::i;47600:31::-;;;;;;;;;;-1:-1:-1;47600:31:0;;;;;;;;51911:107;;;;;;;;;;-1:-1:-1;51911:107:0;;;;;:::i;:::-;;:::i;14867:208::-;;;;;;;;;;-1:-1:-1;14867:208:0;;;;;:::i;:::-;;:::i;5182:94::-;;;;;;;;;;;;;:::i;52357:285::-;;;;;;;;;;-1:-1:-1;52357:285:0;;;;;:::i;:::-;;:::i;55907:397::-;;;:::i;48968:702::-;;;;;;:::i;:::-;;:::i;47749:30::-;;;;;;;;;;-1:-1:-1;47749:30:0;;;;;;;;;;;4531:87;;;;;;;;;;-1:-1:-1;4604:6:0;;-1:-1:-1;;;;;4604:6:0;4531:87;;54452:95;;;;;;;;;;-1:-1:-1;54452:95:0;;;;;:::i;:::-;;:::i;56425:99::-;;;;;;;;;;-1:-1:-1;56425:99:0;;;;;:::i;:::-;;:::i;15612:104::-;;;;;;;;;;;;;:::i;55004:83::-;;;;;;;;;;-1:-1:-1;55073:6:0;;55004:83;;17295:295;;;;;;;;;;-1:-1:-1;17295:295:0;;;;;:::i;:::-;;:::i;52706:279::-;;;;;;;;;;-1:-1:-1;52706:279:0;;;;;:::i;:::-;;:::i;18558:328::-;;;;;;;;;;-1:-1:-1;18558:328:0;;;;;:::i;:::-;;:::i;54902:90::-;;;;;;;;;;-1:-1:-1;54975:9:0;;54902:90;;15787:334;;;;;;;;;;-1:-1:-1;15787:334:0;;;;;:::i;:::-;;:::i;50824:295::-;;;;;;;;;;-1:-1:-1;50824:295:0;;;;;:::i;:::-;;:::i;53591:307::-;;;;;;;;;;-1:-1:-1;53591:307:0;;;;;:::i;:::-;;:::i;55682:88::-;;;;;;;;;;-1:-1:-1;55752:10:0;;55682:88;;55226:151;;;;;;;;;;;;;:::i;47676:28::-;;;;;;;;;;-1:-1:-1;47676:28:0;;;;;;;;;;;52077:221;;;;;;;;;;-1:-1:-1;52077:221:0;;;;;:::i;:::-;;:::i;56536:99::-;;;;;;;;;;;;;:::i;17661:164::-;;;;;;;;;;-1:-1:-1;17661:164:0;;;;;:::i;:::-;-1:-1:-1;;;;;17782:25:0;;;17758:4;17782:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;17661:164;54146:298;;;;;;;;;;-1:-1:-1;54146:298:0;;;;;:::i;:::-;;:::i;56316:97::-;;;;;;;;;;-1:-1:-1;56316:97:0;;;;;:::i;:::-;;:::i;5431:192::-;;;;;;;;;;-1:-1:-1;5431:192:0;;;;;:::i;:::-;;:::i;56647:214::-;;;;;;;;;;-1:-1:-1;56647:214:0;;;;;:::i;:::-;;:::i;28550:224::-;28652:4;-1:-1:-1;;;;;;28676:50:0;;-1:-1:-1;;;28676:50:0;;:90;;;28730:36;28754:11;28730:23;:36::i;:::-;28669:97;28550:224;-1:-1:-1;;28550:224:0:o;15443:100::-;15497:13;15530:5;15523:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15443:100;:::o;17002:221::-;17078:7;20485:16;;;:7;:16;;;;;;-1:-1:-1;;;;;20485:16:0;17098:73;;;;-1:-1:-1;;;17098:73:0;;17261:2:1;17098:73:0;;;17243:21:1;17300:2;17280:18;;;17273:30;17339:34;17319:18;;;17312:62;-1:-1:-1;;;17390:18:1;;;17383:42;17442:19;;17098:73:0;;;;;;;;;-1:-1:-1;17191:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;17191:24:0;;17002:221::o;16525:411::-;16606:13;16622:23;16637:7;16622:14;:23::i;:::-;16606:39;;16670:5;-1:-1:-1;;;;;16664:11:0;:2;-1:-1:-1;;;;;16664:11:0;;;16656:57;;;;-1:-1:-1;;;16656:57:0;;19569:2:1;16656:57:0;;;19551:21:1;19608:2;19588:18;;;19581:30;19647:34;19627:18;;;19620:62;-1:-1:-1;;;19698:18:1;;;19691:31;19739:19;;16656:57:0;19367:397:1;16656:57:0;3397:10;-1:-1:-1;;;;;16748:21:0;;;;:62;;-1:-1:-1;16773:37:0;16790:5;3397:10;17661:164;:::i;16773:37::-;16726:168;;;;-1:-1:-1;;;16726:168:0;;13895:2:1;16726:168:0;;;13877:21:1;13934:2;13914:18;;;13907:30;13973:34;13953:18;;;13946:62;14044:26;14024:18;;;14017:54;14088:19;;16726:168:0;13693:420:1;16726:168:0;16907:21;16916:2;16920:7;16907:8;:21::i;:::-;16595:341;16525:411;;:::o;47965:29::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;55526:144::-;55579:7;55648:14;;55625:20;;55605:17;;:40;;;;:::i;:::-;:57;;;;:::i;:::-;55598:64;;55526:144;:::o;49899:692::-;1747:1;2343:7;;:19;;2335:63;;;;-1:-1:-1;;;2335:63:0;;;;;;;:::i;:::-;1747:1;2476:7;:18;48616:10:::1;51795:18:::0;51830:9;;;48593:74:::1;;;;-1:-1:-1::0;;;48593:74:0::1;;;;;;;:::i;:::-;50005:10:::2;51795:18:::0;51830:9;;;49982:74:::2;;;;-1:-1:-1::0;;;49982:74:0::2;;;;;;;:::i;:::-;50076:11;::::0;::::2;;50067:37;;;::::0;-1:-1:-1;;;50067:37:0;;8585:2:1;50067:37:0::2;::::0;::::2;8567:21:1::0;8624:2;8604:18;;;8597:30;-1:-1:-1;;;8643:18:1;;;8636:41;8694:18;;50067:37:0::2;8383:335:1::0;50067:37:0::2;50131:9;;50124:3;:16;;50115:44;;;::::0;-1:-1:-1;;;50115:44:0;;15490:2:1;50115:44:0::2;::::0;::::2;15472:21:1::0;15529:2;15509:18;;;15502:30;-1:-1:-1;;;15548:18:1;;;15541:43;15601:18;;50115:44:0::2;15288:337:1::0;50115:44:0::2;50186:17;:15;:17::i;:::-;50179:3;:24;;50170:61;;;::::0;-1:-1:-1;;;50170:61:0;;19971:2:1;50170:61:0::2;::::0;::::2;19953:21:1::0;20010:2;19990:18;;;19983:30;-1:-1:-1;;;20029:18:1;;;20022:52;20091:18;;50170:61:0::2;19769:346:1::0;50170:61:0::2;50282:12;;50275:3;50251:21;50261:10;50251:9;:21::i;:::-;:27;;;;:::i;:::-;:43;;50242:77;;;::::0;-1:-1:-1;;;50242:77:0;;15141:2:1;50242:77:0::2;::::0;::::2;15123:21:1::0;15180:2;15160:18;;;15153:30;-1:-1:-1;;;15199:18:1;;;15192:50;15259:18;;50242:77:0::2;14939:344:1::0;50242:77:0::2;50361:3;50352:6;;:12;;;;:::i;:::-;50339:9;:25;;50330:60;;;::::0;-1:-1:-1;;;50330:60:0;;10168:2:1;50330:60:0::2;::::0;::::2;10150:21:1::0;10207:2;10187:18;;;10180:30;-1:-1:-1;;;10226:18:1;;;10219:50;10286:18;;50330:60:0::2;9966:344:1::0;50330:60:0::2;50406:9;50401:183;50421:3;50417:1;:7;50401:183;;;50462:10;;50450:8;;:22;50446:127;;50493:8;:11:::0;;;:8:::2;:11;::::0;::::2;:::i;:::-;;;;;;50523:34;50534:10;50547:8;;50523:9;:34::i;:::-;50426:3:::0;::::2;::::0;::::2;:::i;:::-;;;;50401:183;;;-1:-1:-1::0;;1703:1:0;2655:7;:22;49899:692::o;17892:339::-;18087:41;3397:10;18120:7;18087:18;:41::i;:::-;18079:103;;;;-1:-1:-1;;;18079:103:0;;;;;;;:::i;:::-;18195:28;18205:4;18211:2;18215:7;18195:9;:28::i;55778:121::-;4604:6;;-1:-1:-1;;;;;4604:6:0;3397:10;4751:23;4743:68;;;;-1:-1:-1;;;4743:68:0;;;;;;;:::i;:::-;55858:32:::1;::::0;55866:10:::1;::::0;55858:32;::::1;;;::::0;55883:6;;55858:32:::1;::::0;;;55883:6;55866:10;55858:32;::::1;;;;;;55850:41;;;::::0;::::1;;55778:121:::0;:::o;28858:256::-;28955:7;28991:23;29008:5;28991:16;:23::i;:::-;28983:5;:31;28975:87;;;;-1:-1:-1;;;28975:87:0;;8925:2:1;28975:87:0;;;8907:21:1;8964:2;8944:18;;;8937:30;9003:34;8983:18;;;8976:62;-1:-1:-1;;;9054:18:1;;;9047:41;9105:19;;28975:87:0;8723:407:1;28975:87:0;-1:-1:-1;;;;;;29080:19:0;;;;;;;;:12;:19;;;;;;;;:26;;;;;;;;;28858:256::o;54793:97::-;4604:6;;-1:-1:-1;;;;;4604:6:0;3397:10;4751:23;4743:68;;;;-1:-1:-1;;;4743:68:0;;;;;;;:::i;:::-;54862:9:::1;:20:::0;54793:97::o;53910:224::-;4604:6;;-1:-1:-1;;;;;4604:6:0;3397:10;4751:23;4743:68;;;;-1:-1:-1;;;4743:68:0;;;;;;;:::i;:::-;53968:10:::1;:16:::0;;;::::1;::::0;::::1;::::0;::::1;-1:-1:-1::0;;53968:16:0;;::::1;::::0;;;::::1;::::0;;;53995:132:::1;;54024:27;::::0;::::1;::::0;;;::::1;55778:121:::0;:::o;53995:132::-:1;54089:26;::::0;::::1;::::0;;;::::1;53910:224:::0;:::o;51131:542::-;1747:1;2343:7;;:19;;2335:63;;;;-1:-1:-1;;;2335:63:0;;;;;;;:::i;:::-;1747:1;2476:7;:18;48616:10:::1;51795:18:::0;51830:9;;;48593:74:::1;;;;-1:-1:-1::0;;;48593:74:0::1;;;;;;;:::i;:::-;51216:10:::2;::::0;;;::::2;;;51207:44;;;::::0;-1:-1:-1;;;51207:44:0;;10517:2:1;51207:44:0::2;::::0;::::2;10499:21:1::0;10556:2;10536:18;;;10529:30;-1:-1:-1;;;10575:18:1;;;10568:49;10634:18;;51207:44:0::2;10315:343:1::0;51207:44:0::2;51281:10;51295:1;51271:21:::0;;;:9:::2;:21;::::0;;;;;51262:59:::2;;;::::0;-1:-1:-1;;;51262:59:0;;11272:2:1;51262:59:0::2;::::0;::::2;11254:21:1::0;11311:2;11291:18;;;11284:30;-1:-1:-1;;;11330:18:1;;;11323:50;11390:18;;51262:59:0::2;11070:344:1::0;51262:59:0::2;51366:22;:20;:22::i;:::-;51351:10;51341:21;::::0;;;:9:::2;:21;::::0;;;;;:47:::2;;51332:85;;;;-1:-1:-1::0;;;51332:85:0::2;;;;;;;:::i;:::-;51466:10;51438:15;51456:21:::0;;;:9:::2;:21;::::0;;;;;;51488:25;;;;51456:21;51534:132:::2;51554:7;51550:1;:11;51534:132;;;51583:14;:17:::0;;;:14:::2;:17;::::0;::::2;:::i;:::-;;;;;;51615:39;51626:10;51638:14;;51615:9;:39::i;:::-;51563:3:::0;::::2;::::0;::::2;:::i;:::-;;;;51534:132;;18302:185:::0;18440:39;18457:4;18463:2;18467:7;18440:39;;;;;;;;;;;;:16;:39::i;53237:342::-;53298:16;53327:18;53348:17;53358:6;53348:9;:17::i;:::-;53327:38;;53376:25;53418:10;53404:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;53404:25:0;;53376:53;;53444:9;53440:106;53459:10;53455:1;:14;53440:106;;;53504:30;53524:6;53532:1;53504:19;:30::i;:::-;53490:8;53499:1;53490:11;;;;;;;;:::i;:::-;;;;;;;;;;:44;53471:3;;;;:::i;:::-;;;;53440:106;;;-1:-1:-1;53563:8:0;53237:342;-1:-1:-1;;;53237:342:0:o;29380:233::-;29455:7;29491:30;29278:10;:17;;29190:113;29491:30;29483:5;:38;29475:95;;;;-1:-1:-1;;;29475:95:0;;21094:2:1;29475:95:0;;;21076:21:1;21133:2;21113:18;;;21106:30;21172:34;21152:18;;;21145:62;-1:-1:-1;;;21223:18:1;;;21216:42;21275:19;;29475:95:0;20892:408:1;29475:95:0;29588:10;29599:5;29588:17;;;;;;;;:::i;:::-;;;;;;;;;29581:24;;29380:233;;;:::o;54677:104::-;4604:6;;-1:-1:-1;;;;;4604:6:0;3397:10;4751:23;4743:68;;;;-1:-1:-1;;;4743:68:0;;;;;;;:::i;:::-;54750:23;;::::1;::::0;:13:::1;::::0;:23:::1;::::0;::::1;::::0;::::1;:::i;:::-;;54677:104:::0;:::o;55389:125::-;55440:7;55489:17;;55466:20;;:40;;;;:::i;55099:115::-;55154:7;55193:13;29278:10;:17;;29190:113;55193:13;55180:10;;:26;;;;:::i;15137:239::-;15209:7;15245:16;;;:7;:16;;;;;;-1:-1:-1;;;;;15245:16:0;15280:19;15272:73;;;;-1:-1:-1;;;15272:73:0;;14731:2:1;15272:73:0;;;14713:21:1;14770:2;14750:18;;;14743:30;14809:34;14789:18;;;14782:62;-1:-1:-1;;;14860:18:1;;;14853:39;14909:19;;15272:73:0;14529:405:1;51911:107:0;4604:6;;-1:-1:-1;;;;;4604:6:0;3397:10;4751:23;4743:68;;;;-1:-1:-1;;;4743:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;51987:19:0::1;52009:1;51987:19:::0;;;:9:::1;:19;::::0;;;;:23;51911:107::o;14867:208::-;14939:7;-1:-1:-1;;;;;14967:19:0;;14959:74;;;;-1:-1:-1;;;14959:74:0;;14320:2:1;14959:74:0;;;14302:21:1;14359:2;14339:18;;;14332:30;14398:34;14378:18;;;14371:62;-1:-1:-1;;;14449:18:1;;;14442:40;14499:19;;14959:74:0;14118:406:1;14959:74:0;-1:-1:-1;;;;;;15051:16:0;;;;;:9;:16;;;;;;;14867:208::o;5182:94::-;4604:6;;-1:-1:-1;;;;;4604:6:0;3397:10;4751:23;4743:68;;;;-1:-1:-1;;;4743:68:0;;;;;;;:::i;:::-;5247:21:::1;5265:1;5247:9;:21::i;:::-;5182:94::o:0;52357:285::-;4604:6;;-1:-1:-1;;;;;4604:6:0;3397:10;4751:23;4743:68;;;;-1:-1:-1;;;4743:68:0;;;;;;;:::i;:::-;52447:9:::1;52442:193;52462:20:::0;;::::1;52442:193;;;52534:1;52510:9:::0;;52520:1;52510:12;;::::1;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;52510:26:0::1;;;52502:63;;;::::0;-1:-1:-1;;;52502:63:0;;17674:2:1;52502:63:0::1;::::0;::::1;17656:21:1::0;17713:2;17693:18;;;17686:30;17752:26;17732:18;;;17725:54;17796:18;;52502:63:0::1;17472:348:1::0;52502:63:0::1;52607:16;;52578:12;:26;52591:9;;52601:1;52591:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;52578:26:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;52578:26:0;:45;52484:3;::::1;::::0;::::1;:::i;:::-;;;;52442:193;;55907:397:::0;4604:6;;-1:-1:-1;;;;;4604:6:0;3397:10;4751:23;4743:68;;;;-1:-1:-1;;;4743:68:0;;;;;;;:::i;:::-;55968:13:::1;55984:27;56008:3;55984:21;:27;:::i;:::-;56038:2;::::0;55968:43;;-1:-1:-1;;;;;;56038:2:0::1;56030:30;56048:10;55968:43:::0;56056:2:::1;56048:10;:::i;:::-;56030:30;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;56022:39;;;::::0;::::1;;56095:2;::::0;-1:-1:-1;;;;;56095:2:0::1;56087:30;56105:10;:5:::0;56113:2:::1;56105:10;:::i;:::-;56087:30;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;56079:39;;;::::0;::::1;;56152:2;::::0;-1:-1:-1;;;;;56152:2:0::1;56144:30;56162:10;:5:::0;56170:2:::1;56162:10;:::i;:::-;56144:30;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;56136:39;;;::::0;::::1;;56209:2;::::0;-1:-1:-1;;;;;56209:2:0::1;56201:30;56219:10;:5:::0;56227:2:::1;56219:10;:::i;:::-;56201:30;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;56193:39;;;::::0;::::1;;56266:2;::::0;-1:-1:-1;;;;;56266:2:0::1;56258:29;56276:9;:5:::0;56284:1:::1;56276:9;:::i;:::-;56258:29;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;56250:38;;;::::0;::::1;48968:702:::0;1747:1;2343:7;;:19;;2335:63;;;;-1:-1:-1;;;2335:63:0;;;;;;;:::i;:::-;1747:1;2476:7;:18;48616:10:::1;51795:18:::0;51830:9;;;48593:74:::1;;;;-1:-1:-1::0;;;48593:74:0::1;;;;;;;:::i;:::-;49066:8:::2;::::0;::::2;::::0;::::2;;;49057:37;;;::::0;-1:-1:-1;;;49057:37:0;;11978:2:1;49057:37:0::2;::::0;::::2;11960:21:1::0;12017:2;11997:18;;;11990:30;-1:-1:-1;;;12036:18:1;;;12029:44;12090:18;;49057:37:0::2;11776:338:1::0;49057:37:0::2;49127:10;49141:1;49114:24:::0;;;:12:::2;:24;::::0;;;;;49105:62:::2;;;::::0;-1:-1:-1;;;49105:62:0;;11272:2:1;49105:62:0::2;::::0;::::2;11254:21:1::0;11311:2;11291:18;;;11284:30;-1:-1:-1;;;11330:18:1;;;11323:50;11390:18;;49105:62:0::2;11070:344:1::0;49105:62:0::2;49194:16;;49187:3;:23;;49178:64;;;::::0;-1:-1:-1;;;49178:64:0;;19214:2:1;49178:64:0::2;::::0;::::2;19196:21:1::0;19253:2;19233:18;;;19226:30;19292:28;19272:18;;;19265:56;19338:18;;49178:64:0::2;19012:350:1::0;49178:64:0::2;49275:10;49262:24;::::0;;;:12:::2;:24;::::0;;;;;:31;-1:-1:-1;49262:31:0::2;49253:73;;;::::0;-1:-1:-1;;;49253:73:0;;21507:2:1;49253:73:0::2;::::0;::::2;21489:21:1::0;21546:2;21526:18;;;21519:30;21585;21565:18;;;21558:58;21633:18;;49253:73:0::2;21305:352:1::0;49253:73:0::2;49353:17;:15;:17::i;:::-;49346:3;:24;;49337:62;;;;-1:-1:-1::0;;;49337:62:0::2;;;;;;;:::i;:::-;49441:3;49432:6;;:12;;;;:::i;:::-;49419:9;:25;;49410:65;;;::::0;-1:-1:-1;;;49410:65:0;;20322:2:1;49410:65:0::2;::::0;::::2;20304:21:1::0;20361:2;20341:18;;;20334:30;20400:27;20380:18;;;20373:55;20445:18;;49410:65:0::2;20120:349:1::0;49410:65:0::2;49509:10;49496:24;::::0;;;:12:::2;:24;::::0;;;;:31;;49524:3;;49496:24;:31:::2;::::0;49524:3;;49496:31:::2;:::i;:::-;::::0;;;-1:-1:-1;49552:9:0::2;::::0;-1:-1:-1;49548:115:0::2;49567:3;49563:1;:7;49548:115;;;49591:8;:11:::0;;;:8:::2;:11;::::0;::::2;:::i;:::-;;;;;;49617:34;49628:10;49641:8;;49617:9;:34::i;:::-;49572:3:::0;::::2;::::0;::::2;:::i;:::-;;;;49548:115;;54452:95:::0;4604:6;;-1:-1:-1;;;;;4604:6:0;3397:10;4751:23;4743:68;;;;-1:-1:-1;;;4743:68:0;;;;;;;:::i;:::-;54521:6:::1;:18:::0;54452:95::o;56425:99::-;4604:6;;-1:-1:-1;;;;;4604:6:0;3397:10;4751:23;4743:68;;;;-1:-1:-1;;;4743:68:0;;;;;;;:::i;:::-;56498:18;;::::1;::::0;:12:::1;::::0;:18:::1;::::0;::::1;::::0;::::1;:::i;15612:104::-:0;15668:13;15701:7;15694:14;;;;;:::i;17295:295::-;-1:-1:-1;;;;;17398:24:0;;3397:10;17398:24;;17390:62;;;;-1:-1:-1;;;17390:62:0;;12726:2:1;17390:62:0;;;12708:21:1;12765:2;12745:18;;;12738:30;12804:27;12784:18;;;12777:55;12849:18;;17390:62:0;12524:349:1;17390:62:0;3397:10;17465:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;17465:42:0;;;;;;;;;;;;:53;;-1:-1:-1;;17465:53:0;;;;;;;;;;17534:48;;8107:41:1;;;17465:42:0;;3397:10;17534:48;;8080:18:1;17534:48:0;;;;;;;17295:295;;:::o;52706:279::-;4604:6;;-1:-1:-1;;;;;4604:6:0;3397:10;4751:23;4743:68;;;;-1:-1:-1;;;4743:68:0;;;;;;;:::i;:::-;52802:9:::1;52797:181;52817:20:::0;;::::1;52797:181;;;52889:1;52865:9:::0;;52875:1;52865:12;;::::1;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;52865:26:0::1;;;52857:66;;;::::0;-1:-1:-1;;;52857:66:0;;15832:2:1;52857:66:0::1;::::0;::::1;15814:21:1::0;15871:2;15851:18;;;15844:30;15910:29;15890:18;;;15883:57;15957:18;;52857:66:0::1;15630:351:1::0;52857:66:0::1;52965:1;52936:12;:26;52949:9;;52959:1;52949:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;52936:26:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;52936:26:0;:30;52839:3;::::1;::::0;::::1;:::i;:::-;;;;52797:181;;18558:328:::0;18733:41;3397:10;18766:7;18733:18;:41::i;:::-;18725:103;;;;-1:-1:-1;;;18725:103:0;;;;;;;:::i;:::-;18839:39;18853:4;18859:2;18863:7;18872:5;18839:13;:39::i;:::-;18558:328;;;;:::o;15787:334::-;20461:4;20485:16;;;:7;:16;;;;;;15860:13;;-1:-1:-1;;;;;20485:16:0;15886:76;;;;-1:-1:-1;;;15886:76:0;;18798:2:1;15886:76:0;;;18780:21:1;18837:2;18817:18;;;18810:30;18876:34;18856:18;;;18849:62;-1:-1:-1;;;18927:18:1;;;18920:45;18982:19;;15886:76:0;18596:411:1;15886:76:0;15975:21;15999:10;:8;:10::i;:::-;15975:34;;16051:1;16033:7;16027:21;:25;:86;;;;;;;;;;;;;;;;;16079:7;16088:18;:7;:16;:18::i;:::-;16062:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;16027:86;16020:93;15787:334;-1:-1:-1;;;15787:334:0:o;50824:295::-;4604:6;;-1:-1:-1;;;;;4604:6:0;3397:10;4751:23;4743:68;;;;-1:-1:-1;;;4743:68:0;;;;;;;:::i;:::-;50924:20:::1;:18;:20::i;:::-;50913:7;:31;;50904:69;;;;-1:-1:-1::0;;;50904:69:0::1;;;;;;;:::i;:::-;50988:9;50984:128;51003:7;50999:1;:11;50984:128;;;51031:17;:20:::0;;;:17:::1;:20;::::0;::::1;:::i;:::-;;;;;;51066:34;51077:3;51082:17;;51066:9;:34::i;:::-;51012:3:::0;::::1;::::0;::::1;:::i;:::-;;;;50984:128;;53591:307:::0;4604:6;;-1:-1:-1;;;;;4604:6:0;3397:10;4751:23;4743:68;;;;-1:-1:-1;;;4743:68:0;;;;;;;:::i;:::-;53651:11:::1;:17:::0;;-1:-1:-1;;53651:17:0::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;;;53679:212:::1;;53703:8;:16:::0;;-1:-1:-1;;53703:16:0::1;::::0;;53739:29:::1;::::0;::::1;::::0;53714:5:::1;::::0;53739:29:::1;53788:25;::::0;::::1;::::0;;;::::1;55778:121:::0;:::o;53679:212::-:1;53851:28;::::0;::::1;::::0;;;::::1;53591:307:::0;:::o;55226:151::-;55274:7;55361:8;;55338:20;;55318:17;;55301:14;;:34;;;;:::i;:::-;:57;;;;:::i;52077:221::-;4604:6;;-1:-1:-1;;;;;4604:6:0;3397:10;4751:23;4743:68;;;;-1:-1:-1;;;4743:68:0;;;;;;;:::i;:::-;52190:9:::1;52185:106;52205:20:::0;;::::1;52185:106;;;52271:5;;52277:1;52271:8;;;;;;;:::i;:::-;;;;;;;52245:9;:23;52255:9;;52265:1;52255:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;52245:23:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;52245:23:0;:34;52227:3;::::1;::::0;::::1;:::i;:::-;;;;52185:106;;;;52077:221:::0;;;;:::o;56536:99::-;56582:13;56615:12;56608:19;;;;;:::i;54146:298::-;4604:6;;-1:-1:-1;;;;;4604:6:0;3397:10;4751:23;4743:68;;;;-1:-1:-1;;;4743:68:0;;;;;;;:::i;:::-;54212:11:::1;::::0;::::1;;54211:12;54203:68;;;::::0;-1:-1:-1;;;54203:68:0;;9756:2:1;54203:68:0::1;::::0;::::1;9738:21:1::0;9795:2;9775:18;;;9768:30;9834:34;9814:18;;;9807:62;-1:-1:-1;;;9885:18:1;;;9878:41;9936:19;;54203:68:0::1;9554:407:1::0;54203:68:0::1;54282:8;:14:::0;;;::::1;::::0;::::1;;;-1:-1:-1::0;;54282:14:0;;::::1;::::0;;;::::1;::::0;;;54307:130:::1;;54336:26;::::0;::::1;::::0;;;::::1;55778:121:::0;:::o;54307:130::-:1;54400:25;::::0;::::1;::::0;;;::::1;54146:298:::0;:::o;56316:97::-;4604:6;;-1:-1:-1;;;;;4604:6:0;3397:10;4751:23;4743:68;;;;-1:-1:-1;;;4743:68:0;;;;;;;:::i;:::-;56385:12:::1;:20:::0;56316:97::o;5431:192::-;4604:6;;-1:-1:-1;;;;;4604:6:0;3397:10;4751:23;4743:68;;;;-1:-1:-1;;;4743:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;5520:22:0;::::1;5512:73;;;::::0;-1:-1:-1;;;5512:73:0;;10865:2:1;5512:73:0::1;::::0;::::1;10847:21:1::0;10904:2;10884:18;;;10877:30;10943:34;10923:18;;;10916:62;-1:-1:-1;;;10994:18:1;;;10987:36;11040:19;;5512:73:0::1;10663:402:1::0;5512:73:0::1;5596:19;5606:8;5596:9;:19::i;56647:214::-:0;4604:6;;-1:-1:-1;;;;;4604:6:0;3397:10;4751:23;4743:68;;;;-1:-1:-1;;;4743:68:0;;;;;;;:::i;:::-;56736:14:::1;::::0;;;::::1;;;56735:15;56727:59;;;::::0;-1:-1:-1;;;56727:59:0;;16901:2:1;56727:59:0::1;::::0;::::1;16883:21:1::0;16940:2;16920:18;;;16913:30;16979:33;16959:18;;;16952:61;17030:18;;56727:59:0::1;16699:355:1::0;56727:59:0::1;56797:24:::0;;::::1;::::0;:10:::1;::::0;:24:::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;;56832:14:0::1;:21:::0;;-1:-1:-1;;56832:21:0::1;::::0;::::1;::::0;;56647:214::o;14498:305::-;14600:4;-1:-1:-1;;;;;;14637:40:0;;-1:-1:-1;;;14637:40:0;;:105;;-1:-1:-1;;;;;;;14694:48:0;;-1:-1:-1;;;14694:48:0;14637:105;:158;;;-1:-1:-1;;;;;;;;;;7569:40:0;;;14759:36;7460:157;24378:174;24453:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;24453:29:0;-1:-1:-1;;;;;24453:29:0;;;;;;;;:24;;24507:23;24453:24;24507:14;:23::i;:::-;-1:-1:-1;;;;;24498:46:0;;;;;;;;;;;24378:174;;:::o;21380:110::-;21456:26;21466:2;21470:7;21456:26;;;;;;;;;;;;:9;:26::i;20690:348::-;20783:4;20485:16;;;:7;:16;;;;;;-1:-1:-1;;;;;20485:16:0;20800:73;;;;-1:-1:-1;;;20800:73:0;;13482:2:1;20800:73:0;;;13464:21:1;13521:2;13501:18;;;13494:30;13560:34;13540:18;;;13533:62;-1:-1:-1;;;13611:18:1;;;13604:42;13663:19;;20800:73:0;13280:408:1;20800:73:0;20884:13;20900:23;20915:7;20900:14;:23::i;:::-;20884:39;;20953:5;-1:-1:-1;;;;;20942:16:0;:7;-1:-1:-1;;;;;20942:16:0;;:51;;;;20986:7;-1:-1:-1;;;;;20962:31:0;:20;20974:7;20962:11;:20::i;:::-;-1:-1:-1;;;;;20962:31:0;;20942:51;:87;;;-1:-1:-1;;;;;;17782:25:0;;;17758:4;17782:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;20997:32;20934:96;20690:348;-1:-1:-1;;;;20690:348:0:o;23682:578::-;23841:4;-1:-1:-1;;;;;23814:31:0;:23;23829:7;23814:14;:23::i;:::-;-1:-1:-1;;;;;23814:31:0;;23806:85;;;;-1:-1:-1;;;23806:85:0;;18388:2:1;23806:85:0;;;18370:21:1;18427:2;18407:18;;;18400:30;18466:34;18446:18;;;18439:62;-1:-1:-1;;;18517:18:1;;;18510:39;18566:19;;23806:85:0;18186:405:1;23806:85:0;-1:-1:-1;;;;;23910:16:0;;23902:65;;;;-1:-1:-1;;;23902:65:0;;12321:2:1;23902:65:0;;;12303:21:1;12360:2;12340:18;;;12333:30;12399:34;12379:18;;;12372:62;-1:-1:-1;;;12450:18:1;;;12443:34;12494:19;;23902:65:0;12119:400:1;23902:65:0;23980:39;24001:4;24007:2;24011:7;23980:20;:39::i;:::-;24084:29;24101:1;24105:7;24084:8;:29::i;:::-;-1:-1:-1;;;;;24126:15:0;;;;;;:9;:15;;;;;:20;;24145:1;;24126:15;:20;;24145:1;;24126:20;:::i;:::-;;;;-1:-1:-1;;;;;;;24157:13:0;;;;;;:9;:13;;;;;:18;;24174:1;;24157:13;:18;;24174:1;;24157:18;:::i;:::-;;;;-1:-1:-1;;24186:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;24186:21:0;-1:-1:-1;;;;;24186:21:0;;;;;;;;;24225:27;;24186:16;;24225:27;;;;;;;23682:578;;;:::o;5631:173::-;5706:6;;;-1:-1:-1;;;;;5723:17:0;;;-1:-1:-1;;;;;;5723:17:0;;;;;;;5756:40;;5706:6;;;5723:17;5706:6;;5756:40;;5687:16;;5756:40;5676:128;5631:173;:::o;19768:315::-;19925:28;19935:4;19941:2;19945:7;19925:9;:28::i;:::-;19972:48;19995:4;20001:2;20005:7;20014:5;19972:22;:48::i;:::-;19964:111;;;;-1:-1:-1;;;19964:111:0;;;;;;;:::i;54555:114::-;54615:13;54648;54641:20;;;;;:::i;35009:723::-;35065:13;35286:10;35282:53;;-1:-1:-1;;35313:10:0;;;;;;;;;;;;-1:-1:-1;;;35313:10:0;;;;;35009:723::o;35282:53::-;35360:5;35345:12;35401:78;35408:9;;35401:78;;35434:8;;;;:::i;:::-;;-1:-1:-1;35457:10:0;;-1:-1:-1;35465:2:0;35457:10;;:::i;:::-;;;35401:78;;;35489:19;35521:6;35511:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35511:17:0;;35489:39;;35539:154;35546:10;;35539:154;;35573:11;35583:1;35573:11;;:::i;:::-;;-1:-1:-1;35642:10:0;35650:2;35642:5;:10;:::i;:::-;35629:24;;:2;:24;:::i;:::-;35616:39;;35599:6;35606;35599:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;35599:56:0;;;;;;;;-1:-1:-1;35670:11:0;35679:2;35670:11;;:::i;:::-;;;35539:154;;21717:321;21847:18;21853:2;21857:7;21847:5;:18::i;:::-;21898:54;21929:1;21933:2;21937:7;21946:5;21898:22;:54::i;:::-;21876:154;;;;-1:-1:-1;;;21876:154:0;;;;;;;:::i;30226:589::-;-1:-1:-1;;;;;30432:18:0;;30428:187;;30467:40;30499:7;31642:10;:17;;31615:24;;;;:15;:24;;;;;:44;;;31670:24;;;;;;;;;;;;31538:164;30467:40;30428:187;;;30537:2;-1:-1:-1;;;;;30529:10:0;:4;-1:-1:-1;;;;;30529:10:0;;30525:90;;30556:47;30589:4;30595:7;30556:32;:47::i;:::-;-1:-1:-1;;;;;30629:16:0;;30625:183;;30662:45;30699:7;30662:36;:45::i;30625:183::-;30735:4;-1:-1:-1;;;;;30729:10:0;:2;-1:-1:-1;;;;;30729:10:0;;30725:83;;30756:40;30784:2;30788:7;30756:27;:40::i;25117:799::-;25272:4;-1:-1:-1;;;;;25293:13:0;;37859:20;37907:8;25289:620;;25329:72;;-1:-1:-1;;;25329:72:0;;-1:-1:-1;;;;;25329:36:0;;;;;:72;;3397:10;;25380:4;;25386:7;;25395:5;;25329:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25329:72:0;;;;;;;;-1:-1:-1;;25329:72:0;;;;;;;;;;;;:::i;:::-;;;25325:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25571:13:0;;25567:272;;25614:60;;-1:-1:-1;;;25614:60:0;;;;;;;:::i;25567:272::-;25789:6;25783:13;25774:6;25770:2;25766:15;25759:38;25325:529;-1:-1:-1;;;;;;25452:51:0;-1:-1:-1;;;25452:51:0;;-1:-1:-1;25445:58:0;;25289:620;-1:-1:-1;25893:4:0;25117:799;;;;;;:::o;22374:382::-;-1:-1:-1;;;;;22454:16:0;;22446:61;;;;-1:-1:-1;;;22446:61:0;;16540:2:1;22446:61:0;;;16522:21:1;;;16559:18;;;16552:30;16618:34;16598:18;;;16591:62;16670:18;;22446:61:0;16338:356:1;22446:61:0;20461:4;20485:16;;;:7;:16;;;;;;-1:-1:-1;;;;;20485:16:0;:30;22518:58;;;;-1:-1:-1;;;22518:58:0;;11621:2:1;22518:58:0;;;11603:21:1;11660:2;11640:18;;;11633:30;11699;11679:18;;;11672:58;11747:18;;22518:58:0;11419:352:1;22518:58:0;22589:45;22618:1;22622:2;22626:7;22589:20;:45::i;:::-;-1:-1:-1;;;;;22647:13:0;;;;;;:9;:13;;;;;:18;;22664:1;;22647:13;:18;;22664:1;;22647:18;:::i;:::-;;;;-1:-1:-1;;22676:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;22676:21:0;-1:-1:-1;;;;;22676:21:0;;;;;;;;22715:33;;22676:16;;;22715:33;;22676:16;;22715:33;22374:382;;:::o;32329:988::-;32595:22;32645:1;32620:22;32637:4;32620:16;:22::i;:::-;:26;;;;:::i;:::-;32657:18;32678:26;;;:17;:26;;;;;;32595:51;;-1:-1:-1;32811:28:0;;;32807:328;;-1:-1:-1;;;;;32878:18:0;;32856:19;32878:18;;;:12;:18;;;;;;;;:34;;;;;;;;;32929:30;;;;;;:44;;;33046:30;;:17;:30;;;;;:43;;;32807:328;-1:-1:-1;33231:26:0;;;;:17;:26;;;;;;;;33224:33;;;-1:-1:-1;;;;;33275:18:0;;;;;:12;:18;;;;;:34;;;;;;;33268:41;32329:988::o;33612:1079::-;33890:10;:17;33865:22;;33890:21;;33910:1;;33890:21;:::i;:::-;33922:18;33943:24;;;:15;:24;;;;;;34316:10;:26;;33865:46;;-1:-1:-1;33943:24:0;;33865:46;;34316:26;;;;;;:::i;:::-;;;;;;;;;34294:48;;34380:11;34355:10;34366;34355:22;;;;;;;;:::i;:::-;;;;;;;;;;;;:36;;;;34460:28;;;:15;:28;;;;;;;:41;;;34632:24;;;;;34625:31;34667:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;33683:1008;;;33612:1079;:::o;31116:221::-;31201:14;31218:20;31235:2;31218:16;:20::i;:::-;-1:-1:-1;;;;;31249:16:0;;;;;;;:12;:16;;;;;;;;:24;;;;;;;;:34;;;31294:26;;;:17;:26;;;;;;:35;;;;-1:-1:-1;31116:221:0:o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:631:1;78:5;108:18;149:2;141:6;138:14;135:40;;;155:18;;:::i;:::-;230:2;224:9;198:2;284:15;;-1:-1:-1;;280:24:1;;;306:2;276:33;272:42;260:55;;;330:18;;;350:22;;;327:46;324:72;;;376:18;;:::i;:::-;416:10;412:2;405:22;445:6;436:15;;475:6;467;460:22;515:3;506:6;501:3;497:16;494:25;491:45;;;532:1;529;522:12;491:45;582:6;577:3;570:4;562:6;558:17;545:44;637:1;630:4;621:6;613;609:19;605:30;598:41;;;;14:631;;;;;:::o;650:173::-;718:20;;-1:-1:-1;;;;;767:31:1;;757:42;;747:70;;813:1;810;803:12;747:70;650:173;;;:::o;828:367::-;891:8;901:6;955:3;948:4;940:6;936:17;932:27;922:55;;973:1;970;963:12;922:55;-1:-1:-1;996:20:1;;1039:18;1028:30;;1025:50;;;1071:1;1068;1061:12;1025:50;1108:4;1100:6;1096:17;1084:29;;1168:3;1161:4;1151:6;1148:1;1144:14;1136:6;1132:27;1128:38;1125:47;1122:67;;;1185:1;1182;1175:12;1122:67;828:367;;;;;:::o;1200:160::-;1265:20;;1321:13;;1314:21;1304:32;;1294:60;;1350:1;1347;1340:12;1365:186;1424:6;1477:2;1465:9;1456:7;1452:23;1448:32;1445:52;;;1493:1;1490;1483:12;1445:52;1516:29;1535:9;1516:29;:::i;1556:260::-;1624:6;1632;1685:2;1673:9;1664:7;1660:23;1656:32;1653:52;;;1701:1;1698;1691:12;1653:52;1724:29;1743:9;1724:29;:::i;:::-;1714:39;;1772:38;1806:2;1795:9;1791:18;1772:38;:::i;:::-;1762:48;;1556:260;;;;;:::o;1821:328::-;1898:6;1906;1914;1967:2;1955:9;1946:7;1942:23;1938:32;1935:52;;;1983:1;1980;1973:12;1935:52;2006:29;2025:9;2006:29;:::i;:::-;1996:39;;2054:38;2088:2;2077:9;2073:18;2054:38;:::i;:::-;2044:48;;2139:2;2128:9;2124:18;2111:32;2101:42;;1821:328;;;;;:::o;2154:666::-;2249:6;2257;2265;2273;2326:3;2314:9;2305:7;2301:23;2297:33;2294:53;;;2343:1;2340;2333:12;2294:53;2366:29;2385:9;2366:29;:::i;:::-;2356:39;;2414:38;2448:2;2437:9;2433:18;2414:38;:::i;:::-;2404:48;;2499:2;2488:9;2484:18;2471:32;2461:42;;2554:2;2543:9;2539:18;2526:32;2581:18;2573:6;2570:30;2567:50;;;2613:1;2610;2603:12;2567:50;2636:22;;2689:4;2681:13;;2677:27;-1:-1:-1;2667:55:1;;2718:1;2715;2708:12;2667:55;2741:73;2806:7;2801:2;2788:16;2783:2;2779;2775:11;2741:73;:::i;:::-;2731:83;;;2154:666;;;;;;;:::o;2825:254::-;2890:6;2898;2951:2;2939:9;2930:7;2926:23;2922:32;2919:52;;;2967:1;2964;2957:12;2919:52;2990:29;3009:9;2990:29;:::i;:::-;2980:39;;3038:35;3069:2;3058:9;3054:18;3038:35;:::i;3084:254::-;3152:6;3160;3213:2;3201:9;3192:7;3188:23;3184:32;3181:52;;;3229:1;3226;3219:12;3181:52;3252:29;3271:9;3252:29;:::i;:::-;3242:39;3328:2;3313:18;;;;3300:32;;-1:-1:-1;;;3084:254:1:o;3343:437::-;3429:6;3437;3490:2;3478:9;3469:7;3465:23;3461:32;3458:52;;;3506:1;3503;3496:12;3458:52;3546:9;3533:23;3579:18;3571:6;3568:30;3565:50;;;3611:1;3608;3601:12;3565:50;3650:70;3712:7;3703:6;3692:9;3688:22;3650:70;:::i;:::-;3739:8;;3624:96;;-1:-1:-1;3343:437:1;-1:-1:-1;;;;3343:437:1:o;3785:773::-;3907:6;3915;3923;3931;3984:2;3972:9;3963:7;3959:23;3955:32;3952:52;;;4000:1;3997;3990:12;3952:52;4040:9;4027:23;4069:18;4110:2;4102:6;4099:14;4096:34;;;4126:1;4123;4116:12;4096:34;4165:70;4227:7;4218:6;4207:9;4203:22;4165:70;:::i;:::-;4254:8;;-1:-1:-1;4139:96:1;-1:-1:-1;4342:2:1;4327:18;;4314:32;;-1:-1:-1;4358:16:1;;;4355:36;;;4387:1;4384;4377:12;4355:36;;4426:72;4490:7;4479:8;4468:9;4464:24;4426:72;:::i;:::-;3785:773;;;;-1:-1:-1;4517:8:1;-1:-1:-1;;;;3785:773:1:o;4563:180::-;4619:6;4672:2;4660:9;4651:7;4647:23;4643:32;4640:52;;;4688:1;4685;4678:12;4640:52;4711:26;4727:9;4711:26;:::i;4748:245::-;4806:6;4859:2;4847:9;4838:7;4834:23;4830:32;4827:52;;;4875:1;4872;4865:12;4827:52;4914:9;4901:23;4933:30;4957:5;4933:30;:::i;4998:249::-;5067:6;5120:2;5108:9;5099:7;5095:23;5091:32;5088:52;;;5136:1;5133;5126:12;5088:52;5168:9;5162:16;5187:30;5211:5;5187:30;:::i;5252:450::-;5321:6;5374:2;5362:9;5353:7;5349:23;5345:32;5342:52;;;5390:1;5387;5380:12;5342:52;5430:9;5417:23;5463:18;5455:6;5452:30;5449:50;;;5495:1;5492;5485:12;5449:50;5518:22;;5571:4;5563:13;;5559:27;-1:-1:-1;5549:55:1;;5600:1;5597;5590:12;5549:55;5623:73;5688:7;5683:2;5670:16;5665:2;5661;5657:11;5623:73;:::i;5707:180::-;5766:6;5819:2;5807:9;5798:7;5794:23;5790:32;5787:52;;;5835:1;5832;5825:12;5787:52;-1:-1:-1;5858:23:1;;5707:180;-1:-1:-1;5707:180:1:o;5892:257::-;5933:3;5971:5;5965:12;5998:6;5993:3;5986:19;6014:63;6070:6;6063:4;6058:3;6054:14;6047:4;6040:5;6036:16;6014:63;:::i;:::-;6131:2;6110:15;-1:-1:-1;;6106:29:1;6097:39;;;;6138:4;6093:50;;5892:257;-1:-1:-1;;5892:257:1:o;6154:470::-;6333:3;6371:6;6365:13;6387:53;6433:6;6428:3;6421:4;6413:6;6409:17;6387:53;:::i;:::-;6503:13;;6462:16;;;;6525:57;6503:13;6462:16;6559:4;6547:17;;6525:57;:::i;:::-;6598:20;;6154:470;-1:-1:-1;;;;6154:470:1:o;6837:488::-;-1:-1:-1;;;;;7106:15:1;;;7088:34;;7158:15;;7153:2;7138:18;;7131:43;7205:2;7190:18;;7183:34;;;7253:3;7248:2;7233:18;;7226:31;;;7031:4;;7274:45;;7299:19;;7291:6;7274:45;:::i;:::-;7266:53;6837:488;-1:-1:-1;;;;;;6837:488:1:o;7330:632::-;7501:2;7553:21;;;7623:13;;7526:18;;;7645:22;;;7472:4;;7501:2;7724:15;;;;7698:2;7683:18;;;7472:4;7767:169;7781:6;7778:1;7775:13;7767:169;;;7842:13;;7830:26;;7911:15;;;;7876:12;;;;7803:1;7796:9;7767:169;;;-1:-1:-1;7953:3:1;;7330:632;-1:-1:-1;;;;;;7330:632:1:o;8159:219::-;8308:2;8297:9;8290:21;8271:4;8328:44;8368:2;8357:9;8353:18;8345:6;8328:44;:::i;9135:414::-;9337:2;9319:21;;;9376:2;9356:18;;;9349:30;9415:34;9410:2;9395:18;;9388:62;-1:-1:-1;;;9481:2:1;9466:18;;9459:48;9539:3;9524:19;;9135:414::o;12878:397::-;13080:2;13062:21;;;13119:2;13099:18;;;13092:30;13158:34;13153:2;13138:18;;13131:62;-1:-1:-1;;;13224:2:1;13209:18;;13202:31;13265:3;13250:19;;12878:397::o;15986:347::-;16188:2;16170:21;;;16227:2;16207:18;;;16200:30;16266:25;16261:2;16246:18;;16239:53;16324:2;16309:18;;15986:347::o;17825:356::-;18027:2;18009:21;;;18046:18;;;18039:30;18105:34;18100:2;18085:18;;18078:62;18172:2;18157:18;;17825:356::o;20474:413::-;20676:2;20658:21;;;20715:2;20695:18;;;20688:30;20754:34;20749:2;20734:18;;20727:62;-1:-1:-1;;;20820:2:1;20805:18;;20798:47;20877:3;20862:19;;20474:413::o;21662:355::-;21864:2;21846:21;;;21903:2;21883:18;;;21876:30;21942:33;21937:2;21922:18;;21915:61;22008:2;21993:18;;21662:355::o;22204:128::-;22244:3;22275:1;22271:6;22268:1;22265:13;22262:39;;;22281:18;;:::i;:::-;-1:-1:-1;22317:9:1;;22204:128::o;22337:120::-;22377:1;22403;22393:35;;22408:18;;:::i;:::-;-1:-1:-1;22442:9:1;;22337:120::o;22462:168::-;22502:7;22568:1;22564;22560:6;22556:14;22553:1;22550:21;22545:1;22538:9;22531:17;22527:45;22524:71;;;22575:18;;:::i;:::-;-1:-1:-1;22615:9:1;;22462:168::o;22635:125::-;22675:4;22703:1;22700;22697:8;22694:34;;;22708:18;;:::i;:::-;-1:-1:-1;22745:9:1;;22635:125::o;22765:258::-;22837:1;22847:113;22861:6;22858:1;22855:13;22847:113;;;22937:11;;;22931:18;22918:11;;;22911:39;22883:2;22876:10;22847:113;;;22978:6;22975:1;22972:13;22969:48;;;-1:-1:-1;;23013:1:1;22995:16;;22988:27;22765:258::o;23028:380::-;23107:1;23103:12;;;;23150;;;23171:61;;23225:4;23217:6;23213:17;23203:27;;23171:61;23278:2;23270:6;23267:14;23247:18;23244:38;23241:161;;;23324:10;23319:3;23315:20;23312:1;23305:31;23359:4;23356:1;23349:15;23387:4;23384:1;23377:15;23241:161;;23028:380;;;:::o;23413:135::-;23452:3;-1:-1:-1;;23473:17:1;;23470:43;;;23493:18;;:::i;:::-;-1:-1:-1;23540:1:1;23529:13;;23413:135::o;23553:112::-;23585:1;23611;23601:35;;23616:18;;:::i;:::-;-1:-1:-1;23650:9:1;;23553:112::o;23670:127::-;23731:10;23726:3;23722:20;23719:1;23712:31;23762:4;23759:1;23752:15;23786:4;23783:1;23776:15;23802:127;23863:10;23858:3;23854:20;23851:1;23844:31;23894:4;23891:1;23884:15;23918:4;23915:1;23908:15;23934:127;23995:10;23990:3;23986:20;23983:1;23976:31;24026:4;24023:1;24016:15;24050:4;24047:1;24040:15;24066:127;24127:10;24122:3;24118:20;24115:1;24108:31;24158:4;24155:1;24148:15;24182:4;24179:1;24172:15;24198:127;24259:10;24254:3;24250:20;24247:1;24240:31;24290:4;24287:1;24280:15;24314:4;24311:1;24304:15;24330:131;-1:-1:-1;;;;;;24404:32:1;;24394:43;;24384:71;;24451:1;24448;24441:12
Swarm Source
ipfs://e10c6b4f9a84b570bc05c82772888af5db173361156910eadd4d6478a7be86d9
Loading...
Loading
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.