Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 136 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Set Approval For... | 15498821 | 850 days ago | IN | 0 ETH | 0.00143695 | ||||
Set Approval For... | 15441691 | 859 days ago | IN | 0 ETH | 0.00050523 | ||||
Set Approval For... | 14745262 | 972 days ago | IN | 0 ETH | 0.0030518 | ||||
Set Approval For... | 14612232 | 993 days ago | IN | 0 ETH | 0.00177029 | ||||
Set Approval For... | 14560573 | 1001 days ago | IN | 0 ETH | 0.00101251 | ||||
Set Approval For... | 14558154 | 1001 days ago | IN | 0 ETH | 0.00141917 | ||||
Withdraw | 14528894 | 1006 days ago | IN | 0 ETH | 0.0013915 | ||||
Set Approval For... | 14443699 | 1019 days ago | IN | 0 ETH | 0.00271696 | ||||
Transfer From | 14413296 | 1024 days ago | IN | 0 ETH | 0.00385476 | ||||
Transfer From | 14413296 | 1024 days ago | IN | 0 ETH | 0.004229 | ||||
Set Approval For... | 14338155 | 1036 days ago | IN | 0 ETH | 0.00156668 | ||||
Set Approval For... | 14336419 | 1036 days ago | IN | 0 ETH | 0.00284045 | ||||
Set Approval For... | 14300131 | 1041 days ago | IN | 0 ETH | 0.00166693 | ||||
Mint | 14300107 | 1041 days ago | IN | 0.1 ETH | 0.00787656 | ||||
Transfer From | 14291646 | 1043 days ago | IN | 0 ETH | 0.00468646 | ||||
Transfer From | 14288810 | 1043 days ago | IN | 0 ETH | 0.00219453 | ||||
Transfer From | 14278772 | 1045 days ago | IN | 0 ETH | 0.00398161 | ||||
Mint | 14276038 | 1045 days ago | IN | 0.1 ETH | 0.01114508 | ||||
Mint | 14262434 | 1047 days ago | IN | 0.1 ETH | 0.00678538 | ||||
Transfer From | 14262038 | 1047 days ago | IN | 0 ETH | 0.00314574 | ||||
Mint | 14256812 | 1048 days ago | IN | 0.2 ETH | 0.04526327 | ||||
Set Approval For... | 14249384 | 1049 days ago | IN | 0 ETH | 0.00328466 | ||||
Set Approval For... | 14246128 | 1050 days ago | IN | 0 ETH | 0.00295711 | ||||
Set Approval For... | 14246098 | 1050 days ago | IN | 0 ETH | 0.00258203 | ||||
Transfer From | 14243912 | 1050 days ago | IN | 0 ETH | 0.00536911 |
Loading...
Loading
Contract Name:
Doodapes
Compiler Version
v0.8.0+commit.c7dfd78e
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-02-11 */ // SPDX-License-Identifier: MIT AND GPL-3.0 // 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/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/token/ERC721/extensions/IERC721Metadata.sol pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: @openzeppelin/contracts/utils/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/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/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/introspection/ERC165.sol pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC721/ERC721.sol pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require( _exists(tokenId), "ERC721Metadata: URI query for nonexistent token" ); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { require(operator != _msgSender(), "ERC721: approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require( _isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved" ); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require( _isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved" ); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require( _checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require( ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own" ); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // File: @openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol pragma solidity ^0.8.0; /** * @dev This implements an optional extension of {ERC721} defined in the EIP that adds * enumerability of all the token ids in the contract as well as all token ids owned by each * account. */ abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => mapping(uint256 => uint256)) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { require( index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds" ); return _ownedTokens[owner][index]; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require( index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds" ); return _allTokens[index]; } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` cannot be the zero address. * - `to` cannot be the zero address. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array delete _allTokensIndex[tokenId]; _allTokens.pop(); } } // File: @openzeppelin/contracts/access/Ownable.sol pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _setOwner(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _setOwner(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: contracts/Doodapes.sol pragma solidity >=0.7.0 <0.9.0; contract Doodapes is ERC721Enumerable, Ownable { bool public paused = false; bool public revealed = false; uint256 public price = 0.1 ether; uint256 public supply = 9999; uint256 public transactionLimit = 10; uint256 public startPublic = 1644710400; uint256 public presalePrice = 0.07 ether; uint256 public transactionLimitPresale = 2; uint256 public limitPresale = 2; uint256 public startPresale = 1644613200; uint256 public endPresale = 1644699600; using Strings for uint256; string private baseURI; string public notRevealedUri; mapping(address => bool) WLAddresses; mapping(address => uint256) public mintedBalanceByAddress; constructor( string memory _name, string memory _symbol, string memory _notRevealedUri ) ERC721(_name, _symbol) { setNotRevealedURI(_notRevealedUri); } function send(uint256 _amount, address to) public onlyOwner { uint256 currentSupply = totalSupply(); require(_amount > 0, "need to mint at least 1 NFT"); require(currentSupply + _amount <= supply, "limit reached"); for (uint256 i = 1; i <= _amount; i++) { _safeMint(to, currentSupply + i); } } function _baseURI() internal view virtual override returns (string memory) { return baseURI; } function validationsPublic(uint256 _amount) internal { require(msg.value >= price * _amount, "not enough eth"); require(_amount <= transactionLimit, "can't mint that amount"); } function validationsPresale(uint256 _minted, uint256 _amount) internal { uint256 actualCost; block.timestamp < endPresale ? actualCost = presalePrice : actualCost = price; require(isWL(msg.sender), "not whitelisted"); require(msg.value >= actualCost * _amount, "not enough eth"); require( _amount <= transactionLimitPresale, "limit per transaction reached" ); require( _minted + _amount <= limitPresale, "presale limit per address reached" ); } function mint(uint256 _amount) public payable { require(!paused, "paused"); require(_amount > 0, "mint minimum 1 NFT"); require(block.timestamp >= startPresale, "not started"); uint256 minted = mintedBalanceByAddress[msg.sender]; uint256 currentSupply = totalSupply(); block.timestamp < startPublic ? validationsPresale(minted, _amount) : validationsPublic(_amount); require(currentSupply + _amount <= supply, "limit reached"); for (uint256 i = 1; i <= _amount; i++) { mintedBalanceByAddress[msg.sender]++; _safeMint(msg.sender, currentSupply + i); } } //Owner functions function setPrice(uint256 _price) public onlyOwner { price = _price; } function setLimitPresale(uint256 _newLimit) public onlyOwner { limitPresale = _newLimit; } function reveal() public onlyOwner { revealed = true; } function setBaseURI(string memory _newBaseURI) public onlyOwner { baseURI = _newBaseURI; } function setPresalePrice(uint256 _newPrice) public onlyOwner { presalePrice = _newPrice; } function pause(bool _state) public onlyOwner { paused = _state; } function setNotRevealedURI(string memory _notRevealedURI) public onlyOwner { notRevealedUri = _notRevealedURI; } function setTransactionLimit(uint256 _newTransactionLimit) public onlyOwner { transactionLimit = _newTransactionLimit; } function setTransactionLimitPresale(uint256 _newLimit) public onlyOwner { transactionLimitPresale = _newLimit; } function setSupply(uint256 _newSupply) public onlyOwner { supply = _newSupply; } function setEndPresale(uint256 _endPresale) public onlyOwner { endPresale = _endPresale; } function withdraw() public payable onlyOwner { (bool success, ) = payable(msg.sender).call{ value: address(this).balance }( "" ); require(success); } function setStartPresale(uint256 _startPresale) public onlyOwner { startPresale = _startPresale; } function addToWL(address[] memory addresses) public onlyOwner { for (uint256 i = 0; i < addresses.length; i++) { WLAddresses[addresses[i]] = true; } } function setStartPublic(uint256 _startPublic) public onlyOwner { startPublic = _startPublic; } //Public function tokenURI(uint256 _Id) public view virtual override returns (string memory) { require(_exists(_Id), "token does not exist"); if (!revealed) { return notRevealedUri; } else { string memory currentBaseURI = _baseURI(); return bytes(currentBaseURI).length > 0 ? string(abi.encodePacked(currentBaseURI, _Id.toString(), ".json")) : ""; } } function walletOfAddress(address _address) public view returns (uint256[] memory) { uint256 ownerTokenCount = balanceOf(_address); uint256[] memory tokenIds = new uint256[](ownerTokenCount); for (uint256 i; i < ownerTokenCount; i++) { tokenIds[i] = tokenOfOwnerByIndex(_address, i); } return tokenIds; } function isWL(address _address) public view returns (bool) { return WLAddresses[_address]; } function getCost() public view returns (uint256) { if (block.timestamp < endPresale) { return presalePrice; } else { return price; } } //Owner function contractBalance() public view onlyOwner returns (uint256) { return address(this).balance; } function getBaseURI() public view onlyOwner returns (string memory) { return baseURI; } }
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":"_notRevealedUri","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":"addresses","type":"address[]"}],"name":"addToWL","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"endPresale","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":[],"name":"getBaseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"isWL","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitPresale","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"mintedBalanceByAddress","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"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":"presalePrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"send","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_endPresale","type":"uint256"}],"name":"setEndPresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newLimit","type":"uint256"}],"name":"setLimitPresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_notRevealedURI","type":"string"}],"name":"setNotRevealedURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPrice","type":"uint256"}],"name":"setPresalePrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_price","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_startPresale","type":"uint256"}],"name":"setStartPresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_startPublic","type":"uint256"}],"name":"setStartPublic","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newSupply","type":"uint256"}],"name":"setSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newTransactionLimit","type":"uint256"}],"name":"setTransactionLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newLimit","type":"uint256"}],"name":"setTransactionLimitPresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startPresale","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"startPublic","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"supply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"_Id","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":[],"name":"transactionLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"transactionLimitPresale","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":"_address","type":"address"}],"name":"walletOfAddress","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
60806040526000600a60146101000a81548160ff0219169083151502179055506000600a60156101000a81548160ff02191690831515021790555067016345785d8a0000600b5561270f600c55600a600d556362084a00600e5566f8b0a10e470000600f5560026010556002601155636206ce506012556362081fd06013553480156200008b57600080fd5b5060405162005ce938038062005ce98339818101604052810190620000b19190620003e6565b82828160009080519060200190620000cb929190620002c4565b508060019080519060200190620000e4929190620002c4565b50505062000107620000fb6200012160201b60201c565b6200012960201b60201c565b6200011881620001ef60201b60201c565b5050506200062d565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620001ff6200012160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620002256200029a60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200027e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200027590620004c9565b60405180910390fd5b806015908051906020019062000296929190620002c4565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054620002d29062000599565b90600052602060002090601f016020900481019282620002f6576000855562000342565b82601f106200031157805160ff191683800117855562000342565b8280016001018555821562000342579182015b828111156200034157825182559160200191906001019062000324565b5b50905062000351919062000355565b5090565b5b808211156200037057600081600090555060010162000356565b5090565b60006200038b62000385846200051f565b620004eb565b905082815260208101848484011115620003a457600080fd5b620003b184828562000563565b509392505050565b600082601f830112620003cb57600080fd5b8151620003dd84826020860162000374565b91505092915050565b600080600060608486031215620003fc57600080fd5b600084015167ffffffffffffffff8111156200041757600080fd5b6200042586828701620003b9565b935050602084015167ffffffffffffffff8111156200044357600080fd5b6200045186828701620003b9565b925050604084015167ffffffffffffffff8111156200046f57600080fd5b6200047d86828701620003b9565b9150509250925092565b60006200049660208362000552565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b60006020820190508181036000830152620004e48162000487565b9050919050565b6000604051905081810181811067ffffffffffffffff82111715620005155762000514620005fe565b5b8060405250919050565b600067ffffffffffffffff8211156200053d576200053c620005fe565b5b601f19601f8301169050602081019050919050565b600082825260208201905092915050565b60005b838110156200058357808201518184015260208101905062000566565b8381111562000593576000848401525b50505050565b60006002820490506001821680620005b257607f821691505b60208210811415620005c957620005c8620005cf565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6156ac806200063d6000396000f3fe6080604052600436106103345760003560e01c8063785d04f5116101ab578063a475b5dd116100f7578063c87b56dd11610095578063f19605d61161006f578063f19605d614610beb578063f2c4ce1e14610c16578063f2fde38b14610c3f578063fb76c4d514610c6857610334565b8063c87b56dd14610b48578063e985e9c514610b85578063f1629eb914610bc257610334565b8063b489c597116100d1578063b489c59714610a9e578063b88d4fde14610ac9578063bd3e19d414610af2578063c11442f814610b1d57610334565b8063a475b5dd14610a1f578063a51bfdf514610a36578063addff6be14610a6157610334565b806395d89b4111610164578063a035b1fe1161013e578063a035b1fe14610984578063a0712d68146109af578063a22cb465146109cb578063a43be57b146109f457610334565b806395d89b411461090757806399e57625146109325780639aa94b811461095b57610334565b8063785d04f5146107f95780637f99141d146108225780638b7afe2e1461084b5780638c831b70146108765780638da5cb5b146108b357806391b7f5ed146108de57610334565b80633b4c4b251161028557806355f804b31161022357806364bfa546116101fd57806364bfa5461461075157806370a082311461077a578063714c5398146107b7578063715018a6146107e257610334565b806355f804b3146106c05780635c975abb146106e95780636352211e1461071457610334565b80634e3b625f1161025f5780634e3b625f146105f25780634f6ccce71461062f578063518302271461066c57806355a01a8d1461069757610334565b80633b4c4b25146105965780633ccfd60b146105bf57806342842e0e146105c957610334565b8063081812fc116102f257806318160ddd116102cc57806318160ddd146104dc57806323b872dd146105075780632f745c59146105305780633549345e1461056d57610334565b8063081812fc1461044b578063081c8c4414610488578063095ea7b3146104b357610334565b80620e7fa81461033957806301ffc9a71461036457806302329a29146103a1578063047fc9aa146103ca57806304c98b2b146103f557806306fdde0314610420575b600080fd5b34801561034557600080fd5b5061034e610c91565b60405161035b9190615177565b60405180910390f35b34801561037057600080fd5b5061038b60048036038101906103869190614132565b610c97565b6040516103989190614dba565b60405180910390f35b3480156103ad57600080fd5b506103c860048036038101906103c39190614109565b610d11565b005b3480156103d657600080fd5b506103df610daa565b6040516103ec9190615177565b60405180910390f35b34801561040157600080fd5b5061040a610db0565b6040516104179190615177565b60405180910390f35b34801561042c57600080fd5b50610435610db6565b6040516104429190614dd5565b60405180910390f35b34801561045757600080fd5b50610472600480360381019061046d91906141c5565b610e48565b60405161047f9190614d31565b60405180910390f35b34801561049457600080fd5b5061049d610ecd565b6040516104aa9190614dd5565b60405180910390f35b3480156104bf57600080fd5b506104da60048036038101906104d5919061408c565b610f5b565b005b3480156104e857600080fd5b506104f1611073565b6040516104fe9190615177565b60405180910390f35b34801561051357600080fd5b5061052e60048036038101906105299190613f86565b611080565b005b34801561053c57600080fd5b506105576004803603810190610552919061408c565b6110e0565b6040516105649190615177565b60405180910390f35b34801561057957600080fd5b50610594600480360381019061058f91906141c5565b611185565b005b3480156105a257600080fd5b506105bd60048036038101906105b891906141c5565b61120b565b005b6105c7611291565b005b3480156105d557600080fd5b506105f060048036038101906105eb9190613f86565b611386565b005b3480156105fe57600080fd5b5061061960048036038101906106149190613f21565b6113a6565b6040516106269190614d98565b60405180910390f35b34801561063b57600080fd5b50610656600480360381019061065191906141c5565b6114a0565b6040516106639190615177565b60405180910390f35b34801561067857600080fd5b50610681611537565b60405161068e9190614dba565b60405180910390f35b3480156106a357600080fd5b506106be60048036038101906106b991906141c5565b61154a565b005b3480156106cc57600080fd5b506106e760048036038101906106e29190614184565b6115d0565b005b3480156106f557600080fd5b506106fe611666565b60405161070b9190614dba565b60405180910390f35b34801561072057600080fd5b5061073b600480360381019061073691906141c5565b611679565b6040516107489190614d31565b60405180910390f35b34801561075d57600080fd5b50610778600480360381019061077391906141c5565b61172b565b005b34801561078657600080fd5b506107a1600480360381019061079c9190613f21565b6117b1565b6040516107ae9190615177565b60405180910390f35b3480156107c357600080fd5b506107cc611869565b6040516107d99190614dd5565b60405180910390f35b3480156107ee57600080fd5b506107f7611977565b005b34801561080557600080fd5b50610820600480360381019061081b91906141ee565b6119ff565b005b34801561082e57600080fd5b50610849600480360381019061084491906141c5565b611b56565b005b34801561085757600080fd5b50610860611bdc565b60405161086d9190615177565b60405180910390f35b34801561088257600080fd5b5061089d60048036038101906108989190613f21565b611c60565b6040516108aa9190614dba565b60405180910390f35b3480156108bf57600080fd5b506108c8611cb6565b6040516108d59190614d31565b60405180910390f35b3480156108ea57600080fd5b50610905600480360381019061090091906141c5565b611ce0565b005b34801561091357600080fd5b5061091c611d66565b6040516109299190614dd5565b60405180910390f35b34801561093e57600080fd5b50610959600480360381019061095491906140c8565b611df8565b005b34801561096757600080fd5b50610982600480360381019061097d91906141c5565b611f2f565b005b34801561099057600080fd5b50610999611fb5565b6040516109a69190615177565b60405180910390f35b6109c960048036038101906109c491906141c5565b611fbb565b005b3480156109d757600080fd5b506109f260048036038101906109ed9190614050565b6121e6565b005b348015610a0057600080fd5b50610a09612367565b604051610a169190615177565b60405180910390f35b348015610a2b57600080fd5b50610a3461236d565b005b348015610a4257600080fd5b50610a4b612406565b604051610a589190615177565b60405180910390f35b348015610a6d57600080fd5b50610a886004803603810190610a839190613f21565b61240c565b604051610a959190615177565b60405180910390f35b348015610aaa57600080fd5b50610ab3612424565b604051610ac09190615177565b60405180910390f35b348015610ad557600080fd5b50610af06004803603810190610aeb9190613fd5565b61242a565b005b348015610afe57600080fd5b50610b0761248c565b604051610b149190615177565b60405180910390f35b348015610b2957600080fd5b50610b326124ab565b604051610b3f9190615177565b60405180910390f35b348015610b5457600080fd5b50610b6f6004803603810190610b6a91906141c5565b6124b1565b604051610b7c9190614dd5565b60405180910390f35b348015610b9157600080fd5b50610bac6004803603810190610ba79190613f4a565b6125ff565b604051610bb99190614dba565b60405180910390f35b348015610bce57600080fd5b50610be96004803603810190610be491906141c5565b612693565b005b348015610bf757600080fd5b50610c00612719565b604051610c0d9190615177565b60405180910390f35b348015610c2257600080fd5b50610c3d6004803603810190610c389190614184565b61271f565b005b348015610c4b57600080fd5b50610c666004803603810190610c619190613f21565b6127b5565b005b348015610c7457600080fd5b50610c8f6004803603810190610c8a91906141c5565b6128ad565b005b600f5481565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610d0a5750610d0982612933565b5b9050919050565b610d19612a15565b73ffffffffffffffffffffffffffffffffffffffff16610d37611cb6565b73ffffffffffffffffffffffffffffffffffffffff1614610d8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8490615017565b60405180910390fd5b80600a60146101000a81548160ff02191690831515021790555050565b600c5481565b60125481565b606060008054610dc5906154a1565b80601f0160208091040260200160405190810160405280929190818152602001828054610df1906154a1565b8015610e3e5780601f10610e1357610100808354040283529160200191610e3e565b820191906000526020600020905b815481529060010190602001808311610e2157829003601f168201915b5050505050905090565b6000610e5382612a1d565b610e92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8990614ff7565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60158054610eda906154a1565b80601f0160208091040260200160405190810160405280929190818152602001828054610f06906154a1565b8015610f535780601f10610f2857610100808354040283529160200191610f53565b820191906000526020600020905b815481529060010190602001808311610f3657829003601f168201915b505050505081565b6000610f6682611679565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610fd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fce90615057565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610ff6612a15565b73ffffffffffffffffffffffffffffffffffffffff16148061102557506110248161101f612a15565b6125ff565b5b611064576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105b90614f37565b60405180910390fd5b61106e8383612a89565b505050565b6000600880549050905090565b61109161108b612a15565b82612b42565b6110d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c790615077565b60405180910390fd5b6110db838383612c20565b505050565b60006110eb836117b1565b821061112c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112390614e17565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b61118d612a15565b73ffffffffffffffffffffffffffffffffffffffff166111ab611cb6565b73ffffffffffffffffffffffffffffffffffffffff1614611201576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f890615017565b60405180910390fd5b80600f8190555050565b611213612a15565b73ffffffffffffffffffffffffffffffffffffffff16611231611cb6565b73ffffffffffffffffffffffffffffffffffffffff1614611287576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127e90615017565b60405180910390fd5b80600c8190555050565b611299612a15565b73ffffffffffffffffffffffffffffffffffffffff166112b7611cb6565b73ffffffffffffffffffffffffffffffffffffffff161461130d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130490615017565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff164760405161133390614d1c565b60006040518083038185875af1925050503d8060008114611370576040519150601f19603f3d011682016040523d82523d6000602084013e611375565b606091505b505090508061138357600080fd5b50565b6113a18383836040518060200160405280600081525061242a565b505050565b606060006113b3836117b1565b905060008167ffffffffffffffff8111156113f7577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156114255781602001602082028036833780820191505090505b50905060005b828110156114955761143d85826110e0565b828281518110611476577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001018181525050808061148d906154d3565b91505061142b565b508092505050919050565b60006114aa611073565b82106114eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e290615097565b60405180910390fd5b60088281548110611525577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b600a60159054906101000a900460ff1681565b611552612a15565b73ffffffffffffffffffffffffffffffffffffffff16611570611cb6565b73ffffffffffffffffffffffffffffffffffffffff16146115c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115bd90615017565b60405180910390fd5b8060108190555050565b6115d8612a15565b73ffffffffffffffffffffffffffffffffffffffff166115f6611cb6565b73ffffffffffffffffffffffffffffffffffffffff161461164c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164390615017565b60405180910390fd5b8060149080519060200190611662929190613caf565b5050565b600a60149054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611722576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171990614f77565b60405180910390fd5b80915050919050565b611733612a15565b73ffffffffffffffffffffffffffffffffffffffff16611751611cb6565b73ffffffffffffffffffffffffffffffffffffffff16146117a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179e90615017565b60405180910390fd5b80600d8190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611822576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181990614f57565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6060611873612a15565b73ffffffffffffffffffffffffffffffffffffffff16611891611cb6565b73ffffffffffffffffffffffffffffffffffffffff16146118e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118de90615017565b60405180910390fd5b601480546118f4906154a1565b80601f0160208091040260200160405190810160405280929190818152602001828054611920906154a1565b801561196d5780601f106119425761010080835404028352916020019161196d565b820191906000526020600020905b81548152906001019060200180831161195057829003601f168201915b5050505050905090565b61197f612a15565b73ffffffffffffffffffffffffffffffffffffffff1661199d611cb6565b73ffffffffffffffffffffffffffffffffffffffff16146119f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ea90615017565b60405180910390fd5b6119fd6000612e7c565b565b611a07612a15565b73ffffffffffffffffffffffffffffffffffffffff16611a25611cb6565b73ffffffffffffffffffffffffffffffffffffffff1614611a7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7290615017565b60405180910390fd5b6000611a85611073565b905060008311611aca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac190615157565b60405180910390fd5b600c548382611ad991906152d6565b1115611b1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1190614f97565b60405180910390fd5b6000600190505b838111611b5057611b3d838284611b3891906152d6565b612f42565b8080611b48906154d3565b915050611b21565b50505050565b611b5e612a15565b73ffffffffffffffffffffffffffffffffffffffff16611b7c611cb6565b73ffffffffffffffffffffffffffffffffffffffff1614611bd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc990615017565b60405180910390fd5b8060128190555050565b6000611be6612a15565b73ffffffffffffffffffffffffffffffffffffffff16611c04611cb6565b73ffffffffffffffffffffffffffffffffffffffff1614611c5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5190615017565b60405180910390fd5b47905090565b6000601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611ce8612a15565b73ffffffffffffffffffffffffffffffffffffffff16611d06611cb6565b73ffffffffffffffffffffffffffffffffffffffff1614611d5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5390615017565b60405180910390fd5b80600b8190555050565b606060018054611d75906154a1565b80601f0160208091040260200160405190810160405280929190818152602001828054611da1906154a1565b8015611dee5780601f10611dc357610100808354040283529160200191611dee565b820191906000526020600020905b815481529060010190602001808311611dd157829003601f168201915b5050505050905090565b611e00612a15565b73ffffffffffffffffffffffffffffffffffffffff16611e1e611cb6565b73ffffffffffffffffffffffffffffffffffffffff1614611e74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6b90615017565b60405180910390fd5b60005b8151811015611f2b57600160166000848481518110611ebf577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611f23906154d3565b915050611e77565b5050565b611f37612a15565b73ffffffffffffffffffffffffffffffffffffffff16611f55611cb6565b73ffffffffffffffffffffffffffffffffffffffff1614611fab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa290615017565b60405180910390fd5b80600e8190555050565b600b5481565b600a60149054906101000a900460ff161561200b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612002906150f7565b60405180910390fd5b6000811161204e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204590614ef7565b60405180910390fd5b601254421015612093576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208a906150d7565b60405180910390fd5b6000601760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060006120e1611073565b9050600e5442106120fa576120f583612f60565b612105565b6121048284612ff8565b5b600c54838261211491906152d6565b1115612155576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214c90614f97565b60405180910390fd5b6000600190505b8381116121e057601760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906121b3906154d3565b91905055506121cd3382846121c891906152d6565b612f42565b80806121d8906154d3565b91505061215c565b50505050565b6121ee612a15565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561225c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161225390614eb7565b60405180910390fd5b8060056000612269612a15565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16612316612a15565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161235b9190614dba565b60405180910390a35050565b60135481565b612375612a15565b73ffffffffffffffffffffffffffffffffffffffff16612393611cb6565b73ffffffffffffffffffffffffffffffffffffffff16146123e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e090615017565b60405180910390fd5b6001600a60156101000a81548160ff021916908315150217905550565b60105481565b60176020528060005260406000206000915090505481565b60115481565b61243b612435612a15565b83612b42565b61247a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247190615077565b60405180910390fd5b61248684848484613146565b50505050565b60006013544210156124a257600f5490506124a8565b600b5490505b90565b600e5481565b60606124bc82612a1d565b6124fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124f290615137565b60405180910390fd5b600a60159054906101000a900460ff166125a1576015805461251c906154a1565b80601f0160208091040260200160405190810160405280929190818152602001828054612548906154a1565b80156125955780601f1061256a57610100808354040283529160200191612595565b820191906000526020600020905b81548152906001019060200180831161257857829003601f168201915b505050505090506125fa565b60006125ab6131a2565b905060008151116125cb57604051806020016040528060008152506125f6565b806125d584613234565b6040516020016125e6929190614ced565b6040516020818303038152906040525b9150505b919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61269b612a15565b73ffffffffffffffffffffffffffffffffffffffff166126b9611cb6565b73ffffffffffffffffffffffffffffffffffffffff161461270f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161270690615017565b60405180910390fd5b8060118190555050565b600d5481565b612727612a15565b73ffffffffffffffffffffffffffffffffffffffff16612745611cb6565b73ffffffffffffffffffffffffffffffffffffffff161461279b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161279290615017565b60405180910390fd5b80601590805190602001906127b1929190613caf565b5050565b6127bd612a15565b73ffffffffffffffffffffffffffffffffffffffff166127db611cb6565b73ffffffffffffffffffffffffffffffffffffffff1614612831576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161282890615017565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156128a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289890614e57565b60405180910390fd5b6128aa81612e7c565b50565b6128b5612a15565b73ffffffffffffffffffffffffffffffffffffffff166128d3611cb6565b73ffffffffffffffffffffffffffffffffffffffff1614612929576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161292090615017565b60405180910390fd5b8060138190555050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806129fe57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612a0e5750612a0d826133e1565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16612afc83611679565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000612b4d82612a1d565b612b8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b8390614ed7565b60405180910390fd5b6000612b9783611679565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612c0657508373ffffffffffffffffffffffffffffffffffffffff16612bee84610e48565b73ffffffffffffffffffffffffffffffffffffffff16145b80612c175750612c1681856125ff565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612c4082611679565b73ffffffffffffffffffffffffffffffffffffffff1614612c96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c8d90615037565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612d06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cfd90614e97565b60405180910390fd5b612d1183838361344b565b612d1c600082612a89565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612d6c91906153b7565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612dc391906152d6565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612f5c82826040518060200160405280600081525061355f565b5050565b80600b54612f6e919061535d565b341015612fb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fa790615117565b60405180910390fd5b600d54811115612ff5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fec90614f17565b60405180910390fd5b50565b6000601354421061300e57600b54905080613015565b600f549050805b5061301f33611c60565b61305e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613055906150b7565b60405180910390fd5b818161306a919061535d565b3410156130ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130a390615117565b60405180910390fd5b6010548211156130f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130e890614df7565b60405180910390fd5b601154828461310091906152d6565b1115613141576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161313890614fb7565b60405180910390fd5b505050565b613151848484612c20565b61315d848484846135ba565b61319c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161319390614e37565b60405180910390fd5b50505050565b6060601480546131b1906154a1565b80601f01602080910402602001604051908101604052809291908181526020018280546131dd906154a1565b801561322a5780601f106131ff5761010080835404028352916020019161322a565b820191906000526020600020905b81548152906001019060200180831161320d57829003601f168201915b5050505050905090565b6060600082141561327c576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506133dc565b600082905060005b600082146132ae578080613297906154d3565b915050600a826132a7919061532c565b9150613284565b60008167ffffffffffffffff8111156132f0577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156133225781602001600182028036833780820191505090505b5090505b600085146133d55760018261333b91906153b7565b9150600a8561334a919061551c565b603061335691906152d6565b60f81b818381518110613392577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856133ce919061532c565b9450613326565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b613456838383613751565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156134995761349481613756565b6134d8565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146134d7576134d6838261379f565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561351b576135168161390c565b61355a565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614613559576135588282613a4f565b5b5b505050565b6135698383613ace565b61357660008484846135ba565b6135b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135ac90614e37565b60405180910390fd5b505050565b60006135db8473ffffffffffffffffffffffffffffffffffffffff16613c9c565b15613744578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02613604612a15565b8786866040518563ffffffff1660e01b81526004016136269493929190614d4c565b602060405180830381600087803b15801561364057600080fd5b505af192505050801561367157506040513d601f19601f8201168201806040525081019061366e919061415b565b60015b6136f4573d80600081146136a1576040519150601f19603f3d011682016040523d82523d6000602084013e6136a6565b606091505b506000815114156136ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136e390614e37565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613749565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016137ac846117b1565b6137b691906153b7565b905060006007600084815260200190815260200160002054905081811461389b576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905061392091906153b7565b9050600060096000848152602001908152602001600020549050600060088381548110613976577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200154905080600883815481106139be577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480613a33577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b6000613a5a836117b1565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613b3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b3590614fd7565b60405180910390fd5b613b4781612a1d565b15613b87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b7e90614e77565b60405180910390fd5b613b936000838361344b565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613be391906152d6565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b828054613cbb906154a1565b90600052602060002090601f016020900481019282613cdd5760008555613d24565b82601f10613cf657805160ff1916838001178555613d24565b82800160010185558215613d24579182015b82811115613d23578251825591602001919060010190613d08565b5b509050613d319190613d35565b5090565b5b80821115613d4e576000816000905550600101613d36565b5090565b6000613d65613d60846151c3565b615192565b90508083825260208201905082856020860282011115613d8457600080fd5b60005b85811015613db45781613d9a8882613e3a565b845260208401935060208301925050600181019050613d87565b5050509392505050565b6000613dd1613dcc846151ef565b615192565b905082815260208101848484011115613de957600080fd5b613df484828561545f565b509392505050565b6000613e0f613e0a8461521f565b615192565b905082815260208101848484011115613e2757600080fd5b613e3284828561545f565b509392505050565b600081359050613e498161561a565b92915050565b600082601f830112613e6057600080fd5b8135613e70848260208601613d52565b91505092915050565b600081359050613e8881615631565b92915050565b600081359050613e9d81615648565b92915050565b600081519050613eb281615648565b92915050565b600082601f830112613ec957600080fd5b8135613ed9848260208601613dbe565b91505092915050565b600082601f830112613ef357600080fd5b8135613f03848260208601613dfc565b91505092915050565b600081359050613f1b8161565f565b92915050565b600060208284031215613f3357600080fd5b6000613f4184828501613e3a565b91505092915050565b60008060408385031215613f5d57600080fd5b6000613f6b85828601613e3a565b9250506020613f7c85828601613e3a565b9150509250929050565b600080600060608486031215613f9b57600080fd5b6000613fa986828701613e3a565b9350506020613fba86828701613e3a565b9250506040613fcb86828701613f0c565b9150509250925092565b60008060008060808587031215613feb57600080fd5b6000613ff987828801613e3a565b945050602061400a87828801613e3a565b935050604061401b87828801613f0c565b925050606085013567ffffffffffffffff81111561403857600080fd5b61404487828801613eb8565b91505092959194509250565b6000806040838503121561406357600080fd5b600061407185828601613e3a565b925050602061408285828601613e79565b9150509250929050565b6000806040838503121561409f57600080fd5b60006140ad85828601613e3a565b92505060206140be85828601613f0c565b9150509250929050565b6000602082840312156140da57600080fd5b600082013567ffffffffffffffff8111156140f457600080fd5b61410084828501613e4f565b91505092915050565b60006020828403121561411b57600080fd5b600061412984828501613e79565b91505092915050565b60006020828403121561414457600080fd5b600061415284828501613e8e565b91505092915050565b60006020828403121561416d57600080fd5b600061417b84828501613ea3565b91505092915050565b60006020828403121561419657600080fd5b600082013567ffffffffffffffff8111156141b057600080fd5b6141bc84828501613ee2565b91505092915050565b6000602082840312156141d757600080fd5b60006141e584828501613f0c565b91505092915050565b6000806040838503121561420157600080fd5b600061420f85828601613f0c565b925050602061422085828601613e3a565b9150509250929050565b60006142368383614ccf565b60208301905092915050565b61424b816153eb565b82525050565b600061425c8261525f565b614266818561528d565b93506142718361524f565b8060005b838110156142a2578151614289888261422a565b975061429483615280565b925050600181019050614275565b5085935050505092915050565b6142b8816153fd565b82525050565b60006142c98261526a565b6142d3818561529e565b93506142e381856020860161546e565b6142ec81615609565b840191505092915050565b600061430282615275565b61430c81856152ba565b935061431c81856020860161546e565b61432581615609565b840191505092915050565b600061433b82615275565b61434581856152cb565b935061435581856020860161546e565b80840191505092915050565b600061436e601d836152ba565b91507f6c696d697420706572207472616e73616374696f6e20726561636865640000006000830152602082019050919050565b60006143ae602b836152ba565b91507f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008301527f74206f6620626f756e64730000000000000000000000000000000000000000006020830152604082019050919050565b60006144146032836152ba565b91507f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008301527f63656976657220696d706c656d656e74657200000000000000000000000000006020830152604082019050919050565b600061447a6026836152ba565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006144e0601c836152ba565b91507f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006000830152602082019050919050565b60006145206024836152ba565b91507f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006145866019836152ba565b91507f4552433732313a20617070726f766520746f2063616c6c6572000000000000006000830152602082019050919050565b60006145c6602c836152ba565b91507f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b600061462c6012836152ba565b91507f6d696e74206d696e696d756d2031204e465400000000000000000000000000006000830152602082019050919050565b600061466c6016836152ba565b91507f63616e2774206d696e74207468617420616d6f756e74000000000000000000006000830152602082019050919050565b60006146ac6038836152ba565b91507f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008301527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006020830152604082019050919050565b6000614712602a836152ba565b91507f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008301527f726f2061646472657373000000000000000000000000000000000000000000006020830152604082019050919050565b60006147786029836152ba565b91507f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008301527f656e7420746f6b656e00000000000000000000000000000000000000000000006020830152604082019050919050565b60006147de600d836152ba565b91507f6c696d69742072656163686564000000000000000000000000000000000000006000830152602082019050919050565b600061481e6021836152ba565b91507f70726573616c65206c696d69742070657220616464726573732072656163686560008301527f64000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006148846020836152ba565b91507f4552433732313a206d696e7420746f20746865207a65726f20616464726573736000830152602082019050919050565b60006148c4602c836152ba565b91507f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b600061492a6005836152cb565b91507f2e6a736f6e0000000000000000000000000000000000000000000000000000006000830152600582019050919050565b600061496a6020836152ba565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b60006149aa6029836152ba565b91507f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008301527f73206e6f74206f776e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000614a106021836152ba565b91507f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008301527f72000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614a766000836152af565b9150600082019050919050565b6000614a906031836152ba565b91507f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008301527f776e6572206e6f7220617070726f7665640000000000000000000000000000006020830152604082019050919050565b6000614af6602c836152ba565b91507f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008301527f7574206f6620626f756e647300000000000000000000000000000000000000006020830152604082019050919050565b6000614b5c600f836152ba565b91507f6e6f742077686974656c697374656400000000000000000000000000000000006000830152602082019050919050565b6000614b9c600b836152ba565b91507f6e6f7420737461727465640000000000000000000000000000000000000000006000830152602082019050919050565b6000614bdc6006836152ba565b91507f70617573656400000000000000000000000000000000000000000000000000006000830152602082019050919050565b6000614c1c600e836152ba565b91507f6e6f7420656e6f756768206574680000000000000000000000000000000000006000830152602082019050919050565b6000614c5c6014836152ba565b91507f746f6b656e20646f6573206e6f742065786973740000000000000000000000006000830152602082019050919050565b6000614c9c601b836152ba565b91507f6e65656420746f206d696e74206174206c656173742031204e465400000000006000830152602082019050919050565b614cd881615455565b82525050565b614ce781615455565b82525050565b6000614cf98285614330565b9150614d058284614330565b9150614d108261491d565b91508190509392505050565b6000614d2782614a69565b9150819050919050565b6000602082019050614d466000830184614242565b92915050565b6000608082019050614d616000830187614242565b614d6e6020830186614242565b614d7b6040830185614cde565b8181036060830152614d8d81846142be565b905095945050505050565b60006020820190508181036000830152614db28184614251565b905092915050565b6000602082019050614dcf60008301846142af565b92915050565b60006020820190508181036000830152614def81846142f7565b905092915050565b60006020820190508181036000830152614e1081614361565b9050919050565b60006020820190508181036000830152614e30816143a1565b9050919050565b60006020820190508181036000830152614e5081614407565b9050919050565b60006020820190508181036000830152614e708161446d565b9050919050565b60006020820190508181036000830152614e90816144d3565b9050919050565b60006020820190508181036000830152614eb081614513565b9050919050565b60006020820190508181036000830152614ed081614579565b9050919050565b60006020820190508181036000830152614ef0816145b9565b9050919050565b60006020820190508181036000830152614f108161461f565b9050919050565b60006020820190508181036000830152614f308161465f565b9050919050565b60006020820190508181036000830152614f508161469f565b9050919050565b60006020820190508181036000830152614f7081614705565b9050919050565b60006020820190508181036000830152614f908161476b565b9050919050565b60006020820190508181036000830152614fb0816147d1565b9050919050565b60006020820190508181036000830152614fd081614811565b9050919050565b60006020820190508181036000830152614ff081614877565b9050919050565b60006020820190508181036000830152615010816148b7565b9050919050565b600060208201905081810360008301526150308161495d565b9050919050565b600060208201905081810360008301526150508161499d565b9050919050565b6000602082019050818103600083015261507081614a03565b9050919050565b6000602082019050818103600083015261509081614a83565b9050919050565b600060208201905081810360008301526150b081614ae9565b9050919050565b600060208201905081810360008301526150d081614b4f565b9050919050565b600060208201905081810360008301526150f081614b8f565b9050919050565b6000602082019050818103600083015261511081614bcf565b9050919050565b6000602082019050818103600083015261513081614c0f565b9050919050565b6000602082019050818103600083015261515081614c4f565b9050919050565b6000602082019050818103600083015261517081614c8f565b9050919050565b600060208201905061518c6000830184614cde565b92915050565b6000604051905081810181811067ffffffffffffffff821117156151b9576151b86155da565b5b8060405250919050565b600067ffffffffffffffff8211156151de576151dd6155da565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561520a576152096155da565b5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff82111561523a576152396155da565b5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006152e182615455565b91506152ec83615455565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156153215761532061554d565b5b828201905092915050565b600061533782615455565b915061534283615455565b9250826153525761535161557c565b5b828204905092915050565b600061536882615455565b915061537383615455565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156153ac576153ab61554d565b5b828202905092915050565b60006153c282615455565b91506153cd83615455565b9250828210156153e0576153df61554d565b5b828203905092915050565b60006153f682615435565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561548c578082015181840152602081019050615471565b8381111561549b576000848401525b50505050565b600060028204905060018216806154b957607f821691505b602082108114156154cd576154cc6155ab565b5b50919050565b60006154de82615455565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156155115761551061554d565b5b600182019050919050565b600061552782615455565b915061553283615455565b9250826155425761554161557c565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b615623816153eb565b811461562e57600080fd5b50565b61563a816153fd565b811461564557600080fd5b50565b61565181615409565b811461565c57600080fd5b50565b61566881615455565b811461567357600080fd5b5056fea2646970667358221220cbfad8d8061cf31e856f2ca5337e3ebd16caf6dee6104fed3e9866d6fe15248364736f6c63430008000033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000008446f6f64617065730000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004444f4f44000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000035697066733a2f2f516d62506b4a39326f7733316173434b64666a55356e796844637135614e3731713641766f4e61565833675069660000000000000000000000
Deployed Bytecode
0x6080604052600436106103345760003560e01c8063785d04f5116101ab578063a475b5dd116100f7578063c87b56dd11610095578063f19605d61161006f578063f19605d614610beb578063f2c4ce1e14610c16578063f2fde38b14610c3f578063fb76c4d514610c6857610334565b8063c87b56dd14610b48578063e985e9c514610b85578063f1629eb914610bc257610334565b8063b489c597116100d1578063b489c59714610a9e578063b88d4fde14610ac9578063bd3e19d414610af2578063c11442f814610b1d57610334565b8063a475b5dd14610a1f578063a51bfdf514610a36578063addff6be14610a6157610334565b806395d89b4111610164578063a035b1fe1161013e578063a035b1fe14610984578063a0712d68146109af578063a22cb465146109cb578063a43be57b146109f457610334565b806395d89b411461090757806399e57625146109325780639aa94b811461095b57610334565b8063785d04f5146107f95780637f99141d146108225780638b7afe2e1461084b5780638c831b70146108765780638da5cb5b146108b357806391b7f5ed146108de57610334565b80633b4c4b251161028557806355f804b31161022357806364bfa546116101fd57806364bfa5461461075157806370a082311461077a578063714c5398146107b7578063715018a6146107e257610334565b806355f804b3146106c05780635c975abb146106e95780636352211e1461071457610334565b80634e3b625f1161025f5780634e3b625f146105f25780634f6ccce71461062f578063518302271461066c57806355a01a8d1461069757610334565b80633b4c4b25146105965780633ccfd60b146105bf57806342842e0e146105c957610334565b8063081812fc116102f257806318160ddd116102cc57806318160ddd146104dc57806323b872dd146105075780632f745c59146105305780633549345e1461056d57610334565b8063081812fc1461044b578063081c8c4414610488578063095ea7b3146104b357610334565b80620e7fa81461033957806301ffc9a71461036457806302329a29146103a1578063047fc9aa146103ca57806304c98b2b146103f557806306fdde0314610420575b600080fd5b34801561034557600080fd5b5061034e610c91565b60405161035b9190615177565b60405180910390f35b34801561037057600080fd5b5061038b60048036038101906103869190614132565b610c97565b6040516103989190614dba565b60405180910390f35b3480156103ad57600080fd5b506103c860048036038101906103c39190614109565b610d11565b005b3480156103d657600080fd5b506103df610daa565b6040516103ec9190615177565b60405180910390f35b34801561040157600080fd5b5061040a610db0565b6040516104179190615177565b60405180910390f35b34801561042c57600080fd5b50610435610db6565b6040516104429190614dd5565b60405180910390f35b34801561045757600080fd5b50610472600480360381019061046d91906141c5565b610e48565b60405161047f9190614d31565b60405180910390f35b34801561049457600080fd5b5061049d610ecd565b6040516104aa9190614dd5565b60405180910390f35b3480156104bf57600080fd5b506104da60048036038101906104d5919061408c565b610f5b565b005b3480156104e857600080fd5b506104f1611073565b6040516104fe9190615177565b60405180910390f35b34801561051357600080fd5b5061052e60048036038101906105299190613f86565b611080565b005b34801561053c57600080fd5b506105576004803603810190610552919061408c565b6110e0565b6040516105649190615177565b60405180910390f35b34801561057957600080fd5b50610594600480360381019061058f91906141c5565b611185565b005b3480156105a257600080fd5b506105bd60048036038101906105b891906141c5565b61120b565b005b6105c7611291565b005b3480156105d557600080fd5b506105f060048036038101906105eb9190613f86565b611386565b005b3480156105fe57600080fd5b5061061960048036038101906106149190613f21565b6113a6565b6040516106269190614d98565b60405180910390f35b34801561063b57600080fd5b50610656600480360381019061065191906141c5565b6114a0565b6040516106639190615177565b60405180910390f35b34801561067857600080fd5b50610681611537565b60405161068e9190614dba565b60405180910390f35b3480156106a357600080fd5b506106be60048036038101906106b991906141c5565b61154a565b005b3480156106cc57600080fd5b506106e760048036038101906106e29190614184565b6115d0565b005b3480156106f557600080fd5b506106fe611666565b60405161070b9190614dba565b60405180910390f35b34801561072057600080fd5b5061073b600480360381019061073691906141c5565b611679565b6040516107489190614d31565b60405180910390f35b34801561075d57600080fd5b50610778600480360381019061077391906141c5565b61172b565b005b34801561078657600080fd5b506107a1600480360381019061079c9190613f21565b6117b1565b6040516107ae9190615177565b60405180910390f35b3480156107c357600080fd5b506107cc611869565b6040516107d99190614dd5565b60405180910390f35b3480156107ee57600080fd5b506107f7611977565b005b34801561080557600080fd5b50610820600480360381019061081b91906141ee565b6119ff565b005b34801561082e57600080fd5b50610849600480360381019061084491906141c5565b611b56565b005b34801561085757600080fd5b50610860611bdc565b60405161086d9190615177565b60405180910390f35b34801561088257600080fd5b5061089d60048036038101906108989190613f21565b611c60565b6040516108aa9190614dba565b60405180910390f35b3480156108bf57600080fd5b506108c8611cb6565b6040516108d59190614d31565b60405180910390f35b3480156108ea57600080fd5b50610905600480360381019061090091906141c5565b611ce0565b005b34801561091357600080fd5b5061091c611d66565b6040516109299190614dd5565b60405180910390f35b34801561093e57600080fd5b50610959600480360381019061095491906140c8565b611df8565b005b34801561096757600080fd5b50610982600480360381019061097d91906141c5565b611f2f565b005b34801561099057600080fd5b50610999611fb5565b6040516109a69190615177565b60405180910390f35b6109c960048036038101906109c491906141c5565b611fbb565b005b3480156109d757600080fd5b506109f260048036038101906109ed9190614050565b6121e6565b005b348015610a0057600080fd5b50610a09612367565b604051610a169190615177565b60405180910390f35b348015610a2b57600080fd5b50610a3461236d565b005b348015610a4257600080fd5b50610a4b612406565b604051610a589190615177565b60405180910390f35b348015610a6d57600080fd5b50610a886004803603810190610a839190613f21565b61240c565b604051610a959190615177565b60405180910390f35b348015610aaa57600080fd5b50610ab3612424565b604051610ac09190615177565b60405180910390f35b348015610ad557600080fd5b50610af06004803603810190610aeb9190613fd5565b61242a565b005b348015610afe57600080fd5b50610b0761248c565b604051610b149190615177565b60405180910390f35b348015610b2957600080fd5b50610b326124ab565b604051610b3f9190615177565b60405180910390f35b348015610b5457600080fd5b50610b6f6004803603810190610b6a91906141c5565b6124b1565b604051610b7c9190614dd5565b60405180910390f35b348015610b9157600080fd5b50610bac6004803603810190610ba79190613f4a565b6125ff565b604051610bb99190614dba565b60405180910390f35b348015610bce57600080fd5b50610be96004803603810190610be491906141c5565b612693565b005b348015610bf757600080fd5b50610c00612719565b604051610c0d9190615177565b60405180910390f35b348015610c2257600080fd5b50610c3d6004803603810190610c389190614184565b61271f565b005b348015610c4b57600080fd5b50610c666004803603810190610c619190613f21565b6127b5565b005b348015610c7457600080fd5b50610c8f6004803603810190610c8a91906141c5565b6128ad565b005b600f5481565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610d0a5750610d0982612933565b5b9050919050565b610d19612a15565b73ffffffffffffffffffffffffffffffffffffffff16610d37611cb6565b73ffffffffffffffffffffffffffffffffffffffff1614610d8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8490615017565b60405180910390fd5b80600a60146101000a81548160ff02191690831515021790555050565b600c5481565b60125481565b606060008054610dc5906154a1565b80601f0160208091040260200160405190810160405280929190818152602001828054610df1906154a1565b8015610e3e5780601f10610e1357610100808354040283529160200191610e3e565b820191906000526020600020905b815481529060010190602001808311610e2157829003601f168201915b5050505050905090565b6000610e5382612a1d565b610e92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8990614ff7565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60158054610eda906154a1565b80601f0160208091040260200160405190810160405280929190818152602001828054610f06906154a1565b8015610f535780601f10610f2857610100808354040283529160200191610f53565b820191906000526020600020905b815481529060010190602001808311610f3657829003601f168201915b505050505081565b6000610f6682611679565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610fd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fce90615057565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610ff6612a15565b73ffffffffffffffffffffffffffffffffffffffff16148061102557506110248161101f612a15565b6125ff565b5b611064576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105b90614f37565b60405180910390fd5b61106e8383612a89565b505050565b6000600880549050905090565b61109161108b612a15565b82612b42565b6110d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c790615077565b60405180910390fd5b6110db838383612c20565b505050565b60006110eb836117b1565b821061112c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112390614e17565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b61118d612a15565b73ffffffffffffffffffffffffffffffffffffffff166111ab611cb6565b73ffffffffffffffffffffffffffffffffffffffff1614611201576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f890615017565b60405180910390fd5b80600f8190555050565b611213612a15565b73ffffffffffffffffffffffffffffffffffffffff16611231611cb6565b73ffffffffffffffffffffffffffffffffffffffff1614611287576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127e90615017565b60405180910390fd5b80600c8190555050565b611299612a15565b73ffffffffffffffffffffffffffffffffffffffff166112b7611cb6565b73ffffffffffffffffffffffffffffffffffffffff161461130d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130490615017565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff164760405161133390614d1c565b60006040518083038185875af1925050503d8060008114611370576040519150601f19603f3d011682016040523d82523d6000602084013e611375565b606091505b505090508061138357600080fd5b50565b6113a18383836040518060200160405280600081525061242a565b505050565b606060006113b3836117b1565b905060008167ffffffffffffffff8111156113f7577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156114255781602001602082028036833780820191505090505b50905060005b828110156114955761143d85826110e0565b828281518110611476577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001018181525050808061148d906154d3565b91505061142b565b508092505050919050565b60006114aa611073565b82106114eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e290615097565b60405180910390fd5b60088281548110611525577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b600a60159054906101000a900460ff1681565b611552612a15565b73ffffffffffffffffffffffffffffffffffffffff16611570611cb6565b73ffffffffffffffffffffffffffffffffffffffff16146115c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115bd90615017565b60405180910390fd5b8060108190555050565b6115d8612a15565b73ffffffffffffffffffffffffffffffffffffffff166115f6611cb6565b73ffffffffffffffffffffffffffffffffffffffff161461164c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164390615017565b60405180910390fd5b8060149080519060200190611662929190613caf565b5050565b600a60149054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611722576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171990614f77565b60405180910390fd5b80915050919050565b611733612a15565b73ffffffffffffffffffffffffffffffffffffffff16611751611cb6565b73ffffffffffffffffffffffffffffffffffffffff16146117a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179e90615017565b60405180910390fd5b80600d8190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611822576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181990614f57565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6060611873612a15565b73ffffffffffffffffffffffffffffffffffffffff16611891611cb6565b73ffffffffffffffffffffffffffffffffffffffff16146118e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118de90615017565b60405180910390fd5b601480546118f4906154a1565b80601f0160208091040260200160405190810160405280929190818152602001828054611920906154a1565b801561196d5780601f106119425761010080835404028352916020019161196d565b820191906000526020600020905b81548152906001019060200180831161195057829003601f168201915b5050505050905090565b61197f612a15565b73ffffffffffffffffffffffffffffffffffffffff1661199d611cb6565b73ffffffffffffffffffffffffffffffffffffffff16146119f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ea90615017565b60405180910390fd5b6119fd6000612e7c565b565b611a07612a15565b73ffffffffffffffffffffffffffffffffffffffff16611a25611cb6565b73ffffffffffffffffffffffffffffffffffffffff1614611a7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7290615017565b60405180910390fd5b6000611a85611073565b905060008311611aca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac190615157565b60405180910390fd5b600c548382611ad991906152d6565b1115611b1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1190614f97565b60405180910390fd5b6000600190505b838111611b5057611b3d838284611b3891906152d6565b612f42565b8080611b48906154d3565b915050611b21565b50505050565b611b5e612a15565b73ffffffffffffffffffffffffffffffffffffffff16611b7c611cb6565b73ffffffffffffffffffffffffffffffffffffffff1614611bd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc990615017565b60405180910390fd5b8060128190555050565b6000611be6612a15565b73ffffffffffffffffffffffffffffffffffffffff16611c04611cb6565b73ffffffffffffffffffffffffffffffffffffffff1614611c5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5190615017565b60405180910390fd5b47905090565b6000601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611ce8612a15565b73ffffffffffffffffffffffffffffffffffffffff16611d06611cb6565b73ffffffffffffffffffffffffffffffffffffffff1614611d5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5390615017565b60405180910390fd5b80600b8190555050565b606060018054611d75906154a1565b80601f0160208091040260200160405190810160405280929190818152602001828054611da1906154a1565b8015611dee5780601f10611dc357610100808354040283529160200191611dee565b820191906000526020600020905b815481529060010190602001808311611dd157829003601f168201915b5050505050905090565b611e00612a15565b73ffffffffffffffffffffffffffffffffffffffff16611e1e611cb6565b73ffffffffffffffffffffffffffffffffffffffff1614611e74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6b90615017565b60405180910390fd5b60005b8151811015611f2b57600160166000848481518110611ebf577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611f23906154d3565b915050611e77565b5050565b611f37612a15565b73ffffffffffffffffffffffffffffffffffffffff16611f55611cb6565b73ffffffffffffffffffffffffffffffffffffffff1614611fab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa290615017565b60405180910390fd5b80600e8190555050565b600b5481565b600a60149054906101000a900460ff161561200b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612002906150f7565b60405180910390fd5b6000811161204e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204590614ef7565b60405180910390fd5b601254421015612093576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208a906150d7565b60405180910390fd5b6000601760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060006120e1611073565b9050600e5442106120fa576120f583612f60565b612105565b6121048284612ff8565b5b600c54838261211491906152d6565b1115612155576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214c90614f97565b60405180910390fd5b6000600190505b8381116121e057601760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906121b3906154d3565b91905055506121cd3382846121c891906152d6565b612f42565b80806121d8906154d3565b91505061215c565b50505050565b6121ee612a15565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561225c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161225390614eb7565b60405180910390fd5b8060056000612269612a15565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16612316612a15565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161235b9190614dba565b60405180910390a35050565b60135481565b612375612a15565b73ffffffffffffffffffffffffffffffffffffffff16612393611cb6565b73ffffffffffffffffffffffffffffffffffffffff16146123e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e090615017565b60405180910390fd5b6001600a60156101000a81548160ff021916908315150217905550565b60105481565b60176020528060005260406000206000915090505481565b60115481565b61243b612435612a15565b83612b42565b61247a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247190615077565b60405180910390fd5b61248684848484613146565b50505050565b60006013544210156124a257600f5490506124a8565b600b5490505b90565b600e5481565b60606124bc82612a1d565b6124fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124f290615137565b60405180910390fd5b600a60159054906101000a900460ff166125a1576015805461251c906154a1565b80601f0160208091040260200160405190810160405280929190818152602001828054612548906154a1565b80156125955780601f1061256a57610100808354040283529160200191612595565b820191906000526020600020905b81548152906001019060200180831161257857829003601f168201915b505050505090506125fa565b60006125ab6131a2565b905060008151116125cb57604051806020016040528060008152506125f6565b806125d584613234565b6040516020016125e6929190614ced565b6040516020818303038152906040525b9150505b919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61269b612a15565b73ffffffffffffffffffffffffffffffffffffffff166126b9611cb6565b73ffffffffffffffffffffffffffffffffffffffff161461270f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161270690615017565b60405180910390fd5b8060118190555050565b600d5481565b612727612a15565b73ffffffffffffffffffffffffffffffffffffffff16612745611cb6565b73ffffffffffffffffffffffffffffffffffffffff161461279b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161279290615017565b60405180910390fd5b80601590805190602001906127b1929190613caf565b5050565b6127bd612a15565b73ffffffffffffffffffffffffffffffffffffffff166127db611cb6565b73ffffffffffffffffffffffffffffffffffffffff1614612831576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161282890615017565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156128a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289890614e57565b60405180910390fd5b6128aa81612e7c565b50565b6128b5612a15565b73ffffffffffffffffffffffffffffffffffffffff166128d3611cb6565b73ffffffffffffffffffffffffffffffffffffffff1614612929576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161292090615017565b60405180910390fd5b8060138190555050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806129fe57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612a0e5750612a0d826133e1565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16612afc83611679565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000612b4d82612a1d565b612b8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b8390614ed7565b60405180910390fd5b6000612b9783611679565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612c0657508373ffffffffffffffffffffffffffffffffffffffff16612bee84610e48565b73ffffffffffffffffffffffffffffffffffffffff16145b80612c175750612c1681856125ff565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612c4082611679565b73ffffffffffffffffffffffffffffffffffffffff1614612c96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c8d90615037565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612d06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cfd90614e97565b60405180910390fd5b612d1183838361344b565b612d1c600082612a89565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612d6c91906153b7565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612dc391906152d6565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612f5c82826040518060200160405280600081525061355f565b5050565b80600b54612f6e919061535d565b341015612fb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fa790615117565b60405180910390fd5b600d54811115612ff5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fec90614f17565b60405180910390fd5b50565b6000601354421061300e57600b54905080613015565b600f549050805b5061301f33611c60565b61305e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613055906150b7565b60405180910390fd5b818161306a919061535d565b3410156130ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130a390615117565b60405180910390fd5b6010548211156130f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130e890614df7565b60405180910390fd5b601154828461310091906152d6565b1115613141576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161313890614fb7565b60405180910390fd5b505050565b613151848484612c20565b61315d848484846135ba565b61319c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161319390614e37565b60405180910390fd5b50505050565b6060601480546131b1906154a1565b80601f01602080910402602001604051908101604052809291908181526020018280546131dd906154a1565b801561322a5780601f106131ff5761010080835404028352916020019161322a565b820191906000526020600020905b81548152906001019060200180831161320d57829003601f168201915b5050505050905090565b6060600082141561327c576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506133dc565b600082905060005b600082146132ae578080613297906154d3565b915050600a826132a7919061532c565b9150613284565b60008167ffffffffffffffff8111156132f0577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156133225781602001600182028036833780820191505090505b5090505b600085146133d55760018261333b91906153b7565b9150600a8561334a919061551c565b603061335691906152d6565b60f81b818381518110613392577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856133ce919061532c565b9450613326565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b613456838383613751565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156134995761349481613756565b6134d8565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146134d7576134d6838261379f565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561351b576135168161390c565b61355a565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614613559576135588282613a4f565b5b5b505050565b6135698383613ace565b61357660008484846135ba565b6135b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135ac90614e37565b60405180910390fd5b505050565b60006135db8473ffffffffffffffffffffffffffffffffffffffff16613c9c565b15613744578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02613604612a15565b8786866040518563ffffffff1660e01b81526004016136269493929190614d4c565b602060405180830381600087803b15801561364057600080fd5b505af192505050801561367157506040513d601f19601f8201168201806040525081019061366e919061415b565b60015b6136f4573d80600081146136a1576040519150601f19603f3d011682016040523d82523d6000602084013e6136a6565b606091505b506000815114156136ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136e390614e37565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613749565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016137ac846117b1565b6137b691906153b7565b905060006007600084815260200190815260200160002054905081811461389b576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905061392091906153b7565b9050600060096000848152602001908152602001600020549050600060088381548110613976577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200154905080600883815481106139be577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480613a33577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b6000613a5a836117b1565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613b3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b3590614fd7565b60405180910390fd5b613b4781612a1d565b15613b87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b7e90614e77565b60405180910390fd5b613b936000838361344b565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613be391906152d6565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b828054613cbb906154a1565b90600052602060002090601f016020900481019282613cdd5760008555613d24565b82601f10613cf657805160ff1916838001178555613d24565b82800160010185558215613d24579182015b82811115613d23578251825591602001919060010190613d08565b5b509050613d319190613d35565b5090565b5b80821115613d4e576000816000905550600101613d36565b5090565b6000613d65613d60846151c3565b615192565b90508083825260208201905082856020860282011115613d8457600080fd5b60005b85811015613db45781613d9a8882613e3a565b845260208401935060208301925050600181019050613d87565b5050509392505050565b6000613dd1613dcc846151ef565b615192565b905082815260208101848484011115613de957600080fd5b613df484828561545f565b509392505050565b6000613e0f613e0a8461521f565b615192565b905082815260208101848484011115613e2757600080fd5b613e3284828561545f565b509392505050565b600081359050613e498161561a565b92915050565b600082601f830112613e6057600080fd5b8135613e70848260208601613d52565b91505092915050565b600081359050613e8881615631565b92915050565b600081359050613e9d81615648565b92915050565b600081519050613eb281615648565b92915050565b600082601f830112613ec957600080fd5b8135613ed9848260208601613dbe565b91505092915050565b600082601f830112613ef357600080fd5b8135613f03848260208601613dfc565b91505092915050565b600081359050613f1b8161565f565b92915050565b600060208284031215613f3357600080fd5b6000613f4184828501613e3a565b91505092915050565b60008060408385031215613f5d57600080fd5b6000613f6b85828601613e3a565b9250506020613f7c85828601613e3a565b9150509250929050565b600080600060608486031215613f9b57600080fd5b6000613fa986828701613e3a565b9350506020613fba86828701613e3a565b9250506040613fcb86828701613f0c565b9150509250925092565b60008060008060808587031215613feb57600080fd5b6000613ff987828801613e3a565b945050602061400a87828801613e3a565b935050604061401b87828801613f0c565b925050606085013567ffffffffffffffff81111561403857600080fd5b61404487828801613eb8565b91505092959194509250565b6000806040838503121561406357600080fd5b600061407185828601613e3a565b925050602061408285828601613e79565b9150509250929050565b6000806040838503121561409f57600080fd5b60006140ad85828601613e3a565b92505060206140be85828601613f0c565b9150509250929050565b6000602082840312156140da57600080fd5b600082013567ffffffffffffffff8111156140f457600080fd5b61410084828501613e4f565b91505092915050565b60006020828403121561411b57600080fd5b600061412984828501613e79565b91505092915050565b60006020828403121561414457600080fd5b600061415284828501613e8e565b91505092915050565b60006020828403121561416d57600080fd5b600061417b84828501613ea3565b91505092915050565b60006020828403121561419657600080fd5b600082013567ffffffffffffffff8111156141b057600080fd5b6141bc84828501613ee2565b91505092915050565b6000602082840312156141d757600080fd5b60006141e584828501613f0c565b91505092915050565b6000806040838503121561420157600080fd5b600061420f85828601613f0c565b925050602061422085828601613e3a565b9150509250929050565b60006142368383614ccf565b60208301905092915050565b61424b816153eb565b82525050565b600061425c8261525f565b614266818561528d565b93506142718361524f565b8060005b838110156142a2578151614289888261422a565b975061429483615280565b925050600181019050614275565b5085935050505092915050565b6142b8816153fd565b82525050565b60006142c98261526a565b6142d3818561529e565b93506142e381856020860161546e565b6142ec81615609565b840191505092915050565b600061430282615275565b61430c81856152ba565b935061431c81856020860161546e565b61432581615609565b840191505092915050565b600061433b82615275565b61434581856152cb565b935061435581856020860161546e565b80840191505092915050565b600061436e601d836152ba565b91507f6c696d697420706572207472616e73616374696f6e20726561636865640000006000830152602082019050919050565b60006143ae602b836152ba565b91507f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008301527f74206f6620626f756e64730000000000000000000000000000000000000000006020830152604082019050919050565b60006144146032836152ba565b91507f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008301527f63656976657220696d706c656d656e74657200000000000000000000000000006020830152604082019050919050565b600061447a6026836152ba565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006144e0601c836152ba565b91507f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006000830152602082019050919050565b60006145206024836152ba565b91507f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006145866019836152ba565b91507f4552433732313a20617070726f766520746f2063616c6c6572000000000000006000830152602082019050919050565b60006145c6602c836152ba565b91507f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b600061462c6012836152ba565b91507f6d696e74206d696e696d756d2031204e465400000000000000000000000000006000830152602082019050919050565b600061466c6016836152ba565b91507f63616e2774206d696e74207468617420616d6f756e74000000000000000000006000830152602082019050919050565b60006146ac6038836152ba565b91507f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008301527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006020830152604082019050919050565b6000614712602a836152ba565b91507f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008301527f726f2061646472657373000000000000000000000000000000000000000000006020830152604082019050919050565b60006147786029836152ba565b91507f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008301527f656e7420746f6b656e00000000000000000000000000000000000000000000006020830152604082019050919050565b60006147de600d836152ba565b91507f6c696d69742072656163686564000000000000000000000000000000000000006000830152602082019050919050565b600061481e6021836152ba565b91507f70726573616c65206c696d69742070657220616464726573732072656163686560008301527f64000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006148846020836152ba565b91507f4552433732313a206d696e7420746f20746865207a65726f20616464726573736000830152602082019050919050565b60006148c4602c836152ba565b91507f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b600061492a6005836152cb565b91507f2e6a736f6e0000000000000000000000000000000000000000000000000000006000830152600582019050919050565b600061496a6020836152ba565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b60006149aa6029836152ba565b91507f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008301527f73206e6f74206f776e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000614a106021836152ba565b91507f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008301527f72000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614a766000836152af565b9150600082019050919050565b6000614a906031836152ba565b91507f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008301527f776e6572206e6f7220617070726f7665640000000000000000000000000000006020830152604082019050919050565b6000614af6602c836152ba565b91507f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008301527f7574206f6620626f756e647300000000000000000000000000000000000000006020830152604082019050919050565b6000614b5c600f836152ba565b91507f6e6f742077686974656c697374656400000000000000000000000000000000006000830152602082019050919050565b6000614b9c600b836152ba565b91507f6e6f7420737461727465640000000000000000000000000000000000000000006000830152602082019050919050565b6000614bdc6006836152ba565b91507f70617573656400000000000000000000000000000000000000000000000000006000830152602082019050919050565b6000614c1c600e836152ba565b91507f6e6f7420656e6f756768206574680000000000000000000000000000000000006000830152602082019050919050565b6000614c5c6014836152ba565b91507f746f6b656e20646f6573206e6f742065786973740000000000000000000000006000830152602082019050919050565b6000614c9c601b836152ba565b91507f6e65656420746f206d696e74206174206c656173742031204e465400000000006000830152602082019050919050565b614cd881615455565b82525050565b614ce781615455565b82525050565b6000614cf98285614330565b9150614d058284614330565b9150614d108261491d565b91508190509392505050565b6000614d2782614a69565b9150819050919050565b6000602082019050614d466000830184614242565b92915050565b6000608082019050614d616000830187614242565b614d6e6020830186614242565b614d7b6040830185614cde565b8181036060830152614d8d81846142be565b905095945050505050565b60006020820190508181036000830152614db28184614251565b905092915050565b6000602082019050614dcf60008301846142af565b92915050565b60006020820190508181036000830152614def81846142f7565b905092915050565b60006020820190508181036000830152614e1081614361565b9050919050565b60006020820190508181036000830152614e30816143a1565b9050919050565b60006020820190508181036000830152614e5081614407565b9050919050565b60006020820190508181036000830152614e708161446d565b9050919050565b60006020820190508181036000830152614e90816144d3565b9050919050565b60006020820190508181036000830152614eb081614513565b9050919050565b60006020820190508181036000830152614ed081614579565b9050919050565b60006020820190508181036000830152614ef0816145b9565b9050919050565b60006020820190508181036000830152614f108161461f565b9050919050565b60006020820190508181036000830152614f308161465f565b9050919050565b60006020820190508181036000830152614f508161469f565b9050919050565b60006020820190508181036000830152614f7081614705565b9050919050565b60006020820190508181036000830152614f908161476b565b9050919050565b60006020820190508181036000830152614fb0816147d1565b9050919050565b60006020820190508181036000830152614fd081614811565b9050919050565b60006020820190508181036000830152614ff081614877565b9050919050565b60006020820190508181036000830152615010816148b7565b9050919050565b600060208201905081810360008301526150308161495d565b9050919050565b600060208201905081810360008301526150508161499d565b9050919050565b6000602082019050818103600083015261507081614a03565b9050919050565b6000602082019050818103600083015261509081614a83565b9050919050565b600060208201905081810360008301526150b081614ae9565b9050919050565b600060208201905081810360008301526150d081614b4f565b9050919050565b600060208201905081810360008301526150f081614b8f565b9050919050565b6000602082019050818103600083015261511081614bcf565b9050919050565b6000602082019050818103600083015261513081614c0f565b9050919050565b6000602082019050818103600083015261515081614c4f565b9050919050565b6000602082019050818103600083015261517081614c8f565b9050919050565b600060208201905061518c6000830184614cde565b92915050565b6000604051905081810181811067ffffffffffffffff821117156151b9576151b86155da565b5b8060405250919050565b600067ffffffffffffffff8211156151de576151dd6155da565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561520a576152096155da565b5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff82111561523a576152396155da565b5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006152e182615455565b91506152ec83615455565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156153215761532061554d565b5b828201905092915050565b600061533782615455565b915061534283615455565b9250826153525761535161557c565b5b828204905092915050565b600061536882615455565b915061537383615455565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156153ac576153ab61554d565b5b828202905092915050565b60006153c282615455565b91506153cd83615455565b9250828210156153e0576153df61554d565b5b828203905092915050565b60006153f682615435565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561548c578082015181840152602081019050615471565b8381111561549b576000848401525b50505050565b600060028204905060018216806154b957607f821691505b602082108114156154cd576154cc6155ab565b5b50919050565b60006154de82615455565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156155115761551061554d565b5b600182019050919050565b600061552782615455565b915061553283615455565b9250826155425761554161557c565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b615623816153eb565b811461562e57600080fd5b50565b61563a816153fd565b811461564557600080fd5b50565b61565181615409565b811461565c57600080fd5b50565b61566881615455565b811461567357600080fd5b5056fea2646970667358221220cbfad8d8061cf31e856f2ca5337e3ebd16caf6dee6104fed3e9866d6fe15248364736f6c63430008000033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000008446f6f64617065730000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004444f4f44000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000035697066733a2f2f516d62506b4a39326f7733316173434b64666a55356e796844637135614e3731713641766f4e61565833675069660000000000000000000000
-----Decoded View---------------
Arg [0] : _name (string): Doodapes
Arg [1] : _symbol (string): DOOD
Arg [2] : _notRevealedUri (string): ipfs://QmbPkJ92ow31asCKdfjU5nyhDcq5aN71q6AvoNaVX3gPif
-----Encoded View---------------
10 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000008
Arg [4] : 446f6f6461706573000000000000000000000000000000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [6] : 444f4f4400000000000000000000000000000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000035
Arg [8] : 697066733a2f2f516d62506b4a39326f7733316173434b64666a55356e796844
Arg [9] : 637135614e3731713641766f4e61565833675069660000000000000000000000
Deployed Bytecode Sourcemap
41435:5735:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41706:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33236:260;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44603:73;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41588:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41834:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20755:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22278:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41979:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21843:377;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33935:107;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23188:332;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33572:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44499:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45068:88;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45266:174;;;:::i;:::-;;23583:165;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46307:356;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34111:272;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41518:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44942:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44395:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41487:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20443:253;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44808:128;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20163:226;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47072:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40778:88;;;;;;;;;;;;;:::i;:::-;;42300:332;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45446:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46958:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46669:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40167:81;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44138:78;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20910:98;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45558:170;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45734:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41551:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43477:634;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22581:299;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41879:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44326:63;;;;;;;;;;;;;:::i;:::-;;41751:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42053:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41798:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23811:321;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46775:166;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41662:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45854:447;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22943:186;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44222:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41621:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44682:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41011:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45162:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41706:40;;;;:::o;33236:260::-;33363:4;33408:35;33393:50;;;:11;:50;;;;:97;;;;33454:36;33478:11;33454:23;:36::i;:::-;33393:97;33379:111;;33236:260;;;:::o;44603:73::-;40380:12;:10;:12::i;:::-;40369:23;;:7;:5;:7::i;:::-;:23;;;40361:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44664:6:::1;44655;;:15;;;;;;;;;;;;;;;;;;44603:73:::0;:::o;41588:28::-;;;;:::o;41834:40::-;;;;:::o;20755:94::-;20809:13;20838:5;20831:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20755:94;:::o;22278:239::-;22379:7;22406:16;22414:7;22406;:16::i;:::-;22398:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;22487:15;:24;22503:7;22487:24;;;;;;;;;;;;;;;;;;;;;22480:31;;22278:239;;;:::o;41979:28::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;21843:377::-;21920:13;21936:23;21951:7;21936:14;:23::i;:::-;21920:39;;21980:5;21974:11;;:2;:11;;;;21966:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;22064:5;22048:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;22073:37;22090:5;22097:12;:10;:12::i;:::-;22073:16;:37::i;:::-;22048:62;22032:152;;;;;;;;;;;;:::i;:::-;;;;;;;;;22193:21;22202:2;22206:7;22193:8;:21::i;:::-;21843:377;;;:::o;33935:107::-;33996:7;34019:10;:17;;;;34012:24;;33935:107;:::o;23188:332::-;23369:41;23388:12;:10;:12::i;:::-;23402:7;23369:18;:41::i;:::-;23353:124;;;;;;;;;;;;:::i;:::-;;;;;;;;;23486:28;23496:4;23502:2;23506:7;23486:9;:28::i;:::-;23188:332;;;:::o;33572:295::-;33694:7;33737:23;33754:5;33737:16;:23::i;:::-;33729:5;:31;33713:108;;;;;;;;;;;;:::i;:::-;;;;;;;;;33835:12;:19;33848:5;33835:19;;;;;;;;;;;;;;;:26;33855:5;33835:26;;;;;;;;;;;;33828:33;;33572:295;;;;:::o;44499:98::-;40380:12;:10;:12::i;:::-;40369:23;;:7;:5;:7::i;:::-;:23;;;40361:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44582:9:::1;44567:12;:24;;;;44499:98:::0;:::o;45068:88::-;40380:12;:10;:12::i;:::-;40369:23;;:7;:5;:7::i;:::-;:23;;;40361:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45140:10:::1;45131:6;:19;;;;45068:88:::0;:::o;45266:174::-;40380:12;:10;:12::i;:::-;40369:23;;:7;:5;:7::i;:::-;:23;;;40361:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45319:12:::1;45345:10;45337:24;;45370:21;45337:74;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45318:93;;;45426:7;45418:16;;;::::0;::::1;;40436:1;45266:174::o:0;23583:165::-;23703:39;23720:4;23726:2;23730:7;23703:39;;;;;;;;;;;;:16;:39::i;:::-;23583:165;;;:::o;46307:356::-;46386:16;46414:23;46440:19;46450:8;46440:9;:19::i;:::-;46414:45;;46466:25;46508:15;46494:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46466:58;;46536:9;46531:105;46551:15;46547:1;:19;46531:105;;;46596:32;46616:8;46626:1;46596:19;:32::i;:::-;46582:8;46591:1;46582:11;;;;;;;;;;;;;;;;;;;;;:46;;;;;46568:3;;;;;:::i;:::-;;;;46531:105;;;;46649:8;46642:15;;;;46307:356;;;:::o;34111:272::-;34211:7;34254:30;:28;:30::i;:::-;34246:5;:38;34230:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;34360:10;34371:5;34360:17;;;;;;;;;;;;;;;;;;;;;;;;34353:24;;34111:272;;;:::o;41518:28::-;;;;;;;;;;;;;:::o;44942:120::-;40380:12;:10;:12::i;:::-;40369:23;;:7;:5;:7::i;:::-;:23;;;40361:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45047:9:::1;45021:23;:35;;;;44942:120:::0;:::o;44395:98::-;40380:12;:10;:12::i;:::-;40369:23;;:7;:5;:7::i;:::-;:23;;;40361:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44476:11:::1;44466:7;:21;;;;;;;;;;;;:::i;:::-;;44395:98:::0;:::o;41487:26::-;;;;;;;;;;;;;:::o;20443:253::-;20540:7;20559:13;20575:7;:16;20583:7;20575:16;;;;;;;;;;;;;;;;;;;;;20559:32;;20623:1;20606:19;;:5;:19;;;;20598:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;20685:5;20678:12;;;20443:253;;;:::o;44808:128::-;40380:12;:10;:12::i;:::-;40369:23;;:7;:5;:7::i;:::-;:23;;;40361:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44910:20:::1;44891:16;:39;;;;44808:128:::0;:::o;20163:226::-;20260:7;20304:1;20287:19;;:5;:19;;;;20279:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;20367:9;:16;20377:5;20367:16;;;;;;;;;;;;;;;;20360:23;;20163:226;;;:::o;47072:95::-;47125:13;40380:12;:10;:12::i;:::-;40369:23;;:7;:5;:7::i;:::-;:23;;;40361:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47154:7:::1;47147:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47072:95:::0;:::o;40778:88::-;40380:12;:10;:12::i;:::-;40369:23;;:7;:5;:7::i;:::-;:23;;;40361:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40839:21:::1;40857:1;40839:9;:21::i;:::-;40778:88::o:0;42300:332::-;40380:12;:10;:12::i;:::-;40369:23;;:7;:5;:7::i;:::-;:23;;;40361:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42367:21:::1;42391:13;:11;:13::i;:::-;42367:37;;42431:1;42421:7;:11;42413:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;42506:6;;42495:7;42479:13;:23;;;;:::i;:::-;:33;;42471:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;42544:9;42556:1;42544:13;;42539:88;42564:7;42559:1;:12;42539:88;;42587:32;42597:2;42617:1;42601:13;:17;;;;:::i;:::-;42587:9;:32::i;:::-;42573:3;;;;;:::i;:::-;;;;42539:88;;;;40436:1;42300:332:::0;;:::o;45446:106::-;40380:12;:10;:12::i;:::-;40369:23;;:7;:5;:7::i;:::-;:23;;;40361:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45533:13:::1;45518:12;:28;;;;45446:106:::0;:::o;46958:108::-;47016:7;40380:12;:10;:12::i;:::-;40369:23;;:7;:5;:7::i;:::-;:23;;;40361:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47039:21:::1;47032:28;;46958:108:::0;:::o;46669:100::-;46722:4;46742:11;:21;46754:8;46742:21;;;;;;;;;;;;;;;;;;;;;;;;;46735:28;;46669:100;;;:::o;40167:81::-;40213:7;40236:6;;;;;;;;;;;40229:13;;40167:81;:::o;44138:78::-;40380:12;:10;:12::i;:::-;40369:23;;:7;:5;:7::i;:::-;:23;;;40361:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44204:6:::1;44196:5;:14;;;;44138:78:::0;:::o;20910:98::-;20966:13;20995:7;20988:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20910:98;:::o;45558:170::-;40380:12;:10;:12::i;:::-;40369:23;;:7;:5;:7::i;:::-;:23;;;40361:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45632:9:::1;45627:96;45651:9;:16;45647:1;:20;45627:96;;;45711:4;45683:11;:25;45695:9;45705:1;45695:12;;;;;;;;;;;;;;;;;;;;;;45683:25;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;45669:3;;;;;:::i;:::-;;;;45627:96;;;;45558:170:::0;:::o;45734:102::-;40380:12;:10;:12::i;:::-;40369:23;;:7;:5;:7::i;:::-;:23;;;40361:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45818:12:::1;45804:11;:26;;;;45734:102:::0;:::o;41551:32::-;;;;:::o;43477:634::-;43539:6;;;;;;;;;;;43538:7;43530:26;;;;;;;;;;;;:::i;:::-;;;;;;;;;43581:1;43571:7;:11;43563:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;43639:12;;43620:15;:31;;43612:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;43674:14;43691:22;:34;43714:10;43691:34;;;;;;;;;;;;;;;;43674:51;;43732:21;43756:13;:11;:13::i;:::-;43732:37;;43796:11;;43778:15;:29;:110;;43862:26;43880:7;43862:17;:26::i;:::-;43778:110;;;43817:35;43836:6;43844:7;43817:18;:35::i;:::-;43778:110;43932:6;;43921:7;43905:13;:23;;;;:::i;:::-;:33;;43897:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;43970:9;43982:1;43970:13;;43965:141;43990:7;43985:1;:12;43965:141;;44013:22;:34;44036:10;44013:34;;;;;;;;;;;;;;;;:36;;;;;;;;;:::i;:::-;;;;;;44058:40;44068:10;44096:1;44080:13;:17;;;;:::i;:::-;44058:9;:40::i;:::-;43999:3;;;;;:::i;:::-;;;;43965:141;;;;43477:634;;;:::o;22581:299::-;22710:12;:10;:12::i;:::-;22698:24;;:8;:24;;;;22690:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;22806:8;22761:18;:32;22780:12;:10;:12::i;:::-;22761:32;;;;;;;;;;;;;;;:42;22794:8;22761:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;22855:8;22826:48;;22841:12;:10;:12::i;:::-;22826:48;;;22865:8;22826:48;;;;;;:::i;:::-;;;;;;;;22581:299;;:::o;41879:38::-;;;;:::o;44326:63::-;40380:12;:10;:12::i;:::-;40369:23;;:7;:5;:7::i;:::-;:23;;;40361:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44379:4:::1;44368:8;;:15;;;;;;;;;;;;;;;;;;44326:63::o:0;41751:42::-;;;;:::o;42053:57::-;;;;;;;;;;;;;;;;;:::o;41798:31::-;;;;:::o;23811:321::-;23972:41;23991:12;:10;:12::i;:::-;24005:7;23972:18;:41::i;:::-;23956:124;;;;;;;;;;;;:::i;:::-;;;;;;;;;24087:39;24101:4;24107:2;24111:7;24120:5;24087:13;:39::i;:::-;23811:321;;;;:::o;46775:166::-;46815:7;46853:10;;46835:15;:28;46831:105;;;46881:12;;46874:19;;;;46831:105;46923:5;;46916:12;;46775:166;;:::o;41662:39::-;;;;:::o;45854:447::-;45948:13;45981:12;45989:3;45981:7;:12::i;:::-;45973:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;46032:8;;;;;;;;;;;46027:269;;46058:14;46051:21;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46027:269;46095:28;46126:10;:8;:10::i;:::-;46095:41;;46192:1;46167:14;46161:28;:32;:127;;;;;;;;;;;;;;;;;46231:14;46247;:3;:12;:14::i;:::-;46214:57;;;;;;;;;:::i;:::-;;;;;;;;;;;;;46161:127;46145:143;;;45854:447;;;;:::o;22943:186::-;23065:4;23088:18;:25;23107:5;23088:25;;;;;;;;;;;;;;;:35;23114:8;23088:35;;;;;;;;;;;;;;;;;;;;;;;;;23081:42;;22943:186;;;;:::o;44222:98::-;40380:12;:10;:12::i;:::-;40369:23;;:7;:5;:7::i;:::-;:23;;;40361:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44305:9:::1;44290:12;:24;;;;44222:98:::0;:::o;41621:36::-;;;;:::o;44682:120::-;40380:12;:10;:12::i;:::-;40369:23;;:7;:5;:7::i;:::-;:23;;;40361:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44781:15:::1;44764:14;:32;;;;;;;;;;;;:::i;:::-;;44682:120:::0;:::o;41011:182::-;40380:12;:10;:12::i;:::-;40369:23;;:7;:5;:7::i;:::-;:23;;;40361:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41116:1:::1;41096:22;;:8;:22;;;;41088:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;41168:19;41178:8;41168:9;:19::i;:::-;41011:182:::0;:::o;45162:98::-;40380:12;:10;:12::i;:::-;40369:23;;:7;:5;:7::i;:::-;:23;;;40361:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45243:11:::1;45230:10;:24;;;;45162:98:::0;:::o;19798:309::-;19925:4;19970:25;19955:40;;;:11;:40;;;;:99;;;;20021:33;20006:48;;;:11;:48;;;;19955:99;:146;;;;20065:36;20089:11;20065:23;:36::i;:::-;19955:146;19941:160;;19798:309;;;:::o;15486:92::-;15539:7;15562:10;15555:17;;15486:92;:::o;25579:121::-;25644:4;25692:1;25664:30;;:7;:16;25672:7;25664:16;;;;;;;;;;;;;;;;;;;;;:30;;;;25657:37;;25579:121;;;:::o;29313:164::-;29411:2;29384:15;:24;29400:7;29384:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;29463:7;29459:2;29425:46;;29434:23;29449:7;29434:14;:23::i;:::-;29425:46;;;;;;;;;;;;29313:164;;:::o;25851:371::-;25964:4;25988:16;25996:7;25988;:16::i;:::-;25980:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26060:13;26076:23;26091:7;26076:14;:23::i;:::-;26060:39;;26125:5;26114:16;;:7;:16;;;:58;;;;26165:7;26141:31;;:20;26153:7;26141:11;:20::i;:::-;:31;;;26114:58;:101;;;;26183:32;26200:5;26207:7;26183:16;:32::i;:::-;26114:101;26106:110;;;25851:371;;;;:::o;28660:547::-;28809:4;28782:31;;:23;28797:7;28782:14;:23::i;:::-;:31;;;28766:106;;;;;;;;;;;;:::i;:::-;;;;;;;;;28901:1;28887:16;;:2;:16;;;;28879:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;28953:39;28974:4;28980:2;28984:7;28953:20;:39::i;:::-;29049:29;29066:1;29070:7;29049:8;:29::i;:::-;29106:1;29087:9;:15;29097:4;29087:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;29131:1;29114:9;:13;29124:2;29114:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;29158:2;29139:7;:16;29147:7;29139:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;29193:7;29189:2;29174:27;;29183:4;29174:27;;;;;;;;;;;;28660:547;;;:::o;41199:159::-;41251:16;41270:6;;;;;;;;;;;41251:25;;41292:8;41283:6;;:17;;;;;;;;;;;;;;;;;;41343:8;41312:40;;41333:8;41312:40;;;;;;;;;;;;41199:159;;:::o;26542:104::-;26614:26;26624:2;26628:7;26614:26;;;;;;;;;;;;:9;:26::i;:::-;26542:104;;:::o;42746:190::-;42835:7;42827:5;;:15;;;;:::i;:::-;42814:9;:28;;42806:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;42887:16;;42876:7;:27;;42868:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;42746:190;:::o;42942:529::-;43020:18;43063:10;;43045:15;:28;:91;;43131:5;;43118:18;;;43045:91;;;43096:12;;43083:25;;;43045:91;;43151:16;43156:10;43151:4;:16::i;:::-;43143:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;43228:7;43215:10;:20;;;;:::i;:::-;43202:9;:33;;43194:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;43288:23;;43277:7;:34;;43261:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;43402:12;;43391:7;43381;:17;;;;:::i;:::-;:33;;43365:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;42942:529;;;:::o;24976:308::-;25111:28;25121:4;25127:2;25131:7;25111:9;:28::i;:::-;25162:48;25185:4;25191:2;25195:7;25204:5;25162:22;:48::i;:::-;25146:132;;;;;;;;;;;;:::i;:::-;;;;;;;;;24976:308;;;;:::o;42638:102::-;42698:13;42727:7;42720:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42638:102;:::o;15983:637::-;16039:13;16257:1;16248:5;:10;16244:43;;;16269:10;;;;;;;;;;;;;;;;;;;;;16244:43;16293:12;16308:5;16293:20;;16320:14;16341:62;16356:1;16348:4;:9;16341:62;;16368:8;;;;;:::i;:::-;;;;16393:2;16385:10;;;;;:::i;:::-;;;16341:62;;;16409:19;16441:6;16431:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16409:39;;16455:132;16471:1;16462:5;:10;16455:132;;16493:1;16483:11;;;;;:::i;:::-;;;16554:2;16546:5;:10;;;;:::i;:::-;16533:2;:24;;;;:::i;:::-;16520:39;;16503:6;16510;16503:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;16577:2;16568:11;;;;;:::i;:::-;;;16455:132;;;16607:6;16593:21;;;;;15983:637;;;;:::o;18352:179::-;18462:4;18500:25;18485:40;;;:11;:40;;;;18478:47;;18352:179;;;:::o;34964:521::-;35090:45;35117:4;35123:2;35127:7;35090:26;:45::i;:::-;35164:1;35148:18;;:4;:18;;;35144:167;;;35177:40;35209:7;35177:31;:40::i;:::-;35144:167;;;35243:2;35235:10;;:4;:10;;;35231:80;;35256:47;35289:4;35295:7;35256:32;:47::i;:::-;35231:80;35144:167;35335:1;35321:16;;:2;:16;;;35317:163;;;35348:45;35385:7;35348:36;:45::i;:::-;35317:163;;;35417:4;35411:10;;:2;:10;;;35407:73;;35432:40;35460:2;35464:7;35432:27;:40::i;:::-;35407:73;35317:163;34964:521;;;:::o;26863:281::-;26975:18;26981:2;26985:7;26975:5;:18::i;:::-;27016:54;27047:1;27051:2;27055:7;27064:5;27016:22;:54::i;:::-;27000:138;;;;;;;;;;;;:::i;:::-;;;;;;;;;26863:281;;;:::o;30020:685::-;30157:4;30174:15;:2;:13;;;:15::i;:::-;30170:530;;;30229:2;30213:36;;;30250:12;:10;:12::i;:::-;30264:4;30270:7;30279:5;30213:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;30200:459;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30457:1;30440:6;:13;:18;30436:214;;;30473:60;;;;;;;;;;:::i;:::-;;;;;;;;30436:214;30618:6;30612:13;30603:6;30599:2;30595:15;30588:38;30200:459;30345:41;;;30335:51;;;:6;:51;;;;30328:58;;;;;30170:530;30688:4;30681:11;;30020:685;;;;;;;:::o;31247:112::-;;;;:::o;36172:154::-;36272:10;:17;;;;36245:15;:24;36261:7;36245:24;;;;;;;;;;;:44;;;;36296:10;36312:7;36296:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36172:154;:::o;36935:936::-;37197:22;37247:1;37222:22;37239:4;37222:16;:22::i;:::-;:26;;;;:::i;:::-;37197:51;;37255:18;37276:17;:26;37294:7;37276:26;;;;;;;;;;;;37255:47;;37415:14;37401:10;:28;37397:306;;37440:19;37462:12;:18;37475:4;37462:18;;;;;;;;;;;;;;;:34;37481:14;37462:34;;;;;;;;;;;;37440:56;;37540:11;37507:12;:18;37520:4;37507:18;;;;;;;;;;;;;;;:30;37526:10;37507:30;;;;;;;;;;;:44;;;;37651:10;37618:17;:30;37636:11;37618:30;;;;;;;;;;;:43;;;;37397:306;;37791:17;:26;37809:7;37791:26;;;;;;;;;;;37784:33;;;37831:12;:18;37844:4;37831:18;;;;;;;;;;;;;;;:34;37850:14;37831:34;;;;;;;;;;;37824:41;;;36935:936;;;;:::o;38154:1025::-;38395:22;38440:1;38420:10;:17;;;;:21;;;;:::i;:::-;38395:46;;38448:18;38469:15;:24;38485:7;38469:24;;;;;;;;;;;;38448:45;;38804:19;38826:10;38837:14;38826:26;;;;;;;;;;;;;;;;;;;;;;;;38804:48;;38886:11;38861:10;38872;38861:22;;;;;;;;;;;;;;;;;;;;;;;:36;;;;38993:10;38962:15;:28;38978:11;38962:28;;;;;;;;;;;:41;;;;39126:15;:24;39142:7;39126:24;;;;;;;;;;;39119:31;;;39157:10;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38154:1025;;;;:::o;35774:207::-;35855:14;35872:20;35889:2;35872:16;:20::i;:::-;35855:37;;35926:7;35899:12;:16;35912:2;35899:16;;;;;;;;;;;;;;;:24;35916:6;35899:24;;;;;;;;;;;:34;;;;35969:6;35940:17;:26;35958:7;35940:26;;;;;;;;;;;:35;;;;35774:207;;;:::o;27454:356::-;27544:1;27530:16;;:2;:16;;;;27522:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;27599:16;27607:7;27599;:16::i;:::-;27598:17;27590:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;27657:45;27686:1;27690:2;27694:7;27657:20;:45::i;:::-;27728:1;27711:9;:13;27721:2;27711:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;27755:2;27736:7;:16;27744:7;27736:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;27796:7;27792:2;27771:33;;27788:1;27771:33;;;;;;;;;;;;27454:356;;:::o;7848:351::-;7908:4;8100:12;8157:7;8145:20;8137:28;;8192:1;8185:4;:8;8178:15;;;7848:351;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:622:1:-;;145:80;160:64;217:6;160:64;:::i;:::-;145:80;:::i;:::-;136:89;;245:5;273:6;266:5;259:21;299:4;292:5;288:16;281:23;;324:6;374:3;366:4;358:6;354:17;349:3;345:27;342:36;339:2;;;391:1;388;381:12;339:2;419:1;404:236;429:6;426:1;423:13;404:236;;;496:3;524:37;557:3;545:10;524:37;:::i;:::-;519:3;512:50;591:4;586:3;582:14;575:21;;625:4;620:3;616:14;609:21;;464:176;451:1;448;444:9;439:14;;404:236;;;408:14;126:520;;;;;;;:::o;652:342::-;;754:64;769:48;810:6;769:48;:::i;:::-;754:64;:::i;:::-;745:73;;841:6;834:5;827:21;879:4;872:5;868:16;917:3;908:6;903:3;899:16;896:25;893:2;;;934:1;931;924:12;893:2;947:41;981:6;976:3;971;947:41;:::i;:::-;735:259;;;;;;:::o;1000:344::-;;1103:65;1118:49;1160:6;1118:49;:::i;:::-;1103:65;:::i;:::-;1094:74;;1191:6;1184:5;1177:21;1229:4;1222:5;1218:16;1267:3;1258:6;1253:3;1249:16;1246:25;1243:2;;;1284:1;1281;1274:12;1243:2;1297:41;1331:6;1326:3;1321;1297:41;:::i;:::-;1084:260;;;;;;:::o;1350:139::-;;1434:6;1421:20;1412:29;;1450:33;1477:5;1450:33;:::i;:::-;1402:87;;;;:::o;1512:303::-;;1632:3;1625:4;1617:6;1613:17;1609:27;1599:2;;1650:1;1647;1640:12;1599:2;1690:6;1677:20;1715:94;1805:3;1797:6;1790:4;1782:6;1778:17;1715:94;:::i;:::-;1706:103;;1589:226;;;;;:::o;1821:133::-;;1902:6;1889:20;1880:29;;1918:30;1942:5;1918:30;:::i;:::-;1870:84;;;;:::o;1960:137::-;;2043:6;2030:20;2021:29;;2059:32;2085:5;2059:32;:::i;:::-;2011:86;;;;:::o;2103:141::-;;2190:6;2184:13;2175:22;;2206:32;2232:5;2206:32;:::i;:::-;2165:79;;;;:::o;2263:271::-;;2367:3;2360:4;2352:6;2348:17;2344:27;2334:2;;2385:1;2382;2375:12;2334:2;2425:6;2412:20;2450:78;2524:3;2516:6;2509:4;2501:6;2497:17;2450:78;:::i;:::-;2441:87;;2324:210;;;;;:::o;2554:273::-;;2659:3;2652:4;2644:6;2640:17;2636:27;2626:2;;2677:1;2674;2667:12;2626:2;2717:6;2704:20;2742:79;2817:3;2809:6;2802:4;2794:6;2790:17;2742:79;:::i;:::-;2733:88;;2616:211;;;;;:::o;2833:139::-;;2917:6;2904:20;2895:29;;2933:33;2960:5;2933:33;:::i;:::-;2885:87;;;;:::o;2978:262::-;;3086:2;3074:9;3065:7;3061:23;3057:32;3054:2;;;3102:1;3099;3092:12;3054:2;3145:1;3170:53;3215:7;3206:6;3195:9;3191:22;3170:53;:::i;:::-;3160:63;;3116:117;3044:196;;;;:::o;3246:407::-;;;3371:2;3359:9;3350:7;3346:23;3342:32;3339:2;;;3387:1;3384;3377:12;3339:2;3430:1;3455:53;3500:7;3491:6;3480:9;3476:22;3455:53;:::i;:::-;3445:63;;3401:117;3557:2;3583:53;3628:7;3619:6;3608:9;3604:22;3583:53;:::i;:::-;3573:63;;3528:118;3329:324;;;;;:::o;3659:552::-;;;;3801:2;3789:9;3780:7;3776:23;3772:32;3769:2;;;3817:1;3814;3807:12;3769:2;3860:1;3885:53;3930:7;3921:6;3910:9;3906:22;3885:53;:::i;:::-;3875:63;;3831:117;3987:2;4013:53;4058:7;4049:6;4038:9;4034:22;4013:53;:::i;:::-;4003:63;;3958:118;4115:2;4141:53;4186:7;4177:6;4166:9;4162:22;4141:53;:::i;:::-;4131:63;;4086:118;3759:452;;;;;:::o;4217:809::-;;;;;4385:3;4373:9;4364:7;4360:23;4356:33;4353:2;;;4402:1;4399;4392:12;4353:2;4445:1;4470:53;4515:7;4506:6;4495:9;4491:22;4470:53;:::i;:::-;4460:63;;4416:117;4572:2;4598:53;4643:7;4634:6;4623:9;4619:22;4598:53;:::i;:::-;4588:63;;4543:118;4700:2;4726:53;4771:7;4762:6;4751:9;4747:22;4726:53;:::i;:::-;4716:63;;4671:118;4856:2;4845:9;4841:18;4828:32;4887:18;4879:6;4876:30;4873:2;;;4919:1;4916;4909:12;4873:2;4947:62;5001:7;4992:6;4981:9;4977:22;4947:62;:::i;:::-;4937:72;;4799:220;4343:683;;;;;;;:::o;5032:401::-;;;5154:2;5142:9;5133:7;5129:23;5125:32;5122:2;;;5170:1;5167;5160:12;5122:2;5213:1;5238:53;5283:7;5274:6;5263:9;5259:22;5238:53;:::i;:::-;5228:63;;5184:117;5340:2;5366:50;5408:7;5399:6;5388:9;5384:22;5366:50;:::i;:::-;5356:60;;5311:115;5112:321;;;;;:::o;5439:407::-;;;5564:2;5552:9;5543:7;5539:23;5535:32;5532:2;;;5580:1;5577;5570:12;5532:2;5623:1;5648:53;5693:7;5684:6;5673:9;5669:22;5648:53;:::i;:::-;5638:63;;5594:117;5750:2;5776:53;5821:7;5812:6;5801:9;5797:22;5776:53;:::i;:::-;5766:63;;5721:118;5522:324;;;;;:::o;5852:405::-;;5985:2;5973:9;5964:7;5960:23;5956:32;5953:2;;;6001:1;5998;5991:12;5953:2;6072:1;6061:9;6057:17;6044:31;6102:18;6094:6;6091:30;6088:2;;;6134:1;6131;6124:12;6088:2;6162:78;6232:7;6223:6;6212:9;6208:22;6162:78;:::i;:::-;6152:88;;6015:235;5943:314;;;;:::o;6263:256::-;;6368:2;6356:9;6347:7;6343:23;6339:32;6336:2;;;6384:1;6381;6374:12;6336:2;6427:1;6452:50;6494:7;6485:6;6474:9;6470:22;6452:50;:::i;:::-;6442:60;;6398:114;6326:193;;;;:::o;6525:260::-;;6632:2;6620:9;6611:7;6607:23;6603:32;6600:2;;;6648:1;6645;6638:12;6600:2;6691:1;6716:52;6760:7;6751:6;6740:9;6736:22;6716:52;:::i;:::-;6706:62;;6662:116;6590:195;;;;:::o;6791:282::-;;6909:2;6897:9;6888:7;6884:23;6880:32;6877:2;;;6925:1;6922;6915:12;6877:2;6968:1;6993:63;7048:7;7039:6;7028:9;7024:22;6993:63;:::i;:::-;6983:73;;6939:127;6867:206;;;;:::o;7079:375::-;;7197:2;7185:9;7176:7;7172:23;7168:32;7165:2;;;7213:1;7210;7203:12;7165:2;7284:1;7273:9;7269:17;7256:31;7314:18;7306:6;7303:30;7300:2;;;7346:1;7343;7336:12;7300:2;7374:63;7429:7;7420:6;7409:9;7405:22;7374:63;:::i;:::-;7364:73;;7227:220;7155:299;;;;:::o;7460:262::-;;7568:2;7556:9;7547:7;7543:23;7539:32;7536:2;;;7584:1;7581;7574:12;7536:2;7627:1;7652:53;7697:7;7688:6;7677:9;7673:22;7652:53;:::i;:::-;7642:63;;7598:117;7526:196;;;;:::o;7728:407::-;;;7853:2;7841:9;7832:7;7828:23;7824:32;7821:2;;;7869:1;7866;7859:12;7821:2;7912:1;7937:53;7982:7;7973:6;7962:9;7958:22;7937:53;:::i;:::-;7927:63;;7883:117;8039:2;8065:53;8110:7;8101:6;8090:9;8086:22;8065:53;:::i;:::-;8055:63;;8010:118;7811:324;;;;;:::o;8141:179::-;;8231:46;8273:3;8265:6;8231:46;:::i;:::-;8309:4;8304:3;8300:14;8286:28;;8221:99;;;;:::o;8326:118::-;8413:24;8431:5;8413:24;:::i;:::-;8408:3;8401:37;8391:53;;:::o;8480:732::-;;8628:54;8676:5;8628:54;:::i;:::-;8698:86;8777:6;8772:3;8698:86;:::i;:::-;8691:93;;8808:56;8858:5;8808:56;:::i;:::-;8887:7;8918:1;8903:284;8928:6;8925:1;8922:13;8903:284;;;9004:6;8998:13;9031:63;9090:3;9075:13;9031:63;:::i;:::-;9024:70;;9117:60;9170:6;9117:60;:::i;:::-;9107:70;;8963:224;8950:1;8947;8943:9;8938:14;;8903:284;;;8907:14;9203:3;9196:10;;8604:608;;;;;;;:::o;9218:109::-;9299:21;9314:5;9299:21;:::i;:::-;9294:3;9287:34;9277:50;;:::o;9333:360::-;;9447:38;9479:5;9447:38;:::i;:::-;9501:70;9564:6;9559:3;9501:70;:::i;:::-;9494:77;;9580:52;9625:6;9620:3;9613:4;9606:5;9602:16;9580:52;:::i;:::-;9657:29;9679:6;9657:29;:::i;:::-;9652:3;9648:39;9641:46;;9423:270;;;;;:::o;9699:364::-;;9815:39;9848:5;9815:39;:::i;:::-;9870:71;9934:6;9929:3;9870:71;:::i;:::-;9863:78;;9950:52;9995:6;9990:3;9983:4;9976:5;9972:16;9950:52;:::i;:::-;10027:29;10049:6;10027:29;:::i;:::-;10022:3;10018:39;10011:46;;9791:272;;;;;:::o;10069:377::-;;10203:39;10236:5;10203:39;:::i;:::-;10258:89;10340:6;10335:3;10258:89;:::i;:::-;10251:96;;10356:52;10401:6;10396:3;10389:4;10382:5;10378:16;10356:52;:::i;:::-;10433:6;10428:3;10424:16;10417:23;;10179:267;;;;;:::o;10452:327::-;;10615:67;10679:2;10674:3;10615:67;:::i;:::-;10608:74;;10712:31;10708:1;10703:3;10699:11;10692:52;10770:2;10765:3;10761:12;10754:19;;10598:181;;;:::o;10785:375::-;;10948:67;11012:2;11007:3;10948:67;:::i;:::-;10941:74;;11045:34;11041:1;11036:3;11032:11;11025:55;11111:13;11106:2;11101:3;11097:12;11090:35;11151:2;11146:3;11142:12;11135:19;;10931:229;;;:::o;11166:382::-;;11329:67;11393:2;11388:3;11329:67;:::i;:::-;11322:74;;11426:34;11422:1;11417:3;11413:11;11406:55;11492:20;11487:2;11482:3;11478:12;11471:42;11539:2;11534:3;11530:12;11523:19;;11312:236;;;:::o;11554:370::-;;11717:67;11781:2;11776:3;11717:67;:::i;:::-;11710:74;;11814:34;11810:1;11805:3;11801:11;11794:55;11880:8;11875:2;11870:3;11866:12;11859:30;11915:2;11910:3;11906:12;11899:19;;11700:224;;;:::o;11930:326::-;;12093:67;12157:2;12152:3;12093:67;:::i;:::-;12086:74;;12190:30;12186:1;12181:3;12177:11;12170:51;12247:2;12242:3;12238:12;12231:19;;12076:180;;;:::o;12262:368::-;;12425:67;12489:2;12484:3;12425:67;:::i;:::-;12418:74;;12522:34;12518:1;12513:3;12509:11;12502:55;12588:6;12583:2;12578:3;12574:12;12567:28;12621:2;12616:3;12612:12;12605:19;;12408:222;;;:::o;12636:323::-;;12799:67;12863:2;12858:3;12799:67;:::i;:::-;12792:74;;12896:27;12892:1;12887:3;12883:11;12876:48;12950:2;12945:3;12941:12;12934:19;;12782:177;;;:::o;12965:376::-;;13128:67;13192:2;13187:3;13128:67;:::i;:::-;13121:74;;13225:34;13221:1;13216:3;13212:11;13205:55;13291:14;13286:2;13281:3;13277:12;13270:36;13332:2;13327:3;13323:12;13316:19;;13111:230;;;:::o;13347:316::-;;13510:67;13574:2;13569:3;13510:67;:::i;:::-;13503:74;;13607:20;13603:1;13598:3;13594:11;13587:41;13654:2;13649:3;13645:12;13638:19;;13493:170;;;:::o;13669:320::-;;13832:67;13896:2;13891:3;13832:67;:::i;:::-;13825:74;;13929:24;13925:1;13920:3;13916:11;13909:45;13980:2;13975:3;13971:12;13964:19;;13815:174;;;:::o;13995:388::-;;14158:67;14222:2;14217:3;14158:67;:::i;:::-;14151:74;;14255:34;14251:1;14246:3;14242:11;14235:55;14321:26;14316:2;14311:3;14307:12;14300:48;14374:2;14369:3;14365:12;14358:19;;14141:242;;;:::o;14389:374::-;;14552:67;14616:2;14611:3;14552:67;:::i;:::-;14545:74;;14649:34;14645:1;14640:3;14636:11;14629:55;14715:12;14710:2;14705:3;14701:12;14694:34;14754:2;14749:3;14745:12;14738:19;;14535:228;;;:::o;14769:373::-;;14932:67;14996:2;14991:3;14932:67;:::i;:::-;14925:74;;15029:34;15025:1;15020:3;15016:11;15009:55;15095:11;15090:2;15085:3;15081:12;15074:33;15133:2;15128:3;15124:12;15117:19;;14915:227;;;:::o;15148:311::-;;15311:67;15375:2;15370:3;15311:67;:::i;:::-;15304:74;;15408:15;15404:1;15399:3;15395:11;15388:36;15450:2;15445:3;15441:12;15434:19;;15294:165;;;:::o;15465:365::-;;15628:67;15692:2;15687:3;15628:67;:::i;:::-;15621:74;;15725:34;15721:1;15716:3;15712:11;15705:55;15791:3;15786:2;15781:3;15777:12;15770:25;15821:2;15816:3;15812:12;15805:19;;15611:219;;;:::o;15836:330::-;;15999:67;16063:2;16058:3;15999:67;:::i;:::-;15992:74;;16096:34;16092:1;16087:3;16083:11;16076:55;16157:2;16152:3;16148:12;16141:19;;15982:184;;;:::o;16172:376::-;;16335:67;16399:2;16394:3;16335:67;:::i;:::-;16328:74;;16432:34;16428:1;16423:3;16419:11;16412:55;16498:14;16493:2;16488:3;16484:12;16477:36;16539:2;16534:3;16530:12;16523:19;;16318:230;;;:::o;16554:337::-;;16735:84;16817:1;16812:3;16735:84;:::i;:::-;16728:91;;16849:7;16845:1;16840:3;16836:11;16829:28;16883:1;16878:3;16874:11;16867:18;;16718:173;;;:::o;16897:330::-;;17060:67;17124:2;17119:3;17060:67;:::i;:::-;17053:74;;17157:34;17153:1;17148:3;17144:11;17137:55;17218:2;17213:3;17209:12;17202:19;;17043:184;;;:::o;17233:373::-;;17396:67;17460:2;17455:3;17396:67;:::i;:::-;17389:74;;17493:34;17489:1;17484:3;17480:11;17473:55;17559:11;17554:2;17549:3;17545:12;17538:33;17597:2;17592:3;17588:12;17581:19;;17379:227;;;:::o;17612:365::-;;17775:67;17839:2;17834:3;17775:67;:::i;:::-;17768:74;;17872:34;17868:1;17863:3;17859:11;17852:55;17938:3;17933:2;17928:3;17924:12;17917:25;17968:2;17963:3;17959:12;17952:19;;17758:219;;;:::o;17983:297::-;;18163:83;18244:1;18239:3;18163:83;:::i;:::-;18156:90;;18272:1;18267:3;18263:11;18256:18;;18146:134;;;:::o;18286:381::-;;18449:67;18513:2;18508:3;18449:67;:::i;:::-;18442:74;;18546:34;18542:1;18537:3;18533:11;18526:55;18612:19;18607:2;18602:3;18598:12;18591:41;18658:2;18653:3;18649:12;18642:19;;18432:235;;;:::o;18673:376::-;;18836:67;18900:2;18895:3;18836:67;:::i;:::-;18829:74;;18933:34;18929:1;18924:3;18920:11;18913:55;18999:14;18994:2;18989:3;18985:12;18978:36;19040:2;19035:3;19031:12;19024:19;;18819:230;;;:::o;19055:313::-;;19218:67;19282:2;19277:3;19218:67;:::i;:::-;19211:74;;19315:17;19311:1;19306:3;19302:11;19295:38;19359:2;19354:3;19350:12;19343:19;;19201:167;;;:::o;19374:309::-;;19537:67;19601:2;19596:3;19537:67;:::i;:::-;19530:74;;19634:13;19630:1;19625:3;19621:11;19614:34;19674:2;19669:3;19665:12;19658:19;;19520:163;;;:::o;19689:303::-;;19852:66;19916:1;19911:3;19852:66;:::i;:::-;19845:73;;19948:8;19944:1;19939:3;19935:11;19928:29;19983:2;19978:3;19974:12;19967:19;;19835:157;;;:::o;19998:312::-;;20161:67;20225:2;20220:3;20161:67;:::i;:::-;20154:74;;20258:16;20254:1;20249:3;20245:11;20238:37;20301:2;20296:3;20292:12;20285:19;;20144:166;;;:::o;20316:318::-;;20479:67;20543:2;20538:3;20479:67;:::i;:::-;20472:74;;20576:22;20572:1;20567:3;20563:11;20556:43;20625:2;20620:3;20616:12;20609:19;;20462:172;;;:::o;20640:325::-;;20803:67;20867:2;20862:3;20803:67;:::i;:::-;20796:74;;20900:29;20896:1;20891:3;20887:11;20880:50;20956:2;20951:3;20947:12;20940:19;;20786:179;;;:::o;20971:108::-;21048:24;21066:5;21048:24;:::i;:::-;21043:3;21036:37;21026:53;;:::o;21085:118::-;21172:24;21190:5;21172:24;:::i;:::-;21167:3;21160:37;21150:53;;:::o;21209:701::-;;21512:95;21603:3;21594:6;21512:95;:::i;:::-;21505:102;;21624:95;21715:3;21706:6;21624:95;:::i;:::-;21617:102;;21736:148;21880:3;21736:148;:::i;:::-;21729:155;;21901:3;21894:10;;21494:416;;;;;:::o;21916:379::-;;22122:147;22265:3;22122:147;:::i;:::-;22115:154;;22286:3;22279:10;;22104:191;;;:::o;22301:222::-;;22432:2;22421:9;22417:18;22409:26;;22445:71;22513:1;22502:9;22498:17;22489:6;22445:71;:::i;:::-;22399:124;;;;:::o;22529:640::-;;22762:3;22751:9;22747:19;22739:27;;22776:71;22844:1;22833:9;22829:17;22820:6;22776:71;:::i;:::-;22857:72;22925:2;22914:9;22910:18;22901:6;22857:72;:::i;:::-;22939;23007:2;22996:9;22992:18;22983:6;22939:72;:::i;:::-;23058:9;23052:4;23048:20;23043:2;23032:9;23028:18;23021:48;23086:76;23157:4;23148:6;23086:76;:::i;:::-;23078:84;;22729:440;;;;;;;:::o;23175:373::-;;23356:2;23345:9;23341:18;23333:26;;23405:9;23399:4;23395:20;23391:1;23380:9;23376:17;23369:47;23433:108;23536:4;23527:6;23433:108;:::i;:::-;23425:116;;23323:225;;;;:::o;23554:210::-;;23679:2;23668:9;23664:18;23656:26;;23692:65;23754:1;23743:9;23739:17;23730:6;23692:65;:::i;:::-;23646:118;;;;:::o;23770:313::-;;23921:2;23910:9;23906:18;23898:26;;23970:9;23964:4;23960:20;23956:1;23945:9;23941:17;23934:47;23998:78;24071:4;24062:6;23998:78;:::i;:::-;23990:86;;23888:195;;;;:::o;24089:419::-;;24293:2;24282:9;24278:18;24270:26;;24342:9;24336:4;24332:20;24328:1;24317:9;24313:17;24306:47;24370:131;24496:4;24370:131;:::i;:::-;24362:139;;24260:248;;;:::o;24514:419::-;;24718:2;24707:9;24703:18;24695:26;;24767:9;24761:4;24757:20;24753:1;24742:9;24738:17;24731:47;24795:131;24921:4;24795:131;:::i;:::-;24787:139;;24685:248;;;:::o;24939:419::-;;25143:2;25132:9;25128:18;25120:26;;25192:9;25186:4;25182:20;25178:1;25167:9;25163:17;25156:47;25220:131;25346:4;25220:131;:::i;:::-;25212:139;;25110:248;;;:::o;25364:419::-;;25568:2;25557:9;25553:18;25545:26;;25617:9;25611:4;25607:20;25603:1;25592:9;25588:17;25581:47;25645:131;25771:4;25645:131;:::i;:::-;25637:139;;25535:248;;;:::o;25789:419::-;;25993:2;25982:9;25978:18;25970:26;;26042:9;26036:4;26032:20;26028:1;26017:9;26013:17;26006:47;26070:131;26196:4;26070:131;:::i;:::-;26062:139;;25960:248;;;:::o;26214:419::-;;26418:2;26407:9;26403:18;26395:26;;26467:9;26461:4;26457:20;26453:1;26442:9;26438:17;26431:47;26495:131;26621:4;26495:131;:::i;:::-;26487:139;;26385:248;;;:::o;26639:419::-;;26843:2;26832:9;26828:18;26820:26;;26892:9;26886:4;26882:20;26878:1;26867:9;26863:17;26856:47;26920:131;27046:4;26920:131;:::i;:::-;26912:139;;26810:248;;;:::o;27064:419::-;;27268:2;27257:9;27253:18;27245:26;;27317:9;27311:4;27307:20;27303:1;27292:9;27288:17;27281:47;27345:131;27471:4;27345:131;:::i;:::-;27337:139;;27235:248;;;:::o;27489:419::-;;27693:2;27682:9;27678:18;27670:26;;27742:9;27736:4;27732:20;27728:1;27717:9;27713:17;27706:47;27770:131;27896:4;27770:131;:::i;:::-;27762:139;;27660:248;;;:::o;27914:419::-;;28118:2;28107:9;28103:18;28095:26;;28167:9;28161:4;28157:20;28153:1;28142:9;28138:17;28131:47;28195:131;28321:4;28195:131;:::i;:::-;28187:139;;28085:248;;;:::o;28339:419::-;;28543:2;28532:9;28528:18;28520:26;;28592:9;28586:4;28582:20;28578:1;28567:9;28563:17;28556:47;28620:131;28746:4;28620:131;:::i;:::-;28612:139;;28510:248;;;:::o;28764:419::-;;28968:2;28957:9;28953:18;28945:26;;29017:9;29011:4;29007:20;29003:1;28992:9;28988:17;28981:47;29045:131;29171:4;29045:131;:::i;:::-;29037:139;;28935:248;;;:::o;29189:419::-;;29393:2;29382:9;29378:18;29370:26;;29442:9;29436:4;29432:20;29428:1;29417:9;29413:17;29406:47;29470:131;29596:4;29470:131;:::i;:::-;29462:139;;29360:248;;;:::o;29614:419::-;;29818:2;29807:9;29803:18;29795:26;;29867:9;29861:4;29857:20;29853:1;29842:9;29838:17;29831:47;29895:131;30021:4;29895:131;:::i;:::-;29887:139;;29785:248;;;:::o;30039:419::-;;30243:2;30232:9;30228:18;30220:26;;30292:9;30286:4;30282:20;30278:1;30267:9;30263:17;30256:47;30320:131;30446:4;30320:131;:::i;:::-;30312:139;;30210:248;;;:::o;30464:419::-;;30668:2;30657:9;30653:18;30645:26;;30717:9;30711:4;30707:20;30703:1;30692:9;30688:17;30681:47;30745:131;30871:4;30745:131;:::i;:::-;30737:139;;30635:248;;;:::o;30889:419::-;;31093:2;31082:9;31078:18;31070:26;;31142:9;31136:4;31132:20;31128:1;31117:9;31113:17;31106:47;31170:131;31296:4;31170:131;:::i;:::-;31162:139;;31060:248;;;:::o;31314:419::-;;31518:2;31507:9;31503:18;31495:26;;31567:9;31561:4;31557:20;31553:1;31542:9;31538:17;31531:47;31595:131;31721:4;31595:131;:::i;:::-;31587:139;;31485:248;;;:::o;31739:419::-;;31943:2;31932:9;31928:18;31920:26;;31992:9;31986:4;31982:20;31978:1;31967:9;31963:17;31956:47;32020:131;32146:4;32020:131;:::i;:::-;32012:139;;31910:248;;;:::o;32164:419::-;;32368:2;32357:9;32353:18;32345:26;;32417:9;32411:4;32407:20;32403:1;32392:9;32388:17;32381:47;32445:131;32571:4;32445:131;:::i;:::-;32437:139;;32335:248;;;:::o;32589:419::-;;32793:2;32782:9;32778:18;32770:26;;32842:9;32836:4;32832:20;32828:1;32817:9;32813:17;32806:47;32870:131;32996:4;32870:131;:::i;:::-;32862:139;;32760:248;;;:::o;33014:419::-;;33218:2;33207:9;33203:18;33195:26;;33267:9;33261:4;33257:20;33253:1;33242:9;33238:17;33231:47;33295:131;33421:4;33295:131;:::i;:::-;33287:139;;33185:248;;;:::o;33439:419::-;;33643:2;33632:9;33628:18;33620:26;;33692:9;33686:4;33682:20;33678:1;33667:9;33663:17;33656:47;33720:131;33846:4;33720:131;:::i;:::-;33712:139;;33610:248;;;:::o;33864:419::-;;34068:2;34057:9;34053:18;34045:26;;34117:9;34111:4;34107:20;34103:1;34092:9;34088:17;34081:47;34145:131;34271:4;34145:131;:::i;:::-;34137:139;;34035:248;;;:::o;34289:419::-;;34493:2;34482:9;34478:18;34470:26;;34542:9;34536:4;34532:20;34528:1;34517:9;34513:17;34506:47;34570:131;34696:4;34570:131;:::i;:::-;34562:139;;34460:248;;;:::o;34714:419::-;;34918:2;34907:9;34903:18;34895:26;;34967:9;34961:4;34957:20;34953:1;34942:9;34938:17;34931:47;34995:131;35121:4;34995:131;:::i;:::-;34987:139;;34885:248;;;:::o;35139:419::-;;35343:2;35332:9;35328:18;35320:26;;35392:9;35386:4;35382:20;35378:1;35367:9;35363:17;35356:47;35420:131;35546:4;35420:131;:::i;:::-;35412:139;;35310:248;;;:::o;35564:419::-;;35768:2;35757:9;35753:18;35745:26;;35817:9;35811:4;35807:20;35803:1;35792:9;35788:17;35781:47;35845:131;35971:4;35845:131;:::i;:::-;35837:139;;35735:248;;;:::o;35989:222::-;;36120:2;36109:9;36105:18;36097:26;;36133:71;36201:1;36190:9;36186:17;36177:6;36133:71;:::i;:::-;36087:124;;;;:::o;36217:283::-;;36283:2;36277:9;36267:19;;36325:4;36317:6;36313:17;36432:6;36420:10;36417:22;36396:18;36384:10;36381:34;36378:62;36375:2;;;36443:18;;:::i;:::-;36375:2;36483:10;36479:2;36472:22;36257:243;;;;:::o;36506:311::-;;36673:18;36665:6;36662:30;36659:2;;;36695:18;;:::i;:::-;36659:2;36745:4;36737:6;36733:17;36725:25;;36805:4;36799;36795:15;36787:23;;36588:229;;;:::o;36823:331::-;;36974:18;36966:6;36963:30;36960:2;;;36996:18;;:::i;:::-;36960:2;37081:4;37077:9;37070:4;37062:6;37058:17;37054:33;37046:41;;37142:4;37136;37132:15;37124:23;;36889:265;;;:::o;37160:332::-;;37312:18;37304:6;37301:30;37298:2;;;37334:18;;:::i;:::-;37298:2;37419:4;37415:9;37408:4;37400:6;37396:17;37392:33;37384:41;;37480:4;37474;37470:15;37462:23;;37227:265;;;:::o;37498:132::-;;37588:3;37580:11;;37618:4;37613:3;37609:14;37601:22;;37570:60;;;:::o;37636:114::-;;37737:5;37731:12;37721:22;;37710:40;;;:::o;37756:98::-;;37841:5;37835:12;37825:22;;37814:40;;;:::o;37860:99::-;;37946:5;37940:12;37930:22;;37919:40;;;:::o;37965:113::-;;38067:4;38062:3;38058:14;38050:22;;38040:38;;;:::o;38084:184::-;;38217:6;38212:3;38205:19;38257:4;38252:3;38248:14;38233:29;;38195:73;;;;:::o;38274:168::-;;38391:6;38386:3;38379:19;38431:4;38426:3;38422:14;38407:29;;38369:73;;;;:::o;38448:147::-;;38586:3;38571:18;;38561:34;;;;:::o;38601:169::-;;38719:6;38714:3;38707:19;38759:4;38754:3;38750:14;38735:29;;38697:73;;;;:::o;38776:148::-;;38915:3;38900:18;;38890:34;;;;:::o;38930:305::-;;38989:20;39007:1;38989:20;:::i;:::-;38984:25;;39023:20;39041:1;39023:20;:::i;:::-;39018:25;;39177:1;39109:66;39105:74;39102:1;39099:81;39096:2;;;39183:18;;:::i;:::-;39096:2;39227:1;39224;39220:9;39213:16;;38974:261;;;;:::o;39241:185::-;;39298:20;39316:1;39298:20;:::i;:::-;39293:25;;39332:20;39350:1;39332:20;:::i;:::-;39327:25;;39371:1;39361:2;;39376:18;;:::i;:::-;39361:2;39418:1;39415;39411:9;39406:14;;39283:143;;;;:::o;39432:348::-;;39495:20;39513:1;39495:20;:::i;:::-;39490:25;;39529:20;39547:1;39529:20;:::i;:::-;39524:25;;39717:1;39649:66;39645:74;39642:1;39639:81;39634:1;39627:9;39620:17;39616:105;39613:2;;;39724:18;;:::i;:::-;39613:2;39772:1;39769;39765:9;39754:20;;39480:300;;;;:::o;39786:191::-;;39846:20;39864:1;39846:20;:::i;:::-;39841:25;;39880:20;39898:1;39880:20;:::i;:::-;39875:25;;39919:1;39916;39913:8;39910:2;;;39924:18;;:::i;:::-;39910:2;39969:1;39966;39962:9;39954:17;;39831:146;;;;:::o;39983:96::-;;40049:24;40067:5;40049:24;:::i;:::-;40038:35;;40028:51;;;:::o;40085:90::-;;40162:5;40155:13;40148:21;40137:32;;40127:48;;;:::o;40181:149::-;;40257:66;40250:5;40246:78;40235:89;;40225:105;;;:::o;40336:126::-;;40413:42;40406:5;40402:54;40391:65;;40381:81;;;:::o;40468:77::-;;40534:5;40523:16;;40513:32;;;:::o;40551:154::-;40635:6;40630:3;40625;40612:30;40697:1;40688:6;40683:3;40679:16;40672:27;40602:103;;;:::o;40711:307::-;40779:1;40789:113;40803:6;40800:1;40797:13;40789:113;;;40888:1;40883:3;40879:11;40873:18;40869:1;40864:3;40860:11;40853:39;40825:2;40822:1;40818:10;40813:15;;40789:113;;;40920:6;40917:1;40914:13;40911:2;;;41000:1;40991:6;40986:3;40982:16;40975:27;40911:2;40760:258;;;;:::o;41024:320::-;;41105:1;41099:4;41095:12;41085:22;;41152:1;41146:4;41142:12;41173:18;41163:2;;41229:4;41221:6;41217:17;41207:27;;41163:2;41291;41283:6;41280:14;41260:18;41257:38;41254:2;;;41310:18;;:::i;:::-;41254:2;41075:269;;;;:::o;41350:233::-;;41412:24;41430:5;41412:24;:::i;:::-;41403:33;;41458:66;41451:5;41448:77;41445:2;;;41528:18;;:::i;:::-;41445:2;41575:1;41568:5;41564:13;41557:20;;41393:190;;;:::o;41589:176::-;;41638:20;41656:1;41638:20;:::i;:::-;41633:25;;41672:20;41690:1;41672:20;:::i;:::-;41667:25;;41711:1;41701:2;;41716:18;;:::i;:::-;41701:2;41757:1;41754;41750:9;41745:14;;41623:142;;;;:::o;41771:180::-;41819:77;41816:1;41809:88;41916:4;41913:1;41906:15;41940:4;41937:1;41930:15;41957:180;42005:77;42002:1;41995:88;42102:4;42099:1;42092:15;42126:4;42123:1;42116:15;42143:180;42191:77;42188:1;42181:88;42288:4;42285:1;42278:15;42312:4;42309:1;42302:15;42329:180;42377:77;42374:1;42367:88;42474:4;42471:1;42464:15;42498:4;42495:1;42488:15;42515:102;;42607:2;42603:7;42598:2;42591:5;42587:14;42583:28;42573:38;;42563:54;;;:::o;42623:122::-;42696:24;42714:5;42696:24;:::i;:::-;42689:5;42686:35;42676:2;;42735:1;42732;42725:12;42676:2;42666:79;:::o;42751:116::-;42821:21;42836:5;42821:21;:::i;:::-;42814:5;42811:32;42801:2;;42857:1;42854;42847:12;42801:2;42791:76;:::o;42873:120::-;42945:23;42962:5;42945:23;:::i;:::-;42938:5;42935:34;42925:2;;42983:1;42980;42973:12;42925:2;42915:78;:::o;42999:122::-;43072:24;43090:5;43072:24;:::i;:::-;43065:5;43062:35;43052:2;;43111:1;43108;43101:12;43052:2;43042:79;:::o
Swarm Source
ipfs://cbfad8d8061cf31e856f2ca5337e3ebd16caf6dee6104fed3e9866d6fe152483
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.