Feature Tip: Add private address tag to any address under My Name Tag !
ERC-721
Overview
Max Total Supply
1,410 SMOLCROAK
Holders
580
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
1 SMOLCROAKLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
BabyToadz
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-12-27 */ // 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); } 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/BabyToadz.sol /** SPDX-License-Identifier: GPL-3.0 BABYTOADZ Designer: skirano.eth Developer: jabeo.eth */ //################################################################################ //################################################################################ //################################### ################################### //############################## ********** ############################## //############################ ******************** ########################### //############################ ******************** ########################### //######################### ************************* ######################### //######################### ************************* ######################### //############### ************************* ############### //############# ********** ************************* ********** ############ //########## *************** *************@@***** *************** ########## //######## ***************@@@@@@@@@@*****@@@**@@@@@@@@@@*************** ####### //##### ***************@@ ##@@@@@@@@@@### @@@*************** ##### //##### ************@@@ @@@@@ ///,,,,,,, @@@@@ @@************* ##### //##### ************@@@ @@@ ##,*,,,,,,,,### @@ @@************* ##### //##### **@@@*******@@@##########,*,,,,,,,,,,**,##########@@***@@******** ##### //##### *****@@***@@(((#######,,,@@,,,,,,,,,,@@@,,########((@@@********** ##### //######## *****@@@((///,,(####,,,,*@@@@@@@@@@,,*,,#####*,,//(((@@***** ####### //########## **@@@((**///,,,,,,,,,,##########,,,,,,,,,,/////(((@@*** ########## //############# @@@((***/**/*,,,,,,,,,,,,,,,,*,,,,,,,***//*//(((@@ ############ //############# @@@(((((////*****/*,,,,,,,,,,,,,,****/***/*(((((@@ ############ //########## **@@@(((((((/*////*///**********/**/*////*((((((((@@*** ########## //######## *****@@@((((((((((((//*// **///(((((((((((((@@**/@@ ####### //##### @@***@@@@@@@((((((((//*// /**/*(((((((@@@@@@@@***** ##### //##### **@@@(((((##@@@(((((##*//** ****/###(((((@@###((*//@@*** ##### //##### **@@@#######@@@#######//*##**/ **###*/########@@#####(##@@*** ##### //##### *****@@########@@###@@,,,@@#(########@@@,,@@@##@@@#######@@@***** ##### //##### ##@@@((@@@((#####(((,*,,**/@@@@@@@@@@(((,,**,//#####(((@@(((@@### ##### //########@@@@@@@@@@@@@@@((@@@((//*@@**/@@@@@((@@@((///@@*//@@@@@@@@@@@@@@@####### //########## **********@@@@@@@@@@@@@@@#####@@@@@@@@@@@@@@@*********/ ########## //############# ################################# ############ //################################################################################ pragma solidity ^0.8.0; contract BabyToadz is ERC721Enumerable, Ownable { using Strings for uint256; struct Parents { uint256 top; uint256 bottom; } // --- Constants --- address creaturetoadz_addr = 0xA4631A191044096834Ce65d1EE86b16b171D8080; // --- Variables --- uint256 public constant maxSupply = 4444; bool public isMintingOpen = false; bool public isBurningAllowed = false; string public baseURI; mapping(uint256 => uint256) public babyOfParent; mapping(uint256 => Parents) public parentsOfBaby; // --- Intialization --- constructor(string memory _initBaseURI) ERC721("BabyToadz", "SMOLCROAK") { setBaseURI(_initBaseURI); } // --- Internal --- function _baseURI() internal view virtual override returns (string memory) { return baseURI; } // --- Public --- function toggleMinting(bool isOpen) public onlyOwner { isMintingOpen = isOpen; } function toggleBurning(bool isAllowed) public onlyOwner { isBurningAllowed = isAllowed; } function burnBaby(uint256 baby) public { require(isBurningAllowed, "Burning is not allowed."); require(ownerOf(baby) == msg.sender, "You don't own this baby."); _burn(baby); } function devMint(uint256 _toad1, uint256 _toad2) public onlyOwner { require(_toad1 >= 0 && _toad1 <= 8888, "Toad 1 is not valid."); require(_toad2 >= 0 && _toad2 <= 8888, "Toad 2 is not valid."); require(babyOfParent[_toad1] <= 0, "Toad 1 has already been bred."); require(babyOfParent[_toad2] <= 0, "Toad 2 has already been bred."); uint256 toadId = totalSupply() + 1; require(toadId <= maxSupply, "Max supply of BabyToadz already minted!"); babyOfParent[_toad1] = toadId; babyOfParent[_toad2] = toadId; parentsOfBaby[toadId] = Parents(_toad1, _toad2); _safeMint(msg.sender, toadId); } function mint(uint256 _toad1, uint256 _toad2) public { require(isMintingOpen, "Minting is not open."); ERC721Enumerable creatureToadzToken = ERC721Enumerable(creaturetoadz_addr); require(creatureToadzToken.ownerOf(_toad1) == msg.sender, "You don't own toad 1."); require(creatureToadzToken.ownerOf(_toad2) == msg.sender, "You don't own toad 2."); require(babyOfParent[_toad1] <= 0, "Toad 1 has already been bred."); require(babyOfParent[_toad2] <= 0, "Toad 2 has already been bred."); uint256 toadId = totalSupply() + 1; require(toadId <= maxSupply, "Max supply of BabyToadz already minted!"); babyOfParent[_toad1] = toadId; babyOfParent[_toad2] = toadId; parentsOfBaby[toadId] = Parents(_toad1, _toad2); _safeMint(msg.sender, toadId); } function hasBeenBred(uint256 toad) public view returns (bool) { return babyOfParent[toad] > 0; } function walletOfOwner(address _owner) public view returns (uint256[] memory) { uint256 ownerTokenCount = balanceOf(_owner); uint256[] memory tokenIds = new uint256[](ownerTokenCount); for (uint256 i; i < ownerTokenCount; i++) { tokenIds[i] = tokenOfOwnerByIndex(_owner, i); } return tokenIds; } function setBaseURI(string memory _newBaseURI) public onlyOwner { baseURI = _newBaseURI; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_initBaseURI","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":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"babyOfParent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"baby","type":"uint256"}],"name":"burnBaby","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_toad1","type":"uint256"},{"internalType":"uint256","name":"_toad2","type":"uint256"}],"name":"devMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"toad","type":"uint256"}],"name":"hasBeenBred","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isBurningAllowed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isMintingOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_toad1","type":"uint256"},{"internalType":"uint256","name":"_toad2","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"parentsOfBaby","outputs":[{"internalType":"uint256","name":"top","type":"uint256"},{"internalType":"uint256","name":"bottom","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"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":"bool","name":"isAllowed","type":"bool"}],"name":"toggleBurning","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"isOpen","type":"bool"}],"name":"toggleMinting","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
608060405273a4631a191044096834ce65d1ee86b16b171d8080600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600b60146101000a81548160ff0219169083151502179055506000600b60156101000a81548160ff0219169083151502179055503480156200009c57600080fd5b5060405162005025380380620050258339818101604052810190620000c291906200046b565b6040518060400160405280600981526020017f42616279546f61647a00000000000000000000000000000000000000000000008152506040518060400160405280600981526020017f534d4f4c43524f414b00000000000000000000000000000000000000000000008152508160009080519060200190620001469291906200033d565b5080600190805190602001906200015f9291906200033d565b50505062000182620001766200019a60201b60201c565b620001a260201b60201c565b62000193816200026860201b60201c565b50620006c3565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620002786200019a60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200029e6200031360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620002f7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002ee90620004e3565b60405180910390fd5b80600c90805190602001906200030f9291906200033d565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b8280546200034b90620005ab565b90600052602060002090601f0160209004810192826200036f5760008555620003bb565b82601f106200038a57805160ff1916838001178555620003bb565b82800160010185558215620003bb579182015b82811115620003ba5782518255916020019190600101906200039d565b5b509050620003ca9190620003ce565b5090565b5b80821115620003e9576000816000905550600101620003cf565b5090565b600062000404620003fe846200052e565b62000505565b9050828152602081018484840111156200042357620004226200067a565b5b6200043084828562000575565b509392505050565b600082601f83011262000450576200044f62000675565b5b815162000462848260208601620003ed565b91505092915050565b60006020828403121562000484576200048362000684565b5b600082015167ffffffffffffffff811115620004a557620004a46200067f565b5b620004b38482850162000438565b91505092915050565b6000620004cb60208362000564565b9150620004d8826200069a565b602082019050919050565b60006020820190508181036000830152620004fe81620004bc565b9050919050565b60006200051162000524565b90506200051f8282620005e1565b919050565b6000604051905090565b600067ffffffffffffffff8211156200054c576200054b62000646565b5b620005578262000689565b9050602081019050919050565b600082825260208201905092915050565b60005b838110156200059557808201518184015260208101905062000578565b83811115620005a5576000848401525b50505050565b60006002820490506001821680620005c457607f821691505b60208210811415620005db57620005da62000617565b5b50919050565b620005ec8262000689565b810181811067ffffffffffffffff821117156200060e576200060d62000646565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b61495280620006d36000396000f3fe608060405234801561001057600080fd5b50600436106101fb5760003560e01c80636352211e1161011a578063a5b985a2116100ad578063d5abeb011161007c578063d5abeb01146105d2578063d76f44b6146105f0578063e76af32e14610621578063e985e9c51461063f578063f2fde38b1461066f576101fb565b8063a5b985a21461054e578063b7f68b7f1461056a578063b88d4fde14610586578063c87b56dd146105a2576101fb565b80638da5cb5b116100e95780638da5cb5b146104da5780638f2199fa146104f857806395d89b4114610514578063a22cb46514610532576101fb565b80636352211e146104525780636c0360eb1461048257806370a08231146104a0578063715018a6146104d0576101fb565b806321775c921161019257806342842e0e1161016157806342842e0e146103ba578063438b6300146103d65780634f6ccce71461040657806355f804b314610436576101fb565b806321775c921461032257806323b872dd1461033e5780632f745c591461035a5780633501b67f1461038a576101fb565b80630998eb41116101ce5780630998eb411461029a57806318160ddd146102ca5780631a206910146102e85780631b2ef1ca14610306576101fb565b806301ffc9a71461020057806306fdde0314610230578063081812fc1461024e578063095ea7b31461027e575b600080fd5b61021a60048036038101906102159190613293565b61068b565b6040516102279190613979565b60405180910390f35b610238610705565b6040516102459190613994565b60405180910390f35b61026860048036038101906102639190613336565b610797565b60405161027591906138f0565b60405180910390f35b61029860048036038101906102939190613226565b61081c565b005b6102b460048036038101906102af9190613336565b610934565b6040516102c19190613979565b60405180910390f35b6102d2610953565b6040516102df9190613d36565b60405180910390f35b6102f0610960565b6040516102fd9190613979565b60405180910390f35b610320600480360381019061031b9190613363565b610973565b005b61033c60048036038101906103379190613266565b610d5f565b005b61035860048036038101906103539190613110565b610df8565b005b610374600480360381019061036f9190613226565b610e58565b6040516103819190613d36565b60405180910390f35b6103a4600480360381019061039f9190613336565b610efd565b6040516103b19190613d36565b60405180910390f35b6103d460048036038101906103cf9190613110565b610f15565b005b6103f060048036038101906103eb9190613076565b610f35565b6040516103fd9190613957565b60405180910390f35b610420600480360381019061041b9190613336565b610fe3565b60405161042d9190613d36565b60405180910390f35b610450600480360381019061044b91906132ed565b611054565b005b61046c60048036038101906104679190613336565b6110ea565b60405161047991906138f0565b60405180910390f35b61048a61119c565b6040516104979190613994565b60405180910390f35b6104ba60048036038101906104b59190613076565b61122a565b6040516104c79190613d36565b60405180910390f35b6104d86112e2565b005b6104e261136a565b6040516104ef91906138f0565b60405180910390f35b610512600480360381019061050d9190613336565b611394565b005b61051c611465565b6040516105299190613994565b60405180910390f35b61054c600480360381019061054791906131e6565b6114f7565b005b61056860048036038101906105639190613363565b611678565b005b610584600480360381019061057f9190613266565b611921565b005b6105a0600480360381019061059b9190613163565b6119ba565b005b6105bc60048036038101906105b79190613336565b611a1c565b6040516105c99190613994565b60405180910390f35b6105da611ac3565b6040516105e79190613d36565b60405180910390f35b61060a60048036038101906106059190613336565b611ac9565b604051610618929190613d51565b60405180910390f35b610629611aed565b6040516106369190613979565b60405180910390f35b610659600480360381019061065491906130d0565b611b00565b6040516106669190613979565b60405180910390f35b61068960048036038101906106849190613076565b611b94565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806106fe57506106fd82611c8c565b5b9050919050565b60606000805461071490613fee565b80601f016020809104026020016040519081016040528092919081815260200182805461074090613fee565b801561078d5780601f106107625761010080835404028352916020019161078d565b820191906000526020600020905b81548152906001019060200180831161077057829003601f168201915b5050505050905090565b60006107a282611d6e565b6107e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107d890613bb6565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610827826110ea565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610898576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161088f90613c76565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166108b7611dda565b73ffffffffffffffffffffffffffffffffffffffff1614806108e657506108e5816108e0611dda565b611b00565b5b610925576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161091c90613b36565b60405180910390fd5b61092f8383611de2565b505050565b600080600d600084815260200190815260200160002054119050919050565b6000600880549050905090565b600b60149054906101000a900460ff1681565b600b60149054906101000a900460ff166109c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109b990613cb6565b60405180910390fd5b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16636352211e856040518263ffffffff1660e01b8152600401610a399190613d36565b60206040518083038186803b158015610a5157600080fd5b505afa158015610a65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a8991906130a3565b73ffffffffffffffffffffffffffffffffffffffff1614610adf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad690613cf6565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b8152600401610b2f9190613d36565b60206040518083038186803b158015610b4757600080fd5b505afa158015610b5b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b7f91906130a3565b73ffffffffffffffffffffffffffffffffffffffff1614610bd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bcc90613a16565b60405180910390fd5b6000600d6000858152602001908152602001600020541115610c2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2390613c16565b60405180910390fd5b6000600d6000848152602001908152602001600020541115610c83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7a90613af6565b60405180910390fd5b60006001610c8f610953565b610c999190613e7d565b905061115c811115610ce0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd790613a56565b60405180910390fd5b80600d60008681526020019081526020016000208190555080600d600085815260200190815260200160002081905550604051806040016040528085815260200184815250600e60008381526020019081526020016000206000820151816000015560208201518160010155905050610d593382611e9b565b50505050565b610d67611dda565b73ffffffffffffffffffffffffffffffffffffffff16610d8561136a565b73ffffffffffffffffffffffffffffffffffffffff1614610ddb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd290613bd6565b60405180910390fd5b80600b60146101000a81548160ff02191690831515021790555050565b610e09610e03611dda565b82611eb9565b610e48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3f90613c96565b60405180910390fd5b610e53838383611f97565b505050565b6000610e638361122a565b8210610ea4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9b906139b6565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b600d6020528060005260406000206000915090505481565b610f30838383604051806020016040528060008152506119ba565b505050565b60606000610f428361122a565b905060008167ffffffffffffffff811115610f6057610f5f6141b6565b5b604051908082528060200260200182016040528015610f8e5781602001602082028036833780820191505090505b50905060005b82811015610fd857610fa68582610e58565b828281518110610fb957610fb8614187565b5b6020026020010181815250508080610fd090614051565b915050610f94565b508092505050919050565b6000610fed610953565b821061102e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102590613cd6565b60405180910390fd5b6008828154811061104257611041614187565b5b90600052602060002001549050919050565b61105c611dda565b73ffffffffffffffffffffffffffffffffffffffff1661107a61136a565b73ffffffffffffffffffffffffffffffffffffffff16146110d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c790613bd6565b60405180910390fd5b80600c90805190602001906110e6929190612e75565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611193576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118a90613b76565b60405180910390fd5b80915050919050565b600c80546111a990613fee565b80601f01602080910402602001604051908101604052809291908181526020018280546111d590613fee565b80156112225780601f106111f757610100808354040283529160200191611222565b820191906000526020600020905b81548152906001019060200180831161120557829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561129b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129290613b56565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6112ea611dda565b73ffffffffffffffffffffffffffffffffffffffff1661130861136a565b73ffffffffffffffffffffffffffffffffffffffff161461135e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135590613bd6565b60405180910390fd5b61136860006121f3565b565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600b60159054906101000a900460ff166113e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113da90613c56565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff16611403826110ea565b73ffffffffffffffffffffffffffffffffffffffff1614611459576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145090613a96565b60405180910390fd5b611462816122b9565b50565b60606001805461147490613fee565b80601f01602080910402602001604051908101604052809291908181526020018280546114a090613fee565b80156114ed5780601f106114c2576101008083540402835291602001916114ed565b820191906000526020600020905b8154815290600101906020018083116114d057829003601f168201915b5050505050905090565b6114ff611dda565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561156d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156490613ad6565b60405180910390fd5b806005600061157a611dda565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611627611dda565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161166c9190613979565b60405180910390a35050565b611680611dda565b73ffffffffffffffffffffffffffffffffffffffff1661169e61136a565b73ffffffffffffffffffffffffffffffffffffffff16146116f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116eb90613bd6565b60405180910390fd5b6000821015801561170757506122b88211155b611746576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173d90613d16565b60405180910390fd5b6000811015801561175957506122b88111155b611798576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178f90613a76565b60405180910390fd5b6000600d60008481526020019081526020016000205411156117ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e690613c16565b60405180910390fd5b6000600d6000838152602001908152602001600020541115611846576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183d90613af6565b60405180910390fd5b60006001611852610953565b61185c9190613e7d565b905061115c8111156118a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189a90613a56565b60405180910390fd5b80600d60008581526020019081526020016000208190555080600d600084815260200190815260200160002081905550604051806040016040528084815260200183815250600e6000838152602001908152602001600020600082015181600001556020820151816001015590505061191c3382611e9b565b505050565b611929611dda565b73ffffffffffffffffffffffffffffffffffffffff1661194761136a565b73ffffffffffffffffffffffffffffffffffffffff161461199d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199490613bd6565b60405180910390fd5b80600b60156101000a81548160ff02191690831515021790555050565b6119cb6119c5611dda565b83611eb9565b611a0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0190613c96565b60405180910390fd5b611a16848484846123ca565b50505050565b6060611a2782611d6e565b611a66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5d90613c36565b60405180910390fd5b6000611a70612426565b90506000815111611a905760405180602001604052806000815250611abb565b80611a9a846124b8565b604051602001611aab9291906138cc565b6040516020818303038152906040525b915050919050565b61115c81565b600e6020528060005260406000206000915090508060000154908060010154905082565b600b60159054906101000a900460ff1681565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611b9c611dda565b73ffffffffffffffffffffffffffffffffffffffff16611bba61136a565b73ffffffffffffffffffffffffffffffffffffffff1614611c10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0790613bd6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611c80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c77906139f6565b60405180910390fd5b611c89816121f3565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611d5757507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611d675750611d6682612619565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611e55836110ea565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b611eb5828260405180602001604052806000815250612683565b5050565b6000611ec482611d6e565b611f03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611efa90613b16565b60405180910390fd5b6000611f0e836110ea565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611f7d57508373ffffffffffffffffffffffffffffffffffffffff16611f6584610797565b73ffffffffffffffffffffffffffffffffffffffff16145b80611f8e5750611f8d8185611b00565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611fb7826110ea565b73ffffffffffffffffffffffffffffffffffffffff161461200d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200490613bf6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561207d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207490613ab6565b60405180910390fd5b6120888383836126de565b612093600082611de2565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546120e39190613f04565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461213a9190613e7d565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006122c4826110ea565b90506122d2816000846126de565b6122dd600083611de2565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461232d9190613f04565b925050819055506002600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6123d5848484611f97565b6123e1848484846127f2565b612420576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612417906139d6565b60405180910390fd5b50505050565b6060600c805461243590613fee565b80601f016020809104026020016040519081016040528092919081815260200182805461246190613fee565b80156124ae5780601f10612483576101008083540402835291602001916124ae565b820191906000526020600020905b81548152906001019060200180831161249157829003601f168201915b5050505050905090565b60606000821415612500576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612614565b600082905060005b6000821461253257808061251b90614051565b915050600a8261252b9190613ed3565b9150612508565b60008167ffffffffffffffff81111561254e5761254d6141b6565b5b6040519080825280601f01601f1916602001820160405280156125805781602001600182028036833780820191505090505b5090505b6000851461260d576001826125999190613f04565b9150600a856125a8919061409a565b60306125b49190613e7d565b60f81b8183815181106125ca576125c9614187565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856126069190613ed3565b9450612584565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61268d8383612989565b61269a60008484846127f2565b6126d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126d0906139d6565b60405180910390fd5b505050565b6126e9838383612b57565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561272c5761272781612b5c565b61276b565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461276a576127698382612ba5565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156127ae576127a981612d12565b6127ed565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146127ec576127eb8282612de3565b5b5b505050565b60006128138473ffffffffffffffffffffffffffffffffffffffff16612e62565b1561297c578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261283c611dda565b8786866040518563ffffffff1660e01b815260040161285e949392919061390b565b602060405180830381600087803b15801561287857600080fd5b505af19250505080156128a957506040513d601f19601f820116820180604052508101906128a691906132c0565b60015b61292c573d80600081146128d9576040519150601f19603f3d011682016040523d82523d6000602084013e6128de565b606091505b50600081511415612924576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161291b906139d6565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612981565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156129f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129f090613b96565b60405180910390fd5b612a0281611d6e565b15612a42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a3990613a36565b60405180910390fd5b612a4e600083836126de565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612a9e9190613e7d565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612bb28461122a565b612bbc9190613f04565b9050600060076000848152602001908152602001600020549050818114612ca1576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612d269190613f04565b9050600060096000848152602001908152602001600020549050600060088381548110612d5657612d55614187565b5b906000526020600020015490508060088381548110612d7857612d77614187565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612dc757612dc6614158565b5b6001900381819060005260206000200160009055905550505050565b6000612dee8361122a565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600080823b905060008111915050919050565b828054612e8190613fee565b90600052602060002090601f016020900481019282612ea35760008555612eea565b82601f10612ebc57805160ff1916838001178555612eea565b82800160010185558215612eea579182015b82811115612ee9578251825591602001919060010190612ece565b5b509050612ef79190612efb565b5090565b5b80821115612f14576000816000905550600101612efc565b5090565b6000612f2b612f2684613d9f565b613d7a565b905082815260208101848484011115612f4757612f466141ea565b5b612f52848285613fac565b509392505050565b6000612f6d612f6884613dd0565b613d7a565b905082815260208101848484011115612f8957612f886141ea565b5b612f94848285613fac565b509392505050565b600081359050612fab816148c0565b92915050565b600081519050612fc0816148c0565b92915050565b600081359050612fd5816148d7565b92915050565b600081359050612fea816148ee565b92915050565b600081519050612fff816148ee565b92915050565b600082601f83011261301a576130196141e5565b5b813561302a848260208601612f18565b91505092915050565b600082601f830112613048576130476141e5565b5b8135613058848260208601612f5a565b91505092915050565b60008135905061307081614905565b92915050565b60006020828403121561308c5761308b6141f4565b5b600061309a84828501612f9c565b91505092915050565b6000602082840312156130b9576130b86141f4565b5b60006130c784828501612fb1565b91505092915050565b600080604083850312156130e7576130e66141f4565b5b60006130f585828601612f9c565b925050602061310685828601612f9c565b9150509250929050565b600080600060608486031215613129576131286141f4565b5b600061313786828701612f9c565b935050602061314886828701612f9c565b925050604061315986828701613061565b9150509250925092565b6000806000806080858703121561317d5761317c6141f4565b5b600061318b87828801612f9c565b945050602061319c87828801612f9c565b93505060406131ad87828801613061565b925050606085013567ffffffffffffffff8111156131ce576131cd6141ef565b5b6131da87828801613005565b91505092959194509250565b600080604083850312156131fd576131fc6141f4565b5b600061320b85828601612f9c565b925050602061321c85828601612fc6565b9150509250929050565b6000806040838503121561323d5761323c6141f4565b5b600061324b85828601612f9c565b925050602061325c85828601613061565b9150509250929050565b60006020828403121561327c5761327b6141f4565b5b600061328a84828501612fc6565b91505092915050565b6000602082840312156132a9576132a86141f4565b5b60006132b784828501612fdb565b91505092915050565b6000602082840312156132d6576132d56141f4565b5b60006132e484828501612ff0565b91505092915050565b600060208284031215613303576133026141f4565b5b600082013567ffffffffffffffff811115613321576133206141ef565b5b61332d84828501613033565b91505092915050565b60006020828403121561334c5761334b6141f4565b5b600061335a84828501613061565b91505092915050565b6000806040838503121561337a576133796141f4565b5b600061338885828601613061565b925050602061339985828601613061565b9150509250929050565b60006133af83836138ae565b60208301905092915050565b6133c481613f38565b82525050565b60006133d582613e11565b6133df8185613e3f565b93506133ea83613e01565b8060005b8381101561341b57815161340288826133a3565b975061340d83613e32565b9250506001810190506133ee565b5085935050505092915050565b61343181613f4a565b82525050565b600061344282613e1c565b61344c8185613e50565b935061345c818560208601613fbb565b613465816141f9565b840191505092915050565b600061347b82613e27565b6134858185613e61565b9350613495818560208601613fbb565b61349e816141f9565b840191505092915050565b60006134b482613e27565b6134be8185613e72565b93506134ce818560208601613fbb565b80840191505092915050565b60006134e7602b83613e61565b91506134f28261420a565b604082019050919050565b600061350a603283613e61565b915061351582614259565b604082019050919050565b600061352d602683613e61565b9150613538826142a8565b604082019050919050565b6000613550601583613e61565b915061355b826142f7565b602082019050919050565b6000613573601c83613e61565b915061357e82614320565b602082019050919050565b6000613596602783613e61565b91506135a182614349565b604082019050919050565b60006135b9601483613e61565b91506135c482614398565b602082019050919050565b60006135dc601883613e61565b91506135e7826143c1565b602082019050919050565b60006135ff602483613e61565b915061360a826143ea565b604082019050919050565b6000613622601983613e61565b915061362d82614439565b602082019050919050565b6000613645601d83613e61565b915061365082614462565b602082019050919050565b6000613668602c83613e61565b91506136738261448b565b604082019050919050565b600061368b603883613e61565b9150613696826144da565b604082019050919050565b60006136ae602a83613e61565b91506136b982614529565b604082019050919050565b60006136d1602983613e61565b91506136dc82614578565b604082019050919050565b60006136f4602083613e61565b91506136ff826145c7565b602082019050919050565b6000613717602c83613e61565b9150613722826145f0565b604082019050919050565b600061373a602083613e61565b91506137458261463f565b602082019050919050565b600061375d602983613e61565b915061376882614668565b604082019050919050565b6000613780601d83613e61565b915061378b826146b7565b602082019050919050565b60006137a3602f83613e61565b91506137ae826146e0565b604082019050919050565b60006137c6601783613e61565b91506137d18261472f565b602082019050919050565b60006137e9602183613e61565b91506137f482614758565b604082019050919050565b600061380c603183613e61565b9150613817826147a7565b604082019050919050565b600061382f601483613e61565b915061383a826147f6565b602082019050919050565b6000613852602c83613e61565b915061385d8261481f565b604082019050919050565b6000613875601583613e61565b91506138808261486e565b602082019050919050565b6000613898601483613e61565b91506138a382614897565b602082019050919050565b6138b781613fa2565b82525050565b6138c681613fa2565b82525050565b60006138d882856134a9565b91506138e482846134a9565b91508190509392505050565b600060208201905061390560008301846133bb565b92915050565b600060808201905061392060008301876133bb565b61392d60208301866133bb565b61393a60408301856138bd565b818103606083015261394c8184613437565b905095945050505050565b6000602082019050818103600083015261397181846133ca565b905092915050565b600060208201905061398e6000830184613428565b92915050565b600060208201905081810360008301526139ae8184613470565b905092915050565b600060208201905081810360008301526139cf816134da565b9050919050565b600060208201905081810360008301526139ef816134fd565b9050919050565b60006020820190508181036000830152613a0f81613520565b9050919050565b60006020820190508181036000830152613a2f81613543565b9050919050565b60006020820190508181036000830152613a4f81613566565b9050919050565b60006020820190508181036000830152613a6f81613589565b9050919050565b60006020820190508181036000830152613a8f816135ac565b9050919050565b60006020820190508181036000830152613aaf816135cf565b9050919050565b60006020820190508181036000830152613acf816135f2565b9050919050565b60006020820190508181036000830152613aef81613615565b9050919050565b60006020820190508181036000830152613b0f81613638565b9050919050565b60006020820190508181036000830152613b2f8161365b565b9050919050565b60006020820190508181036000830152613b4f8161367e565b9050919050565b60006020820190508181036000830152613b6f816136a1565b9050919050565b60006020820190508181036000830152613b8f816136c4565b9050919050565b60006020820190508181036000830152613baf816136e7565b9050919050565b60006020820190508181036000830152613bcf8161370a565b9050919050565b60006020820190508181036000830152613bef8161372d565b9050919050565b60006020820190508181036000830152613c0f81613750565b9050919050565b60006020820190508181036000830152613c2f81613773565b9050919050565b60006020820190508181036000830152613c4f81613796565b9050919050565b60006020820190508181036000830152613c6f816137b9565b9050919050565b60006020820190508181036000830152613c8f816137dc565b9050919050565b60006020820190508181036000830152613caf816137ff565b9050919050565b60006020820190508181036000830152613ccf81613822565b9050919050565b60006020820190508181036000830152613cef81613845565b9050919050565b60006020820190508181036000830152613d0f81613868565b9050919050565b60006020820190508181036000830152613d2f8161388b565b9050919050565b6000602082019050613d4b60008301846138bd565b92915050565b6000604082019050613d6660008301856138bd565b613d7360208301846138bd565b9392505050565b6000613d84613d95565b9050613d908282614020565b919050565b6000604051905090565b600067ffffffffffffffff821115613dba57613db96141b6565b5b613dc3826141f9565b9050602081019050919050565b600067ffffffffffffffff821115613deb57613dea6141b6565b5b613df4826141f9565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613e8882613fa2565b9150613e9383613fa2565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613ec857613ec76140cb565b5b828201905092915050565b6000613ede82613fa2565b9150613ee983613fa2565b925082613ef957613ef86140fa565b5b828204905092915050565b6000613f0f82613fa2565b9150613f1a83613fa2565b925082821015613f2d57613f2c6140cb565b5b828203905092915050565b6000613f4382613f82565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613fd9578082015181840152602081019050613fbe565b83811115613fe8576000848401525b50505050565b6000600282049050600182168061400657607f821691505b6020821081141561401a57614019614129565b5b50919050565b614029826141f9565b810181811067ffffffffffffffff82111715614048576140476141b6565b5b80604052505050565b600061405c82613fa2565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561408f5761408e6140cb565b5b600182019050919050565b60006140a582613fa2565b91506140b083613fa2565b9250826140c0576140bf6140fa565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f596f7520646f6e2774206f776e20746f616420322e0000000000000000000000600082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4d617820737570706c79206f662042616279546f61647a20616c72656164792060008201527f6d696e7465642100000000000000000000000000000000000000000000000000602082015250565b7f546f61642032206973206e6f742076616c69642e000000000000000000000000600082015250565b7f596f7520646f6e2774206f776e207468697320626162792e0000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f546f616420322068617320616c7265616479206265656e20627265642e000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f546f616420312068617320616c7265616479206265656e20627265642e000000600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4275726e696e67206973206e6f7420616c6c6f7765642e000000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f4d696e74696e67206973206e6f74206f70656e2e000000000000000000000000600082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f596f7520646f6e2774206f776e20746f616420312e0000000000000000000000600082015250565b7f546f61642031206973206e6f742076616c69642e000000000000000000000000600082015250565b6148c981613f38565b81146148d457600080fd5b50565b6148e081613f4a565b81146148eb57600080fd5b50565b6148f781613f56565b811461490257600080fd5b50565b61490e81613fa2565b811461491957600080fd5b5056fea2646970667358221220ea27e77ce6c8a1f49aa2a50797db5be0df0f8bb814c858c202e986707b9d414064736f6c634300080700330000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002768747470733a2f2f7777772e6372656174757265746f61647a2e636f6d2f6170692f626162792f00000000000000000000000000000000000000000000000000
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101fb5760003560e01c80636352211e1161011a578063a5b985a2116100ad578063d5abeb011161007c578063d5abeb01146105d2578063d76f44b6146105f0578063e76af32e14610621578063e985e9c51461063f578063f2fde38b1461066f576101fb565b8063a5b985a21461054e578063b7f68b7f1461056a578063b88d4fde14610586578063c87b56dd146105a2576101fb565b80638da5cb5b116100e95780638da5cb5b146104da5780638f2199fa146104f857806395d89b4114610514578063a22cb46514610532576101fb565b80636352211e146104525780636c0360eb1461048257806370a08231146104a0578063715018a6146104d0576101fb565b806321775c921161019257806342842e0e1161016157806342842e0e146103ba578063438b6300146103d65780634f6ccce71461040657806355f804b314610436576101fb565b806321775c921461032257806323b872dd1461033e5780632f745c591461035a5780633501b67f1461038a576101fb565b80630998eb41116101ce5780630998eb411461029a57806318160ddd146102ca5780631a206910146102e85780631b2ef1ca14610306576101fb565b806301ffc9a71461020057806306fdde0314610230578063081812fc1461024e578063095ea7b31461027e575b600080fd5b61021a60048036038101906102159190613293565b61068b565b6040516102279190613979565b60405180910390f35b610238610705565b6040516102459190613994565b60405180910390f35b61026860048036038101906102639190613336565b610797565b60405161027591906138f0565b60405180910390f35b61029860048036038101906102939190613226565b61081c565b005b6102b460048036038101906102af9190613336565b610934565b6040516102c19190613979565b60405180910390f35b6102d2610953565b6040516102df9190613d36565b60405180910390f35b6102f0610960565b6040516102fd9190613979565b60405180910390f35b610320600480360381019061031b9190613363565b610973565b005b61033c60048036038101906103379190613266565b610d5f565b005b61035860048036038101906103539190613110565b610df8565b005b610374600480360381019061036f9190613226565b610e58565b6040516103819190613d36565b60405180910390f35b6103a4600480360381019061039f9190613336565b610efd565b6040516103b19190613d36565b60405180910390f35b6103d460048036038101906103cf9190613110565b610f15565b005b6103f060048036038101906103eb9190613076565b610f35565b6040516103fd9190613957565b60405180910390f35b610420600480360381019061041b9190613336565b610fe3565b60405161042d9190613d36565b60405180910390f35b610450600480360381019061044b91906132ed565b611054565b005b61046c60048036038101906104679190613336565b6110ea565b60405161047991906138f0565b60405180910390f35b61048a61119c565b6040516104979190613994565b60405180910390f35b6104ba60048036038101906104b59190613076565b61122a565b6040516104c79190613d36565b60405180910390f35b6104d86112e2565b005b6104e261136a565b6040516104ef91906138f0565b60405180910390f35b610512600480360381019061050d9190613336565b611394565b005b61051c611465565b6040516105299190613994565b60405180910390f35b61054c600480360381019061054791906131e6565b6114f7565b005b61056860048036038101906105639190613363565b611678565b005b610584600480360381019061057f9190613266565b611921565b005b6105a0600480360381019061059b9190613163565b6119ba565b005b6105bc60048036038101906105b79190613336565b611a1c565b6040516105c99190613994565b60405180910390f35b6105da611ac3565b6040516105e79190613d36565b60405180910390f35b61060a60048036038101906106059190613336565b611ac9565b604051610618929190613d51565b60405180910390f35b610629611aed565b6040516106369190613979565b60405180910390f35b610659600480360381019061065491906130d0565b611b00565b6040516106669190613979565b60405180910390f35b61068960048036038101906106849190613076565b611b94565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806106fe57506106fd82611c8c565b5b9050919050565b60606000805461071490613fee565b80601f016020809104026020016040519081016040528092919081815260200182805461074090613fee565b801561078d5780601f106107625761010080835404028352916020019161078d565b820191906000526020600020905b81548152906001019060200180831161077057829003601f168201915b5050505050905090565b60006107a282611d6e565b6107e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107d890613bb6565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610827826110ea565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610898576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161088f90613c76565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166108b7611dda565b73ffffffffffffffffffffffffffffffffffffffff1614806108e657506108e5816108e0611dda565b611b00565b5b610925576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161091c90613b36565b60405180910390fd5b61092f8383611de2565b505050565b600080600d600084815260200190815260200160002054119050919050565b6000600880549050905090565b600b60149054906101000a900460ff1681565b600b60149054906101000a900460ff166109c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109b990613cb6565b60405180910390fd5b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16636352211e856040518263ffffffff1660e01b8152600401610a399190613d36565b60206040518083038186803b158015610a5157600080fd5b505afa158015610a65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a8991906130a3565b73ffffffffffffffffffffffffffffffffffffffff1614610adf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad690613cf6565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b8152600401610b2f9190613d36565b60206040518083038186803b158015610b4757600080fd5b505afa158015610b5b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b7f91906130a3565b73ffffffffffffffffffffffffffffffffffffffff1614610bd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bcc90613a16565b60405180910390fd5b6000600d6000858152602001908152602001600020541115610c2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2390613c16565b60405180910390fd5b6000600d6000848152602001908152602001600020541115610c83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7a90613af6565b60405180910390fd5b60006001610c8f610953565b610c999190613e7d565b905061115c811115610ce0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd790613a56565b60405180910390fd5b80600d60008681526020019081526020016000208190555080600d600085815260200190815260200160002081905550604051806040016040528085815260200184815250600e60008381526020019081526020016000206000820151816000015560208201518160010155905050610d593382611e9b565b50505050565b610d67611dda565b73ffffffffffffffffffffffffffffffffffffffff16610d8561136a565b73ffffffffffffffffffffffffffffffffffffffff1614610ddb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd290613bd6565b60405180910390fd5b80600b60146101000a81548160ff02191690831515021790555050565b610e09610e03611dda565b82611eb9565b610e48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3f90613c96565b60405180910390fd5b610e53838383611f97565b505050565b6000610e638361122a565b8210610ea4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9b906139b6565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b600d6020528060005260406000206000915090505481565b610f30838383604051806020016040528060008152506119ba565b505050565b60606000610f428361122a565b905060008167ffffffffffffffff811115610f6057610f5f6141b6565b5b604051908082528060200260200182016040528015610f8e5781602001602082028036833780820191505090505b50905060005b82811015610fd857610fa68582610e58565b828281518110610fb957610fb8614187565b5b6020026020010181815250508080610fd090614051565b915050610f94565b508092505050919050565b6000610fed610953565b821061102e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102590613cd6565b60405180910390fd5b6008828154811061104257611041614187565b5b90600052602060002001549050919050565b61105c611dda565b73ffffffffffffffffffffffffffffffffffffffff1661107a61136a565b73ffffffffffffffffffffffffffffffffffffffff16146110d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c790613bd6565b60405180910390fd5b80600c90805190602001906110e6929190612e75565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611193576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118a90613b76565b60405180910390fd5b80915050919050565b600c80546111a990613fee565b80601f01602080910402602001604051908101604052809291908181526020018280546111d590613fee565b80156112225780601f106111f757610100808354040283529160200191611222565b820191906000526020600020905b81548152906001019060200180831161120557829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561129b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129290613b56565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6112ea611dda565b73ffffffffffffffffffffffffffffffffffffffff1661130861136a565b73ffffffffffffffffffffffffffffffffffffffff161461135e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135590613bd6565b60405180910390fd5b61136860006121f3565b565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600b60159054906101000a900460ff166113e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113da90613c56565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff16611403826110ea565b73ffffffffffffffffffffffffffffffffffffffff1614611459576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145090613a96565b60405180910390fd5b611462816122b9565b50565b60606001805461147490613fee565b80601f01602080910402602001604051908101604052809291908181526020018280546114a090613fee565b80156114ed5780601f106114c2576101008083540402835291602001916114ed565b820191906000526020600020905b8154815290600101906020018083116114d057829003601f168201915b5050505050905090565b6114ff611dda565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561156d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156490613ad6565b60405180910390fd5b806005600061157a611dda565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611627611dda565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161166c9190613979565b60405180910390a35050565b611680611dda565b73ffffffffffffffffffffffffffffffffffffffff1661169e61136a565b73ffffffffffffffffffffffffffffffffffffffff16146116f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116eb90613bd6565b60405180910390fd5b6000821015801561170757506122b88211155b611746576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173d90613d16565b60405180910390fd5b6000811015801561175957506122b88111155b611798576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178f90613a76565b60405180910390fd5b6000600d60008481526020019081526020016000205411156117ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e690613c16565b60405180910390fd5b6000600d6000838152602001908152602001600020541115611846576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183d90613af6565b60405180910390fd5b60006001611852610953565b61185c9190613e7d565b905061115c8111156118a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189a90613a56565b60405180910390fd5b80600d60008581526020019081526020016000208190555080600d600084815260200190815260200160002081905550604051806040016040528084815260200183815250600e6000838152602001908152602001600020600082015181600001556020820151816001015590505061191c3382611e9b565b505050565b611929611dda565b73ffffffffffffffffffffffffffffffffffffffff1661194761136a565b73ffffffffffffffffffffffffffffffffffffffff161461199d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199490613bd6565b60405180910390fd5b80600b60156101000a81548160ff02191690831515021790555050565b6119cb6119c5611dda565b83611eb9565b611a0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0190613c96565b60405180910390fd5b611a16848484846123ca565b50505050565b6060611a2782611d6e565b611a66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5d90613c36565b60405180910390fd5b6000611a70612426565b90506000815111611a905760405180602001604052806000815250611abb565b80611a9a846124b8565b604051602001611aab9291906138cc565b6040516020818303038152906040525b915050919050565b61115c81565b600e6020528060005260406000206000915090508060000154908060010154905082565b600b60159054906101000a900460ff1681565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611b9c611dda565b73ffffffffffffffffffffffffffffffffffffffff16611bba61136a565b73ffffffffffffffffffffffffffffffffffffffff1614611c10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0790613bd6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611c80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c77906139f6565b60405180910390fd5b611c89816121f3565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611d5757507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611d675750611d6682612619565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611e55836110ea565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b611eb5828260405180602001604052806000815250612683565b5050565b6000611ec482611d6e565b611f03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611efa90613b16565b60405180910390fd5b6000611f0e836110ea565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611f7d57508373ffffffffffffffffffffffffffffffffffffffff16611f6584610797565b73ffffffffffffffffffffffffffffffffffffffff16145b80611f8e5750611f8d8185611b00565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611fb7826110ea565b73ffffffffffffffffffffffffffffffffffffffff161461200d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200490613bf6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561207d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207490613ab6565b60405180910390fd5b6120888383836126de565b612093600082611de2565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546120e39190613f04565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461213a9190613e7d565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006122c4826110ea565b90506122d2816000846126de565b6122dd600083611de2565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461232d9190613f04565b925050819055506002600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6123d5848484611f97565b6123e1848484846127f2565b612420576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612417906139d6565b60405180910390fd5b50505050565b6060600c805461243590613fee565b80601f016020809104026020016040519081016040528092919081815260200182805461246190613fee565b80156124ae5780601f10612483576101008083540402835291602001916124ae565b820191906000526020600020905b81548152906001019060200180831161249157829003601f168201915b5050505050905090565b60606000821415612500576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612614565b600082905060005b6000821461253257808061251b90614051565b915050600a8261252b9190613ed3565b9150612508565b60008167ffffffffffffffff81111561254e5761254d6141b6565b5b6040519080825280601f01601f1916602001820160405280156125805781602001600182028036833780820191505090505b5090505b6000851461260d576001826125999190613f04565b9150600a856125a8919061409a565b60306125b49190613e7d565b60f81b8183815181106125ca576125c9614187565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856126069190613ed3565b9450612584565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61268d8383612989565b61269a60008484846127f2565b6126d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126d0906139d6565b60405180910390fd5b505050565b6126e9838383612b57565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561272c5761272781612b5c565b61276b565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461276a576127698382612ba5565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156127ae576127a981612d12565b6127ed565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146127ec576127eb8282612de3565b5b5b505050565b60006128138473ffffffffffffffffffffffffffffffffffffffff16612e62565b1561297c578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261283c611dda565b8786866040518563ffffffff1660e01b815260040161285e949392919061390b565b602060405180830381600087803b15801561287857600080fd5b505af19250505080156128a957506040513d601f19601f820116820180604052508101906128a691906132c0565b60015b61292c573d80600081146128d9576040519150601f19603f3d011682016040523d82523d6000602084013e6128de565b606091505b50600081511415612924576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161291b906139d6565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612981565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156129f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129f090613b96565b60405180910390fd5b612a0281611d6e565b15612a42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a3990613a36565b60405180910390fd5b612a4e600083836126de565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612a9e9190613e7d565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612bb28461122a565b612bbc9190613f04565b9050600060076000848152602001908152602001600020549050818114612ca1576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612d269190613f04565b9050600060096000848152602001908152602001600020549050600060088381548110612d5657612d55614187565b5b906000526020600020015490508060088381548110612d7857612d77614187565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612dc757612dc6614158565b5b6001900381819060005260206000200160009055905550505050565b6000612dee8361122a565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600080823b905060008111915050919050565b828054612e8190613fee565b90600052602060002090601f016020900481019282612ea35760008555612eea565b82601f10612ebc57805160ff1916838001178555612eea565b82800160010185558215612eea579182015b82811115612ee9578251825591602001919060010190612ece565b5b509050612ef79190612efb565b5090565b5b80821115612f14576000816000905550600101612efc565b5090565b6000612f2b612f2684613d9f565b613d7a565b905082815260208101848484011115612f4757612f466141ea565b5b612f52848285613fac565b509392505050565b6000612f6d612f6884613dd0565b613d7a565b905082815260208101848484011115612f8957612f886141ea565b5b612f94848285613fac565b509392505050565b600081359050612fab816148c0565b92915050565b600081519050612fc0816148c0565b92915050565b600081359050612fd5816148d7565b92915050565b600081359050612fea816148ee565b92915050565b600081519050612fff816148ee565b92915050565b600082601f83011261301a576130196141e5565b5b813561302a848260208601612f18565b91505092915050565b600082601f830112613048576130476141e5565b5b8135613058848260208601612f5a565b91505092915050565b60008135905061307081614905565b92915050565b60006020828403121561308c5761308b6141f4565b5b600061309a84828501612f9c565b91505092915050565b6000602082840312156130b9576130b86141f4565b5b60006130c784828501612fb1565b91505092915050565b600080604083850312156130e7576130e66141f4565b5b60006130f585828601612f9c565b925050602061310685828601612f9c565b9150509250929050565b600080600060608486031215613129576131286141f4565b5b600061313786828701612f9c565b935050602061314886828701612f9c565b925050604061315986828701613061565b9150509250925092565b6000806000806080858703121561317d5761317c6141f4565b5b600061318b87828801612f9c565b945050602061319c87828801612f9c565b93505060406131ad87828801613061565b925050606085013567ffffffffffffffff8111156131ce576131cd6141ef565b5b6131da87828801613005565b91505092959194509250565b600080604083850312156131fd576131fc6141f4565b5b600061320b85828601612f9c565b925050602061321c85828601612fc6565b9150509250929050565b6000806040838503121561323d5761323c6141f4565b5b600061324b85828601612f9c565b925050602061325c85828601613061565b9150509250929050565b60006020828403121561327c5761327b6141f4565b5b600061328a84828501612fc6565b91505092915050565b6000602082840312156132a9576132a86141f4565b5b60006132b784828501612fdb565b91505092915050565b6000602082840312156132d6576132d56141f4565b5b60006132e484828501612ff0565b91505092915050565b600060208284031215613303576133026141f4565b5b600082013567ffffffffffffffff811115613321576133206141ef565b5b61332d84828501613033565b91505092915050565b60006020828403121561334c5761334b6141f4565b5b600061335a84828501613061565b91505092915050565b6000806040838503121561337a576133796141f4565b5b600061338885828601613061565b925050602061339985828601613061565b9150509250929050565b60006133af83836138ae565b60208301905092915050565b6133c481613f38565b82525050565b60006133d582613e11565b6133df8185613e3f565b93506133ea83613e01565b8060005b8381101561341b57815161340288826133a3565b975061340d83613e32565b9250506001810190506133ee565b5085935050505092915050565b61343181613f4a565b82525050565b600061344282613e1c565b61344c8185613e50565b935061345c818560208601613fbb565b613465816141f9565b840191505092915050565b600061347b82613e27565b6134858185613e61565b9350613495818560208601613fbb565b61349e816141f9565b840191505092915050565b60006134b482613e27565b6134be8185613e72565b93506134ce818560208601613fbb565b80840191505092915050565b60006134e7602b83613e61565b91506134f28261420a565b604082019050919050565b600061350a603283613e61565b915061351582614259565b604082019050919050565b600061352d602683613e61565b9150613538826142a8565b604082019050919050565b6000613550601583613e61565b915061355b826142f7565b602082019050919050565b6000613573601c83613e61565b915061357e82614320565b602082019050919050565b6000613596602783613e61565b91506135a182614349565b604082019050919050565b60006135b9601483613e61565b91506135c482614398565b602082019050919050565b60006135dc601883613e61565b91506135e7826143c1565b602082019050919050565b60006135ff602483613e61565b915061360a826143ea565b604082019050919050565b6000613622601983613e61565b915061362d82614439565b602082019050919050565b6000613645601d83613e61565b915061365082614462565b602082019050919050565b6000613668602c83613e61565b91506136738261448b565b604082019050919050565b600061368b603883613e61565b9150613696826144da565b604082019050919050565b60006136ae602a83613e61565b91506136b982614529565b604082019050919050565b60006136d1602983613e61565b91506136dc82614578565b604082019050919050565b60006136f4602083613e61565b91506136ff826145c7565b602082019050919050565b6000613717602c83613e61565b9150613722826145f0565b604082019050919050565b600061373a602083613e61565b91506137458261463f565b602082019050919050565b600061375d602983613e61565b915061376882614668565b604082019050919050565b6000613780601d83613e61565b915061378b826146b7565b602082019050919050565b60006137a3602f83613e61565b91506137ae826146e0565b604082019050919050565b60006137c6601783613e61565b91506137d18261472f565b602082019050919050565b60006137e9602183613e61565b91506137f482614758565b604082019050919050565b600061380c603183613e61565b9150613817826147a7565b604082019050919050565b600061382f601483613e61565b915061383a826147f6565b602082019050919050565b6000613852602c83613e61565b915061385d8261481f565b604082019050919050565b6000613875601583613e61565b91506138808261486e565b602082019050919050565b6000613898601483613e61565b91506138a382614897565b602082019050919050565b6138b781613fa2565b82525050565b6138c681613fa2565b82525050565b60006138d882856134a9565b91506138e482846134a9565b91508190509392505050565b600060208201905061390560008301846133bb565b92915050565b600060808201905061392060008301876133bb565b61392d60208301866133bb565b61393a60408301856138bd565b818103606083015261394c8184613437565b905095945050505050565b6000602082019050818103600083015261397181846133ca565b905092915050565b600060208201905061398e6000830184613428565b92915050565b600060208201905081810360008301526139ae8184613470565b905092915050565b600060208201905081810360008301526139cf816134da565b9050919050565b600060208201905081810360008301526139ef816134fd565b9050919050565b60006020820190508181036000830152613a0f81613520565b9050919050565b60006020820190508181036000830152613a2f81613543565b9050919050565b60006020820190508181036000830152613a4f81613566565b9050919050565b60006020820190508181036000830152613a6f81613589565b9050919050565b60006020820190508181036000830152613a8f816135ac565b9050919050565b60006020820190508181036000830152613aaf816135cf565b9050919050565b60006020820190508181036000830152613acf816135f2565b9050919050565b60006020820190508181036000830152613aef81613615565b9050919050565b60006020820190508181036000830152613b0f81613638565b9050919050565b60006020820190508181036000830152613b2f8161365b565b9050919050565b60006020820190508181036000830152613b4f8161367e565b9050919050565b60006020820190508181036000830152613b6f816136a1565b9050919050565b60006020820190508181036000830152613b8f816136c4565b9050919050565b60006020820190508181036000830152613baf816136e7565b9050919050565b60006020820190508181036000830152613bcf8161370a565b9050919050565b60006020820190508181036000830152613bef8161372d565b9050919050565b60006020820190508181036000830152613c0f81613750565b9050919050565b60006020820190508181036000830152613c2f81613773565b9050919050565b60006020820190508181036000830152613c4f81613796565b9050919050565b60006020820190508181036000830152613c6f816137b9565b9050919050565b60006020820190508181036000830152613c8f816137dc565b9050919050565b60006020820190508181036000830152613caf816137ff565b9050919050565b60006020820190508181036000830152613ccf81613822565b9050919050565b60006020820190508181036000830152613cef81613845565b9050919050565b60006020820190508181036000830152613d0f81613868565b9050919050565b60006020820190508181036000830152613d2f8161388b565b9050919050565b6000602082019050613d4b60008301846138bd565b92915050565b6000604082019050613d6660008301856138bd565b613d7360208301846138bd565b9392505050565b6000613d84613d95565b9050613d908282614020565b919050565b6000604051905090565b600067ffffffffffffffff821115613dba57613db96141b6565b5b613dc3826141f9565b9050602081019050919050565b600067ffffffffffffffff821115613deb57613dea6141b6565b5b613df4826141f9565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613e8882613fa2565b9150613e9383613fa2565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613ec857613ec76140cb565b5b828201905092915050565b6000613ede82613fa2565b9150613ee983613fa2565b925082613ef957613ef86140fa565b5b828204905092915050565b6000613f0f82613fa2565b9150613f1a83613fa2565b925082821015613f2d57613f2c6140cb565b5b828203905092915050565b6000613f4382613f82565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613fd9578082015181840152602081019050613fbe565b83811115613fe8576000848401525b50505050565b6000600282049050600182168061400657607f821691505b6020821081141561401a57614019614129565b5b50919050565b614029826141f9565b810181811067ffffffffffffffff82111715614048576140476141b6565b5b80604052505050565b600061405c82613fa2565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561408f5761408e6140cb565b5b600182019050919050565b60006140a582613fa2565b91506140b083613fa2565b9250826140c0576140bf6140fa565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f596f7520646f6e2774206f776e20746f616420322e0000000000000000000000600082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4d617820737570706c79206f662042616279546f61647a20616c72656164792060008201527f6d696e7465642100000000000000000000000000000000000000000000000000602082015250565b7f546f61642032206973206e6f742076616c69642e000000000000000000000000600082015250565b7f596f7520646f6e2774206f776e207468697320626162792e0000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f546f616420322068617320616c7265616479206265656e20627265642e000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f546f616420312068617320616c7265616479206265656e20627265642e000000600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4275726e696e67206973206e6f7420616c6c6f7765642e000000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f4d696e74696e67206973206e6f74206f70656e2e000000000000000000000000600082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f596f7520646f6e2774206f776e20746f616420312e0000000000000000000000600082015250565b7f546f61642031206973206e6f742076616c69642e000000000000000000000000600082015250565b6148c981613f38565b81146148d457600080fd5b50565b6148e081613f4a565b81146148eb57600080fd5b50565b6148f781613f56565b811461490257600080fd5b50565b61490e81613fa2565b811461491957600080fd5b5056fea2646970667358221220ea27e77ce6c8a1f49aa2a50797db5be0df0f8bb814c858c202e986707b9d414064736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002768747470733a2f2f7777772e6372656174757265746f61647a2e636f6d2f6170692f626162792f00000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _initBaseURI (string): https://www.creaturetoadz.com/api/baby/
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000027
Arg [2] : 68747470733a2f2f7777772e6372656174757265746f61647a2e636f6d2f6170
Arg [3] : 692f626162792f00000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
45869:3302:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34565:224;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21474:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23033:221;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22556:411;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48604:104;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35205:113;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46199:33;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47774:824;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46717:88;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23923:339;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34873:256;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46308:47;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24333:185;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48714:348;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35395:233;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49068:98;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21168:239;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46280:21;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20898:208;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42358:94;;;:::i;:::-;;41707:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46914:193;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21643:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23326:295;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47113:655;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46811:97;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24589:328;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21818:334;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46152:40;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46360:48;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;46237:36;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23692:164;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42607:192;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34565:224;34667:4;34706:35;34691:50;;;:11;:50;;;;:90;;;;34745:36;34769:11;34745:23;:36::i;:::-;34691:90;34684:97;;34565:224;;;:::o;21474:100::-;21528:13;21561:5;21554:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21474:100;:::o;23033:221::-;23109:7;23137:16;23145:7;23137;:16::i;:::-;23129:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;23222:15;:24;23238:7;23222:24;;;;;;;;;;;;;;;;;;;;;23215:31;;23033:221;;;:::o;22556:411::-;22637:13;22653:23;22668:7;22653:14;:23::i;:::-;22637:39;;22701:5;22695:11;;:2;:11;;;;22687:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;22795:5;22779:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;22804:37;22821:5;22828:12;:10;:12::i;:::-;22804:16;:37::i;:::-;22779:62;22757:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;22938:21;22947:2;22951:7;22938:8;:21::i;:::-;22626:341;22556:411;;:::o;48604:104::-;48660:4;48701:1;48680:12;:18;48693:4;48680:18;;;;;;;;;;;;:22;48673:29;;48604:104;;;:::o;35205:113::-;35266:7;35293:10;:17;;;;35286:24;;35205:113;:::o;46199:33::-;;;;;;;;;;;;;:::o;47774:824::-;47842:13;;;;;;;;;;;47834:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;47893:35;47948:18;;;;;;;;;;;47893:74;;48022:10;47984:48;;:18;:26;;;48011:6;47984:34;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:48;;;47976:82;;;;;;;;;;;;:::i;:::-;;;;;;;;;48111:10;48073:48;;:18;:26;;;48100:6;48073:34;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:48;;;48065:82;;;;;;;;;;;;:::i;:::-;;;;;;;;;48188:1;48164:12;:20;48177:6;48164:20;;;;;;;;;;;;:25;;48156:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;48262:1;48238:12;:20;48251:6;48238:20;;;;;;;;;;;;:25;;48230:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;48306:14;48339:1;48323:13;:11;:13::i;:::-;:17;;;;:::i;:::-;48306:34;;46188:4;48357:6;:19;;48349:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;48456:6;48433:12;:20;48446:6;48433:20;;;;;;;;;;;:29;;;;48492:6;48469:12;:20;48482:6;48469:20;;;;;;;;;;;:29;;;;48531:23;;;;;;;;48539:6;48531:23;;;;48547:6;48531:23;;;48507:13;:21;48521:6;48507:21;;;;;;;;;;;:47;;;;;;;;;;;;;;;;;;;48563:29;48573:10;48585:6;48563:9;:29::i;:::-;47827:771;;47774:824;;:::o;46717:88::-;41938:12;:10;:12::i;:::-;41927:23;;:7;:5;:7::i;:::-;:23;;;41919:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46793:6:::1;46777:13;;:22;;;;;;;;;;;;;;;;;;46717:88:::0;:::o;23923:339::-;24118:41;24137:12;:10;:12::i;:::-;24151:7;24118:18;:41::i;:::-;24110:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;24226:28;24236:4;24242:2;24246:7;24226:9;:28::i;:::-;23923:339;;;:::o;34873:256::-;34970:7;35006:23;35023:5;35006:16;:23::i;:::-;34998:5;:31;34990:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;35095:12;:19;35108:5;35095:19;;;;;;;;;;;;;;;:26;35115:5;35095:26;;;;;;;;;;;;35088:33;;34873:256;;;;:::o;46308:47::-;;;;;;;;;;;;;;;;;:::o;24333:185::-;24471:39;24488:4;24494:2;24498:7;24471:39;;;;;;;;;;;;:16;:39::i;:::-;24333:185;;;:::o;48714:348::-;48789:16;48817:23;48843:17;48853:6;48843:9;:17::i;:::-;48817:43;;48867:25;48909:15;48895:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48867:58;;48937:9;48932:103;48952:15;48948:1;:19;48932:103;;;48997:30;49017:6;49025:1;48997:19;:30::i;:::-;48983:8;48992:1;48983:11;;;;;;;;:::i;:::-;;;;;;;:44;;;;;48969:3;;;;;:::i;:::-;;;;48932:103;;;;49048:8;49041:15;;;;48714:348;;;:::o;35395:233::-;35470:7;35506:30;:28;:30::i;:::-;35498:5;:38;35490:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;35603:10;35614:5;35603:17;;;;;;;;:::i;:::-;;;;;;;;;;35596:24;;35395:233;;;:::o;49068:98::-;41938:12;:10;:12::i;:::-;41927:23;;:7;:5;:7::i;:::-;:23;;;41919:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49149:11:::1;49139:7;:21;;;;;;;;;;;;:::i;:::-;;49068:98:::0;:::o;21168:239::-;21240:7;21260:13;21276:7;:16;21284:7;21276:16;;;;;;;;;;;;;;;;;;;;;21260:32;;21328:1;21311:19;;:5;:19;;;;21303:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;21394:5;21387:12;;;21168:239;;;:::o;46280:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;20898:208::-;20970:7;21015:1;20998:19;;:5;:19;;;;20990:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;21082:9;:16;21092:5;21082:16;;;;;;;;;;;;;;;;21075:23;;20898:208;;;:::o;42358:94::-;41938:12;:10;:12::i;:::-;41927:23;;:7;:5;:7::i;:::-;:23;;;41919:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42423:21:::1;42441:1;42423:9;:21::i;:::-;42358:94::o:0;41707:87::-;41753:7;41780:6;;;;;;;;;;;41773:13;;41707:87;:::o;46914:193::-;46968:16;;;;;;;;;;;46960:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;47044:10;47027:27;;:13;47035:4;47027:7;:13::i;:::-;:27;;;47019:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;47090:11;47096:4;47090:5;:11::i;:::-;46914:193;:::o;21643:104::-;21699:13;21732:7;21725:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21643:104;:::o;23326:295::-;23441:12;:10;:12::i;:::-;23429:24;;:8;:24;;;;23421:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;23541:8;23496:18;:32;23515:12;:10;:12::i;:::-;23496:32;;;;;;;;;;;;;;;:42;23529:8;23496:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;23594:8;23565:48;;23580:12;:10;:12::i;:::-;23565:48;;;23604:8;23565:48;;;;;;:::i;:::-;;;;;;;;23326:295;;:::o;47113:655::-;41938:12;:10;:12::i;:::-;41927:23;;:7;:5;:7::i;:::-;:23;;;41919:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47204:1:::1;47194:6;:11;;:29;;;;;47219:4;47209:6;:14;;47194:29;47186:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;47273:1;47263:6;:11;;:29;;;;;47288:4;47278:6;:14;;47263:29;47255:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;47358:1;47334:12;:20;47347:6;47334:20;;;;;;;;;;;;:25;;47326:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;47432:1;47408:12;:20;47421:6;47408:20;;;;;;;;;;;;:25;;47400:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;47476:14;47509:1;47493:13;:11;:13::i;:::-;:17;;;;:::i;:::-;47476:34;;46188:4;47527:6;:19;;47519:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;47626:6;47603:12;:20;47616:6;47603:20;;;;;;;;;;;:29;;;;47662:6;47639:12;:20;47652:6;47639:20;;;;;;;;;;;:29;;;;47701:23;;;;;;;;47709:6;47701:23;;;;47717:6;47701:23;;::::0;47677:13:::1;:21;47691:6;47677:21;;;;;;;;;;;:47;;;;;;;;;;;;;;;;;;;47733:29;47743:10;47755:6;47733:9;:29::i;:::-;47179:589;47113:655:::0;;:::o;46811:97::-;41938:12;:10;:12::i;:::-;41927:23;;:7;:5;:7::i;:::-;:23;;;41919:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46893:9:::1;46874:16;;:28;;;;;;;;;;;;;;;;;;46811:97:::0;:::o;24589:328::-;24764:41;24783:12;:10;:12::i;:::-;24797:7;24764:18;:41::i;:::-;24756:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;24870:39;24884:4;24890:2;24894:7;24903:5;24870:13;:39::i;:::-;24589:328;;;;:::o;21818:334::-;21891:13;21925:16;21933:7;21925;:16::i;:::-;21917:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;22006:21;22030:10;:8;:10::i;:::-;22006:34;;22082:1;22064:7;22058:21;:25;:86;;;;;;;;;;;;;;;;;22110:7;22119:18;:7;:16;:18::i;:::-;22093:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;22058:86;22051:93;;;21818:334;;;:::o;46152:40::-;46188:4;46152:40;:::o;46360:48::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;46237:36::-;;;;;;;;;;;;;:::o;23692:164::-;23789:4;23813:18;:25;23832:5;23813:25;;;;;;;;;;;;;;;:35;23839:8;23813:35;;;;;;;;;;;;;;;;;;;;;;;;;23806:42;;23692:164;;;;:::o;42607:192::-;41938:12;:10;:12::i;:::-;41927:23;;:7;:5;:7::i;:::-;:23;;;41919:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42716:1:::1;42696:22;;:8;:22;;;;42688:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;42772:19;42782:8;42772:9;:19::i;:::-;42607:192:::0;:::o;20529:305::-;20631:4;20683:25;20668:40;;;:11;:40;;;;:105;;;;20740:33;20725:48;;;:11;:48;;;;20668:105;:158;;;;20790:36;20814:11;20790:23;:36::i;:::-;20668:158;20648:178;;20529:305;;;:::o;26427:127::-;26492:4;26544:1;26516:30;;:7;:16;26524:7;26516:16;;;;;;;;;;;;;;;;;;;;;:30;;;;26509:37;;26427:127;;;:::o;15963:98::-;16016:7;16043:10;16036:17;;15963:98;:::o;30409:174::-;30511:2;30484:15;:24;30500:7;30484:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;30567:7;30563:2;30529:46;;30538:23;30553:7;30538:14;:23::i;:::-;30529:46;;;;;;;;;;;;30409:174;;:::o;27411:110::-;27487:26;27497:2;27501:7;27487:26;;;;;;;;;;;;:9;:26::i;:::-;27411:110;;:::o;26721:348::-;26814:4;26839:16;26847:7;26839;:16::i;:::-;26831:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26915:13;26931:23;26946:7;26931:14;:23::i;:::-;26915:39;;26984:5;26973:16;;:7;:16;;;:51;;;;27017:7;26993:31;;:20;27005:7;26993:11;:20::i;:::-;:31;;;26973:51;:87;;;;27028:32;27045:5;27052:7;27028:16;:32::i;:::-;26973:87;26965:96;;;26721:348;;;;:::o;29713:578::-;29872:4;29845:31;;:23;29860:7;29845:14;:23::i;:::-;:31;;;29837:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;29955:1;29941:16;;:2;:16;;;;29933:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;30011:39;30032:4;30038:2;30042:7;30011:20;:39::i;:::-;30115:29;30132:1;30136:7;30115:8;:29::i;:::-;30176:1;30157:9;:15;30167:4;30157:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;30205:1;30188:9;:13;30198:2;30188:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;30236:2;30217:7;:16;30225:7;30217:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;30275:7;30271:2;30256:27;;30265:4;30256:27;;;;;;;;;;;;29713:578;;;:::o;42807:173::-;42863:16;42882:6;;;;;;;;;;;42863:25;;42908:8;42899:6;;:17;;;;;;;;;;;;;;;;;;42963:8;42932:40;;42953:8;42932:40;;;;;;;;;;;;42852:128;42807:173;:::o;29016:360::-;29076:13;29092:23;29107:7;29092:14;:23::i;:::-;29076:39;;29128:48;29149:5;29164:1;29168:7;29128:20;:48::i;:::-;29217:29;29234:1;29238:7;29217:8;:29::i;:::-;29279:1;29259:9;:16;29269:5;29259:16;;;;;;;;;;;;;;;;:21;;;;;;;:::i;:::-;;;;;;;;29298:7;:16;29306:7;29298:16;;;;;;;;;;;;29291:23;;;;;;;;;;;29360:7;29356:1;29332:36;;29341:5;29332:36;;;;;;;;;;;;29065:311;29016:360;:::o;25799:315::-;25956:28;25966:4;25972:2;25976:7;25956:9;:28::i;:::-;26003:48;26026:4;26032:2;26036:7;26045:5;26003:22;:48::i;:::-;25995:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;25799:315;;;;:::o;46586:102::-;46646:13;46675:7;46668:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46586:102;:::o;16484:723::-;16540:13;16770:1;16761:5;:10;16757:53;;;16788:10;;;;;;;;;;;;;;;;;;;;;16757:53;16820:12;16835:5;16820:20;;16851:14;16876:78;16891:1;16883:4;:9;16876:78;;16909:8;;;;;:::i;:::-;;;;16940:2;16932:10;;;;;:::i;:::-;;;16876:78;;;16964:19;16996:6;16986:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16964:39;;17014:154;17030:1;17021:5;:10;17014:154;;17058:1;17048:11;;;;;:::i;:::-;;;17125:2;17117:5;:10;;;;:::i;:::-;17104:2;:24;;;;:::i;:::-;17091:39;;17074:6;17081;17074:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;17154:2;17145:11;;;;;:::i;:::-;;;17014:154;;;17192:6;17178:21;;;;;16484:723;;;;:::o;19037:157::-;19122:4;19161:25;19146:40;;;:11;:40;;;;19139:47;;19037:157;;;:::o;27748:321::-;27878:18;27884:2;27888:7;27878:5;:18::i;:::-;27929:54;27960:1;27964:2;27968:7;27977:5;27929:22;:54::i;:::-;27907:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;27748:321;;;:::o;36241:589::-;36385:45;36412:4;36418:2;36422:7;36385:26;:45::i;:::-;36463:1;36447:18;;:4;:18;;;36443:187;;;36482:40;36514:7;36482:31;:40::i;:::-;36443:187;;;36552:2;36544:10;;:4;:10;;;36540:90;;36571:47;36604:4;36610:7;36571:32;:47::i;:::-;36540:90;36443:187;36658:1;36644:16;;:2;:16;;;36640:183;;;36677:45;36714:7;36677:36;:45::i;:::-;36640:183;;;36750:4;36744:10;;:2;:10;;;36740:83;;36771:40;36799:2;36803:7;36771:27;:40::i;:::-;36740:83;36640:183;36241:589;;;:::o;31148:799::-;31303:4;31324:15;:2;:13;;;:15::i;:::-;31320:620;;;31376:2;31360:36;;;31397:12;:10;:12::i;:::-;31411:4;31417:7;31426:5;31360:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;31356:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31619:1;31602:6;:13;:18;31598:272;;;31645:60;;;;;;;;;;:::i;:::-;;;;;;;;31598:272;31820:6;31814:13;31805:6;31801:2;31797:15;31790:38;31356:529;31493:41;;;31483:51;;;:6;:51;;;;31476:58;;;;;31320:620;31924:4;31917:11;;31148:799;;;;;;;:::o;28405:382::-;28499:1;28485:16;;:2;:16;;;;28477:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;28558:16;28566:7;28558;:16::i;:::-;28557:17;28549:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;28620:45;28649:1;28653:2;28657:7;28620:20;:45::i;:::-;28695:1;28678:9;:13;28688:2;28678:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;28726:2;28707:7;:16;28715:7;28707:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;28771:7;28767:2;28746:33;;28763:1;28746:33;;;;;;;;;;;;28405:382;;:::o;32519:126::-;;;;:::o;37553:164::-;37657:10;:17;;;;37630:15;:24;37646:7;37630:24;;;;;;;;;;;:44;;;;37685:10;37701:7;37685:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37553:164;:::o;38344:988::-;38610:22;38660:1;38635:22;38652:4;38635:16;:22::i;:::-;:26;;;;:::i;:::-;38610:51;;38672:18;38693:17;:26;38711:7;38693:26;;;;;;;;;;;;38672:47;;38840:14;38826:10;:28;38822:328;;38871:19;38893:12;:18;38906:4;38893:18;;;;;;;;;;;;;;;:34;38912:14;38893:34;;;;;;;;;;;;38871:56;;38977:11;38944:12;:18;38957:4;38944:18;;;;;;;;;;;;;;;:30;38963:10;38944:30;;;;;;;;;;;:44;;;;39094:10;39061:17;:30;39079:11;39061:30;;;;;;;;;;;:43;;;;38856:294;38822:328;39246:17;:26;39264:7;39246:26;;;;;;;;;;;39239:33;;;39290:12;:18;39303:4;39290:18;;;;;;;;;;;;;;;:34;39309:14;39290:34;;;;;;;;;;;39283:41;;;38425:907;;38344:988;;:::o;39627:1079::-;39880:22;39925:1;39905:10;:17;;;;:21;;;;:::i;:::-;39880:46;;39937:18;39958:15;:24;39974:7;39958:24;;;;;;;;;;;;39937:45;;40309:19;40331:10;40342:14;40331:26;;;;;;;;:::i;:::-;;;;;;;;;;40309:48;;40395:11;40370:10;40381;40370:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;40506:10;40475:15;:28;40491:11;40475:28;;;;;;;;;;;:41;;;;40647:15;:24;40663:7;40647:24;;;;;;;;;;;40640:31;;;40682:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;39698:1008;;;39627:1079;:::o;37131:221::-;37216:14;37233:20;37250:2;37233:16;:20::i;:::-;37216:37;;37291:7;37264:12;:16;37277:2;37264:16;;;;;;;;;;;;;;;:24;37281:6;37264:24;;;;;;;;;;;:34;;;;37338:6;37309:17;:26;37327:7;37309:26;;;;;;;;;;;:35;;;;37205:147;37131:221;;:::o;8011:387::-;8071:4;8279:12;8346:7;8334:20;8326:28;;8389:1;8382:4;:8;8375:15;;;8011:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;986:143::-;1043:5;1074:6;1068:13;1059:22;;1090:33;1117:5;1090:33;:::i;:::-;986:143;;;;:::o;1135:133::-;1178:5;1216:6;1203:20;1194:29;;1232:30;1256:5;1232:30;:::i;:::-;1135:133;;;;:::o;1274:137::-;1319:5;1357:6;1344:20;1335:29;;1373:32;1399:5;1373:32;:::i;:::-;1274:137;;;;:::o;1417:141::-;1473:5;1504:6;1498:13;1489:22;;1520:32;1546:5;1520:32;:::i;:::-;1417:141;;;;:::o;1577:338::-;1632:5;1681:3;1674:4;1666:6;1662:17;1658:27;1648:122;;1689:79;;:::i;:::-;1648:122;1806:6;1793:20;1831:78;1905:3;1897:6;1890:4;1882:6;1878:17;1831:78;:::i;:::-;1822:87;;1638:277;1577:338;;;;:::o;1935:340::-;1991:5;2040:3;2033:4;2025:6;2021:17;2017:27;2007:122;;2048:79;;:::i;:::-;2007:122;2165:6;2152:20;2190:79;2265:3;2257:6;2250:4;2242:6;2238:17;2190:79;:::i;:::-;2181:88;;1997:278;1935:340;;;;:::o;2281:139::-;2327:5;2365:6;2352:20;2343:29;;2381:33;2408:5;2381:33;:::i;:::-;2281:139;;;;:::o;2426:329::-;2485:6;2534:2;2522:9;2513:7;2509:23;2505:32;2502:119;;;2540:79;;:::i;:::-;2502:119;2660:1;2685:53;2730:7;2721:6;2710:9;2706:22;2685:53;:::i;:::-;2675:63;;2631:117;2426:329;;;;:::o;2761:351::-;2831:6;2880:2;2868:9;2859:7;2855:23;2851:32;2848:119;;;2886:79;;:::i;:::-;2848:119;3006:1;3031:64;3087:7;3078:6;3067:9;3063:22;3031:64;:::i;:::-;3021:74;;2977:128;2761:351;;;;:::o;3118:474::-;3186:6;3194;3243:2;3231:9;3222:7;3218:23;3214:32;3211:119;;;3249:79;;:::i;:::-;3211:119;3369:1;3394:53;3439:7;3430:6;3419:9;3415:22;3394:53;:::i;:::-;3384:63;;3340:117;3496:2;3522:53;3567:7;3558:6;3547:9;3543:22;3522:53;:::i;:::-;3512:63;;3467:118;3118:474;;;;;:::o;3598:619::-;3675:6;3683;3691;3740:2;3728:9;3719:7;3715:23;3711:32;3708:119;;;3746:79;;:::i;:::-;3708:119;3866:1;3891:53;3936:7;3927:6;3916:9;3912:22;3891:53;:::i;:::-;3881:63;;3837:117;3993:2;4019:53;4064:7;4055:6;4044:9;4040:22;4019:53;:::i;:::-;4009:63;;3964:118;4121:2;4147:53;4192:7;4183:6;4172:9;4168:22;4147:53;:::i;:::-;4137:63;;4092:118;3598:619;;;;;:::o;4223:943::-;4318:6;4326;4334;4342;4391:3;4379:9;4370:7;4366:23;4362:33;4359:120;;;4398:79;;:::i;:::-;4359:120;4518:1;4543:53;4588:7;4579:6;4568:9;4564:22;4543:53;:::i;:::-;4533:63;;4489:117;4645:2;4671:53;4716:7;4707:6;4696:9;4692:22;4671:53;:::i;:::-;4661:63;;4616:118;4773:2;4799:53;4844:7;4835:6;4824:9;4820:22;4799:53;:::i;:::-;4789:63;;4744:118;4929:2;4918:9;4914:18;4901:32;4960:18;4952:6;4949:30;4946:117;;;4982:79;;:::i;:::-;4946:117;5087:62;5141:7;5132:6;5121:9;5117:22;5087:62;:::i;:::-;5077:72;;4872:287;4223:943;;;;;;;:::o;5172:468::-;5237:6;5245;5294:2;5282:9;5273:7;5269:23;5265:32;5262:119;;;5300:79;;:::i;:::-;5262:119;5420:1;5445:53;5490:7;5481:6;5470:9;5466:22;5445:53;:::i;:::-;5435:63;;5391:117;5547:2;5573:50;5615:7;5606:6;5595:9;5591:22;5573:50;:::i;:::-;5563:60;;5518:115;5172:468;;;;;:::o;5646:474::-;5714:6;5722;5771:2;5759:9;5750:7;5746:23;5742:32;5739:119;;;5777:79;;:::i;:::-;5739:119;5897:1;5922:53;5967:7;5958:6;5947:9;5943:22;5922:53;:::i;:::-;5912:63;;5868:117;6024:2;6050:53;6095:7;6086:6;6075:9;6071:22;6050:53;:::i;:::-;6040:63;;5995:118;5646:474;;;;;:::o;6126:323::-;6182:6;6231:2;6219:9;6210:7;6206:23;6202:32;6199:119;;;6237:79;;:::i;:::-;6199:119;6357:1;6382:50;6424:7;6415:6;6404:9;6400:22;6382:50;:::i;:::-;6372:60;;6328:114;6126:323;;;;:::o;6455:327::-;6513:6;6562:2;6550:9;6541:7;6537:23;6533:32;6530:119;;;6568:79;;:::i;:::-;6530:119;6688:1;6713:52;6757:7;6748:6;6737:9;6733:22;6713:52;:::i;:::-;6703:62;;6659:116;6455:327;;;;:::o;6788:349::-;6857:6;6906:2;6894:9;6885:7;6881:23;6877:32;6874:119;;;6912:79;;:::i;:::-;6874:119;7032:1;7057:63;7112:7;7103:6;7092:9;7088:22;7057:63;:::i;:::-;7047:73;;7003:127;6788:349;;;;:::o;7143:509::-;7212:6;7261:2;7249:9;7240:7;7236:23;7232:32;7229:119;;;7267:79;;:::i;:::-;7229:119;7415:1;7404:9;7400:17;7387:31;7445:18;7437:6;7434:30;7431:117;;;7467:79;;:::i;:::-;7431:117;7572:63;7627:7;7618:6;7607:9;7603:22;7572:63;:::i;:::-;7562:73;;7358:287;7143:509;;;;:::o;7658:329::-;7717:6;7766:2;7754:9;7745:7;7741:23;7737:32;7734:119;;;7772:79;;:::i;:::-;7734:119;7892:1;7917:53;7962:7;7953:6;7942:9;7938:22;7917:53;:::i;:::-;7907:63;;7863:117;7658:329;;;;:::o;7993:474::-;8061:6;8069;8118:2;8106:9;8097:7;8093:23;8089:32;8086:119;;;8124:79;;:::i;:::-;8086:119;8244:1;8269:53;8314:7;8305:6;8294:9;8290:22;8269:53;:::i;:::-;8259:63;;8215:117;8371:2;8397:53;8442:7;8433:6;8422:9;8418:22;8397:53;:::i;:::-;8387:63;;8342:118;7993:474;;;;;:::o;8473:179::-;8542:10;8563:46;8605:3;8597:6;8563:46;:::i;:::-;8641:4;8636:3;8632:14;8618:28;;8473:179;;;;:::o;8658:118::-;8745:24;8763:5;8745:24;:::i;:::-;8740:3;8733:37;8658:118;;:::o;8812:732::-;8931:3;8960:54;9008:5;8960:54;:::i;:::-;9030:86;9109:6;9104:3;9030:86;:::i;:::-;9023:93;;9140:56;9190:5;9140:56;:::i;:::-;9219:7;9250:1;9235:284;9260:6;9257:1;9254:13;9235:284;;;9336:6;9330:13;9363:63;9422:3;9407:13;9363:63;:::i;:::-;9356:70;;9449:60;9502:6;9449:60;:::i;:::-;9439:70;;9295:224;9282:1;9279;9275:9;9270:14;;9235:284;;;9239:14;9535:3;9528:10;;8936:608;;;8812:732;;;;:::o;9550:109::-;9631:21;9646:5;9631:21;:::i;:::-;9626:3;9619:34;9550:109;;:::o;9665:360::-;9751:3;9779:38;9811:5;9779:38;:::i;:::-;9833:70;9896:6;9891:3;9833:70;:::i;:::-;9826:77;;9912:52;9957:6;9952:3;9945:4;9938:5;9934:16;9912:52;:::i;:::-;9989:29;10011:6;9989:29;:::i;:::-;9984:3;9980:39;9973:46;;9755:270;9665:360;;;;:::o;10031:364::-;10119:3;10147:39;10180:5;10147:39;:::i;:::-;10202:71;10266:6;10261:3;10202:71;:::i;:::-;10195:78;;10282:52;10327:6;10322:3;10315:4;10308:5;10304:16;10282:52;:::i;:::-;10359:29;10381:6;10359:29;:::i;:::-;10354:3;10350:39;10343:46;;10123:272;10031:364;;;;:::o;10401:377::-;10507:3;10535:39;10568:5;10535:39;:::i;:::-;10590:89;10672:6;10667:3;10590:89;:::i;:::-;10583:96;;10688:52;10733:6;10728:3;10721:4;10714:5;10710:16;10688:52;:::i;:::-;10765:6;10760:3;10756:16;10749:23;;10511:267;10401:377;;;;:::o;10784:366::-;10926:3;10947:67;11011:2;11006:3;10947:67;:::i;:::-;10940:74;;11023:93;11112:3;11023:93;:::i;:::-;11141:2;11136:3;11132:12;11125:19;;10784:366;;;:::o;11156:::-;11298:3;11319:67;11383:2;11378:3;11319:67;:::i;:::-;11312:74;;11395:93;11484:3;11395:93;:::i;:::-;11513:2;11508:3;11504:12;11497:19;;11156:366;;;:::o;11528:::-;11670:3;11691:67;11755:2;11750:3;11691:67;:::i;:::-;11684:74;;11767:93;11856:3;11767:93;:::i;:::-;11885:2;11880:3;11876:12;11869:19;;11528:366;;;:::o;11900:::-;12042:3;12063:67;12127:2;12122:3;12063:67;:::i;:::-;12056:74;;12139:93;12228:3;12139:93;:::i;:::-;12257:2;12252:3;12248:12;12241:19;;11900:366;;;:::o;12272:::-;12414:3;12435:67;12499:2;12494:3;12435:67;:::i;:::-;12428:74;;12511:93;12600:3;12511:93;:::i;:::-;12629:2;12624:3;12620:12;12613:19;;12272:366;;;:::o;12644:::-;12786:3;12807:67;12871:2;12866:3;12807:67;:::i;:::-;12800:74;;12883:93;12972:3;12883:93;:::i;:::-;13001:2;12996:3;12992:12;12985:19;;12644:366;;;:::o;13016:::-;13158:3;13179:67;13243:2;13238:3;13179:67;:::i;:::-;13172:74;;13255:93;13344:3;13255:93;:::i;:::-;13373:2;13368:3;13364:12;13357:19;;13016:366;;;:::o;13388:::-;13530:3;13551:67;13615:2;13610:3;13551:67;:::i;:::-;13544:74;;13627:93;13716:3;13627:93;:::i;:::-;13745:2;13740:3;13736:12;13729:19;;13388:366;;;:::o;13760:::-;13902:3;13923:67;13987:2;13982:3;13923:67;:::i;:::-;13916:74;;13999:93;14088:3;13999:93;:::i;:::-;14117:2;14112:3;14108:12;14101:19;;13760:366;;;:::o;14132:::-;14274:3;14295:67;14359:2;14354:3;14295:67;:::i;:::-;14288:74;;14371:93;14460:3;14371:93;:::i;:::-;14489:2;14484:3;14480:12;14473:19;;14132:366;;;:::o;14504:::-;14646:3;14667:67;14731:2;14726:3;14667:67;:::i;:::-;14660:74;;14743:93;14832:3;14743:93;:::i;:::-;14861:2;14856:3;14852:12;14845:19;;14504:366;;;:::o;14876:::-;15018:3;15039:67;15103:2;15098:3;15039:67;:::i;:::-;15032:74;;15115:93;15204:3;15115:93;:::i;:::-;15233:2;15228:3;15224:12;15217:19;;14876:366;;;:::o;15248:::-;15390:3;15411:67;15475:2;15470:3;15411:67;:::i;:::-;15404:74;;15487:93;15576:3;15487:93;:::i;:::-;15605:2;15600:3;15596:12;15589:19;;15248:366;;;:::o;15620:::-;15762:3;15783:67;15847:2;15842:3;15783:67;:::i;:::-;15776:74;;15859:93;15948:3;15859:93;:::i;:::-;15977:2;15972:3;15968:12;15961:19;;15620:366;;;:::o;15992:::-;16134:3;16155:67;16219:2;16214:3;16155:67;:::i;:::-;16148:74;;16231:93;16320:3;16231:93;:::i;:::-;16349:2;16344:3;16340:12;16333:19;;15992:366;;;:::o;16364:::-;16506:3;16527:67;16591:2;16586:3;16527:67;:::i;:::-;16520:74;;16603:93;16692:3;16603:93;:::i;:::-;16721:2;16716:3;16712:12;16705:19;;16364:366;;;:::o;16736:::-;16878:3;16899:67;16963:2;16958:3;16899:67;:::i;:::-;16892:74;;16975:93;17064:3;16975:93;:::i;:::-;17093:2;17088:3;17084:12;17077:19;;16736:366;;;:::o;17108:::-;17250:3;17271:67;17335:2;17330:3;17271:67;:::i;:::-;17264:74;;17347:93;17436:3;17347:93;:::i;:::-;17465:2;17460:3;17456:12;17449:19;;17108:366;;;:::o;17480:::-;17622:3;17643:67;17707:2;17702:3;17643:67;:::i;:::-;17636:74;;17719:93;17808:3;17719:93;:::i;:::-;17837:2;17832:3;17828:12;17821:19;;17480:366;;;:::o;17852:::-;17994:3;18015:67;18079:2;18074:3;18015:67;:::i;:::-;18008:74;;18091:93;18180:3;18091:93;:::i;:::-;18209:2;18204:3;18200:12;18193:19;;17852:366;;;:::o;18224:::-;18366:3;18387:67;18451:2;18446:3;18387:67;:::i;:::-;18380:74;;18463:93;18552:3;18463:93;:::i;:::-;18581:2;18576:3;18572:12;18565:19;;18224:366;;;:::o;18596:::-;18738:3;18759:67;18823:2;18818:3;18759:67;:::i;:::-;18752:74;;18835:93;18924:3;18835:93;:::i;:::-;18953:2;18948:3;18944:12;18937:19;;18596:366;;;:::o;18968:::-;19110:3;19131:67;19195:2;19190:3;19131:67;:::i;:::-;19124:74;;19207:93;19296:3;19207:93;:::i;:::-;19325:2;19320:3;19316:12;19309:19;;18968:366;;;:::o;19340:::-;19482:3;19503:67;19567:2;19562:3;19503:67;:::i;:::-;19496:74;;19579:93;19668:3;19579:93;:::i;:::-;19697:2;19692:3;19688:12;19681:19;;19340:366;;;:::o;19712:::-;19854:3;19875:67;19939:2;19934:3;19875:67;:::i;:::-;19868:74;;19951:93;20040:3;19951:93;:::i;:::-;20069:2;20064:3;20060:12;20053:19;;19712:366;;;:::o;20084:::-;20226:3;20247:67;20311:2;20306:3;20247:67;:::i;:::-;20240:74;;20323:93;20412:3;20323:93;:::i;:::-;20441:2;20436:3;20432:12;20425:19;;20084:366;;;:::o;20456:::-;20598:3;20619:67;20683:2;20678:3;20619:67;:::i;:::-;20612:74;;20695:93;20784:3;20695:93;:::i;:::-;20813:2;20808:3;20804:12;20797:19;;20456:366;;;:::o;20828:::-;20970:3;20991:67;21055:2;21050:3;20991:67;:::i;:::-;20984:74;;21067:93;21156:3;21067:93;:::i;:::-;21185:2;21180:3;21176:12;21169:19;;20828:366;;;:::o;21200:108::-;21277:24;21295:5;21277:24;:::i;:::-;21272:3;21265:37;21200:108;;:::o;21314:118::-;21401:24;21419:5;21401:24;:::i;:::-;21396:3;21389:37;21314:118;;:::o;21438:435::-;21618:3;21640:95;21731:3;21722:6;21640:95;:::i;:::-;21633:102;;21752:95;21843:3;21834:6;21752:95;:::i;:::-;21745:102;;21864:3;21857:10;;21438:435;;;;;:::o;21879:222::-;21972:4;22010:2;21999:9;21995:18;21987:26;;22023:71;22091:1;22080:9;22076:17;22067:6;22023:71;:::i;:::-;21879:222;;;;:::o;22107:640::-;22302:4;22340:3;22329:9;22325:19;22317:27;;22354:71;22422:1;22411:9;22407:17;22398:6;22354:71;:::i;:::-;22435:72;22503:2;22492:9;22488:18;22479:6;22435:72;:::i;:::-;22517;22585:2;22574:9;22570:18;22561:6;22517:72;:::i;:::-;22636:9;22630:4;22626:20;22621:2;22610:9;22606:18;22599:48;22664:76;22735:4;22726:6;22664:76;:::i;:::-;22656:84;;22107:640;;;;;;;:::o;22753:373::-;22896:4;22934:2;22923:9;22919:18;22911:26;;22983:9;22977:4;22973:20;22969:1;22958:9;22954:17;22947:47;23011:108;23114:4;23105:6;23011:108;:::i;:::-;23003:116;;22753:373;;;;:::o;23132:210::-;23219:4;23257:2;23246:9;23242:18;23234:26;;23270:65;23332:1;23321:9;23317:17;23308:6;23270:65;:::i;:::-;23132:210;;;;:::o;23348:313::-;23461:4;23499:2;23488:9;23484:18;23476:26;;23548:9;23542:4;23538:20;23534:1;23523:9;23519:17;23512:47;23576:78;23649:4;23640:6;23576:78;:::i;:::-;23568:86;;23348:313;;;;:::o;23667:419::-;23833:4;23871:2;23860:9;23856:18;23848:26;;23920:9;23914:4;23910:20;23906:1;23895:9;23891:17;23884:47;23948:131;24074:4;23948:131;:::i;:::-;23940:139;;23667:419;;;:::o;24092:::-;24258:4;24296:2;24285:9;24281:18;24273:26;;24345:9;24339:4;24335:20;24331:1;24320:9;24316:17;24309:47;24373:131;24499:4;24373:131;:::i;:::-;24365:139;;24092:419;;;:::o;24517:::-;24683:4;24721:2;24710:9;24706:18;24698:26;;24770:9;24764:4;24760:20;24756:1;24745:9;24741:17;24734:47;24798:131;24924:4;24798:131;:::i;:::-;24790:139;;24517:419;;;:::o;24942:::-;25108:4;25146:2;25135:9;25131:18;25123:26;;25195:9;25189:4;25185:20;25181:1;25170:9;25166:17;25159:47;25223:131;25349:4;25223:131;:::i;:::-;25215:139;;24942:419;;;:::o;25367:::-;25533:4;25571:2;25560:9;25556:18;25548:26;;25620:9;25614:4;25610:20;25606:1;25595:9;25591:17;25584:47;25648:131;25774:4;25648:131;:::i;:::-;25640:139;;25367:419;;;:::o;25792:::-;25958:4;25996:2;25985:9;25981:18;25973:26;;26045:9;26039:4;26035:20;26031:1;26020:9;26016:17;26009:47;26073:131;26199:4;26073:131;:::i;:::-;26065:139;;25792:419;;;:::o;26217:::-;26383:4;26421:2;26410:9;26406:18;26398:26;;26470:9;26464:4;26460:20;26456:1;26445:9;26441:17;26434:47;26498:131;26624:4;26498:131;:::i;:::-;26490:139;;26217:419;;;:::o;26642:::-;26808:4;26846:2;26835:9;26831:18;26823:26;;26895:9;26889:4;26885:20;26881:1;26870:9;26866:17;26859:47;26923:131;27049:4;26923:131;:::i;:::-;26915:139;;26642:419;;;:::o;27067:::-;27233:4;27271:2;27260:9;27256:18;27248:26;;27320:9;27314:4;27310:20;27306:1;27295:9;27291:17;27284:47;27348:131;27474:4;27348:131;:::i;:::-;27340:139;;27067:419;;;:::o;27492:::-;27658:4;27696:2;27685:9;27681:18;27673:26;;27745:9;27739:4;27735:20;27731:1;27720:9;27716:17;27709:47;27773:131;27899:4;27773:131;:::i;:::-;27765:139;;27492:419;;;:::o;27917:::-;28083:4;28121:2;28110:9;28106:18;28098:26;;28170:9;28164:4;28160:20;28156:1;28145:9;28141:17;28134:47;28198:131;28324:4;28198:131;:::i;:::-;28190:139;;27917:419;;;:::o;28342:::-;28508:4;28546:2;28535:9;28531:18;28523:26;;28595:9;28589:4;28585:20;28581:1;28570:9;28566:17;28559:47;28623:131;28749:4;28623:131;:::i;:::-;28615:139;;28342:419;;;:::o;28767:::-;28933:4;28971:2;28960:9;28956:18;28948:26;;29020:9;29014:4;29010:20;29006:1;28995:9;28991:17;28984:47;29048:131;29174:4;29048:131;:::i;:::-;29040:139;;28767:419;;;:::o;29192:::-;29358:4;29396:2;29385:9;29381:18;29373:26;;29445:9;29439:4;29435:20;29431:1;29420:9;29416:17;29409:47;29473:131;29599:4;29473:131;:::i;:::-;29465:139;;29192:419;;;:::o;29617:::-;29783:4;29821:2;29810:9;29806:18;29798:26;;29870:9;29864:4;29860:20;29856:1;29845:9;29841:17;29834:47;29898:131;30024:4;29898:131;:::i;:::-;29890:139;;29617:419;;;:::o;30042:::-;30208:4;30246:2;30235:9;30231:18;30223:26;;30295:9;30289:4;30285:20;30281:1;30270:9;30266:17;30259:47;30323:131;30449:4;30323:131;:::i;:::-;30315:139;;30042:419;;;:::o;30467:::-;30633:4;30671:2;30660:9;30656:18;30648:26;;30720:9;30714:4;30710:20;30706:1;30695:9;30691:17;30684:47;30748:131;30874:4;30748:131;:::i;:::-;30740:139;;30467:419;;;:::o;30892:::-;31058:4;31096:2;31085:9;31081:18;31073:26;;31145:9;31139:4;31135:20;31131:1;31120:9;31116:17;31109:47;31173:131;31299:4;31173:131;:::i;:::-;31165:139;;30892:419;;;:::o;31317:::-;31483:4;31521:2;31510:9;31506:18;31498:26;;31570:9;31564:4;31560:20;31556:1;31545:9;31541:17;31534:47;31598:131;31724:4;31598:131;:::i;:::-;31590:139;;31317:419;;;:::o;31742:::-;31908:4;31946:2;31935:9;31931:18;31923:26;;31995:9;31989:4;31985:20;31981:1;31970:9;31966:17;31959:47;32023:131;32149:4;32023:131;:::i;:::-;32015:139;;31742:419;;;:::o;32167:::-;32333:4;32371:2;32360:9;32356:18;32348:26;;32420:9;32414:4;32410:20;32406:1;32395:9;32391:17;32384:47;32448:131;32574:4;32448:131;:::i;:::-;32440:139;;32167:419;;;:::o;32592:::-;32758:4;32796:2;32785:9;32781:18;32773:26;;32845:9;32839:4;32835:20;32831:1;32820:9;32816:17;32809:47;32873:131;32999:4;32873:131;:::i;:::-;32865:139;;32592:419;;;:::o;33017:::-;33183:4;33221:2;33210:9;33206:18;33198:26;;33270:9;33264:4;33260:20;33256:1;33245:9;33241:17;33234:47;33298:131;33424:4;33298:131;:::i;:::-;33290:139;;33017:419;;;:::o;33442:::-;33608:4;33646:2;33635:9;33631:18;33623:26;;33695:9;33689:4;33685:20;33681:1;33670:9;33666:17;33659:47;33723:131;33849:4;33723:131;:::i;:::-;33715:139;;33442:419;;;:::o;33867:::-;34033:4;34071:2;34060:9;34056:18;34048:26;;34120:9;34114:4;34110:20;34106:1;34095:9;34091:17;34084:47;34148:131;34274:4;34148:131;:::i;:::-;34140:139;;33867:419;;;:::o;34292:::-;34458:4;34496:2;34485:9;34481:18;34473:26;;34545:9;34539:4;34535:20;34531:1;34520:9;34516:17;34509:47;34573:131;34699:4;34573:131;:::i;:::-;34565:139;;34292:419;;;:::o;34717:::-;34883:4;34921:2;34910:9;34906:18;34898:26;;34970:9;34964:4;34960:20;34956:1;34945:9;34941:17;34934:47;34998:131;35124:4;34998:131;:::i;:::-;34990:139;;34717:419;;;:::o;35142:::-;35308:4;35346:2;35335:9;35331:18;35323:26;;35395:9;35389:4;35385:20;35381:1;35370:9;35366:17;35359:47;35423:131;35549:4;35423:131;:::i;:::-;35415:139;;35142:419;;;:::o;35567:222::-;35660:4;35698:2;35687:9;35683:18;35675:26;;35711:71;35779:1;35768:9;35764:17;35755:6;35711:71;:::i;:::-;35567:222;;;;:::o;35795:332::-;35916:4;35954:2;35943:9;35939:18;35931:26;;35967:71;36035:1;36024:9;36020:17;36011:6;35967:71;:::i;:::-;36048:72;36116:2;36105:9;36101:18;36092:6;36048:72;:::i;:::-;35795:332;;;;;:::o;36133:129::-;36167:6;36194:20;;:::i;:::-;36184:30;;36223:33;36251:4;36243:6;36223:33;:::i;:::-;36133:129;;;:::o;36268:75::-;36301:6;36334:2;36328:9;36318:19;;36268:75;:::o;36349:307::-;36410:4;36500:18;36492:6;36489:30;36486:56;;;36522:18;;:::i;:::-;36486:56;36560:29;36582:6;36560:29;:::i;:::-;36552:37;;36644:4;36638;36634:15;36626:23;;36349:307;;;:::o;36662:308::-;36724:4;36814:18;36806:6;36803:30;36800:56;;;36836:18;;:::i;:::-;36800:56;36874:29;36896:6;36874:29;:::i;:::-;36866:37;;36958:4;36952;36948:15;36940:23;;36662:308;;;:::o;36976:132::-;37043:4;37066:3;37058:11;;37096:4;37091:3;37087:14;37079:22;;36976:132;;;:::o;37114:114::-;37181:6;37215:5;37209:12;37199:22;;37114:114;;;:::o;37234:98::-;37285:6;37319:5;37313:12;37303:22;;37234:98;;;:::o;37338:99::-;37390:6;37424:5;37418:12;37408:22;;37338:99;;;:::o;37443:113::-;37513:4;37545;37540:3;37536:14;37528:22;;37443:113;;;:::o;37562:184::-;37661:11;37695:6;37690:3;37683:19;37735:4;37730:3;37726:14;37711:29;;37562:184;;;;:::o;37752:168::-;37835:11;37869:6;37864:3;37857:19;37909:4;37904:3;37900:14;37885:29;;37752:168;;;;:::o;37926:169::-;38010:11;38044:6;38039:3;38032:19;38084:4;38079:3;38075:14;38060:29;;37926:169;;;;:::o;38101:148::-;38203:11;38240:3;38225:18;;38101:148;;;;:::o;38255:305::-;38295:3;38314:20;38332:1;38314:20;:::i;:::-;38309:25;;38348:20;38366:1;38348:20;:::i;:::-;38343:25;;38502:1;38434:66;38430:74;38427:1;38424:81;38421:107;;;38508:18;;:::i;:::-;38421:107;38552:1;38549;38545:9;38538:16;;38255:305;;;;:::o;38566:185::-;38606:1;38623:20;38641:1;38623:20;:::i;:::-;38618:25;;38657:20;38675:1;38657:20;:::i;:::-;38652:25;;38696:1;38686:35;;38701:18;;:::i;:::-;38686:35;38743:1;38740;38736:9;38731:14;;38566:185;;;;:::o;38757:191::-;38797:4;38817:20;38835:1;38817:20;:::i;:::-;38812:25;;38851:20;38869:1;38851:20;:::i;:::-;38846:25;;38890:1;38887;38884:8;38881:34;;;38895:18;;:::i;:::-;38881:34;38940:1;38937;38933:9;38925:17;;38757:191;;;;:::o;38954:96::-;38991:7;39020:24;39038:5;39020:24;:::i;:::-;39009:35;;38954:96;;;:::o;39056:90::-;39090:7;39133:5;39126:13;39119:21;39108:32;;39056:90;;;:::o;39152:149::-;39188:7;39228:66;39221:5;39217:78;39206:89;;39152:149;;;:::o;39307:126::-;39344:7;39384:42;39377:5;39373:54;39362:65;;39307:126;;;:::o;39439:77::-;39476:7;39505:5;39494:16;;39439:77;;;:::o;39522:154::-;39606:6;39601:3;39596;39583:30;39668:1;39659:6;39654:3;39650:16;39643:27;39522:154;;;:::o;39682:307::-;39750:1;39760:113;39774:6;39771:1;39768:13;39760:113;;;39859:1;39854:3;39850:11;39844:18;39840:1;39835:3;39831:11;39824:39;39796:2;39793:1;39789:10;39784:15;;39760:113;;;39891:6;39888:1;39885:13;39882:101;;;39971:1;39962:6;39957:3;39953:16;39946:27;39882:101;39731:258;39682:307;;;:::o;39995:320::-;40039:6;40076:1;40070:4;40066:12;40056:22;;40123:1;40117:4;40113:12;40144:18;40134:81;;40200:4;40192:6;40188:17;40178:27;;40134:81;40262:2;40254:6;40251:14;40231:18;40228:38;40225:84;;;40281:18;;:::i;:::-;40225:84;40046:269;39995:320;;;:::o;40321:281::-;40404:27;40426:4;40404:27;:::i;:::-;40396:6;40392:40;40534:6;40522:10;40519:22;40498:18;40486:10;40483:34;40480:62;40477:88;;;40545:18;;:::i;:::-;40477:88;40585:10;40581:2;40574:22;40364:238;40321:281;;:::o;40608:233::-;40647:3;40670:24;40688:5;40670:24;:::i;:::-;40661:33;;40716:66;40709:5;40706:77;40703:103;;;40786:18;;:::i;:::-;40703:103;40833:1;40826:5;40822:13;40815:20;;40608:233;;;:::o;40847:176::-;40879:1;40896:20;40914:1;40896:20;:::i;:::-;40891:25;;40930:20;40948:1;40930:20;:::i;:::-;40925:25;;40969:1;40959:35;;40974:18;;:::i;:::-;40959:35;41015:1;41012;41008:9;41003:14;;40847:176;;;;:::o;41029:180::-;41077:77;41074:1;41067:88;41174:4;41171:1;41164:15;41198:4;41195:1;41188:15;41215:180;41263:77;41260:1;41253:88;41360:4;41357:1;41350:15;41384:4;41381:1;41374:15;41401:180;41449:77;41446:1;41439:88;41546:4;41543:1;41536:15;41570:4;41567:1;41560:15;41587:180;41635:77;41632:1;41625:88;41732:4;41729:1;41722:15;41756:4;41753:1;41746:15;41773:180;41821:77;41818:1;41811:88;41918:4;41915:1;41908:15;41942:4;41939:1;41932:15;41959:180;42007:77;42004:1;41997:88;42104:4;42101:1;42094:15;42128:4;42125:1;42118:15;42145:117;42254:1;42251;42244:12;42268:117;42377:1;42374;42367:12;42391:117;42500:1;42497;42490:12;42514:117;42623:1;42620;42613:12;42637:102;42678:6;42729:2;42725:7;42720:2;42713:5;42709:14;42705:28;42695:38;;42637:102;;;:::o;42745:230::-;42885:34;42881:1;42873:6;42869:14;42862:58;42954:13;42949:2;42941:6;42937:15;42930:38;42745:230;:::o;42981:237::-;43121:34;43117:1;43109:6;43105:14;43098:58;43190:20;43185:2;43177:6;43173:15;43166:45;42981:237;:::o;43224:225::-;43364:34;43360:1;43352:6;43348:14;43341:58;43433:8;43428:2;43420:6;43416:15;43409:33;43224:225;:::o;43455:171::-;43595:23;43591:1;43583:6;43579:14;43572:47;43455:171;:::o;43632:178::-;43772:30;43768:1;43760:6;43756:14;43749:54;43632:178;:::o;43816:226::-;43956:34;43952:1;43944:6;43940:14;43933:58;44025:9;44020:2;44012:6;44008:15;44001:34;43816:226;:::o;44048:170::-;44188:22;44184:1;44176:6;44172:14;44165:46;44048:170;:::o;44224:174::-;44364:26;44360:1;44352:6;44348:14;44341:50;44224:174;:::o;44404:223::-;44544:34;44540:1;44532:6;44528:14;44521:58;44613:6;44608:2;44600:6;44596:15;44589:31;44404:223;:::o;44633:175::-;44773:27;44769:1;44761:6;44757:14;44750:51;44633:175;:::o;44814:179::-;44954:31;44950:1;44942:6;44938:14;44931:55;44814:179;:::o;44999:231::-;45139:34;45135:1;45127:6;45123:14;45116:58;45208:14;45203:2;45195:6;45191:15;45184:39;44999:231;:::o;45236:243::-;45376:34;45372:1;45364:6;45360:14;45353:58;45445:26;45440:2;45432:6;45428:15;45421:51;45236:243;:::o;45485:229::-;45625:34;45621:1;45613:6;45609:14;45602:58;45694:12;45689:2;45681:6;45677:15;45670:37;45485:229;:::o;45720:228::-;45860:34;45856:1;45848:6;45844:14;45837:58;45929:11;45924:2;45916:6;45912:15;45905:36;45720:228;:::o;45954:182::-;46094:34;46090:1;46082:6;46078:14;46071:58;45954:182;:::o;46142:231::-;46282:34;46278:1;46270:6;46266:14;46259:58;46351:14;46346:2;46338:6;46334:15;46327:39;46142:231;:::o;46379:182::-;46519:34;46515:1;46507:6;46503:14;46496:58;46379:182;:::o;46567:228::-;46707:34;46703:1;46695:6;46691:14;46684:58;46776:11;46771:2;46763:6;46759:15;46752:36;46567:228;:::o;46801:179::-;46941:31;46937:1;46929:6;46925:14;46918:55;46801:179;:::o;46986:234::-;47126:34;47122:1;47114:6;47110:14;47103:58;47195:17;47190:2;47182:6;47178:15;47171:42;46986:234;:::o;47226:173::-;47366:25;47362:1;47354:6;47350:14;47343:49;47226:173;:::o;47405:220::-;47545:34;47541:1;47533:6;47529:14;47522:58;47614:3;47609:2;47601:6;47597:15;47590:28;47405:220;:::o;47631:236::-;47771:34;47767:1;47759:6;47755:14;47748:58;47840:19;47835:2;47827:6;47823:15;47816:44;47631:236;:::o;47873:170::-;48013:22;48009:1;48001:6;47997:14;47990:46;47873:170;:::o;48049:231::-;48189:34;48185:1;48177:6;48173:14;48166:58;48258:14;48253:2;48245:6;48241:15;48234:39;48049:231;:::o;48286:171::-;48426:23;48422:1;48414:6;48410:14;48403:47;48286:171;:::o;48463:170::-;48603:22;48599:1;48591:6;48587:14;48580:46;48463:170;:::o;48639:122::-;48712:24;48730:5;48712:24;:::i;:::-;48705:5;48702:35;48692:63;;48751:1;48748;48741:12;48692:63;48639:122;:::o;48767:116::-;48837:21;48852:5;48837:21;:::i;:::-;48830:5;48827:32;48817:60;;48873:1;48870;48863:12;48817:60;48767:116;:::o;48889:120::-;48961:23;48978:5;48961:23;:::i;:::-;48954:5;48951:34;48941:62;;48999:1;48996;48989:12;48941:62;48889:120;:::o;49015:122::-;49088:24;49106:5;49088:24;:::i;:::-;49081:5;49078:35;49068:63;;49127:1;49124;49117:12;49068:63;49015:122;:::o
Swarm Source
ipfs://ea27e77ce6c8a1f49aa2a50797db5be0df0f8bb814c858c202e986707b9d4140
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.