ERC-721
NFT
Overview
Max Total Supply
7,777 SHERBET
Holders
2,197
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
0 SHERBETLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Sherbet
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-11-24 */ // File: @openzeppelin/contracts/utils/Strings.sol pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/contracts/utils/Address.sol pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: @openzeppelin/contracts/utils/Context.sol pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/token/ERC721/ERC721.sol pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { require(operator != _msgSender(), "ERC721: approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File: @openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol pragma solidity ^0.8.0; /** * @dev This implements an optional extension of {ERC721} defined in the EIP that adds * enumerability of all the token ids in the contract as well as all token ids owned by each * account. */ abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => mapping(uint256 => uint256)) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds"); return _ownedTokens[owner][index]; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds"); return _allTokens[index]; } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` cannot be the zero address. * - `to` cannot be the zero address. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array delete _allTokensIndex[tokenId]; _allTokens.pop(); } } // File: @openzeppelin/contracts/access/Ownable.sol pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _setOwner(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _setOwner(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: contract.sol // Made with love (and lots of sweets) pragma solidity ^0.8.7; /** * @dev Modifier 'onlyOwner' becomes available, where owner is the contract deployer */ /** * @dev ERC721 token standard */ contract Sherbet is Ownable, ERC721Enumerable { uint256 public maxSupply = 7777; uint256 public maxPreSaleMintTotal = 6000; uint256 public cost = 0.077 ether; uint256 private preSaleMints; string public baseTokenURI; bool public preSaleStatus = false; bool public publicSaleStatus = false; constructor( string memory _name, string memory _symbol, string memory _uri ) ERC721(_name, _symbol) { baseTokenURI = _uri; } // --- EVENTS --- event TokenMinted(uint256 tokenId); // --- MAPPINGS --- mapping(address => uint) whitelist; // --- PUBLIC --- /** * @dev Mint tokens through pre or public sale * @param _number - number of tokens to mint */ function mint( uint256 _number ) external payable { require( msg.value == _number * cost, // mint cost "Incorrect funds supplied" ); require( totalSupply() + _number <= maxSupply, "All tokens have been minted" ); if (publicSaleStatus == true) { require( _number > 0 && _number <= 4, // mint limit per tx "Maximum of 4 mints allowed per transaction" ); } else { require( preSaleStatus, // checks pre sale is live "It's not time to mint yet" ); require( _number > 0 && _number <=2, "Maximum of 2 mints allowed per wallet" ); require( whitelist[msg.sender] >= _number, // checks if white listed & mint limit per address is obeyed "Address is not on whitelist or maximum of 2 mints per address has been reached" ); require( preSaleMints + _number <= maxPreSaleMintTotal, // ensures pre sale total mint limit is obeyed "Minting that many would exceed the pre sale minting allocation" ); whitelist[msg.sender] -= _number; // reduces caller's minting allownace by the number of tokens they minted preSaleMints += _number; } for (uint256 i = 0; i < _number; i++) { uint tokenId = totalSupply() + 1; _mint(msg.sender, tokenId); emit TokenMinted(tokenId); } } // --- VIEW --- /** * @dev Returns tokenURI, which is comprised of the baseURI concatenated with the tokenId */ function tokenURI(uint256 _tokenId) public view override returns(string memory) { require( _exists(_tokenId), "ERC721Metadata: URI query for nonexistent token" ); return string(abi.encodePacked(baseTokenURI, Strings.toString(_tokenId))); } /** * @dev Returns uint of how many tokens can be minted currently. Depends on status of pre and public sale */ function maxMintable() public view returns(uint) { if (preSaleStatus == false) { if (publicSaleStatus == true) { return 4; // public sale } return 0; // both false } return 2; // pre sale } // --- ONLY OWNER --- /** * @dev Withdraw all ether from smart contract. Only contract owner can call. * @param _to - address ether will be sent to */ function withdrawAllFunds( address payable _to ) external onlyOwner { require( address(this).balance > 0, "No funds to withdraw" ); _to.transfer(address(this).balance); } /** * @dev Add addresses to white list, giving access to mint 2 tokens at pre sale * @param _addresses - array of address' to add to white list mapping */ function whitelistAddresses( address[] calldata _addresses ) external onlyOwner { for (uint i=0; i<_addresses.length; i++) { whitelist[_addresses[i]] = 2; } } /** * @dev Airdrop 1 token to each address in array '_to' * @param _to - array of address' that tokens will be sent to */ function airDrop( address[] calldata _to ) external onlyOwner { for (uint i=0; i<_to.length; i++) { uint tokenId = totalSupply() + 1; require(tokenId <= maxSupply, "All tokens have been minted"); _mint(_to[i], tokenId); emit TokenMinted(tokenId); } } /** * @dev Set the baseURI string */ function setBaseUri( string memory _newBaseUri ) external onlyOwner { baseTokenURI = _newBaseUri; } /** * @dev Set the cost of minting a token * @param _newCost in Wei. Where 1 Wei = 10^-18 ether */ function setCost( uint _newCost ) external onlyOwner { cost = _newCost; } /** * @dev Set the status of the pre sale, sets publicSaleStatus to false * @param _status boolean where true = live */ function setPreSaleStatus( bool _status ) external onlyOwner { if (publicSaleStatus) { publicSaleStatus = false; } preSaleStatus = _status; } /** * @dev Set the status of the public sale, sets preSaleStatus to false * @param _status boolean where true = live */ function setPublicSaleStatus( bool _status ) external onlyOwner { if (preSaleStatus) { preSaleStatus = false; } publicSaleStatus = _status; } }
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":"_uri","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":false,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"TokenMinted","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":"_to","type":"address[]"}],"name":"airDrop","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":"baseTokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPreSaleMintTotal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_number","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"preSaleStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicSaleStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseUri","type":"string"}],"name":"setBaseUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"}],"name":"setPreSaleStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"}],"name":"setPublicSaleStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_addresses","type":"address[]"}],"name":"whitelistAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_to","type":"address"}],"name":"withdrawAllFunds","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
6080604052611e61600b55611770600c556701118f178fb48000600d556000601060006101000a81548160ff0219169083151502179055506000601060016101000a81548160ff0219169083151502179055503480156200005f57600080fd5b5060405162004dcf38038062004dcf8339818101604052810190620000859190620002f7565b8282620000a76200009b620000fd60201b60201c565b6200010560201b60201c565b8160019080519060200190620000bf929190620001c9565b508060029080519060200190620000d8929190620001c9565b50505080600f9080519060200190620000f3929190620001c9565b5050505062000534565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620001d79062000445565b90600052602060002090601f016020900481019282620001fb576000855562000247565b82601f106200021657805160ff191683800117855562000247565b8280016001018555821562000247579182015b828111156200024657825182559160200191906001019062000229565b5b5090506200025691906200025a565b5090565b5b80821115620002755760008160009055506001016200025b565b5090565b6000620002906200028a84620003d9565b620003b0565b905082815260208101848484011115620002af57620002ae62000514565b5b620002bc8482856200040f565b509392505050565b600082601f830112620002dc57620002db6200050f565b5b8151620002ee84826020860162000279565b91505092915050565b6000806000606084860312156200031357620003126200051e565b5b600084015167ffffffffffffffff81111562000334576200033362000519565b5b6200034286828701620002c4565b935050602084015167ffffffffffffffff81111562000366576200036562000519565b5b6200037486828701620002c4565b925050604084015167ffffffffffffffff81111562000398576200039762000519565b5b620003a686828701620002c4565b9150509250925092565b6000620003bc620003cf565b9050620003ca82826200047b565b919050565b6000604051905090565b600067ffffffffffffffff821115620003f757620003f6620004e0565b5b620004028262000523565b9050602081019050919050565b60005b838110156200042f57808201518184015260208101905062000412565b838111156200043f576000848401525b50505050565b600060028204905060018216806200045e57607f821691505b60208210811415620004755762000474620004b1565b5b50919050565b620004868262000523565b810181811067ffffffffffffffff82111715620004a857620004a7620004e0565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b61488b80620005446000396000f3fe6080604052600436106101f85760003560e01c80636352211e1161010d578063a22cb465116100a0578063c87b56dd1161006f578063c87b56dd1461070d578063d547cfb71461074a578063d5abeb0114610775578063e985e9c5146107a0578063f2fde38b146107dd576101f8565b8063a22cb46514610667578063b423fe6714610690578063b6c693e5146106b9578063b88d4fde146106e4576101f8565b80638da5cb5b116100dc5780638da5cb5b146105cc57806395d89b41146105f7578063a0712d6814610622578063a0bcfc7f1461063e576101f8565b80636352211e1461051057806370a082311461054d578063715018a61461058a57806381a7deae146105a1576101f8565b806323b872dd1161019057806342842e0e1161015f57806342842e0e1461042d57806344a0d68a14610456578063464bd6401461047f5780634f6ccce7146104aa5780635e326b92146104e7576101f8565b806323b872dd146103755780632bf043041461039e5780632f745c59146103c757806332dee40b14610404576101f8565b8063095ea7b3116101cc578063095ea7b3146102cb57806313faede6146102f457806318160ddd1461031f5780632154dc391461034a576101f8565b8062b6849f146101fd57806301ffc9a71461022657806306fdde0314610263578063081812fc1461028e575b600080fd5b34801561020957600080fd5b50610224600480360381019061021f91906131ba565b610806565b005b34801561023257600080fd5b5061024d60048036038101906102489190613234565b61096e565b60405161025a919061386c565b60405180910390f35b34801561026f57600080fd5b506102786109e8565b6040516102859190613887565b60405180910390f35b34801561029a57600080fd5b506102b560048036038101906102b091906132d7565b610a7a565b6040516102c29190613805565b60405180910390f35b3480156102d757600080fd5b506102f260048036038101906102ed919061317a565b610aff565b005b34801561030057600080fd5b50610309610c17565b6040516103169190613be9565b60405180910390f35b34801561032b57600080fd5b50610334610c1d565b6040516103419190613be9565b60405180910390f35b34801561035657600080fd5b5061035f610c2a565b60405161036c9190613be9565b60405180910390f35b34801561038157600080fd5b5061039c60048036038101906103979190613064565b610c7d565b005b3480156103aa57600080fd5b506103c560048036038101906103c091906131ba565b610cdd565b005b3480156103d357600080fd5b506103ee60048036038101906103e9919061317a565b610deb565b6040516103fb9190613be9565b60405180910390f35b34801561041057600080fd5b5061042b60048036038101906104269190612ff7565b610e90565b005b34801561043957600080fd5b50610454600480360381019061044f9190613064565b610f99565b005b34801561046257600080fd5b5061047d600480360381019061047891906132d7565b610fb9565b005b34801561048b57600080fd5b5061049461103f565b6040516104a1919061386c565b60405180910390f35b3480156104b657600080fd5b506104d160048036038101906104cc91906132d7565b611052565b6040516104de9190613be9565b60405180910390f35b3480156104f357600080fd5b5061050e60048036038101906105099190613207565b6110c3565b005b34801561051c57600080fd5b50610537600480360381019061053291906132d7565b61118d565b6040516105449190613805565b60405180910390f35b34801561055957600080fd5b50610574600480360381019061056f9190612fca565b61123f565b6040516105819190613be9565b60405180910390f35b34801561059657600080fd5b5061059f6112f7565b005b3480156105ad57600080fd5b506105b661137f565b6040516105c39190613be9565b60405180910390f35b3480156105d857600080fd5b506105e1611385565b6040516105ee9190613805565b60405180910390f35b34801561060357600080fd5b5061060c6113ae565b6040516106199190613887565b60405180910390f35b61063c600480360381019061063791906132d7565b611440565b005b34801561064a57600080fd5b506106656004803603810190610660919061328e565b6117b6565b005b34801561067357600080fd5b5061068e6004803603810190610689919061313a565b61184c565b005b34801561069c57600080fd5b506106b760048036038101906106b29190613207565b6119cd565b005b3480156106c557600080fd5b506106ce611a97565b6040516106db919061386c565b60405180910390f35b3480156106f057600080fd5b5061070b600480360381019061070691906130b7565b611aaa565b005b34801561071957600080fd5b50610734600480360381019061072f91906132d7565b611b0c565b6040516107419190613887565b60405180910390f35b34801561075657600080fd5b5061075f611b88565b60405161076c9190613887565b60405180910390f35b34801561078157600080fd5b5061078a611c16565b6040516107979190613be9565b60405180910390f35b3480156107ac57600080fd5b506107c760048036038101906107c29190613024565b611c1c565b6040516107d4919061386c565b60405180910390f35b3480156107e957600080fd5b5061080460048036038101906107ff9190612fca565b611cb0565b005b61080e611da8565b73ffffffffffffffffffffffffffffffffffffffff1661082c611385565b73ffffffffffffffffffffffffffffffffffffffff1614610882576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087990613ac9565b60405180910390fd5b60005b82829050811015610969576000600161089c610c1d565b6108a69190613ce3565b9050600b548111156108ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108e490613bc9565b60405180910390fd5b61091e84848481811061090357610902614059565b5b90506020020160208101906109189190612fca565b82611db0565b7ff00d28232b285f24f2e38415deb2ceb31069e70d4505838b3911b4f02058502e8160405161094d9190613be9565b60405180910390a150808061096190613f23565b915050610885565b505050565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109e157506109e082611f7e565b5b9050919050565b6060600180546109f790613ec0565b80601f0160208091040260200160405190810160405280929190818152602001828054610a2390613ec0565b8015610a705780601f10610a4557610100808354040283529160200191610a70565b820191906000526020600020905b815481529060010190602001808311610a5357829003601f168201915b5050505050905090565b6000610a8582612060565b610ac4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610abb90613a89565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b0a8261118d565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7290613b29565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b9a611da8565b73ffffffffffffffffffffffffffffffffffffffff161480610bc95750610bc881610bc3611da8565b611c1c565b5b610c08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bff906139e9565b60405180910390fd5b610c1283836120cc565b505050565b600d5481565b6000600980549050905090565b6000801515601060009054906101000a900460ff1615151415610c755760011515601060019054906101000a900460ff1615151415610c6c5760049050610c7a565b60009050610c7a565b600290505b90565b610c8e610c88611da8565b82612185565b610ccd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc490613b69565b60405180910390fd5b610cd8838383612263565b505050565b610ce5611da8565b73ffffffffffffffffffffffffffffffffffffffff16610d03611385565b73ffffffffffffffffffffffffffffffffffffffff1614610d59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5090613ac9565b60405180910390fd5b60005b82829050811015610de657600260116000858585818110610d8057610d7f614059565b5b9050602002016020810190610d959190612fca565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508080610dde90613f23565b915050610d5c565b505050565b6000610df68361123f565b8210610e37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2e906138a9565b60405180910390fd5b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610e98611da8565b73ffffffffffffffffffffffffffffffffffffffff16610eb6611385565b73ffffffffffffffffffffffffffffffffffffffff1614610f0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0390613ac9565b60405180910390fd5b60004711610f4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f46906139a9565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610f95573d6000803e3d6000fd5b5050565b610fb483838360405180602001604052806000815250611aaa565b505050565b610fc1611da8565b73ffffffffffffffffffffffffffffffffffffffff16610fdf611385565b73ffffffffffffffffffffffffffffffffffffffff1614611035576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102c90613ac9565b60405180910390fd5b80600d8190555050565b601060009054906101000a900460ff1681565b600061105c610c1d565b821061109d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109490613b89565b60405180910390fd5b600982815481106110b1576110b0614059565b5b90600052602060002001549050919050565b6110cb611da8565b73ffffffffffffffffffffffffffffffffffffffff166110e9611385565b73ffffffffffffffffffffffffffffffffffffffff161461113f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113690613ac9565b60405180910390fd5b601060019054906101000a900460ff1615611170576000601060016101000a81548160ff0219169083151502179055505b80601060006101000a81548160ff02191690831515021790555050565b6000806003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611236576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122d90613a49565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156112b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a790613a29565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6112ff611da8565b73ffffffffffffffffffffffffffffffffffffffff1661131d611385565b73ffffffffffffffffffffffffffffffffffffffff1614611373576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136a90613ac9565b60405180910390fd5b61137d60006124bf565b565b600c5481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600280546113bd90613ec0565b80601f01602080910402602001604051908101604052809291908181526020018280546113e990613ec0565b80156114365780601f1061140b57610100808354040283529160200191611436565b820191906000526020600020905b81548152906001019060200180831161141957829003601f168201915b5050505050905090565b600d548161144e9190613d6a565b341461148f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148690613ba9565b60405180910390fd5b600b548161149b610c1d565b6114a59190613ce3565b11156114e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114dd90613bc9565b60405180910390fd5b60011515601060019054906101000a900460ff161515141561155757600081118015611513575060048111155b611552576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154990613a09565b60405180910390fd5b61173a565b601060009054906101000a900460ff166115a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159d90613b49565b60405180910390fd5b6000811180156115b7575060028111155b6115f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ed90613929565b60405180910390fd5b80601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015611678576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166f90613989565b60405180910390fd5b600c5481600e546116899190613ce3565b11156116ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c190613aa9565b60405180910390fd5b80601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546117199190613dc4565b9250508190555080600e60008282546117329190613ce3565b925050819055505b60005b818110156117b25760006001611751610c1d565b61175b9190613ce3565b90506117673382611db0565b7ff00d28232b285f24f2e38415deb2ceb31069e70d4505838b3911b4f02058502e816040516117969190613be9565b60405180910390a15080806117aa90613f23565b91505061173d565b5050565b6117be611da8565b73ffffffffffffffffffffffffffffffffffffffff166117dc611385565b73ffffffffffffffffffffffffffffffffffffffff1614611832576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182990613ac9565b60405180910390fd5b80600f9080519060200190611848929190612d73565b5050565b611854611da8565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156118c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b990613969565b60405180910390fd5b80600660006118cf611da8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661197c611da8565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516119c1919061386c565b60405180910390a35050565b6119d5611da8565b73ffffffffffffffffffffffffffffffffffffffff166119f3611385565b73ffffffffffffffffffffffffffffffffffffffff1614611a49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4090613ac9565b60405180910390fd5b601060009054906101000a900460ff1615611a7a576000601060006101000a81548160ff0219169083151502179055505b80601060016101000a81548160ff02191690831515021790555050565b601060019054906101000a900460ff1681565b611abb611ab5611da8565b83612185565b611afa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af190613b69565b60405180910390fd5b611b0684848484612583565b50505050565b6060611b1782612060565b611b56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4d90613b09565b60405180910390fd5b600f611b61836125df565b604051602001611b729291906137e1565b6040516020818303038152906040529050919050565b600f8054611b9590613ec0565b80601f0160208091040260200160405190810160405280929190818152602001828054611bc190613ec0565b8015611c0e5780601f10611be357610100808354040283529160200191611c0e565b820191906000526020600020905b815481529060010190602001808311611bf157829003601f168201915b505050505081565b600b5481565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611cb8611da8565b73ffffffffffffffffffffffffffffffffffffffff16611cd6611385565b73ffffffffffffffffffffffffffffffffffffffff1614611d2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2390613ac9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611d9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d93906138e9565b60405180910390fd5b611da5816124bf565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611e20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1790613a69565b60405180910390fd5b611e2981612060565b15611e69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6090613909565b60405180910390fd5b611e7560008383612740565b6001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611ec59190613ce3565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061204957507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612059575061205882612854565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661213f8361118d565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061219082612060565b6121cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121c6906139c9565b60405180910390fd5b60006121da8361118d565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061224957508373ffffffffffffffffffffffffffffffffffffffff1661223184610a7a565b73ffffffffffffffffffffffffffffffffffffffff16145b8061225a57506122598185611c1c565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166122838261118d565b73ffffffffffffffffffffffffffffffffffffffff16146122d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122d090613ae9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612349576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234090613949565b60405180910390fd5b612354838383612740565b61235f6000826120cc565b6001600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546123af9190613dc4565b925050819055506001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124069190613ce3565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61258e848484612263565b61259a848484846128be565b6125d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125d0906138c9565b60405180910390fd5b50505050565b60606000821415612627576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061273b565b600082905060005b6000821461265957808061264290613f23565b915050600a826126529190613d39565b915061262f565b60008167ffffffffffffffff81111561267557612674614088565b5b6040519080825280601f01601f1916602001820160405280156126a75781602001600182028036833780820191505090505b5090505b60008514612734576001826126c09190613dc4565b9150600a856126cf9190613f6c565b60306126db9190613ce3565b60f81b8183815181106126f1576126f0614059565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561272d9190613d39565b94506126ab565b8093505050505b919050565b61274b838383612a55565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561278e5761278981612a5a565b6127cd565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146127cc576127cb8382612aa3565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156128105761280b81612c10565b61284f565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461284e5761284d8282612ce1565b5b5b505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60006128df8473ffffffffffffffffffffffffffffffffffffffff16612d60565b15612a48578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612908611da8565b8786866040518563ffffffff1660e01b815260040161292a9493929190613820565b602060405180830381600087803b15801561294457600080fd5b505af192505050801561297557506040513d601f19601f820116820180604052508101906129729190613261565b60015b6129f8573d80600081146129a5576040519150601f19603f3d011682016040523d82523d6000602084013e6129aa565b606091505b506000815114156129f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129e7906138c9565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612a4d565b600190505b949350505050565b505050565b600980549050600a600083815260200190815260200160002081905550600981908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612ab08461123f565b612aba9190613dc4565b9050600060086000848152602001908152602001600020549050818114612b9f576000600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816008600083815260200190815260200160002081905550505b6008600084815260200190815260200160002060009055600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600980549050612c249190613dc4565b90506000600a6000848152602001908152602001600020549050600060098381548110612c5457612c53614059565b5b906000526020600020015490508060098381548110612c7657612c75614059565b5b906000526020600020018190555081600a600083815260200190815260200160002081905550600a6000858152602001908152602001600020600090556009805480612cc557612cc461402a565b5b6001900381819060005260206000200160009055905550505050565b6000612cec8361123f565b905081600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806008600084815260200190815260200160002081905550505050565b600080823b905060008111915050919050565b828054612d7f90613ec0565b90600052602060002090601f016020900481019282612da15760008555612de8565b82601f10612dba57805160ff1916838001178555612de8565b82800160010185558215612de8579182015b82811115612de7578251825591602001919060010190612dcc565b5b509050612df59190612df9565b5090565b5b80821115612e12576000816000905550600101612dfa565b5090565b6000612e29612e2484613c29565b613c04565b905082815260208101848484011115612e4557612e446140c6565b5b612e50848285613e7e565b509392505050565b6000612e6b612e6684613c5a565b613c04565b905082815260208101848484011115612e8757612e866140c6565b5b612e92848285613e7e565b509392505050565b600081359050612ea9816147e2565b92915050565b600081359050612ebe816147f9565b92915050565b60008083601f840112612eda57612ed96140bc565b5b8235905067ffffffffffffffff811115612ef757612ef66140b7565b5b602083019150836020820283011115612f1357612f126140c1565b5b9250929050565b600081359050612f2981614810565b92915050565b600081359050612f3e81614827565b92915050565b600081519050612f5381614827565b92915050565b600082601f830112612f6e57612f6d6140bc565b5b8135612f7e848260208601612e16565b91505092915050565b600082601f830112612f9c57612f9b6140bc565b5b8135612fac848260208601612e58565b91505092915050565b600081359050612fc48161483e565b92915050565b600060208284031215612fe057612fdf6140d0565b5b6000612fee84828501612e9a565b91505092915050565b60006020828403121561300d5761300c6140d0565b5b600061301b84828501612eaf565b91505092915050565b6000806040838503121561303b5761303a6140d0565b5b600061304985828601612e9a565b925050602061305a85828601612e9a565b9150509250929050565b60008060006060848603121561307d5761307c6140d0565b5b600061308b86828701612e9a565b935050602061309c86828701612e9a565b92505060406130ad86828701612fb5565b9150509250925092565b600080600080608085870312156130d1576130d06140d0565b5b60006130df87828801612e9a565b94505060206130f087828801612e9a565b935050604061310187828801612fb5565b925050606085013567ffffffffffffffff811115613122576131216140cb565b5b61312e87828801612f59565b91505092959194509250565b60008060408385031215613151576131506140d0565b5b600061315f85828601612e9a565b925050602061317085828601612f1a565b9150509250929050565b60008060408385031215613191576131906140d0565b5b600061319f85828601612e9a565b92505060206131b085828601612fb5565b9150509250929050565b600080602083850312156131d1576131d06140d0565b5b600083013567ffffffffffffffff8111156131ef576131ee6140cb565b5b6131fb85828601612ec4565b92509250509250929050565b60006020828403121561321d5761321c6140d0565b5b600061322b84828501612f1a565b91505092915050565b60006020828403121561324a576132496140d0565b5b600061325884828501612f2f565b91505092915050565b600060208284031215613277576132766140d0565b5b600061328584828501612f44565b91505092915050565b6000602082840312156132a4576132a36140d0565b5b600082013567ffffffffffffffff8111156132c2576132c16140cb565b5b6132ce84828501612f87565b91505092915050565b6000602082840312156132ed576132ec6140d0565b5b60006132fb84828501612fb5565b91505092915050565b61330d81613df8565b82525050565b61331c81613e1c565b82525050565b600061332d82613ca0565b6133378185613cb6565b9350613347818560208601613e8d565b613350816140d5565b840191505092915050565b600061336682613cab565b6133708185613cc7565b9350613380818560208601613e8d565b613389816140d5565b840191505092915050565b600061339f82613cab565b6133a98185613cd8565b93506133b9818560208601613e8d565b80840191505092915050565b600081546133d281613ec0565b6133dc8186613cd8565b945060018216600081146133f757600181146134085761343b565b60ff1983168652818601935061343b565b61341185613c8b565b60005b8381101561343357815481890152600182019150602081019050613414565b838801955050505b50505092915050565b6000613451602b83613cc7565b915061345c826140e6565b604082019050919050565b6000613474603283613cc7565b915061347f82614135565b604082019050919050565b6000613497602683613cc7565b91506134a282614184565b604082019050919050565b60006134ba601c83613cc7565b91506134c5826141d3565b602082019050919050565b60006134dd602583613cc7565b91506134e8826141fc565b604082019050919050565b6000613500602483613cc7565b915061350b8261424b565b604082019050919050565b6000613523601983613cc7565b915061352e8261429a565b602082019050919050565b6000613546604e83613cc7565b9150613551826142c3565b606082019050919050565b6000613569601483613cc7565b915061357482614338565b602082019050919050565b600061358c602c83613cc7565b915061359782614361565b604082019050919050565b60006135af603883613cc7565b91506135ba826143b0565b604082019050919050565b60006135d2602a83613cc7565b91506135dd826143ff565b604082019050919050565b60006135f5602a83613cc7565b91506136008261444e565b604082019050919050565b6000613618602983613cc7565b91506136238261449d565b604082019050919050565b600061363b602083613cc7565b9150613646826144ec565b602082019050919050565b600061365e602c83613cc7565b915061366982614515565b604082019050919050565b6000613681603e83613cc7565b915061368c82614564565b604082019050919050565b60006136a4602083613cc7565b91506136af826145b3565b602082019050919050565b60006136c7602983613cc7565b91506136d2826145dc565b604082019050919050565b60006136ea602f83613cc7565b91506136f58261462b565b604082019050919050565b600061370d602183613cc7565b91506137188261467a565b604082019050919050565b6000613730601983613cc7565b915061373b826146c9565b602082019050919050565b6000613753603183613cc7565b915061375e826146f2565b604082019050919050565b6000613776602c83613cc7565b915061378182614741565b604082019050919050565b6000613799601883613cc7565b91506137a482614790565b602082019050919050565b60006137bc601b83613cc7565b91506137c7826147b9565b602082019050919050565b6137db81613e74565b82525050565b60006137ed82856133c5565b91506137f98284613394565b91508190509392505050565b600060208201905061381a6000830184613304565b92915050565b60006080820190506138356000830187613304565b6138426020830186613304565b61384f60408301856137d2565b81810360608301526138618184613322565b905095945050505050565b60006020820190506138816000830184613313565b92915050565b600060208201905081810360008301526138a1818461335b565b905092915050565b600060208201905081810360008301526138c281613444565b9050919050565b600060208201905081810360008301526138e281613467565b9050919050565b600060208201905081810360008301526139028161348a565b9050919050565b60006020820190508181036000830152613922816134ad565b9050919050565b60006020820190508181036000830152613942816134d0565b9050919050565b60006020820190508181036000830152613962816134f3565b9050919050565b6000602082019050818103600083015261398281613516565b9050919050565b600060208201905081810360008301526139a281613539565b9050919050565b600060208201905081810360008301526139c28161355c565b9050919050565b600060208201905081810360008301526139e28161357f565b9050919050565b60006020820190508181036000830152613a02816135a2565b9050919050565b60006020820190508181036000830152613a22816135c5565b9050919050565b60006020820190508181036000830152613a42816135e8565b9050919050565b60006020820190508181036000830152613a628161360b565b9050919050565b60006020820190508181036000830152613a828161362e565b9050919050565b60006020820190508181036000830152613aa281613651565b9050919050565b60006020820190508181036000830152613ac281613674565b9050919050565b60006020820190508181036000830152613ae281613697565b9050919050565b60006020820190508181036000830152613b02816136ba565b9050919050565b60006020820190508181036000830152613b22816136dd565b9050919050565b60006020820190508181036000830152613b4281613700565b9050919050565b60006020820190508181036000830152613b6281613723565b9050919050565b60006020820190508181036000830152613b8281613746565b9050919050565b60006020820190508181036000830152613ba281613769565b9050919050565b60006020820190508181036000830152613bc28161378c565b9050919050565b60006020820190508181036000830152613be2816137af565b9050919050565b6000602082019050613bfe60008301846137d2565b92915050565b6000613c0e613c1f565b9050613c1a8282613ef2565b919050565b6000604051905090565b600067ffffffffffffffff821115613c4457613c43614088565b5b613c4d826140d5565b9050602081019050919050565b600067ffffffffffffffff821115613c7557613c74614088565b5b613c7e826140d5565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613cee82613e74565b9150613cf983613e74565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613d2e57613d2d613f9d565b5b828201905092915050565b6000613d4482613e74565b9150613d4f83613e74565b925082613d5f57613d5e613fcc565b5b828204905092915050565b6000613d7582613e74565b9150613d8083613e74565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613db957613db8613f9d565b5b828202905092915050565b6000613dcf82613e74565b9150613dda83613e74565b925082821015613ded57613dec613f9d565b5b828203905092915050565b6000613e0382613e54565b9050919050565b6000613e1582613e54565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613eab578082015181840152602081019050613e90565b83811115613eba576000848401525b50505050565b60006002820490506001821680613ed857607f821691505b60208210811415613eec57613eeb613ffb565b5b50919050565b613efb826140d5565b810181811067ffffffffffffffff82111715613f1a57613f19614088565b5b80604052505050565b6000613f2e82613e74565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613f6157613f60613f9d565b5b600182019050919050565b6000613f7782613e74565b9150613f8283613e74565b925082613f9257613f91613fcc565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4d6178696d756d206f662032206d696e747320616c6c6f77656420706572207760008201527f616c6c6574000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f41646472657373206973206e6f74206f6e2077686974656c697374206f72206d60008201527f6178696d756d206f662032206d696e747320706572206164647265737320686160208201527f73206265656e2072656163686564000000000000000000000000000000000000604082015250565b7f4e6f2066756e647320746f207769746864726177000000000000000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4d6178696d756d206f662034206d696e747320616c6c6f77656420706572207460008201527f72616e73616374696f6e00000000000000000000000000000000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4d696e74696e672074686174206d616e7920776f756c6420657863656564207460008201527f6865207072652073616c65206d696e74696e6720616c6c6f636174696f6e0000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f49742773206e6f742074696d6520746f206d696e742079657400000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f496e636f72726563742066756e647320737570706c6965640000000000000000600082015250565b7f416c6c20746f6b656e732068617665206265656e206d696e7465640000000000600082015250565b6147eb81613df8565b81146147f657600080fd5b50565b61480281613e0a565b811461480d57600080fd5b50565b61481981613e1c565b811461482457600080fd5b50565b61483081613e28565b811461483b57600080fd5b50565b61484781613e74565b811461485257600080fd5b5056fea2646970667358221220ee8ceba3cbfaf53f92f6f4f4a31454604910ca38eae5534f15e422f14b5bbca764736f6c63430008070033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000007536865726265740000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000075348455242455400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001f68747470733a2f2f6170692e736865726265742e636f6d2f746f6b656e732f00
Deployed Bytecode
0x6080604052600436106101f85760003560e01c80636352211e1161010d578063a22cb465116100a0578063c87b56dd1161006f578063c87b56dd1461070d578063d547cfb71461074a578063d5abeb0114610775578063e985e9c5146107a0578063f2fde38b146107dd576101f8565b8063a22cb46514610667578063b423fe6714610690578063b6c693e5146106b9578063b88d4fde146106e4576101f8565b80638da5cb5b116100dc5780638da5cb5b146105cc57806395d89b41146105f7578063a0712d6814610622578063a0bcfc7f1461063e576101f8565b80636352211e1461051057806370a082311461054d578063715018a61461058a57806381a7deae146105a1576101f8565b806323b872dd1161019057806342842e0e1161015f57806342842e0e1461042d57806344a0d68a14610456578063464bd6401461047f5780634f6ccce7146104aa5780635e326b92146104e7576101f8565b806323b872dd146103755780632bf043041461039e5780632f745c59146103c757806332dee40b14610404576101f8565b8063095ea7b3116101cc578063095ea7b3146102cb57806313faede6146102f457806318160ddd1461031f5780632154dc391461034a576101f8565b8062b6849f146101fd57806301ffc9a71461022657806306fdde0314610263578063081812fc1461028e575b600080fd5b34801561020957600080fd5b50610224600480360381019061021f91906131ba565b610806565b005b34801561023257600080fd5b5061024d60048036038101906102489190613234565b61096e565b60405161025a919061386c565b60405180910390f35b34801561026f57600080fd5b506102786109e8565b6040516102859190613887565b60405180910390f35b34801561029a57600080fd5b506102b560048036038101906102b091906132d7565b610a7a565b6040516102c29190613805565b60405180910390f35b3480156102d757600080fd5b506102f260048036038101906102ed919061317a565b610aff565b005b34801561030057600080fd5b50610309610c17565b6040516103169190613be9565b60405180910390f35b34801561032b57600080fd5b50610334610c1d565b6040516103419190613be9565b60405180910390f35b34801561035657600080fd5b5061035f610c2a565b60405161036c9190613be9565b60405180910390f35b34801561038157600080fd5b5061039c60048036038101906103979190613064565b610c7d565b005b3480156103aa57600080fd5b506103c560048036038101906103c091906131ba565b610cdd565b005b3480156103d357600080fd5b506103ee60048036038101906103e9919061317a565b610deb565b6040516103fb9190613be9565b60405180910390f35b34801561041057600080fd5b5061042b60048036038101906104269190612ff7565b610e90565b005b34801561043957600080fd5b50610454600480360381019061044f9190613064565b610f99565b005b34801561046257600080fd5b5061047d600480360381019061047891906132d7565b610fb9565b005b34801561048b57600080fd5b5061049461103f565b6040516104a1919061386c565b60405180910390f35b3480156104b657600080fd5b506104d160048036038101906104cc91906132d7565b611052565b6040516104de9190613be9565b60405180910390f35b3480156104f357600080fd5b5061050e60048036038101906105099190613207565b6110c3565b005b34801561051c57600080fd5b50610537600480360381019061053291906132d7565b61118d565b6040516105449190613805565b60405180910390f35b34801561055957600080fd5b50610574600480360381019061056f9190612fca565b61123f565b6040516105819190613be9565b60405180910390f35b34801561059657600080fd5b5061059f6112f7565b005b3480156105ad57600080fd5b506105b661137f565b6040516105c39190613be9565b60405180910390f35b3480156105d857600080fd5b506105e1611385565b6040516105ee9190613805565b60405180910390f35b34801561060357600080fd5b5061060c6113ae565b6040516106199190613887565b60405180910390f35b61063c600480360381019061063791906132d7565b611440565b005b34801561064a57600080fd5b506106656004803603810190610660919061328e565b6117b6565b005b34801561067357600080fd5b5061068e6004803603810190610689919061313a565b61184c565b005b34801561069c57600080fd5b506106b760048036038101906106b29190613207565b6119cd565b005b3480156106c557600080fd5b506106ce611a97565b6040516106db919061386c565b60405180910390f35b3480156106f057600080fd5b5061070b600480360381019061070691906130b7565b611aaa565b005b34801561071957600080fd5b50610734600480360381019061072f91906132d7565b611b0c565b6040516107419190613887565b60405180910390f35b34801561075657600080fd5b5061075f611b88565b60405161076c9190613887565b60405180910390f35b34801561078157600080fd5b5061078a611c16565b6040516107979190613be9565b60405180910390f35b3480156107ac57600080fd5b506107c760048036038101906107c29190613024565b611c1c565b6040516107d4919061386c565b60405180910390f35b3480156107e957600080fd5b5061080460048036038101906107ff9190612fca565b611cb0565b005b61080e611da8565b73ffffffffffffffffffffffffffffffffffffffff1661082c611385565b73ffffffffffffffffffffffffffffffffffffffff1614610882576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087990613ac9565b60405180910390fd5b60005b82829050811015610969576000600161089c610c1d565b6108a69190613ce3565b9050600b548111156108ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108e490613bc9565b60405180910390fd5b61091e84848481811061090357610902614059565b5b90506020020160208101906109189190612fca565b82611db0565b7ff00d28232b285f24f2e38415deb2ceb31069e70d4505838b3911b4f02058502e8160405161094d9190613be9565b60405180910390a150808061096190613f23565b915050610885565b505050565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109e157506109e082611f7e565b5b9050919050565b6060600180546109f790613ec0565b80601f0160208091040260200160405190810160405280929190818152602001828054610a2390613ec0565b8015610a705780601f10610a4557610100808354040283529160200191610a70565b820191906000526020600020905b815481529060010190602001808311610a5357829003601f168201915b5050505050905090565b6000610a8582612060565b610ac4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610abb90613a89565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b0a8261118d565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7290613b29565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b9a611da8565b73ffffffffffffffffffffffffffffffffffffffff161480610bc95750610bc881610bc3611da8565b611c1c565b5b610c08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bff906139e9565b60405180910390fd5b610c1283836120cc565b505050565b600d5481565b6000600980549050905090565b6000801515601060009054906101000a900460ff1615151415610c755760011515601060019054906101000a900460ff1615151415610c6c5760049050610c7a565b60009050610c7a565b600290505b90565b610c8e610c88611da8565b82612185565b610ccd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc490613b69565b60405180910390fd5b610cd8838383612263565b505050565b610ce5611da8565b73ffffffffffffffffffffffffffffffffffffffff16610d03611385565b73ffffffffffffffffffffffffffffffffffffffff1614610d59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5090613ac9565b60405180910390fd5b60005b82829050811015610de657600260116000858585818110610d8057610d7f614059565b5b9050602002016020810190610d959190612fca565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508080610dde90613f23565b915050610d5c565b505050565b6000610df68361123f565b8210610e37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2e906138a9565b60405180910390fd5b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610e98611da8565b73ffffffffffffffffffffffffffffffffffffffff16610eb6611385565b73ffffffffffffffffffffffffffffffffffffffff1614610f0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0390613ac9565b60405180910390fd5b60004711610f4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f46906139a9565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610f95573d6000803e3d6000fd5b5050565b610fb483838360405180602001604052806000815250611aaa565b505050565b610fc1611da8565b73ffffffffffffffffffffffffffffffffffffffff16610fdf611385565b73ffffffffffffffffffffffffffffffffffffffff1614611035576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102c90613ac9565b60405180910390fd5b80600d8190555050565b601060009054906101000a900460ff1681565b600061105c610c1d565b821061109d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109490613b89565b60405180910390fd5b600982815481106110b1576110b0614059565b5b90600052602060002001549050919050565b6110cb611da8565b73ffffffffffffffffffffffffffffffffffffffff166110e9611385565b73ffffffffffffffffffffffffffffffffffffffff161461113f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113690613ac9565b60405180910390fd5b601060019054906101000a900460ff1615611170576000601060016101000a81548160ff0219169083151502179055505b80601060006101000a81548160ff02191690831515021790555050565b6000806003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611236576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122d90613a49565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156112b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a790613a29565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6112ff611da8565b73ffffffffffffffffffffffffffffffffffffffff1661131d611385565b73ffffffffffffffffffffffffffffffffffffffff1614611373576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136a90613ac9565b60405180910390fd5b61137d60006124bf565b565b600c5481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600280546113bd90613ec0565b80601f01602080910402602001604051908101604052809291908181526020018280546113e990613ec0565b80156114365780601f1061140b57610100808354040283529160200191611436565b820191906000526020600020905b81548152906001019060200180831161141957829003601f168201915b5050505050905090565b600d548161144e9190613d6a565b341461148f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148690613ba9565b60405180910390fd5b600b548161149b610c1d565b6114a59190613ce3565b11156114e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114dd90613bc9565b60405180910390fd5b60011515601060019054906101000a900460ff161515141561155757600081118015611513575060048111155b611552576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154990613a09565b60405180910390fd5b61173a565b601060009054906101000a900460ff166115a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159d90613b49565b60405180910390fd5b6000811180156115b7575060028111155b6115f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ed90613929565b60405180910390fd5b80601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015611678576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166f90613989565b60405180910390fd5b600c5481600e546116899190613ce3565b11156116ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c190613aa9565b60405180910390fd5b80601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546117199190613dc4565b9250508190555080600e60008282546117329190613ce3565b925050819055505b60005b818110156117b25760006001611751610c1d565b61175b9190613ce3565b90506117673382611db0565b7ff00d28232b285f24f2e38415deb2ceb31069e70d4505838b3911b4f02058502e816040516117969190613be9565b60405180910390a15080806117aa90613f23565b91505061173d565b5050565b6117be611da8565b73ffffffffffffffffffffffffffffffffffffffff166117dc611385565b73ffffffffffffffffffffffffffffffffffffffff1614611832576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182990613ac9565b60405180910390fd5b80600f9080519060200190611848929190612d73565b5050565b611854611da8565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156118c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b990613969565b60405180910390fd5b80600660006118cf611da8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661197c611da8565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516119c1919061386c565b60405180910390a35050565b6119d5611da8565b73ffffffffffffffffffffffffffffffffffffffff166119f3611385565b73ffffffffffffffffffffffffffffffffffffffff1614611a49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4090613ac9565b60405180910390fd5b601060009054906101000a900460ff1615611a7a576000601060006101000a81548160ff0219169083151502179055505b80601060016101000a81548160ff02191690831515021790555050565b601060019054906101000a900460ff1681565b611abb611ab5611da8565b83612185565b611afa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af190613b69565b60405180910390fd5b611b0684848484612583565b50505050565b6060611b1782612060565b611b56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4d90613b09565b60405180910390fd5b600f611b61836125df565b604051602001611b729291906137e1565b6040516020818303038152906040529050919050565b600f8054611b9590613ec0565b80601f0160208091040260200160405190810160405280929190818152602001828054611bc190613ec0565b8015611c0e5780601f10611be357610100808354040283529160200191611c0e565b820191906000526020600020905b815481529060010190602001808311611bf157829003601f168201915b505050505081565b600b5481565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611cb8611da8565b73ffffffffffffffffffffffffffffffffffffffff16611cd6611385565b73ffffffffffffffffffffffffffffffffffffffff1614611d2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2390613ac9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611d9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d93906138e9565b60405180910390fd5b611da5816124bf565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611e20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1790613a69565b60405180910390fd5b611e2981612060565b15611e69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6090613909565b60405180910390fd5b611e7560008383612740565b6001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611ec59190613ce3565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061204957507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612059575061205882612854565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661213f8361118d565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061219082612060565b6121cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121c6906139c9565b60405180910390fd5b60006121da8361118d565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061224957508373ffffffffffffffffffffffffffffffffffffffff1661223184610a7a565b73ffffffffffffffffffffffffffffffffffffffff16145b8061225a57506122598185611c1c565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166122838261118d565b73ffffffffffffffffffffffffffffffffffffffff16146122d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122d090613ae9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612349576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234090613949565b60405180910390fd5b612354838383612740565b61235f6000826120cc565b6001600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546123af9190613dc4565b925050819055506001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124069190613ce3565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61258e848484612263565b61259a848484846128be565b6125d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125d0906138c9565b60405180910390fd5b50505050565b60606000821415612627576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061273b565b600082905060005b6000821461265957808061264290613f23565b915050600a826126529190613d39565b915061262f565b60008167ffffffffffffffff81111561267557612674614088565b5b6040519080825280601f01601f1916602001820160405280156126a75781602001600182028036833780820191505090505b5090505b60008514612734576001826126c09190613dc4565b9150600a856126cf9190613f6c565b60306126db9190613ce3565b60f81b8183815181106126f1576126f0614059565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561272d9190613d39565b94506126ab565b8093505050505b919050565b61274b838383612a55565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561278e5761278981612a5a565b6127cd565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146127cc576127cb8382612aa3565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156128105761280b81612c10565b61284f565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461284e5761284d8282612ce1565b5b5b505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60006128df8473ffffffffffffffffffffffffffffffffffffffff16612d60565b15612a48578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612908611da8565b8786866040518563ffffffff1660e01b815260040161292a9493929190613820565b602060405180830381600087803b15801561294457600080fd5b505af192505050801561297557506040513d601f19601f820116820180604052508101906129729190613261565b60015b6129f8573d80600081146129a5576040519150601f19603f3d011682016040523d82523d6000602084013e6129aa565b606091505b506000815114156129f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129e7906138c9565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612a4d565b600190505b949350505050565b505050565b600980549050600a600083815260200190815260200160002081905550600981908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612ab08461123f565b612aba9190613dc4565b9050600060086000848152602001908152602001600020549050818114612b9f576000600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816008600083815260200190815260200160002081905550505b6008600084815260200190815260200160002060009055600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600980549050612c249190613dc4565b90506000600a6000848152602001908152602001600020549050600060098381548110612c5457612c53614059565b5b906000526020600020015490508060098381548110612c7657612c75614059565b5b906000526020600020018190555081600a600083815260200190815260200160002081905550600a6000858152602001908152602001600020600090556009805480612cc557612cc461402a565b5b6001900381819060005260206000200160009055905550505050565b6000612cec8361123f565b905081600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806008600084815260200190815260200160002081905550505050565b600080823b905060008111915050919050565b828054612d7f90613ec0565b90600052602060002090601f016020900481019282612da15760008555612de8565b82601f10612dba57805160ff1916838001178555612de8565b82800160010185558215612de8579182015b82811115612de7578251825591602001919060010190612dcc565b5b509050612df59190612df9565b5090565b5b80821115612e12576000816000905550600101612dfa565b5090565b6000612e29612e2484613c29565b613c04565b905082815260208101848484011115612e4557612e446140c6565b5b612e50848285613e7e565b509392505050565b6000612e6b612e6684613c5a565b613c04565b905082815260208101848484011115612e8757612e866140c6565b5b612e92848285613e7e565b509392505050565b600081359050612ea9816147e2565b92915050565b600081359050612ebe816147f9565b92915050565b60008083601f840112612eda57612ed96140bc565b5b8235905067ffffffffffffffff811115612ef757612ef66140b7565b5b602083019150836020820283011115612f1357612f126140c1565b5b9250929050565b600081359050612f2981614810565b92915050565b600081359050612f3e81614827565b92915050565b600081519050612f5381614827565b92915050565b600082601f830112612f6e57612f6d6140bc565b5b8135612f7e848260208601612e16565b91505092915050565b600082601f830112612f9c57612f9b6140bc565b5b8135612fac848260208601612e58565b91505092915050565b600081359050612fc48161483e565b92915050565b600060208284031215612fe057612fdf6140d0565b5b6000612fee84828501612e9a565b91505092915050565b60006020828403121561300d5761300c6140d0565b5b600061301b84828501612eaf565b91505092915050565b6000806040838503121561303b5761303a6140d0565b5b600061304985828601612e9a565b925050602061305a85828601612e9a565b9150509250929050565b60008060006060848603121561307d5761307c6140d0565b5b600061308b86828701612e9a565b935050602061309c86828701612e9a565b92505060406130ad86828701612fb5565b9150509250925092565b600080600080608085870312156130d1576130d06140d0565b5b60006130df87828801612e9a565b94505060206130f087828801612e9a565b935050604061310187828801612fb5565b925050606085013567ffffffffffffffff811115613122576131216140cb565b5b61312e87828801612f59565b91505092959194509250565b60008060408385031215613151576131506140d0565b5b600061315f85828601612e9a565b925050602061317085828601612f1a565b9150509250929050565b60008060408385031215613191576131906140d0565b5b600061319f85828601612e9a565b92505060206131b085828601612fb5565b9150509250929050565b600080602083850312156131d1576131d06140d0565b5b600083013567ffffffffffffffff8111156131ef576131ee6140cb565b5b6131fb85828601612ec4565b92509250509250929050565b60006020828403121561321d5761321c6140d0565b5b600061322b84828501612f1a565b91505092915050565b60006020828403121561324a576132496140d0565b5b600061325884828501612f2f565b91505092915050565b600060208284031215613277576132766140d0565b5b600061328584828501612f44565b91505092915050565b6000602082840312156132a4576132a36140d0565b5b600082013567ffffffffffffffff8111156132c2576132c16140cb565b5b6132ce84828501612f87565b91505092915050565b6000602082840312156132ed576132ec6140d0565b5b60006132fb84828501612fb5565b91505092915050565b61330d81613df8565b82525050565b61331c81613e1c565b82525050565b600061332d82613ca0565b6133378185613cb6565b9350613347818560208601613e8d565b613350816140d5565b840191505092915050565b600061336682613cab565b6133708185613cc7565b9350613380818560208601613e8d565b613389816140d5565b840191505092915050565b600061339f82613cab565b6133a98185613cd8565b93506133b9818560208601613e8d565b80840191505092915050565b600081546133d281613ec0565b6133dc8186613cd8565b945060018216600081146133f757600181146134085761343b565b60ff1983168652818601935061343b565b61341185613c8b565b60005b8381101561343357815481890152600182019150602081019050613414565b838801955050505b50505092915050565b6000613451602b83613cc7565b915061345c826140e6565b604082019050919050565b6000613474603283613cc7565b915061347f82614135565b604082019050919050565b6000613497602683613cc7565b91506134a282614184565b604082019050919050565b60006134ba601c83613cc7565b91506134c5826141d3565b602082019050919050565b60006134dd602583613cc7565b91506134e8826141fc565b604082019050919050565b6000613500602483613cc7565b915061350b8261424b565b604082019050919050565b6000613523601983613cc7565b915061352e8261429a565b602082019050919050565b6000613546604e83613cc7565b9150613551826142c3565b606082019050919050565b6000613569601483613cc7565b915061357482614338565b602082019050919050565b600061358c602c83613cc7565b915061359782614361565b604082019050919050565b60006135af603883613cc7565b91506135ba826143b0565b604082019050919050565b60006135d2602a83613cc7565b91506135dd826143ff565b604082019050919050565b60006135f5602a83613cc7565b91506136008261444e565b604082019050919050565b6000613618602983613cc7565b91506136238261449d565b604082019050919050565b600061363b602083613cc7565b9150613646826144ec565b602082019050919050565b600061365e602c83613cc7565b915061366982614515565b604082019050919050565b6000613681603e83613cc7565b915061368c82614564565b604082019050919050565b60006136a4602083613cc7565b91506136af826145b3565b602082019050919050565b60006136c7602983613cc7565b91506136d2826145dc565b604082019050919050565b60006136ea602f83613cc7565b91506136f58261462b565b604082019050919050565b600061370d602183613cc7565b91506137188261467a565b604082019050919050565b6000613730601983613cc7565b915061373b826146c9565b602082019050919050565b6000613753603183613cc7565b915061375e826146f2565b604082019050919050565b6000613776602c83613cc7565b915061378182614741565b604082019050919050565b6000613799601883613cc7565b91506137a482614790565b602082019050919050565b60006137bc601b83613cc7565b91506137c7826147b9565b602082019050919050565b6137db81613e74565b82525050565b60006137ed82856133c5565b91506137f98284613394565b91508190509392505050565b600060208201905061381a6000830184613304565b92915050565b60006080820190506138356000830187613304565b6138426020830186613304565b61384f60408301856137d2565b81810360608301526138618184613322565b905095945050505050565b60006020820190506138816000830184613313565b92915050565b600060208201905081810360008301526138a1818461335b565b905092915050565b600060208201905081810360008301526138c281613444565b9050919050565b600060208201905081810360008301526138e281613467565b9050919050565b600060208201905081810360008301526139028161348a565b9050919050565b60006020820190508181036000830152613922816134ad565b9050919050565b60006020820190508181036000830152613942816134d0565b9050919050565b60006020820190508181036000830152613962816134f3565b9050919050565b6000602082019050818103600083015261398281613516565b9050919050565b600060208201905081810360008301526139a281613539565b9050919050565b600060208201905081810360008301526139c28161355c565b9050919050565b600060208201905081810360008301526139e28161357f565b9050919050565b60006020820190508181036000830152613a02816135a2565b9050919050565b60006020820190508181036000830152613a22816135c5565b9050919050565b60006020820190508181036000830152613a42816135e8565b9050919050565b60006020820190508181036000830152613a628161360b565b9050919050565b60006020820190508181036000830152613a828161362e565b9050919050565b60006020820190508181036000830152613aa281613651565b9050919050565b60006020820190508181036000830152613ac281613674565b9050919050565b60006020820190508181036000830152613ae281613697565b9050919050565b60006020820190508181036000830152613b02816136ba565b9050919050565b60006020820190508181036000830152613b22816136dd565b9050919050565b60006020820190508181036000830152613b4281613700565b9050919050565b60006020820190508181036000830152613b6281613723565b9050919050565b60006020820190508181036000830152613b8281613746565b9050919050565b60006020820190508181036000830152613ba281613769565b9050919050565b60006020820190508181036000830152613bc28161378c565b9050919050565b60006020820190508181036000830152613be2816137af565b9050919050565b6000602082019050613bfe60008301846137d2565b92915050565b6000613c0e613c1f565b9050613c1a8282613ef2565b919050565b6000604051905090565b600067ffffffffffffffff821115613c4457613c43614088565b5b613c4d826140d5565b9050602081019050919050565b600067ffffffffffffffff821115613c7557613c74614088565b5b613c7e826140d5565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613cee82613e74565b9150613cf983613e74565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613d2e57613d2d613f9d565b5b828201905092915050565b6000613d4482613e74565b9150613d4f83613e74565b925082613d5f57613d5e613fcc565b5b828204905092915050565b6000613d7582613e74565b9150613d8083613e74565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613db957613db8613f9d565b5b828202905092915050565b6000613dcf82613e74565b9150613dda83613e74565b925082821015613ded57613dec613f9d565b5b828203905092915050565b6000613e0382613e54565b9050919050565b6000613e1582613e54565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613eab578082015181840152602081019050613e90565b83811115613eba576000848401525b50505050565b60006002820490506001821680613ed857607f821691505b60208210811415613eec57613eeb613ffb565b5b50919050565b613efb826140d5565b810181811067ffffffffffffffff82111715613f1a57613f19614088565b5b80604052505050565b6000613f2e82613e74565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613f6157613f60613f9d565b5b600182019050919050565b6000613f7782613e74565b9150613f8283613e74565b925082613f9257613f91613fcc565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4d6178696d756d206f662032206d696e747320616c6c6f77656420706572207760008201527f616c6c6574000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f41646472657373206973206e6f74206f6e2077686974656c697374206f72206d60008201527f6178696d756d206f662032206d696e747320706572206164647265737320686160208201527f73206265656e2072656163686564000000000000000000000000000000000000604082015250565b7f4e6f2066756e647320746f207769746864726177000000000000000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4d6178696d756d206f662034206d696e747320616c6c6f77656420706572207460008201527f72616e73616374696f6e00000000000000000000000000000000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4d696e74696e672074686174206d616e7920776f756c6420657863656564207460008201527f6865207072652073616c65206d696e74696e6720616c6c6f636174696f6e0000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f49742773206e6f742074696d6520746f206d696e742079657400000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f496e636f72726563742066756e647320737570706c6965640000000000000000600082015250565b7f416c6c20746f6b656e732068617665206265656e206d696e7465640000000000600082015250565b6147eb81613df8565b81146147f657600080fd5b50565b61480281613e0a565b811461480d57600080fd5b50565b61481981613e1c565b811461482457600080fd5b50565b61483081613e28565b811461483b57600080fd5b50565b61484781613e74565b811461485257600080fd5b5056fea2646970667358221220ee8ceba3cbfaf53f92f6f4f4a31454604910ca38eae5534f15e422f14b5bbca764736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000007536865726265740000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000075348455242455400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001f68747470733a2f2f6170692e736865726265742e636f6d2f746f6b656e732f00
-----Decoded View---------------
Arg [0] : _name (string): Sherbet
Arg [1] : _symbol (string): SHERBET
Arg [2] : _uri (string): https://api.sherbet.com/tokens/
-----Encoded View---------------
9 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000007
Arg [4] : 5368657262657400000000000000000000000000000000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000007
Arg [6] : 5348455242455400000000000000000000000000000000000000000000000000
Arg [7] : 000000000000000000000000000000000000000000000000000000000000001f
Arg [8] : 68747470733a2f2f6170692e736865726265742e636f6d2f746f6b656e732f00
Deployed Bytecode Sourcemap
43350:5858:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47716:349;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34689:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22581:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24140:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23663:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43490:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35329:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46450:277;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25030:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47351:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34997:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46918:243;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25440:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48386:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43611:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35519:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48643:200;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22275:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22005:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42486:94;;;;;;;;;;;;;:::i;:::-;;43442:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41835:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22750:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44184:1688;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48125:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24433:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48999:200;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43651:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25696:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46018:297;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43572:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43404:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24799:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42735:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47716:349;42066:12;:10;:12::i;:::-;42055:23;;:7;:5;:7::i;:::-;:23;;;42047:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47808:6:::1;47803:245;47820:3;;:10;;47818:1;:12;47803:245;;;47852:12;47883:1;47867:13;:11;:13::i;:::-;:17;;;;:::i;:::-;47852:32;;47918:9;;47907:7;:20;;47899:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;47974:22;47980:3;;47984:1;47980:6;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;47988:7;47974:5;:22::i;:::-;48016:20;48028:7;48016:20;;;;;;:::i;:::-;;;;;;;;47837:211;47832:3;;;;;:::i;:::-;;;;47803:245;;;;47716:349:::0;;:::o;34689:224::-;34791:4;34830:35;34815:50;;;:11;:50;;;;:90;;;;34869:36;34893:11;34869:23;:36::i;:::-;34815:90;34808:97;;34689:224;;;:::o;22581:100::-;22635:13;22668:5;22661:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22581:100;:::o;24140:221::-;24216:7;24244:16;24252:7;24244;:16::i;:::-;24236:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;24329:15;:24;24345:7;24329:24;;;;;;;;;;;;;;;;;;;;;24322:31;;24140:221;;;:::o;23663:411::-;23744:13;23760:23;23775:7;23760:14;:23::i;:::-;23744:39;;23808:5;23802:11;;:2;:11;;;;23794:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;23902:5;23886:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;23911:37;23928:5;23935:12;:10;:12::i;:::-;23911:16;:37::i;:::-;23886:62;23864:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;24045:21;24054:2;24058:7;24045:8;:21::i;:::-;23733:341;23663:411;;:::o;43490:33::-;;;;:::o;35329:113::-;35390:7;35417:10;:17;;;;35410:24;;35329:113;:::o;46450:277::-;46493:4;46531:5;46514:22;;:13;;;;;;;;;;;:22;;;46510:179;;;46577:4;46557:24;;:16;;;;;;;;;;;:24;;;46553:88;;;46609:1;46602:8;;;;46553:88;46662:1;46655:8;;;;46510:179;46706:1;46699:8;;46450:277;;:::o;25030:339::-;25225:41;25244:12;:10;:12::i;:::-;25258:7;25225:18;:41::i;:::-;25217:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;25333:28;25343:4;25349:2;25353:7;25333:9;:28::i;:::-;25030:339;;;:::o;47351:208::-;42066:12;:10;:12::i;:::-;42055:23;;:7;:5;:7::i;:::-;:23;;;42047:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47461:6:::1;47456:96;47473:10;;:17;;47471:1;:19;47456:96;;;47539:1;47512:9;:24;47522:10;;47533:1;47522:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;47512:24;;;;;;;;;;;;;;;:28;;;;47492:3;;;;;:::i;:::-;;;;47456:96;;;;47351:208:::0;;:::o;34997:256::-;35094:7;35130:23;35147:5;35130:16;:23::i;:::-;35122:5;:31;35114:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;35219:12;:19;35232:5;35219:19;;;;;;;;;;;;;;;:26;35239:5;35219:26;;;;;;;;;;;;35212:33;;34997:256;;;;:::o;46918:243::-;42066:12;:10;:12::i;:::-;42055:23;;:7;:5;:7::i;:::-;:23;;;42047:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47057:1:::1;47033:21;:25;47011:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;47118:3;:12;;:35;47131:21;47118:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;46918:243:::0;:::o;25440:185::-;25578:39;25595:4;25601:2;25605:7;25578:39;;;;;;;;;;;;:16;:39::i;:::-;25440:185;;;:::o;48386:101::-;42066:12;:10;:12::i;:::-;42055:23;;:7;:5;:7::i;:::-;:23;;;42047:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48471:8:::1;48464:4;:15;;;;48386:101:::0;:::o;43611:33::-;;;;;;;;;;;;;:::o;35519:233::-;35594:7;35630:30;:28;:30::i;:::-;35622:5;:38;35614:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;35727:10;35738:5;35727:17;;;;;;;;:::i;:::-;;;;;;;;;;35720:24;;35519:233;;;:::o;48643:200::-;42066:12;:10;:12::i;:::-;42055:23;;:7;:5;:7::i;:::-;:23;;;42047:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48733:16:::1;;;;;;;;;;;48729:73;;;48785:5;48766:16;;:24;;;;;;;;;;;;;;;;;;48729:73;48828:7;48812:13;;:23;;;;;;;;;;;;;;;;;;48643:200:::0;:::o;22275:239::-;22347:7;22367:13;22383:7;:16;22391:7;22383:16;;;;;;;;;;;;;;;;;;;;;22367:32;;22435:1;22418:19;;:5;:19;;;;22410:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;22501:5;22494:12;;;22275:239;;;:::o;22005:208::-;22077:7;22122:1;22105:19;;:5;:19;;;;22097:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;22189:9;:16;22199:5;22189:16;;;;;;;;;;;;;;;;22182:23;;22005:208;;;:::o;42486:94::-;42066:12;:10;:12::i;:::-;42055:23;;:7;:5;:7::i;:::-;:23;;;42047:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42551:21:::1;42569:1;42551:9;:21::i;:::-;42486:94::o:0;43442:41::-;;;;:::o;41835:87::-;41881:7;41908:6;;;;;;;;;;;41901:13;;41835:87;:::o;22750:104::-;22806:13;22839:7;22832:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22750:104;:::o;44184:1688::-;44314:4;;44304:7;:14;;;;:::i;:::-;44291:9;:27;44269:114;;;;;;;;;;;;:::i;:::-;;;;;;;;;44443:9;;44432:7;44416:13;:11;:13::i;:::-;:23;;;;:::i;:::-;:36;;44394:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;44539:4;44519:24;;:16;;;;;;;;;;;:24;;;44515:1152;;;44596:1;44586:7;:11;:27;;;;;44612:1;44601:7;:12;;44586:27;44560:152;;;;;;;;;;;;:::i;:::-;;;;;;;;;44515:1152;;;44771:13;;;;;;;;;;;44745:127;;;;;;;;;;;;:::i;:::-;;;;;;;;;44924:1;44914:7;:11;:26;;;;;44939:1;44929:7;:11;;44914:26;44888:126;;;;;;;;;;;;:::i;:::-;;;;;;;;;45080:7;45055:9;:21;45065:10;45055:21;;;;;;;;;;;;;;;;:32;;45029:233;;;;;;;;;;;;:::i;:::-;;;;;;;;;45330:19;;45319:7;45304:12;;:22;;;;:::i;:::-;:45;;45278:216;;;;;;;;;;;;:::i;:::-;;;;;;;;;45535:7;45510:9;:21;45520:10;45510:21;;;;;;;;;;;;;;;;:32;;;;;;;:::i;:::-;;;;;;;;45647:7;45631:12;;:23;;;;;;;:::i;:::-;;;;;;;;44515:1152;45692:9;45687:178;45711:7;45707:1;:11;45687:178;;;45740:12;45771:1;45755:13;:11;:13::i;:::-;:17;;;;:::i;:::-;45740:32;;45787:26;45793:10;45805:7;45787:5;:26::i;:::-;45833:20;45845:7;45833:20;;;;;;:::i;:::-;;;;;;;;45725:140;45720:3;;;;;:::i;:::-;;;;45687:178;;;;44184:1688;:::o;48125:127::-;42066:12;:10;:12::i;:::-;42055:23;;:7;:5;:7::i;:::-;:23;;;42047:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48233:11:::1;48218:12;:26;;;;;;;;;;;;:::i;:::-;;48125:127:::0;:::o;24433:295::-;24548:12;:10;:12::i;:::-;24536:24;;:8;:24;;;;24528:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;24648:8;24603:18;:32;24622:12;:10;:12::i;:::-;24603:32;;;;;;;;;;;;;;;:42;24636:8;24603:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;24701:8;24672:48;;24687:12;:10;:12::i;:::-;24672:48;;;24711:8;24672:48;;;;;;:::i;:::-;;;;;;;;24433:295;;:::o;48999:200::-;42066:12;:10;:12::i;:::-;42055:23;;:7;:5;:7::i;:::-;:23;;;42047:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49092:13:::1;;;;;;;;;;;49088:67;;;49138:5;49122:13;;:21;;;;;;;;;;;;;;;;;;49088:67;49184:7;49165:16;;:26;;;;;;;;;;;;;;;;;;48999:200:::0;:::o;43651:36::-;;;;;;;;;;;;;:::o;25696:328::-;25871:41;25890:12;:10;:12::i;:::-;25904:7;25871:18;:41::i;:::-;25863:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;25977:39;25991:4;25997:2;26001:7;26010:5;25977:13;:39::i;:::-;25696:328;;;;:::o;46018:297::-;46083:13;46131:17;46139:8;46131:7;:17::i;:::-;46109:114;;;;;;;;;;;;:::i;:::-;;;;;;;;;46265:12;46279:26;46296:8;46279:16;:26::i;:::-;46248:58;;;;;;;;;:::i;:::-;;;;;;;;;;;;;46234:73;;46018:297;;;:::o;43572:26::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;43404:31::-;;;;:::o;24799:164::-;24896:4;24920:18;:25;24939:5;24920:25;;;;;;;;;;;;;;;:35;24946:8;24920:35;;;;;;;;;;;;;;;;;;;;;;;;;24913:42;;24799:164;;;;:::o;42735:192::-;42066:12;:10;:12::i;:::-;42055:23;;:7;:5;:7::i;:::-;:23;;;42047:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42844:1:::1;42824:22;;:8;:22;;;;42816:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;42900:19;42910:8;42900:9;:19::i;:::-;42735:192:::0;:::o;20090:98::-;20143:7;20170:10;20163:17;;20090:98;:::o;29512:382::-;29606:1;29592:16;;:2;:16;;;;29584:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;29665:16;29673:7;29665;:16::i;:::-;29664:17;29656:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;29727:45;29756:1;29760:2;29764:7;29727:20;:45::i;:::-;29802:1;29785:9;:13;29795:2;29785:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;29833:2;29814:7;:16;29822:7;29814:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;29878:7;29874:2;29853:33;;29870:1;29853:33;;;;;;;;;;;;29512:382;;:::o;21636:305::-;21738:4;21790:25;21775:40;;;:11;:40;;;;:105;;;;21847:33;21832:48;;;:11;:48;;;;21775:105;:158;;;;21897:36;21921:11;21897:23;:36::i;:::-;21775:158;21755:178;;21636:305;;;:::o;27534:127::-;27599:4;27651:1;27623:30;;:7;:16;27631:7;27623:16;;;;;;;;;;;;;;;;;;;;;:30;;;;27616:37;;27534:127;;;:::o;31516:174::-;31618:2;31591:15;:24;31607:7;31591:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;31674:7;31670:2;31636:46;;31645:23;31660:7;31645:14;:23::i;:::-;31636:46;;;;;;;;;;;;31516:174;;:::o;27828:348::-;27921:4;27946:16;27954:7;27946;:16::i;:::-;27938:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;28022:13;28038:23;28053:7;28038:14;:23::i;:::-;28022:39;;28091:5;28080:16;;:7;:16;;;:51;;;;28124:7;28100:31;;:20;28112:7;28100:11;:20::i;:::-;:31;;;28080:51;:87;;;;28135:32;28152:5;28159:7;28135:16;:32::i;:::-;28080:87;28072:96;;;27828:348;;;;:::o;30820:578::-;30979:4;30952:31;;:23;30967:7;30952:14;:23::i;:::-;:31;;;30944:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;31062:1;31048:16;;:2;:16;;;;31040:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;31118:39;31139:4;31145:2;31149:7;31118:20;:39::i;:::-;31222:29;31239:1;31243:7;31222:8;:29::i;:::-;31283:1;31264:9;:15;31274:4;31264:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;31312:1;31295:9;:13;31305:2;31295:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;31343:2;31324:7;:16;31332:7;31324:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;31382:7;31378:2;31363:27;;31372:4;31363:27;;;;;;;;;;;;30820:578;;;:::o;42935:173::-;42991:16;43010:6;;;;;;;;;;;42991:25;;43036:8;43027:6;;:17;;;;;;;;;;;;;;;;;;43091:8;43060:40;;43081:8;43060:40;;;;;;;;;;;;42980:128;42935:173;:::o;26906:315::-;27063:28;27073:4;27079:2;27083:7;27063:9;:28::i;:::-;27110:48;27133:4;27139:2;27143:7;27152:5;27110:22;:48::i;:::-;27102:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;26906:315;;;;:::o;311:723::-;367:13;597:1;588:5;:10;584:53;;;615:10;;;;;;;;;;;;;;;;;;;;;584:53;647:12;662:5;647:20;;678:14;703:78;718:1;710:4;:9;703:78;;736:8;;;;;:::i;:::-;;;;767:2;759:10;;;;;:::i;:::-;;;703:78;;;791:19;823:6;813:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;791:39;;841:154;857:1;848:5;:10;841:154;;885:1;875:11;;;;;:::i;:::-;;;952:2;944:5;:10;;;;:::i;:::-;931:2;:24;;;;:::i;:::-;918:39;;901:6;908;901:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;981:2;972:11;;;;;:::i;:::-;;;841:154;;;1019:6;1005:21;;;;;311:723;;;;:::o;36365:589::-;36509:45;36536:4;36542:2;36546:7;36509:26;:45::i;:::-;36587:1;36571:18;;:4;:18;;;36567:187;;;36606:40;36638:7;36606:31;:40::i;:::-;36567:187;;;36676:2;36668:10;;:4;:10;;;36664:90;;36695:47;36728:4;36734:7;36695:32;:47::i;:::-;36664:90;36567:187;36782:1;36768:16;;:2;:16;;;36764:183;;;36801:45;36838:7;36801:36;:45::i;:::-;36764:183;;;36874:4;36868:10;;:2;:10;;;36864:83;;36895:40;36923:2;36927:7;36895:27;:40::i;:::-;36864:83;36764:183;36365:589;;;:::o;12776:157::-;12861:4;12900:25;12885:40;;;:11;:40;;;;12878:47;;12776:157;;;:::o;32255:799::-;32410:4;32431:15;:2;:13;;;:15::i;:::-;32427:620;;;32483:2;32467:36;;;32504:12;:10;:12::i;:::-;32518:4;32524:7;32533:5;32467:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;32463:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32726:1;32709:6;:13;:18;32705:272;;;32752:60;;;;;;;;;;:::i;:::-;;;;;;;;32705:272;32927:6;32921:13;32912:6;32908:2;32904:15;32897:38;32463:529;32600:41;;;32590:51;;;:6;:51;;;;32583:58;;;;;32427:620;33031:4;33024:11;;32255:799;;;;;;;:::o;33626:126::-;;;;:::o;37677:164::-;37781:10;:17;;;;37754:15;:24;37770:7;37754:24;;;;;;;;;;;:44;;;;37809:10;37825:7;37809:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37677:164;:::o;38468:988::-;38734:22;38784:1;38759:22;38776:4;38759:16;:22::i;:::-;:26;;;;:::i;:::-;38734:51;;38796:18;38817:17;:26;38835:7;38817:26;;;;;;;;;;;;38796:47;;38964:14;38950:10;:28;38946:328;;38995:19;39017:12;:18;39030:4;39017:18;;;;;;;;;;;;;;;:34;39036:14;39017:34;;;;;;;;;;;;38995:56;;39101:11;39068:12;:18;39081:4;39068:18;;;;;;;;;;;;;;;:30;39087:10;39068:30;;;;;;;;;;;:44;;;;39218:10;39185:17;:30;39203:11;39185:30;;;;;;;;;;;:43;;;;38980:294;38946:328;39370:17;:26;39388:7;39370:26;;;;;;;;;;;39363:33;;;39414:12;:18;39427:4;39414:18;;;;;;;;;;;;;;;:34;39433:14;39414:34;;;;;;;;;;;39407:41;;;38549:907;;38468:988;;:::o;39751:1079::-;40004:22;40049:1;40029:10;:17;;;;:21;;;;:::i;:::-;40004:46;;40061:18;40082:15;:24;40098:7;40082:24;;;;;;;;;;;;40061:45;;40433:19;40455:10;40466:14;40455:26;;;;;;;;:::i;:::-;;;;;;;;;;40433:48;;40519:11;40494:10;40505;40494:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;40630:10;40599:15;:28;40615:11;40599:28;;;;;;;;;;;:41;;;;40771:15;:24;40787:7;40771:24;;;;;;;;;;;40764:31;;;40806:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;39822:1008;;;39751:1079;:::o;37255:221::-;37340:14;37357:20;37374:2;37357:16;:20::i;:::-;37340:37;;37415:7;37388:12;:16;37401:2;37388:16;;;;;;;;;;;;;;;:24;37405:6;37388:24;;;;;;;;;;;:34;;;;37462:6;37433:17;:26;37451:7;37433:26;;;;;;;;;;;:35;;;;37329:147;37255:221;;:::o;2836:387::-;2896:4;3104:12;3171:7;3159:20;3151:28;;3214:1;3207:4;:8;3200:15;;;2836:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;986:155::-;1040:5;1078:6;1065:20;1056:29;;1094:41;1129:5;1094:41;:::i;:::-;986:155;;;;:::o;1164:568::-;1237:8;1247:6;1297:3;1290:4;1282:6;1278:17;1274:27;1264:122;;1305:79;;:::i;:::-;1264:122;1418:6;1405:20;1395:30;;1448:18;1440:6;1437:30;1434:117;;;1470:79;;:::i;:::-;1434:117;1584:4;1576:6;1572:17;1560:29;;1638:3;1630:4;1622:6;1618:17;1608:8;1604:32;1601:41;1598:128;;;1645:79;;:::i;:::-;1598:128;1164:568;;;;;:::o;1738:133::-;1781:5;1819:6;1806:20;1797:29;;1835:30;1859:5;1835:30;:::i;:::-;1738:133;;;;:::o;1877:137::-;1922:5;1960:6;1947:20;1938:29;;1976:32;2002:5;1976:32;:::i;:::-;1877:137;;;;:::o;2020:141::-;2076:5;2107:6;2101:13;2092:22;;2123:32;2149:5;2123:32;:::i;:::-;2020:141;;;;:::o;2180:338::-;2235:5;2284:3;2277:4;2269:6;2265:17;2261:27;2251:122;;2292:79;;:::i;:::-;2251:122;2409:6;2396:20;2434:78;2508:3;2500:6;2493:4;2485:6;2481:17;2434:78;:::i;:::-;2425:87;;2241:277;2180:338;;;;:::o;2538:340::-;2594:5;2643:3;2636:4;2628:6;2624:17;2620:27;2610:122;;2651:79;;:::i;:::-;2610:122;2768:6;2755:20;2793:79;2868:3;2860:6;2853:4;2845:6;2841:17;2793:79;:::i;:::-;2784:88;;2600:278;2538:340;;;;:::o;2884:139::-;2930:5;2968:6;2955:20;2946:29;;2984:33;3011:5;2984:33;:::i;:::-;2884:139;;;;:::o;3029:329::-;3088:6;3137:2;3125:9;3116:7;3112:23;3108:32;3105:119;;;3143:79;;:::i;:::-;3105:119;3263:1;3288:53;3333:7;3324:6;3313:9;3309:22;3288:53;:::i;:::-;3278:63;;3234:117;3029:329;;;;:::o;3364:345::-;3431:6;3480:2;3468:9;3459:7;3455:23;3451:32;3448:119;;;3486:79;;:::i;:::-;3448:119;3606:1;3631:61;3684:7;3675:6;3664:9;3660:22;3631:61;:::i;:::-;3621:71;;3577:125;3364:345;;;;:::o;3715:474::-;3783:6;3791;3840:2;3828:9;3819:7;3815:23;3811:32;3808:119;;;3846:79;;:::i;:::-;3808:119;3966:1;3991:53;4036:7;4027:6;4016:9;4012:22;3991:53;:::i;:::-;3981:63;;3937:117;4093:2;4119:53;4164:7;4155:6;4144:9;4140:22;4119:53;:::i;:::-;4109:63;;4064:118;3715:474;;;;;:::o;4195:619::-;4272:6;4280;4288;4337:2;4325:9;4316:7;4312:23;4308:32;4305:119;;;4343:79;;:::i;:::-;4305:119;4463:1;4488:53;4533:7;4524:6;4513:9;4509:22;4488:53;:::i;:::-;4478:63;;4434:117;4590:2;4616:53;4661:7;4652:6;4641:9;4637:22;4616:53;:::i;:::-;4606:63;;4561:118;4718:2;4744:53;4789:7;4780:6;4769:9;4765:22;4744:53;:::i;:::-;4734:63;;4689:118;4195:619;;;;;:::o;4820:943::-;4915:6;4923;4931;4939;4988:3;4976:9;4967:7;4963:23;4959:33;4956:120;;;4995:79;;:::i;:::-;4956:120;5115:1;5140:53;5185:7;5176:6;5165:9;5161:22;5140:53;:::i;:::-;5130:63;;5086:117;5242:2;5268:53;5313:7;5304:6;5293:9;5289:22;5268:53;:::i;:::-;5258:63;;5213:118;5370:2;5396:53;5441:7;5432:6;5421:9;5417:22;5396:53;:::i;:::-;5386:63;;5341:118;5526:2;5515:9;5511:18;5498:32;5557:18;5549:6;5546:30;5543:117;;;5579:79;;:::i;:::-;5543:117;5684:62;5738:7;5729:6;5718:9;5714:22;5684:62;:::i;:::-;5674:72;;5469:287;4820:943;;;;;;;:::o;5769:468::-;5834:6;5842;5891:2;5879:9;5870:7;5866:23;5862:32;5859:119;;;5897:79;;:::i;:::-;5859:119;6017:1;6042:53;6087:7;6078:6;6067:9;6063:22;6042:53;:::i;:::-;6032:63;;5988:117;6144:2;6170:50;6212:7;6203:6;6192:9;6188:22;6170:50;:::i;:::-;6160:60;;6115:115;5769:468;;;;;:::o;6243:474::-;6311:6;6319;6368:2;6356:9;6347:7;6343:23;6339:32;6336:119;;;6374:79;;:::i;:::-;6336:119;6494:1;6519:53;6564:7;6555:6;6544:9;6540:22;6519:53;:::i;:::-;6509:63;;6465:117;6621:2;6647:53;6692:7;6683:6;6672:9;6668:22;6647:53;:::i;:::-;6637:63;;6592:118;6243:474;;;;;:::o;6723:559::-;6809:6;6817;6866:2;6854:9;6845:7;6841:23;6837:32;6834:119;;;6872:79;;:::i;:::-;6834:119;7020:1;7009:9;7005:17;6992:31;7050:18;7042:6;7039:30;7036:117;;;7072:79;;:::i;:::-;7036:117;7185:80;7257:7;7248:6;7237:9;7233:22;7185:80;:::i;:::-;7167:98;;;;6963:312;6723:559;;;;;:::o;7288:323::-;7344:6;7393:2;7381:9;7372:7;7368:23;7364:32;7361:119;;;7399:79;;:::i;:::-;7361:119;7519:1;7544:50;7586:7;7577:6;7566:9;7562:22;7544:50;:::i;:::-;7534:60;;7490:114;7288:323;;;;:::o;7617:327::-;7675:6;7724:2;7712:9;7703:7;7699:23;7695:32;7692:119;;;7730:79;;:::i;:::-;7692:119;7850:1;7875:52;7919:7;7910:6;7899:9;7895:22;7875:52;:::i;:::-;7865:62;;7821:116;7617:327;;;;:::o;7950:349::-;8019:6;8068:2;8056:9;8047:7;8043:23;8039:32;8036:119;;;8074:79;;:::i;:::-;8036:119;8194:1;8219:63;8274:7;8265:6;8254:9;8250:22;8219:63;:::i;:::-;8209:73;;8165:127;7950:349;;;;:::o;8305:509::-;8374:6;8423:2;8411:9;8402:7;8398:23;8394:32;8391:119;;;8429:79;;:::i;:::-;8391:119;8577:1;8566:9;8562:17;8549:31;8607:18;8599:6;8596:30;8593:117;;;8629:79;;:::i;:::-;8593:117;8734:63;8789:7;8780:6;8769:9;8765:22;8734:63;:::i;:::-;8724:73;;8520:287;8305:509;;;;:::o;8820:329::-;8879:6;8928:2;8916:9;8907:7;8903:23;8899:32;8896:119;;;8934:79;;:::i;:::-;8896:119;9054:1;9079:53;9124:7;9115:6;9104:9;9100:22;9079:53;:::i;:::-;9069:63;;9025:117;8820:329;;;;:::o;9155:118::-;9242:24;9260:5;9242:24;:::i;:::-;9237:3;9230:37;9155:118;;:::o;9279:109::-;9360:21;9375:5;9360:21;:::i;:::-;9355:3;9348:34;9279:109;;:::o;9394:360::-;9480:3;9508:38;9540:5;9508:38;:::i;:::-;9562:70;9625:6;9620:3;9562:70;:::i;:::-;9555:77;;9641:52;9686:6;9681:3;9674:4;9667:5;9663:16;9641:52;:::i;:::-;9718:29;9740:6;9718:29;:::i;:::-;9713:3;9709:39;9702:46;;9484:270;9394:360;;;;:::o;9760:364::-;9848:3;9876:39;9909:5;9876:39;:::i;:::-;9931:71;9995:6;9990:3;9931:71;:::i;:::-;9924:78;;10011:52;10056:6;10051:3;10044:4;10037:5;10033:16;10011:52;:::i;:::-;10088:29;10110:6;10088:29;:::i;:::-;10083:3;10079:39;10072:46;;9852:272;9760:364;;;;:::o;10130:377::-;10236:3;10264:39;10297:5;10264:39;:::i;:::-;10319:89;10401:6;10396:3;10319:89;:::i;:::-;10312:96;;10417:52;10462:6;10457:3;10450:4;10443:5;10439:16;10417:52;:::i;:::-;10494:6;10489:3;10485:16;10478:23;;10240:267;10130:377;;;;:::o;10537:845::-;10640:3;10677:5;10671:12;10706:36;10732:9;10706:36;:::i;:::-;10758:89;10840:6;10835:3;10758:89;:::i;:::-;10751:96;;10878:1;10867:9;10863:17;10894:1;10889:137;;;;11040:1;11035:341;;;;10856:520;;10889:137;10973:4;10969:9;10958;10954:25;10949:3;10942:38;11009:6;11004:3;11000:16;10993:23;;10889:137;;11035:341;11102:38;11134:5;11102:38;:::i;:::-;11162:1;11176:154;11190:6;11187:1;11184:13;11176:154;;;11264:7;11258:14;11254:1;11249:3;11245:11;11238:35;11314:1;11305:7;11301:15;11290:26;;11212:4;11209:1;11205:12;11200:17;;11176:154;;;11359:6;11354:3;11350:16;11343:23;;11042:334;;10856:520;;10644:738;;10537:845;;;;:::o;11388:366::-;11530:3;11551:67;11615:2;11610:3;11551:67;:::i;:::-;11544:74;;11627:93;11716:3;11627:93;:::i;:::-;11745:2;11740:3;11736:12;11729:19;;11388:366;;;:::o;11760:::-;11902:3;11923:67;11987:2;11982:3;11923:67;:::i;:::-;11916:74;;11999:93;12088:3;11999:93;:::i;:::-;12117:2;12112:3;12108:12;12101:19;;11760:366;;;:::o;12132:::-;12274:3;12295:67;12359:2;12354:3;12295:67;:::i;:::-;12288:74;;12371:93;12460:3;12371:93;:::i;:::-;12489:2;12484:3;12480:12;12473:19;;12132:366;;;:::o;12504:::-;12646:3;12667:67;12731:2;12726:3;12667:67;:::i;:::-;12660:74;;12743:93;12832:3;12743:93;:::i;:::-;12861:2;12856:3;12852:12;12845:19;;12504:366;;;:::o;12876:::-;13018:3;13039:67;13103:2;13098:3;13039:67;:::i;:::-;13032:74;;13115:93;13204:3;13115:93;:::i;:::-;13233:2;13228:3;13224:12;13217:19;;12876:366;;;:::o;13248:::-;13390:3;13411:67;13475:2;13470:3;13411:67;:::i;:::-;13404:74;;13487:93;13576:3;13487:93;:::i;:::-;13605:2;13600:3;13596:12;13589:19;;13248:366;;;:::o;13620:::-;13762:3;13783:67;13847:2;13842:3;13783:67;:::i;:::-;13776:74;;13859:93;13948:3;13859:93;:::i;:::-;13977:2;13972:3;13968:12;13961:19;;13620:366;;;:::o;13992:::-;14134:3;14155:67;14219:2;14214:3;14155:67;:::i;:::-;14148:74;;14231:93;14320:3;14231:93;:::i;:::-;14349:2;14344:3;14340:12;14333:19;;13992:366;;;:::o;14364:::-;14506:3;14527:67;14591:2;14586:3;14527:67;:::i;:::-;14520:74;;14603:93;14692:3;14603:93;:::i;:::-;14721:2;14716:3;14712:12;14705:19;;14364:366;;;:::o;14736:::-;14878:3;14899:67;14963:2;14958:3;14899:67;:::i;:::-;14892:74;;14975:93;15064:3;14975:93;:::i;:::-;15093:2;15088:3;15084:12;15077:19;;14736:366;;;:::o;15108:::-;15250:3;15271:67;15335:2;15330:3;15271:67;:::i;:::-;15264:74;;15347:93;15436:3;15347:93;:::i;:::-;15465:2;15460:3;15456:12;15449:19;;15108:366;;;:::o;15480:::-;15622:3;15643:67;15707:2;15702:3;15643:67;:::i;:::-;15636:74;;15719:93;15808:3;15719:93;:::i;:::-;15837:2;15832:3;15828:12;15821:19;;15480:366;;;:::o;15852:::-;15994:3;16015:67;16079:2;16074:3;16015:67;:::i;:::-;16008:74;;16091:93;16180:3;16091:93;:::i;:::-;16209:2;16204:3;16200:12;16193:19;;15852:366;;;:::o;16224:::-;16366:3;16387:67;16451:2;16446:3;16387:67;:::i;:::-;16380:74;;16463:93;16552:3;16463:93;:::i;:::-;16581:2;16576:3;16572:12;16565:19;;16224:366;;;:::o;16596:::-;16738:3;16759:67;16823:2;16818:3;16759:67;:::i;:::-;16752:74;;16835:93;16924:3;16835:93;:::i;:::-;16953:2;16948:3;16944:12;16937:19;;16596:366;;;:::o;16968:::-;17110:3;17131:67;17195:2;17190:3;17131:67;:::i;:::-;17124:74;;17207:93;17296:3;17207:93;:::i;:::-;17325:2;17320:3;17316:12;17309:19;;16968:366;;;:::o;17340:::-;17482:3;17503:67;17567:2;17562:3;17503:67;:::i;:::-;17496:74;;17579:93;17668:3;17579:93;:::i;:::-;17697:2;17692:3;17688:12;17681:19;;17340:366;;;:::o;17712:::-;17854:3;17875:67;17939:2;17934:3;17875:67;:::i;:::-;17868:74;;17951:93;18040:3;17951:93;:::i;:::-;18069:2;18064:3;18060:12;18053:19;;17712:366;;;:::o;18084:::-;18226:3;18247:67;18311:2;18306:3;18247:67;:::i;:::-;18240:74;;18323:93;18412:3;18323:93;:::i;:::-;18441:2;18436:3;18432:12;18425:19;;18084:366;;;:::o;18456:::-;18598:3;18619:67;18683:2;18678:3;18619:67;:::i;:::-;18612:74;;18695:93;18784:3;18695:93;:::i;:::-;18813:2;18808:3;18804:12;18797:19;;18456:366;;;:::o;18828:::-;18970:3;18991:67;19055:2;19050:3;18991:67;:::i;:::-;18984:74;;19067:93;19156:3;19067:93;:::i;:::-;19185:2;19180:3;19176:12;19169:19;;18828:366;;;:::o;19200:::-;19342:3;19363:67;19427:2;19422:3;19363:67;:::i;:::-;19356:74;;19439:93;19528:3;19439:93;:::i;:::-;19557:2;19552:3;19548:12;19541:19;;19200:366;;;:::o;19572:::-;19714:3;19735:67;19799:2;19794:3;19735:67;:::i;:::-;19728:74;;19811:93;19900:3;19811:93;:::i;:::-;19929:2;19924:3;19920:12;19913:19;;19572:366;;;:::o;19944:::-;20086:3;20107:67;20171:2;20166:3;20107:67;:::i;:::-;20100:74;;20183:93;20272:3;20183:93;:::i;:::-;20301:2;20296:3;20292:12;20285:19;;19944:366;;;:::o;20316:::-;20458:3;20479:67;20543:2;20538:3;20479:67;:::i;:::-;20472:74;;20555:93;20644:3;20555:93;:::i;:::-;20673:2;20668:3;20664:12;20657:19;;20316:366;;;:::o;20688:::-;20830:3;20851:67;20915:2;20910:3;20851:67;:::i;:::-;20844:74;;20927:93;21016:3;20927:93;:::i;:::-;21045:2;21040:3;21036:12;21029:19;;20688:366;;;:::o;21060:118::-;21147:24;21165:5;21147:24;:::i;:::-;21142:3;21135:37;21060:118;;:::o;21184:429::-;21361:3;21383:92;21471:3;21462:6;21383:92;:::i;:::-;21376:99;;21492:95;21583:3;21574:6;21492:95;:::i;:::-;21485:102;;21604:3;21597:10;;21184:429;;;;;:::o;21619:222::-;21712:4;21750:2;21739:9;21735:18;21727:26;;21763:71;21831:1;21820:9;21816:17;21807:6;21763:71;:::i;:::-;21619:222;;;;:::o;21847:640::-;22042:4;22080:3;22069:9;22065:19;22057:27;;22094:71;22162:1;22151:9;22147:17;22138:6;22094:71;:::i;:::-;22175:72;22243:2;22232:9;22228:18;22219:6;22175:72;:::i;:::-;22257;22325:2;22314:9;22310:18;22301:6;22257:72;:::i;:::-;22376:9;22370:4;22366:20;22361:2;22350:9;22346:18;22339:48;22404:76;22475:4;22466:6;22404:76;:::i;:::-;22396:84;;21847:640;;;;;;;:::o;22493:210::-;22580:4;22618:2;22607:9;22603:18;22595:26;;22631:65;22693:1;22682:9;22678:17;22669:6;22631:65;:::i;:::-;22493:210;;;;:::o;22709:313::-;22822:4;22860:2;22849:9;22845:18;22837:26;;22909:9;22903:4;22899:20;22895:1;22884:9;22880:17;22873:47;22937:78;23010:4;23001:6;22937:78;:::i;:::-;22929:86;;22709:313;;;;:::o;23028:419::-;23194:4;23232:2;23221:9;23217:18;23209:26;;23281:9;23275:4;23271:20;23267:1;23256:9;23252:17;23245:47;23309:131;23435:4;23309:131;:::i;:::-;23301:139;;23028:419;;;:::o;23453:::-;23619:4;23657:2;23646:9;23642:18;23634:26;;23706:9;23700:4;23696:20;23692:1;23681:9;23677:17;23670:47;23734:131;23860:4;23734:131;:::i;:::-;23726:139;;23453:419;;;:::o;23878:::-;24044:4;24082:2;24071:9;24067:18;24059:26;;24131:9;24125:4;24121:20;24117:1;24106:9;24102:17;24095:47;24159:131;24285:4;24159:131;:::i;:::-;24151:139;;23878:419;;;:::o;24303:::-;24469:4;24507:2;24496:9;24492:18;24484:26;;24556:9;24550:4;24546:20;24542:1;24531:9;24527:17;24520:47;24584:131;24710:4;24584:131;:::i;:::-;24576:139;;24303:419;;;:::o;24728:::-;24894:4;24932:2;24921:9;24917:18;24909:26;;24981:9;24975:4;24971:20;24967:1;24956:9;24952:17;24945:47;25009:131;25135:4;25009:131;:::i;:::-;25001:139;;24728:419;;;:::o;25153:::-;25319:4;25357:2;25346:9;25342:18;25334:26;;25406:9;25400:4;25396:20;25392:1;25381:9;25377:17;25370:47;25434:131;25560:4;25434:131;:::i;:::-;25426:139;;25153:419;;;:::o;25578:::-;25744:4;25782:2;25771:9;25767:18;25759:26;;25831:9;25825:4;25821:20;25817:1;25806:9;25802:17;25795:47;25859:131;25985:4;25859:131;:::i;:::-;25851:139;;25578:419;;;:::o;26003:::-;26169:4;26207:2;26196:9;26192:18;26184:26;;26256:9;26250:4;26246:20;26242:1;26231:9;26227:17;26220:47;26284:131;26410:4;26284:131;:::i;:::-;26276:139;;26003:419;;;:::o;26428:::-;26594:4;26632:2;26621:9;26617:18;26609:26;;26681:9;26675:4;26671:20;26667:1;26656:9;26652:17;26645:47;26709:131;26835:4;26709:131;:::i;:::-;26701:139;;26428:419;;;:::o;26853:::-;27019:4;27057:2;27046:9;27042:18;27034:26;;27106:9;27100:4;27096:20;27092:1;27081:9;27077:17;27070:47;27134:131;27260:4;27134:131;:::i;:::-;27126:139;;26853:419;;;:::o;27278:::-;27444:4;27482:2;27471:9;27467:18;27459:26;;27531:9;27525:4;27521:20;27517:1;27506:9;27502:17;27495:47;27559:131;27685:4;27559:131;:::i;:::-;27551:139;;27278:419;;;:::o;27703:::-;27869:4;27907:2;27896:9;27892:18;27884:26;;27956:9;27950:4;27946:20;27942:1;27931:9;27927:17;27920:47;27984:131;28110:4;27984:131;:::i;:::-;27976:139;;27703:419;;;:::o;28128:::-;28294:4;28332:2;28321:9;28317:18;28309:26;;28381:9;28375:4;28371:20;28367:1;28356:9;28352:17;28345:47;28409:131;28535:4;28409:131;:::i;:::-;28401:139;;28128:419;;;:::o;28553:::-;28719:4;28757:2;28746:9;28742:18;28734:26;;28806:9;28800:4;28796:20;28792:1;28781:9;28777:17;28770:47;28834:131;28960:4;28834:131;:::i;:::-;28826:139;;28553:419;;;:::o;28978:::-;29144:4;29182:2;29171:9;29167:18;29159:26;;29231:9;29225:4;29221:20;29217:1;29206:9;29202:17;29195:47;29259:131;29385:4;29259:131;:::i;:::-;29251:139;;28978:419;;;:::o;29403:::-;29569:4;29607:2;29596:9;29592:18;29584:26;;29656:9;29650:4;29646:20;29642:1;29631:9;29627:17;29620:47;29684:131;29810:4;29684:131;:::i;:::-;29676:139;;29403:419;;;:::o;29828:::-;29994:4;30032:2;30021:9;30017:18;30009:26;;30081:9;30075:4;30071:20;30067:1;30056:9;30052:17;30045:47;30109:131;30235:4;30109:131;:::i;:::-;30101:139;;29828:419;;;:::o;30253:::-;30419:4;30457:2;30446:9;30442:18;30434:26;;30506:9;30500:4;30496:20;30492:1;30481:9;30477:17;30470:47;30534:131;30660:4;30534:131;:::i;:::-;30526:139;;30253:419;;;:::o;30678:::-;30844:4;30882:2;30871:9;30867:18;30859:26;;30931:9;30925:4;30921:20;30917:1;30906:9;30902:17;30895:47;30959:131;31085:4;30959:131;:::i;:::-;30951:139;;30678:419;;;:::o;31103:::-;31269:4;31307:2;31296:9;31292:18;31284:26;;31356:9;31350:4;31346:20;31342:1;31331:9;31327:17;31320:47;31384:131;31510:4;31384:131;:::i;:::-;31376:139;;31103:419;;;:::o;31528:::-;31694:4;31732:2;31721:9;31717:18;31709:26;;31781:9;31775:4;31771:20;31767:1;31756:9;31752:17;31745:47;31809:131;31935:4;31809:131;:::i;:::-;31801:139;;31528:419;;;:::o;31953:::-;32119:4;32157:2;32146:9;32142:18;32134:26;;32206:9;32200:4;32196:20;32192:1;32181:9;32177:17;32170:47;32234:131;32360:4;32234:131;:::i;:::-;32226:139;;31953:419;;;:::o;32378:::-;32544:4;32582:2;32571:9;32567:18;32559:26;;32631:9;32625:4;32621:20;32617:1;32606:9;32602:17;32595:47;32659:131;32785:4;32659:131;:::i;:::-;32651:139;;32378:419;;;:::o;32803:::-;32969:4;33007:2;32996:9;32992:18;32984:26;;33056:9;33050:4;33046:20;33042:1;33031:9;33027:17;33020:47;33084:131;33210:4;33084:131;:::i;:::-;33076:139;;32803:419;;;:::o;33228:::-;33394:4;33432:2;33421:9;33417:18;33409:26;;33481:9;33475:4;33471:20;33467:1;33456:9;33452:17;33445:47;33509:131;33635:4;33509:131;:::i;:::-;33501:139;;33228:419;;;:::o;33653:::-;33819:4;33857:2;33846:9;33842:18;33834:26;;33906:9;33900:4;33896:20;33892:1;33881:9;33877:17;33870:47;33934:131;34060:4;33934:131;:::i;:::-;33926:139;;33653:419;;;:::o;34078:222::-;34171:4;34209:2;34198:9;34194:18;34186:26;;34222:71;34290:1;34279:9;34275:17;34266:6;34222:71;:::i;:::-;34078:222;;;;:::o;34306:129::-;34340:6;34367:20;;:::i;:::-;34357:30;;34396:33;34424:4;34416:6;34396:33;:::i;:::-;34306:129;;;:::o;34441:75::-;34474:6;34507:2;34501:9;34491:19;;34441:75;:::o;34522:307::-;34583:4;34673:18;34665:6;34662:30;34659:56;;;34695:18;;:::i;:::-;34659:56;34733:29;34755:6;34733:29;:::i;:::-;34725:37;;34817:4;34811;34807:15;34799:23;;34522:307;;;:::o;34835:308::-;34897:4;34987:18;34979:6;34976:30;34973:56;;;35009:18;;:::i;:::-;34973:56;35047:29;35069:6;35047:29;:::i;:::-;35039:37;;35131:4;35125;35121:15;35113:23;;34835:308;;;:::o;35149:141::-;35198:4;35221:3;35213:11;;35244:3;35241:1;35234:14;35278:4;35275:1;35265:18;35257:26;;35149:141;;;:::o;35296:98::-;35347:6;35381:5;35375:12;35365:22;;35296:98;;;:::o;35400:99::-;35452:6;35486:5;35480:12;35470:22;;35400:99;;;:::o;35505:168::-;35588:11;35622:6;35617:3;35610:19;35662:4;35657:3;35653:14;35638:29;;35505:168;;;;:::o;35679:169::-;35763:11;35797:6;35792:3;35785:19;35837:4;35832:3;35828:14;35813:29;;35679:169;;;;:::o;35854:148::-;35956:11;35993:3;35978:18;;35854:148;;;;:::o;36008:305::-;36048:3;36067:20;36085:1;36067:20;:::i;:::-;36062:25;;36101:20;36119:1;36101:20;:::i;:::-;36096:25;;36255:1;36187:66;36183:74;36180:1;36177:81;36174:107;;;36261:18;;:::i;:::-;36174:107;36305:1;36302;36298:9;36291:16;;36008:305;;;;:::o;36319:185::-;36359:1;36376:20;36394:1;36376:20;:::i;:::-;36371:25;;36410:20;36428:1;36410:20;:::i;:::-;36405:25;;36449:1;36439:35;;36454:18;;:::i;:::-;36439:35;36496:1;36493;36489:9;36484:14;;36319:185;;;;:::o;36510:348::-;36550:7;36573:20;36591:1;36573:20;:::i;:::-;36568:25;;36607:20;36625:1;36607:20;:::i;:::-;36602:25;;36795:1;36727:66;36723:74;36720:1;36717:81;36712:1;36705:9;36698:17;36694:105;36691:131;;;36802:18;;:::i;:::-;36691:131;36850:1;36847;36843:9;36832:20;;36510:348;;;;:::o;36864:191::-;36904:4;36924:20;36942:1;36924:20;:::i;:::-;36919:25;;36958:20;36976:1;36958:20;:::i;:::-;36953:25;;36997:1;36994;36991:8;36988:34;;;37002:18;;:::i;:::-;36988:34;37047:1;37044;37040:9;37032:17;;36864:191;;;;:::o;37061:96::-;37098:7;37127:24;37145:5;37127:24;:::i;:::-;37116:35;;37061:96;;;:::o;37163:104::-;37208:7;37237:24;37255:5;37237:24;:::i;:::-;37226:35;;37163:104;;;:::o;37273:90::-;37307:7;37350:5;37343:13;37336:21;37325:32;;37273:90;;;:::o;37369:149::-;37405:7;37445:66;37438:5;37434:78;37423:89;;37369:149;;;:::o;37524:126::-;37561:7;37601:42;37594:5;37590:54;37579:65;;37524:126;;;:::o;37656:77::-;37693:7;37722:5;37711:16;;37656:77;;;:::o;37739:154::-;37823:6;37818:3;37813;37800:30;37885:1;37876:6;37871:3;37867:16;37860:27;37739:154;;;:::o;37899:307::-;37967:1;37977:113;37991:6;37988:1;37985:13;37977:113;;;38076:1;38071:3;38067:11;38061:18;38057:1;38052:3;38048:11;38041:39;38013:2;38010:1;38006:10;38001:15;;37977:113;;;38108:6;38105:1;38102:13;38099:101;;;38188:1;38179:6;38174:3;38170:16;38163:27;38099:101;37948:258;37899:307;;;:::o;38212:320::-;38256:6;38293:1;38287:4;38283:12;38273:22;;38340:1;38334:4;38330:12;38361:18;38351:81;;38417:4;38409:6;38405:17;38395:27;;38351:81;38479:2;38471:6;38468:14;38448:18;38445:38;38442:84;;;38498:18;;:::i;:::-;38442:84;38263:269;38212:320;;;:::o;38538:281::-;38621:27;38643:4;38621:27;:::i;:::-;38613:6;38609:40;38751:6;38739:10;38736:22;38715:18;38703:10;38700:34;38697:62;38694:88;;;38762:18;;:::i;:::-;38694:88;38802:10;38798:2;38791:22;38581:238;38538:281;;:::o;38825:233::-;38864:3;38887:24;38905:5;38887:24;:::i;:::-;38878:33;;38933:66;38926:5;38923:77;38920:103;;;39003:18;;:::i;:::-;38920:103;39050:1;39043:5;39039:13;39032:20;;38825:233;;;:::o;39064:176::-;39096:1;39113:20;39131:1;39113:20;:::i;:::-;39108:25;;39147:20;39165:1;39147:20;:::i;:::-;39142:25;;39186:1;39176:35;;39191:18;;:::i;:::-;39176:35;39232:1;39229;39225:9;39220:14;;39064:176;;;;:::o;39246:180::-;39294:77;39291:1;39284:88;39391:4;39388:1;39381:15;39415:4;39412:1;39405:15;39432:180;39480:77;39477:1;39470:88;39577:4;39574:1;39567:15;39601:4;39598:1;39591:15;39618:180;39666:77;39663:1;39656:88;39763:4;39760:1;39753:15;39787:4;39784:1;39777:15;39804:180;39852:77;39849:1;39842:88;39949:4;39946:1;39939:15;39973:4;39970:1;39963:15;39990:180;40038:77;40035:1;40028:88;40135:4;40132:1;40125:15;40159:4;40156:1;40149:15;40176:180;40224:77;40221:1;40214:88;40321:4;40318:1;40311:15;40345:4;40342:1;40335:15;40362:117;40471:1;40468;40461:12;40485:117;40594:1;40591;40584:12;40608:117;40717:1;40714;40707:12;40731:117;40840:1;40837;40830:12;40854:117;40963:1;40960;40953:12;40977:117;41086:1;41083;41076:12;41100:102;41141:6;41192:2;41188:7;41183:2;41176:5;41172:14;41168:28;41158:38;;41100:102;;;:::o;41208:230::-;41348:34;41344:1;41336:6;41332:14;41325:58;41417:13;41412:2;41404:6;41400:15;41393:38;41208:230;:::o;41444:237::-;41584:34;41580:1;41572:6;41568:14;41561:58;41653:20;41648:2;41640:6;41636:15;41629:45;41444:237;:::o;41687:225::-;41827:34;41823:1;41815:6;41811:14;41804:58;41896:8;41891:2;41883:6;41879:15;41872:33;41687:225;:::o;41918:178::-;42058:30;42054:1;42046:6;42042:14;42035:54;41918:178;:::o;42102:224::-;42242:34;42238:1;42230:6;42226:14;42219:58;42311:7;42306:2;42298:6;42294:15;42287:32;42102:224;:::o;42332:223::-;42472:34;42468:1;42460:6;42456:14;42449:58;42541:6;42536:2;42528:6;42524:15;42517:31;42332:223;:::o;42561:175::-;42701:27;42697:1;42689:6;42685:14;42678:51;42561:175;:::o;42742:302::-;42882:34;42878:1;42870:6;42866:14;42859:58;42951:34;42946:2;42938:6;42934:15;42927:59;43020:16;43015:2;43007:6;43003:15;42996:41;42742:302;:::o;43050:170::-;43190:22;43186:1;43178:6;43174:14;43167:46;43050:170;:::o;43226:231::-;43366:34;43362:1;43354:6;43350:14;43343:58;43435:14;43430:2;43422:6;43418:15;43411:39;43226:231;:::o;43463:243::-;43603:34;43599:1;43591:6;43587:14;43580:58;43672:26;43667:2;43659:6;43655:15;43648:51;43463:243;:::o;43712:229::-;43852:34;43848:1;43840:6;43836:14;43829:58;43921:12;43916:2;43908:6;43904:15;43897:37;43712:229;:::o;43947:::-;44087:34;44083:1;44075:6;44071:14;44064:58;44156:12;44151:2;44143:6;44139:15;44132:37;43947:229;:::o;44182:228::-;44322:34;44318:1;44310:6;44306:14;44299:58;44391:11;44386:2;44378:6;44374:15;44367:36;44182:228;:::o;44416:182::-;44556:34;44552:1;44544:6;44540:14;44533:58;44416:182;:::o;44604:231::-;44744:34;44740:1;44732:6;44728:14;44721:58;44813:14;44808:2;44800:6;44796:15;44789:39;44604:231;:::o;44841:249::-;44981:34;44977:1;44969:6;44965:14;44958:58;45050:32;45045:2;45037:6;45033:15;45026:57;44841:249;:::o;45096:182::-;45236:34;45232:1;45224:6;45220:14;45213:58;45096:182;:::o;45284:228::-;45424:34;45420:1;45412:6;45408:14;45401:58;45493:11;45488:2;45480:6;45476:15;45469:36;45284:228;:::o;45518:234::-;45658:34;45654:1;45646:6;45642:14;45635:58;45727:17;45722:2;45714:6;45710:15;45703:42;45518:234;:::o;45758:220::-;45898:34;45894:1;45886:6;45882:14;45875:58;45967:3;45962:2;45954:6;45950:15;45943:28;45758:220;:::o;45984:175::-;46124:27;46120:1;46112:6;46108:14;46101:51;45984:175;:::o;46165:236::-;46305:34;46301:1;46293:6;46289:14;46282:58;46374:19;46369:2;46361:6;46357:15;46350:44;46165:236;:::o;46407:231::-;46547:34;46543:1;46535:6;46531:14;46524:58;46616:14;46611:2;46603:6;46599:15;46592:39;46407:231;:::o;46644:174::-;46784:26;46780:1;46772:6;46768:14;46761:50;46644:174;:::o;46824:177::-;46964:29;46960:1;46952:6;46948:14;46941:53;46824:177;:::o;47007:122::-;47080:24;47098:5;47080:24;:::i;:::-;47073:5;47070:35;47060:63;;47119:1;47116;47109:12;47060:63;47007:122;:::o;47135:138::-;47216:32;47242:5;47216:32;:::i;:::-;47209:5;47206:43;47196:71;;47263:1;47260;47253:12;47196:71;47135:138;:::o;47279:116::-;47349:21;47364:5;47349:21;:::i;:::-;47342:5;47339:32;47329:60;;47385:1;47382;47375:12;47329:60;47279:116;:::o;47401:120::-;47473:23;47490:5;47473:23;:::i;:::-;47466:5;47463:34;47453:62;;47511:1;47508;47501:12;47453:62;47401:120;:::o;47527:122::-;47600:24;47618:5;47600:24;:::i;:::-;47593:5;47590:35;47580:63;;47639:1;47636;47629:12;47580:63;47527:122;:::o
Swarm Source
ipfs://ee8ceba3cbfaf53f92f6f4f4a31454604910ca38eae5534f15e422f14b5bbca7
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.