Feature Tip: Add private address tag to any address under My Name Tag !
ERC-721
Overview
Max Total Supply
1,643 ZOO
Holders
661
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
2 ZOOLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Zoodlers
Compiler Version
v0.8.10+commit.fc410830
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-12-22 */ // SPDX-License-Identifier: MIT // File: @openzeppelin/contracts/utils/introspection/IERC165.sol pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/utils/Strings.sol pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/contracts/utils/Address.sol pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/utils/Context.sol pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/token/ERC721/ERC721.sol pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { require(operator != _msgSender(), "ERC721: approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File: @openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol pragma solidity ^0.8.0; /** * @dev This implements an optional extension of {ERC721} defined in the EIP that adds * enumerability of all the token ids in the contract as well as all token ids owned by each * account. */ abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { // Mapping from 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); } } pragma solidity >=0.7.0 <0.9.0; contract Zoodlers is ERC721Enumerable, Ownable { using Strings for uint256; string baseURI; string public baseExtension = ".json"; uint256 public cost = 0.05 ether; uint256 public maxSupply = 3232; uint256 public maxMintAmount = 50; uint256 public nftPerAddressLimit = 5; bool public paused = false; bool public revealed = false; string public notRevealedUri; mapping(address => uint256) public addressMintedBalance; constructor( string memory _name, string memory _symbol, string memory _initBaseURI, string memory _initNotRevealedUri ) ERC721(_name, _symbol) { setBaseURI(_initBaseURI); setNotRevealedURI(_initNotRevealedUri); } // internal function _baseURI() internal view virtual override returns (string memory) { return baseURI; } // public function mint(uint256 _mintAmount) public payable { uint256 supply = totalSupply(); require(!paused); require(_mintAmount > 0); require(_mintAmount <= maxMintAmount, "max mint amount per session exceeded"); require(supply + _mintAmount <= maxSupply, "max NFT limit exceeded"); if (msg.sender != owner()) { uint256 ownerMintedCount = addressMintedBalance[msg.sender]; require(ownerMintedCount + _mintAmount <= nftPerAddressLimit, "max NFT per address exceeded"); require(msg.value >= cost * _mintAmount); } for (uint256 i = 1; i <= _mintAmount; i++) { addressMintedBalance[msg.sender]++; _safeMint(msg.sender, supply + i); } } function walletOfOwner(address _owner) public view returns (uint256[] memory) { uint256 ownerTokenCount = balanceOf(_owner); uint256[] memory tokenIds = new uint256[](ownerTokenCount); for (uint256 i; i < ownerTokenCount; i++) { tokenIds[i] = tokenOfOwnerByIndex(_owner, i); } return tokenIds; } function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require( _exists(tokenId), "ERC721Metadata: URI query for nonexistent token" ); if(revealed == false) { return notRevealedUri; } string memory currentBaseURI = _baseURI(); return bytes(currentBaseURI).length > 0 ? string(abi.encodePacked(currentBaseURI, tokenId.toString(), baseExtension)) : ""; } //only owner function reveal() public onlyOwner { revealed = true; } function setCost(uint256 _newCost) public onlyOwner { cost = _newCost; } function setmaxMintAmount(uint256 _newmaxMintAmount) public onlyOwner { maxMintAmount = _newmaxMintAmount; } function setNotRevealedURI(string memory _notRevealedURI) public onlyOwner { notRevealedUri = _notRevealedURI; } function setBaseURI(string memory _newBaseURI) public onlyOwner { baseURI = _newBaseURI; } function setBaseExtension(string memory _newBaseExtension) public onlyOwner { baseExtension = _newBaseExtension; } function pause(bool _state) public onlyOwner { paused = _state; } function withdraw() public payable onlyOwner { (bool os, ) = payable(owner()).call{value: address(this).balance}(""); require(os); // ============================================================================= } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"string","name":"_initBaseURI","type":"string"},{"internalType":"string","name":"_initNotRevealedUri","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"addressMintedBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseExtension","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":"maxMintAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nftPerAddressLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"notRevealedUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reveal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseExtension","type":"string"}],"name":"setBaseExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_notRevealedURI","type":"string"}],"name":"setNotRevealedURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newmaxMintAmount","type":"uint256"}],"name":"setmaxMintAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
60806040526040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600c908051906020019062000051929190620003a6565b5066b1a2bc2ec50000600d55610ca0600e556032600f5560056010556000601160006101000a81548160ff0219169083151502179055506000601160016101000a81548160ff021916908315150217905550348015620000b057600080fd5b5060405162004f1138038062004f118339818101604052810190620000d69190620005f3565b83838160009080519060200190620000f0929190620003a6565b50806001908051906020019062000109929190620003a6565b5050506200012c620001206200015860201b60201c565b6200016060201b60201c565b6200013d826200022660201b60201c565b6200014e81620002d160201b60201c565b50505050620007c9565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620002366200015860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200025c6200037c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620002b5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002ac9062000742565b60405180910390fd5b80600b9080519060200190620002cd929190620003a6565b5050565b620002e16200015860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620003076200037c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000360576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003579062000742565b60405180910390fd5b806012908051906020019062000378929190620003a6565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054620003b49062000793565b90600052602060002090601f016020900481019282620003d8576000855562000424565b82601f10620003f357805160ff191683800117855562000424565b8280016001018555821562000424579182015b828111156200042357825182559160200191906001019062000406565b5b50905062000433919062000437565b5090565b5b808211156200045257600081600090555060010162000438565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620004bf8262000474565b810181811067ffffffffffffffff82111715620004e157620004e062000485565b5b80604052505050565b6000620004f662000456565b9050620005048282620004b4565b919050565b600067ffffffffffffffff82111562000527576200052662000485565b5b620005328262000474565b9050602081019050919050565b60005b838110156200055f57808201518184015260208101905062000542565b838111156200056f576000848401525b50505050565b60006200058c620005868462000509565b620004ea565b905082815260208101848484011115620005ab57620005aa6200046f565b5b620005b88482856200053f565b509392505050565b600082601f830112620005d857620005d76200046a565b5b8151620005ea84826020860162000575565b91505092915050565b6000806000806080858703121562000610576200060f62000460565b5b600085015167ffffffffffffffff81111562000631576200063062000465565b5b6200063f87828801620005c0565b945050602085015167ffffffffffffffff81111562000663576200066262000465565b5b6200067187828801620005c0565b935050604085015167ffffffffffffffff81111562000695576200069462000465565b5b620006a387828801620005c0565b925050606085015167ffffffffffffffff811115620006c757620006c662000465565b5b620006d587828801620005c0565b91505092959194509250565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006200072a602083620006e1565b91506200073782620006f2565b602082019050919050565b600060208201905081810360008301526200075d816200071b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620007ac57607f821691505b60208210811415620007c357620007c262000764565b5b50919050565b61473880620007d96000396000f3fe6080604052600436106102255760003560e01c80635c975abb11610123578063a475b5dd116100ab578063d5abeb011161006f578063d5abeb01146107ed578063da3ef23f14610818578063e985e9c514610841578063f2c4ce1e1461087e578063f2fde38b146108a757610225565b8063a475b5dd1461071a578063b88d4fde14610731578063ba7d2c761461075a578063c668286214610785578063c87b56dd146107b057610225565b80637f00c7a6116100f25780637f00c7a6146106565780638da5cb5b1461067f57806395d89b41146106aa578063a0712d68146106d5578063a22cb465146106f157610225565b80635c975abb1461059a5780636352211e146105c557806370a0823114610602578063715018a61461063f57610225565b8063239c70ae116101b1578063438b630011610175578063438b6300146104a357806344a0d68a146104e05780634f6ccce714610509578063518302271461054657806355f804b31461057157610225565b8063239c70ae146103df57806323b872dd1461040a5780632f745c59146104335780633ccfd60b1461047057806342842e0e1461047a57610225565b8063081c8c44116101f8578063081c8c44146102f8578063095ea7b31461032357806313faede61461034c57806318160ddd1461037757806318cae269146103a257610225565b806301ffc9a71461022a57806302329a291461026757806306fdde0314610290578063081812fc146102bb575b600080fd5b34801561023657600080fd5b50610251600480360381019061024c9190612fc8565b6108d0565b60405161025e9190613010565b60405180910390f35b34801561027357600080fd5b5061028e60048036038101906102899190613057565b61094a565b005b34801561029c57600080fd5b506102a56109e3565b6040516102b2919061311d565b60405180910390f35b3480156102c757600080fd5b506102e260048036038101906102dd9190613175565b610a75565b6040516102ef91906131e3565b60405180910390f35b34801561030457600080fd5b5061030d610afa565b60405161031a919061311d565b60405180910390f35b34801561032f57600080fd5b5061034a6004803603810190610345919061322a565b610b88565b005b34801561035857600080fd5b50610361610ca0565b60405161036e9190613279565b60405180910390f35b34801561038357600080fd5b5061038c610ca6565b6040516103999190613279565b60405180910390f35b3480156103ae57600080fd5b506103c960048036038101906103c49190613294565b610cb3565b6040516103d69190613279565b60405180910390f35b3480156103eb57600080fd5b506103f4610ccb565b6040516104019190613279565b60405180910390f35b34801561041657600080fd5b50610431600480360381019061042c91906132c1565b610cd1565b005b34801561043f57600080fd5b5061045a6004803603810190610455919061322a565b610d31565b6040516104679190613279565b60405180910390f35b610478610dd6565b005b34801561048657600080fd5b506104a1600480360381019061049c91906132c1565b610ed2565b005b3480156104af57600080fd5b506104ca60048036038101906104c59190613294565b610ef2565b6040516104d791906133d2565b60405180910390f35b3480156104ec57600080fd5b5061050760048036038101906105029190613175565b610fa0565b005b34801561051557600080fd5b50610530600480360381019061052b9190613175565b611026565b60405161053d9190613279565b60405180910390f35b34801561055257600080fd5b5061055b611097565b6040516105689190613010565b60405180910390f35b34801561057d57600080fd5b5061059860048036038101906105939190613529565b6110aa565b005b3480156105a657600080fd5b506105af611140565b6040516105bc9190613010565b60405180910390f35b3480156105d157600080fd5b506105ec60048036038101906105e79190613175565b611153565b6040516105f991906131e3565b60405180910390f35b34801561060e57600080fd5b5061062960048036038101906106249190613294565b611205565b6040516106369190613279565b60405180910390f35b34801561064b57600080fd5b506106546112bd565b005b34801561066257600080fd5b5061067d60048036038101906106789190613175565b611345565b005b34801561068b57600080fd5b506106946113cb565b6040516106a191906131e3565b60405180910390f35b3480156106b657600080fd5b506106bf6113f5565b6040516106cc919061311d565b60405180910390f35b6106ef60048036038101906106ea9190613175565b611487565b005b3480156106fd57600080fd5b5061071860048036038101906107139190613572565b6116c9565b005b34801561072657600080fd5b5061072f61184a565b005b34801561073d57600080fd5b5061075860048036038101906107539190613653565b6118e3565b005b34801561076657600080fd5b5061076f611945565b60405161077c9190613279565b60405180910390f35b34801561079157600080fd5b5061079a61194b565b6040516107a7919061311d565b60405180910390f35b3480156107bc57600080fd5b506107d760048036038101906107d29190613175565b6119d9565b6040516107e4919061311d565b60405180910390f35b3480156107f957600080fd5b50610802611b32565b60405161080f9190613279565b60405180910390f35b34801561082457600080fd5b5061083f600480360381019061083a9190613529565b611b38565b005b34801561084d57600080fd5b50610868600480360381019061086391906136d6565b611bce565b6040516108759190613010565b60405180910390f35b34801561088a57600080fd5b506108a560048036038101906108a09190613529565b611c62565b005b3480156108b357600080fd5b506108ce60048036038101906108c99190613294565b611cf8565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610943575061094282611df0565b5b9050919050565b610952611ed2565b73ffffffffffffffffffffffffffffffffffffffff166109706113cb565b73ffffffffffffffffffffffffffffffffffffffff16146109c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109bd90613762565b60405180910390fd5b80601160006101000a81548160ff02191690831515021790555050565b6060600080546109f2906137b1565b80601f0160208091040260200160405190810160405280929190818152602001828054610a1e906137b1565b8015610a6b5780601f10610a4057610100808354040283529160200191610a6b565b820191906000526020600020905b815481529060010190602001808311610a4e57829003601f168201915b5050505050905090565b6000610a8082611eda565b610abf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab690613855565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60128054610b07906137b1565b80601f0160208091040260200160405190810160405280929190818152602001828054610b33906137b1565b8015610b805780601f10610b5557610100808354040283529160200191610b80565b820191906000526020600020905b815481529060010190602001808311610b6357829003601f168201915b505050505081565b6000610b9382611153565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bfb906138e7565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c23611ed2565b73ffffffffffffffffffffffffffffffffffffffff161480610c525750610c5181610c4c611ed2565b611bce565b5b610c91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8890613979565b60405180910390fd5b610c9b8383611f46565b505050565b600d5481565b6000600880549050905090565b60136020528060005260406000206000915090505481565b600f5481565b610ce2610cdc611ed2565b82611fff565b610d21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1890613a0b565b60405180910390fd5b610d2c8383836120dd565b505050565b6000610d3c83611205565b8210610d7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7490613a9d565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610dde611ed2565b73ffffffffffffffffffffffffffffffffffffffff16610dfc6113cb565b73ffffffffffffffffffffffffffffffffffffffff1614610e52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4990613762565b60405180910390fd5b6000610e5c6113cb565b73ffffffffffffffffffffffffffffffffffffffff1647604051610e7f90613aee565b60006040518083038185875af1925050503d8060008114610ebc576040519150601f19603f3d011682016040523d82523d6000602084013e610ec1565b606091505b5050905080610ecf57600080fd5b50565b610eed838383604051806020016040528060008152506118e3565b505050565b60606000610eff83611205565b905060008167ffffffffffffffff811115610f1d57610f1c6133fe565b5b604051908082528060200260200182016040528015610f4b5781602001602082028036833780820191505090505b50905060005b82811015610f9557610f638582610d31565b828281518110610f7657610f75613b03565b5b6020026020010181815250508080610f8d90613b61565b915050610f51565b508092505050919050565b610fa8611ed2565b73ffffffffffffffffffffffffffffffffffffffff16610fc66113cb565b73ffffffffffffffffffffffffffffffffffffffff161461101c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101390613762565b60405180910390fd5b80600d8190555050565b6000611030610ca6565b8210611071576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106890613c1c565b60405180910390fd5b6008828154811061108557611084613b03565b5b90600052602060002001549050919050565b601160019054906101000a900460ff1681565b6110b2611ed2565b73ffffffffffffffffffffffffffffffffffffffff166110d06113cb565b73ffffffffffffffffffffffffffffffffffffffff1614611126576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111d90613762565b60405180910390fd5b80600b908051906020019061113c929190612eb9565b5050565b601160009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156111fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f390613cae565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611276576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126d90613d40565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6112c5611ed2565b73ffffffffffffffffffffffffffffffffffffffff166112e36113cb565b73ffffffffffffffffffffffffffffffffffffffff1614611339576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133090613762565b60405180910390fd5b6113436000612339565b565b61134d611ed2565b73ffffffffffffffffffffffffffffffffffffffff1661136b6113cb565b73ffffffffffffffffffffffffffffffffffffffff16146113c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b890613762565b60405180910390fd5b80600f8190555050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054611404906137b1565b80601f0160208091040260200160405190810160405280929190818152602001828054611430906137b1565b801561147d5780601f106114525761010080835404028352916020019161147d565b820191906000526020600020905b81548152906001019060200180831161146057829003601f168201915b5050505050905090565b6000611491610ca6565b9050601160009054906101000a900460ff16156114ad57600080fd5b600082116114ba57600080fd5b600f548211156114ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f690613dd2565b60405180910390fd5b600e54828261150e9190613df2565b111561154f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154690613e94565b60405180910390fd5b6115576113cb565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611639576000601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060105483826115dc9190613df2565b111561161d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161490613f00565b60405180910390fd5b82600d5461162b9190613f20565b34101561163757600080fd5b505b6000600190505b8281116116c457601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081548092919061169790613b61565b91905055506116b13382846116ac9190613df2565b6123ff565b80806116bc90613b61565b915050611640565b505050565b6116d1611ed2565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561173f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173690613fc6565b60405180910390fd5b806005600061174c611ed2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166117f9611ed2565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161183e9190613010565b60405180910390a35050565b611852611ed2565b73ffffffffffffffffffffffffffffffffffffffff166118706113cb565b73ffffffffffffffffffffffffffffffffffffffff16146118c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118bd90613762565b60405180910390fd5b6001601160016101000a81548160ff021916908315150217905550565b6118f46118ee611ed2565b83611fff565b611933576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192a90613a0b565b60405180910390fd5b61193f8484848461241d565b50505050565b60105481565b600c8054611958906137b1565b80601f0160208091040260200160405190810160405280929190818152602001828054611984906137b1565b80156119d15780601f106119a6576101008083540402835291602001916119d1565b820191906000526020600020905b8154815290600101906020018083116119b457829003601f168201915b505050505081565b60606119e482611eda565b611a23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1a90614058565b60405180910390fd5b60001515601160019054906101000a900460ff1615151415611ad15760128054611a4c906137b1565b80601f0160208091040260200160405190810160405280929190818152602001828054611a78906137b1565b8015611ac55780601f10611a9a57610100808354040283529160200191611ac5565b820191906000526020600020905b815481529060010190602001808311611aa857829003601f168201915b50505050509050611b2d565b6000611adb612479565b90506000815111611afb5760405180602001604052806000815250611b29565b80611b058461250b565b600c604051602001611b1993929190614148565b6040516020818303038152906040525b9150505b919050565b600e5481565b611b40611ed2565b73ffffffffffffffffffffffffffffffffffffffff16611b5e6113cb565b73ffffffffffffffffffffffffffffffffffffffff1614611bb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bab90613762565b60405180910390fd5b80600c9080519060200190611bca929190612eb9565b5050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611c6a611ed2565b73ffffffffffffffffffffffffffffffffffffffff16611c886113cb565b73ffffffffffffffffffffffffffffffffffffffff1614611cde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd590613762565b60405180910390fd5b8060129080519060200190611cf4929190612eb9565b5050565b611d00611ed2565b73ffffffffffffffffffffffffffffffffffffffff16611d1e6113cb565b73ffffffffffffffffffffffffffffffffffffffff1614611d74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6b90613762565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611de4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ddb906141eb565b60405180910390fd5b611ded81612339565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611ebb57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611ecb5750611eca8261266c565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611fb983611153565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061200a82611eda565b612049576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120409061427d565b60405180910390fd5b600061205483611153565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806120c357508373ffffffffffffffffffffffffffffffffffffffff166120ab84610a75565b73ffffffffffffffffffffffffffffffffffffffff16145b806120d457506120d38185611bce565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166120fd82611153565b73ffffffffffffffffffffffffffffffffffffffff1614612153576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214a9061430f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156121c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ba906143a1565b60405180910390fd5b6121ce8383836126d6565b6121d9600082611f46565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461222991906143c1565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546122809190613df2565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6124198282604051806020016040528060008152506127ea565b5050565b6124288484846120dd565b61243484848484612845565b612473576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161246a90614467565b60405180910390fd5b50505050565b6060600b8054612488906137b1565b80601f01602080910402602001604051908101604052809291908181526020018280546124b4906137b1565b80156125015780601f106124d657610100808354040283529160200191612501565b820191906000526020600020905b8154815290600101906020018083116124e457829003601f168201915b5050505050905090565b60606000821415612553576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612667565b600082905060005b6000821461258557808061256e90613b61565b915050600a8261257e91906144b6565b915061255b565b60008167ffffffffffffffff8111156125a1576125a06133fe565b5b6040519080825280601f01601f1916602001820160405280156125d35781602001600182028036833780820191505090505b5090505b60008514612660576001826125ec91906143c1565b9150600a856125fb91906144e7565b60306126079190613df2565b60f81b81838151811061261d5761261c613b03565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561265991906144b6565b94506125d7565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6126e18383836129cd565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156127245761271f816129d2565b612763565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612762576127618382612a1b565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156127a6576127a181612b88565b6127e5565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146127e4576127e38282612c59565b5b5b505050565b6127f48383612cd8565b6128016000848484612845565b612840576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283790614467565b60405180910390fd5b505050565b60006128668473ffffffffffffffffffffffffffffffffffffffff16612ea6565b156129c0578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261288f611ed2565b8786866040518563ffffffff1660e01b81526004016128b1949392919061456d565b6020604051808303816000875af19250505080156128ed57506040513d601f19601f820116820180604052508101906128ea91906145ce565b60015b612970573d806000811461291d576040519150601f19603f3d011682016040523d82523d6000602084013e612922565b606091505b50600081511415612968576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161295f90614467565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506129c5565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612a2884611205565b612a3291906143c1565b9050600060076000848152602001908152602001600020549050818114612b17576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612b9c91906143c1565b9050600060096000848152602001908152602001600020549050600060088381548110612bcc57612bcb613b03565b5b906000526020600020015490508060088381548110612bee57612bed613b03565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612c3d57612c3c6145fb565b5b6001900381819060005260206000200160009055905550505050565b6000612c6483611205565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612d48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d3f90614676565b60405180910390fd5b612d5181611eda565b15612d91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d88906146e2565b60405180910390fd5b612d9d600083836126d6565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612ded9190613df2565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b828054612ec5906137b1565b90600052602060002090601f016020900481019282612ee75760008555612f2e565b82601f10612f0057805160ff1916838001178555612f2e565b82800160010185558215612f2e579182015b82811115612f2d578251825591602001919060010190612f12565b5b509050612f3b9190612f3f565b5090565b5b80821115612f58576000816000905550600101612f40565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612fa581612f70565b8114612fb057600080fd5b50565b600081359050612fc281612f9c565b92915050565b600060208284031215612fde57612fdd612f66565b5b6000612fec84828501612fb3565b91505092915050565b60008115159050919050565b61300a81612ff5565b82525050565b60006020820190506130256000830184613001565b92915050565b61303481612ff5565b811461303f57600080fd5b50565b6000813590506130518161302b565b92915050565b60006020828403121561306d5761306c612f66565b5b600061307b84828501613042565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156130be5780820151818401526020810190506130a3565b838111156130cd576000848401525b50505050565b6000601f19601f8301169050919050565b60006130ef82613084565b6130f9818561308f565b93506131098185602086016130a0565b613112816130d3565b840191505092915050565b6000602082019050818103600083015261313781846130e4565b905092915050565b6000819050919050565b6131528161313f565b811461315d57600080fd5b50565b60008135905061316f81613149565b92915050565b60006020828403121561318b5761318a612f66565b5b600061319984828501613160565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006131cd826131a2565b9050919050565b6131dd816131c2565b82525050565b60006020820190506131f860008301846131d4565b92915050565b613207816131c2565b811461321257600080fd5b50565b600081359050613224816131fe565b92915050565b6000806040838503121561324157613240612f66565b5b600061324f85828601613215565b925050602061326085828601613160565b9150509250929050565b6132738161313f565b82525050565b600060208201905061328e600083018461326a565b92915050565b6000602082840312156132aa576132a9612f66565b5b60006132b884828501613215565b91505092915050565b6000806000606084860312156132da576132d9612f66565b5b60006132e886828701613215565b93505060206132f986828701613215565b925050604061330a86828701613160565b9150509250925092565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6133498161313f565b82525050565b600061335b8383613340565b60208301905092915050565b6000602082019050919050565b600061337f82613314565b613389818561331f565b935061339483613330565b8060005b838110156133c55781516133ac888261334f565b97506133b783613367565b925050600181019050613398565b5085935050505092915050565b600060208201905081810360008301526133ec8184613374565b905092915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613436826130d3565b810181811067ffffffffffffffff82111715613455576134546133fe565b5b80604052505050565b6000613468612f5c565b9050613474828261342d565b919050565b600067ffffffffffffffff821115613494576134936133fe565b5b61349d826130d3565b9050602081019050919050565b82818337600083830152505050565b60006134cc6134c784613479565b61345e565b9050828152602081018484840111156134e8576134e76133f9565b5b6134f38482856134aa565b509392505050565b600082601f8301126135105761350f6133f4565b5b81356135208482602086016134b9565b91505092915050565b60006020828403121561353f5761353e612f66565b5b600082013567ffffffffffffffff81111561355d5761355c612f6b565b5b613569848285016134fb565b91505092915050565b6000806040838503121561358957613588612f66565b5b600061359785828601613215565b92505060206135a885828601613042565b9150509250929050565b600067ffffffffffffffff8211156135cd576135cc6133fe565b5b6135d6826130d3565b9050602081019050919050565b60006135f66135f1846135b2565b61345e565b905082815260208101848484011115613612576136116133f9565b5b61361d8482856134aa565b509392505050565b600082601f83011261363a576136396133f4565b5b813561364a8482602086016135e3565b91505092915050565b6000806000806080858703121561366d5761366c612f66565b5b600061367b87828801613215565b945050602061368c87828801613215565b935050604061369d87828801613160565b925050606085013567ffffffffffffffff8111156136be576136bd612f6b565b5b6136ca87828801613625565b91505092959194509250565b600080604083850312156136ed576136ec612f66565b5b60006136fb85828601613215565b925050602061370c85828601613215565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061374c60208361308f565b915061375782613716565b602082019050919050565b6000602082019050818103600083015261377b8161373f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806137c957607f821691505b602082108114156137dd576137dc613782565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b600061383f602c8361308f565b915061384a826137e3565b604082019050919050565b6000602082019050818103600083015261386e81613832565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b60006138d160218361308f565b91506138dc82613875565b604082019050919050565b60006020820190508181036000830152613900816138c4565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b600061396360388361308f565b915061396e82613907565b604082019050919050565b6000602082019050818103600083015261399281613956565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b60006139f560318361308f565b9150613a0082613999565b604082019050919050565b60006020820190508181036000830152613a24816139e8565b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b6000613a87602b8361308f565b9150613a9282613a2b565b604082019050919050565b60006020820190508181036000830152613ab681613a7a565b9050919050565b600081905092915050565b50565b6000613ad8600083613abd565b9150613ae382613ac8565b600082019050919050565b6000613af982613acb565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613b6c8261313f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613b9f57613b9e613b32565b5b600182019050919050565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b6000613c06602c8361308f565b9150613c1182613baa565b604082019050919050565b60006020820190508181036000830152613c3581613bf9565b9050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b6000613c9860298361308f565b9150613ca382613c3c565b604082019050919050565b60006020820190508181036000830152613cc781613c8b565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000613d2a602a8361308f565b9150613d3582613cce565b604082019050919050565b60006020820190508181036000830152613d5981613d1d565b9050919050565b7f6d6178206d696e7420616d6f756e74207065722073657373696f6e206578636560008201527f6564656400000000000000000000000000000000000000000000000000000000602082015250565b6000613dbc60248361308f565b9150613dc782613d60565b604082019050919050565b60006020820190508181036000830152613deb81613daf565b9050919050565b6000613dfd8261313f565b9150613e088361313f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613e3d57613e3c613b32565b5b828201905092915050565b7f6d6178204e4654206c696d697420657863656564656400000000000000000000600082015250565b6000613e7e60168361308f565b9150613e8982613e48565b602082019050919050565b60006020820190508181036000830152613ead81613e71565b9050919050565b7f6d6178204e465420706572206164647265737320657863656564656400000000600082015250565b6000613eea601c8361308f565b9150613ef582613eb4565b602082019050919050565b60006020820190508181036000830152613f1981613edd565b9050919050565b6000613f2b8261313f565b9150613f368361313f565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613f6f57613f6e613b32565b5b828202905092915050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000613fb060198361308f565b9150613fbb82613f7a565b602082019050919050565b60006020820190508181036000830152613fdf81613fa3565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000614042602f8361308f565b915061404d82613fe6565b604082019050919050565b6000602082019050818103600083015261407181614035565b9050919050565b600081905092915050565b600061408e82613084565b6140988185614078565b93506140a88185602086016130a0565b80840191505092915050565b60008190508160005260206000209050919050565b600081546140d6816137b1565b6140e08186614078565b945060018216600081146140fb576001811461410c5761413f565b60ff1983168652818601935061413f565b614115856140b4565b60005b8381101561413757815481890152600182019150602081019050614118565b838801955050505b50505092915050565b60006141548286614083565b91506141608285614083565b915061416c82846140c9565b9150819050949350505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006141d560268361308f565b91506141e082614179565b604082019050919050565b60006020820190508181036000830152614204816141c8565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000614267602c8361308f565b91506142728261420b565b604082019050919050565b600060208201905081810360008301526142968161425a565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b60006142f960298361308f565b91506143048261429d565b604082019050919050565b60006020820190508181036000830152614328816142ec565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061438b60248361308f565b91506143968261432f565b604082019050919050565b600060208201905081810360008301526143ba8161437e565b9050919050565b60006143cc8261313f565b91506143d78361313f565b9250828210156143ea576143e9613b32565b5b828203905092915050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b600061445160328361308f565b915061445c826143f5565b604082019050919050565b6000602082019050818103600083015261448081614444565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006144c18261313f565b91506144cc8361313f565b9250826144dc576144db614487565b5b828204905092915050565b60006144f28261313f565b91506144fd8361313f565b92508261450d5761450c614487565b5b828206905092915050565b600081519050919050565b600082825260208201905092915050565b600061453f82614518565b6145498185614523565b93506145598185602086016130a0565b614562816130d3565b840191505092915050565b600060808201905061458260008301876131d4565b61458f60208301866131d4565b61459c604083018561326a565b81810360608301526145ae8184614534565b905095945050505050565b6000815190506145c881612f9c565b92915050565b6000602082840312156145e4576145e3612f66565b5b60006145f2848285016145b9565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b600061466060208361308f565b915061466b8261462a565b602082019050919050565b6000602082019050818103600083015261468f81614653565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b60006146cc601c8361308f565b91506146d782614696565b602082019050919050565b600060208201905081810360008301526146fb816146bf565b905091905056fea2646970667358221220d91813cf3772add322aaaf4d49b9f45ae50216518f953112736a8092958f276e64736f6c634300080a0033000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000000085a6f6f646c65727300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000035a4f4f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d65627156753972586b69594c59627968747a6551506632385243366559665457674354774c69624a76794c772f00000000000000000000000000000000000000000000000000000000000000000000000000000000003a516d5173757244597a365641736a73684866547476333565777341377759616b466e357037726b615536534b76762f68696464656e2e6a736f6e000000000000
Deployed Bytecode
0x6080604052600436106102255760003560e01c80635c975abb11610123578063a475b5dd116100ab578063d5abeb011161006f578063d5abeb01146107ed578063da3ef23f14610818578063e985e9c514610841578063f2c4ce1e1461087e578063f2fde38b146108a757610225565b8063a475b5dd1461071a578063b88d4fde14610731578063ba7d2c761461075a578063c668286214610785578063c87b56dd146107b057610225565b80637f00c7a6116100f25780637f00c7a6146106565780638da5cb5b1461067f57806395d89b41146106aa578063a0712d68146106d5578063a22cb465146106f157610225565b80635c975abb1461059a5780636352211e146105c557806370a0823114610602578063715018a61461063f57610225565b8063239c70ae116101b1578063438b630011610175578063438b6300146104a357806344a0d68a146104e05780634f6ccce714610509578063518302271461054657806355f804b31461057157610225565b8063239c70ae146103df57806323b872dd1461040a5780632f745c59146104335780633ccfd60b1461047057806342842e0e1461047a57610225565b8063081c8c44116101f8578063081c8c44146102f8578063095ea7b31461032357806313faede61461034c57806318160ddd1461037757806318cae269146103a257610225565b806301ffc9a71461022a57806302329a291461026757806306fdde0314610290578063081812fc146102bb575b600080fd5b34801561023657600080fd5b50610251600480360381019061024c9190612fc8565b6108d0565b60405161025e9190613010565b60405180910390f35b34801561027357600080fd5b5061028e60048036038101906102899190613057565b61094a565b005b34801561029c57600080fd5b506102a56109e3565b6040516102b2919061311d565b60405180910390f35b3480156102c757600080fd5b506102e260048036038101906102dd9190613175565b610a75565b6040516102ef91906131e3565b60405180910390f35b34801561030457600080fd5b5061030d610afa565b60405161031a919061311d565b60405180910390f35b34801561032f57600080fd5b5061034a6004803603810190610345919061322a565b610b88565b005b34801561035857600080fd5b50610361610ca0565b60405161036e9190613279565b60405180910390f35b34801561038357600080fd5b5061038c610ca6565b6040516103999190613279565b60405180910390f35b3480156103ae57600080fd5b506103c960048036038101906103c49190613294565b610cb3565b6040516103d69190613279565b60405180910390f35b3480156103eb57600080fd5b506103f4610ccb565b6040516104019190613279565b60405180910390f35b34801561041657600080fd5b50610431600480360381019061042c91906132c1565b610cd1565b005b34801561043f57600080fd5b5061045a6004803603810190610455919061322a565b610d31565b6040516104679190613279565b60405180910390f35b610478610dd6565b005b34801561048657600080fd5b506104a1600480360381019061049c91906132c1565b610ed2565b005b3480156104af57600080fd5b506104ca60048036038101906104c59190613294565b610ef2565b6040516104d791906133d2565b60405180910390f35b3480156104ec57600080fd5b5061050760048036038101906105029190613175565b610fa0565b005b34801561051557600080fd5b50610530600480360381019061052b9190613175565b611026565b60405161053d9190613279565b60405180910390f35b34801561055257600080fd5b5061055b611097565b6040516105689190613010565b60405180910390f35b34801561057d57600080fd5b5061059860048036038101906105939190613529565b6110aa565b005b3480156105a657600080fd5b506105af611140565b6040516105bc9190613010565b60405180910390f35b3480156105d157600080fd5b506105ec60048036038101906105e79190613175565b611153565b6040516105f991906131e3565b60405180910390f35b34801561060e57600080fd5b5061062960048036038101906106249190613294565b611205565b6040516106369190613279565b60405180910390f35b34801561064b57600080fd5b506106546112bd565b005b34801561066257600080fd5b5061067d60048036038101906106789190613175565b611345565b005b34801561068b57600080fd5b506106946113cb565b6040516106a191906131e3565b60405180910390f35b3480156106b657600080fd5b506106bf6113f5565b6040516106cc919061311d565b60405180910390f35b6106ef60048036038101906106ea9190613175565b611487565b005b3480156106fd57600080fd5b5061071860048036038101906107139190613572565b6116c9565b005b34801561072657600080fd5b5061072f61184a565b005b34801561073d57600080fd5b5061075860048036038101906107539190613653565b6118e3565b005b34801561076657600080fd5b5061076f611945565b60405161077c9190613279565b60405180910390f35b34801561079157600080fd5b5061079a61194b565b6040516107a7919061311d565b60405180910390f35b3480156107bc57600080fd5b506107d760048036038101906107d29190613175565b6119d9565b6040516107e4919061311d565b60405180910390f35b3480156107f957600080fd5b50610802611b32565b60405161080f9190613279565b60405180910390f35b34801561082457600080fd5b5061083f600480360381019061083a9190613529565b611b38565b005b34801561084d57600080fd5b50610868600480360381019061086391906136d6565b611bce565b6040516108759190613010565b60405180910390f35b34801561088a57600080fd5b506108a560048036038101906108a09190613529565b611c62565b005b3480156108b357600080fd5b506108ce60048036038101906108c99190613294565b611cf8565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610943575061094282611df0565b5b9050919050565b610952611ed2565b73ffffffffffffffffffffffffffffffffffffffff166109706113cb565b73ffffffffffffffffffffffffffffffffffffffff16146109c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109bd90613762565b60405180910390fd5b80601160006101000a81548160ff02191690831515021790555050565b6060600080546109f2906137b1565b80601f0160208091040260200160405190810160405280929190818152602001828054610a1e906137b1565b8015610a6b5780601f10610a4057610100808354040283529160200191610a6b565b820191906000526020600020905b815481529060010190602001808311610a4e57829003601f168201915b5050505050905090565b6000610a8082611eda565b610abf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab690613855565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60128054610b07906137b1565b80601f0160208091040260200160405190810160405280929190818152602001828054610b33906137b1565b8015610b805780601f10610b5557610100808354040283529160200191610b80565b820191906000526020600020905b815481529060010190602001808311610b6357829003601f168201915b505050505081565b6000610b9382611153565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bfb906138e7565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c23611ed2565b73ffffffffffffffffffffffffffffffffffffffff161480610c525750610c5181610c4c611ed2565b611bce565b5b610c91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8890613979565b60405180910390fd5b610c9b8383611f46565b505050565b600d5481565b6000600880549050905090565b60136020528060005260406000206000915090505481565b600f5481565b610ce2610cdc611ed2565b82611fff565b610d21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1890613a0b565b60405180910390fd5b610d2c8383836120dd565b505050565b6000610d3c83611205565b8210610d7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7490613a9d565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610dde611ed2565b73ffffffffffffffffffffffffffffffffffffffff16610dfc6113cb565b73ffffffffffffffffffffffffffffffffffffffff1614610e52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4990613762565b60405180910390fd5b6000610e5c6113cb565b73ffffffffffffffffffffffffffffffffffffffff1647604051610e7f90613aee565b60006040518083038185875af1925050503d8060008114610ebc576040519150601f19603f3d011682016040523d82523d6000602084013e610ec1565b606091505b5050905080610ecf57600080fd5b50565b610eed838383604051806020016040528060008152506118e3565b505050565b60606000610eff83611205565b905060008167ffffffffffffffff811115610f1d57610f1c6133fe565b5b604051908082528060200260200182016040528015610f4b5781602001602082028036833780820191505090505b50905060005b82811015610f9557610f638582610d31565b828281518110610f7657610f75613b03565b5b6020026020010181815250508080610f8d90613b61565b915050610f51565b508092505050919050565b610fa8611ed2565b73ffffffffffffffffffffffffffffffffffffffff16610fc66113cb565b73ffffffffffffffffffffffffffffffffffffffff161461101c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101390613762565b60405180910390fd5b80600d8190555050565b6000611030610ca6565b8210611071576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106890613c1c565b60405180910390fd5b6008828154811061108557611084613b03565b5b90600052602060002001549050919050565b601160019054906101000a900460ff1681565b6110b2611ed2565b73ffffffffffffffffffffffffffffffffffffffff166110d06113cb565b73ffffffffffffffffffffffffffffffffffffffff1614611126576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111d90613762565b60405180910390fd5b80600b908051906020019061113c929190612eb9565b5050565b601160009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156111fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f390613cae565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611276576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126d90613d40565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6112c5611ed2565b73ffffffffffffffffffffffffffffffffffffffff166112e36113cb565b73ffffffffffffffffffffffffffffffffffffffff1614611339576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133090613762565b60405180910390fd5b6113436000612339565b565b61134d611ed2565b73ffffffffffffffffffffffffffffffffffffffff1661136b6113cb565b73ffffffffffffffffffffffffffffffffffffffff16146113c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b890613762565b60405180910390fd5b80600f8190555050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054611404906137b1565b80601f0160208091040260200160405190810160405280929190818152602001828054611430906137b1565b801561147d5780601f106114525761010080835404028352916020019161147d565b820191906000526020600020905b81548152906001019060200180831161146057829003601f168201915b5050505050905090565b6000611491610ca6565b9050601160009054906101000a900460ff16156114ad57600080fd5b600082116114ba57600080fd5b600f548211156114ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f690613dd2565b60405180910390fd5b600e54828261150e9190613df2565b111561154f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154690613e94565b60405180910390fd5b6115576113cb565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611639576000601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060105483826115dc9190613df2565b111561161d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161490613f00565b60405180910390fd5b82600d5461162b9190613f20565b34101561163757600080fd5b505b6000600190505b8281116116c457601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081548092919061169790613b61565b91905055506116b13382846116ac9190613df2565b6123ff565b80806116bc90613b61565b915050611640565b505050565b6116d1611ed2565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561173f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173690613fc6565b60405180910390fd5b806005600061174c611ed2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166117f9611ed2565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161183e9190613010565b60405180910390a35050565b611852611ed2565b73ffffffffffffffffffffffffffffffffffffffff166118706113cb565b73ffffffffffffffffffffffffffffffffffffffff16146118c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118bd90613762565b60405180910390fd5b6001601160016101000a81548160ff021916908315150217905550565b6118f46118ee611ed2565b83611fff565b611933576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192a90613a0b565b60405180910390fd5b61193f8484848461241d565b50505050565b60105481565b600c8054611958906137b1565b80601f0160208091040260200160405190810160405280929190818152602001828054611984906137b1565b80156119d15780601f106119a6576101008083540402835291602001916119d1565b820191906000526020600020905b8154815290600101906020018083116119b457829003601f168201915b505050505081565b60606119e482611eda565b611a23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1a90614058565b60405180910390fd5b60001515601160019054906101000a900460ff1615151415611ad15760128054611a4c906137b1565b80601f0160208091040260200160405190810160405280929190818152602001828054611a78906137b1565b8015611ac55780601f10611a9a57610100808354040283529160200191611ac5565b820191906000526020600020905b815481529060010190602001808311611aa857829003601f168201915b50505050509050611b2d565b6000611adb612479565b90506000815111611afb5760405180602001604052806000815250611b29565b80611b058461250b565b600c604051602001611b1993929190614148565b6040516020818303038152906040525b9150505b919050565b600e5481565b611b40611ed2565b73ffffffffffffffffffffffffffffffffffffffff16611b5e6113cb565b73ffffffffffffffffffffffffffffffffffffffff1614611bb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bab90613762565b60405180910390fd5b80600c9080519060200190611bca929190612eb9565b5050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611c6a611ed2565b73ffffffffffffffffffffffffffffffffffffffff16611c886113cb565b73ffffffffffffffffffffffffffffffffffffffff1614611cde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd590613762565b60405180910390fd5b8060129080519060200190611cf4929190612eb9565b5050565b611d00611ed2565b73ffffffffffffffffffffffffffffffffffffffff16611d1e6113cb565b73ffffffffffffffffffffffffffffffffffffffff1614611d74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6b90613762565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611de4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ddb906141eb565b60405180910390fd5b611ded81612339565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611ebb57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611ecb5750611eca8261266c565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611fb983611153565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061200a82611eda565b612049576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120409061427d565b60405180910390fd5b600061205483611153565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806120c357508373ffffffffffffffffffffffffffffffffffffffff166120ab84610a75565b73ffffffffffffffffffffffffffffffffffffffff16145b806120d457506120d38185611bce565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166120fd82611153565b73ffffffffffffffffffffffffffffffffffffffff1614612153576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214a9061430f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156121c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ba906143a1565b60405180910390fd5b6121ce8383836126d6565b6121d9600082611f46565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461222991906143c1565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546122809190613df2565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6124198282604051806020016040528060008152506127ea565b5050565b6124288484846120dd565b61243484848484612845565b612473576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161246a90614467565b60405180910390fd5b50505050565b6060600b8054612488906137b1565b80601f01602080910402602001604051908101604052809291908181526020018280546124b4906137b1565b80156125015780601f106124d657610100808354040283529160200191612501565b820191906000526020600020905b8154815290600101906020018083116124e457829003601f168201915b5050505050905090565b60606000821415612553576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612667565b600082905060005b6000821461258557808061256e90613b61565b915050600a8261257e91906144b6565b915061255b565b60008167ffffffffffffffff8111156125a1576125a06133fe565b5b6040519080825280601f01601f1916602001820160405280156125d35781602001600182028036833780820191505090505b5090505b60008514612660576001826125ec91906143c1565b9150600a856125fb91906144e7565b60306126079190613df2565b60f81b81838151811061261d5761261c613b03565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561265991906144b6565b94506125d7565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6126e18383836129cd565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156127245761271f816129d2565b612763565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612762576127618382612a1b565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156127a6576127a181612b88565b6127e5565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146127e4576127e38282612c59565b5b5b505050565b6127f48383612cd8565b6128016000848484612845565b612840576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283790614467565b60405180910390fd5b505050565b60006128668473ffffffffffffffffffffffffffffffffffffffff16612ea6565b156129c0578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261288f611ed2565b8786866040518563ffffffff1660e01b81526004016128b1949392919061456d565b6020604051808303816000875af19250505080156128ed57506040513d601f19601f820116820180604052508101906128ea91906145ce565b60015b612970573d806000811461291d576040519150601f19603f3d011682016040523d82523d6000602084013e612922565b606091505b50600081511415612968576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161295f90614467565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506129c5565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612a2884611205565b612a3291906143c1565b9050600060076000848152602001908152602001600020549050818114612b17576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612b9c91906143c1565b9050600060096000848152602001908152602001600020549050600060088381548110612bcc57612bcb613b03565b5b906000526020600020015490508060088381548110612bee57612bed613b03565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612c3d57612c3c6145fb565b5b6001900381819060005260206000200160009055905550505050565b6000612c6483611205565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612d48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d3f90614676565b60405180910390fd5b612d5181611eda565b15612d91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d88906146e2565b60405180910390fd5b612d9d600083836126d6565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612ded9190613df2565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b828054612ec5906137b1565b90600052602060002090601f016020900481019282612ee75760008555612f2e565b82601f10612f0057805160ff1916838001178555612f2e565b82800160010185558215612f2e579182015b82811115612f2d578251825591602001919060010190612f12565b5b509050612f3b9190612f3f565b5090565b5b80821115612f58576000816000905550600101612f40565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612fa581612f70565b8114612fb057600080fd5b50565b600081359050612fc281612f9c565b92915050565b600060208284031215612fde57612fdd612f66565b5b6000612fec84828501612fb3565b91505092915050565b60008115159050919050565b61300a81612ff5565b82525050565b60006020820190506130256000830184613001565b92915050565b61303481612ff5565b811461303f57600080fd5b50565b6000813590506130518161302b565b92915050565b60006020828403121561306d5761306c612f66565b5b600061307b84828501613042565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156130be5780820151818401526020810190506130a3565b838111156130cd576000848401525b50505050565b6000601f19601f8301169050919050565b60006130ef82613084565b6130f9818561308f565b93506131098185602086016130a0565b613112816130d3565b840191505092915050565b6000602082019050818103600083015261313781846130e4565b905092915050565b6000819050919050565b6131528161313f565b811461315d57600080fd5b50565b60008135905061316f81613149565b92915050565b60006020828403121561318b5761318a612f66565b5b600061319984828501613160565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006131cd826131a2565b9050919050565b6131dd816131c2565b82525050565b60006020820190506131f860008301846131d4565b92915050565b613207816131c2565b811461321257600080fd5b50565b600081359050613224816131fe565b92915050565b6000806040838503121561324157613240612f66565b5b600061324f85828601613215565b925050602061326085828601613160565b9150509250929050565b6132738161313f565b82525050565b600060208201905061328e600083018461326a565b92915050565b6000602082840312156132aa576132a9612f66565b5b60006132b884828501613215565b91505092915050565b6000806000606084860312156132da576132d9612f66565b5b60006132e886828701613215565b93505060206132f986828701613215565b925050604061330a86828701613160565b9150509250925092565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6133498161313f565b82525050565b600061335b8383613340565b60208301905092915050565b6000602082019050919050565b600061337f82613314565b613389818561331f565b935061339483613330565b8060005b838110156133c55781516133ac888261334f565b97506133b783613367565b925050600181019050613398565b5085935050505092915050565b600060208201905081810360008301526133ec8184613374565b905092915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613436826130d3565b810181811067ffffffffffffffff82111715613455576134546133fe565b5b80604052505050565b6000613468612f5c565b9050613474828261342d565b919050565b600067ffffffffffffffff821115613494576134936133fe565b5b61349d826130d3565b9050602081019050919050565b82818337600083830152505050565b60006134cc6134c784613479565b61345e565b9050828152602081018484840111156134e8576134e76133f9565b5b6134f38482856134aa565b509392505050565b600082601f8301126135105761350f6133f4565b5b81356135208482602086016134b9565b91505092915050565b60006020828403121561353f5761353e612f66565b5b600082013567ffffffffffffffff81111561355d5761355c612f6b565b5b613569848285016134fb565b91505092915050565b6000806040838503121561358957613588612f66565b5b600061359785828601613215565b92505060206135a885828601613042565b9150509250929050565b600067ffffffffffffffff8211156135cd576135cc6133fe565b5b6135d6826130d3565b9050602081019050919050565b60006135f66135f1846135b2565b61345e565b905082815260208101848484011115613612576136116133f9565b5b61361d8482856134aa565b509392505050565b600082601f83011261363a576136396133f4565b5b813561364a8482602086016135e3565b91505092915050565b6000806000806080858703121561366d5761366c612f66565b5b600061367b87828801613215565b945050602061368c87828801613215565b935050604061369d87828801613160565b925050606085013567ffffffffffffffff8111156136be576136bd612f6b565b5b6136ca87828801613625565b91505092959194509250565b600080604083850312156136ed576136ec612f66565b5b60006136fb85828601613215565b925050602061370c85828601613215565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061374c60208361308f565b915061375782613716565b602082019050919050565b6000602082019050818103600083015261377b8161373f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806137c957607f821691505b602082108114156137dd576137dc613782565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b600061383f602c8361308f565b915061384a826137e3565b604082019050919050565b6000602082019050818103600083015261386e81613832565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b60006138d160218361308f565b91506138dc82613875565b604082019050919050565b60006020820190508181036000830152613900816138c4565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b600061396360388361308f565b915061396e82613907565b604082019050919050565b6000602082019050818103600083015261399281613956565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b60006139f560318361308f565b9150613a0082613999565b604082019050919050565b60006020820190508181036000830152613a24816139e8565b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b6000613a87602b8361308f565b9150613a9282613a2b565b604082019050919050565b60006020820190508181036000830152613ab681613a7a565b9050919050565b600081905092915050565b50565b6000613ad8600083613abd565b9150613ae382613ac8565b600082019050919050565b6000613af982613acb565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613b6c8261313f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613b9f57613b9e613b32565b5b600182019050919050565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b6000613c06602c8361308f565b9150613c1182613baa565b604082019050919050565b60006020820190508181036000830152613c3581613bf9565b9050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b6000613c9860298361308f565b9150613ca382613c3c565b604082019050919050565b60006020820190508181036000830152613cc781613c8b565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000613d2a602a8361308f565b9150613d3582613cce565b604082019050919050565b60006020820190508181036000830152613d5981613d1d565b9050919050565b7f6d6178206d696e7420616d6f756e74207065722073657373696f6e206578636560008201527f6564656400000000000000000000000000000000000000000000000000000000602082015250565b6000613dbc60248361308f565b9150613dc782613d60565b604082019050919050565b60006020820190508181036000830152613deb81613daf565b9050919050565b6000613dfd8261313f565b9150613e088361313f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613e3d57613e3c613b32565b5b828201905092915050565b7f6d6178204e4654206c696d697420657863656564656400000000000000000000600082015250565b6000613e7e60168361308f565b9150613e8982613e48565b602082019050919050565b60006020820190508181036000830152613ead81613e71565b9050919050565b7f6d6178204e465420706572206164647265737320657863656564656400000000600082015250565b6000613eea601c8361308f565b9150613ef582613eb4565b602082019050919050565b60006020820190508181036000830152613f1981613edd565b9050919050565b6000613f2b8261313f565b9150613f368361313f565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613f6f57613f6e613b32565b5b828202905092915050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000613fb060198361308f565b9150613fbb82613f7a565b602082019050919050565b60006020820190508181036000830152613fdf81613fa3565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000614042602f8361308f565b915061404d82613fe6565b604082019050919050565b6000602082019050818103600083015261407181614035565b9050919050565b600081905092915050565b600061408e82613084565b6140988185614078565b93506140a88185602086016130a0565b80840191505092915050565b60008190508160005260206000209050919050565b600081546140d6816137b1565b6140e08186614078565b945060018216600081146140fb576001811461410c5761413f565b60ff1983168652818601935061413f565b614115856140b4565b60005b8381101561413757815481890152600182019150602081019050614118565b838801955050505b50505092915050565b60006141548286614083565b91506141608285614083565b915061416c82846140c9565b9150819050949350505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006141d560268361308f565b91506141e082614179565b604082019050919050565b60006020820190508181036000830152614204816141c8565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000614267602c8361308f565b91506142728261420b565b604082019050919050565b600060208201905081810360008301526142968161425a565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b60006142f960298361308f565b91506143048261429d565b604082019050919050565b60006020820190508181036000830152614328816142ec565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061438b60248361308f565b91506143968261432f565b604082019050919050565b600060208201905081810360008301526143ba8161437e565b9050919050565b60006143cc8261313f565b91506143d78361313f565b9250828210156143ea576143e9613b32565b5b828203905092915050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b600061445160328361308f565b915061445c826143f5565b604082019050919050565b6000602082019050818103600083015261448081614444565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006144c18261313f565b91506144cc8361313f565b9250826144dc576144db614487565b5b828204905092915050565b60006144f28261313f565b91506144fd8361313f565b92508261450d5761450c614487565b5b828206905092915050565b600081519050919050565b600082825260208201905092915050565b600061453f82614518565b6145498185614523565b93506145598185602086016130a0565b614562816130d3565b840191505092915050565b600060808201905061458260008301876131d4565b61458f60208301866131d4565b61459c604083018561326a565b81810360608301526145ae8184614534565b905095945050505050565b6000815190506145c881612f9c565b92915050565b6000602082840312156145e4576145e3612f66565b5b60006145f2848285016145b9565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b600061466060208361308f565b915061466b8261462a565b602082019050919050565b6000602082019050818103600083015261468f81614653565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b60006146cc601c8361308f565b91506146d782614696565b602082019050919050565b600060208201905081810360008301526146fb816146bf565b905091905056fea2646970667358221220d91813cf3772add322aaaf4d49b9f45ae50216518f953112736a8092958f276e64736f6c634300080a0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000000085a6f6f646c65727300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000035a4f4f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d65627156753972586b69594c59627968747a6551506632385243366559665457674354774c69624a76794c772f00000000000000000000000000000000000000000000000000000000000000000000000000000000003a516d5173757244597a365641736a73684866547476333565777341377759616b466e357037726b615536534b76762f68696464656e2e6a736f6e000000000000
-----Decoded View---------------
Arg [0] : _name (string): Zoodlers
Arg [1] : _symbol (string): ZOO
Arg [2] : _initBaseURI (string): ipfs://QmebqVu9rXkiYLYbyhtzeQPf28RC6eYfTWgCTwLibJvyLw/
Arg [3] : _initNotRevealedUri (string): QmQsurDYz6VAsjshHfTtv35ewsA7wYakFn5p7rkaU6SKvv/hidden.json
-----Encoded View---------------
14 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000160
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000008
Arg [5] : 5a6f6f646c657273000000000000000000000000000000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [7] : 5a4f4f0000000000000000000000000000000000000000000000000000000000
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [9] : 697066733a2f2f516d65627156753972586b69594c59627968747a6551506632
Arg [10] : 385243366559665457674354774c69624a76794c772f00000000000000000000
Arg [11] : 000000000000000000000000000000000000000000000000000000000000003a
Arg [12] : 516d5173757244597a365641736a73684866547476333565777341377759616b
Arg [13] : 466e357037726b615536534b76762f68696464656e2e6a736f6e000000000000
Deployed Bytecode Sourcemap
43119:3400:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34666:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46205:73;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22558:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24117:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43481:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23640:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43264:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35306:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43514:55;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43337:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25007:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34974:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46285:231;;;:::i;:::-;;25417:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44691:348;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45637:80;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35496:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43448:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45973:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43417:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22252:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21982:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42455:94;;;;;;;;;;;;;:::i;:::-;;45723:116;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41804:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22727:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43967:718;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24410:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45564:65;;;;;;;;;;;;;:::i;:::-;;25673:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43375:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43222;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45045:497;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43301:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46077:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24776:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45847:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42704:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34666:224;34768:4;34807:35;34792:50;;;:11;:50;;;;:90;;;;34846:36;34870:11;34846:23;:36::i;:::-;34792:90;34785:97;;34666:224;;;:::o;46205:73::-;42035:12;:10;:12::i;:::-;42024:23;;:7;:5;:7::i;:::-;:23;;;42016:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46266:6:::1;46257;;:15;;;;;;;;;;;;;;;;;;46205:73:::0;:::o;22558:100::-;22612:13;22645:5;22638:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22558:100;:::o;24117:221::-;24193:7;24221:16;24229:7;24221;:16::i;:::-;24213:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;24306:15;:24;24322:7;24306:24;;;;;;;;;;;;;;;;;;;;;24299:31;;24117:221;;;:::o;43481:28::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;23640:411::-;23721:13;23737:23;23752:7;23737:14;:23::i;:::-;23721:39;;23785:5;23779:11;;:2;:11;;;;23771:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;23879:5;23863:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;23888:37;23905:5;23912:12;:10;:12::i;:::-;23888:16;:37::i;:::-;23863:62;23841:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;24022:21;24031:2;24035:7;24022:8;:21::i;:::-;23710:341;23640:411;;:::o;43264:32::-;;;;:::o;35306:113::-;35367:7;35394:10;:17;;;;35387:24;;35306:113;:::o;43514:55::-;;;;;;;;;;;;;;;;;:::o;43337:33::-;;;;:::o;25007:339::-;25202:41;25221:12;:10;:12::i;:::-;25235:7;25202:18;:41::i;:::-;25194:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;25310:28;25320:4;25326:2;25330:7;25310:9;:28::i;:::-;25007:339;;;:::o;34974:256::-;35071:7;35107:23;35124:5;35107:16;:23::i;:::-;35099:5;:31;35091:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;35196:12;:19;35209:5;35196:19;;;;;;;;;;;;;;;:26;35216:5;35196:26;;;;;;;;;;;;35189:33;;34974:256;;;;:::o;46285:231::-;42035:12;:10;:12::i;:::-;42024:23;;:7;:5;:7::i;:::-;:23;;;42016:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46338:7:::1;46359;:5;:7::i;:::-;46351:21;;46380;46351:55;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46337:69;;;46421:2;46413:11;;;::::0;::::1;;46330:186;46285:231::o:0;25417:185::-;25555:39;25572:4;25578:2;25582:7;25555:39;;;;;;;;;;;;:16;:39::i;:::-;25417:185;;;:::o;44691:348::-;44766:16;44794:23;44820:17;44830:6;44820:9;:17::i;:::-;44794:43;;44844:25;44886:15;44872:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44844:58;;44914:9;44909:103;44929:15;44925:1;:19;44909:103;;;44974:30;44994:6;45002:1;44974:19;:30::i;:::-;44960:8;44969:1;44960:11;;;;;;;;:::i;:::-;;;;;;;:44;;;;;44946:3;;;;;:::i;:::-;;;;44909:103;;;;45025:8;45018:15;;;;44691:348;;;:::o;45637:80::-;42035:12;:10;:12::i;:::-;42024:23;;:7;:5;:7::i;:::-;:23;;;42016:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45703:8:::1;45696:4;:15;;;;45637:80:::0;:::o;35496:233::-;35571:7;35607:30;:28;:30::i;:::-;35599:5;:38;35591:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;35704:10;35715:5;35704:17;;;;;;;;:::i;:::-;;;;;;;;;;35697:24;;35496:233;;;:::o;43448:28::-;;;;;;;;;;;;;:::o;45973:98::-;42035:12;:10;:12::i;:::-;42024:23;;:7;:5;:7::i;:::-;:23;;;42016:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46054:11:::1;46044:7;:21;;;;;;;;;;;;:::i;:::-;;45973:98:::0;:::o;43417:26::-;;;;;;;;;;;;;:::o;22252:239::-;22324:7;22344:13;22360:7;:16;22368:7;22360:16;;;;;;;;;;;;;;;;;;;;;22344:32;;22412:1;22395:19;;:5;:19;;;;22387:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;22478:5;22471:12;;;22252:239;;;:::o;21982:208::-;22054:7;22099:1;22082:19;;:5;:19;;;;22074:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;22166:9;:16;22176:5;22166:16;;;;;;;;;;;;;;;;22159:23;;21982:208;;;:::o;42455:94::-;42035:12;:10;:12::i;:::-;42024:23;;:7;:5;:7::i;:::-;:23;;;42016:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42520:21:::1;42538:1;42520:9;:21::i;:::-;42455:94::o:0;45723:116::-;42035:12;:10;:12::i;:::-;42024:23;;:7;:5;:7::i;:::-;:23;;;42016:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45816:17:::1;45800:13;:33;;;;45723:116:::0;:::o;41804:87::-;41850:7;41877:6;;;;;;;;;;;41870:13;;41804:87;:::o;22727:104::-;22783:13;22816:7;22809:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22727:104;:::o;43967:718::-;44024:14;44041:13;:11;:13::i;:::-;44024:30;;44070:6;;;;;;;;;;;44069:7;44061:16;;;;;;44106:1;44092:11;:15;44084:24;;;;;;44138:13;;44123:11;:28;;44115:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;44231:9;;44216:11;44207:6;:20;;;;:::i;:::-;:33;;44199:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44294:7;:5;:7::i;:::-;44280:21;;:10;:21;;;44276:258;;44314:24;44341:20;:32;44362:10;44341:32;;;;;;;;;;;;;;;;44314:59;;44426:18;;44411:11;44392:16;:30;;;;:::i;:::-;:52;;44384:93;;;;;;;;;;;;:::i;:::-;;;;;;;;;44514:11;44507:4;;:18;;;;:::i;:::-;44494:9;:31;;44486:40;;;;;;44303:231;44276:258;44547:9;44559:1;44547:13;;44542:138;44567:11;44562:1;:16;44542:138;;44596:20;:32;44617:10;44596:32;;;;;;;;;;;;;;;;:34;;;;;;;;;:::i;:::-;;;;;;44639:33;44649:10;44670:1;44661:6;:10;;;;:::i;:::-;44639:9;:33::i;:::-;44580:3;;;;;:::i;:::-;;;;44542:138;;;;44017:668;43967:718;:::o;24410:295::-;24525:12;:10;:12::i;:::-;24513:24;;:8;:24;;;;24505:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;24625:8;24580:18;:32;24599:12;:10;:12::i;:::-;24580:32;;;;;;;;;;;;;;;:42;24613:8;24580:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;24678:8;24649:48;;24664:12;:10;:12::i;:::-;24649:48;;;24688:8;24649:48;;;;;;:::i;:::-;;;;;;;;24410:295;;:::o;45564:65::-;42035:12;:10;:12::i;:::-;42024:23;;:7;:5;:7::i;:::-;:23;;;42016:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45619:4:::1;45608:8;;:15;;;;;;;;;;;;;;;;;;45564:65::o:0;25673:328::-;25848:41;25867:12;:10;:12::i;:::-;25881:7;25848:18;:41::i;:::-;25840:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;25954:39;25968:4;25974:2;25978:7;25987:5;25954:13;:39::i;:::-;25673:328;;;;:::o;43375:37::-;;;;:::o;43222:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;45045:497::-;45143:13;45184:16;45192:7;45184;:16::i;:::-;45168:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;45293:5;45281:17;;:8;;;;;;;;;;;:17;;;45278:62;;;45318:14;45311:21;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45278:62;45348:28;45379:10;:8;:10::i;:::-;45348:41;;45434:1;45409:14;45403:28;:32;:133;;;;;;;;;;;;;;;;;45471:14;45487:18;:7;:16;:18::i;:::-;45507:13;45454:67;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;45403:133;45396:140;;;45045:497;;;;:::o;43301:31::-;;;;:::o;46077:122::-;42035:12;:10;:12::i;:::-;42024:23;;:7;:5;:7::i;:::-;:23;;;42016:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46176:17:::1;46160:13;:33;;;;;;;;;;;;:::i;:::-;;46077:122:::0;:::o;24776:164::-;24873:4;24897:18;:25;24916:5;24897:25;;;;;;;;;;;;;;;:35;24923:8;24897:35;;;;;;;;;;;;;;;;;;;;;;;;;24890:42;;24776:164;;;;:::o;45847:120::-;42035:12;:10;:12::i;:::-;42024:23;;:7;:5;:7::i;:::-;:23;;;42016:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45946:15:::1;45929:14;:32;;;;;;;;;;;;:::i;:::-;;45847:120:::0;:::o;42704:192::-;42035:12;:10;:12::i;:::-;42024:23;;:7;:5;:7::i;:::-;:23;;;42016:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42813:1:::1;42793:22;;:8;:22;;;;42785:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;42869:19;42879:8;42869:9;:19::i;:::-;42704:192:::0;:::o;21613:305::-;21715:4;21767:25;21752:40;;;:11;:40;;;;:105;;;;21824:33;21809:48;;;:11;:48;;;;21752:105;:158;;;;21874:36;21898:11;21874:23;:36::i;:::-;21752:158;21732:178;;21613:305;;;:::o;20087:98::-;20140:7;20167:10;20160:17;;20087:98;:::o;27511:127::-;27576:4;27628:1;27600:30;;:7;:16;27608:7;27600:16;;;;;;;;;;;;;;;;;;;;;:30;;;;27593:37;;27511:127;;;:::o;31493:174::-;31595:2;31568:15;:24;31584:7;31568:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;31651:7;31647:2;31613:46;;31622:23;31637:7;31622:14;:23::i;:::-;31613:46;;;;;;;;;;;;31493:174;;:::o;27805:348::-;27898:4;27923:16;27931:7;27923;:16::i;:::-;27915:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27999:13;28015:23;28030:7;28015:14;:23::i;:::-;27999:39;;28068:5;28057:16;;:7;:16;;;:51;;;;28101:7;28077:31;;:20;28089:7;28077:11;:20::i;:::-;:31;;;28057:51;:87;;;;28112:32;28129:5;28136:7;28112:16;:32::i;:::-;28057:87;28049:96;;;27805:348;;;;:::o;30797:578::-;30956:4;30929:31;;:23;30944:7;30929:14;:23::i;:::-;:31;;;30921:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;31039:1;31025:16;;:2;:16;;;;31017:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;31095:39;31116:4;31122:2;31126:7;31095:20;:39::i;:::-;31199:29;31216:1;31220:7;31199:8;:29::i;:::-;31260:1;31241:9;:15;31251:4;31241:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;31289:1;31272:9;:13;31282:2;31272:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;31320:2;31301:7;:16;31309:7;31301:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;31359:7;31355:2;31340:27;;31349:4;31340:27;;;;;;;;;;;;30797:578;;;:::o;42904:173::-;42960:16;42979:6;;;;;;;;;;;42960:25;;43005:8;42996:6;;:17;;;;;;;;;;;;;;;;;;43060:8;43029:40;;43050:8;43029:40;;;;;;;;;;;;42949:128;42904:173;:::o;28495:110::-;28571:26;28581:2;28585:7;28571:26;;;;;;;;;;;;:9;:26::i;:::-;28495:110;;:::o;26883:315::-;27040:28;27050:4;27056:2;27060:7;27040:9;:28::i;:::-;27087:48;27110:4;27116:2;27120:7;27129:5;27087:22;:48::i;:::-;27079:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;26883:315;;;;:::o;43846:102::-;43906:13;43935:7;43928:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43846:102;:::o;7919:723::-;7975:13;8205:1;8196:5;:10;8192:53;;;8223:10;;;;;;;;;;;;;;;;;;;;;8192:53;8255:12;8270:5;8255:20;;8286:14;8311:78;8326:1;8318:4;:9;8311:78;;8344:8;;;;;:::i;:::-;;;;8375:2;8367:10;;;;;:::i;:::-;;;8311:78;;;8399:19;8431:6;8421:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8399:39;;8449:154;8465:1;8456:5;:10;8449:154;;8493:1;8483:11;;;;;:::i;:::-;;;8560:2;8552:5;:10;;;;:::i;:::-;8539:2;:24;;;;:::i;:::-;8526:39;;8509:6;8516;8509:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;8589:2;8580:11;;;;;:::i;:::-;;;8449:154;;;8627:6;8613:21;;;;;7919:723;;;;:::o;7444:157::-;7529:4;7568:25;7553:40;;;:11;:40;;;;7546:47;;7444:157;;;:::o;36342:589::-;36486:45;36513:4;36519:2;36523:7;36486:26;:45::i;:::-;36564:1;36548:18;;:4;:18;;;36544:187;;;36583:40;36615:7;36583:31;:40::i;:::-;36544:187;;;36653:2;36645:10;;:4;:10;;;36641:90;;36672:47;36705:4;36711:7;36672:32;:47::i;:::-;36641:90;36544:187;36759:1;36745:16;;:2;:16;;;36741:183;;;36778:45;36815:7;36778:36;:45::i;:::-;36741:183;;;36851:4;36845:10;;:2;:10;;;36841:83;;36872:40;36900:2;36904:7;36872:27;:40::i;:::-;36841:83;36741:183;36342:589;;;:::o;28832:321::-;28962:18;28968:2;28972:7;28962:5;:18::i;:::-;29013:54;29044:1;29048:2;29052:7;29061:5;29013:22;:54::i;:::-;28991:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;28832:321;;;:::o;32232:799::-;32387:4;32408:15;:2;:13;;;:15::i;:::-;32404:620;;;32460:2;32444:36;;;32481:12;:10;:12::i;:::-;32495:4;32501:7;32510:5;32444:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;32440:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32703:1;32686:6;:13;:18;32682:272;;;32729:60;;;;;;;;;;:::i;:::-;;;;;;;;32682:272;32904:6;32898:13;32889:6;32885:2;32881:15;32874:38;32440:529;32577:41;;;32567:51;;;:6;:51;;;;32560:58;;;;;32404:620;33008:4;33001:11;;32232:799;;;;;;;:::o;33603:126::-;;;;:::o;37654:164::-;37758:10;:17;;;;37731:15;:24;37747:7;37731:24;;;;;;;;;;;:44;;;;37786:10;37802:7;37786:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37654:164;:::o;38445:988::-;38711:22;38761:1;38736:22;38753:4;38736:16;:22::i;:::-;:26;;;;:::i;:::-;38711:51;;38773:18;38794:17;:26;38812:7;38794:26;;;;;;;;;;;;38773:47;;38941:14;38927:10;:28;38923:328;;38972:19;38994:12;:18;39007:4;38994:18;;;;;;;;;;;;;;;:34;39013:14;38994:34;;;;;;;;;;;;38972:56;;39078:11;39045:12;:18;39058:4;39045:18;;;;;;;;;;;;;;;:30;39064:10;39045:30;;;;;;;;;;;:44;;;;39195:10;39162:17;:30;39180:11;39162:30;;;;;;;;;;;:43;;;;38957:294;38923:328;39347:17;:26;39365:7;39347:26;;;;;;;;;;;39340:33;;;39391:12;:18;39404:4;39391:18;;;;;;;;;;;;;;;:34;39410:14;39391:34;;;;;;;;;;;39384:41;;;38526:907;;38445:988;;:::o;39728:1079::-;39981:22;40026:1;40006:10;:17;;;;:21;;;;:::i;:::-;39981:46;;40038:18;40059:15;:24;40075:7;40059:24;;;;;;;;;;;;40038:45;;40410:19;40432:10;40443:14;40432:26;;;;;;;;:::i;:::-;;;;;;;;;;40410:48;;40496:11;40471:10;40482;40471:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;40607:10;40576:15;:28;40592:11;40576:28;;;;;;;;;;;:41;;;;40748:15;:24;40764:7;40748:24;;;;;;;;;;;40741:31;;;40783:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;39799:1008;;;39728:1079;:::o;37232:221::-;37317:14;37334:20;37351:2;37334:16;:20::i;:::-;37317:37;;37392:7;37365:12;:16;37378:2;37365:16;;;;;;;;;;;;;;;:24;37382:6;37365:24;;;;;;;;;;;:34;;;;37439:6;37410:17;:26;37428:7;37410:26;;;;;;;;;;;:35;;;;37306:147;37232:221;;:::o;29489:382::-;29583:1;29569:16;;:2;:16;;;;29561:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;29642:16;29650:7;29642;:16::i;:::-;29641:17;29633:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;29704:45;29733:1;29737:2;29741:7;29704:20;:45::i;:::-;29779:1;29762:9;:13;29772:2;29762:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;29810:2;29791:7;:16;29799:7;29791:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;29855:7;29851:2;29830:33;;29847:1;29830:33;;;;;;;;;;;;29489:382;;:::o;10444:387::-;10504:4;10712:12;10779:7;10767:20;10759:28;;10822:1;10815:4;:8;10808:15;;;10444:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:116::-;1588:21;1603:5;1588:21;:::i;:::-;1581:5;1578:32;1568:60;;1624:1;1621;1614:12;1568:60;1518:116;:::o;1640:133::-;1683:5;1721:6;1708:20;1699:29;;1737:30;1761:5;1737:30;:::i;:::-;1640:133;;;;:::o;1779:323::-;1835:6;1884:2;1872:9;1863:7;1859:23;1855:32;1852:119;;;1890:79;;:::i;:::-;1852:119;2010:1;2035:50;2077:7;2068:6;2057:9;2053:22;2035:50;:::i;:::-;2025:60;;1981:114;1779:323;;;;:::o;2108:99::-;2160:6;2194:5;2188:12;2178:22;;2108:99;;;:::o;2213:169::-;2297:11;2331:6;2326:3;2319:19;2371:4;2366:3;2362:14;2347:29;;2213:169;;;;:::o;2388:307::-;2456:1;2466:113;2480:6;2477:1;2474:13;2466:113;;;2565:1;2560:3;2556:11;2550:18;2546:1;2541:3;2537:11;2530:39;2502:2;2499:1;2495:10;2490:15;;2466:113;;;2597:6;2594:1;2591:13;2588:101;;;2677:1;2668:6;2663:3;2659:16;2652:27;2588:101;2437:258;2388:307;;;:::o;2701:102::-;2742:6;2793:2;2789:7;2784:2;2777:5;2773:14;2769:28;2759:38;;2701:102;;;:::o;2809:364::-;2897:3;2925:39;2958:5;2925:39;:::i;:::-;2980:71;3044:6;3039:3;2980:71;:::i;:::-;2973:78;;3060:52;3105:6;3100:3;3093:4;3086:5;3082:16;3060:52;:::i;:::-;3137:29;3159:6;3137:29;:::i;:::-;3132:3;3128:39;3121:46;;2901:272;2809:364;;;;:::o;3179:313::-;3292:4;3330:2;3319:9;3315:18;3307:26;;3379:9;3373:4;3369:20;3365:1;3354:9;3350:17;3343:47;3407:78;3480:4;3471:6;3407:78;:::i;:::-;3399:86;;3179:313;;;;:::o;3498:77::-;3535:7;3564:5;3553:16;;3498:77;;;:::o;3581:122::-;3654:24;3672:5;3654:24;:::i;:::-;3647:5;3644:35;3634:63;;3693:1;3690;3683:12;3634:63;3581:122;:::o;3709:139::-;3755:5;3793:6;3780:20;3771:29;;3809:33;3836:5;3809:33;:::i;:::-;3709:139;;;;:::o;3854:329::-;3913:6;3962:2;3950:9;3941:7;3937:23;3933:32;3930:119;;;3968:79;;:::i;:::-;3930:119;4088:1;4113:53;4158:7;4149:6;4138:9;4134:22;4113:53;:::i;:::-;4103:63;;4059:117;3854:329;;;;:::o;4189:126::-;4226:7;4266:42;4259:5;4255:54;4244:65;;4189:126;;;:::o;4321:96::-;4358:7;4387:24;4405:5;4387:24;:::i;:::-;4376:35;;4321:96;;;:::o;4423:118::-;4510:24;4528:5;4510:24;:::i;:::-;4505:3;4498:37;4423:118;;:::o;4547:222::-;4640:4;4678:2;4667:9;4663:18;4655:26;;4691:71;4759:1;4748:9;4744:17;4735:6;4691:71;:::i;:::-;4547:222;;;;:::o;4775:122::-;4848:24;4866:5;4848:24;:::i;:::-;4841:5;4838:35;4828:63;;4887:1;4884;4877:12;4828:63;4775:122;:::o;4903:139::-;4949:5;4987:6;4974:20;4965:29;;5003:33;5030:5;5003:33;:::i;:::-;4903:139;;;;:::o;5048:474::-;5116:6;5124;5173:2;5161:9;5152:7;5148:23;5144:32;5141:119;;;5179:79;;:::i;:::-;5141:119;5299:1;5324:53;5369:7;5360:6;5349:9;5345:22;5324:53;:::i;:::-;5314:63;;5270:117;5426:2;5452:53;5497:7;5488:6;5477:9;5473:22;5452:53;:::i;:::-;5442:63;;5397:118;5048:474;;;;;:::o;5528:118::-;5615:24;5633:5;5615:24;:::i;:::-;5610:3;5603:37;5528:118;;:::o;5652:222::-;5745:4;5783:2;5772:9;5768:18;5760:26;;5796:71;5864:1;5853:9;5849:17;5840:6;5796:71;:::i;:::-;5652:222;;;;:::o;5880:329::-;5939:6;5988:2;5976:9;5967:7;5963:23;5959:32;5956:119;;;5994:79;;:::i;:::-;5956:119;6114:1;6139:53;6184:7;6175:6;6164:9;6160:22;6139:53;:::i;:::-;6129:63;;6085:117;5880:329;;;;:::o;6215:619::-;6292:6;6300;6308;6357:2;6345:9;6336:7;6332:23;6328:32;6325:119;;;6363:79;;:::i;:::-;6325:119;6483:1;6508:53;6553:7;6544:6;6533:9;6529:22;6508:53;:::i;:::-;6498:63;;6454:117;6610:2;6636:53;6681:7;6672:6;6661:9;6657:22;6636:53;:::i;:::-;6626:63;;6581:118;6738:2;6764:53;6809:7;6800:6;6789:9;6785:22;6764:53;:::i;:::-;6754:63;;6709:118;6215:619;;;;;:::o;6840:114::-;6907:6;6941:5;6935:12;6925:22;;6840:114;;;:::o;6960:184::-;7059:11;7093:6;7088:3;7081:19;7133:4;7128:3;7124:14;7109:29;;6960:184;;;;:::o;7150:132::-;7217:4;7240:3;7232:11;;7270:4;7265:3;7261:14;7253:22;;7150:132;;;:::o;7288:108::-;7365:24;7383:5;7365:24;:::i;:::-;7360:3;7353:37;7288:108;;:::o;7402:179::-;7471:10;7492:46;7534:3;7526:6;7492:46;:::i;:::-;7570:4;7565:3;7561:14;7547:28;;7402:179;;;;:::o;7587:113::-;7657:4;7689;7684:3;7680:14;7672:22;;7587:113;;;:::o;7736:732::-;7855:3;7884:54;7932:5;7884:54;:::i;:::-;7954:86;8033:6;8028:3;7954:86;:::i;:::-;7947:93;;8064:56;8114:5;8064:56;:::i;:::-;8143:7;8174:1;8159:284;8184:6;8181:1;8178:13;8159:284;;;8260:6;8254:13;8287:63;8346:3;8331:13;8287:63;:::i;:::-;8280:70;;8373:60;8426:6;8373:60;:::i;:::-;8363:70;;8219:224;8206:1;8203;8199:9;8194:14;;8159:284;;;8163:14;8459:3;8452:10;;7860:608;;;7736:732;;;;:::o;8474:373::-;8617:4;8655:2;8644:9;8640:18;8632:26;;8704:9;8698:4;8694:20;8690:1;8679:9;8675:17;8668:47;8732:108;8835:4;8826:6;8732:108;:::i;:::-;8724:116;;8474:373;;;;:::o;8853:117::-;8962:1;8959;8952:12;8976:117;9085:1;9082;9075:12;9099:180;9147:77;9144:1;9137:88;9244:4;9241:1;9234:15;9268:4;9265:1;9258:15;9285:281;9368:27;9390:4;9368:27;:::i;:::-;9360:6;9356:40;9498:6;9486:10;9483:22;9462:18;9450:10;9447:34;9444:62;9441:88;;;9509:18;;:::i;:::-;9441:88;9549:10;9545:2;9538:22;9328:238;9285:281;;:::o;9572:129::-;9606:6;9633:20;;:::i;:::-;9623:30;;9662:33;9690:4;9682:6;9662:33;:::i;:::-;9572:129;;;:::o;9707:308::-;9769:4;9859:18;9851:6;9848:30;9845:56;;;9881:18;;:::i;:::-;9845:56;9919:29;9941:6;9919:29;:::i;:::-;9911:37;;10003:4;9997;9993:15;9985:23;;9707:308;;;:::o;10021:154::-;10105:6;10100:3;10095;10082:30;10167:1;10158:6;10153:3;10149:16;10142:27;10021:154;;;:::o;10181:412::-;10259:5;10284:66;10300:49;10342:6;10300:49;:::i;:::-;10284:66;:::i;:::-;10275:75;;10373:6;10366:5;10359:21;10411:4;10404:5;10400:16;10449:3;10440:6;10435:3;10431:16;10428:25;10425:112;;;10456:79;;:::i;:::-;10425:112;10546:41;10580:6;10575:3;10570;10546:41;:::i;:::-;10265:328;10181:412;;;;;:::o;10613:340::-;10669:5;10718:3;10711:4;10703:6;10699:17;10695:27;10685:122;;10726:79;;:::i;:::-;10685:122;10843:6;10830:20;10868:79;10943:3;10935:6;10928:4;10920:6;10916:17;10868:79;:::i;:::-;10859:88;;10675:278;10613:340;;;;:::o;10959:509::-;11028:6;11077:2;11065:9;11056:7;11052:23;11048:32;11045:119;;;11083:79;;:::i;:::-;11045:119;11231:1;11220:9;11216:17;11203:31;11261:18;11253:6;11250:30;11247:117;;;11283:79;;:::i;:::-;11247:117;11388:63;11443:7;11434:6;11423:9;11419:22;11388:63;:::i;:::-;11378:73;;11174:287;10959:509;;;;:::o;11474:468::-;11539:6;11547;11596:2;11584:9;11575:7;11571:23;11567:32;11564:119;;;11602:79;;:::i;:::-;11564:119;11722:1;11747:53;11792:7;11783:6;11772:9;11768:22;11747:53;:::i;:::-;11737:63;;11693:117;11849:2;11875:50;11917:7;11908:6;11897:9;11893:22;11875:50;:::i;:::-;11865:60;;11820:115;11474:468;;;;;:::o;11948:307::-;12009:4;12099:18;12091:6;12088:30;12085:56;;;12121:18;;:::i;:::-;12085:56;12159:29;12181:6;12159:29;:::i;:::-;12151:37;;12243:4;12237;12233:15;12225:23;;11948:307;;;:::o;12261:410::-;12338:5;12363:65;12379:48;12420:6;12379:48;:::i;:::-;12363:65;:::i;:::-;12354:74;;12451:6;12444:5;12437:21;12489:4;12482:5;12478:16;12527:3;12518:6;12513:3;12509:16;12506:25;12503:112;;;12534:79;;:::i;:::-;12503:112;12624:41;12658:6;12653:3;12648;12624:41;:::i;:::-;12344:327;12261:410;;;;;:::o;12690:338::-;12745:5;12794:3;12787:4;12779:6;12775:17;12771:27;12761:122;;12802:79;;:::i;:::-;12761:122;12919:6;12906:20;12944:78;13018:3;13010:6;13003:4;12995:6;12991:17;12944:78;:::i;:::-;12935:87;;12751:277;12690:338;;;;:::o;13034:943::-;13129:6;13137;13145;13153;13202:3;13190:9;13181:7;13177:23;13173:33;13170:120;;;13209:79;;:::i;:::-;13170:120;13329:1;13354:53;13399:7;13390:6;13379:9;13375:22;13354:53;:::i;:::-;13344:63;;13300:117;13456:2;13482:53;13527:7;13518:6;13507:9;13503:22;13482:53;:::i;:::-;13472:63;;13427:118;13584:2;13610:53;13655:7;13646:6;13635:9;13631:22;13610:53;:::i;:::-;13600:63;;13555:118;13740:2;13729:9;13725:18;13712:32;13771:18;13763:6;13760:30;13757:117;;;13793:79;;:::i;:::-;13757:117;13898:62;13952:7;13943:6;13932:9;13928:22;13898:62;:::i;:::-;13888:72;;13683:287;13034:943;;;;;;;:::o;13983:474::-;14051:6;14059;14108:2;14096:9;14087:7;14083:23;14079:32;14076:119;;;14114:79;;:::i;:::-;14076:119;14234:1;14259:53;14304:7;14295:6;14284:9;14280:22;14259:53;:::i;:::-;14249:63;;14205:117;14361:2;14387:53;14432:7;14423:6;14412:9;14408:22;14387:53;:::i;:::-;14377:63;;14332:118;13983:474;;;;;:::o;14463:182::-;14603:34;14599:1;14591:6;14587:14;14580:58;14463:182;:::o;14651:366::-;14793:3;14814:67;14878:2;14873:3;14814:67;:::i;:::-;14807:74;;14890:93;14979:3;14890:93;:::i;:::-;15008:2;15003:3;14999:12;14992:19;;14651:366;;;:::o;15023:419::-;15189:4;15227:2;15216:9;15212:18;15204:26;;15276:9;15270:4;15266:20;15262:1;15251:9;15247:17;15240:47;15304:131;15430:4;15304:131;:::i;:::-;15296:139;;15023:419;;;:::o;15448:180::-;15496:77;15493:1;15486:88;15593:4;15590:1;15583:15;15617:4;15614:1;15607:15;15634:320;15678:6;15715:1;15709:4;15705:12;15695:22;;15762:1;15756:4;15752:12;15783:18;15773:81;;15839:4;15831:6;15827:17;15817:27;;15773:81;15901:2;15893:6;15890:14;15870:18;15867:38;15864:84;;;15920:18;;:::i;:::-;15864:84;15685:269;15634:320;;;:::o;15960:231::-;16100:34;16096:1;16088:6;16084:14;16077:58;16169:14;16164:2;16156:6;16152:15;16145:39;15960:231;:::o;16197:366::-;16339:3;16360:67;16424:2;16419:3;16360:67;:::i;:::-;16353:74;;16436:93;16525:3;16436:93;:::i;:::-;16554:2;16549:3;16545:12;16538:19;;16197:366;;;:::o;16569:419::-;16735:4;16773:2;16762:9;16758:18;16750:26;;16822:9;16816:4;16812:20;16808:1;16797:9;16793:17;16786:47;16850:131;16976:4;16850:131;:::i;:::-;16842:139;;16569:419;;;:::o;16994:220::-;17134:34;17130:1;17122:6;17118:14;17111:58;17203:3;17198:2;17190:6;17186:15;17179:28;16994:220;:::o;17220:366::-;17362:3;17383:67;17447:2;17442:3;17383:67;:::i;:::-;17376:74;;17459:93;17548:3;17459:93;:::i;:::-;17577:2;17572:3;17568:12;17561:19;;17220:366;;;:::o;17592:419::-;17758:4;17796:2;17785:9;17781:18;17773:26;;17845:9;17839:4;17835:20;17831:1;17820:9;17816:17;17809:47;17873:131;17999:4;17873:131;:::i;:::-;17865:139;;17592:419;;;:::o;18017:243::-;18157:34;18153:1;18145:6;18141:14;18134:58;18226:26;18221:2;18213:6;18209:15;18202:51;18017:243;:::o;18266:366::-;18408:3;18429:67;18493:2;18488:3;18429:67;:::i;:::-;18422:74;;18505:93;18594:3;18505:93;:::i;:::-;18623:2;18618:3;18614:12;18607:19;;18266:366;;;:::o;18638:419::-;18804:4;18842:2;18831:9;18827:18;18819:26;;18891:9;18885:4;18881:20;18877:1;18866:9;18862:17;18855:47;18919:131;19045:4;18919:131;:::i;:::-;18911:139;;18638:419;;;:::o;19063:236::-;19203:34;19199:1;19191:6;19187:14;19180:58;19272:19;19267:2;19259:6;19255:15;19248:44;19063:236;:::o;19305:366::-;19447:3;19468:67;19532:2;19527:3;19468:67;:::i;:::-;19461:74;;19544:93;19633:3;19544:93;:::i;:::-;19662:2;19657:3;19653:12;19646:19;;19305:366;;;:::o;19677:419::-;19843:4;19881:2;19870:9;19866:18;19858:26;;19930:9;19924:4;19920:20;19916:1;19905:9;19901:17;19894:47;19958:131;20084:4;19958:131;:::i;:::-;19950:139;;19677:419;;;:::o;20102:230::-;20242:34;20238:1;20230:6;20226:14;20219:58;20311:13;20306:2;20298:6;20294:15;20287:38;20102:230;:::o;20338:366::-;20480:3;20501:67;20565:2;20560:3;20501:67;:::i;:::-;20494:74;;20577:93;20666:3;20577:93;:::i;:::-;20695:2;20690:3;20686:12;20679:19;;20338:366;;;:::o;20710:419::-;20876:4;20914:2;20903:9;20899:18;20891:26;;20963:9;20957:4;20953:20;20949:1;20938:9;20934:17;20927:47;20991:131;21117:4;20991:131;:::i;:::-;20983:139;;20710:419;;;:::o;21135:147::-;21236:11;21273:3;21258:18;;21135:147;;;;:::o;21288:114::-;;:::o;21408:398::-;21567:3;21588:83;21669:1;21664:3;21588:83;:::i;:::-;21581:90;;21680:93;21769:3;21680:93;:::i;:::-;21798:1;21793:3;21789:11;21782:18;;21408:398;;;:::o;21812:379::-;21996:3;22018:147;22161:3;22018:147;:::i;:::-;22011:154;;22182:3;22175:10;;21812:379;;;:::o;22197:180::-;22245:77;22242:1;22235:88;22342:4;22339:1;22332:15;22366:4;22363:1;22356:15;22383:180;22431:77;22428:1;22421:88;22528:4;22525:1;22518:15;22552:4;22549:1;22542:15;22569:233;22608:3;22631:24;22649:5;22631:24;:::i;:::-;22622:33;;22677:66;22670:5;22667:77;22664:103;;;22747:18;;:::i;:::-;22664:103;22794:1;22787:5;22783:13;22776:20;;22569:233;;;:::o;22808:231::-;22948:34;22944:1;22936:6;22932:14;22925:58;23017:14;23012:2;23004:6;23000:15;22993:39;22808:231;:::o;23045:366::-;23187:3;23208:67;23272:2;23267:3;23208:67;:::i;:::-;23201:74;;23284:93;23373:3;23284:93;:::i;:::-;23402:2;23397:3;23393:12;23386:19;;23045:366;;;:::o;23417:419::-;23583:4;23621:2;23610:9;23606:18;23598:26;;23670:9;23664:4;23660:20;23656:1;23645:9;23641:17;23634:47;23698:131;23824:4;23698:131;:::i;:::-;23690:139;;23417:419;;;:::o;23842:228::-;23982:34;23978:1;23970:6;23966:14;23959:58;24051:11;24046:2;24038:6;24034:15;24027:36;23842:228;:::o;24076:366::-;24218:3;24239:67;24303:2;24298:3;24239:67;:::i;:::-;24232:74;;24315:93;24404:3;24315:93;:::i;:::-;24433:2;24428:3;24424:12;24417:19;;24076:366;;;:::o;24448:419::-;24614:4;24652:2;24641:9;24637:18;24629:26;;24701:9;24695:4;24691:20;24687:1;24676:9;24672:17;24665:47;24729:131;24855:4;24729:131;:::i;:::-;24721:139;;24448:419;;;:::o;24873:229::-;25013:34;25009:1;25001:6;24997:14;24990:58;25082:12;25077:2;25069:6;25065:15;25058:37;24873:229;:::o;25108:366::-;25250:3;25271:67;25335:2;25330:3;25271:67;:::i;:::-;25264:74;;25347:93;25436:3;25347:93;:::i;:::-;25465:2;25460:3;25456:12;25449:19;;25108:366;;;:::o;25480:419::-;25646:4;25684:2;25673:9;25669:18;25661:26;;25733:9;25727:4;25723:20;25719:1;25708:9;25704:17;25697:47;25761:131;25887:4;25761:131;:::i;:::-;25753:139;;25480:419;;;:::o;25905:223::-;26045:34;26041:1;26033:6;26029:14;26022:58;26114:6;26109:2;26101:6;26097:15;26090:31;25905:223;:::o;26134:366::-;26276:3;26297:67;26361:2;26356:3;26297:67;:::i;:::-;26290:74;;26373:93;26462:3;26373:93;:::i;:::-;26491:2;26486:3;26482:12;26475:19;;26134:366;;;:::o;26506:419::-;26672:4;26710:2;26699:9;26695:18;26687:26;;26759:9;26753:4;26749:20;26745:1;26734:9;26730:17;26723:47;26787:131;26913:4;26787:131;:::i;:::-;26779:139;;26506:419;;;:::o;26931:305::-;26971:3;26990:20;27008:1;26990:20;:::i;:::-;26985:25;;27024:20;27042:1;27024:20;:::i;:::-;27019:25;;27178:1;27110:66;27106:74;27103:1;27100:81;27097:107;;;27184:18;;:::i;:::-;27097:107;27228:1;27225;27221:9;27214:16;;26931:305;;;;:::o;27242:172::-;27382:24;27378:1;27370:6;27366:14;27359:48;27242:172;:::o;27420:366::-;27562:3;27583:67;27647:2;27642:3;27583:67;:::i;:::-;27576:74;;27659:93;27748:3;27659:93;:::i;:::-;27777:2;27772:3;27768:12;27761:19;;27420:366;;;:::o;27792:419::-;27958:4;27996:2;27985:9;27981:18;27973:26;;28045:9;28039:4;28035:20;28031:1;28020:9;28016:17;28009:47;28073:131;28199:4;28073:131;:::i;:::-;28065:139;;27792:419;;;:::o;28217:178::-;28357:30;28353:1;28345:6;28341:14;28334:54;28217:178;:::o;28401:366::-;28543:3;28564:67;28628:2;28623:3;28564:67;:::i;:::-;28557:74;;28640:93;28729:3;28640:93;:::i;:::-;28758:2;28753:3;28749:12;28742:19;;28401:366;;;:::o;28773:419::-;28939:4;28977:2;28966:9;28962:18;28954:26;;29026:9;29020:4;29016:20;29012:1;29001:9;28997:17;28990:47;29054:131;29180:4;29054:131;:::i;:::-;29046:139;;28773:419;;;:::o;29198:348::-;29238:7;29261:20;29279:1;29261:20;:::i;:::-;29256:25;;29295:20;29313:1;29295:20;:::i;:::-;29290:25;;29483:1;29415:66;29411:74;29408:1;29405:81;29400:1;29393:9;29386:17;29382:105;29379:131;;;29490:18;;:::i;:::-;29379:131;29538:1;29535;29531:9;29520:20;;29198:348;;;;:::o;29552:175::-;29692:27;29688:1;29680:6;29676:14;29669:51;29552:175;:::o;29733:366::-;29875:3;29896:67;29960:2;29955:3;29896:67;:::i;:::-;29889:74;;29972:93;30061:3;29972:93;:::i;:::-;30090:2;30085:3;30081:12;30074:19;;29733:366;;;:::o;30105:419::-;30271:4;30309:2;30298:9;30294:18;30286:26;;30358:9;30352:4;30348:20;30344:1;30333:9;30329:17;30322:47;30386:131;30512:4;30386:131;:::i;:::-;30378:139;;30105:419;;;:::o;30530:234::-;30670:34;30666:1;30658:6;30654:14;30647:58;30739:17;30734:2;30726:6;30722:15;30715:42;30530:234;:::o;30770:366::-;30912:3;30933:67;30997:2;30992:3;30933:67;:::i;:::-;30926:74;;31009:93;31098:3;31009:93;:::i;:::-;31127:2;31122:3;31118:12;31111:19;;30770:366;;;:::o;31142:419::-;31308:4;31346:2;31335:9;31331:18;31323:26;;31395:9;31389:4;31385:20;31381:1;31370:9;31366:17;31359:47;31423:131;31549:4;31423:131;:::i;:::-;31415:139;;31142:419;;;:::o;31567:148::-;31669:11;31706:3;31691:18;;31567:148;;;;:::o;31721:377::-;31827:3;31855:39;31888:5;31855:39;:::i;:::-;31910:89;31992:6;31987:3;31910:89;:::i;:::-;31903:96;;32008:52;32053:6;32048:3;32041:4;32034:5;32030:16;32008:52;:::i;:::-;32085:6;32080:3;32076:16;32069:23;;31831:267;31721:377;;;;:::o;32104:141::-;32153:4;32176:3;32168:11;;32199:3;32196:1;32189:14;32233:4;32230:1;32220:18;32212:26;;32104:141;;;:::o;32275:845::-;32378:3;32415:5;32409:12;32444:36;32470:9;32444:36;:::i;:::-;32496:89;32578:6;32573:3;32496:89;:::i;:::-;32489:96;;32616:1;32605:9;32601:17;32632:1;32627:137;;;;32778:1;32773:341;;;;32594:520;;32627:137;32711:4;32707:9;32696;32692:25;32687:3;32680:38;32747:6;32742:3;32738:16;32731:23;;32627:137;;32773:341;32840:38;32872:5;32840:38;:::i;:::-;32900:1;32914:154;32928:6;32925:1;32922:13;32914:154;;;33002:7;32996:14;32992:1;32987:3;32983:11;32976:35;33052:1;33043:7;33039:15;33028:26;;32950:4;32947:1;32943:12;32938:17;;32914:154;;;33097:6;33092:3;33088:16;33081:23;;32780:334;;32594:520;;32382:738;;32275:845;;;;:::o;33126:589::-;33351:3;33373:95;33464:3;33455:6;33373:95;:::i;:::-;33366:102;;33485:95;33576:3;33567:6;33485:95;:::i;:::-;33478:102;;33597:92;33685:3;33676:6;33597:92;:::i;:::-;33590:99;;33706:3;33699:10;;33126:589;;;;;;:::o;33721:225::-;33861:34;33857:1;33849:6;33845:14;33838:58;33930:8;33925:2;33917:6;33913:15;33906:33;33721:225;:::o;33952:366::-;34094:3;34115:67;34179:2;34174:3;34115:67;:::i;:::-;34108:74;;34191:93;34280:3;34191:93;:::i;:::-;34309:2;34304:3;34300:12;34293:19;;33952:366;;;:::o;34324:419::-;34490:4;34528:2;34517:9;34513:18;34505:26;;34577:9;34571:4;34567:20;34563:1;34552:9;34548:17;34541:47;34605:131;34731:4;34605:131;:::i;:::-;34597:139;;34324:419;;;:::o;34749:231::-;34889:34;34885:1;34877:6;34873:14;34866:58;34958:14;34953:2;34945:6;34941:15;34934:39;34749:231;:::o;34986:366::-;35128:3;35149:67;35213:2;35208:3;35149:67;:::i;:::-;35142:74;;35225:93;35314:3;35225:93;:::i;:::-;35343:2;35338:3;35334:12;35327:19;;34986:366;;;:::o;35358:419::-;35524:4;35562:2;35551:9;35547:18;35539:26;;35611:9;35605:4;35601:20;35597:1;35586:9;35582:17;35575:47;35639:131;35765:4;35639:131;:::i;:::-;35631:139;;35358:419;;;:::o;35783:228::-;35923:34;35919:1;35911:6;35907:14;35900:58;35992:11;35987:2;35979:6;35975:15;35968:36;35783:228;:::o;36017:366::-;36159:3;36180:67;36244:2;36239:3;36180:67;:::i;:::-;36173:74;;36256:93;36345:3;36256:93;:::i;:::-;36374:2;36369:3;36365:12;36358:19;;36017:366;;;:::o;36389:419::-;36555:4;36593:2;36582:9;36578:18;36570:26;;36642:9;36636:4;36632:20;36628:1;36617:9;36613:17;36606:47;36670:131;36796:4;36670:131;:::i;:::-;36662:139;;36389:419;;;:::o;36814:223::-;36954:34;36950:1;36942:6;36938:14;36931:58;37023:6;37018:2;37010:6;37006:15;36999:31;36814:223;:::o;37043:366::-;37185:3;37206:67;37270:2;37265:3;37206:67;:::i;:::-;37199:74;;37282:93;37371:3;37282:93;:::i;:::-;37400:2;37395:3;37391:12;37384:19;;37043:366;;;:::o;37415:419::-;37581:4;37619:2;37608:9;37604:18;37596:26;;37668:9;37662:4;37658:20;37654:1;37643:9;37639:17;37632:47;37696:131;37822:4;37696:131;:::i;:::-;37688:139;;37415:419;;;:::o;37840:191::-;37880:4;37900:20;37918:1;37900:20;:::i;:::-;37895:25;;37934:20;37952:1;37934:20;:::i;:::-;37929:25;;37973:1;37970;37967:8;37964:34;;;37978:18;;:::i;:::-;37964:34;38023:1;38020;38016:9;38008:17;;37840:191;;;;:::o;38037:237::-;38177:34;38173:1;38165:6;38161:14;38154:58;38246:20;38241:2;38233:6;38229:15;38222:45;38037:237;:::o;38280:366::-;38422:3;38443:67;38507:2;38502:3;38443:67;:::i;:::-;38436:74;;38519:93;38608:3;38519:93;:::i;:::-;38637:2;38632:3;38628:12;38621:19;;38280:366;;;:::o;38652:419::-;38818:4;38856:2;38845:9;38841:18;38833:26;;38905:9;38899:4;38895:20;38891:1;38880:9;38876:17;38869:47;38933:131;39059:4;38933:131;:::i;:::-;38925:139;;38652:419;;;:::o;39077:180::-;39125:77;39122:1;39115:88;39222:4;39219:1;39212:15;39246:4;39243:1;39236:15;39263:185;39303:1;39320:20;39338:1;39320:20;:::i;:::-;39315:25;;39354:20;39372:1;39354:20;:::i;:::-;39349:25;;39393:1;39383:35;;39398:18;;:::i;:::-;39383:35;39440:1;39437;39433:9;39428:14;;39263:185;;;;:::o;39454:176::-;39486:1;39503:20;39521:1;39503:20;:::i;:::-;39498:25;;39537:20;39555:1;39537:20;:::i;:::-;39532:25;;39576:1;39566:35;;39581:18;;:::i;:::-;39566:35;39622:1;39619;39615:9;39610:14;;39454:176;;;;:::o;39636:98::-;39687:6;39721:5;39715:12;39705:22;;39636:98;;;:::o;39740:168::-;39823:11;39857:6;39852:3;39845:19;39897:4;39892:3;39888:14;39873:29;;39740:168;;;;:::o;39914:360::-;40000:3;40028:38;40060:5;40028:38;:::i;:::-;40082:70;40145:6;40140:3;40082:70;:::i;:::-;40075:77;;40161:52;40206:6;40201:3;40194:4;40187:5;40183:16;40161:52;:::i;:::-;40238:29;40260:6;40238:29;:::i;:::-;40233:3;40229:39;40222:46;;40004:270;39914:360;;;;:::o;40280:640::-;40475:4;40513:3;40502:9;40498:19;40490:27;;40527:71;40595:1;40584:9;40580:17;40571:6;40527:71;:::i;:::-;40608:72;40676:2;40665:9;40661:18;40652:6;40608:72;:::i;:::-;40690;40758:2;40747:9;40743:18;40734:6;40690:72;:::i;:::-;40809:9;40803:4;40799:20;40794:2;40783:9;40779:18;40772:48;40837:76;40908:4;40899:6;40837:76;:::i;:::-;40829:84;;40280:640;;;;;;;:::o;40926:141::-;40982:5;41013:6;41007:13;40998:22;;41029:32;41055:5;41029:32;:::i;:::-;40926:141;;;;:::o;41073:349::-;41142:6;41191:2;41179:9;41170:7;41166:23;41162:32;41159:119;;;41197:79;;:::i;:::-;41159:119;41317:1;41342:63;41397:7;41388:6;41377:9;41373:22;41342:63;:::i;:::-;41332:73;;41288:127;41073:349;;;;:::o;41428:180::-;41476:77;41473:1;41466:88;41573:4;41570:1;41563:15;41597:4;41594:1;41587:15;41614:182;41754:34;41750:1;41742:6;41738:14;41731:58;41614:182;:::o;41802:366::-;41944:3;41965:67;42029:2;42024:3;41965:67;:::i;:::-;41958:74;;42041:93;42130:3;42041:93;:::i;:::-;42159:2;42154:3;42150:12;42143:19;;41802:366;;;:::o;42174:419::-;42340:4;42378:2;42367:9;42363:18;42355:26;;42427:9;42421:4;42417:20;42413:1;42402:9;42398:17;42391:47;42455:131;42581:4;42455:131;:::i;:::-;42447:139;;42174:419;;;:::o;42599:178::-;42739:30;42735:1;42727:6;42723:14;42716:54;42599:178;:::o;42783:366::-;42925:3;42946:67;43010:2;43005:3;42946:67;:::i;:::-;42939:74;;43022:93;43111:3;43022:93;:::i;:::-;43140:2;43135:3;43131:12;43124:19;;42783:366;;;:::o;43155:419::-;43321:4;43359:2;43348:9;43344:18;43336:26;;43408:9;43402:4;43398:20;43394:1;43383:9;43379:17;43372:47;43436:131;43562:4;43436:131;:::i;:::-;43428:139;;43155:419;;;:::o
Swarm Source
ipfs://d91813cf3772add322aaaf4d49b9f45ae50216518f953112736a8092958f276e
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.