ERC-721
Overview
Max Total Supply
351 WNS
Holders
140
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
1 WNSLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
test
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-02-07 */ 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); } pragma solidity ^0.8.6; library Address { function isContract(address account) internal view returns (bool) { uint size; assembly { size := extcodesize(account) } return size > 0; } } // OpenZeppelin Contracts v4.4.0 (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; } } // OpenZeppelin Contracts v4.4.0 (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); } } // OpenZeppelin Contracts v4.4.0 (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, 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; } // OpenZeppelin Contracts v4.4.0 (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); } // OpenZeppelin Contracts v4.4.0 (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // OpenZeppelin Contracts v4.4.0 (token/ERC721/extensions/IERC721Enumerable.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 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); } // OpenZeppelin Contracts v4.4.0 (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; } } pragma solidity ^0.8.7; abstract contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; string private _name; string private _symbol; // Mapping from token ID to owner address address[] internal _owners; mapping(uint256 => address) private _tokenApprovals; 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 (uint) { require(owner != address(0), "ERC721: balance query for the zero address"); uint count; for( uint i; i < _owners.length; ++i ){ if( owner == _owners[i] ) ++count; } return count; } /** * @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; } function _setNameSymbol(string memory name_, string memory symbol_) internal { _name = name_; _symbol = symbol_; } /** * @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 tokenId < _owners.length && _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); _owners.push(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); _owners[tokenId] = address(0); 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); _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 {} } pragma solidity ^0.8.7; /** * @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 but rips out the core of the gas-wasting processing that comes from OpenZeppelin. */ abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { /** * @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-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _owners.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require(index < _owners.length, "ERC721Enumerable: global index out of bounds"); return index; } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256 tokenId) { require(index < balanceOf(owner), "ERC721Enumerable: owner index out of bounds"); uint count; for(uint i; i < _owners.length; i++){ if(owner == _owners[i]){ if(count == index) return i; else count++; } } revert("ERC721Enumerable: owner index out of bounds"); } } // OpenZeppelin Contracts v4.4.0 (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } pragma solidity 0.8.7; contract Computation { function _computeNamehash(string memory _name) public pure returns (bytes32 namehash) { namehash = 0x0000000000000000000000000000000000000000000000000000000000000000; namehash = keccak256( abi.encodePacked(namehash, keccak256(abi.encodePacked('eth'))) ); namehash = keccak256( abi.encodePacked(namehash, keccak256(abi.encodePacked(_name))) ); } function _checkASCII(string memory str) public pure returns (bool){ bytes memory b = bytes(str); if(b.length > 15) return false; if(b.length < 3) return false; for(uint i; i<b.length; i++){ bytes1 char = b[i]; if( !(char >= 0x30 && char <= 0x39) && //9-0 !(char >= 0x61 && char <= 0x7A) //a-z ) return false; } return true; } function _checkIfSameStrings(string memory a, string memory b) internal pure returns (bool) { if (keccak256(bytes(a)) == keccak256(bytes(b))) { return true; } else { return false; } } } pragma solidity 0.8.7; abstract contract URI is ERC721Enumerable, Ownable { string public baseURI; function setBaseURI(string memory _baseURI) public onlyOwner { baseURI = _baseURI; } function tokenURI(uint256 _tokenId) public view override returns (string memory) { require(_exists(_tokenId), "Token does not exist."); return string(abi.encodePacked(baseURI, Strings.toString(_tokenId))); } } // SPDX-License-Identifier: MIT pragma solidity 0.8.7; contract test is ERC721Enumerable, Ownable, Computation, URI { uint256 nextTokenID; uint256[] public registrationCost; bool public registrationIsActive = true; //Collections mapping mapping(address => mapping(uint16 => string)) public _addressToCollections; //Names mapping mapping(bytes32 => uint256) private _nameHashToToken; mapping(uint256 => string) private _tokenToName; //Primary names mapping mapping(address => uint256) private _addressToTokenPrimary; constructor(string memory name_, string memory symbol_, string memory _baseURI, uint256 _nextTokenID, uint256[] memory _cost, string memory _firstCollection) ERC721(name_, symbol_) { baseURI = _baseURI; nextTokenID = _nextTokenID; registrationCost = _cost; _addressToCollections[address(this)][0] = _firstCollection; } function registerName(string memory _name, address collection, uint16 collectionIndex) public payable { require(registrationIsActive, "Registration must be active."); uint256 _cost = _calculateRegistrationCost(_name); require(_cost <= msg.value, "Ether value sent is not correct"); require(_checkASCII(_name), "Name contains forbidden characters."); require(msg.sender == owner() || _checkEligibility(collection, collectionIndex), "Not eligible for this collection."); bytes32 hash = _computeNamehash(_name); require(_exists(hash) == false, "Name already exists."); string memory _extension = _addressToCollections[collection][collectionIndex]; string memory _finalName = string(abi.encodePacked(_name, _extension)); _safeMint(msg.sender, nextTokenID); _nameHashToToken[hash] = nextTokenID + 1; _tokenToName[nextTokenID] = _finalName; nextTokenID += 1; } function nameByTokenID(uint256 _tokenID) public view returns (string memory) { return _tokenToName[_tokenID]; } function namesOfOwnerByIndex(address _owner, uint256 _index) public view returns (string memory) { uint256 _tokenID = tokenOfOwnerByIndex(_owner, _index); return _tokenToName[_tokenID]; } function ownerOfName(string memory _name, string memory _extension) public view returns (address) { bytes32 hash = _computeNamehash(_name); uint256 tokenID = _nameHashToToken[hash] - 1; require(_exists(tokenID), "Name is not registered yet."); require(_checkIfSameStrings(string(abi.encodePacked(_name, _extension)), _tokenToName[tokenID]), "Name is not owned by anyone."); return ownerOf(tokenID); } function migrateExtension(string memory _name, address _oldCollection, uint16 _oldCollectionIndex, address _newCollection, uint16 _newCollectionIndex) public { require(_checkEligibility(_newCollection, _newCollectionIndex), "Not eligible for this collection."); require(ownerOfName(_name, _addressToCollections[_oldCollection][_oldCollectionIndex]) == msg.sender, "Not owned by caller"); string memory _newExtension = _addressToCollections[_newCollection][_newCollectionIndex]; string memory _newFinalName = string(abi.encodePacked(_name, _newExtension)); bytes32 hash = _computeNamehash(_name); uint256 tokenID = _nameHashToToken[hash] - 1; _tokenToName[tokenID] = _newFinalName; } function setPrimaryName(uint256 _tokenID) public { require(ownerOf(_tokenID) == msg.sender, "Not owned by caller."); _addressToTokenPrimary[msg.sender] = _tokenID + 1; } function getPrimaryName(address _address) public view returns (string memory) { uint256 _tokenID = _addressToTokenPrimary[_address]; require(_tokenID != 0, "Primary Name not set for the address."); return _tokenToName[_tokenID - 1]; } function removePrimaryName(address _address) public { require(_address == msg.sender, "Address is not caller."); _addressToTokenPrimary[msg.sender] = 0; } function _removePrimaryName(address _address, uint256 _tokenID) internal { require(_isApprovedOrOwner(_msgSender(), _tokenID), "Caller is not owner nor approved."); require(ownerOf(_tokenID) == _address, "Address does not match."); if (_addressToTokenPrimary[_address] != 0 && _addressToTokenPrimary[_address] - 1 == _tokenID) { _addressToTokenPrimary[_address] = 0; } } function _checkEligibility(address collection, uint16 collectionIndex) public view returns (bool) { require(_collectionExists(collection, collectionIndex), "This collection is not eligible."); if(collection == address(this)) { return true; } else { ERC721 nftcontract = ERC721(collection); if (nftcontract.balanceOf(msg.sender) > 0) { return true; } else { return false; } } } function _collectionExists(address collection, uint16 collectionIndex) internal view returns(bool) { string memory _extension = _addressToCollections[collection][collectionIndex]; bytes memory _bytesExtension = bytes(_extension); // Uses memory if (_bytesExtension.length == 0) { return false; } else { return true; } } function addCollections(address[] memory addresses, string[][] memory domains) public onlyOwner { require(addresses.length == domains.length); for(uint8 i=0; i<domains.length;i++) { for(uint8 j=0; j<domains[i].length; j++) { _addressToCollections[addresses[i]][j] = domains[i][j]; } } } function removeCollection(address _collectionAddress, uint16 _collectionIndex) public onlyOwner { _addressToCollections[_collectionAddress][_collectionIndex] = ""; } function _exists(bytes32 _hash) public view virtual returns (bool) { if(_nameHashToToken[_hash] != 0) { return true; } else { return false; } } function _calculateRegistrationCost(string memory _name) internal view returns (uint256) { bytes memory b = bytes(_name); if(b.length == 3) return registrationCost[0]; else if(b.length == 4) return registrationCost[1]; else if(b.length == 5) return registrationCost[2]; else return registrationCost[3]; } function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal virtual override { if(_exists(tokenId)) { _removePrimaryName(from, tokenId); } } function withdraw() public onlyOwner { uint256 balance = address(this).balance; payable(msg.sender).transfer(balance); } function setRegistrationCost(uint256[] memory _cost) public onlyOwner { registrationCost = _cost; } function flipRegistrationState() public onlyOwner { registrationIsActive = !registrationIsActive; } function setNameSymbol(string memory name_, string memory symbol_) public onlyOwner { _setNameSymbol(name_, symbol_); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"name_","type":"string"},{"internalType":"string","name":"symbol_","type":"string"},{"internalType":"string","name":"_baseURI","type":"string"},{"internalType":"uint256","name":"_nextTokenID","type":"uint256"},{"internalType":"uint256[]","name":"_cost","type":"uint256[]"},{"internalType":"string","name":"_firstCollection","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint16","name":"","type":"uint16"}],"name":"_addressToCollections","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"str","type":"string"}],"name":"_checkASCII","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"collection","type":"address"},{"internalType":"uint16","name":"collectionIndex","type":"uint16"}],"name":"_checkEligibility","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"_name","type":"string"}],"name":"_computeNamehash","outputs":[{"internalType":"bytes32","name":"namehash","type":"bytes32"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_hash","type":"bytes32"}],"name":"_exists","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"string[][]","name":"domains","type":"string[][]"}],"name":"addCollections","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":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"flipRegistrationState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"getPrimaryName","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"address","name":"_oldCollection","type":"address"},{"internalType":"uint16","name":"_oldCollectionIndex","type":"uint16"},{"internalType":"address","name":"_newCollection","type":"address"},{"internalType":"uint16","name":"_newCollectionIndex","type":"uint16"}],"name":"migrateExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenID","type":"uint256"}],"name":"nameByTokenID","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"uint256","name":"_index","type":"uint256"}],"name":"namesOfOwnerByIndex","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_extension","type":"string"}],"name":"ownerOfName","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"address","name":"collection","type":"address"},{"internalType":"uint16","name":"collectionIndex","type":"uint16"}],"name":"registerName","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"registrationCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"registrationIsActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_collectionAddress","type":"address"},{"internalType":"uint16","name":"_collectionIndex","type":"uint16"}],"name":"removeCollection","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"removePrimaryName","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":"name_","type":"string"},{"internalType":"string","name":"symbol_","type":"string"}],"name":"setNameSymbol","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenID","type":"uint256"}],"name":"setPrimaryName","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_cost","type":"uint256[]"}],"name":"setRegistrationCost","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":"tokenId","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526009805460ff191660011790553480156200001e57600080fd5b5060405162003b5538038062003b55833981016040819052620000419162000351565b8551869086906200005a9060009060208501906200014b565b508051620000709060019060208401906200014b565b5050506200008d62000087620000f560201b60201c565b620000f9565b8351620000a29060069060208701906200014b565b5060078390558151620000bd906008906020850190620001da565b50306000908152600a6020908152604080832083805282529091208251620000e8928401906200014b565b50505050505050620004c0565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b82805462000159906200046d565b90600052602060002090601f0160209004810192826200017d5760008555620001c8565b82601f106200019857805160ff1916838001178555620001c8565b82800160010185558215620001c8579182015b82811115620001c8578251825591602001919060010190620001ab565b50620001d692915062000217565b5090565b828054828255906000526020600020908101928215620001c85791602002820182811115620001c8578251825591602001919060010190620001ab565b5b80821115620001d6576000815560010162000218565b600082601f8301126200024057600080fd5b815160206001600160401b038211156200025e576200025e620004aa565b8160051b6200026f8282016200043a565b8381528281019086840183880185018910156200028b57600080fd5b600093505b85841015620002b057805183526001939093019291840191840162000290565b50979650505050505050565b600082601f830112620002ce57600080fd5b81516001600160401b03811115620002ea57620002ea620004aa565b602062000300601f8301601f191682016200043a565b82815285828487010111156200031557600080fd5b60005b838110156200033557858101830151828201840152820162000318565b83811115620003475760008385840101525b5095945050505050565b60008060008060008060c087890312156200036b57600080fd5b86516001600160401b03808211156200038357600080fd5b620003918a838b01620002bc565b97506020890151915080821115620003a857600080fd5b620003b68a838b01620002bc565b96506040890151915080821115620003cd57600080fd5b620003db8a838b01620002bc565b9550606089015194506080890151915080821115620003f957600080fd5b620004078a838b016200022e565b935060a08901519150808211156200041e57600080fd5b506200042d89828a01620002bc565b9150509295509295509295565b604051601f8201601f191681016001600160401b0381118282101715620004655762000465620004aa565b604052919050565b600181811c908216806200048257607f821691505b60208210811415620004a457634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b61368580620004d06000396000f3fe6080604052600436106102515760003560e01c80636c0360eb11610139578063b88d4fde116100b6578063d8e66d601161007a578063d8e66d60146106c4578063e7af95d8146106e4578063e985e9c514610704578063f2fde38b1461074d578063f4f86cc61461076d578063f7c6ae901461078757600080fd5b8063b88d4fde14610631578063be3f4a5b14610651578063c03556a414610664578063c87b56dd14610684578063d4702936146106a457600080fd5b80638fa900c6116100fd5780638fa900c6146105a757806395d89b41146105bc5780639b035d98146105d1578063a22cb465146105f1578063a4f696571461061157600080fd5b80636c0360eb1461051f57806370a0823114610534578063715018a6146105545780638934478b146105695780638da5cb5b1461058957600080fd5b80633ccfd60b116101d257806355f804b31161019657806355f804b31461045f57806356c9d6ee1461047f578063620fb6751461049f5780636352211e146104bf578063658fb22c146104df57806365d9baa7146104ff57600080fd5b80633ccfd60b146103ca57806342842e0e146103df5780634c16a74e146103ff5780634f6ccce71461041f578063504334c21461043f57600080fd5b80630b3e37ef116102195780630b3e37ef1461032757806318160ddd1461035557806323b872dd1461036a5780632eb1985d1461038a5780632f745c59146103aa57600080fd5b806301ffc9a71461025657806306fdde031461028b578063081812fc146102ad57806308ce4b2c146102e5578063095ea7b314610307575b600080fd5b34801561026257600080fd5b50610276610271366004612ff4565b6107a7565b60405190151581526020015b60405180910390f35b34801561029757600080fd5b506102a06107d2565b6040516102829190613322565b3480156102b957600080fd5b506102cd6102c8366004612fdb565b610864565b6040516001600160a01b039091168152602001610282565b3480156102f157600080fd5b50610305610300366004612ce6565b6108f1565b005b34801561031357600080fd5b50610305610322366004612e52565b610955565b34801561033357600080fd5b5061034761034236600461302e565b610a6b565b604051908152602001610282565b34801561036157600080fd5b50600254610347565b34801561037657600080fd5b50610305610385366004612d34565b610b29565b34801561039657600080fd5b506103056103a53660046130c1565b610b5b565b3480156103b657600080fd5b506103476103c5366004612e52565b610dbd565b3480156103d657600080fd5b50610305610e70565b3480156103eb57600080fd5b506103056103fa366004612d34565b610ecd565b34801561040b57600080fd5b506102a061041a366004612ce6565b610ee8565b34801561042b57600080fd5b5061034761043a366004612fdb565b61100d565b34801561044b57600080fd5b5061030561045a366004613141565b61107a565b34801561046b57600080fd5b5061030561047a36600461302e565b6110ae565b34801561048b57600080fd5b5061030561049a366004612f43565b6110eb565b3480156104ab57600080fd5b506102766104ba36600461302e565b611128565b3480156104cb57600080fd5b506102cd6104da366004612fdb565b61120a565b3480156104eb57600080fd5b506103056104fa366004612e7c565b611296565b34801561050b57600080fd5b5061027661051a366004612fdb565b6113d3565b34801561052b57600080fd5b506102a06113fc565b34801561054057600080fd5b5061034761054f366004612ce6565b61148a565b34801561056057600080fd5b50610305611558565b34801561057557600080fd5b506102a0610584366004612fdb565b61158e565b34801561059557600080fd5b506005546001600160a01b03166102cd565b3480156105b357600080fd5b50610305611630565b3480156105c857600080fd5b506102a061166e565b3480156105dd57600080fd5b506102a06105ec366004612e28565b61167d565b3480156105fd57600080fd5b5061030561060c366004612dec565b6116a1565b34801561061d57600080fd5b5061030561062c366004612fdb565b611766565b34801561063d57600080fd5b5061030561064c366004612d70565b6117db565b61030561065f366004613063565b611813565b34801561067057600080fd5b5061027661067f366004612e28565b611afa565b34801561069057600080fd5b506102a061069f366004612fdb565b611c01565b3480156106b057600080fd5b506102a06106bf366004612e52565b611c82565b3480156106d057600080fd5b506103476106df366004612fdb565b611d34565b3480156106f057600080fd5b506103056106ff366004612e28565b611d55565b34801561071057600080fd5b5061027661071f366004612d01565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205460ff1690565b34801561075957600080fd5b50610305610768366004612ce6565b611dbc565b34801561077957600080fd5b506009546102769060ff1681565b34801561079357600080fd5b506102cd6107a2366004613141565b611e57565b60006001600160e01b0319821663780e9d6360e01b14806107cc57506107cc82611ff6565b92915050565b6060600080546107e19061355d565b80601f016020809104026020016040519081016040528092919081815260200182805461080d9061355d565b801561085a5780601f1061082f5761010080835404028352916020019161085a565b820191906000526020600020905b81548152906001019060200180831161083d57829003601f168201915b5050505050905090565b600061086f82612046565b6108d55760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600360205260409020546001600160a01b031690565b6001600160a01b03811633146109425760405162461bcd60e51b815260206004820152601660248201527520b2323932b9b99034b9903737ba1031b0b63632b91760511b60448201526064016108cc565b50336000908152600d6020526040812055565b60006109608261120a565b9050806001600160a01b0316836001600160a01b031614156109ce5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084016108cc565b336001600160a01b03821614806109ea57506109ea813361071f565b610a5c5760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c000000000000000060648201526084016108cc565b610a668383612090565b505050565b604051620cae8d60eb1b6020820152600090819060230160405160208183030381529060405280519060200120604051602001610ab2929190918252602082015260400190565b6040516020818303038152906040528051906020012090508082604051602001610adc91906131fc565b60405160208183030381529060405280519060200120604051602001610b0c929190918252602082015260400190565b604051602081830303815290604052805190602001209050919050565b610b34335b826120fe565b610b505760405162461bcd60e51b81526004016108cc90613448565b610a668383836121e8565b610b658282611afa565b610b815760405162461bcd60e51b81526004016108cc90613335565b6001600160a01b0384166000908152600a6020908152604080832061ffff87168452909152902080543391610c3f91889190610bbc9061355d565b80601f0160208091040260200160405190810160405280929190818152602001828054610be89061355d565b8015610c355780601f10610c0a57610100808354040283529160200191610c35565b820191906000526020600020905b815481529060010190602001808311610c1857829003601f168201915b5050505050611e57565b6001600160a01b031614610c8b5760405162461bcd60e51b81526020600482015260136024820152722737ba1037bbb732b210313c9031b0b63632b960691b60448201526064016108cc565b6001600160a01b0382166000908152600a6020908152604080832061ffff8516845290915281208054610cbd9061355d565b80601f0160208091040260200160405190810160405280929190818152602001828054610ce99061355d565b8015610d365780601f10610d0b57610100808354040283529160200191610d36565b820191906000526020600020905b815481529060010190602001808311610d1957829003601f168201915b5050505050905060008682604051602001610d52929190613218565b60405160208183030381529060405290506000610d6e88610a6b565b6000818152600b602052604081205491925090610d8d9060019061351a565b6000818152600c602090815260409091208551929350610db1929091860190612a5a565b50505050505050505050565b6000610dc88361148a565b8210610de65760405162461bcd60e51b81526004016108cc90613376565b6000805b600254811015610e575760028181548110610e0757610e0761360d565b6000918252602090912001546001600160a01b0386811691161415610e455783821415610e375791506107cc9050565b81610e4181613592565b9250505b80610e4f81613592565b915050610dea565b5060405162461bcd60e51b81526004016108cc90613376565b6005546001600160a01b03163314610e9a5760405162461bcd60e51b81526004016108cc90613413565b6040514790339082156108fc029083906000818181858888f19350505050158015610ec9573d6000803e3d6000fd5b5050565b610a66838383604051806020016040528060008152506117db565b6001600160a01b0381166000908152600d602052604090205460609080610f5f5760405162461bcd60e51b815260206004820152602560248201527f5072696d617279204e616d65206e6f742073657420666f7220746865206164646044820152643932b9b99760d91b60648201526084016108cc565b600c6000610f6e60018461351a565b81526020019081526020016000208054610f879061355d565b80601f0160208091040260200160405190810160405280929190818152602001828054610fb39061355d565b80156110005780601f10610fd557610100808354040283529160200191611000565b820191906000526020600020905b815481529060010190602001808311610fe357829003601f168201915b5050505050915050919050565b60025460009082106110765760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b60648201526084016108cc565b5090565b6005546001600160a01b031633146110a45760405162461bcd60e51b81526004016108cc90613413565b610ec98282612349565b6005546001600160a01b031633146110d85760405162461bcd60e51b81526004016108cc90613413565b8051610ec9906006906020840190612a5a565b6005546001600160a01b031633146111155760405162461bcd60e51b81526004016108cc90613413565b8051610ec9906008906020840190612ada565b600080829050600f815111156111415750600092915050565b6003815110156111545750600092915050565b60005b81518110156112005760008282815181106111745761117461360d565b01602001516001600160f81b0319169050600360fc1b81108015906111a75750603960f81b6001600160f81b0319821611155b1580156111dd5750606160f81b6001600160f81b03198216108015906111db5750603d60f91b6001600160f81b0319821611155b155b156111ed57506000949350505050565b50806111f881613592565b915050611157565b5060019392505050565b600080600283815481106112205761122061360d565b6000918252602090912001546001600160a01b03169050806107cc5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b60648201526084016108cc565b6005546001600160a01b031633146112c05760405162461bcd60e51b81526004016108cc90613413565b80518251146112ce57600080fd5b60005b81518160ff161015610a665760005b828260ff16815181106112f5576112f561360d565b6020026020010151518160ff1610156113c057828260ff168151811061131d5761131d61360d565b60200260200101518160ff16815181106113395761133961360d565b6020026020010151600a6000868560ff168151811061135a5761135a61360d565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060008360ff1661ffff16815260200190815260200160002090805190602001906113ad929190612a5a565b50806113b8816135ad565b9150506112e0565b50806113cb816135ad565b9150506112d1565b6000818152600b6020526040812054156113ef57506001919050565b506000919050565b919050565b600680546114099061355d565b80601f01602080910402602001604051908101604052809291908181526020018280546114359061355d565b80156114825780601f1061145757610100808354040283529160200191611482565b820191906000526020600020905b81548152906001019060200180831161146557829003601f168201915b505050505081565b60006001600160a01b0382166114f55760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b60648201526084016108cc565b6000805b60025481101561155157600281815481106115165761151661360d565b6000918252602090912001546001600160a01b03858116911614156115415761153e82613592565b91505b61154a81613592565b90506114f9565b5092915050565b6005546001600160a01b031633146115825760405162461bcd60e51b81526004016108cc90613413565b61158c6000612370565b565b6000818152600c602052604090208054606091906115ab9061355d565b80601f01602080910402602001604051908101604052809291908181526020018280546115d79061355d565b80156116245780601f106115f957610100808354040283529160200191611624565b820191906000526020600020905b81548152906001019060200180831161160757829003601f168201915b50505050509050919050565b6005546001600160a01b0316331461165a5760405162461bcd60e51b81526004016108cc90613413565b6009805460ff19811660ff90911615179055565b6060600180546107e19061355d565b600a602090815260009283526040808420909152908252902080546114099061355d565b6001600160a01b0382163314156116fa5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016108cc565b3360008181526004602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b336117708261120a565b6001600160a01b0316146117bd5760405162461bcd60e51b81526020600482015260146024820152732737ba1037bbb732b210313c9031b0b63632b91760611b60448201526064016108cc565b6117c88160016134ee565b336000908152600d602052604090205550565b6117e533836120fe565b6118015760405162461bcd60e51b81526004016108cc90613448565b61180d848484846123c2565b50505050565b60095460ff166118655760405162461bcd60e51b815260206004820152601c60248201527f526567697374726174696f6e206d757374206265206163746976652e0000000060448201526064016108cc565b6000611870846123f5565b9050348111156118c25760405162461bcd60e51b815260206004820152601f60248201527f45746865722076616c75652073656e74206973206e6f7420636f72726563740060448201526064016108cc565b6118cb84611128565b6119235760405162461bcd60e51b815260206004820152602360248201527f4e616d6520636f6e7461696e7320666f7262696464656e20636861726163746560448201526239399760e91b60648201526084016108cc565b6005546001600160a01b031633148061194157506119418383611afa565b61195d5760405162461bcd60e51b81526004016108cc90613335565b600061196885610a6b565b9050611973816113d3565b156119b75760405162461bcd60e51b81526020600482015260146024820152732730b6b29030b63932b0b23c9032bc34b9ba399760611b60448201526064016108cc565b6001600160a01b0384166000908152600a6020908152604080832061ffff87168452909152812080546119e99061355d565b80601f0160208091040260200160405190810160405280929190818152602001828054611a159061355d565b8015611a625780601f10611a3757610100808354040283529160200191611a62565b820191906000526020600020905b815481529060010190602001808311611a4557829003601f168201915b5050505050905060008682604051602001611a7e929190613218565b6040516020818303038152906040529050611a9b33600754612481565b600754611aa99060016134ee565b6000848152600b60209081526040808320939093556007548252600c81529190208251611ad892840190612a5a565b50600160076000828254611aec91906134ee565b909155505050505050505050565b6000611b06838361249b565b611b525760405162461bcd60e51b815260206004820181905260248201527f5468697320636f6c6c656374696f6e206973206e6f7420656c696769626c652e60448201526064016108cc565b6001600160a01b038316301415611b6b575060016107cc565b6040516370a0823160e01b815233600482015283906000906001600160a01b038316906370a082319060240160206040518083038186803b158015611baf57600080fd5b505afa158015611bc3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611be7919061319b565b1115611bf75760019150506107cc565b60009150506107cc565b6060611c0c82612046565b611c505760405162461bcd60e51b81526020600482015260156024820152742a37b5b2b7103237b2b9903737ba1032bc34b9ba1760591b60448201526064016108cc565b6006611c5b83612575565b604051602001611c6c929190613247565b6040516020818303038152906040529050919050565b60606000611c908484610dbd565b6000818152600c60205260409020805491925090611cad9061355d565b80601f0160208091040260200160405190810160405280929190818152602001828054611cd99061355d565b8015611d265780601f10611cfb57610100808354040283529160200191611d26565b820191906000526020600020905b815481529060010190602001808311611d0957829003601f168201915b505050505091505092915050565b60088181548110611d4457600080fd5b600091825260209091200154905081565b6005546001600160a01b03163314611d7f5760405162461bcd60e51b81526004016108cc90613413565b60408051602080820180845260008084526001600160a01b0387168152600a835284812061ffff871682529092529290209051610a669290612a5a565b6005546001600160a01b03163314611de65760405162461bcd60e51b81526004016108cc90613413565b6001600160a01b038116611e4b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016108cc565b611e5481612370565b50565b600080611e6384610a6b565b6000818152600b602052604081205491925090611e829060019061351a565b9050611e8d81612046565b611ed95760405162461bcd60e51b815260206004820152601b60248201527f4e616d65206973206e6f742072656769737465726564207965742e000000000060448201526064016108cc565b611f988585604051602001611eef929190613218565b60408051601f198184030181529181526000848152600c602052208054611f159061355d565b80601f0160208091040260200160405190810160405280929190818152602001828054611f419061355d565b8015611f8e5780601f10611f6357610100808354040283529160200191611f8e565b820191906000526020600020905b815481529060010190602001808311611f7157829003601f168201915b5050505050612673565b611fe45760405162461bcd60e51b815260206004820152601c60248201527f4e616d65206973206e6f74206f776e656420627920616e796f6e652e0000000060448201526064016108cc565b611fed8161120a565b95945050505050565b60006001600160e01b031982166380ac58cd60e01b148061202757506001600160e01b03198216635b5e139f60e01b145b806107cc57506301ffc9a760e01b6001600160e01b03198316146107cc565b600254600090821080156107cc575060006001600160a01b0316600283815481106120735761207361360d565b6000918252602090912001546001600160a01b0316141592915050565b600081815260036020526040902080546001600160a01b0319166001600160a01b03841690811790915581906120c58261120a565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061210982612046565b61216a5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016108cc565b60006121758361120a565b9050806001600160a01b0316846001600160a01b031614806121b05750836001600160a01b03166121a584610864565b6001600160a01b0316145b806121e057506001600160a01b0380821660009081526004602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b03166121fb8261120a565b6001600160a01b0316146122635760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b60648201526084016108cc565b6001600160a01b0382166122c55760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016108cc565b6122d083838361269b565b6122db600082612090565b81600282815481106122ef576122ef61360d565b6000918252602082200180546001600160a01b0319166001600160a01b03938416179055604051839285811692908716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9190a4505050565b815161235c906000906020850190612a5a565b508051610a66906001906020840190612a5a565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6123cd8484846121e8565b6123d9848484846126b3565b61180d5760405162461bcd60e51b81526004016108cc906133c1565b805160009082906003141561242b5760086000815481106124185761241861360d565b9060005260206000200154915050919050565b8051600414156124495760086001815481106124185761241861360d565b8051600514156124675760086002815481106124185761241861360d565b60086003815481106124185761241861360d565b50919050565b610ec98282604051806020016040528060008152506127c0565b6001600160a01b0382166000908152600a6020908152604080832061ffff85168452909152812080548291906124d09061355d565b80601f01602080910402602001604051908101604052809291908181526020018280546124fc9061355d565b80156125495780601f1061251e57610100808354040283529160200191612549565b820191906000526020600020905b81548152906001019060200180831161252c57829003601f168201915b50505050509050600081905080516000141561256a576000925050506107cc565b6001925050506107cc565b6060816125995750506040805180820190915260018152600360fc1b602082015290565b8160005b81156125c357806125ad81613592565b91506125bc9050600a83613506565b915061259d565b60008167ffffffffffffffff8111156125de576125de613623565b6040519080825280601f01601f191660200182016040528015612608576020820181803683370190505b5090505b84156121e05761261d60018361351a565b915061262a600a866135cd565b6126359060306134ee565b60f81b81838151811061264a5761264a61360d565b60200101906001600160f81b031916908160001a90535061266c600a86613506565b945061260c565b6000818051906020012083805190602001201415612693575060016107cc565b5060006107cc565b6126a481612046565b15610a6657610a6683826127f3565b60006001600160a01b0384163b156127b557604051630a85bd0160e11b81526001600160a01b0385169063150b7a02906126f79033908990889088906004016132e5565b602060405180830381600087803b15801561271157600080fd5b505af1925050508015612741575060408051601f3d908101601f1916820190925261273e91810190613011565b60015b61279b573d80801561276f576040519150601f19603f3d011682016040523d82523d6000602084013e612774565b606091505b5080516127935760405162461bcd60e51b81526004016108cc906133c1565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506121e0565b506001949350505050565b6127ca8383612926565b6127d760008484846126b3565b610a665760405162461bcd60e51b81526004016108cc906133c1565b6127fc33610b2e565b6128525760405162461bcd60e51b815260206004820152602160248201527f43616c6c6572206973206e6f74206f776e6572206e6f7220617070726f7665646044820152601760f91b60648201526084016108cc565b816001600160a01b03166128658261120a565b6001600160a01b0316146128bb5760405162461bcd60e51b815260206004820152601760248201527f4164647265737320646f6573206e6f74206d617463682e00000000000000000060448201526064016108cc565b6001600160a01b0382166000908152600d60205260409020541580159061290657506001600160a01b0382166000908152600d602052604090205481906129049060019061351a565b145b15610ec957506001600160a01b03166000908152600d6020526040812055565b6001600160a01b03821661297c5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016108cc565b61298581612046565b156129d25760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016108cc565b6129de6000838361269b565b6002805460018101825560009182527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0180546001600160a01b0319166001600160a01b0385169081179091556040518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b828054612a669061355d565b90600052602060002090601f016020900481019282612a885760008555612ace565b82601f10612aa157805160ff1916838001178555612ace565b82800160010185558215612ace579182015b82811115612ace578251825591602001919060010190612ab3565b50611076929150612b14565b828054828255906000526020600020908101928215612ace5791602002820182811115612ace578251825591602001919060010190612ab3565b5b808211156110765760008155600101612b15565b600067ffffffffffffffff831115612b4357612b43613623565b612b56601f8401601f1916602001613499565b9050828152838383011115612b6a57600080fd5b828260208301376000602084830101529392505050565b80356001600160a01b03811681146113f757600080fd5b600082601f830112612ba957600080fd5b8135612bbc612bb7826134ca565b613499565b80828252602082019150602085018660208560051b8801011115612bdf57600080fd5b60005b84811015612ca15767ffffffffffffffff8083351115612c0157600080fd5b8235880189603f820112612c1457600080fd5b6020810135612c25612bb7826134ca565b80828252602082019150604084018d60408560051b8701011115612c4857600080fd5b60005b84811015612c86578682351115612c6157600080fd5b612c718f60408435890101612cad565b84526020938401939190910190600101612c4b565b50508852505060209586019593909301925050600101612be2565b50909695505050505050565b600082601f830112612cbe57600080fd5b612ccd83833560208501612b29565b9392505050565b803561ffff811681146113f757600080fd5b600060208284031215612cf857600080fd5b612ccd82612b81565b60008060408385031215612d1457600080fd5b612d1d83612b81565b9150612d2b60208401612b81565b90509250929050565b600080600060608486031215612d4957600080fd5b612d5284612b81565b9250612d6060208501612b81565b9150604084013590509250925092565b60008060008060808587031215612d8657600080fd5b612d8f85612b81565b9350612d9d60208601612b81565b925060408501359150606085013567ffffffffffffffff811115612dc057600080fd5b8501601f81018713612dd157600080fd5b612de087823560208401612b29565b91505092959194509250565b60008060408385031215612dff57600080fd5b612e0883612b81565b915060208301358015158114612e1d57600080fd5b809150509250929050565b60008060408385031215612e3b57600080fd5b612e4483612b81565b9150612d2b60208401612cd4565b60008060408385031215612e6557600080fd5b612e6e83612b81565b946020939093013593505050565b60008060408385031215612e8f57600080fd5b823567ffffffffffffffff80821115612ea757600080fd5b818501915085601f830112612ebb57600080fd5b81356020612ecb612bb7836134ca565b8083825282820191508286018a848660051b8901011115612eeb57600080fd5b600096505b84871015612f1557612f0181612b81565b835260019690960195918301918301612ef0565b5096505086013592505080821115612f2c57600080fd5b50612f3985828601612b98565b9150509250929050565b60006020808385031215612f5657600080fd5b823567ffffffffffffffff811115612f6d57600080fd5b8301601f81018513612f7e57600080fd5b8035612f8c612bb7826134ca565b80828252848201915084840188868560051b8701011115612fac57600080fd5b600094505b83851015612fcf578035835260019490940193918501918501612fb1565b50979650505050505050565b600060208284031215612fed57600080fd5b5035919050565b60006020828403121561300657600080fd5b8135612ccd81613639565b60006020828403121561302357600080fd5b8151612ccd81613639565b60006020828403121561304057600080fd5b813567ffffffffffffffff81111561305757600080fd5b6121e084828501612cad565b60008060006060848603121561307857600080fd5b833567ffffffffffffffff81111561308f57600080fd5b61309b86828701612cad565b9350506130aa60208501612b81565b91506130b860408501612cd4565b90509250925092565b600080600080600060a086880312156130d957600080fd5b853567ffffffffffffffff8111156130f057600080fd5b6130fc88828901612cad565b95505061310b60208701612b81565b935061311960408701612cd4565b925061312760608701612b81565b915061313560808701612cd4565b90509295509295909350565b6000806040838503121561315457600080fd5b823567ffffffffffffffff8082111561316c57600080fd5b61317886838701612cad565b9350602085013591508082111561318e57600080fd5b50612f3985828601612cad565b6000602082840312156131ad57600080fd5b5051919050565b600081518084526131cc816020860160208601613531565b601f01601f19169290920160200192915050565b600081516131f2818560208601613531565b9290920192915050565b6000825161320e818460208701613531565b9190910192915050565b6000835161322a818460208801613531565b83519083019061323e818360208801613531565b01949350505050565b600080845481600182811c91508083168061326357607f831692505b602080841082141561328357634e487b7160e01b86526022600452602486fd5b81801561329757600181146132a8576132d5565b60ff198616895284890196506132d5565b60008b81526020902060005b868110156132cd5781548b8201529085019083016132b4565b505084890196505b505050505050611fed81856131e0565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090613318908301846131b4565b9695505050505050565b602081526000612ccd60208301846131b4565b60208082526021908201527f4e6f7420656c696769626c6520666f72207468697320636f6c6c656374696f6e6040820152601760f91b606082015260800190565b6020808252602b908201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560408201526a74206f6620626f756e647360a81b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b604051601f8201601f1916810167ffffffffffffffff811182821017156134c2576134c2613623565b604052919050565b600067ffffffffffffffff8211156134e4576134e4613623565b5060051b60200190565b60008219821115613501576135016135e1565b500190565b600082613515576135156135f7565b500490565b60008282101561352c5761352c6135e1565b500390565b60005b8381101561354c578181015183820152602001613534565b8381111561180d5750506000910152565b600181811c9082168061357157607f821691505b6020821081141561247b57634e487b7160e01b600052602260045260246000fd5b60006000198214156135a6576135a66135e1565b5060010190565b600060ff821660ff8114156135c4576135c46135e1565b60010192915050565b6000826135dc576135dc6135f7565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b031981168114611e5457600080fdfea2646970667358221220da095bc0dc05dbd1e2ef5d994f3cce4c20d8f0b4f0308f31186f1eae4416615564736f6c6343000807003300000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000240000000000000000000000000000000000000000000000000000000000000000f576562334e616d655365727669636500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003574e530000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002b68747470733a2f2f6170692e776e73646f6d61696e732e696f2f6d657461646174612f746f6b656e69643d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000006f05b59d3b20000000000000000000000000000000000000000000000000000016345785d8a000000000000000000000000000000000000000000000000000000b1a2bc2ec500000000000000000000000000000000000000000000000000000058d15e1762800000000000000000000000000000000000000000000000000000000000000000052e77656233000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x6080604052600436106102515760003560e01c80636c0360eb11610139578063b88d4fde116100b6578063d8e66d601161007a578063d8e66d60146106c4578063e7af95d8146106e4578063e985e9c514610704578063f2fde38b1461074d578063f4f86cc61461076d578063f7c6ae901461078757600080fd5b8063b88d4fde14610631578063be3f4a5b14610651578063c03556a414610664578063c87b56dd14610684578063d4702936146106a457600080fd5b80638fa900c6116100fd5780638fa900c6146105a757806395d89b41146105bc5780639b035d98146105d1578063a22cb465146105f1578063a4f696571461061157600080fd5b80636c0360eb1461051f57806370a0823114610534578063715018a6146105545780638934478b146105695780638da5cb5b1461058957600080fd5b80633ccfd60b116101d257806355f804b31161019657806355f804b31461045f57806356c9d6ee1461047f578063620fb6751461049f5780636352211e146104bf578063658fb22c146104df57806365d9baa7146104ff57600080fd5b80633ccfd60b146103ca57806342842e0e146103df5780634c16a74e146103ff5780634f6ccce71461041f578063504334c21461043f57600080fd5b80630b3e37ef116102195780630b3e37ef1461032757806318160ddd1461035557806323b872dd1461036a5780632eb1985d1461038a5780632f745c59146103aa57600080fd5b806301ffc9a71461025657806306fdde031461028b578063081812fc146102ad57806308ce4b2c146102e5578063095ea7b314610307575b600080fd5b34801561026257600080fd5b50610276610271366004612ff4565b6107a7565b60405190151581526020015b60405180910390f35b34801561029757600080fd5b506102a06107d2565b6040516102829190613322565b3480156102b957600080fd5b506102cd6102c8366004612fdb565b610864565b6040516001600160a01b039091168152602001610282565b3480156102f157600080fd5b50610305610300366004612ce6565b6108f1565b005b34801561031357600080fd5b50610305610322366004612e52565b610955565b34801561033357600080fd5b5061034761034236600461302e565b610a6b565b604051908152602001610282565b34801561036157600080fd5b50600254610347565b34801561037657600080fd5b50610305610385366004612d34565b610b29565b34801561039657600080fd5b506103056103a53660046130c1565b610b5b565b3480156103b657600080fd5b506103476103c5366004612e52565b610dbd565b3480156103d657600080fd5b50610305610e70565b3480156103eb57600080fd5b506103056103fa366004612d34565b610ecd565b34801561040b57600080fd5b506102a061041a366004612ce6565b610ee8565b34801561042b57600080fd5b5061034761043a366004612fdb565b61100d565b34801561044b57600080fd5b5061030561045a366004613141565b61107a565b34801561046b57600080fd5b5061030561047a36600461302e565b6110ae565b34801561048b57600080fd5b5061030561049a366004612f43565b6110eb565b3480156104ab57600080fd5b506102766104ba36600461302e565b611128565b3480156104cb57600080fd5b506102cd6104da366004612fdb565b61120a565b3480156104eb57600080fd5b506103056104fa366004612e7c565b611296565b34801561050b57600080fd5b5061027661051a366004612fdb565b6113d3565b34801561052b57600080fd5b506102a06113fc565b34801561054057600080fd5b5061034761054f366004612ce6565b61148a565b34801561056057600080fd5b50610305611558565b34801561057557600080fd5b506102a0610584366004612fdb565b61158e565b34801561059557600080fd5b506005546001600160a01b03166102cd565b3480156105b357600080fd5b50610305611630565b3480156105c857600080fd5b506102a061166e565b3480156105dd57600080fd5b506102a06105ec366004612e28565b61167d565b3480156105fd57600080fd5b5061030561060c366004612dec565b6116a1565b34801561061d57600080fd5b5061030561062c366004612fdb565b611766565b34801561063d57600080fd5b5061030561064c366004612d70565b6117db565b61030561065f366004613063565b611813565b34801561067057600080fd5b5061027661067f366004612e28565b611afa565b34801561069057600080fd5b506102a061069f366004612fdb565b611c01565b3480156106b057600080fd5b506102a06106bf366004612e52565b611c82565b3480156106d057600080fd5b506103476106df366004612fdb565b611d34565b3480156106f057600080fd5b506103056106ff366004612e28565b611d55565b34801561071057600080fd5b5061027661071f366004612d01565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205460ff1690565b34801561075957600080fd5b50610305610768366004612ce6565b611dbc565b34801561077957600080fd5b506009546102769060ff1681565b34801561079357600080fd5b506102cd6107a2366004613141565b611e57565b60006001600160e01b0319821663780e9d6360e01b14806107cc57506107cc82611ff6565b92915050565b6060600080546107e19061355d565b80601f016020809104026020016040519081016040528092919081815260200182805461080d9061355d565b801561085a5780601f1061082f5761010080835404028352916020019161085a565b820191906000526020600020905b81548152906001019060200180831161083d57829003601f168201915b5050505050905090565b600061086f82612046565b6108d55760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600360205260409020546001600160a01b031690565b6001600160a01b03811633146109425760405162461bcd60e51b815260206004820152601660248201527520b2323932b9b99034b9903737ba1031b0b63632b91760511b60448201526064016108cc565b50336000908152600d6020526040812055565b60006109608261120a565b9050806001600160a01b0316836001600160a01b031614156109ce5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084016108cc565b336001600160a01b03821614806109ea57506109ea813361071f565b610a5c5760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c000000000000000060648201526084016108cc565b610a668383612090565b505050565b604051620cae8d60eb1b6020820152600090819060230160405160208183030381529060405280519060200120604051602001610ab2929190918252602082015260400190565b6040516020818303038152906040528051906020012090508082604051602001610adc91906131fc565b60405160208183030381529060405280519060200120604051602001610b0c929190918252602082015260400190565b604051602081830303815290604052805190602001209050919050565b610b34335b826120fe565b610b505760405162461bcd60e51b81526004016108cc90613448565b610a668383836121e8565b610b658282611afa565b610b815760405162461bcd60e51b81526004016108cc90613335565b6001600160a01b0384166000908152600a6020908152604080832061ffff87168452909152902080543391610c3f91889190610bbc9061355d565b80601f0160208091040260200160405190810160405280929190818152602001828054610be89061355d565b8015610c355780601f10610c0a57610100808354040283529160200191610c35565b820191906000526020600020905b815481529060010190602001808311610c1857829003601f168201915b5050505050611e57565b6001600160a01b031614610c8b5760405162461bcd60e51b81526020600482015260136024820152722737ba1037bbb732b210313c9031b0b63632b960691b60448201526064016108cc565b6001600160a01b0382166000908152600a6020908152604080832061ffff8516845290915281208054610cbd9061355d565b80601f0160208091040260200160405190810160405280929190818152602001828054610ce99061355d565b8015610d365780601f10610d0b57610100808354040283529160200191610d36565b820191906000526020600020905b815481529060010190602001808311610d1957829003601f168201915b5050505050905060008682604051602001610d52929190613218565b60405160208183030381529060405290506000610d6e88610a6b565b6000818152600b602052604081205491925090610d8d9060019061351a565b6000818152600c602090815260409091208551929350610db1929091860190612a5a565b50505050505050505050565b6000610dc88361148a565b8210610de65760405162461bcd60e51b81526004016108cc90613376565b6000805b600254811015610e575760028181548110610e0757610e0761360d565b6000918252602090912001546001600160a01b0386811691161415610e455783821415610e375791506107cc9050565b81610e4181613592565b9250505b80610e4f81613592565b915050610dea565b5060405162461bcd60e51b81526004016108cc90613376565b6005546001600160a01b03163314610e9a5760405162461bcd60e51b81526004016108cc90613413565b6040514790339082156108fc029083906000818181858888f19350505050158015610ec9573d6000803e3d6000fd5b5050565b610a66838383604051806020016040528060008152506117db565b6001600160a01b0381166000908152600d602052604090205460609080610f5f5760405162461bcd60e51b815260206004820152602560248201527f5072696d617279204e616d65206e6f742073657420666f7220746865206164646044820152643932b9b99760d91b60648201526084016108cc565b600c6000610f6e60018461351a565b81526020019081526020016000208054610f879061355d565b80601f0160208091040260200160405190810160405280929190818152602001828054610fb39061355d565b80156110005780601f10610fd557610100808354040283529160200191611000565b820191906000526020600020905b815481529060010190602001808311610fe357829003601f168201915b5050505050915050919050565b60025460009082106110765760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b60648201526084016108cc565b5090565b6005546001600160a01b031633146110a45760405162461bcd60e51b81526004016108cc90613413565b610ec98282612349565b6005546001600160a01b031633146110d85760405162461bcd60e51b81526004016108cc90613413565b8051610ec9906006906020840190612a5a565b6005546001600160a01b031633146111155760405162461bcd60e51b81526004016108cc90613413565b8051610ec9906008906020840190612ada565b600080829050600f815111156111415750600092915050565b6003815110156111545750600092915050565b60005b81518110156112005760008282815181106111745761117461360d565b01602001516001600160f81b0319169050600360fc1b81108015906111a75750603960f81b6001600160f81b0319821611155b1580156111dd5750606160f81b6001600160f81b03198216108015906111db5750603d60f91b6001600160f81b0319821611155b155b156111ed57506000949350505050565b50806111f881613592565b915050611157565b5060019392505050565b600080600283815481106112205761122061360d565b6000918252602090912001546001600160a01b03169050806107cc5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b60648201526084016108cc565b6005546001600160a01b031633146112c05760405162461bcd60e51b81526004016108cc90613413565b80518251146112ce57600080fd5b60005b81518160ff161015610a665760005b828260ff16815181106112f5576112f561360d565b6020026020010151518160ff1610156113c057828260ff168151811061131d5761131d61360d565b60200260200101518160ff16815181106113395761133961360d565b6020026020010151600a6000868560ff168151811061135a5761135a61360d565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060008360ff1661ffff16815260200190815260200160002090805190602001906113ad929190612a5a565b50806113b8816135ad565b9150506112e0565b50806113cb816135ad565b9150506112d1565b6000818152600b6020526040812054156113ef57506001919050565b506000919050565b919050565b600680546114099061355d565b80601f01602080910402602001604051908101604052809291908181526020018280546114359061355d565b80156114825780601f1061145757610100808354040283529160200191611482565b820191906000526020600020905b81548152906001019060200180831161146557829003601f168201915b505050505081565b60006001600160a01b0382166114f55760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b60648201526084016108cc565b6000805b60025481101561155157600281815481106115165761151661360d565b6000918252602090912001546001600160a01b03858116911614156115415761153e82613592565b91505b61154a81613592565b90506114f9565b5092915050565b6005546001600160a01b031633146115825760405162461bcd60e51b81526004016108cc90613413565b61158c6000612370565b565b6000818152600c602052604090208054606091906115ab9061355d565b80601f01602080910402602001604051908101604052809291908181526020018280546115d79061355d565b80156116245780601f106115f957610100808354040283529160200191611624565b820191906000526020600020905b81548152906001019060200180831161160757829003601f168201915b50505050509050919050565b6005546001600160a01b0316331461165a5760405162461bcd60e51b81526004016108cc90613413565b6009805460ff19811660ff90911615179055565b6060600180546107e19061355d565b600a602090815260009283526040808420909152908252902080546114099061355d565b6001600160a01b0382163314156116fa5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016108cc565b3360008181526004602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b336117708261120a565b6001600160a01b0316146117bd5760405162461bcd60e51b81526020600482015260146024820152732737ba1037bbb732b210313c9031b0b63632b91760611b60448201526064016108cc565b6117c88160016134ee565b336000908152600d602052604090205550565b6117e533836120fe565b6118015760405162461bcd60e51b81526004016108cc90613448565b61180d848484846123c2565b50505050565b60095460ff166118655760405162461bcd60e51b815260206004820152601c60248201527f526567697374726174696f6e206d757374206265206163746976652e0000000060448201526064016108cc565b6000611870846123f5565b9050348111156118c25760405162461bcd60e51b815260206004820152601f60248201527f45746865722076616c75652073656e74206973206e6f7420636f72726563740060448201526064016108cc565b6118cb84611128565b6119235760405162461bcd60e51b815260206004820152602360248201527f4e616d6520636f6e7461696e7320666f7262696464656e20636861726163746560448201526239399760e91b60648201526084016108cc565b6005546001600160a01b031633148061194157506119418383611afa565b61195d5760405162461bcd60e51b81526004016108cc90613335565b600061196885610a6b565b9050611973816113d3565b156119b75760405162461bcd60e51b81526020600482015260146024820152732730b6b29030b63932b0b23c9032bc34b9ba399760611b60448201526064016108cc565b6001600160a01b0384166000908152600a6020908152604080832061ffff87168452909152812080546119e99061355d565b80601f0160208091040260200160405190810160405280929190818152602001828054611a159061355d565b8015611a625780601f10611a3757610100808354040283529160200191611a62565b820191906000526020600020905b815481529060010190602001808311611a4557829003601f168201915b5050505050905060008682604051602001611a7e929190613218565b6040516020818303038152906040529050611a9b33600754612481565b600754611aa99060016134ee565b6000848152600b60209081526040808320939093556007548252600c81529190208251611ad892840190612a5a565b50600160076000828254611aec91906134ee565b909155505050505050505050565b6000611b06838361249b565b611b525760405162461bcd60e51b815260206004820181905260248201527f5468697320636f6c6c656374696f6e206973206e6f7420656c696769626c652e60448201526064016108cc565b6001600160a01b038316301415611b6b575060016107cc565b6040516370a0823160e01b815233600482015283906000906001600160a01b038316906370a082319060240160206040518083038186803b158015611baf57600080fd5b505afa158015611bc3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611be7919061319b565b1115611bf75760019150506107cc565b60009150506107cc565b6060611c0c82612046565b611c505760405162461bcd60e51b81526020600482015260156024820152742a37b5b2b7103237b2b9903737ba1032bc34b9ba1760591b60448201526064016108cc565b6006611c5b83612575565b604051602001611c6c929190613247565b6040516020818303038152906040529050919050565b60606000611c908484610dbd565b6000818152600c60205260409020805491925090611cad9061355d565b80601f0160208091040260200160405190810160405280929190818152602001828054611cd99061355d565b8015611d265780601f10611cfb57610100808354040283529160200191611d26565b820191906000526020600020905b815481529060010190602001808311611d0957829003601f168201915b505050505091505092915050565b60088181548110611d4457600080fd5b600091825260209091200154905081565b6005546001600160a01b03163314611d7f5760405162461bcd60e51b81526004016108cc90613413565b60408051602080820180845260008084526001600160a01b0387168152600a835284812061ffff871682529092529290209051610a669290612a5a565b6005546001600160a01b03163314611de65760405162461bcd60e51b81526004016108cc90613413565b6001600160a01b038116611e4b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016108cc565b611e5481612370565b50565b600080611e6384610a6b565b6000818152600b602052604081205491925090611e829060019061351a565b9050611e8d81612046565b611ed95760405162461bcd60e51b815260206004820152601b60248201527f4e616d65206973206e6f742072656769737465726564207965742e000000000060448201526064016108cc565b611f988585604051602001611eef929190613218565b60408051601f198184030181529181526000848152600c602052208054611f159061355d565b80601f0160208091040260200160405190810160405280929190818152602001828054611f419061355d565b8015611f8e5780601f10611f6357610100808354040283529160200191611f8e565b820191906000526020600020905b815481529060010190602001808311611f7157829003601f168201915b5050505050612673565b611fe45760405162461bcd60e51b815260206004820152601c60248201527f4e616d65206973206e6f74206f776e656420627920616e796f6e652e0000000060448201526064016108cc565b611fed8161120a565b95945050505050565b60006001600160e01b031982166380ac58cd60e01b148061202757506001600160e01b03198216635b5e139f60e01b145b806107cc57506301ffc9a760e01b6001600160e01b03198316146107cc565b600254600090821080156107cc575060006001600160a01b0316600283815481106120735761207361360d565b6000918252602090912001546001600160a01b0316141592915050565b600081815260036020526040902080546001600160a01b0319166001600160a01b03841690811790915581906120c58261120a565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061210982612046565b61216a5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016108cc565b60006121758361120a565b9050806001600160a01b0316846001600160a01b031614806121b05750836001600160a01b03166121a584610864565b6001600160a01b0316145b806121e057506001600160a01b0380821660009081526004602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b03166121fb8261120a565b6001600160a01b0316146122635760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b60648201526084016108cc565b6001600160a01b0382166122c55760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016108cc565b6122d083838361269b565b6122db600082612090565b81600282815481106122ef576122ef61360d565b6000918252602082200180546001600160a01b0319166001600160a01b03938416179055604051839285811692908716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9190a4505050565b815161235c906000906020850190612a5a565b508051610a66906001906020840190612a5a565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6123cd8484846121e8565b6123d9848484846126b3565b61180d5760405162461bcd60e51b81526004016108cc906133c1565b805160009082906003141561242b5760086000815481106124185761241861360d565b9060005260206000200154915050919050565b8051600414156124495760086001815481106124185761241861360d565b8051600514156124675760086002815481106124185761241861360d565b60086003815481106124185761241861360d565b50919050565b610ec98282604051806020016040528060008152506127c0565b6001600160a01b0382166000908152600a6020908152604080832061ffff85168452909152812080548291906124d09061355d565b80601f01602080910402602001604051908101604052809291908181526020018280546124fc9061355d565b80156125495780601f1061251e57610100808354040283529160200191612549565b820191906000526020600020905b81548152906001019060200180831161252c57829003601f168201915b50505050509050600081905080516000141561256a576000925050506107cc565b6001925050506107cc565b6060816125995750506040805180820190915260018152600360fc1b602082015290565b8160005b81156125c357806125ad81613592565b91506125bc9050600a83613506565b915061259d565b60008167ffffffffffffffff8111156125de576125de613623565b6040519080825280601f01601f191660200182016040528015612608576020820181803683370190505b5090505b84156121e05761261d60018361351a565b915061262a600a866135cd565b6126359060306134ee565b60f81b81838151811061264a5761264a61360d565b60200101906001600160f81b031916908160001a90535061266c600a86613506565b945061260c565b6000818051906020012083805190602001201415612693575060016107cc565b5060006107cc565b6126a481612046565b15610a6657610a6683826127f3565b60006001600160a01b0384163b156127b557604051630a85bd0160e11b81526001600160a01b0385169063150b7a02906126f79033908990889088906004016132e5565b602060405180830381600087803b15801561271157600080fd5b505af1925050508015612741575060408051601f3d908101601f1916820190925261273e91810190613011565b60015b61279b573d80801561276f576040519150601f19603f3d011682016040523d82523d6000602084013e612774565b606091505b5080516127935760405162461bcd60e51b81526004016108cc906133c1565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506121e0565b506001949350505050565b6127ca8383612926565b6127d760008484846126b3565b610a665760405162461bcd60e51b81526004016108cc906133c1565b6127fc33610b2e565b6128525760405162461bcd60e51b815260206004820152602160248201527f43616c6c6572206973206e6f74206f776e6572206e6f7220617070726f7665646044820152601760f91b60648201526084016108cc565b816001600160a01b03166128658261120a565b6001600160a01b0316146128bb5760405162461bcd60e51b815260206004820152601760248201527f4164647265737320646f6573206e6f74206d617463682e00000000000000000060448201526064016108cc565b6001600160a01b0382166000908152600d60205260409020541580159061290657506001600160a01b0382166000908152600d602052604090205481906129049060019061351a565b145b15610ec957506001600160a01b03166000908152600d6020526040812055565b6001600160a01b03821661297c5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016108cc565b61298581612046565b156129d25760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016108cc565b6129de6000838361269b565b6002805460018101825560009182527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0180546001600160a01b0319166001600160a01b0385169081179091556040518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b828054612a669061355d565b90600052602060002090601f016020900481019282612a885760008555612ace565b82601f10612aa157805160ff1916838001178555612ace565b82800160010185558215612ace579182015b82811115612ace578251825591602001919060010190612ab3565b50611076929150612b14565b828054828255906000526020600020908101928215612ace5791602002820182811115612ace578251825591602001919060010190612ab3565b5b808211156110765760008155600101612b15565b600067ffffffffffffffff831115612b4357612b43613623565b612b56601f8401601f1916602001613499565b9050828152838383011115612b6a57600080fd5b828260208301376000602084830101529392505050565b80356001600160a01b03811681146113f757600080fd5b600082601f830112612ba957600080fd5b8135612bbc612bb7826134ca565b613499565b80828252602082019150602085018660208560051b8801011115612bdf57600080fd5b60005b84811015612ca15767ffffffffffffffff8083351115612c0157600080fd5b8235880189603f820112612c1457600080fd5b6020810135612c25612bb7826134ca565b80828252602082019150604084018d60408560051b8701011115612c4857600080fd5b60005b84811015612c86578682351115612c6157600080fd5b612c718f60408435890101612cad565b84526020938401939190910190600101612c4b565b50508852505060209586019593909301925050600101612be2565b50909695505050505050565b600082601f830112612cbe57600080fd5b612ccd83833560208501612b29565b9392505050565b803561ffff811681146113f757600080fd5b600060208284031215612cf857600080fd5b612ccd82612b81565b60008060408385031215612d1457600080fd5b612d1d83612b81565b9150612d2b60208401612b81565b90509250929050565b600080600060608486031215612d4957600080fd5b612d5284612b81565b9250612d6060208501612b81565b9150604084013590509250925092565b60008060008060808587031215612d8657600080fd5b612d8f85612b81565b9350612d9d60208601612b81565b925060408501359150606085013567ffffffffffffffff811115612dc057600080fd5b8501601f81018713612dd157600080fd5b612de087823560208401612b29565b91505092959194509250565b60008060408385031215612dff57600080fd5b612e0883612b81565b915060208301358015158114612e1d57600080fd5b809150509250929050565b60008060408385031215612e3b57600080fd5b612e4483612b81565b9150612d2b60208401612cd4565b60008060408385031215612e6557600080fd5b612e6e83612b81565b946020939093013593505050565b60008060408385031215612e8f57600080fd5b823567ffffffffffffffff80821115612ea757600080fd5b818501915085601f830112612ebb57600080fd5b81356020612ecb612bb7836134ca565b8083825282820191508286018a848660051b8901011115612eeb57600080fd5b600096505b84871015612f1557612f0181612b81565b835260019690960195918301918301612ef0565b5096505086013592505080821115612f2c57600080fd5b50612f3985828601612b98565b9150509250929050565b60006020808385031215612f5657600080fd5b823567ffffffffffffffff811115612f6d57600080fd5b8301601f81018513612f7e57600080fd5b8035612f8c612bb7826134ca565b80828252848201915084840188868560051b8701011115612fac57600080fd5b600094505b83851015612fcf578035835260019490940193918501918501612fb1565b50979650505050505050565b600060208284031215612fed57600080fd5b5035919050565b60006020828403121561300657600080fd5b8135612ccd81613639565b60006020828403121561302357600080fd5b8151612ccd81613639565b60006020828403121561304057600080fd5b813567ffffffffffffffff81111561305757600080fd5b6121e084828501612cad565b60008060006060848603121561307857600080fd5b833567ffffffffffffffff81111561308f57600080fd5b61309b86828701612cad565b9350506130aa60208501612b81565b91506130b860408501612cd4565b90509250925092565b600080600080600060a086880312156130d957600080fd5b853567ffffffffffffffff8111156130f057600080fd5b6130fc88828901612cad565b95505061310b60208701612b81565b935061311960408701612cd4565b925061312760608701612b81565b915061313560808701612cd4565b90509295509295909350565b6000806040838503121561315457600080fd5b823567ffffffffffffffff8082111561316c57600080fd5b61317886838701612cad565b9350602085013591508082111561318e57600080fd5b50612f3985828601612cad565b6000602082840312156131ad57600080fd5b5051919050565b600081518084526131cc816020860160208601613531565b601f01601f19169290920160200192915050565b600081516131f2818560208601613531565b9290920192915050565b6000825161320e818460208701613531565b9190910192915050565b6000835161322a818460208801613531565b83519083019061323e818360208801613531565b01949350505050565b600080845481600182811c91508083168061326357607f831692505b602080841082141561328357634e487b7160e01b86526022600452602486fd5b81801561329757600181146132a8576132d5565b60ff198616895284890196506132d5565b60008b81526020902060005b868110156132cd5781548b8201529085019083016132b4565b505084890196505b505050505050611fed81856131e0565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090613318908301846131b4565b9695505050505050565b602081526000612ccd60208301846131b4565b60208082526021908201527f4e6f7420656c696769626c6520666f72207468697320636f6c6c656374696f6e6040820152601760f91b606082015260800190565b6020808252602b908201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560408201526a74206f6620626f756e647360a81b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b604051601f8201601f1916810167ffffffffffffffff811182821017156134c2576134c2613623565b604052919050565b600067ffffffffffffffff8211156134e4576134e4613623565b5060051b60200190565b60008219821115613501576135016135e1565b500190565b600082613515576135156135f7565b500490565b60008282101561352c5761352c6135e1565b500390565b60005b8381101561354c578181015183820152602001613534565b8381111561180d5750506000910152565b600181811c9082168061357157607f821691505b6020821081141561247b57634e487b7160e01b600052602260045260246000fd5b60006000198214156135a6576135a66135e1565b5060010190565b600060ff821660ff8114156135c4576135c46135e1565b60010192915050565b6000826135dc576135dc6135f7565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b031981168114611e5457600080fdfea2646970667358221220da095bc0dc05dbd1e2ef5d994f3cce4c20d8f0b4f0308f31186f1eae4416615564736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000240000000000000000000000000000000000000000000000000000000000000000f576562334e616d655365727669636500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003574e530000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002b68747470733a2f2f6170692e776e73646f6d61696e732e696f2f6d657461646174612f746f6b656e69643d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000006f05b59d3b20000000000000000000000000000000000000000000000000000016345785d8a000000000000000000000000000000000000000000000000000000b1a2bc2ec500000000000000000000000000000000000000000000000000000058d15e1762800000000000000000000000000000000000000000000000000000000000000000052e77656233000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : name_ (string): Web3NameService
Arg [1] : symbol_ (string): WNS
Arg [2] : _baseURI (string): https://api.wnsdomains.io/metadata/tokenid=
Arg [3] : _nextTokenID (uint256): 0
Arg [4] : _cost (uint256[]): 500000000000000000,100000000000000000,50000000000000000,25000000000000000
Arg [5] : _firstCollection (string): .web3
-----Encoded View---------------
20 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000140
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [4] : 00000000000000000000000000000000000000000000000000000000000001a0
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000240
Arg [6] : 000000000000000000000000000000000000000000000000000000000000000f
Arg [7] : 576562334e616d65536572766963650000000000000000000000000000000000
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [9] : 574e530000000000000000000000000000000000000000000000000000000000
Arg [10] : 000000000000000000000000000000000000000000000000000000000000002b
Arg [11] : 68747470733a2f2f6170692e776e73646f6d61696e732e696f2f6d6574616461
Arg [12] : 74612f746f6b656e69643d000000000000000000000000000000000000000000
Arg [13] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [14] : 00000000000000000000000000000000000000000000000006f05b59d3b20000
Arg [15] : 000000000000000000000000000000000000000000000000016345785d8a0000
Arg [16] : 00000000000000000000000000000000000000000000000000b1a2bc2ec50000
Arg [17] : 0000000000000000000000000000000000000000000000000058d15e17628000
Arg [18] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [19] : 2e77656233000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
31407:7346:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25933:224;;;;;;;;;;-1:-1:-1;25933:224:0;;;;;:::i;:::-;;:::i;:::-;;;13802:14:1;;13795:22;13777:41;;13765:2;13750:18;25933:224:0;;;;;;;;14403:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;15360:308::-;;;;;;;;;;-1:-1:-1;15360:308:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;13100:32:1;;;13082:51;;13070:2;13055:18;15360:308:0;12936:203:1;35334:177:0;;;;;;;;;;-1:-1:-1;35334:177:0;;;;;:::i;:::-;;:::i;:::-;;14883:411;;;;;;;;;;-1:-1:-1;14883:411:0;;;;;:::i;:::-;;:::i;29733:412::-;;;;;;;;;;-1:-1:-1;29733:412:0;;;;;:::i;:::-;;:::i;:::-;;;13975:25:1;;;13963:2;13948:18;29733:412:0;13829:177:1;26233:110:0;;;;;;;;;;-1:-1:-1;26321:7:0;:14;26233:110;;16419:376;;;;;;;;;;-1:-1:-1;16419:376:0;;;;;:::i;:::-;;:::i;34102:750::-;;;;;;;;;;-1:-1:-1;34102:750:0;;;;;:::i;:::-;;:::i;26709:490::-;;;;;;;;;;-1:-1:-1;26709:490:0;;;;;:::i;:::-;;:::i;38214:143::-;;;;;;;;;;;;;:::i;16866:185::-;;;;;;;;;;-1:-1:-1;16866:185:0;;;;;:::i;:::-;;:::i;35060:266::-;;;;;;;;;;-1:-1:-1;35060:266:0;;;;;:::i;:::-;;:::i;26420:205::-;;;;;;;;;;-1:-1:-1;26420:205:0;;;;;:::i;:::-;;:::i;38611:133::-;;;;;;;;;;-1:-1:-1;38611:133:0;;;;;:::i;:::-;;:::i;31001:98::-;;;;;;;;;;-1:-1:-1;31001:98:0;;;;;:::i;:::-;;:::i;38369:113::-;;;;;;;;;;-1:-1:-1;38369:113:0;;;;;:::i;:::-;;:::i;30153:476::-;;;;;;;;;;-1:-1:-1;30153:476:0;;;;;:::i;:::-;;:::i;14010:326::-;;;;;;;;;;-1:-1:-1;14010:326:0;;;;;:::i;:::-;;:::i;36878:364::-;;;;;;;;;;-1:-1:-1;36878:364:0;;;;;:::i;:::-;;:::i;37437:201::-;;;;;;;;;;-1:-1:-1;37437:201:0;;;;;:::i;:::-;;:::i;30971:21::-;;;;;;;;;;;;;:::i;13556:392::-;;;;;;;;;;-1:-1:-1;13556:392:0;;;;;:::i;:::-;;:::i;28862:103::-;;;;;;;;;;;;;:::i;33293:125::-;;;;;;;;;;-1:-1:-1;33293:125:0;;;;;:::i;:::-;;:::i;28211:87::-;;;;;;;;;;-1:-1:-1;28284:6:0;;-1:-1:-1;;;;;28284:6:0;28211:87;;38490:113;;;;;;;;;;;;;:::i;14572:104::-;;;;;;;;;;;;;:::i;31619:74::-;;;;;;;;;;-1:-1:-1;31619:74:0;;;;;:::i;:::-;;:::i;15740:327::-;;;;;;;;;;-1:-1:-1;15740:327:0;;;;;:::i;:::-;;:::i;34860:192::-;;;;;;;;;;-1:-1:-1;34860:192:0;;;;;:::i;:::-;;:::i;17122:365::-;;;;;;;;;;-1:-1:-1;17122:365:0;;;;;:::i;:::-;;:::i;32297:988::-;;;;;;:::i;:::-;;:::i;35951:516::-;;;;;;;;;;-1:-1:-1;35951:516:0;;;;;:::i;:::-;;:::i;31107:230::-;;;;;;;;;;-1:-1:-1;31107:230:0;;;;;:::i;:::-;;:::i;33426:210::-;;;;;;;;;;-1:-1:-1;33426:210:0;;;;;:::i;:::-;;:::i;31504:33::-;;;;;;;;;;-1:-1:-1;31504:33:0;;;;;:::i;:::-;;:::i;37250:179::-;;;;;;;;;;-1:-1:-1;37250:179:0;;;;;:::i;:::-;;:::i;16138:214::-;;;;;;;;;;-1:-1:-1;16138:214:0;;;;;:::i;:::-;-1:-1:-1;;;;;16309:25:0;;;16280:4;16309:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;16138:214;29120:201;;;;;;;;;;-1:-1:-1;29120:201:0;;;;;:::i;:::-;;:::i;31544:39::-;;;;;;;;;;-1:-1:-1;31544:39:0;;;;;;;;33644:450;;;;;;;;;;-1:-1:-1;33644:450:0;;;;;:::i;:::-;;:::i;25933:224::-;26035:4;-1:-1:-1;;;;;;26059:50:0;;-1:-1:-1;;;26059:50:0;;:90;;;26113:36;26137:11;26113:23;:36::i;:::-;26052:97;25933:224;-1:-1:-1;;25933:224:0:o;14403:100::-;14457:13;14490:5;14483:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14403:100;:::o;15360:308::-;15481:7;15528:16;15536:7;15528;:16::i;:::-;15506:110;;;;-1:-1:-1;;;15506:110:0;;22146:2:1;15506:110:0;;;22128:21:1;22185:2;22165:18;;;22158:30;22224:34;22204:18;;;22197:62;-1:-1:-1;;;22275:18:1;;;22268:42;22327:19;;15506:110:0;;;;;;;;;-1:-1:-1;15636:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;15636:24:0;;15360:308::o;35334:177::-;-1:-1:-1;;;;;35405:22:0;;35417:10;35405:22;35397:57;;;;-1:-1:-1;;;35397:57:0;;16434:2:1;35397:57:0;;;16416:21:1;16473:2;16453:18;;;16446:30;-1:-1:-1;;;16492:18:1;;;16485:52;16554:18;;35397:57:0;16232:346:1;35397:57:0;-1:-1:-1;35488:10:0;35502:1;35465:34;;;:22;:34;;;;;:38;35334:177::o;14883:411::-;14964:13;14980:23;14995:7;14980:14;:23::i;:::-;14964:39;;15028:5;-1:-1:-1;;;;;15022:11:0;:2;-1:-1:-1;;;;;15022:11:0;;;15014:57;;;;-1:-1:-1;;;15014:57:0;;23679:2:1;15014:57:0;;;23661:21:1;23718:2;23698:18;;;23691:30;23757:34;23737:18;;;23730:62;-1:-1:-1;;;23808:18:1;;;23801:31;23849:19;;15014:57:0;23477:397:1;15014:57:0;12245:10;-1:-1:-1;;;;;15106:21:0;;;;:62;;-1:-1:-1;15131:37:0;15148:5;12245:10;16138:214;:::i;15131:37::-;15084:168;;;;-1:-1:-1;;;15084:168:0;;19840:2:1;15084:168:0;;;19822:21:1;19879:2;19859:18;;;19852:30;19918:34;19898:18;;;19891:62;19989:26;19969:18;;;19962:54;20033:19;;15084:168:0;19638:420:1;15084:168:0;15265:21;15274:2;15278:7;15265:8;:21::i;:::-;14953:341;14883:411;;:::o;29733:412::-;29986:23;;-1:-1:-1;;;29986:23:0;;;12880:18:1;29801:16:0;;;;12914:11:1;;29986:23:0;;;;;;;;;;;;29976:34;;;;;;29949:62;;;;;;;;10648:19:1;;;10692:2;10683:12;;10676:28;10729:2;10720:12;;10491:247;29949:62:0;;;;;;;;;;;;;29929:93;;;;;;29918:104;;30081:8;30118:5;30101:23;;;;;;;;:::i;:::-;;;;;;;;;;;;;30091:34;;;;;;30064:62;;;;;;;;10648:19:1;;;10692:2;10683:12;;10676:28;10729:2;10720:12;;10491:247;30064:62:0;;;;;;;;;;;;;30044:93;;;;;;30033:104;;29733:412;;;:::o;16419:376::-;16628:41;12245:10;16647:12;16661:7;16628:18;:41::i;:::-;16606:140;;;;-1:-1:-1;;;16606:140:0;;;;;;;:::i;:::-;16759:28;16769:4;16775:2;16779:7;16759:9;:28::i;34102:750::-;34279:54;34297:14;34313:19;34279:17;:54::i;:::-;34271:100;;;;-1:-1:-1;;;34271:100:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34409:37:0;;;;;;:21;:37;;;;;;;;:58;;;;;;;;;;34390:78;;34472:10;;34390:78;;34402:5;;34409:58;34390:78;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:11;:78::i;:::-;-1:-1:-1;;;;;34390:92:0;;34382:124;;;;-1:-1:-1;;;34382:124:0;;26027:2:1;34382:124:0;;;26009:21:1;26066:2;26046:18;;;26039:30;-1:-1:-1;;;26085:18:1;;;26078:49;26144:18;;34382:124:0;25825:343:1;34382:124:0;-1:-1:-1;;;;;34547:37:0;;34517:27;34547:37;;;:21;:37;;;;;;;;:58;;;;;;;;;;34517:88;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34616:27;34670:5;34677:13;34653:38;;;;;;;;;:::i;:::-;;;;;;;;;;;;;34616:76;;34703:12;34718:23;34735:5;34718:16;:23::i;:::-;34752:15;34770:22;;;:16;:22;;;;;;34703:38;;-1:-1:-1;34752:15:0;34770:26;;34795:1;;34770:26;:::i;:::-;34807:21;;;;:12;:21;;;;;;;;:37;;34752:44;;-1:-1:-1;34807:37:0;;:21;;:37;;;;:::i;:::-;;34260:592;;;;34102:750;;;;;:::o;26709:490::-;26806:15;26850:16;26860:5;26850:9;:16::i;:::-;26842:5;:24;26834:80;;;;-1:-1:-1;;;26834:80:0;;;;;;;:::i;:::-;26927:10;26952:6;26948:178;26964:7;:14;26960:18;;26948:178;;;27011:7;27019:1;27011:10;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;27002:19:0;;;27011:10;;27002:19;26999:116;;;27053:5;27044;:14;27041:58;;;27067:1;-1:-1:-1;27060:8:0;;-1:-1:-1;27060:8:0;27041:58;27092:7;;;;:::i;:::-;;;;27041:58;26980:3;;;;:::i;:::-;;;;26948:178;;;;27138:53;;-1:-1:-1;;;27138:53:0;;;;;;;:::i;38214:143::-;28284:6;;-1:-1:-1;;;;;28284:6:0;12245:10;28431:23;28423:68;;;;-1:-1:-1;;;28423:68:0;;;;;;;:::i;:::-;38312:37:::1;::::0;38280:21:::1;::::0;38320:10:::1;::::0;38312:37;::::1;;;::::0;38280:21;;38262:15:::1;38312:37:::0;38262:15;38312:37;38280:21;38320:10;38312:37;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;38251:106;38214:143::o:0;16866:185::-;17004:39;17021:4;17027:2;17031:7;17004:39;;;;;;;;;;;;:16;:39::i;35060:266::-;-1:-1:-1;;;;;35168:32:0;;35149:16;35168:32;;;:22;:32;;;;;;35123:13;;35219;35211:63;;;;-1:-1:-1;;;35211:63:0;;19082:2:1;35211:63:0;;;19064:21:1;19121:2;19101:18;;;19094:30;19160:34;19140:18;;;19133:62;-1:-1:-1;;;19211:18:1;;;19204:35;19256:19;;35211:63:0;18880:401:1;35211:63:0;35292:12;:26;35305:12;35316:1;35305:8;:12;:::i;:::-;35292:26;;;;;;;;;;;35285:33;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35060:266;;;:::o;26420:205::-;26531:7;:14;26495:7;;26523:22;;26515:79;;;;-1:-1:-1;;;26515:79:0;;25212:2:1;26515:79:0;;;25194:21:1;25251:2;25231:18;;;25224:30;25290:34;25270:18;;;25263:62;-1:-1:-1;;;25341:18:1;;;25334:42;25393:19;;26515:79:0;25010:408:1;26515:79:0;-1:-1:-1;26612:5:0;26420:205::o;38611:133::-;28284:6;;-1:-1:-1;;;;;28284:6:0;12245:10;28431:23;28423:68;;;;-1:-1:-1;;;28423:68:0;;;;;;;:::i;:::-;38706:30:::1;38721:5;38728:7;38706:14;:30::i;31001:98::-:0;28284:6;;-1:-1:-1;;;;;28284:6:0;12245:10;28431:23;28423:68;;;;-1:-1:-1;;;28423:68:0;;;;;;;:::i;:::-;31073:18;;::::1;::::0;:7:::1;::::0;:18:::1;::::0;::::1;::::0;::::1;:::i;38369:113::-:0;28284:6;;-1:-1:-1;;;;;28284:6:0;12245:10;28431:23;28423:68;;;;-1:-1:-1;;;28423:68:0;;;;;;;:::i;:::-;38450:24;;::::1;::::0;:16:::1;::::0;:24:::1;::::0;::::1;::::0;::::1;:::i;30153:476::-:0;30214:4;30230:14;30253:3;30230:27;;30282:2;30271:1;:8;:13;30268:30;;;-1:-1:-1;30293:5:0;;30153:476;-1:-1:-1;;30153:476:0:o;30268:30::-;30323:1;30312;:8;:12;30309:29;;;-1:-1:-1;30333:5:0;;30153:476;-1:-1:-1;;30153:476:0:o;30309:29::-;30355:6;30351:249;30365:1;:8;30363:1;:10;30351:249;;;30394:11;30408:1;30410;30408:4;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;;;;;30408:4:0;;-1:-1:-1;;;;30450:12:0;;;;;:28;;-1:-1:-1;;;;;;;;;;30466:12:0;;;;30450:28;30448:31;:89;;;;-1:-1:-1;;;;;;;;;;30508:12:0;;;;;;:28;;-1:-1:-1;;;;;;;;;;30524:12:0;;;;30508:28;30506:31;30448:89;30427:161;;;-1:-1:-1;30583:5:0;;30153:476;-1:-1:-1;;;;30153:476:0:o;30427:161::-;-1:-1:-1;30375:3:0;;;;:::i;:::-;;;;30351:249;;;-1:-1:-1;30617:4:0;;30153:476;-1:-1:-1;;;30153:476:0:o;14010:326::-;14127:7;14152:13;14168:7;14176;14168:16;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;14168:16:0;;-1:-1:-1;14217:19:0;14195:110;;;;-1:-1:-1;;;14195:110:0;;21025:2:1;14195:110:0;;;21007:21:1;21064:2;21044:18;;;21037:30;21103:34;21083:18;;;21076:62;-1:-1:-1;;;21154:18:1;;;21147:39;21203:19;;14195:110:0;20823:405:1;36878:364:0;28284:6;;-1:-1:-1;;;;;28284:6:0;12245:10;28431:23;28423:68;;;;-1:-1:-1;;;28423:68:0;;;;;;;:::i;:::-;37013:7:::1;:14;36993:9;:16;:34;36985:43;;;::::0;::::1;;37045:7;37041:194;37058:7;:14;37056:1;:16;;;37041:194;;;37097:7;37093:131;37110:7;37118:1;37110:10;;;;;;;;;;:::i;:::-;;;;;;;:17;37108:1;:19;;;37093:131;;;37195:7;37203:1;37195:10;;;;;;;;;;:::i;:::-;;;;;;;37206:1;37195:13;;;;;;;;;;:::i;:::-;;;;;;;37154:21;:35;37176:9;37186:1;37176:12;;;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;37154:35:0::1;-1:-1:-1::0;;;;;37154:35:0::1;;;;;;;;;;;;:38;37190:1;37154:38;;;;;;;;;;;;;;;:54;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;37129:3:0;::::1;::::0;::::1;:::i;:::-;;;;37093:131;;;-1:-1:-1::0;37073:3:0;::::1;::::0;::::1;:::i;:::-;;;;37041:194;;37437:201:::0;37498:4;37518:23;;;:16;:23;;;;;;:28;37515:116;;-1:-1:-1;37570:4:0;;37437:201;-1:-1:-1;37437:201:0:o;37515:116::-;-1:-1:-1;37614:5:0;;37437:201;-1:-1:-1;37437:201:0:o;37515:116::-;37437:201;;;:::o;30971:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;13556:392::-;13678:4;-1:-1:-1;;;;;13709:19:0;;13701:74;;;;-1:-1:-1;;;13701:74:0;;20614:2:1;13701:74:0;;;20596:21:1;20653:2;20633:18;;;20626:30;20692:34;20672:18;;;20665:62;-1:-1:-1;;;20743:18:1;;;20736:40;20793:19;;13701:74:0;20412:406:1;13701:74:0;13788:10;13814:6;13809:109;13826:7;:14;13822:18;;13809:109;;;13873:7;13881:1;13873:10;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;13864:19:0;;;13873:10;;13864:19;13860:46;;;13899:7;;;:::i;:::-;;;13860:46;13842:3;;;:::i;:::-;;;13809:109;;;-1:-1:-1;13935:5:0;13556:392;-1:-1:-1;;13556:392:0:o;28862:103::-;28284:6;;-1:-1:-1;;;;;28284:6:0;12245:10;28431:23;28423:68;;;;-1:-1:-1;;;28423:68:0;;;;;;;:::i;:::-;28927:30:::1;28954:1;28927:18;:30::i;:::-;28862:103::o:0;33293:125::-;33388:22;;;;:12;:22;;;;;33381:29;;33355:13;;33388:22;33381:29;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33293:125;;;:::o;38490:113::-;28284:6;;-1:-1:-1;;;;;28284:6:0;12245:10;28431:23;28423:68;;;;-1:-1:-1;;;28423:68:0;;;;;;;:::i;:::-;38575:20:::1;::::0;;-1:-1:-1;;38551:44:0;::::1;38575:20;::::0;;::::1;38574:21;38551:44;::::0;;38490:113::o;14572:104::-;14628:13;14661:7;14654:14;;;;;:::i;31619:74::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;15740:327::-;-1:-1:-1;;;;;15875:24:0;;12245:10;15875:24;;15867:62;;;;-1:-1:-1;;;15867:62:0;;17190:2:1;15867:62:0;;;17172:21:1;17229:2;17209:18;;;17202:30;17268:27;17248:18;;;17241:55;17313:18;;15867:62:0;16988:349:1;15867:62:0;12245:10;15942:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;15942:42:0;;;;;;;;;;;;:53;;-1:-1:-1;;15942:53:0;;;;;;;;;;16011:48;;13777:41:1;;;15942:42:0;;12245:10;16011:48;;13750:18:1;16011:48:0;;;;;;;15740:327;;:::o;34860:192::-;34949:10;34928:17;34936:8;34928:7;:17::i;:::-;-1:-1:-1;;;;;34928:31:0;;34920:64;;;;-1:-1:-1;;;34920:64:0;;20265:2:1;34920:64:0;;;20247:21:1;20304:2;20284:18;;;20277:30;-1:-1:-1;;;20323:18:1;;;20316:50;20383:18;;34920:64:0;20063:344:1;34920:64:0;35032:12;:8;35043:1;35032:12;:::i;:::-;35018:10;34995:34;;;;:22;:34;;;;;:49;-1:-1:-1;34860:192:0:o;17122:365::-;17311:41;12245:10;17344:7;17311:18;:41::i;:::-;17289:140;;;;-1:-1:-1;;;17289:140:0;;;;;;;:::i;:::-;17440:39;17454:4;17460:2;17464:7;17473:5;17440:13;:39::i;:::-;17122:365;;;;:::o;32297:988::-;32418:20;;;;32410:61;;;;-1:-1:-1;;;32410:61:0;;26375:2:1;32410:61:0;;;26357:21:1;26414:2;26394:18;;;26387:30;26453;26433:18;;;26426:58;26501:18;;32410:61:0;26173:352:1;32410:61:0;32482:13;32498:33;32525:5;32498:26;:33::i;:::-;32482:49;;32559:9;32550:5;:18;;32542:62;;;;-1:-1:-1;;;32542:62:0;;17905:2:1;32542:62:0;;;17887:21:1;17944:2;17924:18;;;17917:30;17983:33;17963:18;;;17956:61;18034:18;;32542:62:0;17703:355:1;32542:62:0;32623:18;32635:5;32623:11;:18::i;:::-;32615:66;;;;-1:-1:-1;;;32615:66:0;;18265:2:1;32615:66:0;;;18247:21:1;18304:2;18284:18;;;18277:30;18343:34;18323:18;;;18316:62;-1:-1:-1;;;18394:18:1;;;18387:33;18437:19;;32615:66:0;18063:399:1;32615:66:0;28284:6;;-1:-1:-1;;;;;28284:6:0;32700:10;:21;;:71;;;32725:46;32743:10;32755:15;32725:17;:46::i;:::-;32692:117;;;;-1:-1:-1;;;32692:117:0;;;;;;;:::i;:::-;32820:12;32835:23;32852:5;32835:16;:23::i;:::-;32820:38;;32877:13;32885:4;32877:7;:13::i;:::-;:22;32869:55;;;;-1:-1:-1;;;32869:55:0;;23330:2:1;32869:55:0;;;23312:21:1;23369:2;23349:18;;;23342:30;-1:-1:-1;;;23388:18:1;;;23381:50;23448:18;;32869:55:0;23128:344:1;32869:55:0;-1:-1:-1;;;;;32962:33:0;;32935:24;32962:33;;;:21;:33;;;;;;;;:50;;;;;;;;;;32935:77;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33023:24;33074:5;33081:10;33057:35;;;;;;;;;:::i;:::-;;;;;;;;;;;;;33023:70;;33114:34;33124:10;33136:11;;33114:9;:34::i;:::-;33184:11;;:15;;33198:1;33184:15;:::i;:::-;33159:22;;;;:16;:22;;;;;;;;:40;;;;33223:11;;33210:25;;:12;:25;;;;;:38;;;;;;;;:::i;:::-;;33276:1;33261:11;;:16;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;;;32297:988:0:o;35951:516::-;36043:4;36068:46;36086:10;36098:15;36068:17;:46::i;:::-;36060:91;;;;-1:-1:-1;;;36060:91:0;;17544:2:1;36060:91:0;;;17526:21:1;;;17563:18;;;17556:30;17622:34;17602:18;;;17595:62;17674:18;;36060:91:0;17342:356:1;36060:91:0;-1:-1:-1;;;;;36165:27:0;;36187:4;36165:27;36162:298;;;-1:-1:-1;36216:4:0;36209:11;;36162:298;36311:33;;-1:-1:-1;;;36311:33:0;;36333:10;36311:33;;;13082:51:1;36281:10:0;;36253:18;;-1:-1:-1;;;;;36311:21:0;;;;;13055:18:1;;36311:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:37;36307:142;;;36376:4;36369:11;;;;;36307:142;36428:5;36421:12;;;;;31107:230;31173:13;31207:17;31215:8;31207:7;:17::i;:::-;31199:51;;;;-1:-1:-1;;;31199:51:0;;21796:2:1;31199:51:0;;;21778:21:1;21835:2;21815:18;;;21808:30;-1:-1:-1;;;21854:18:1;;;21847:51;21915:18;;31199:51:0;21594:345:1;31199:51:0;31292:7;31301:26;31318:8;31301:16;:26::i;:::-;31275:53;;;;;;;;;:::i;:::-;;;;;;;;;;;;;31261:68;;31107:230;;;:::o;33426:210::-;33508:13;33534:16;33553:35;33573:6;33581;33553:19;:35::i;:::-;33606:22;;;;:12;:22;;;;;33599:29;;33534:54;;-1:-1:-1;33606:22:0;33599:29;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33426:210;;;;:::o;31504:33::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31504:33:0;:::o;37250:179::-;28284:6;;-1:-1:-1;;;;;28284:6:0;12245:10;28431:23;28423:68;;;;-1:-1:-1;;;28423:68:0;;;;;;;:::i;:::-;37357:64:::1;::::0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;37357:64:0;;;-1:-1:-1;;;;;37357:41:0;::::1;::::0;;:21:::1;:41:::0;;;;;:59:::1;::::0;::::1;::::0;;;;;;;;:64;;::::1;::::0;;::::1;:::i;29120:201::-:0;28284:6;;-1:-1:-1;;;;;28284:6:0;12245:10;28431:23;28423:68;;;;-1:-1:-1;;;28423:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;29209:22:0;::::1;29201:73;;;::::0;-1:-1:-1;;;29201:73:0;;15670:2:1;29201:73:0::1;::::0;::::1;15652:21:1::0;15709:2;15689:18;;;15682:30;15748:34;15728:18;;;15721:62;-1:-1:-1;;;15799:18:1;;;15792:36;15845:19;;29201:73:0::1;15468:402:1::0;29201:73:0::1;29285:28;29304:8;29285:18;:28::i;:::-;29120:201:::0;:::o;33644:450::-;33733:7;33753:12;33768:23;33785:5;33768:16;:23::i;:::-;33802:15;33820:22;;;:16;:22;;;;;;33753:38;;-1:-1:-1;33802:15:0;33820:26;;33845:1;;33820:26;:::i;:::-;33802:44;;33865:16;33873:7;33865;:16::i;:::-;33857:56;;;;-1:-1:-1;;;33857:56:0;;24081:2:1;33857:56:0;;;24063:21:1;24120:2;24100:18;;;24093:30;24159:29;24139:18;;;24132:57;24206:18;;33857:56:0;23879:351:1;33857:56:0;33932:87;33976:5;33983:10;33959:35;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;33959:35:0;;;;;;;;;33997:21;;;;:12;33959:35;33997:21;;33932:87;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:19;:87::i;:::-;33924:128;;;;-1:-1:-1;;;33924:128:0;;24437:2:1;33924:128:0;;;24419:21:1;24476:2;24456:18;;;24449:30;24515;24495:18;;;24488:58;24563:18;;33924:128:0;24235:352:1;33924:128:0;34070:16;34078:7;34070;:16::i;:::-;34063:23;33644:450;-1:-1:-1;;;;;33644:450:0:o;13137:355::-;13284:4;-1:-1:-1;;;;;;13326:40:0;;-1:-1:-1;;;13326:40:0;;:105;;-1:-1:-1;;;;;;;13383:48:0;;-1:-1:-1;;;13383:48:0;13326:105;:158;;;-1:-1:-1;;;;;;;;;;1932:40:0;;;13448:36;1823:157;19034:155;19133:7;:14;19099:4;;19123:24;;:58;;;;;19179:1;-1:-1:-1;;;;;19151:30:0;:7;19159;19151:16;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;19151:16:0;:30;;19116:65;19034:155;-1:-1:-1;;19034:155:0:o;23059:174::-;23134:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;23134:29:0;-1:-1:-1;;;;;23134:29:0;;;;;;;;:24;;23188:23;23134:24;23188:14;:23::i;:::-;-1:-1:-1;;;;;23179:46:0;;;;;;;;;;;23059:174;;:::o;19356:452::-;19485:4;19529:16;19537:7;19529;:16::i;:::-;19507:110;;;;-1:-1:-1;;;19507:110:0;;18669:2:1;19507:110:0;;;18651:21:1;18708:2;18688:18;;;18681:30;18747:34;18727:18;;;18720:62;-1:-1:-1;;;18798:18:1;;;18791:42;18850:19;;19507:110:0;18467:408:1;19507:110:0;19628:13;19644:23;19659:7;19644:14;:23::i;:::-;19628:39;;19697:5;-1:-1:-1;;;;;19686:16:0;:7;-1:-1:-1;;;;;19686:16:0;;:64;;;;19743:7;-1:-1:-1;;;;;19719:31:0;:20;19731:7;19719:11;:20::i;:::-;-1:-1:-1;;;;;19719:31:0;;19686:64;:113;;;-1:-1:-1;;;;;;16309:25:0;;;16280:4;16309:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;19767:32;19678:122;19356:452;-1:-1:-1;;;;19356:452:0:o;22388:553::-;22561:4;-1:-1:-1;;;;;22534:31:0;:23;22549:7;22534:14;:23::i;:::-;-1:-1:-1;;;;;22534:31:0;;22512:122;;;;-1:-1:-1;;;22512:122:0;;22920:2:1;22512:122:0;;;22902:21:1;22959:2;22939:18;;;22932:30;22998:34;22978:18;;;22971:62;-1:-1:-1;;;23049:18:1;;;23042:39;23098:19;;22512:122:0;22718:405:1;22512:122:0;-1:-1:-1;;;;;22653:16:0;;22645:65;;;;-1:-1:-1;;;22645:65:0;;16785:2:1;22645:65:0;;;16767:21:1;16824:2;16804:18;;;16797:30;16863:34;16843:18;;;16836:62;-1:-1:-1;;;16914:18:1;;;16907:34;16958:19;;22645:65:0;16583:400:1;22645:65:0;22723:39;22744:4;22750:2;22754:7;22723:20;:39::i;:::-;22827:29;22844:1;22848:7;22827:8;:29::i;:::-;22886:2;22867:7;22875;22867:16;;;;;;;;:::i;:::-;;;;;;;;;:21;;-1:-1:-1;;;;;;22867:21:0;-1:-1:-1;;;;;22867:21:0;;;;;;22906:27;;22925:7;;22906:27;;;;;;;;;;22867:16;22906:27;22388:553;;;:::o;14684:137::-;14772:13;;;;:5;;:13;;;;;:::i;:::-;-1:-1:-1;14796:17:0;;;;:7;;:17;;;;;:::i;29481:191::-;29574:6;;;-1:-1:-1;;;;;29591:17:0;;;-1:-1:-1;;;;;;29591:17:0;;;;;;;29624:40;;29574:6;;;29591:17;29574:6;;29624:40;;29555:16;;29624:40;29544:128;29481:191;:::o;18369:352::-;18526:28;18536:4;18542:2;18546:7;18526:9;:28::i;:::-;18587:48;18610:4;18616:2;18620:7;18629:5;18587:22;:48::i;:::-;18565:148;;;;-1:-1:-1;;;18565:148:0;;;;;;;:::i;37646:354::-;37789:8;;37726:7;;37769:5;;37801:1;37789:13;37786:206;;;37811:16;37828:1;37811:19;;;;;;;;:::i;:::-;;;;;;;;;37804:26;;;37646:354;;;:::o;37786:206::-;37849:1;:8;37861:1;37849:13;37846:146;;;37871:16;37888:1;37871:19;;;;;;;;:::i;37846:146::-;37909:1;:8;37921:1;37909:13;37906:86;;;37931:16;37948:1;37931:19;;;;;;;;:::i;37906:86::-;37973:16;37990:1;37973:19;;;;;;;;:::i;37906:86::-;37735:265;37646:354;;;:::o;20150:110::-;20226:26;20236:2;20240:7;20226:26;;;;;;;;;;;;:9;:26::i;36475:395::-;-1:-1:-1;;;;;36612:33:0;;36568:4;36612:33;;;:21;:33;;;;;;;;:50;;;;;;;;;;36585:77;;36568:4;;36612:50;36585:77;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36673:28;36710:10;36673:48;;36751:15;:22;36777:1;36751:27;36747:116;;;36802:5;36795:12;;;;;;36747:116;36847:4;36840:11;;;;;;2296:723;2352:13;2573:10;2569:53;;-1:-1:-1;;2600:10:0;;;;;;;;;;;;-1:-1:-1;;;2600:10:0;;;;;2296:723::o;2569:53::-;2647:5;2632:12;2688:78;2695:9;;2688:78;;2721:8;;;;:::i;:::-;;-1:-1:-1;2744:10:0;;-1:-1:-1;2752:2:0;2744:10;;:::i;:::-;;;2688:78;;;2776:19;2808:6;2798:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2798:17:0;;2776:39;;2826:154;2833:10;;2826:154;;2860:11;2870:1;2860:11;;:::i;:::-;;-1:-1:-1;2929:10:0;2937:2;2929:5;:10;:::i;:::-;2916:24;;:2;:24;:::i;:::-;2903:39;;2886:6;2893;2886:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;2886:56:0;;;;;;;;-1:-1:-1;2957:11:0;2966:2;2957:11;;:::i;:::-;;;2826:154;;30637:241;30723:4;30783:1;30767:19;;;;;;30760:1;30744:19;;;;;;:42;30740:131;;;-1:-1:-1;30810:4:0;30803:11;;30740:131;-1:-1:-1;30854:5:0;30847:12;;38008:198;38121:16;38129:7;38121;:16::i;:::-;38118:81;;;38154:33;38173:4;38179:7;38154:18;:33::i;23798:980::-;23953:4;-1:-1:-1;;;;;23974:13:0;;956:20;1004:8;23970:801;;24027:175;;-1:-1:-1;;;24027:175:0;;-1:-1:-1;;;;;24027:36:0;;;;;:175;;12245:10;;24121:4;;24148:7;;24178:5;;24027:175;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24027:175:0;;;;;;;;-1:-1:-1;;24027:175:0;;;;;;;;;;;;:::i;:::-;;;24006:710;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24385:13:0;;24381:320;;24428:108;;-1:-1:-1;;;24428:108:0;;;;;;;:::i;24381:320::-;24651:6;24645:13;24636:6;24632:2;24628:15;24621:38;24006:710;-1:-1:-1;;;;;;24266:51:0;-1:-1:-1;;;24266:51:0;;-1:-1:-1;24259:58:0;;23970:801;-1:-1:-1;24755:4:0;23798:980;;;;;;:::o;20487:321::-;20617:18;20623:2;20627:7;20617:5;:18::i;:::-;20668:54;20699:1;20703:2;20707:7;20716:5;20668:22;:54::i;:::-;20646:154;;;;-1:-1:-1;;;20646:154:0;;;;;;;:::i;35519:424::-;35611:42;12245:10;35630:12;12165:98;35611:42;35603:88;;;;-1:-1:-1;;;35603:88:0;;25625:2:1;35603:88:0;;;25607:21:1;25664:2;25644:18;;;25637:30;25703:34;25683:18;;;25676:62;-1:-1:-1;;;25754:18:1;;;25747:31;25795:19;;35603:88:0;25423:397:1;35603:88:0;35731:8;-1:-1:-1;;;;;35710:29:0;:17;35718:8;35710:7;:17::i;:::-;-1:-1:-1;;;;;35710:29:0;;35702:65;;;;-1:-1:-1;;;35702:65:0;;19488:2:1;35702:65:0;;;19470:21:1;19527:2;19507:18;;;19500:30;19566:25;19546:18;;;19539:53;19609:18;;35702:65:0;19286:347:1;35702:65:0;-1:-1:-1;;;;;35782:32:0;;;;;;:22;:32;;;;;;:37;;;;:89;;-1:-1:-1;;;;;;35823:32:0;;;;;;:22;:32;;;;;;35863:8;;35823:36;;35858:1;;35823:36;:::i;:::-;:48;35782:89;35778:158;;;-1:-1:-1;;;;;;35888:32:0;35923:1;35888:32;;;:22;:32;;;;;:36;35519:424::o;21144:346::-;-1:-1:-1;;;;;21224:16:0;;21216:61;;;;-1:-1:-1;;;21216:61:0;;21435:2:1;21216:61:0;;;21417:21:1;;;21454:18;;;21447:30;21513:34;21493:18;;;21486:62;21565:18;;21216:61:0;21233:356:1;21216:61:0;21297:16;21305:7;21297;:16::i;:::-;21296:17;21288:58;;;;-1:-1:-1;;;21288:58:0;;16077:2:1;21288:58:0;;;16059:21:1;16116:2;16096:18;;;16089:30;16155;16135:18;;;16128:58;16203:18;;21288:58:0;15875:352:1;21288:58:0;21359:45;21388:1;21392:2;21396:7;21359:20;:45::i;:::-;21415:7;:16;;;;;;;-1:-1:-1;21415:16:0;;;;;;;-1:-1:-1;;;;;;21415:16:0;-1:-1:-1;;;;;21415:16:0;;;;;;;;21449:33;;21474:7;;-1:-1:-1;21449:33:0;;-1:-1:-1;;21449:33:0;21144:346;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:406:1;78:5;112:18;104:6;101:30;98:56;;;134:18;;:::i;:::-;172:57;217:2;196:15;;-1:-1:-1;;192:29:1;223:4;188:40;172:57;:::i;:::-;163:66;;252:6;245:5;238:21;292:3;283:6;278:3;274:16;271:25;268:45;;;309:1;306;299:12;268:45;358:6;353:3;346:4;339:5;335:16;322:43;412:1;405:4;396:6;389:5;385:18;381:29;374:40;14:406;;;;;:::o;425:173::-;493:20;;-1:-1:-1;;;;;542:31:1;;532:42;;522:70;;588:1;585;578:12;603:1562;666:5;719:3;712:4;704:6;700:17;696:27;686:55;;737:1;734;727:12;686:55;773:6;760:20;800:60;816:43;856:2;816:43;:::i;:::-;800:60;:::i;:::-;882:3;906:2;901:3;894:15;934:4;929:3;925:14;918:21;;971:4;963:6;959:17;1027:3;1020:4;1014:2;1011:1;1007:10;999:6;995:23;991:34;988:43;985:63;;;1044:1;1041;1034:12;985:63;1066:1;1076:1060;1090:2;1087:1;1084:9;1076:1060;;;1145:18;1201:2;1195:3;1182:17;1179:25;1176:45;;;1217:1;1214;1207:12;1176:45;1269:3;1256:17;1248:6;1244:30;1314:3;1309:2;1305;1301:11;1297:21;1287:49;;1332:1;1329;1322:12;1287:49;1380:4;1376:2;1372:13;1359:27;1412:60;1428:43;1468:2;1428:43;:::i;1412:60::-;1498:5;1530:2;1523:5;1516:17;1566:4;1559:5;1555:16;1546:25;;1605:2;1601;1597:11;1657:3;1652:2;1646;1643:1;1639:10;1635:2;1631:19;1627:28;1624:37;1621:57;;;1674:1;1671;1664:12;1621:57;1702:1;1716:311;1732:2;1727:3;1724:11;1716:311;;;1816:2;1808:5;1795:19;1792:27;1789:47;;;1832:1;1829;1822:12;1789:47;1867:61;1924:3;1919:2;1910:5;1897:19;1893:2;1889:28;1885:37;1867:61;:::i;:::-;1853:76;;1966:4;1955:16;;;;1997;;;;;1754:1;1745:11;1716:311;;;-1:-1:-1;;2040:18:1;;-1:-1:-1;;2087:4:1;2078:14;;;;2112;;;;;-1:-1:-1;;1108:1:1;1101:9;1076:1060;;;-1:-1:-1;2154:5:1;;603:1562;-1:-1:-1;;;;;;603:1562:1:o;2170:221::-;2213:5;2266:3;2259:4;2251:6;2247:17;2243:27;2233:55;;2284:1;2281;2274:12;2233:55;2306:79;2381:3;2372:6;2359:20;2352:4;2344:6;2340:17;2306:79;:::i;:::-;2297:88;2170:221;-1:-1:-1;;;2170:221:1:o;2396:159::-;2463:20;;2523:6;2512:18;;2502:29;;2492:57;;2545:1;2542;2535:12;2560:186;2619:6;2672:2;2660:9;2651:7;2647:23;2643:32;2640:52;;;2688:1;2685;2678:12;2640:52;2711:29;2730:9;2711:29;:::i;2751:260::-;2819:6;2827;2880:2;2868:9;2859:7;2855:23;2851:32;2848:52;;;2896:1;2893;2886:12;2848:52;2919:29;2938:9;2919:29;:::i;:::-;2909:39;;2967:38;3001:2;2990:9;2986:18;2967:38;:::i;:::-;2957:48;;2751:260;;;;;:::o;3016:328::-;3093:6;3101;3109;3162:2;3150:9;3141:7;3137:23;3133:32;3130:52;;;3178:1;3175;3168:12;3130:52;3201:29;3220:9;3201:29;:::i;:::-;3191:39;;3249:38;3283:2;3272:9;3268:18;3249:38;:::i;:::-;3239:48;;3334:2;3323:9;3319:18;3306:32;3296:42;;3016:328;;;;;:::o;3349:666::-;3444:6;3452;3460;3468;3521:3;3509:9;3500:7;3496:23;3492:33;3489:53;;;3538:1;3535;3528:12;3489:53;3561:29;3580:9;3561:29;:::i;:::-;3551:39;;3609:38;3643:2;3632:9;3628:18;3609:38;:::i;:::-;3599:48;;3694:2;3683:9;3679:18;3666:32;3656:42;;3749:2;3738:9;3734:18;3721:32;3776:18;3768:6;3765:30;3762:50;;;3808:1;3805;3798:12;3762:50;3831:22;;3884:4;3876:13;;3872:27;-1:-1:-1;3862:55:1;;3913:1;3910;3903:12;3862:55;3936:73;4001:7;3996:2;3983:16;3978:2;3974;3970:11;3936:73;:::i;:::-;3926:83;;;3349:666;;;;;;;:::o;4020:347::-;4085:6;4093;4146:2;4134:9;4125:7;4121:23;4117:32;4114:52;;;4162:1;4159;4152:12;4114:52;4185:29;4204:9;4185:29;:::i;:::-;4175:39;;4264:2;4253:9;4249:18;4236:32;4311:5;4304:13;4297:21;4290:5;4287:32;4277:60;;4333:1;4330;4323:12;4277:60;4356:5;4346:15;;;4020:347;;;;;:::o;4372:258::-;4439:6;4447;4500:2;4488:9;4479:7;4475:23;4471:32;4468:52;;;4516:1;4513;4506:12;4468:52;4539:29;4558:9;4539:29;:::i;:::-;4529:39;;4587:37;4620:2;4609:9;4605:18;4587:37;:::i;4635:254::-;4703:6;4711;4764:2;4752:9;4743:7;4739:23;4735:32;4732:52;;;4780:1;4777;4770:12;4732:52;4803:29;4822:9;4803:29;:::i;:::-;4793:39;4879:2;4864:18;;;;4851:32;;-1:-1:-1;;;4635:254:1:o;4894:1201::-;5047:6;5055;5108:2;5096:9;5087:7;5083:23;5079:32;5076:52;;;5124:1;5121;5114:12;5076:52;5164:9;5151:23;5193:18;5234:2;5226:6;5223:14;5220:34;;;5250:1;5247;5240:12;5220:34;5288:6;5277:9;5273:22;5263:32;;5333:7;5326:4;5322:2;5318:13;5314:27;5304:55;;5355:1;5352;5345:12;5304:55;5391:2;5378:16;5413:4;5437:60;5453:43;5493:2;5453:43;:::i;5437:60::-;5519:3;5543:2;5538:3;5531:15;5571:2;5566:3;5562:12;5555:19;;5602:2;5598;5594:11;5650:7;5645:2;5639;5636:1;5632:10;5628:2;5624:19;5620:28;5617:41;5614:61;;;5671:1;5668;5661:12;5614:61;5693:1;5684:10;;5703:169;5717:2;5714:1;5711:9;5703:169;;;5774:23;5793:3;5774:23;:::i;:::-;5762:36;;5735:1;5728:9;;;;;5818:12;;;;5850;;5703:169;;;-1:-1:-1;5891:5:1;-1:-1:-1;;5934:18:1;;5921:32;;-1:-1:-1;;5965:16:1;;;5962:36;;;5994:1;5991;5984:12;5962:36;;6017:72;6081:7;6070:8;6059:9;6055:24;6017:72;:::i;:::-;6007:82;;;4894:1201;;;;;:::o;6100:902::-;6184:6;6215:2;6258;6246:9;6237:7;6233:23;6229:32;6226:52;;;6274:1;6271;6264:12;6226:52;6314:9;6301:23;6347:18;6339:6;6336:30;6333:50;;;6379:1;6376;6369:12;6333:50;6402:22;;6455:4;6447:13;;6443:27;-1:-1:-1;6433:55:1;;6484:1;6481;6474:12;6433:55;6520:2;6507:16;6543:60;6559:43;6599:2;6559:43;:::i;6543:60::-;6625:3;6649:2;6644:3;6637:15;6677:2;6672:3;6668:12;6661:19;;6708:2;6704;6700:11;6756:7;6751:2;6745;6742:1;6738:10;6734:2;6730:19;6726:28;6723:41;6720:61;;;6777:1;6774;6767:12;6720:61;6799:1;6790:10;;6809:163;6823:2;6820:1;6817:9;6809:163;;;6880:17;;6868:30;;6841:1;6834:9;;;;;6918:12;;;;6950;;6809:163;;;-1:-1:-1;6991:5:1;6100:902;-1:-1:-1;;;;;;;6100:902:1:o;7007:180::-;7066:6;7119:2;7107:9;7098:7;7094:23;7090:32;7087:52;;;7135:1;7132;7125:12;7087:52;-1:-1:-1;7158:23:1;;7007:180;-1:-1:-1;7007:180:1:o;7192:245::-;7250:6;7303:2;7291:9;7282:7;7278:23;7274:32;7271:52;;;7319:1;7316;7309:12;7271:52;7358:9;7345:23;7377:30;7401:5;7377:30;:::i;7442:249::-;7511:6;7564:2;7552:9;7543:7;7539:23;7535:32;7532:52;;;7580:1;7577;7570:12;7532:52;7612:9;7606:16;7631:30;7655:5;7631:30;:::i;7696:322::-;7765:6;7818:2;7806:9;7797:7;7793:23;7789:32;7786:52;;;7834:1;7831;7824:12;7786:52;7874:9;7861:23;7907:18;7899:6;7896:30;7893:50;;;7939:1;7936;7929:12;7893:50;7962;8004:7;7995:6;7984:9;7980:22;7962:50;:::i;8023:468::-;8109:6;8117;8125;8178:2;8166:9;8157:7;8153:23;8149:32;8146:52;;;8194:1;8191;8184:12;8146:52;8234:9;8221:23;8267:18;8259:6;8256:30;8253:50;;;8299:1;8296;8289:12;8253:50;8322;8364:7;8355:6;8344:9;8340:22;8322:50;:::i;:::-;8312:60;;;8391:38;8425:2;8414:9;8410:18;8391:38;:::i;:::-;8381:48;;8448:37;8481:2;8470:9;8466:18;8448:37;:::i;:::-;8438:47;;8023:468;;;;;:::o;8496:616::-;8599:6;8607;8615;8623;8631;8684:3;8672:9;8663:7;8659:23;8655:33;8652:53;;;8701:1;8698;8691:12;8652:53;8741:9;8728:23;8774:18;8766:6;8763:30;8760:50;;;8806:1;8803;8796:12;8760:50;8829;8871:7;8862:6;8851:9;8847:22;8829:50;:::i;:::-;8819:60;;;8898:38;8932:2;8921:9;8917:18;8898:38;:::i;:::-;8888:48;;8955:37;8988:2;8977:9;8973:18;8955:37;:::i;:::-;8945:47;;9011:38;9045:2;9034:9;9030:18;9011:38;:::i;:::-;9001:48;;9068:38;9101:3;9090:9;9086:19;9068:38;:::i;:::-;9058:48;;8496:616;;;;;;;;:::o;9117:543::-;9205:6;9213;9266:2;9254:9;9245:7;9241:23;9237:32;9234:52;;;9282:1;9279;9272:12;9234:52;9322:9;9309:23;9351:18;9392:2;9384:6;9381:14;9378:34;;;9408:1;9405;9398:12;9378:34;9431:50;9473:7;9464:6;9453:9;9449:22;9431:50;:::i;:::-;9421:60;;9534:2;9523:9;9519:18;9506:32;9490:48;;9563:2;9553:8;9550:16;9547:36;;;9579:1;9576;9569:12;9547:36;;9602:52;9646:7;9635:8;9624:9;9620:24;9602:52;:::i;9850:184::-;9920:6;9973:2;9961:9;9952:7;9948:23;9944:32;9941:52;;;9989:1;9986;9979:12;9941:52;-1:-1:-1;10012:16:1;;9850:184;-1:-1:-1;9850:184:1:o;10039:257::-;10080:3;10118:5;10112:12;10145:6;10140:3;10133:19;10161:63;10217:6;10210:4;10205:3;10201:14;10194:4;10187:5;10183:16;10161:63;:::i;:::-;10278:2;10257:15;-1:-1:-1;;10253:29:1;10244:39;;;;10285:4;10240:50;;10039:257;-1:-1:-1;;10039:257:1:o;10301:185::-;10343:3;10381:5;10375:12;10396:52;10441:6;10436:3;10429:4;10422:5;10418:16;10396:52;:::i;:::-;10464:16;;;;;10301:185;-1:-1:-1;;10301:185:1:o;10743:276::-;10874:3;10912:6;10906:13;10928:53;10974:6;10969:3;10962:4;10954:6;10950:17;10928:53;:::i;:::-;10997:16;;;;;10743:276;-1:-1:-1;;10743:276:1:o;11024:470::-;11203:3;11241:6;11235:13;11257:53;11303:6;11298:3;11291:4;11283:6;11279:17;11257:53;:::i;:::-;11373:13;;11332:16;;;;11395:57;11373:13;11332:16;11429:4;11417:17;;11395:57;:::i;:::-;11468:20;;11024:470;-1:-1:-1;;;;11024:470:1:o;11499:1174::-;11675:3;11704:1;11737:6;11731:13;11767:3;11789:1;11817:9;11813:2;11809:18;11799:28;;11877:2;11866:9;11862:18;11899;11889:61;;11943:4;11935:6;11931:17;11921:27;;11889:61;11969:2;12017;12009:6;12006:14;11986:18;11983:38;11980:165;;;-1:-1:-1;;;12044:33:1;;12100:4;12097:1;12090:15;12130:4;12051:3;12118:17;11980:165;12161:18;12188:104;;;;12306:1;12301:320;;;;12154:467;;12188:104;-1:-1:-1;;12221:24:1;;12209:37;;12266:16;;;;-1:-1:-1;12188:104:1;;12301:320;27253:1;27246:14;;;27290:4;27277:18;;12396:1;12410:165;12424:6;12421:1;12418:13;12410:165;;;12502:14;;12489:11;;;12482:35;12545:16;;;;12439:10;;12410:165;;;12414:3;;12604:6;12599:3;12595:16;12588:23;;12154:467;;;;;;;12637:30;12663:3;12655:6;12637:30;:::i;13144:488::-;-1:-1:-1;;;;;13413:15:1;;;13395:34;;13465:15;;13460:2;13445:18;;13438:43;13512:2;13497:18;;13490:34;;;13560:3;13555:2;13540:18;;13533:31;;;13338:4;;13581:45;;13606:19;;13598:6;13581:45;:::i;:::-;13573:53;13144:488;-1:-1:-1;;;;;;13144:488:1:o;14011:219::-;14160:2;14149:9;14142:21;14123:4;14180:44;14220:2;14209:9;14205:18;14197:6;14180:44;:::i;14235:397::-;14437:2;14419:21;;;14476:2;14456:18;;;14449:30;14515:34;14510:2;14495:18;;14488:62;-1:-1:-1;;;14581:2:1;14566:18;;14559:31;14622:3;14607:19;;14235:397::o;14637:407::-;14839:2;14821:21;;;14878:2;14858:18;;;14851:30;14917:34;14912:2;14897:18;;14890:62;-1:-1:-1;;;14983:2:1;14968:18;;14961:41;15034:3;15019:19;;14637:407::o;15049:414::-;15251:2;15233:21;;;15290:2;15270:18;;;15263:30;15329:34;15324:2;15309:18;;15302:62;-1:-1:-1;;;15395:2:1;15380:18;;15373:48;15453:3;15438:19;;15049:414::o;22357:356::-;22559:2;22541:21;;;22578:18;;;22571:30;22637:34;22632:2;22617:18;;22610:62;22704:2;22689:18;;22357:356::o;24592:413::-;24794:2;24776:21;;;24833:2;24813:18;;;24806:30;24872:34;24867:2;24852:18;;24845:62;-1:-1:-1;;;24938:2:1;24923:18;;24916:47;24995:3;24980:19;;24592:413::o;26712:275::-;26783:2;26777:9;26848:2;26829:13;;-1:-1:-1;;26825:27:1;26813:40;;26883:18;26868:34;;26904:22;;;26865:62;26862:88;;;26930:18;;:::i;:::-;26966:2;26959:22;26712:275;;-1:-1:-1;26712:275:1:o;26992:183::-;27052:4;27085:18;27077:6;27074:30;27071:56;;;27107:18;;:::i;:::-;-1:-1:-1;27152:1:1;27148:14;27164:4;27144:25;;26992:183::o;27306:128::-;27346:3;27377:1;27373:6;27370:1;27367:13;27364:39;;;27383:18;;:::i;:::-;-1:-1:-1;27419:9:1;;27306:128::o;27439:120::-;27479:1;27505;27495:35;;27510:18;;:::i;:::-;-1:-1:-1;27544:9:1;;27439:120::o;27564:125::-;27604:4;27632:1;27629;27626:8;27623:34;;;27637:18;;:::i;:::-;-1:-1:-1;27674:9:1;;27564:125::o;27694:258::-;27766:1;27776:113;27790:6;27787:1;27784:13;27776:113;;;27866:11;;;27860:18;27847:11;;;27840:39;27812:2;27805:10;27776:113;;;27907:6;27904:1;27901:13;27898:48;;;-1:-1:-1;;27942:1:1;27924:16;;27917:27;27694:258::o;27957:380::-;28036:1;28032:12;;;;28079;;;28100:61;;28154:4;28146:6;28142:17;28132:27;;28100:61;28207:2;28199:6;28196:14;28176:18;28173:38;28170:161;;;28253:10;28248:3;28244:20;28241:1;28234:31;28288:4;28285:1;28278:15;28316:4;28313:1;28306:15;28342:135;28381:3;-1:-1:-1;;28402:17:1;;28399:43;;;28422:18;;:::i;:::-;-1:-1:-1;28469:1:1;28458:13;;28342:135::o;28482:175::-;28519:3;28563:4;28556:5;28552:16;28592:4;28583:7;28580:17;28577:43;;;28600:18;;:::i;:::-;28649:1;28636:15;;28482:175;-1:-1:-1;;28482:175:1:o;28662:112::-;28694:1;28720;28710:35;;28725:18;;:::i;:::-;-1:-1:-1;28759:9:1;;28662:112::o;28779:127::-;28840:10;28835:3;28831:20;28828:1;28821:31;28871:4;28868:1;28861:15;28895:4;28892:1;28885:15;28911:127;28972:10;28967:3;28963:20;28960:1;28953:31;29003:4;29000:1;28993:15;29027:4;29024:1;29017:15;29043:127;29104:10;29099:3;29095:20;29092:1;29085:31;29135:4;29132:1;29125:15;29159:4;29156:1;29149:15;29175:127;29236:10;29231:3;29227:20;29224:1;29217:31;29267:4;29264:1;29257:15;29291:4;29288:1;29281:15;29307:131;-1:-1:-1;;;;;;29381:32:1;;29371:43;;29361:71;;29428:1;29425;29418:12
Swarm Source
ipfs://da095bc0dc05dbd1e2ef5d994f3cce4c20d8f0b4f0308f31186f1eae44166155
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.