ERC-721
Overview
Max Total Supply
10 TDMNTRVLR
Holders
9
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract
Balance
1 TDMNTRVLRLoading...
Loading
Loading...
Loading
Loading...
Loading
Contract Name:
Example
Compiler Version
v0.8.15+commit.e14f2714
Contract Source Code (Solidity)
/** *Submitted for verification at ftmscan.com on 2022-06-21 */ /** *Submitted for verification at FtmScan.com on 2022-02-01 */ // SPDX-License-Identifier: GPL-3.0 // File: @openzeppelin/contracts/utils/introspection/IERC165.sol pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/utils/Strings.sol pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/contracts/utils/Address.sol pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/utils/Context.sol pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/token/ERC721/ERC721.sol pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { require(operator != _msgSender(), "ERC721: approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File: @openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol pragma solidity ^0.8.0; /** * @dev This implements an optional extension of {ERC721} defined in the EIP that adds * enumerability of all the token ids in the contract as well as all token ids owned by each * account. */ abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => mapping(uint256 => uint256)) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds"); return _ownedTokens[owner][index]; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds"); return _allTokens[index]; } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` cannot be the zero address. * - `to` cannot be the zero address. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array delete _allTokensIndex[tokenId]; _allTokens.pop(); } } // File: @openzeppelin/contracts/access/Ownable.sol pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _setOwner(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _setOwner(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } pragma solidity ^0.8.0; contract Example is ERC721Enumerable, Ownable { using Strings for uint256; // Optional mapping for token URIs mapping (uint256 => string) private _tokenURIs; // Base URI string private _baseURIextended; constructor(string memory _name, string memory _symbol) ERC721(_name, _symbol) {} function setBaseURI(string memory baseURI_) external onlyOwner() { _baseURIextended = baseURI_; } function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual { require(_exists(tokenId), "ERC721Metadata: URI set of nonexistent token"); _tokenURIs[tokenId] = _tokenURI; } function postSetTokenURI(uint256 tokenId, string memory _tokenURI) external onlyOwner { require(_exists(tokenId), "ERC721Metadata: URI set of nonexistent token"); _tokenURIs[tokenId] = _tokenURI; } function _baseURI() internal view virtual override returns (string memory) { return _baseURIextended; } function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory _tokenURI = _tokenURIs[tokenId]; string memory base = _baseURI(); // If there is no base URI, return the token URI. if (bytes(base).length == 0) { return _tokenURI; } // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked). if (bytes(_tokenURI).length > 0) { return string(abi.encodePacked(base, _tokenURI)); } // If there is a baseURI but no tokenURI, concatenate the tokenID to the baseURI. return string(abi.encodePacked(base, tokenId.toString())); } function mint( address _to, uint256 _tokenId, string memory tokenURI_ ) external onlyOwner() { _mint(_to, _tokenId); _setTokenURI(_tokenId, tokenURI_); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","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":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"string","name":"tokenURI_","type":"string"}],"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":"tokenId","type":"uint256"},{"internalType":"string","name":"_tokenURI","type":"string"}],"name":"postSetTokenURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI_","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b5060405162004195380380620041958339818101604052810190620000379190620002f2565b818181600090816200004a9190620005c2565b5080600190816200005c9190620005c2565b5050506200007f620000736200008760201b60201c565b6200008f60201b60201c565b5050620006a9565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620001be8262000173565b810181811067ffffffffffffffff82111715620001e057620001df62000184565b5b80604052505050565b6000620001f562000155565b9050620002038282620001b3565b919050565b600067ffffffffffffffff82111562000226576200022562000184565b5b620002318262000173565b9050602081019050919050565b60005b838110156200025e57808201518184015260208101905062000241565b838111156200026e576000848401525b50505050565b60006200028b620002858462000208565b620001e9565b905082815260208101848484011115620002aa57620002a96200016e565b5b620002b78482856200023e565b509392505050565b600082601f830112620002d757620002d662000169565b5b8151620002e984826020860162000274565b91505092915050565b600080604083850312156200030c576200030b6200015f565b5b600083015167ffffffffffffffff8111156200032d576200032c62000164565b5b6200033b85828601620002bf565b925050602083015167ffffffffffffffff8111156200035f576200035e62000164565b5b6200036d85828601620002bf565b9150509250929050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620003ca57607f821691505b602082108103620003e057620003df62000382565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026200044a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200040b565b6200045686836200040b565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620004a36200049d62000497846200046e565b62000478565b6200046e565b9050919050565b6000819050919050565b620004bf8362000482565b620004d7620004ce82620004aa565b84845462000418565b825550505050565b600090565b620004ee620004df565b620004fb818484620004b4565b505050565b5b81811015620005235762000517600082620004e4565b60018101905062000501565b5050565b601f82111562000572576200053c81620003e6565b6200054784620003fb565b8101602085101562000557578190505b6200056f6200056685620003fb565b83018262000500565b50505b505050565b600082821c905092915050565b6000620005976000198460080262000577565b1980831691505092915050565b6000620005b2838362000584565b9150826002028217905092915050565b620005cd8262000377565b67ffffffffffffffff811115620005e957620005e862000184565b5b620005f58254620003b1565b6200060282828562000527565b600060209050601f8311600181146200063a576000841562000625578287015190505b620006318582620005a4565b865550620006a1565b601f1984166200064a86620003e6565b60005b8281101562000674578489015182556001820191506020850194506020810190506200064d565b8683101562000694578489015162000690601f89168262000584565b8355505b6001600288020188555050505b505050505050565b613adc80620006b96000396000f3fe608060405234801561001057600080fd5b50600436106101425760003560e01c80636352211e116100b8578063a22cb4651161007c578063a22cb46514610375578063b88d4fde14610391578063c87b56dd146103ad578063d3fc9864146103dd578063e985e9c5146103f9578063f2fde38b1461042957610142565b80636352211e146102cf57806370a08231146102ff578063715018a61461032f5780638da5cb5b1461033957806395d89b411461035757610142565b806323b872dd1161010a57806323b872dd146101ff5780632f745c591461021b57806342842e0e1461024b5780634f6ccce71461026757806355f804b31461029757806357997081146102b357610142565b806301ffc9a71461014757806306fdde0314610177578063081812fc14610195578063095ea7b3146101c557806318160ddd146101e1575b600080fd5b610161600480360381019061015c919061234b565b610445565b60405161016e9190612393565b60405180910390f35b61017f6104bf565b60405161018c9190612447565b60405180910390f35b6101af60048036038101906101aa919061249f565b610551565b6040516101bc919061250d565b60405180910390f35b6101df60048036038101906101da9190612554565b6105d6565b005b6101e96106ed565b6040516101f691906125a3565b60405180910390f35b610219600480360381019061021491906125be565b6106fa565b005b61023560048036038101906102309190612554565b61075a565b60405161024291906125a3565b60405180910390f35b610265600480360381019061026091906125be565b6107ff565b005b610281600480360381019061027c919061249f565b61081f565b60405161028e91906125a3565b60405180910390f35b6102b160048036038101906102ac9190612746565b610890565b005b6102cd60048036038101906102c8919061278f565b61091f565b005b6102e960048036038101906102e4919061249f565b610a08565b6040516102f6919061250d565b60405180910390f35b610319600480360381019061031491906127eb565b610ab9565b60405161032691906125a3565b60405180910390f35b610337610b70565b005b610341610bf8565b60405161034e919061250d565b60405180910390f35b61035f610c22565b60405161036c9190612447565b60405180910390f35b61038f600480360381019061038a9190612844565b610cb4565b005b6103ab60048036038101906103a69190612925565b610e34565b005b6103c760048036038101906103c2919061249f565b610e96565b6040516103d49190612447565b60405180910390f35b6103f760048036038101906103f291906129a8565b611008565b005b610413600480360381019061040e9190612a17565b61109d565b6040516104209190612393565b60405180910390f35b610443600480360381019061043e91906127eb565b611131565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806104b857506104b782611228565b5b9050919050565b6060600080546104ce90612a86565b80601f01602080910402602001604051908101604052809291908181526020018280546104fa90612a86565b80156105475780601f1061051c57610100808354040283529160200191610547565b820191906000526020600020905b81548152906001019060200180831161052a57829003601f168201915b5050505050905090565b600061055c8261130a565b61059b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161059290612b29565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006105e182610a08565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610651576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161064890612bbb565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610670611376565b73ffffffffffffffffffffffffffffffffffffffff16148061069f575061069e81610699611376565b61109d565b5b6106de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106d590612c4d565b60405180910390fd5b6106e8838361137e565b505050565b6000600880549050905090565b61070b610705611376565b82611437565b61074a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161074190612cdf565b60405180910390fd5b610755838383611515565b505050565b600061076583610ab9565b82106107a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161079d90612d71565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b61081a83838360405180602001604052806000815250610e34565b505050565b60006108296106ed565b821061086a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086190612e03565b60405180910390fd5b6008828154811061087e5761087d612e23565b5b90600052602060002001549050919050565b610898611376565b73ffffffffffffffffffffffffffffffffffffffff166108b6610bf8565b73ffffffffffffffffffffffffffffffffffffffff161461090c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090390612e9e565b60405180910390fd5b80600c908161091b919061306a565b5050565b610927611376565b73ffffffffffffffffffffffffffffffffffffffff16610945610bf8565b73ffffffffffffffffffffffffffffffffffffffff161461099b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099290612e9e565b60405180910390fd5b6109a48261130a565b6109e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109da906131ae565b60405180910390fd5b80600b60008481526020019081526020016000209081610a03919061306a565b505050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610ab0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa790613240565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610b29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b20906132d2565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610b78611376565b73ffffffffffffffffffffffffffffffffffffffff16610b96610bf8565b73ffffffffffffffffffffffffffffffffffffffff1614610bec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be390612e9e565b60405180910390fd5b610bf66000611770565b565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054610c3190612a86565b80601f0160208091040260200160405190810160405280929190818152602001828054610c5d90612a86565b8015610caa5780601f10610c7f57610100808354040283529160200191610caa565b820191906000526020600020905b815481529060010190602001808311610c8d57829003601f168201915b5050505050905090565b610cbc611376565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610d29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d209061333e565b60405180910390fd5b8060056000610d36611376565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16610de3611376565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051610e289190612393565b60405180910390a35050565b610e45610e3f611376565b83611437565b610e84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7b90612cdf565b60405180910390fd5b610e9084848484611836565b50505050565b6060610ea18261130a565b610ee0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed7906133d0565b60405180910390fd5b6000600b60008481526020019081526020016000208054610f0090612a86565b80601f0160208091040260200160405190810160405280929190818152602001828054610f2c90612a86565b8015610f795780601f10610f4e57610100808354040283529160200191610f79565b820191906000526020600020905b815481529060010190602001808311610f5c57829003601f168201915b505050505090506000610f8a611892565b90506000815103610f9f578192505050611003565b600082511115610fd4578082604051602001610fbc92919061342c565b60405160208183030381529060405292505050611003565b80610fde85611924565b604051602001610fef92919061342c565b604051602081830303815290604052925050505b919050565b611010611376565b73ffffffffffffffffffffffffffffffffffffffff1661102e610bf8565b73ffffffffffffffffffffffffffffffffffffffff1614611084576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107b90612e9e565b60405180910390fd5b61108e8383611a84565b6110988282611c51565b505050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611139611376565b73ffffffffffffffffffffffffffffffffffffffff16611157610bf8565b73ffffffffffffffffffffffffffffffffffffffff16146111ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a490612e9e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361121c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611213906134c2565b60405180910390fd5b61122581611770565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806112f357507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611303575061130282611cbe565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166113f183610a08565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006114428261130a565b611481576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147890613554565b60405180910390fd5b600061148c83610a08565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806114fb57508373ffffffffffffffffffffffffffffffffffffffff166114e384610551565b73ffffffffffffffffffffffffffffffffffffffff16145b8061150c575061150b818561109d565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661153582610a08565b73ffffffffffffffffffffffffffffffffffffffff161461158b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611582906135e6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036115fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f190613678565b60405180910390fd5b611605838383611d28565b61161060008261137e565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461166091906136c7565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546116b791906136fb565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611841848484611515565b61184d84848484611e3a565b61188c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611883906137c3565b60405180910390fd5b50505050565b6060600c80546118a190612a86565b80601f01602080910402602001604051908101604052809291908181526020018280546118cd90612a86565b801561191a5780601f106118ef5761010080835404028352916020019161191a565b820191906000526020600020905b8154815290600101906020018083116118fd57829003601f168201915b5050505050905090565b60606000820361196b576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611a7f565b600082905060005b6000821461199d578080611986906137e3565b915050600a82611996919061385a565b9150611973565b60008167ffffffffffffffff8111156119b9576119b861261b565b5b6040519080825280601f01601f1916602001820160405280156119eb5781602001600182028036833780820191505090505b5090505b60008514611a7857600182611a0491906136c7565b9150600a85611a13919061388b565b6030611a1f91906136fb565b60f81b818381518110611a3557611a34612e23565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85611a71919061385a565b94506119ef565b8093505050505b919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611af3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aea90613908565b60405180910390fd5b611afc8161130a565b15611b3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3390613974565b60405180910390fd5b611b4860008383611d28565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611b9891906136fb565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b611c5a8261130a565b611c99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c90906131ae565b60405180910390fd5b80600b60008481526020019081526020016000209081611cb9919061306a565b505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b611d33838383611fc1565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611d7557611d7081611fc6565b611db4565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614611db357611db2838261200f565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611df657611df18161217c565b611e35565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614611e3457611e33828261224d565b5b5b505050565b6000611e5b8473ffffffffffffffffffffffffffffffffffffffff166122cc565b15611fb4578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611e84611376565b8786866040518563ffffffff1660e01b8152600401611ea694939291906139e9565b6020604051808303816000875af1925050508015611ee257506040513d601f19601f82011682018060405250810190611edf9190613a4a565b60015b611f64573d8060008114611f12576040519150601f19603f3d011682016040523d82523d6000602084013e611f17565b606091505b506000815103611f5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f53906137c3565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050611fb9565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161201c84610ab9565b61202691906136c7565b905060006007600084815260200190815260200160002054905081811461210b576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905061219091906136c7565b90506000600960008481526020019081526020016000205490506000600883815481106121c0576121bf612e23565b5b9060005260206000200154905080600883815481106121e2576121e1612e23565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548061223157612230613a77565b5b6001900381819060005260206000200160009055905550505050565b600061225883610ab9565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600080823b905060008111915050919050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612328816122f3565b811461233357600080fd5b50565b6000813590506123458161231f565b92915050565b600060208284031215612361576123606122e9565b5b600061236f84828501612336565b91505092915050565b60008115159050919050565b61238d81612378565b82525050565b60006020820190506123a86000830184612384565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156123e85780820151818401526020810190506123cd565b838111156123f7576000848401525b50505050565b6000601f19601f8301169050919050565b6000612419826123ae565b61242381856123b9565b93506124338185602086016123ca565b61243c816123fd565b840191505092915050565b60006020820190508181036000830152612461818461240e565b905092915050565b6000819050919050565b61247c81612469565b811461248757600080fd5b50565b60008135905061249981612473565b92915050565b6000602082840312156124b5576124b46122e9565b5b60006124c38482850161248a565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006124f7826124cc565b9050919050565b612507816124ec565b82525050565b600060208201905061252260008301846124fe565b92915050565b612531816124ec565b811461253c57600080fd5b50565b60008135905061254e81612528565b92915050565b6000806040838503121561256b5761256a6122e9565b5b60006125798582860161253f565b925050602061258a8582860161248a565b9150509250929050565b61259d81612469565b82525050565b60006020820190506125b86000830184612594565b92915050565b6000806000606084860312156125d7576125d66122e9565b5b60006125e58682870161253f565b93505060206125f68682870161253f565b92505060406126078682870161248a565b9150509250925092565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612653826123fd565b810181811067ffffffffffffffff821117156126725761267161261b565b5b80604052505050565b60006126856122df565b9050612691828261264a565b919050565b600067ffffffffffffffff8211156126b1576126b061261b565b5b6126ba826123fd565b9050602081019050919050565b82818337600083830152505050565b60006126e96126e484612696565b61267b565b90508281526020810184848401111561270557612704612616565b5b6127108482856126c7565b509392505050565b600082601f83011261272d5761272c612611565b5b813561273d8482602086016126d6565b91505092915050565b60006020828403121561275c5761275b6122e9565b5b600082013567ffffffffffffffff81111561277a576127796122ee565b5b61278684828501612718565b91505092915050565b600080604083850312156127a6576127a56122e9565b5b60006127b48582860161248a565b925050602083013567ffffffffffffffff8111156127d5576127d46122ee565b5b6127e185828601612718565b9150509250929050565b600060208284031215612801576128006122e9565b5b600061280f8482850161253f565b91505092915050565b61282181612378565b811461282c57600080fd5b50565b60008135905061283e81612818565b92915050565b6000806040838503121561285b5761285a6122e9565b5b60006128698582860161253f565b925050602061287a8582860161282f565b9150509250929050565b600067ffffffffffffffff82111561289f5761289e61261b565b5b6128a8826123fd565b9050602081019050919050565b60006128c86128c384612884565b61267b565b9050828152602081018484840111156128e4576128e3612616565b5b6128ef8482856126c7565b509392505050565b600082601f83011261290c5761290b612611565b5b813561291c8482602086016128b5565b91505092915050565b6000806000806080858703121561293f5761293e6122e9565b5b600061294d8782880161253f565b945050602061295e8782880161253f565b935050604061296f8782880161248a565b925050606085013567ffffffffffffffff8111156129905761298f6122ee565b5b61299c878288016128f7565b91505092959194509250565b6000806000606084860312156129c1576129c06122e9565b5b60006129cf8682870161253f565b93505060206129e08682870161248a565b925050604084013567ffffffffffffffff811115612a0157612a006122ee565b5b612a0d86828701612718565b9150509250925092565b60008060408385031215612a2e57612a2d6122e9565b5b6000612a3c8582860161253f565b9250506020612a4d8582860161253f565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612a9e57607f821691505b602082108103612ab157612ab0612a57565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000612b13602c836123b9565b9150612b1e82612ab7565b604082019050919050565b60006020820190508181036000830152612b4281612b06565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000612ba56021836123b9565b9150612bb082612b49565b604082019050919050565b60006020820190508181036000830152612bd481612b98565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b6000612c376038836123b9565b9150612c4282612bdb565b604082019050919050565b60006020820190508181036000830152612c6681612c2a565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b6000612cc96031836123b9565b9150612cd482612c6d565b604082019050919050565b60006020820190508181036000830152612cf881612cbc565b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b6000612d5b602b836123b9565b9150612d6682612cff565b604082019050919050565b60006020820190508181036000830152612d8a81612d4e565b9050919050565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b6000612ded602c836123b9565b9150612df882612d91565b604082019050919050565b60006020820190508181036000830152612e1c81612de0565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612e886020836123b9565b9150612e9382612e52565b602082019050919050565b60006020820190508181036000830152612eb781612e7b565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302612f207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82612ee3565b612f2a8683612ee3565b95508019841693508086168417925050509392505050565b6000819050919050565b6000612f67612f62612f5d84612469565b612f42565b612469565b9050919050565b6000819050919050565b612f8183612f4c565b612f95612f8d82612f6e565b848454612ef0565b825550505050565b600090565b612faa612f9d565b612fb5818484612f78565b505050565b5b81811015612fd957612fce600082612fa2565b600181019050612fbb565b5050565b601f82111561301e57612fef81612ebe565b612ff884612ed3565b81016020851015613007578190505b61301b61301385612ed3565b830182612fba565b50505b505050565b600082821c905092915050565b600061304160001984600802613023565b1980831691505092915050565b600061305a8383613030565b9150826002028217905092915050565b613073826123ae565b67ffffffffffffffff81111561308c5761308b61261b565b5b6130968254612a86565b6130a1828285612fdd565b600060209050601f8311600181146130d457600084156130c2578287015190505b6130cc858261304e565b865550613134565b601f1984166130e286612ebe565b60005b8281101561310a578489015182556001820191506020850194506020810190506130e5565b868310156131275784890151613123601f891682613030565b8355505b6001600288020188555050505b505050505050565b7f4552433732314d657461646174613a2055524920736574206f66206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000613198602c836123b9565b91506131a38261313c565b604082019050919050565b600060208201905081810360008301526131c78161318b565b9050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b600061322a6029836123b9565b9150613235826131ce565b604082019050919050565b600060208201905081810360008301526132598161321d565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b60006132bc602a836123b9565b91506132c782613260565b604082019050919050565b600060208201905081810360008301526132eb816132af565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b60006133286019836123b9565b9150613333826132f2565b602082019050919050565b600060208201905081810360008301526133578161331b565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b60006133ba602f836123b9565b91506133c58261335e565b604082019050919050565b600060208201905081810360008301526133e9816133ad565b9050919050565b600081905092915050565b6000613406826123ae565b61341081856133f0565b93506134208185602086016123ca565b80840191505092915050565b600061343882856133fb565b915061344482846133fb565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006134ac6026836123b9565b91506134b782613450565b604082019050919050565b600060208201905081810360008301526134db8161349f565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b600061353e602c836123b9565b9150613549826134e2565b604082019050919050565b6000602082019050818103600083015261356d81613531565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b60006135d06029836123b9565b91506135db82613574565b604082019050919050565b600060208201905081810360008301526135ff816135c3565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006136626024836123b9565b915061366d82613606565b604082019050919050565b6000602082019050818103600083015261369181613655565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006136d282612469565b91506136dd83612469565b9250828210156136f0576136ef613698565b5b828203905092915050565b600061370682612469565b915061371183612469565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561374657613745613698565b5b828201905092915050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b60006137ad6032836123b9565b91506137b882613751565b604082019050919050565b600060208201905081810360008301526137dc816137a0565b9050919050565b60006137ee82612469565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036138205761381f613698565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061386582612469565b915061387083612469565b9250826138805761387f61382b565b5b828204905092915050565b600061389682612469565b91506138a183612469565b9250826138b1576138b061382b565b5b828206905092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b60006138f26020836123b9565b91506138fd826138bc565b602082019050919050565b60006020820190508181036000830152613921816138e5565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b600061395e601c836123b9565b915061396982613928565b602082019050919050565b6000602082019050818103600083015261398d81613951565b9050919050565b600081519050919050565b600082825260208201905092915050565b60006139bb82613994565b6139c5818561399f565b93506139d58185602086016123ca565b6139de816123fd565b840191505092915050565b60006080820190506139fe60008301876124fe565b613a0b60208301866124fe565b613a186040830185612594565b8181036060830152613a2a81846139b0565b905095945050505050565b600081519050613a448161231f565b92915050565b600060208284031215613a6057613a5f6122e9565b5b6000613a6e84828501613a35565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea2646970667358221220a72ff043dcf5e1685352b6c5497aecd4691b2c9e909bf78ec71df943750e6ef964736f6c634300080f003300000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000001454696e794461656d6f6e54726176656c6c657273000000000000000000000000000000000000000000000000000000000000000000000000000000000000000954444d4e5452564c520000000000000000000000000000000000000000000000
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101425760003560e01c80636352211e116100b8578063a22cb4651161007c578063a22cb46514610375578063b88d4fde14610391578063c87b56dd146103ad578063d3fc9864146103dd578063e985e9c5146103f9578063f2fde38b1461042957610142565b80636352211e146102cf57806370a08231146102ff578063715018a61461032f5780638da5cb5b1461033957806395d89b411461035757610142565b806323b872dd1161010a57806323b872dd146101ff5780632f745c591461021b57806342842e0e1461024b5780634f6ccce71461026757806355f804b31461029757806357997081146102b357610142565b806301ffc9a71461014757806306fdde0314610177578063081812fc14610195578063095ea7b3146101c557806318160ddd146101e1575b600080fd5b610161600480360381019061015c919061234b565b610445565b60405161016e9190612393565b60405180910390f35b61017f6104bf565b60405161018c9190612447565b60405180910390f35b6101af60048036038101906101aa919061249f565b610551565b6040516101bc919061250d565b60405180910390f35b6101df60048036038101906101da9190612554565b6105d6565b005b6101e96106ed565b6040516101f691906125a3565b60405180910390f35b610219600480360381019061021491906125be565b6106fa565b005b61023560048036038101906102309190612554565b61075a565b60405161024291906125a3565b60405180910390f35b610265600480360381019061026091906125be565b6107ff565b005b610281600480360381019061027c919061249f565b61081f565b60405161028e91906125a3565b60405180910390f35b6102b160048036038101906102ac9190612746565b610890565b005b6102cd60048036038101906102c8919061278f565b61091f565b005b6102e960048036038101906102e4919061249f565b610a08565b6040516102f6919061250d565b60405180910390f35b610319600480360381019061031491906127eb565b610ab9565b60405161032691906125a3565b60405180910390f35b610337610b70565b005b610341610bf8565b60405161034e919061250d565b60405180910390f35b61035f610c22565b60405161036c9190612447565b60405180910390f35b61038f600480360381019061038a9190612844565b610cb4565b005b6103ab60048036038101906103a69190612925565b610e34565b005b6103c760048036038101906103c2919061249f565b610e96565b6040516103d49190612447565b60405180910390f35b6103f760048036038101906103f291906129a8565b611008565b005b610413600480360381019061040e9190612a17565b61109d565b6040516104209190612393565b60405180910390f35b610443600480360381019061043e91906127eb565b611131565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806104b857506104b782611228565b5b9050919050565b6060600080546104ce90612a86565b80601f01602080910402602001604051908101604052809291908181526020018280546104fa90612a86565b80156105475780601f1061051c57610100808354040283529160200191610547565b820191906000526020600020905b81548152906001019060200180831161052a57829003601f168201915b5050505050905090565b600061055c8261130a565b61059b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161059290612b29565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006105e182610a08565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610651576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161064890612bbb565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610670611376565b73ffffffffffffffffffffffffffffffffffffffff16148061069f575061069e81610699611376565b61109d565b5b6106de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106d590612c4d565b60405180910390fd5b6106e8838361137e565b505050565b6000600880549050905090565b61070b610705611376565b82611437565b61074a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161074190612cdf565b60405180910390fd5b610755838383611515565b505050565b600061076583610ab9565b82106107a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161079d90612d71565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b61081a83838360405180602001604052806000815250610e34565b505050565b60006108296106ed565b821061086a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086190612e03565b60405180910390fd5b6008828154811061087e5761087d612e23565b5b90600052602060002001549050919050565b610898611376565b73ffffffffffffffffffffffffffffffffffffffff166108b6610bf8565b73ffffffffffffffffffffffffffffffffffffffff161461090c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090390612e9e565b60405180910390fd5b80600c908161091b919061306a565b5050565b610927611376565b73ffffffffffffffffffffffffffffffffffffffff16610945610bf8565b73ffffffffffffffffffffffffffffffffffffffff161461099b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099290612e9e565b60405180910390fd5b6109a48261130a565b6109e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109da906131ae565b60405180910390fd5b80600b60008481526020019081526020016000209081610a03919061306a565b505050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610ab0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa790613240565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610b29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b20906132d2565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610b78611376565b73ffffffffffffffffffffffffffffffffffffffff16610b96610bf8565b73ffffffffffffffffffffffffffffffffffffffff1614610bec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be390612e9e565b60405180910390fd5b610bf66000611770565b565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054610c3190612a86565b80601f0160208091040260200160405190810160405280929190818152602001828054610c5d90612a86565b8015610caa5780601f10610c7f57610100808354040283529160200191610caa565b820191906000526020600020905b815481529060010190602001808311610c8d57829003601f168201915b5050505050905090565b610cbc611376565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610d29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d209061333e565b60405180910390fd5b8060056000610d36611376565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16610de3611376565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051610e289190612393565b60405180910390a35050565b610e45610e3f611376565b83611437565b610e84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7b90612cdf565b60405180910390fd5b610e9084848484611836565b50505050565b6060610ea18261130a565b610ee0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed7906133d0565b60405180910390fd5b6000600b60008481526020019081526020016000208054610f0090612a86565b80601f0160208091040260200160405190810160405280929190818152602001828054610f2c90612a86565b8015610f795780601f10610f4e57610100808354040283529160200191610f79565b820191906000526020600020905b815481529060010190602001808311610f5c57829003601f168201915b505050505090506000610f8a611892565b90506000815103610f9f578192505050611003565b600082511115610fd4578082604051602001610fbc92919061342c565b60405160208183030381529060405292505050611003565b80610fde85611924565b604051602001610fef92919061342c565b604051602081830303815290604052925050505b919050565b611010611376565b73ffffffffffffffffffffffffffffffffffffffff1661102e610bf8565b73ffffffffffffffffffffffffffffffffffffffff1614611084576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107b90612e9e565b60405180910390fd5b61108e8383611a84565b6110988282611c51565b505050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611139611376565b73ffffffffffffffffffffffffffffffffffffffff16611157610bf8565b73ffffffffffffffffffffffffffffffffffffffff16146111ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a490612e9e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361121c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611213906134c2565b60405180910390fd5b61122581611770565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806112f357507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611303575061130282611cbe565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166113f183610a08565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006114428261130a565b611481576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147890613554565b60405180910390fd5b600061148c83610a08565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806114fb57508373ffffffffffffffffffffffffffffffffffffffff166114e384610551565b73ffffffffffffffffffffffffffffffffffffffff16145b8061150c575061150b818561109d565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661153582610a08565b73ffffffffffffffffffffffffffffffffffffffff161461158b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611582906135e6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036115fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f190613678565b60405180910390fd5b611605838383611d28565b61161060008261137e565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461166091906136c7565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546116b791906136fb565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611841848484611515565b61184d84848484611e3a565b61188c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611883906137c3565b60405180910390fd5b50505050565b6060600c80546118a190612a86565b80601f01602080910402602001604051908101604052809291908181526020018280546118cd90612a86565b801561191a5780601f106118ef5761010080835404028352916020019161191a565b820191906000526020600020905b8154815290600101906020018083116118fd57829003601f168201915b5050505050905090565b60606000820361196b576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611a7f565b600082905060005b6000821461199d578080611986906137e3565b915050600a82611996919061385a565b9150611973565b60008167ffffffffffffffff8111156119b9576119b861261b565b5b6040519080825280601f01601f1916602001820160405280156119eb5781602001600182028036833780820191505090505b5090505b60008514611a7857600182611a0491906136c7565b9150600a85611a13919061388b565b6030611a1f91906136fb565b60f81b818381518110611a3557611a34612e23565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85611a71919061385a565b94506119ef565b8093505050505b919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611af3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aea90613908565b60405180910390fd5b611afc8161130a565b15611b3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3390613974565b60405180910390fd5b611b4860008383611d28565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611b9891906136fb565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b611c5a8261130a565b611c99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c90906131ae565b60405180910390fd5b80600b60008481526020019081526020016000209081611cb9919061306a565b505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b611d33838383611fc1565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611d7557611d7081611fc6565b611db4565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614611db357611db2838261200f565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611df657611df18161217c565b611e35565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614611e3457611e33828261224d565b5b5b505050565b6000611e5b8473ffffffffffffffffffffffffffffffffffffffff166122cc565b15611fb4578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611e84611376565b8786866040518563ffffffff1660e01b8152600401611ea694939291906139e9565b6020604051808303816000875af1925050508015611ee257506040513d601f19601f82011682018060405250810190611edf9190613a4a565b60015b611f64573d8060008114611f12576040519150601f19603f3d011682016040523d82523d6000602084013e611f17565b606091505b506000815103611f5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f53906137c3565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050611fb9565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161201c84610ab9565b61202691906136c7565b905060006007600084815260200190815260200160002054905081811461210b576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905061219091906136c7565b90506000600960008481526020019081526020016000205490506000600883815481106121c0576121bf612e23565b5b9060005260206000200154905080600883815481106121e2576121e1612e23565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548061223157612230613a77565b5b6001900381819060005260206000200160009055905550505050565b600061225883610ab9565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600080823b905060008111915050919050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612328816122f3565b811461233357600080fd5b50565b6000813590506123458161231f565b92915050565b600060208284031215612361576123606122e9565b5b600061236f84828501612336565b91505092915050565b60008115159050919050565b61238d81612378565b82525050565b60006020820190506123a86000830184612384565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156123e85780820151818401526020810190506123cd565b838111156123f7576000848401525b50505050565b6000601f19601f8301169050919050565b6000612419826123ae565b61242381856123b9565b93506124338185602086016123ca565b61243c816123fd565b840191505092915050565b60006020820190508181036000830152612461818461240e565b905092915050565b6000819050919050565b61247c81612469565b811461248757600080fd5b50565b60008135905061249981612473565b92915050565b6000602082840312156124b5576124b46122e9565b5b60006124c38482850161248a565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006124f7826124cc565b9050919050565b612507816124ec565b82525050565b600060208201905061252260008301846124fe565b92915050565b612531816124ec565b811461253c57600080fd5b50565b60008135905061254e81612528565b92915050565b6000806040838503121561256b5761256a6122e9565b5b60006125798582860161253f565b925050602061258a8582860161248a565b9150509250929050565b61259d81612469565b82525050565b60006020820190506125b86000830184612594565b92915050565b6000806000606084860312156125d7576125d66122e9565b5b60006125e58682870161253f565b93505060206125f68682870161253f565b92505060406126078682870161248a565b9150509250925092565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612653826123fd565b810181811067ffffffffffffffff821117156126725761267161261b565b5b80604052505050565b60006126856122df565b9050612691828261264a565b919050565b600067ffffffffffffffff8211156126b1576126b061261b565b5b6126ba826123fd565b9050602081019050919050565b82818337600083830152505050565b60006126e96126e484612696565b61267b565b90508281526020810184848401111561270557612704612616565b5b6127108482856126c7565b509392505050565b600082601f83011261272d5761272c612611565b5b813561273d8482602086016126d6565b91505092915050565b60006020828403121561275c5761275b6122e9565b5b600082013567ffffffffffffffff81111561277a576127796122ee565b5b61278684828501612718565b91505092915050565b600080604083850312156127a6576127a56122e9565b5b60006127b48582860161248a565b925050602083013567ffffffffffffffff8111156127d5576127d46122ee565b5b6127e185828601612718565b9150509250929050565b600060208284031215612801576128006122e9565b5b600061280f8482850161253f565b91505092915050565b61282181612378565b811461282c57600080fd5b50565b60008135905061283e81612818565b92915050565b6000806040838503121561285b5761285a6122e9565b5b60006128698582860161253f565b925050602061287a8582860161282f565b9150509250929050565b600067ffffffffffffffff82111561289f5761289e61261b565b5b6128a8826123fd565b9050602081019050919050565b60006128c86128c384612884565b61267b565b9050828152602081018484840111156128e4576128e3612616565b5b6128ef8482856126c7565b509392505050565b600082601f83011261290c5761290b612611565b5b813561291c8482602086016128b5565b91505092915050565b6000806000806080858703121561293f5761293e6122e9565b5b600061294d8782880161253f565b945050602061295e8782880161253f565b935050604061296f8782880161248a565b925050606085013567ffffffffffffffff8111156129905761298f6122ee565b5b61299c878288016128f7565b91505092959194509250565b6000806000606084860312156129c1576129c06122e9565b5b60006129cf8682870161253f565b93505060206129e08682870161248a565b925050604084013567ffffffffffffffff811115612a0157612a006122ee565b5b612a0d86828701612718565b9150509250925092565b60008060408385031215612a2e57612a2d6122e9565b5b6000612a3c8582860161253f565b9250506020612a4d8582860161253f565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612a9e57607f821691505b602082108103612ab157612ab0612a57565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000612b13602c836123b9565b9150612b1e82612ab7565b604082019050919050565b60006020820190508181036000830152612b4281612b06565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000612ba56021836123b9565b9150612bb082612b49565b604082019050919050565b60006020820190508181036000830152612bd481612b98565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b6000612c376038836123b9565b9150612c4282612bdb565b604082019050919050565b60006020820190508181036000830152612c6681612c2a565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b6000612cc96031836123b9565b9150612cd482612c6d565b604082019050919050565b60006020820190508181036000830152612cf881612cbc565b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b6000612d5b602b836123b9565b9150612d6682612cff565b604082019050919050565b60006020820190508181036000830152612d8a81612d4e565b9050919050565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b6000612ded602c836123b9565b9150612df882612d91565b604082019050919050565b60006020820190508181036000830152612e1c81612de0565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612e886020836123b9565b9150612e9382612e52565b602082019050919050565b60006020820190508181036000830152612eb781612e7b565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302612f207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82612ee3565b612f2a8683612ee3565b95508019841693508086168417925050509392505050565b6000819050919050565b6000612f67612f62612f5d84612469565b612f42565b612469565b9050919050565b6000819050919050565b612f8183612f4c565b612f95612f8d82612f6e565b848454612ef0565b825550505050565b600090565b612faa612f9d565b612fb5818484612f78565b505050565b5b81811015612fd957612fce600082612fa2565b600181019050612fbb565b5050565b601f82111561301e57612fef81612ebe565b612ff884612ed3565b81016020851015613007578190505b61301b61301385612ed3565b830182612fba565b50505b505050565b600082821c905092915050565b600061304160001984600802613023565b1980831691505092915050565b600061305a8383613030565b9150826002028217905092915050565b613073826123ae565b67ffffffffffffffff81111561308c5761308b61261b565b5b6130968254612a86565b6130a1828285612fdd565b600060209050601f8311600181146130d457600084156130c2578287015190505b6130cc858261304e565b865550613134565b601f1984166130e286612ebe565b60005b8281101561310a578489015182556001820191506020850194506020810190506130e5565b868310156131275784890151613123601f891682613030565b8355505b6001600288020188555050505b505050505050565b7f4552433732314d657461646174613a2055524920736574206f66206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000613198602c836123b9565b91506131a38261313c565b604082019050919050565b600060208201905081810360008301526131c78161318b565b9050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b600061322a6029836123b9565b9150613235826131ce565b604082019050919050565b600060208201905081810360008301526132598161321d565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b60006132bc602a836123b9565b91506132c782613260565b604082019050919050565b600060208201905081810360008301526132eb816132af565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b60006133286019836123b9565b9150613333826132f2565b602082019050919050565b600060208201905081810360008301526133578161331b565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b60006133ba602f836123b9565b91506133c58261335e565b604082019050919050565b600060208201905081810360008301526133e9816133ad565b9050919050565b600081905092915050565b6000613406826123ae565b61341081856133f0565b93506134208185602086016123ca565b80840191505092915050565b600061343882856133fb565b915061344482846133fb565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006134ac6026836123b9565b91506134b782613450565b604082019050919050565b600060208201905081810360008301526134db8161349f565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b600061353e602c836123b9565b9150613549826134e2565b604082019050919050565b6000602082019050818103600083015261356d81613531565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b60006135d06029836123b9565b91506135db82613574565b604082019050919050565b600060208201905081810360008301526135ff816135c3565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006136626024836123b9565b915061366d82613606565b604082019050919050565b6000602082019050818103600083015261369181613655565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006136d282612469565b91506136dd83612469565b9250828210156136f0576136ef613698565b5b828203905092915050565b600061370682612469565b915061371183612469565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561374657613745613698565b5b828201905092915050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b60006137ad6032836123b9565b91506137b882613751565b604082019050919050565b600060208201905081810360008301526137dc816137a0565b9050919050565b60006137ee82612469565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036138205761381f613698565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061386582612469565b915061387083612469565b9250826138805761387f61382b565b5b828204905092915050565b600061389682612469565b91506138a183612469565b9250826138b1576138b061382b565b5b828206905092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b60006138f26020836123b9565b91506138fd826138bc565b602082019050919050565b60006020820190508181036000830152613921816138e5565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b600061395e601c836123b9565b915061396982613928565b602082019050919050565b6000602082019050818103600083015261398d81613951565b9050919050565b600081519050919050565b600082825260208201905092915050565b60006139bb82613994565b6139c5818561399f565b93506139d58185602086016123ca565b6139de816123fd565b840191505092915050565b60006080820190506139fe60008301876124fe565b613a0b60208301866124fe565b613a186040830185612594565b8181036060830152613a2a81846139b0565b905095945050505050565b600081519050613a448161231f565b92915050565b600060208284031215613a6057613a5f6122e9565b5b6000613a6e84828501613a35565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea2646970667358221220a72ff043dcf5e1685352b6c5497aecd4691b2c9e909bf78ec71df943750e6ef964736f6c634300080f0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000001454696e794461656d6f6e54726176656c6c657273000000000000000000000000000000000000000000000000000000000000000000000000000000000000000954444d4e5452564c520000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _name (string): TinyDaemonTravellers
Arg [1] : _symbol (string): TDMNTRVLR
-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000014
Arg [3] : 54696e794461656d6f6e54726176656c6c657273000000000000000000000000
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000009
Arg [5] : 54444d4e5452564c520000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
43188:2315:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34736:224;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22628:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24187:221;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23710:411;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35376:113;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25077:339;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35044:256;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25487:185;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35566:233;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43594:119;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43980:232;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22322:239;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22052:208;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42525:94;;;:::i;:::-;;41874:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22797:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24480:295;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25743:328;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44377:861;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45260:236;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24846:164;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42774:192;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34736:224;34838:4;34877:35;34862:50;;;:11;:50;;;;:90;;;;34916:36;34940:11;34916:23;:36::i;:::-;34862:90;34855:97;;34736:224;;;:::o;22628:100::-;22682:13;22715:5;22708:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22628:100;:::o;24187:221::-;24263:7;24291:16;24299:7;24291;:16::i;:::-;24283:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;24376:15;:24;24392:7;24376:24;;;;;;;;;;;;;;;;;;;;;24369:31;;24187:221;;;:::o;23710:411::-;23791:13;23807:23;23822:7;23807:14;:23::i;:::-;23791:39;;23855:5;23849:11;;:2;:11;;;23841:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;23949:5;23933:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;23958:37;23975:5;23982:12;:10;:12::i;:::-;23958:16;:37::i;:::-;23933:62;23911:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;24092:21;24101:2;24105:7;24092:8;:21::i;:::-;23780:341;23710:411;;:::o;35376:113::-;35437:7;35464:10;:17;;;;35457:24;;35376:113;:::o;25077:339::-;25272:41;25291:12;:10;:12::i;:::-;25305:7;25272:18;:41::i;:::-;25264:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;25380:28;25390:4;25396:2;25400:7;25380:9;:28::i;:::-;25077:339;;;:::o;35044:256::-;35141:7;35177:23;35194:5;35177:16;:23::i;:::-;35169:5;:31;35161:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;35266:12;:19;35279:5;35266:19;;;;;;;;;;;;;;;:26;35286:5;35266:26;;;;;;;;;;;;35259:33;;35044:256;;;;:::o;25487:185::-;25625:39;25642:4;25648:2;25652:7;25625:39;;;;;;;;;;;;:16;:39::i;:::-;25487:185;;;:::o;35566:233::-;35641:7;35677:30;:28;:30::i;:::-;35669:5;:38;35661:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;35774:10;35785:5;35774:17;;;;;;;;:::i;:::-;;;;;;;;;;35767:24;;35566:233;;;:::o;43594:119::-;42105:12;:10;:12::i;:::-;42094:23;;:7;:5;:7::i;:::-;:23;;;42086:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43693:8:::1;43674:16;:27;;;;;;:::i;:::-;;43594:119:::0;:::o;43980:232::-;42105:12;:10;:12::i;:::-;42094:23;;:7;:5;:7::i;:::-;:23;;;42086:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44089:16:::1;44097:7;44089;:16::i;:::-;44081:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;44191:9;44169:10;:19;44180:7;44169:19;;;;;;;;;;;:31;;;;;;:::i;:::-;;43980:232:::0;;:::o;22322:239::-;22394:7;22414:13;22430:7;:16;22438:7;22430:16;;;;;;;;;;;;;;;;;;;;;22414:32;;22482:1;22465:19;;:5;:19;;;22457:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;22548:5;22541:12;;;22322:239;;;:::o;22052:208::-;22124:7;22169:1;22152:19;;:5;:19;;;22144:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;22236:9;:16;22246:5;22236:16;;;;;;;;;;;;;;;;22229:23;;22052:208;;;:::o;42525:94::-;42105:12;:10;:12::i;:::-;42094:23;;:7;:5;:7::i;:::-;:23;;;42086:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42590:21:::1;42608:1;42590:9;:21::i;:::-;42525:94::o:0;41874:87::-;41920:7;41947:6;;;;;;;;;;;41940:13;;41874:87;:::o;22797:104::-;22853:13;22886:7;22879:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22797:104;:::o;24480:295::-;24595:12;:10;:12::i;:::-;24583:24;;:8;:24;;;24575:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;24695:8;24650:18;:32;24669:12;:10;:12::i;:::-;24650:32;;;;;;;;;;;;;;;:42;24683:8;24650:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;24748:8;24719:48;;24734:12;:10;:12::i;:::-;24719:48;;;24758:8;24719:48;;;;;;:::i;:::-;;;;;;;;24480:295;;:::o;25743:328::-;25918:41;25937:12;:10;:12::i;:::-;25951:7;25918:18;:41::i;:::-;25910:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;26024:39;26038:4;26044:2;26048:7;26057:5;26024:13;:39::i;:::-;25743:328;;;;:::o;44377:861::-;44450:13;44488:16;44496:7;44488;:16::i;:::-;44480:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;44573:23;44599:10;:19;44610:7;44599:19;;;;;;;;;;;44573:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44633:18;44654:10;:8;:10::i;:::-;44633:31;;44782:1;44766:4;44760:18;:23;44756:80;;44811:9;44804:16;;;;;;44756:80;44974:1;44954:9;44948:23;:27;44944:116;;;45027:4;45033:9;45010:33;;;;;;;;;:::i;:::-;;;;;;;;;;;;;44996:48;;;;;;44944:116;45200:4;45206:18;:7;:16;:18::i;:::-;45183:42;;;;;;;;;:::i;:::-;;;;;;;;;;;;;45169:57;;;;44377:861;;;;:::o;45260:236::-;42105:12;:10;:12::i;:::-;42094:23;;:7;:5;:7::i;:::-;:23;;;42086:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45416:20:::1;45422:3;45427:8;45416:5;:20::i;:::-;45451:33;45464:8;45474:9;45451:12;:33::i;:::-;45260:236:::0;;;:::o;24846:164::-;24943:4;24967:18;:25;24986:5;24967:25;;;;;;;;;;;;;;;:35;24993:8;24967:35;;;;;;;;;;;;;;;;;;;;;;;;;24960:42;;24846:164;;;;:::o;42774:192::-;42105:12;:10;:12::i;:::-;42094:23;;:7;:5;:7::i;:::-;:23;;;42086:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42883:1:::1;42863:22;;:8;:22;;::::0;42855:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;42939:19;42949:8;42939:9;:19::i;:::-;42774:192:::0;:::o;21683:305::-;21785:4;21837:25;21822:40;;;:11;:40;;;;:105;;;;21894:33;21879:48;;;:11;:48;;;;21822:105;:158;;;;21944:36;21968:11;21944:23;:36::i;:::-;21822:158;21802:178;;21683:305;;;:::o;27581:127::-;27646:4;27698:1;27670:30;;:7;:16;27678:7;27670:16;;;;;;;;;;;;;;;;;;;;;:30;;;;27663:37;;27581:127;;;:::o;20157:98::-;20210:7;20237:10;20230:17;;20157:98;:::o;31563:174::-;31665:2;31638:15;:24;31654:7;31638:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;31721:7;31717:2;31683:46;;31692:23;31707:7;31692:14;:23::i;:::-;31683:46;;;;;;;;;;;;31563:174;;:::o;27875:348::-;27968:4;27993:16;28001:7;27993;:16::i;:::-;27985:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;28069:13;28085:23;28100:7;28085:14;:23::i;:::-;28069:39;;28138:5;28127:16;;:7;:16;;;:51;;;;28171:7;28147:31;;:20;28159:7;28147:11;:20::i;:::-;:31;;;28127:51;:87;;;;28182:32;28199:5;28206:7;28182:16;:32::i;:::-;28127:87;28119:96;;;27875:348;;;;:::o;30867:578::-;31026:4;30999:31;;:23;31014:7;30999:14;:23::i;:::-;:31;;;30991:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;31109:1;31095:16;;:2;:16;;;31087:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;31165:39;31186:4;31192:2;31196:7;31165:20;:39::i;:::-;31269:29;31286:1;31290:7;31269:8;:29::i;:::-;31330:1;31311:9;:15;31321:4;31311:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;31359:1;31342:9;:13;31352:2;31342:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;31390:2;31371:7;:16;31379:7;31371:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;31429:7;31425:2;31410:27;;31419:4;31410:27;;;;;;;;;;;;30867:578;;;:::o;42974:173::-;43030:16;43049:6;;;;;;;;;;;43030:25;;43075:8;43066:6;;:17;;;;;;;;;;;;;;;;;;43130:8;43099:40;;43120:8;43099:40;;;;;;;;;;;;43019:128;42974:173;:::o;26953:315::-;27110:28;27120:4;27126:2;27130:7;27110:9;:28::i;:::-;27157:48;27180:4;27186:2;27190:7;27199:5;27157:22;:48::i;:::-;27149:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;26953:315;;;;:::o;44232:125::-;44292:13;44329:16;44322:23;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44232:125;:::o;7989:723::-;8045:13;8275:1;8266:5;:10;8262:53;;8293:10;;;;;;;;;;;;;;;;;;;;;8262:53;8325:12;8340:5;8325:20;;8356:14;8381:78;8396:1;8388:4;:9;8381:78;;8414:8;;;;;:::i;:::-;;;;8445:2;8437:10;;;;;:::i;:::-;;;8381:78;;;8469:19;8501:6;8491:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8469:39;;8519:154;8535:1;8526:5;:10;8519:154;;8563:1;8553:11;;;;;:::i;:::-;;;8630:2;8622:5;:10;;;;:::i;:::-;8609:2;:24;;;;:::i;:::-;8596:39;;8579:6;8586;8579:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;8659:2;8650:11;;;;;:::i;:::-;;;8519:154;;;8697:6;8683:21;;;;;7989:723;;;;:::o;29559:382::-;29653:1;29639:16;;:2;:16;;;29631:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;29712:16;29720:7;29712;:16::i;:::-;29711:17;29703:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;29774:45;29803:1;29807:2;29811:7;29774:20;:45::i;:::-;29849:1;29832:9;:13;29842:2;29832:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;29880:2;29861:7;:16;29869:7;29861:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;29925:7;29921:2;29900:33;;29917:1;29900:33;;;;;;;;;;;;29559:382;;:::o;43733:227::-;43837:16;43845:7;43837;:16::i;:::-;43829:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;43939:9;43917:10;:19;43928:7;43917:19;;;;;;;;;;;:31;;;;;;:::i;:::-;;43733:227;;:::o;7514:157::-;7599:4;7638:25;7623:40;;;:11;:40;;;;7616:47;;7514:157;;;:::o;36412:589::-;36556:45;36583:4;36589:2;36593:7;36556:26;:45::i;:::-;36634:1;36618:18;;:4;:18;;;36614:187;;36653:40;36685:7;36653:31;:40::i;:::-;36614:187;;;36723:2;36715:10;;:4;:10;;;36711:90;;36742:47;36775:4;36781:7;36742:32;:47::i;:::-;36711:90;36614:187;36829:1;36815:16;;:2;:16;;;36811:183;;36848:45;36885:7;36848:36;:45::i;:::-;36811:183;;;36921:4;36915:10;;:2;:10;;;36911:83;;36942:40;36970:2;36974:7;36942:27;:40::i;:::-;36911:83;36811:183;36412:589;;;:::o;32302:799::-;32457:4;32478:15;:2;:13;;;:15::i;:::-;32474:620;;;32530:2;32514:36;;;32551:12;:10;:12::i;:::-;32565:4;32571:7;32580:5;32514:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;32510:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32773:1;32756:6;:13;:18;32752:272;;32799:60;;;;;;;;;;:::i;:::-;;;;;;;;32752:272;32974:6;32968:13;32959:6;32955:2;32951:15;32944:38;32510:529;32647:41;;;32637:51;;;:6;:51;;;;32630:58;;;;;32474:620;33078:4;33071:11;;32302:799;;;;;;;:::o;33673:126::-;;;;:::o;37724:164::-;37828:10;:17;;;;37801:15;:24;37817:7;37801:24;;;;;;;;;;;:44;;;;37856:10;37872:7;37856:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37724:164;:::o;38515:988::-;38781:22;38831:1;38806:22;38823:4;38806:16;:22::i;:::-;:26;;;;:::i;:::-;38781:51;;38843:18;38864:17;:26;38882:7;38864:26;;;;;;;;;;;;38843:47;;39011:14;38997:10;:28;38993:328;;39042:19;39064:12;:18;39077:4;39064:18;;;;;;;;;;;;;;;:34;39083:14;39064:34;;;;;;;;;;;;39042:56;;39148:11;39115:12;:18;39128:4;39115:18;;;;;;;;;;;;;;;:30;39134:10;39115:30;;;;;;;;;;;:44;;;;39265:10;39232:17;:30;39250:11;39232:30;;;;;;;;;;;:43;;;;39027:294;38993:328;39417:17;:26;39435:7;39417:26;;;;;;;;;;;39410:33;;;39461:12;:18;39474:4;39461:18;;;;;;;;;;;;;;;:34;39480:14;39461:34;;;;;;;;;;;39454:41;;;38596:907;;38515:988;;:::o;39798:1079::-;40051:22;40096:1;40076:10;:17;;;;:21;;;;:::i;:::-;40051:46;;40108:18;40129:15;:24;40145:7;40129:24;;;;;;;;;;;;40108:45;;40480:19;40502:10;40513:14;40502:26;;;;;;;;:::i;:::-;;;;;;;;;;40480:48;;40566:11;40541:10;40552;40541:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;40677:10;40646:15;:28;40662:11;40646:28;;;;;;;;;;;:41;;;;40818:15;:24;40834:7;40818:24;;;;;;;;;;;40811:31;;;40853:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;39869:1008;;;39798:1079;:::o;37302:221::-;37387:14;37404:20;37421:2;37404:16;:20::i;:::-;37387:37;;37462:7;37435:12;:16;37448:2;37435:16;;;;;;;;;;;;;;;:24;37452:6;37435:24;;;;;;;;;;;:34;;;;37509:6;37480:17;:26;37498:7;37480:26;;;;;;;;;;;:35;;;;37376:147;37302:221;;:::o;10514:387::-;10574:4;10782:12;10849:7;10837:20;10829:28;;10892:1;10885:4;:8;10878:15;;;10514:387;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:99::-;1570:6;1604:5;1598:12;1588:22;;1518:99;;;:::o;1623:169::-;1707:11;1741:6;1736:3;1729:19;1781:4;1776:3;1772:14;1757:29;;1623:169;;;;:::o;1798:307::-;1866:1;1876:113;1890:6;1887:1;1884:13;1876:113;;;1975:1;1970:3;1966:11;1960:18;1956:1;1951:3;1947:11;1940:39;1912:2;1909:1;1905:10;1900:15;;1876:113;;;2007:6;2004:1;2001:13;1998:101;;;2087:1;2078:6;2073:3;2069:16;2062:27;1998:101;1847:258;1798:307;;;:::o;2111:102::-;2152:6;2203:2;2199:7;2194:2;2187:5;2183:14;2179:28;2169:38;;2111:102;;;:::o;2219:364::-;2307:3;2335:39;2368:5;2335:39;:::i;:::-;2390:71;2454:6;2449:3;2390:71;:::i;:::-;2383:78;;2470:52;2515:6;2510:3;2503:4;2496:5;2492:16;2470:52;:::i;:::-;2547:29;2569:6;2547:29;:::i;:::-;2542:3;2538:39;2531:46;;2311:272;2219:364;;;;:::o;2589:313::-;2702:4;2740:2;2729:9;2725:18;2717:26;;2789:9;2783:4;2779:20;2775:1;2764:9;2760:17;2753:47;2817:78;2890:4;2881:6;2817:78;:::i;:::-;2809:86;;2589:313;;;;:::o;2908:77::-;2945:7;2974:5;2963:16;;2908:77;;;:::o;2991:122::-;3064:24;3082:5;3064:24;:::i;:::-;3057:5;3054:35;3044:63;;3103:1;3100;3093:12;3044:63;2991:122;:::o;3119:139::-;3165:5;3203:6;3190:20;3181:29;;3219:33;3246:5;3219:33;:::i;:::-;3119:139;;;;:::o;3264:329::-;3323:6;3372:2;3360:9;3351:7;3347:23;3343:32;3340:119;;;3378:79;;:::i;:::-;3340:119;3498:1;3523:53;3568:7;3559:6;3548:9;3544:22;3523:53;:::i;:::-;3513:63;;3469:117;3264:329;;;;:::o;3599:126::-;3636:7;3676:42;3669:5;3665:54;3654:65;;3599:126;;;:::o;3731:96::-;3768:7;3797:24;3815:5;3797:24;:::i;:::-;3786:35;;3731:96;;;:::o;3833:118::-;3920:24;3938:5;3920:24;:::i;:::-;3915:3;3908:37;3833:118;;:::o;3957:222::-;4050:4;4088:2;4077:9;4073:18;4065:26;;4101:71;4169:1;4158:9;4154:17;4145:6;4101:71;:::i;:::-;3957:222;;;;:::o;4185:122::-;4258:24;4276:5;4258:24;:::i;:::-;4251:5;4248:35;4238:63;;4297:1;4294;4287:12;4238:63;4185:122;:::o;4313:139::-;4359:5;4397:6;4384:20;4375:29;;4413:33;4440:5;4413:33;:::i;:::-;4313:139;;;;:::o;4458:474::-;4526:6;4534;4583:2;4571:9;4562:7;4558:23;4554:32;4551:119;;;4589:79;;:::i;:::-;4551:119;4709:1;4734:53;4779:7;4770:6;4759:9;4755:22;4734:53;:::i;:::-;4724:63;;4680:117;4836:2;4862:53;4907:7;4898:6;4887:9;4883:22;4862:53;:::i;:::-;4852:63;;4807:118;4458:474;;;;;:::o;4938:118::-;5025:24;5043:5;5025:24;:::i;:::-;5020:3;5013:37;4938:118;;:::o;5062:222::-;5155:4;5193:2;5182:9;5178:18;5170:26;;5206:71;5274:1;5263:9;5259:17;5250:6;5206:71;:::i;:::-;5062:222;;;;:::o;5290:619::-;5367:6;5375;5383;5432:2;5420:9;5411:7;5407:23;5403:32;5400:119;;;5438:79;;:::i;:::-;5400:119;5558:1;5583:53;5628:7;5619:6;5608:9;5604:22;5583:53;:::i;:::-;5573:63;;5529:117;5685:2;5711:53;5756:7;5747:6;5736:9;5732:22;5711:53;:::i;:::-;5701:63;;5656:118;5813:2;5839:53;5884:7;5875:6;5864:9;5860:22;5839:53;:::i;:::-;5829:63;;5784:118;5290:619;;;;;:::o;5915:117::-;6024:1;6021;6014:12;6038:117;6147:1;6144;6137:12;6161:180;6209:77;6206:1;6199:88;6306:4;6303:1;6296:15;6330:4;6327:1;6320:15;6347:281;6430:27;6452:4;6430:27;:::i;:::-;6422:6;6418:40;6560:6;6548:10;6545:22;6524:18;6512:10;6509:34;6506:62;6503:88;;;6571:18;;:::i;:::-;6503:88;6611:10;6607:2;6600:22;6390:238;6347:281;;:::o;6634:129::-;6668:6;6695:20;;:::i;:::-;6685:30;;6724:33;6752:4;6744:6;6724:33;:::i;:::-;6634:129;;;:::o;6769:308::-;6831:4;6921:18;6913:6;6910:30;6907:56;;;6943:18;;:::i;:::-;6907:56;6981:29;7003:6;6981:29;:::i;:::-;6973:37;;7065:4;7059;7055:15;7047:23;;6769:308;;;:::o;7083:154::-;7167:6;7162:3;7157;7144:30;7229:1;7220:6;7215:3;7211:16;7204:27;7083:154;;;:::o;7243:412::-;7321:5;7346:66;7362:49;7404:6;7362:49;:::i;:::-;7346:66;:::i;:::-;7337:75;;7435:6;7428:5;7421:21;7473:4;7466:5;7462:16;7511:3;7502:6;7497:3;7493:16;7490:25;7487:112;;;7518:79;;:::i;:::-;7487:112;7608:41;7642:6;7637:3;7632;7608:41;:::i;:::-;7327:328;7243:412;;;;;:::o;7675:340::-;7731:5;7780:3;7773:4;7765:6;7761:17;7757:27;7747:122;;7788:79;;:::i;:::-;7747:122;7905:6;7892:20;7930:79;8005:3;7997:6;7990:4;7982:6;7978:17;7930:79;:::i;:::-;7921:88;;7737:278;7675:340;;;;:::o;8021:509::-;8090:6;8139:2;8127:9;8118:7;8114:23;8110:32;8107:119;;;8145:79;;:::i;:::-;8107:119;8293:1;8282:9;8278:17;8265:31;8323:18;8315:6;8312:30;8309:117;;;8345:79;;:::i;:::-;8309:117;8450:63;8505:7;8496:6;8485:9;8481:22;8450:63;:::i;:::-;8440:73;;8236:287;8021:509;;;;:::o;8536:654::-;8614:6;8622;8671:2;8659:9;8650:7;8646:23;8642:32;8639:119;;;8677:79;;:::i;:::-;8639:119;8797:1;8822:53;8867:7;8858:6;8847:9;8843:22;8822:53;:::i;:::-;8812:63;;8768:117;8952:2;8941:9;8937:18;8924:32;8983:18;8975:6;8972:30;8969:117;;;9005:79;;:::i;:::-;8969:117;9110:63;9165:7;9156:6;9145:9;9141:22;9110:63;:::i;:::-;9100:73;;8895:288;8536:654;;;;;:::o;9196:329::-;9255:6;9304:2;9292:9;9283:7;9279:23;9275:32;9272:119;;;9310:79;;:::i;:::-;9272:119;9430:1;9455:53;9500:7;9491:6;9480:9;9476:22;9455:53;:::i;:::-;9445:63;;9401:117;9196:329;;;;:::o;9531:116::-;9601:21;9616:5;9601:21;:::i;:::-;9594:5;9591:32;9581:60;;9637:1;9634;9627:12;9581:60;9531:116;:::o;9653:133::-;9696:5;9734:6;9721:20;9712:29;;9750:30;9774:5;9750:30;:::i;:::-;9653:133;;;;:::o;9792:468::-;9857:6;9865;9914:2;9902:9;9893:7;9889:23;9885:32;9882:119;;;9920:79;;:::i;:::-;9882:119;10040:1;10065:53;10110:7;10101:6;10090:9;10086:22;10065:53;:::i;:::-;10055:63;;10011:117;10167:2;10193:50;10235:7;10226:6;10215:9;10211:22;10193:50;:::i;:::-;10183:60;;10138:115;9792:468;;;;;:::o;10266:307::-;10327:4;10417:18;10409:6;10406:30;10403:56;;;10439:18;;:::i;:::-;10403:56;10477:29;10499:6;10477:29;:::i;:::-;10469:37;;10561:4;10555;10551:15;10543:23;;10266:307;;;:::o;10579:410::-;10656:5;10681:65;10697:48;10738:6;10697:48;:::i;:::-;10681:65;:::i;:::-;10672:74;;10769:6;10762:5;10755:21;10807:4;10800:5;10796:16;10845:3;10836:6;10831:3;10827:16;10824:25;10821:112;;;10852:79;;:::i;:::-;10821:112;10942:41;10976:6;10971:3;10966;10942:41;:::i;:::-;10662:327;10579:410;;;;;:::o;11008:338::-;11063:5;11112:3;11105:4;11097:6;11093:17;11089:27;11079:122;;11120:79;;:::i;:::-;11079:122;11237:6;11224:20;11262:78;11336:3;11328:6;11321:4;11313:6;11309:17;11262:78;:::i;:::-;11253:87;;11069:277;11008:338;;;;:::o;11352:943::-;11447:6;11455;11463;11471;11520:3;11508:9;11499:7;11495:23;11491:33;11488:120;;;11527:79;;:::i;:::-;11488:120;11647:1;11672:53;11717:7;11708:6;11697:9;11693:22;11672:53;:::i;:::-;11662:63;;11618:117;11774:2;11800:53;11845:7;11836:6;11825:9;11821:22;11800:53;:::i;:::-;11790:63;;11745:118;11902:2;11928:53;11973:7;11964:6;11953:9;11949:22;11928:53;:::i;:::-;11918:63;;11873:118;12058:2;12047:9;12043:18;12030:32;12089:18;12081:6;12078:30;12075:117;;;12111:79;;:::i;:::-;12075:117;12216:62;12270:7;12261:6;12250:9;12246:22;12216:62;:::i;:::-;12206:72;;12001:287;11352:943;;;;;;;:::o;12301:799::-;12388:6;12396;12404;12453:2;12441:9;12432:7;12428:23;12424:32;12421:119;;;12459:79;;:::i;:::-;12421:119;12579:1;12604:53;12649:7;12640:6;12629:9;12625:22;12604:53;:::i;:::-;12594:63;;12550:117;12706:2;12732:53;12777:7;12768:6;12757:9;12753:22;12732:53;:::i;:::-;12722:63;;12677:118;12862:2;12851:9;12847:18;12834:32;12893:18;12885:6;12882:30;12879:117;;;12915:79;;:::i;:::-;12879:117;13020:63;13075:7;13066:6;13055:9;13051:22;13020:63;:::i;:::-;13010:73;;12805:288;12301:799;;;;;:::o;13106:474::-;13174:6;13182;13231:2;13219:9;13210:7;13206:23;13202:32;13199:119;;;13237:79;;:::i;:::-;13199:119;13357:1;13382:53;13427:7;13418:6;13407:9;13403:22;13382:53;:::i;:::-;13372:63;;13328:117;13484:2;13510:53;13555:7;13546:6;13535:9;13531:22;13510:53;:::i;:::-;13500:63;;13455:118;13106:474;;;;;:::o;13586:180::-;13634:77;13631:1;13624:88;13731:4;13728:1;13721:15;13755:4;13752:1;13745:15;13772:320;13816:6;13853:1;13847:4;13843:12;13833:22;;13900:1;13894:4;13890:12;13921:18;13911:81;;13977:4;13969:6;13965:17;13955:27;;13911:81;14039:2;14031:6;14028:14;14008:18;14005:38;14002:84;;14058:18;;:::i;:::-;14002:84;13823:269;13772:320;;;:::o;14098:231::-;14238:34;14234:1;14226:6;14222:14;14215:58;14307:14;14302:2;14294:6;14290:15;14283:39;14098:231;:::o;14335:366::-;14477:3;14498:67;14562:2;14557:3;14498:67;:::i;:::-;14491:74;;14574:93;14663:3;14574:93;:::i;:::-;14692:2;14687:3;14683:12;14676:19;;14335:366;;;:::o;14707:419::-;14873:4;14911:2;14900:9;14896:18;14888:26;;14960:9;14954:4;14950:20;14946:1;14935:9;14931:17;14924:47;14988:131;15114:4;14988:131;:::i;:::-;14980:139;;14707:419;;;:::o;15132:220::-;15272:34;15268:1;15260:6;15256:14;15249:58;15341:3;15336:2;15328:6;15324:15;15317:28;15132:220;:::o;15358:366::-;15500:3;15521:67;15585:2;15580:3;15521:67;:::i;:::-;15514:74;;15597:93;15686:3;15597:93;:::i;:::-;15715:2;15710:3;15706:12;15699:19;;15358:366;;;:::o;15730:419::-;15896:4;15934:2;15923:9;15919:18;15911:26;;15983:9;15977:4;15973:20;15969:1;15958:9;15954:17;15947:47;16011:131;16137:4;16011:131;:::i;:::-;16003:139;;15730:419;;;:::o;16155:243::-;16295:34;16291:1;16283:6;16279:14;16272:58;16364:26;16359:2;16351:6;16347:15;16340:51;16155:243;:::o;16404:366::-;16546:3;16567:67;16631:2;16626:3;16567:67;:::i;:::-;16560:74;;16643:93;16732:3;16643:93;:::i;:::-;16761:2;16756:3;16752:12;16745:19;;16404:366;;;:::o;16776:419::-;16942:4;16980:2;16969:9;16965:18;16957:26;;17029:9;17023:4;17019:20;17015:1;17004:9;17000:17;16993:47;17057:131;17183:4;17057:131;:::i;:::-;17049:139;;16776:419;;;:::o;17201:236::-;17341:34;17337:1;17329:6;17325:14;17318:58;17410:19;17405:2;17397:6;17393:15;17386:44;17201:236;:::o;17443:366::-;17585:3;17606:67;17670:2;17665:3;17606:67;:::i;:::-;17599:74;;17682:93;17771:3;17682:93;:::i;:::-;17800:2;17795:3;17791:12;17784:19;;17443:366;;;:::o;17815:419::-;17981:4;18019:2;18008:9;18004:18;17996:26;;18068:9;18062:4;18058:20;18054:1;18043:9;18039:17;18032:47;18096:131;18222:4;18096:131;:::i;:::-;18088:139;;17815:419;;;:::o;18240:230::-;18380:34;18376:1;18368:6;18364:14;18357:58;18449:13;18444:2;18436:6;18432:15;18425:38;18240:230;:::o;18476:366::-;18618:3;18639:67;18703:2;18698:3;18639:67;:::i;:::-;18632:74;;18715:93;18804:3;18715:93;:::i;:::-;18833:2;18828:3;18824:12;18817:19;;18476:366;;;:::o;18848:419::-;19014:4;19052:2;19041:9;19037:18;19029:26;;19101:9;19095:4;19091:20;19087:1;19076:9;19072:17;19065:47;19129:131;19255:4;19129:131;:::i;:::-;19121:139;;18848:419;;;:::o;19273:231::-;19413:34;19409:1;19401:6;19397:14;19390:58;19482:14;19477:2;19469:6;19465:15;19458:39;19273:231;:::o;19510:366::-;19652:3;19673:67;19737:2;19732:3;19673:67;:::i;:::-;19666:74;;19749:93;19838:3;19749:93;:::i;:::-;19867:2;19862:3;19858:12;19851:19;;19510:366;;;:::o;19882:419::-;20048:4;20086:2;20075:9;20071:18;20063:26;;20135:9;20129:4;20125:20;20121:1;20110:9;20106:17;20099:47;20163:131;20289:4;20163:131;:::i;:::-;20155:139;;19882:419;;;:::o;20307:180::-;20355:77;20352:1;20345:88;20452:4;20449:1;20442:15;20476:4;20473:1;20466:15;20493:182;20633:34;20629:1;20621:6;20617:14;20610:58;20493:182;:::o;20681:366::-;20823:3;20844:67;20908:2;20903:3;20844:67;:::i;:::-;20837:74;;20920:93;21009:3;20920:93;:::i;:::-;21038:2;21033:3;21029:12;21022:19;;20681:366;;;:::o;21053:419::-;21219:4;21257:2;21246:9;21242:18;21234:26;;21306:9;21300:4;21296:20;21292:1;21281:9;21277:17;21270:47;21334:131;21460:4;21334:131;:::i;:::-;21326:139;;21053:419;;;:::o;21478:141::-;21527:4;21550:3;21542:11;;21573:3;21570:1;21563:14;21607:4;21604:1;21594:18;21586:26;;21478:141;;;:::o;21625:93::-;21662:6;21709:2;21704;21697:5;21693:14;21689:23;21679:33;;21625:93;;;:::o;21724:107::-;21768:8;21818:5;21812:4;21808:16;21787:37;;21724:107;;;;:::o;21837:393::-;21906:6;21956:1;21944:10;21940:18;21979:97;22009:66;21998:9;21979:97;:::i;:::-;22097:39;22127:8;22116:9;22097:39;:::i;:::-;22085:51;;22169:4;22165:9;22158:5;22154:21;22145:30;;22218:4;22208:8;22204:19;22197:5;22194:30;22184:40;;21913:317;;21837:393;;;;;:::o;22236:60::-;22264:3;22285:5;22278:12;;22236:60;;;:::o;22302:142::-;22352:9;22385:53;22403:34;22412:24;22430:5;22412:24;:::i;:::-;22403:34;:::i;:::-;22385:53;:::i;:::-;22372:66;;22302:142;;;:::o;22450:75::-;22493:3;22514:5;22507:12;;22450:75;;;:::o;22531:269::-;22641:39;22672:7;22641:39;:::i;:::-;22702:91;22751:41;22775:16;22751:41;:::i;:::-;22743:6;22736:4;22730:11;22702:91;:::i;:::-;22696:4;22689:105;22607:193;22531:269;;;:::o;22806:73::-;22851:3;22806:73;:::o;22885:189::-;22962:32;;:::i;:::-;23003:65;23061:6;23053;23047:4;23003:65;:::i;:::-;22938:136;22885:189;;:::o;23080:186::-;23140:120;23157:3;23150:5;23147:14;23140:120;;;23211:39;23248:1;23241:5;23211:39;:::i;:::-;23184:1;23177:5;23173:13;23164:22;;23140:120;;;23080:186;;:::o;23272:543::-;23373:2;23368:3;23365:11;23362:446;;;23407:38;23439:5;23407:38;:::i;:::-;23491:29;23509:10;23491:29;:::i;:::-;23481:8;23477:44;23674:2;23662:10;23659:18;23656:49;;;23695:8;23680:23;;23656:49;23718:80;23774:22;23792:3;23774:22;:::i;:::-;23764:8;23760:37;23747:11;23718:80;:::i;:::-;23377:431;;23362:446;23272:543;;;:::o;23821:117::-;23875:8;23925:5;23919:4;23915:16;23894:37;;23821:117;;;;:::o;23944:169::-;23988:6;24021:51;24069:1;24065:6;24057:5;24054:1;24050:13;24021:51;:::i;:::-;24017:56;24102:4;24096;24092:15;24082:25;;23995:118;23944:169;;;;:::o;24118:295::-;24194:4;24340:29;24365:3;24359:4;24340:29;:::i;:::-;24332:37;;24402:3;24399:1;24395:11;24389:4;24386:21;24378:29;;24118:295;;;;:::o;24418:1395::-;24535:37;24568:3;24535:37;:::i;:::-;24637:18;24629:6;24626:30;24623:56;;;24659:18;;:::i;:::-;24623:56;24703:38;24735:4;24729:11;24703:38;:::i;:::-;24788:67;24848:6;24840;24834:4;24788:67;:::i;:::-;24882:1;24906:4;24893:17;;24938:2;24930:6;24927:14;24955:1;24950:618;;;;25612:1;25629:6;25626:77;;;25678:9;25673:3;25669:19;25663:26;25654:35;;25626:77;25729:67;25789:6;25782:5;25729:67;:::i;:::-;25723:4;25716:81;25585:222;24920:887;;24950:618;25002:4;24998:9;24990:6;24986:22;25036:37;25068:4;25036:37;:::i;:::-;25095:1;25109:208;25123:7;25120:1;25117:14;25109:208;;;25202:9;25197:3;25193:19;25187:26;25179:6;25172:42;25253:1;25245:6;25241:14;25231:24;;25300:2;25289:9;25285:18;25272:31;;25146:4;25143:1;25139:12;25134:17;;25109:208;;;25345:6;25336:7;25333:19;25330:179;;;25403:9;25398:3;25394:19;25388:26;25446:48;25488:4;25480:6;25476:17;25465:9;25446:48;:::i;:::-;25438:6;25431:64;25353:156;25330:179;25555:1;25551;25543:6;25539:14;25535:22;25529:4;25522:36;24957:611;;;24920:887;;24510:1303;;;24418:1395;;:::o;25819:231::-;25959:34;25955:1;25947:6;25943:14;25936:58;26028:14;26023:2;26015:6;26011:15;26004:39;25819:231;:::o;26056:366::-;26198:3;26219:67;26283:2;26278:3;26219:67;:::i;:::-;26212:74;;26295:93;26384:3;26295:93;:::i;:::-;26413:2;26408:3;26404:12;26397:19;;26056:366;;;:::o;26428:419::-;26594:4;26632:2;26621:9;26617:18;26609:26;;26681:9;26675:4;26671:20;26667:1;26656:9;26652:17;26645:47;26709:131;26835:4;26709:131;:::i;:::-;26701:139;;26428:419;;;:::o;26853:228::-;26993:34;26989:1;26981:6;26977:14;26970:58;27062:11;27057:2;27049:6;27045:15;27038:36;26853:228;:::o;27087:366::-;27229:3;27250:67;27314:2;27309:3;27250:67;:::i;:::-;27243:74;;27326:93;27415:3;27326:93;:::i;:::-;27444:2;27439:3;27435:12;27428:19;;27087:366;;;:::o;27459:419::-;27625:4;27663:2;27652:9;27648:18;27640:26;;27712:9;27706:4;27702:20;27698:1;27687:9;27683:17;27676:47;27740:131;27866:4;27740:131;:::i;:::-;27732:139;;27459:419;;;:::o;27884:229::-;28024:34;28020:1;28012:6;28008:14;28001:58;28093:12;28088:2;28080:6;28076:15;28069:37;27884:229;:::o;28119:366::-;28261:3;28282:67;28346:2;28341:3;28282:67;:::i;:::-;28275:74;;28358:93;28447:3;28358:93;:::i;:::-;28476:2;28471:3;28467:12;28460:19;;28119:366;;;:::o;28491:419::-;28657:4;28695:2;28684:9;28680:18;28672:26;;28744:9;28738:4;28734:20;28730:1;28719:9;28715:17;28708:47;28772:131;28898:4;28772:131;:::i;:::-;28764:139;;28491:419;;;:::o;28916:175::-;29056:27;29052:1;29044:6;29040:14;29033:51;28916:175;:::o;29097:366::-;29239:3;29260:67;29324:2;29319:3;29260:67;:::i;:::-;29253:74;;29336:93;29425:3;29336:93;:::i;:::-;29454:2;29449:3;29445:12;29438:19;;29097:366;;;:::o;29469:419::-;29635:4;29673:2;29662:9;29658:18;29650:26;;29722:9;29716:4;29712:20;29708:1;29697:9;29693:17;29686:47;29750:131;29876:4;29750:131;:::i;:::-;29742:139;;29469:419;;;:::o;29894:234::-;30034:34;30030:1;30022:6;30018:14;30011:58;30103:17;30098:2;30090:6;30086:15;30079:42;29894:234;:::o;30134:366::-;30276:3;30297:67;30361:2;30356:3;30297:67;:::i;:::-;30290:74;;30373:93;30462:3;30373:93;:::i;:::-;30491:2;30486:3;30482:12;30475:19;;30134:366;;;:::o;30506:419::-;30672:4;30710:2;30699:9;30695:18;30687:26;;30759:9;30753:4;30749:20;30745:1;30734:9;30730:17;30723:47;30787:131;30913:4;30787:131;:::i;:::-;30779:139;;30506:419;;;:::o;30931:148::-;31033:11;31070:3;31055:18;;30931:148;;;;:::o;31085:377::-;31191:3;31219:39;31252:5;31219:39;:::i;:::-;31274:89;31356:6;31351:3;31274:89;:::i;:::-;31267:96;;31372:52;31417:6;31412:3;31405:4;31398:5;31394:16;31372:52;:::i;:::-;31449:6;31444:3;31440:16;31433:23;;31195:267;31085:377;;;;:::o;31468:435::-;31648:3;31670:95;31761:3;31752:6;31670:95;:::i;:::-;31663:102;;31782:95;31873:3;31864:6;31782:95;:::i;:::-;31775:102;;31894:3;31887:10;;31468:435;;;;;:::o;31909:225::-;32049:34;32045:1;32037:6;32033:14;32026:58;32118:8;32113:2;32105:6;32101:15;32094:33;31909:225;:::o;32140:366::-;32282:3;32303:67;32367:2;32362:3;32303:67;:::i;:::-;32296:74;;32379:93;32468:3;32379:93;:::i;:::-;32497:2;32492:3;32488:12;32481:19;;32140:366;;;:::o;32512:419::-;32678:4;32716:2;32705:9;32701:18;32693:26;;32765:9;32759:4;32755:20;32751:1;32740:9;32736:17;32729:47;32793:131;32919:4;32793:131;:::i;:::-;32785:139;;32512:419;;;:::o;32937:231::-;33077:34;33073:1;33065:6;33061:14;33054:58;33146:14;33141:2;33133:6;33129:15;33122:39;32937:231;:::o;33174:366::-;33316:3;33337:67;33401:2;33396:3;33337:67;:::i;:::-;33330:74;;33413:93;33502:3;33413:93;:::i;:::-;33531:2;33526:3;33522:12;33515:19;;33174:366;;;:::o;33546:419::-;33712:4;33750:2;33739:9;33735:18;33727:26;;33799:9;33793:4;33789:20;33785:1;33774:9;33770:17;33763:47;33827:131;33953:4;33827:131;:::i;:::-;33819:139;;33546:419;;;:::o;33971:228::-;34111:34;34107:1;34099:6;34095:14;34088:58;34180:11;34175:2;34167:6;34163:15;34156:36;33971:228;:::o;34205:366::-;34347:3;34368:67;34432:2;34427:3;34368:67;:::i;:::-;34361:74;;34444:93;34533:3;34444:93;:::i;:::-;34562:2;34557:3;34553:12;34546:19;;34205:366;;;:::o;34577:419::-;34743:4;34781:2;34770:9;34766:18;34758:26;;34830:9;34824:4;34820:20;34816:1;34805:9;34801:17;34794:47;34858:131;34984:4;34858:131;:::i;:::-;34850:139;;34577:419;;;:::o;35002:223::-;35142:34;35138:1;35130:6;35126:14;35119:58;35211:6;35206:2;35198:6;35194:15;35187:31;35002:223;:::o;35231:366::-;35373:3;35394:67;35458:2;35453:3;35394:67;:::i;:::-;35387:74;;35470:93;35559:3;35470:93;:::i;:::-;35588:2;35583:3;35579:12;35572:19;;35231:366;;;:::o;35603:419::-;35769:4;35807:2;35796:9;35792:18;35784:26;;35856:9;35850:4;35846:20;35842:1;35831:9;35827:17;35820:47;35884:131;36010:4;35884:131;:::i;:::-;35876:139;;35603:419;;;:::o;36028:180::-;36076:77;36073:1;36066:88;36173:4;36170:1;36163:15;36197:4;36194:1;36187:15;36214:191;36254:4;36274:20;36292:1;36274:20;:::i;:::-;36269:25;;36308:20;36326:1;36308:20;:::i;:::-;36303:25;;36347:1;36344;36341:8;36338:34;;;36352:18;;:::i;:::-;36338:34;36397:1;36394;36390:9;36382:17;;36214:191;;;;:::o;36411:305::-;36451:3;36470:20;36488:1;36470:20;:::i;:::-;36465:25;;36504:20;36522:1;36504:20;:::i;:::-;36499:25;;36658:1;36590:66;36586:74;36583:1;36580:81;36577:107;;;36664:18;;:::i;:::-;36577:107;36708:1;36705;36701:9;36694:16;;36411:305;;;;:::o;36722:237::-;36862:34;36858:1;36850:6;36846:14;36839:58;36931:20;36926:2;36918:6;36914:15;36907:45;36722:237;:::o;36965:366::-;37107:3;37128:67;37192:2;37187:3;37128:67;:::i;:::-;37121:74;;37204:93;37293:3;37204:93;:::i;:::-;37322:2;37317:3;37313:12;37306:19;;36965:366;;;:::o;37337:419::-;37503:4;37541:2;37530:9;37526:18;37518:26;;37590:9;37584:4;37580:20;37576:1;37565:9;37561:17;37554:47;37618:131;37744:4;37618:131;:::i;:::-;37610:139;;37337:419;;;:::o;37762:233::-;37801:3;37824:24;37842:5;37824:24;:::i;:::-;37815:33;;37870:66;37863:5;37860:77;37857:103;;37940:18;;:::i;:::-;37857:103;37987:1;37980:5;37976:13;37969:20;;37762:233;;;:::o;38001:180::-;38049:77;38046:1;38039:88;38146:4;38143:1;38136:15;38170:4;38167:1;38160:15;38187:185;38227:1;38244:20;38262:1;38244:20;:::i;:::-;38239:25;;38278:20;38296:1;38278:20;:::i;:::-;38273:25;;38317:1;38307:35;;38322:18;;:::i;:::-;38307:35;38364:1;38361;38357:9;38352:14;;38187:185;;;;:::o;38378:176::-;38410:1;38427:20;38445:1;38427:20;:::i;:::-;38422:25;;38461:20;38479:1;38461:20;:::i;:::-;38456:25;;38500:1;38490:35;;38505:18;;:::i;:::-;38490:35;38546:1;38543;38539:9;38534:14;;38378:176;;;;:::o;38560:182::-;38700:34;38696:1;38688:6;38684:14;38677:58;38560:182;:::o;38748:366::-;38890:3;38911:67;38975:2;38970:3;38911:67;:::i;:::-;38904:74;;38987:93;39076:3;38987:93;:::i;:::-;39105:2;39100:3;39096:12;39089:19;;38748:366;;;:::o;39120:419::-;39286:4;39324:2;39313:9;39309:18;39301:26;;39373:9;39367:4;39363:20;39359:1;39348:9;39344:17;39337:47;39401:131;39527:4;39401:131;:::i;:::-;39393:139;;39120:419;;;:::o;39545:178::-;39685:30;39681:1;39673:6;39669:14;39662:54;39545:178;:::o;39729:366::-;39871:3;39892:67;39956:2;39951:3;39892:67;:::i;:::-;39885:74;;39968:93;40057:3;39968:93;:::i;:::-;40086:2;40081:3;40077:12;40070:19;;39729:366;;;:::o;40101:419::-;40267:4;40305:2;40294:9;40290:18;40282:26;;40354:9;40348:4;40344:20;40340:1;40329:9;40325:17;40318:47;40382:131;40508:4;40382:131;:::i;:::-;40374:139;;40101:419;;;:::o;40526:98::-;40577:6;40611:5;40605:12;40595:22;;40526:98;;;:::o;40630:168::-;40713:11;40747:6;40742:3;40735:19;40787:4;40782:3;40778:14;40763:29;;40630:168;;;;:::o;40804:360::-;40890:3;40918:38;40950:5;40918:38;:::i;:::-;40972:70;41035:6;41030:3;40972:70;:::i;:::-;40965:77;;41051:52;41096:6;41091:3;41084:4;41077:5;41073:16;41051:52;:::i;:::-;41128:29;41150:6;41128:29;:::i;:::-;41123:3;41119:39;41112:46;;40894:270;40804:360;;;;:::o;41170:640::-;41365:4;41403:3;41392:9;41388:19;41380:27;;41417:71;41485:1;41474:9;41470:17;41461:6;41417:71;:::i;:::-;41498:72;41566:2;41555:9;41551:18;41542:6;41498:72;:::i;:::-;41580;41648:2;41637:9;41633:18;41624:6;41580:72;:::i;:::-;41699:9;41693:4;41689:20;41684:2;41673:9;41669:18;41662:48;41727:76;41798:4;41789:6;41727:76;:::i;:::-;41719:84;;41170:640;;;;;;;:::o;41816:141::-;41872:5;41903:6;41897:13;41888:22;;41919:32;41945:5;41919:32;:::i;:::-;41816:141;;;;:::o;41963:349::-;42032:6;42081:2;42069:9;42060:7;42056:23;42052:32;42049:119;;;42087:79;;:::i;:::-;42049:119;42207:1;42232:63;42287:7;42278:6;42267:9;42263:22;42232:63;:::i;:::-;42222:73;;42178:127;41963:349;;;;:::o;42318:180::-;42366:77;42363:1;42356:88;42463:4;42460:1;42453:15;42487:4;42484:1;42477:15
Swarm Source
ipfs://a72ff043dcf5e1685352b6c5497aecd4691b2c9e909bf78ec71df943750e6ef9
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.