ERC-721
Overview
Max Total Supply
747 MEE
Holders
145
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
0 MEELoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
MetaEstate
Compiler Version
v0.8.1+commit.df193b15
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-02-28 */ // Sources flattened with hardhat v2.8.4 https://hardhat.org // File @openzeppelin/contracts/utils/introspection/[email protected] // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.1; /** * @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/[email protected] // OpenZeppelin Contracts v4.4.1 (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/[email protected] // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File @openzeppelin/contracts/token/ERC721/extensions/[email protected] // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File @openzeppelin/contracts/utils/[email protected] // OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @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 * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File @openzeppelin/contracts/utils/[email protected] // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File @openzeppelin/contracts/utils/[email protected] // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File @openzeppelin/contracts/utils/introspection/[email protected] // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File @openzeppelin/contracts/token/ERC721/[email protected] // OpenZeppelin Contracts (last updated v4.5.0) (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 { _setApprovalForAll(_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); _afterTokenTransfer(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); _afterTokenTransfer(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 from incorrect owner"); 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); _afterTokenTransfer(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 Approve `operator` to operate on all of `owner` tokens * * Emits a {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC721: approve to caller"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @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 {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File @openzeppelin/contracts/token/ERC721/extensions/[email protected] // OpenZeppelin Contracts (last updated v4.5.0) (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); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // File @openzeppelin/contracts/token/ERC721/extensions/[email protected] // OpenZeppelin Contracts v4.4.1 (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/[email protected] // OpenZeppelin Contracts v4.4.1 (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() { _transferOwnership(_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 { _transferOwnership(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"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File contracts/metaestate.sol //Contract based on [https://docs.openzeppelin.com/contracts/3.x/erc721](https://docs.openzeppelin.com/contracts/3.x/erc721) pragma solidity ^0.8.1; contract MetaEstate is ERC721Enumerable, Ownable { using Strings for uint256; event TransferSandbox( address indexed from, address indexed to, uint256 indexed landId ); string public _baseTokenURI; address public _landContract; // SANDBOX ADDRESS address public _landOwner; // SANDBOX LAND OWNER uint256 public _totalPiece; mapping(address => mapping(uint256 => uint256)) public _ownedTokensByLandId; mapping(uint256 => uint256) public _landIdByTokenId; mapping(uint256 => uint256) public _tokenIdByLandId; mapping(uint256 => bool) public _landIdTransfered; constructor( string memory baseTokenURI, address landContract, uint256 totalPiece, address landOwner ) ERC721("MetaEstate", "MEE") { setBaseURI(baseTokenURI); setLandAddress(landContract); setTotalPiece(totalPiece); setLandOwner(landOwner); } function transferSandbox(address _to, uint256 _landId) public { if ( _ownedTokensByLandId[_to][_landId] == _totalPiece && !_landIdTransfered[_landId] ) { IERC721 nftAddress = IERC721(_landContract); if ( nftAddress.getApproved(_landId) == address(this) && nftAddress.ownerOf(_landId) == _landOwner ) { emit TransferSandbox(_landOwner, _to, _landId); nftAddress.safeTransferFrom(_landOwner, _to, _landId); _landIdTransfered[_landId] = true; } } } function walletOfOwner(address _owner) public view returns (uint256[] memory) { uint256 tokenCount = balanceOf(_owner); uint256[] memory tokensId = new uint256[](tokenCount); for (uint256 i; i < tokenCount; i++) { tokensId[i] = tokenOfOwnerByIndex(_owner, i); } return tokensId; } function totalOwnerSupplyByLandId(address _owner, uint256 landId) public view returns (uint256) { return _ownedTokensByLandId[_owner][landId]; } // ERC721 OVERRIDE function _baseURI() internal view virtual override returns (string memory) { return _baseTokenURI; } function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require( _exists(tokenId), "ERC721Metadata: URI query for nonexistent token" ); string memory baseURI = _baseURI(); uint256 landId = _landIdByTokenId[tokenId]; return bytes(baseURI).length > 0 ? string( abi.encodePacked( baseURI, landId.toString(), "/", (tokenId % _totalPiece).toString() ) ) : ""; } function _afterTokenTransfer( address from, address to, uint256 tokenId ) internal virtual override { uint256 landId = _landIdByTokenId[tokenId]; if (from != address(0)) { _ownedTokensByLandId[from][landId] -= 1; _ownedTokensByLandId[to][landId] += 1; } transferSandbox(to, landId); } // OWNER GETTER function getContractBalance() public view onlyOwner returns (uint256) { return address(this).balance; } // OWNER SETTER function setBaseURI(string memory baseURI) public onlyOwner { _baseTokenURI = baseURI; } function setLandAddress(address landContract) public onlyOwner { _landContract = landContract; } function setLandOwner(address landOwner) public onlyOwner { _landOwner = landOwner; } function setTotalPiece(uint256 totalPiece) public onlyOwner { _totalPiece = totalPiece; } function airdrop( uint256 _mintAmount, address _to, uint256 landId ) public onlyOwner { uint256 supply = totalSupply(); require(_mintAmount > 0, "Need to mint at least one NFT"); require( _tokenIdByLandId[landId] + _mintAmount <= _totalPiece, "All the puzzle had been minted" ); _ownedTokensByLandId[_to][landId] += _mintAmount; _landIdTransfered[landId] = false; for (uint256 i = 0; i < _mintAmount; i++) { _landIdByTokenId[supply + i] = landId; _safeMint(_to, supply + i); } _tokenIdByLandId[landId] += _mintAmount; } function withdrawAll() public payable onlyOwner { require(payable(msg.sender).send(address(this).balance)); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"baseTokenURI","type":"string"},{"internalType":"address","name":"landContract","type":"address"},{"internalType":"uint256","name":"totalPiece","type":"uint256"},{"internalType":"address","name":"landOwner","type":"address"}],"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"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"landId","type":"uint256"}],"name":"TransferSandbox","type":"event"},{"inputs":[],"name":"_baseTokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_landContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"_landIdByTokenId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"_landIdTransfered","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_landOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"_ownedTokensByLandId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"_tokenIdByLandId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalPiece","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"landId","type":"uint256"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getContractBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"address","name":"landContract","type":"address"}],"name":"setLandAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"landOwner","type":"address"}],"name":"setLandOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"totalPiece","type":"uint256"}],"name":"setTotalPiece","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":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"uint256","name":"landId","type":"uint256"}],"name":"totalOwnerSupplyByLandId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_landId","type":"uint256"}],"name":"transferSandbox","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawAll","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b506040516200541438038062005414833981810160405281019062000037919062000677565b6040518060400160405280600a81526020017f4d657461457374617465000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f4d454500000000000000000000000000000000000000000000000000000000008152508160009080519060200190620000bb92919062000527565b508060019080519060200190620000d492919062000527565b505050620000f7620000eb6200014560201b60201c565b6200014d60201b60201c565b62000108846200021360201b60201c565b6200011983620002be60201b60201c565b6200012a826200039160201b60201c565b6200013b816200042a60201b60201c565b5050505062000961565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620002236200014560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000249620004fd60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620002a2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002999062000723565b60405180910390fd5b80600b9080519060200190620002ba92919062000527565b5050565b620002ce6200014560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620002f4620004fd60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200034d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003449062000723565b60405180910390fd5b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b620003a16200014560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620003c7620004fd60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000420576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004179062000723565b60405180910390fd5b80600e8190555050565b6200043a6200014560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000460620004fd60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620004b9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004b09062000723565b60405180910390fd5b80600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054620005359062000829565b90600052602060002090601f016020900481019282620005595760008555620005a5565b82601f106200057457805160ff1916838001178555620005a5565b82800160010185558215620005a5579182015b82811115620005a457825182559160200191906001019062000587565b5b509050620005b49190620005b8565b5090565b5b80821115620005d3576000816000905550600101620005b9565b5090565b6000620005ee620005e8846200076e565b62000745565b9050828152602081018484840111156200060757600080fd5b62000614848285620007f3565b509392505050565b6000815190506200062d816200092d565b92915050565b600082601f8301126200064557600080fd5b815162000657848260208601620005d7565b91505092915050565b600081519050620006718162000947565b92915050565b600080600080608085870312156200068e57600080fd5b600085015167ffffffffffffffff811115620006a957600080fd5b620006b78782880162000633565b9450506020620006ca878288016200061c565b9350506040620006dd8782880162000660565b9250506060620006f0878288016200061c565b91505092959194509250565b60006200070b602083620007a4565b9150620007188262000904565b602082019050919050565b600060208201905081810360008301526200073e81620006fc565b9050919050565b60006200075162000764565b90506200075f82826200085f565b919050565b6000604051905090565b600067ffffffffffffffff8211156200078c576200078b620008c4565b5b6200079782620008f3565b9050602081019050919050565b600082825260208201905092915050565b6000620007c282620007c9565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b8381101562000813578082015181840152602081019050620007f6565b8381111562000823576000848401525b50505050565b600060028204905060018216806200084257607f821691505b6020821081141562000859576200085862000895565b5b50919050565b6200086a82620008f3565b810181811067ffffffffffffffff821117156200088c576200088b620008c4565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6200093881620007b5565b81146200094457600080fd5b50565b6200095281620007e9565b81146200095e57600080fd5b50565b614aa380620009716000396000f3fe60806040526004361061021a5760003560e01c8063715018a611610123578063b88d4fde116100ab578063e985e9c51161006f578063e985e9c514610822578063ebc1298f1461085f578063ef13c7a41461088a578063f2fde38b146108b3578063f73c4ab1146108dc5761021a565b8063b88d4fde1461072b578063c87b56dd14610754578063cfc86f7b14610791578063daebba0c146107bc578063e6fe13a9146107e55761021a565b806395d89b41116100f257806395d89b41146106465780639e20b84414610671578063a22cb4651461069a578063ad7fbb50146106c3578063b625be16146107005761021a565b8063715018a6146105bd5780637822e4b6146105d4578063853828b6146106115780638da5cb5b1461061b5761021a565b806342842e0e116101a657806355f804b31161017557806355f804b3146104b257806361137b75146104db5780636352211e146105185780636f9fb98a1461055557806370a08231146105805761021a565b806342842e0e146103d2578063438b6300146103fb57806347785b62146104385780634f6ccce7146104755761021a565b8063095ea7b3116101ed578063095ea7b3146102ef57806318160ddd146103185780631e5b28741461034357806323b872dd1461036c5780632f745c59146103955761021a565b806301ffc9a71461021f57806306b1da101461025c57806306fdde0314610287578063081812fc146102b2575b600080fd5b34801561022b57600080fd5b506102466004803603810190610241919061376f565b610905565b6040516102539190613daa565b60405180910390f35b34801561026857600080fd5b5061027161097f565b60405161027e9190613cea565b60405180910390f35b34801561029357600080fd5b5061029c6109a5565b6040516102a99190613dc5565b60405180910390f35b3480156102be57600080fd5b506102d960048036038101906102d49190613802565b610a37565b6040516102e69190613cea565b60405180910390f35b3480156102fb57600080fd5b5061031660048036038101906103119190613733565b610abc565b005b34801561032457600080fd5b5061032d610bd4565b60405161033a9190614067565b60405180910390f35b34801561034f57600080fd5b5061036a6004803603810190610365919061359f565b610be1565b005b34801561037857600080fd5b50610393600480360381019061038e919061362d565b610ca1565b005b3480156103a157600080fd5b506103bc60048036038101906103b79190613733565b610d01565b6040516103c99190614067565b60405180910390f35b3480156103de57600080fd5b506103f960048036038101906103f4919061362d565b610da6565b005b34801561040757600080fd5b50610422600480360381019061041d919061359f565b610dc6565b60405161042f9190613d88565b60405180910390f35b34801561044457600080fd5b5061045f600480360381019061045a9190613802565b610ec0565b60405161046c9190614067565b60405180910390f35b34801561048157600080fd5b5061049c60048036038101906104979190613802565b610ed8565b6040516104a99190614067565b60405180910390f35b3480156104be57600080fd5b506104d960048036038101906104d491906137c1565b610f6f565b005b3480156104e757600080fd5b5061050260048036038101906104fd9190613733565b611005565b60405161050f9190614067565b60405180910390f35b34801561052457600080fd5b5061053f600480360381019061053a9190613802565b61102a565b60405161054c9190613cea565b60405180910390f35b34801561056157600080fd5b5061056a6110dc565b6040516105779190614067565b60405180910390f35b34801561058c57600080fd5b506105a760048036038101906105a2919061359f565b611160565b6040516105b49190614067565b60405180910390f35b3480156105c957600080fd5b506105d2611218565b005b3480156105e057600080fd5b506105fb60048036038101906105f69190613802565b6112a0565b6040516106089190613daa565b60405180910390f35b6106196112c0565b005b34801561062757600080fd5b5061063061137c565b60405161063d9190613cea565b60405180910390f35b34801561065257600080fd5b5061065b6113a6565b6040516106689190613dc5565b60405180910390f35b34801561067d57600080fd5b506106986004803603810190610693919061359f565b611438565b005b3480156106a657600080fd5b506106c160048036038101906106bc91906136f7565b6114f8565b005b3480156106cf57600080fd5b506106ea60048036038101906106e59190613802565b61150e565b6040516106f79190614067565b60405180910390f35b34801561070c57600080fd5b50610715611526565b6040516107229190613cea565b60405180910390f35b34801561073757600080fd5b50610752600480360381019061074d919061367c565b61154c565b005b34801561076057600080fd5b5061077b60048036038101906107769190613802565b6115ae565b6040516107889190613dc5565b60405180910390f35b34801561079d57600080fd5b506107a6611685565b6040516107b39190613dc5565b60405180910390f35b3480156107c857600080fd5b506107e360048036038101906107de9190613802565b611713565b005b3480156107f157600080fd5b5061080c60048036038101906108079190613733565b611799565b6040516108199190614067565b60405180910390f35b34801561082e57600080fd5b50610849600480360381019061084491906135f1565b6117f4565b6040516108569190613daa565b60405180910390f35b34801561086b57600080fd5b50610874611888565b6040516108819190614067565b60405180910390f35b34801561089657600080fd5b506108b160048036038101906108ac919061382b565b61188e565b005b3480156108bf57600080fd5b506108da60048036038101906108d5919061359f565b611ad6565b005b3480156108e857600080fd5b5061090360048036038101906108fe9190613733565b611bce565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610978575061097782611f57565b5b9050919050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6060600080546109b4906142f6565b80601f01602080910402602001604051908101604052809291908181526020018280546109e0906142f6565b8015610a2d5780601f10610a0257610100808354040283529160200191610a2d565b820191906000526020600020905b815481529060010190602001808311610a1057829003601f168201915b5050505050905090565b6000610a4282612039565b610a81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a7890613f87565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610ac78261102a565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2f90613fe7565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b576120a5565b73ffffffffffffffffffffffffffffffffffffffff161480610b865750610b8581610b806120a5565b6117f4565b5b610bc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bbc90613f07565b60405180910390fd5b610bcf83836120ad565b505050565b6000600880549050905090565b610be96120a5565b73ffffffffffffffffffffffffffffffffffffffff16610c0761137c565b73ffffffffffffffffffffffffffffffffffffffff1614610c5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5490613fa7565b60405180910390fd5b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610cb2610cac6120a5565b82612166565b610cf1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce890614007565b60405180910390fd5b610cfc838383612244565b505050565b6000610d0c83611160565b8210610d4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4490613e07565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610dc18383836040518060200160405280600081525061154c565b505050565b60606000610dd383611160565b905060008167ffffffffffffffff811115610e17577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015610e455781602001602082028036833780820191505090505b50905060005b82811015610eb557610e5d8582610d01565b828281518110610e96577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010181815250508080610ead90614359565b915050610e4b565b508092505050919050565b60116020528060005260406000206000915090505481565b6000610ee2610bd4565b8210610f23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1a90614027565b60405180910390fd5b60088281548110610f5d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b610f776120a5565b73ffffffffffffffffffffffffffffffffffffffff16610f9561137c565b73ffffffffffffffffffffffffffffffffffffffff1614610feb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe290613fa7565b60405180910390fd5b80600b90805190602001906110019291906133ae565b5050565b600f602052816000526040600020602052806000526040600020600091509150505481565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156110d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ca90613f47565b60405180910390fd5b80915050919050565b60006110e66120a5565b73ffffffffffffffffffffffffffffffffffffffff1661110461137c565b73ffffffffffffffffffffffffffffffffffffffff161461115a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115190613fa7565b60405180910390fd5b47905090565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156111d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c890613f27565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6112206120a5565b73ffffffffffffffffffffffffffffffffffffffff1661123e61137c565b73ffffffffffffffffffffffffffffffffffffffff1614611294576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128b90613fa7565b60405180910390fd5b61129e60006124ab565b565b60126020528060005260406000206000915054906101000a900460ff1681565b6112c86120a5565b73ffffffffffffffffffffffffffffffffffffffff166112e661137c565b73ffffffffffffffffffffffffffffffffffffffff161461133c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133390613fa7565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f1935050505061137a57600080fd5b565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546113b5906142f6565b80601f01602080910402602001604051908101604052809291908181526020018280546113e1906142f6565b801561142e5780601f106114035761010080835404028352916020019161142e565b820191906000526020600020905b81548152906001019060200180831161141157829003601f168201915b5050505050905090565b6114406120a5565b73ffffffffffffffffffffffffffffffffffffffff1661145e61137c565b73ffffffffffffffffffffffffffffffffffffffff16146114b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ab90613fa7565b60405180910390fd5b80600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61150a6115036120a5565b8383612571565b5050565b60106020528060005260406000206000915090505481565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61155d6115576120a5565b83612166565b61159c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159390614007565b60405180910390fd5b6115a8848484846126de565b50505050565b60606115b982612039565b6115f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ef90613fc7565b60405180910390fd5b600061160261273a565b9050600060106000858152602001908152602001600020549050600082511161163a576040518060200160405280600081525061167c565b81611644826127cc565b61165a600e548761165591906143a2565b6127cc565b60405160200161166c93929190613cae565b6040516020818303038152906040525b92505050919050565b600b8054611692906142f6565b80601f01602080910402602001604051908101604052809291908181526020018280546116be906142f6565b801561170b5780601f106116e05761010080835404028352916020019161170b565b820191906000526020600020905b8154815290600101906020018083116116ee57829003601f168201915b505050505081565b61171b6120a5565b73ffffffffffffffffffffffffffffffffffffffff1661173961137c565b73ffffffffffffffffffffffffffffffffffffffff161461178f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178690613fa7565b60405180910390fd5b80600e8190555050565b6000600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600e5481565b6118966120a5565b73ffffffffffffffffffffffffffffffffffffffff166118b461137c565b73ffffffffffffffffffffffffffffffffffffffff161461190a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190190613fa7565b60405180910390fd5b6000611914610bd4565b905060008411611959576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195090613de7565b60405180910390fd5b600e5484601160008581526020019081526020016000205461197b9190614185565b11156119bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b390614047565b60405180910390fd5b83600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008481526020019081526020016000206000828254611a1c9190614185565b9250508190555060006012600084815260200190815260200160002060006101000a81548160ff02191690831515021790555060005b84811015611aa55782601060008385611a6b9190614185565b815260200190815260200160002081905550611a92848284611a8d9190614185565b612979565b8080611a9d90614359565b915050611a52565b5083601160008481526020019081526020016000206000828254611ac99190614185565b9250508190555050505050565b611ade6120a5565b73ffffffffffffffffffffffffffffffffffffffff16611afc61137c565b73ffffffffffffffffffffffffffffffffffffffff1614611b52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4990613fa7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611bc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb990613e47565b60405180910390fd5b611bcb816124ab565b50565b600e54600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054148015611c4d57506012600082815260200190815260200160002060009054906101000a900460ff16155b15611f53576000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1663081812fc846040518263ffffffff1660e01b8152600401611cc99190614067565b60206040518083038186803b158015611ce157600080fd5b505afa158015611cf5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d1991906135c8565b73ffffffffffffffffffffffffffffffffffffffff16148015611e115750600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b8152600401611da99190614067565b60206040518083038186803b158015611dc157600080fd5b505afa158015611dd5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611df991906135c8565b73ffffffffffffffffffffffffffffffffffffffff16145b15611f5157818373ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f7122395061eb2f443643abf7be058b839a8d906bf9d2a815f4e616bad3452d5e60405160405180910390a48073ffffffffffffffffffffffffffffffffffffffff166342842e0e600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1685856040518463ffffffff1660e01b8152600401611ef293929190613d05565b600060405180830381600087803b158015611f0c57600080fd5b505af1158015611f20573d6000803e3d6000fd5b5050505060016012600084815260200190815260200160002060006101000a81548160ff0219169083151502179055505b505b5050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061202257507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612032575061203182612997565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166121208361102a565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061217182612039565b6121b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a790613ee7565b60405180910390fd5b60006121bb8361102a565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061222a57508373ffffffffffffffffffffffffffffffffffffffff1661221284610a37565b73ffffffffffffffffffffffffffffffffffffffff16145b8061223b575061223a81856117f4565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166122648261102a565b73ffffffffffffffffffffffffffffffffffffffff16146122ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122b190613e67565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561232a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232190613ea7565b60405180910390fd5b612335838383612a01565b6123406000826120ad565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612390919061420c565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546123e79190614185565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46124a6838383612b15565b505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156125e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125d790613ec7565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516126d19190613daa565b60405180910390a3505050565b6126e9848484612244565b6126f584848484612c42565b612734576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161272b90613e27565b60405180910390fd5b50505050565b6060600b8054612749906142f6565b80601f0160208091040260200160405190810160405280929190818152602001828054612775906142f6565b80156127c25780601f10612797576101008083540402835291602001916127c2565b820191906000526020600020905b8154815290600101906020018083116127a557829003601f168201915b5050505050905090565b60606000821415612814576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612974565b600082905060005b6000821461284657808061282f90614359565b915050600a8261283f91906141db565b915061281c565b60008167ffffffffffffffff811115612888577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156128ba5781602001600182028036833780820191505090505b5090505b6000851461296d576001826128d3919061420c565b9150600a856128e291906143a2565b60306128ee9190614185565b60f81b81838151811061292a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561296691906141db565b94506128be565b8093505050505b919050565b612993828260405180602001604052806000815250612dd9565b5050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612a0c838383612e34565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612a4f57612a4a81612e39565b612a8e565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612a8d57612a8c8382612e82565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612ad157612acc81612fef565b612b10565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612b0f57612b0e8282613132565b5b5b505050565b600060106000838152602001908152602001600020549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614612c32576001600f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000828254612bc2919061420c565b925050819055506001600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000828254612c2a9190614185565b925050819055505b612c3c8382611bce565b50505050565b6000612c638473ffffffffffffffffffffffffffffffffffffffff166131b1565b15612dcc578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612c8c6120a5565b8786866040518563ffffffff1660e01b8152600401612cae9493929190613d3c565b602060405180830381600087803b158015612cc857600080fd5b505af1925050508015612cf957506040513d601f19601f82011682018060405250810190612cf69190613798565b60015b612d7c573d8060008114612d29576040519150601f19603f3d011682016040523d82523d6000602084013e612d2e565b606091505b50600081511415612d74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d6b90613e27565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612dd1565b600190505b949350505050565b612de383836131d4565b612df06000848484612c42565b612e2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e2690613e27565b60405180910390fd5b505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612e8f84611160565b612e99919061420c565b9050600060076000848152602001908152602001600020549050818114612f7e576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050613003919061420c565b9050600060096000848152602001908152602001600020549050600060088381548110613059577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200154905080600883815481106130a1577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480613116577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b600061313d83611160565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613244576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161323b90613f67565b60405180910390fd5b61324d81612039565b1561328d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161328490613e87565b60405180910390fd5b61329960008383612a01565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546132e99190614185565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46133aa60008383612b15565b5050565b8280546133ba906142f6565b90600052602060002090601f0160209004810192826133dc5760008555613423565b82601f106133f557805160ff1916838001178555613423565b82800160010185558215613423579182015b82811115613422578251825591602001919060010190613407565b5b5090506134309190613434565b5090565b5b8082111561344d576000816000905550600101613435565b5090565b600061346461345f846140a7565b614082565b90508281526020810184848401111561347c57600080fd5b6134878482856142b4565b509392505050565b60006134a261349d846140d8565b614082565b9050828152602081018484840111156134ba57600080fd5b6134c58482856142b4565b509392505050565b6000813590506134dc81614a11565b92915050565b6000815190506134f181614a11565b92915050565b60008135905061350681614a28565b92915050565b60008135905061351b81614a3f565b92915050565b60008151905061353081614a3f565b92915050565b600082601f83011261354757600080fd5b8135613557848260208601613451565b91505092915050565b600082601f83011261357157600080fd5b813561358184826020860161348f565b91505092915050565b60008135905061359981614a56565b92915050565b6000602082840312156135b157600080fd5b60006135bf848285016134cd565b91505092915050565b6000602082840312156135da57600080fd5b60006135e8848285016134e2565b91505092915050565b6000806040838503121561360457600080fd5b6000613612858286016134cd565b9250506020613623858286016134cd565b9150509250929050565b60008060006060848603121561364257600080fd5b6000613650868287016134cd565b9350506020613661868287016134cd565b92505060406136728682870161358a565b9150509250925092565b6000806000806080858703121561369257600080fd5b60006136a0878288016134cd565b94505060206136b1878288016134cd565b93505060406136c28782880161358a565b925050606085013567ffffffffffffffff8111156136df57600080fd5b6136eb87828801613536565b91505092959194509250565b6000806040838503121561370a57600080fd5b6000613718858286016134cd565b9250506020613729858286016134f7565b9150509250929050565b6000806040838503121561374657600080fd5b6000613754858286016134cd565b92505060206137658582860161358a565b9150509250929050565b60006020828403121561378157600080fd5b600061378f8482850161350c565b91505092915050565b6000602082840312156137aa57600080fd5b60006137b884828501613521565b91505092915050565b6000602082840312156137d357600080fd5b600082013567ffffffffffffffff8111156137ed57600080fd5b6137f984828501613560565b91505092915050565b60006020828403121561381457600080fd5b60006138228482850161358a565b91505092915050565b60008060006060848603121561384057600080fd5b600061384e8682870161358a565b935050602061385f868287016134cd565b92505060406138708682870161358a565b9150509250925092565b60006138868383613c90565b60208301905092915050565b61389b81614240565b82525050565b60006138ac82614119565b6138b68185614147565b93506138c183614109565b8060005b838110156138f25781516138d9888261387a565b97506138e48361413a565b9250506001810190506138c5565b5085935050505092915050565b61390881614252565b82525050565b600061391982614124565b6139238185614158565b93506139338185602086016142c3565b61393c8161448f565b840191505092915050565b60006139528261412f565b61395c8185614169565b935061396c8185602086016142c3565b6139758161448f565b840191505092915050565b600061398b8261412f565b613995818561417a565b93506139a58185602086016142c3565b80840191505092915050565b60006139be601d83614169565b91506139c9826144a0565b602082019050919050565b60006139e1602b83614169565b91506139ec826144c9565b604082019050919050565b6000613a04603283614169565b9150613a0f82614518565b604082019050919050565b6000613a27602683614169565b9150613a3282614567565b604082019050919050565b6000613a4a602583614169565b9150613a55826145b6565b604082019050919050565b6000613a6d601c83614169565b9150613a7882614605565b602082019050919050565b6000613a90602483614169565b9150613a9b8261462e565b604082019050919050565b6000613ab3601983614169565b9150613abe8261467d565b602082019050919050565b6000613ad6602c83614169565b9150613ae1826146a6565b604082019050919050565b6000613af9603883614169565b9150613b04826146f5565b604082019050919050565b6000613b1c602a83614169565b9150613b2782614744565b604082019050919050565b6000613b3f602983614169565b9150613b4a82614793565b604082019050919050565b6000613b62602083614169565b9150613b6d826147e2565b602082019050919050565b6000613b85602c83614169565b9150613b908261480b565b604082019050919050565b6000613ba8602083614169565b9150613bb38261485a565b602082019050919050565b6000613bcb602f83614169565b9150613bd682614883565b604082019050919050565b6000613bee602183614169565b9150613bf9826148d2565b604082019050919050565b6000613c11603183614169565b9150613c1c82614921565b604082019050919050565b6000613c34602c83614169565b9150613c3f82614970565b604082019050919050565b6000613c57601e83614169565b9150613c62826149bf565b602082019050919050565b6000613c7a60018361417a565b9150613c85826149e8565b600182019050919050565b613c99816142aa565b82525050565b613ca8816142aa565b82525050565b6000613cba8286613980565b9150613cc68285613980565b9150613cd182613c6d565b9150613cdd8284613980565b9150819050949350505050565b6000602082019050613cff6000830184613892565b92915050565b6000606082019050613d1a6000830186613892565b613d276020830185613892565b613d346040830184613c9f565b949350505050565b6000608082019050613d516000830187613892565b613d5e6020830186613892565b613d6b6040830185613c9f565b8181036060830152613d7d818461390e565b905095945050505050565b60006020820190508181036000830152613da281846138a1565b905092915050565b6000602082019050613dbf60008301846138ff565b92915050565b60006020820190508181036000830152613ddf8184613947565b905092915050565b60006020820190508181036000830152613e00816139b1565b9050919050565b60006020820190508181036000830152613e20816139d4565b9050919050565b60006020820190508181036000830152613e40816139f7565b9050919050565b60006020820190508181036000830152613e6081613a1a565b9050919050565b60006020820190508181036000830152613e8081613a3d565b9050919050565b60006020820190508181036000830152613ea081613a60565b9050919050565b60006020820190508181036000830152613ec081613a83565b9050919050565b60006020820190508181036000830152613ee081613aa6565b9050919050565b60006020820190508181036000830152613f0081613ac9565b9050919050565b60006020820190508181036000830152613f2081613aec565b9050919050565b60006020820190508181036000830152613f4081613b0f565b9050919050565b60006020820190508181036000830152613f6081613b32565b9050919050565b60006020820190508181036000830152613f8081613b55565b9050919050565b60006020820190508181036000830152613fa081613b78565b9050919050565b60006020820190508181036000830152613fc081613b9b565b9050919050565b60006020820190508181036000830152613fe081613bbe565b9050919050565b6000602082019050818103600083015261400081613be1565b9050919050565b6000602082019050818103600083015261402081613c04565b9050919050565b6000602082019050818103600083015261404081613c27565b9050919050565b6000602082019050818103600083015261406081613c4a565b9050919050565b600060208201905061407c6000830184613c9f565b92915050565b600061408c61409d565b90506140988282614328565b919050565b6000604051905090565b600067ffffffffffffffff8211156140c2576140c1614460565b5b6140cb8261448f565b9050602081019050919050565b600067ffffffffffffffff8211156140f3576140f2614460565b5b6140fc8261448f565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614190826142aa565b915061419b836142aa565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156141d0576141cf6143d3565b5b828201905092915050565b60006141e6826142aa565b91506141f1836142aa565b92508261420157614200614402565b5b828204905092915050565b6000614217826142aa565b9150614222836142aa565b925082821015614235576142346143d3565b5b828203905092915050565b600061424b8261428a565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156142e15780820151818401526020810190506142c6565b838111156142f0576000848401525b50505050565b6000600282049050600182168061430e57607f821691505b6020821081141561432257614321614431565b5b50919050565b6143318261448f565b810181811067ffffffffffffffff821117156143505761434f614460565b5b80604052505050565b6000614364826142aa565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614397576143966143d3565b5b600182019050919050565b60006143ad826142aa565b91506143b8836142aa565b9250826143c8576143c7614402565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f4e65656420746f206d696e74206174206c65617374206f6e65204e4654000000600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f416c6c207468652070757a7a6c6520686164206265656e206d696e7465640000600082015250565b7f2f00000000000000000000000000000000000000000000000000000000000000600082015250565b614a1a81614240565b8114614a2557600080fd5b50565b614a3181614252565b8114614a3c57600080fd5b50565b614a488161425e565b8114614a5357600080fd5b50565b614a5f816142aa565b8114614a6a57600080fd5b5056fea2646970667358221220a2bdb152aabf13817e5e052631bdf93882500bcc5a70a4bea84e72ceaad0cfbc64736f6c6343000801003300000000000000000000000000000000000000000000000000000000000000800000000000000000000000005cc5b05a8a13e3fbdb0bb9fccd98d38e50f90c380000000000000000000000000000000000000000000000000000000000000009000000000000000000000000798eab545cfcb67d2436b7244c0d1133c5c0b944000000000000000000000000000000000000000000000000000000000000004568747470733a2f2f793468626376713876392e657865637574652d6170692e75732d656173742d312e616d617a6f6e6177732e636f6d2f70726f642f6d657461646174612f000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x60806040526004361061021a5760003560e01c8063715018a611610123578063b88d4fde116100ab578063e985e9c51161006f578063e985e9c514610822578063ebc1298f1461085f578063ef13c7a41461088a578063f2fde38b146108b3578063f73c4ab1146108dc5761021a565b8063b88d4fde1461072b578063c87b56dd14610754578063cfc86f7b14610791578063daebba0c146107bc578063e6fe13a9146107e55761021a565b806395d89b41116100f257806395d89b41146106465780639e20b84414610671578063a22cb4651461069a578063ad7fbb50146106c3578063b625be16146107005761021a565b8063715018a6146105bd5780637822e4b6146105d4578063853828b6146106115780638da5cb5b1461061b5761021a565b806342842e0e116101a657806355f804b31161017557806355f804b3146104b257806361137b75146104db5780636352211e146105185780636f9fb98a1461055557806370a08231146105805761021a565b806342842e0e146103d2578063438b6300146103fb57806347785b62146104385780634f6ccce7146104755761021a565b8063095ea7b3116101ed578063095ea7b3146102ef57806318160ddd146103185780631e5b28741461034357806323b872dd1461036c5780632f745c59146103955761021a565b806301ffc9a71461021f57806306b1da101461025c57806306fdde0314610287578063081812fc146102b2575b600080fd5b34801561022b57600080fd5b506102466004803603810190610241919061376f565b610905565b6040516102539190613daa565b60405180910390f35b34801561026857600080fd5b5061027161097f565b60405161027e9190613cea565b60405180910390f35b34801561029357600080fd5b5061029c6109a5565b6040516102a99190613dc5565b60405180910390f35b3480156102be57600080fd5b506102d960048036038101906102d49190613802565b610a37565b6040516102e69190613cea565b60405180910390f35b3480156102fb57600080fd5b5061031660048036038101906103119190613733565b610abc565b005b34801561032457600080fd5b5061032d610bd4565b60405161033a9190614067565b60405180910390f35b34801561034f57600080fd5b5061036a6004803603810190610365919061359f565b610be1565b005b34801561037857600080fd5b50610393600480360381019061038e919061362d565b610ca1565b005b3480156103a157600080fd5b506103bc60048036038101906103b79190613733565b610d01565b6040516103c99190614067565b60405180910390f35b3480156103de57600080fd5b506103f960048036038101906103f4919061362d565b610da6565b005b34801561040757600080fd5b50610422600480360381019061041d919061359f565b610dc6565b60405161042f9190613d88565b60405180910390f35b34801561044457600080fd5b5061045f600480360381019061045a9190613802565b610ec0565b60405161046c9190614067565b60405180910390f35b34801561048157600080fd5b5061049c60048036038101906104979190613802565b610ed8565b6040516104a99190614067565b60405180910390f35b3480156104be57600080fd5b506104d960048036038101906104d491906137c1565b610f6f565b005b3480156104e757600080fd5b5061050260048036038101906104fd9190613733565b611005565b60405161050f9190614067565b60405180910390f35b34801561052457600080fd5b5061053f600480360381019061053a9190613802565b61102a565b60405161054c9190613cea565b60405180910390f35b34801561056157600080fd5b5061056a6110dc565b6040516105779190614067565b60405180910390f35b34801561058c57600080fd5b506105a760048036038101906105a2919061359f565b611160565b6040516105b49190614067565b60405180910390f35b3480156105c957600080fd5b506105d2611218565b005b3480156105e057600080fd5b506105fb60048036038101906105f69190613802565b6112a0565b6040516106089190613daa565b60405180910390f35b6106196112c0565b005b34801561062757600080fd5b5061063061137c565b60405161063d9190613cea565b60405180910390f35b34801561065257600080fd5b5061065b6113a6565b6040516106689190613dc5565b60405180910390f35b34801561067d57600080fd5b506106986004803603810190610693919061359f565b611438565b005b3480156106a657600080fd5b506106c160048036038101906106bc91906136f7565b6114f8565b005b3480156106cf57600080fd5b506106ea60048036038101906106e59190613802565b61150e565b6040516106f79190614067565b60405180910390f35b34801561070c57600080fd5b50610715611526565b6040516107229190613cea565b60405180910390f35b34801561073757600080fd5b50610752600480360381019061074d919061367c565b61154c565b005b34801561076057600080fd5b5061077b60048036038101906107769190613802565b6115ae565b6040516107889190613dc5565b60405180910390f35b34801561079d57600080fd5b506107a6611685565b6040516107b39190613dc5565b60405180910390f35b3480156107c857600080fd5b506107e360048036038101906107de9190613802565b611713565b005b3480156107f157600080fd5b5061080c60048036038101906108079190613733565b611799565b6040516108199190614067565b60405180910390f35b34801561082e57600080fd5b50610849600480360381019061084491906135f1565b6117f4565b6040516108569190613daa565b60405180910390f35b34801561086b57600080fd5b50610874611888565b6040516108819190614067565b60405180910390f35b34801561089657600080fd5b506108b160048036038101906108ac919061382b565b61188e565b005b3480156108bf57600080fd5b506108da60048036038101906108d5919061359f565b611ad6565b005b3480156108e857600080fd5b5061090360048036038101906108fe9190613733565b611bce565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610978575061097782611f57565b5b9050919050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6060600080546109b4906142f6565b80601f01602080910402602001604051908101604052809291908181526020018280546109e0906142f6565b8015610a2d5780601f10610a0257610100808354040283529160200191610a2d565b820191906000526020600020905b815481529060010190602001808311610a1057829003601f168201915b5050505050905090565b6000610a4282612039565b610a81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a7890613f87565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610ac78261102a565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2f90613fe7565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b576120a5565b73ffffffffffffffffffffffffffffffffffffffff161480610b865750610b8581610b806120a5565b6117f4565b5b610bc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bbc90613f07565b60405180910390fd5b610bcf83836120ad565b505050565b6000600880549050905090565b610be96120a5565b73ffffffffffffffffffffffffffffffffffffffff16610c0761137c565b73ffffffffffffffffffffffffffffffffffffffff1614610c5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5490613fa7565b60405180910390fd5b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610cb2610cac6120a5565b82612166565b610cf1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce890614007565b60405180910390fd5b610cfc838383612244565b505050565b6000610d0c83611160565b8210610d4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4490613e07565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610dc18383836040518060200160405280600081525061154c565b505050565b60606000610dd383611160565b905060008167ffffffffffffffff811115610e17577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015610e455781602001602082028036833780820191505090505b50905060005b82811015610eb557610e5d8582610d01565b828281518110610e96577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010181815250508080610ead90614359565b915050610e4b565b508092505050919050565b60116020528060005260406000206000915090505481565b6000610ee2610bd4565b8210610f23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1a90614027565b60405180910390fd5b60088281548110610f5d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b610f776120a5565b73ffffffffffffffffffffffffffffffffffffffff16610f9561137c565b73ffffffffffffffffffffffffffffffffffffffff1614610feb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe290613fa7565b60405180910390fd5b80600b90805190602001906110019291906133ae565b5050565b600f602052816000526040600020602052806000526040600020600091509150505481565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156110d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ca90613f47565b60405180910390fd5b80915050919050565b60006110e66120a5565b73ffffffffffffffffffffffffffffffffffffffff1661110461137c565b73ffffffffffffffffffffffffffffffffffffffff161461115a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115190613fa7565b60405180910390fd5b47905090565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156111d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c890613f27565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6112206120a5565b73ffffffffffffffffffffffffffffffffffffffff1661123e61137c565b73ffffffffffffffffffffffffffffffffffffffff1614611294576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128b90613fa7565b60405180910390fd5b61129e60006124ab565b565b60126020528060005260406000206000915054906101000a900460ff1681565b6112c86120a5565b73ffffffffffffffffffffffffffffffffffffffff166112e661137c565b73ffffffffffffffffffffffffffffffffffffffff161461133c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133390613fa7565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f1935050505061137a57600080fd5b565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546113b5906142f6565b80601f01602080910402602001604051908101604052809291908181526020018280546113e1906142f6565b801561142e5780601f106114035761010080835404028352916020019161142e565b820191906000526020600020905b81548152906001019060200180831161141157829003601f168201915b5050505050905090565b6114406120a5565b73ffffffffffffffffffffffffffffffffffffffff1661145e61137c565b73ffffffffffffffffffffffffffffffffffffffff16146114b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ab90613fa7565b60405180910390fd5b80600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61150a6115036120a5565b8383612571565b5050565b60106020528060005260406000206000915090505481565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61155d6115576120a5565b83612166565b61159c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159390614007565b60405180910390fd5b6115a8848484846126de565b50505050565b60606115b982612039565b6115f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ef90613fc7565b60405180910390fd5b600061160261273a565b9050600060106000858152602001908152602001600020549050600082511161163a576040518060200160405280600081525061167c565b81611644826127cc565b61165a600e548761165591906143a2565b6127cc565b60405160200161166c93929190613cae565b6040516020818303038152906040525b92505050919050565b600b8054611692906142f6565b80601f01602080910402602001604051908101604052809291908181526020018280546116be906142f6565b801561170b5780601f106116e05761010080835404028352916020019161170b565b820191906000526020600020905b8154815290600101906020018083116116ee57829003601f168201915b505050505081565b61171b6120a5565b73ffffffffffffffffffffffffffffffffffffffff1661173961137c565b73ffffffffffffffffffffffffffffffffffffffff161461178f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178690613fa7565b60405180910390fd5b80600e8190555050565b6000600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600e5481565b6118966120a5565b73ffffffffffffffffffffffffffffffffffffffff166118b461137c565b73ffffffffffffffffffffffffffffffffffffffff161461190a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190190613fa7565b60405180910390fd5b6000611914610bd4565b905060008411611959576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195090613de7565b60405180910390fd5b600e5484601160008581526020019081526020016000205461197b9190614185565b11156119bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b390614047565b60405180910390fd5b83600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008481526020019081526020016000206000828254611a1c9190614185565b9250508190555060006012600084815260200190815260200160002060006101000a81548160ff02191690831515021790555060005b84811015611aa55782601060008385611a6b9190614185565b815260200190815260200160002081905550611a92848284611a8d9190614185565b612979565b8080611a9d90614359565b915050611a52565b5083601160008481526020019081526020016000206000828254611ac99190614185565b9250508190555050505050565b611ade6120a5565b73ffffffffffffffffffffffffffffffffffffffff16611afc61137c565b73ffffffffffffffffffffffffffffffffffffffff1614611b52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4990613fa7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611bc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb990613e47565b60405180910390fd5b611bcb816124ab565b50565b600e54600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054148015611c4d57506012600082815260200190815260200160002060009054906101000a900460ff16155b15611f53576000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1663081812fc846040518263ffffffff1660e01b8152600401611cc99190614067565b60206040518083038186803b158015611ce157600080fd5b505afa158015611cf5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d1991906135c8565b73ffffffffffffffffffffffffffffffffffffffff16148015611e115750600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b8152600401611da99190614067565b60206040518083038186803b158015611dc157600080fd5b505afa158015611dd5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611df991906135c8565b73ffffffffffffffffffffffffffffffffffffffff16145b15611f5157818373ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f7122395061eb2f443643abf7be058b839a8d906bf9d2a815f4e616bad3452d5e60405160405180910390a48073ffffffffffffffffffffffffffffffffffffffff166342842e0e600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1685856040518463ffffffff1660e01b8152600401611ef293929190613d05565b600060405180830381600087803b158015611f0c57600080fd5b505af1158015611f20573d6000803e3d6000fd5b5050505060016012600084815260200190815260200160002060006101000a81548160ff0219169083151502179055505b505b5050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061202257507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612032575061203182612997565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166121208361102a565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061217182612039565b6121b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a790613ee7565b60405180910390fd5b60006121bb8361102a565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061222a57508373ffffffffffffffffffffffffffffffffffffffff1661221284610a37565b73ffffffffffffffffffffffffffffffffffffffff16145b8061223b575061223a81856117f4565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166122648261102a565b73ffffffffffffffffffffffffffffffffffffffff16146122ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122b190613e67565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561232a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232190613ea7565b60405180910390fd5b612335838383612a01565b6123406000826120ad565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612390919061420c565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546123e79190614185565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46124a6838383612b15565b505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156125e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125d790613ec7565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516126d19190613daa565b60405180910390a3505050565b6126e9848484612244565b6126f584848484612c42565b612734576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161272b90613e27565b60405180910390fd5b50505050565b6060600b8054612749906142f6565b80601f0160208091040260200160405190810160405280929190818152602001828054612775906142f6565b80156127c25780601f10612797576101008083540402835291602001916127c2565b820191906000526020600020905b8154815290600101906020018083116127a557829003601f168201915b5050505050905090565b60606000821415612814576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612974565b600082905060005b6000821461284657808061282f90614359565b915050600a8261283f91906141db565b915061281c565b60008167ffffffffffffffff811115612888577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156128ba5781602001600182028036833780820191505090505b5090505b6000851461296d576001826128d3919061420c565b9150600a856128e291906143a2565b60306128ee9190614185565b60f81b81838151811061292a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561296691906141db565b94506128be565b8093505050505b919050565b612993828260405180602001604052806000815250612dd9565b5050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612a0c838383612e34565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612a4f57612a4a81612e39565b612a8e565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612a8d57612a8c8382612e82565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612ad157612acc81612fef565b612b10565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612b0f57612b0e8282613132565b5b5b505050565b600060106000838152602001908152602001600020549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614612c32576001600f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000828254612bc2919061420c565b925050819055506001600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000828254612c2a9190614185565b925050819055505b612c3c8382611bce565b50505050565b6000612c638473ffffffffffffffffffffffffffffffffffffffff166131b1565b15612dcc578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612c8c6120a5565b8786866040518563ffffffff1660e01b8152600401612cae9493929190613d3c565b602060405180830381600087803b158015612cc857600080fd5b505af1925050508015612cf957506040513d601f19601f82011682018060405250810190612cf69190613798565b60015b612d7c573d8060008114612d29576040519150601f19603f3d011682016040523d82523d6000602084013e612d2e565b606091505b50600081511415612d74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d6b90613e27565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612dd1565b600190505b949350505050565b612de383836131d4565b612df06000848484612c42565b612e2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e2690613e27565b60405180910390fd5b505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612e8f84611160565b612e99919061420c565b9050600060076000848152602001908152602001600020549050818114612f7e576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050613003919061420c565b9050600060096000848152602001908152602001600020549050600060088381548110613059577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200154905080600883815481106130a1577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480613116577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b600061313d83611160565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613244576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161323b90613f67565b60405180910390fd5b61324d81612039565b1561328d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161328490613e87565b60405180910390fd5b61329960008383612a01565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546132e99190614185565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46133aa60008383612b15565b5050565b8280546133ba906142f6565b90600052602060002090601f0160209004810192826133dc5760008555613423565b82601f106133f557805160ff1916838001178555613423565b82800160010185558215613423579182015b82811115613422578251825591602001919060010190613407565b5b5090506134309190613434565b5090565b5b8082111561344d576000816000905550600101613435565b5090565b600061346461345f846140a7565b614082565b90508281526020810184848401111561347c57600080fd5b6134878482856142b4565b509392505050565b60006134a261349d846140d8565b614082565b9050828152602081018484840111156134ba57600080fd5b6134c58482856142b4565b509392505050565b6000813590506134dc81614a11565b92915050565b6000815190506134f181614a11565b92915050565b60008135905061350681614a28565b92915050565b60008135905061351b81614a3f565b92915050565b60008151905061353081614a3f565b92915050565b600082601f83011261354757600080fd5b8135613557848260208601613451565b91505092915050565b600082601f83011261357157600080fd5b813561358184826020860161348f565b91505092915050565b60008135905061359981614a56565b92915050565b6000602082840312156135b157600080fd5b60006135bf848285016134cd565b91505092915050565b6000602082840312156135da57600080fd5b60006135e8848285016134e2565b91505092915050565b6000806040838503121561360457600080fd5b6000613612858286016134cd565b9250506020613623858286016134cd565b9150509250929050565b60008060006060848603121561364257600080fd5b6000613650868287016134cd565b9350506020613661868287016134cd565b92505060406136728682870161358a565b9150509250925092565b6000806000806080858703121561369257600080fd5b60006136a0878288016134cd565b94505060206136b1878288016134cd565b93505060406136c28782880161358a565b925050606085013567ffffffffffffffff8111156136df57600080fd5b6136eb87828801613536565b91505092959194509250565b6000806040838503121561370a57600080fd5b6000613718858286016134cd565b9250506020613729858286016134f7565b9150509250929050565b6000806040838503121561374657600080fd5b6000613754858286016134cd565b92505060206137658582860161358a565b9150509250929050565b60006020828403121561378157600080fd5b600061378f8482850161350c565b91505092915050565b6000602082840312156137aa57600080fd5b60006137b884828501613521565b91505092915050565b6000602082840312156137d357600080fd5b600082013567ffffffffffffffff8111156137ed57600080fd5b6137f984828501613560565b91505092915050565b60006020828403121561381457600080fd5b60006138228482850161358a565b91505092915050565b60008060006060848603121561384057600080fd5b600061384e8682870161358a565b935050602061385f868287016134cd565b92505060406138708682870161358a565b9150509250925092565b60006138868383613c90565b60208301905092915050565b61389b81614240565b82525050565b60006138ac82614119565b6138b68185614147565b93506138c183614109565b8060005b838110156138f25781516138d9888261387a565b97506138e48361413a565b9250506001810190506138c5565b5085935050505092915050565b61390881614252565b82525050565b600061391982614124565b6139238185614158565b93506139338185602086016142c3565b61393c8161448f565b840191505092915050565b60006139528261412f565b61395c8185614169565b935061396c8185602086016142c3565b6139758161448f565b840191505092915050565b600061398b8261412f565b613995818561417a565b93506139a58185602086016142c3565b80840191505092915050565b60006139be601d83614169565b91506139c9826144a0565b602082019050919050565b60006139e1602b83614169565b91506139ec826144c9565b604082019050919050565b6000613a04603283614169565b9150613a0f82614518565b604082019050919050565b6000613a27602683614169565b9150613a3282614567565b604082019050919050565b6000613a4a602583614169565b9150613a55826145b6565b604082019050919050565b6000613a6d601c83614169565b9150613a7882614605565b602082019050919050565b6000613a90602483614169565b9150613a9b8261462e565b604082019050919050565b6000613ab3601983614169565b9150613abe8261467d565b602082019050919050565b6000613ad6602c83614169565b9150613ae1826146a6565b604082019050919050565b6000613af9603883614169565b9150613b04826146f5565b604082019050919050565b6000613b1c602a83614169565b9150613b2782614744565b604082019050919050565b6000613b3f602983614169565b9150613b4a82614793565b604082019050919050565b6000613b62602083614169565b9150613b6d826147e2565b602082019050919050565b6000613b85602c83614169565b9150613b908261480b565b604082019050919050565b6000613ba8602083614169565b9150613bb38261485a565b602082019050919050565b6000613bcb602f83614169565b9150613bd682614883565b604082019050919050565b6000613bee602183614169565b9150613bf9826148d2565b604082019050919050565b6000613c11603183614169565b9150613c1c82614921565b604082019050919050565b6000613c34602c83614169565b9150613c3f82614970565b604082019050919050565b6000613c57601e83614169565b9150613c62826149bf565b602082019050919050565b6000613c7a60018361417a565b9150613c85826149e8565b600182019050919050565b613c99816142aa565b82525050565b613ca8816142aa565b82525050565b6000613cba8286613980565b9150613cc68285613980565b9150613cd182613c6d565b9150613cdd8284613980565b9150819050949350505050565b6000602082019050613cff6000830184613892565b92915050565b6000606082019050613d1a6000830186613892565b613d276020830185613892565b613d346040830184613c9f565b949350505050565b6000608082019050613d516000830187613892565b613d5e6020830186613892565b613d6b6040830185613c9f565b8181036060830152613d7d818461390e565b905095945050505050565b60006020820190508181036000830152613da281846138a1565b905092915050565b6000602082019050613dbf60008301846138ff565b92915050565b60006020820190508181036000830152613ddf8184613947565b905092915050565b60006020820190508181036000830152613e00816139b1565b9050919050565b60006020820190508181036000830152613e20816139d4565b9050919050565b60006020820190508181036000830152613e40816139f7565b9050919050565b60006020820190508181036000830152613e6081613a1a565b9050919050565b60006020820190508181036000830152613e8081613a3d565b9050919050565b60006020820190508181036000830152613ea081613a60565b9050919050565b60006020820190508181036000830152613ec081613a83565b9050919050565b60006020820190508181036000830152613ee081613aa6565b9050919050565b60006020820190508181036000830152613f0081613ac9565b9050919050565b60006020820190508181036000830152613f2081613aec565b9050919050565b60006020820190508181036000830152613f4081613b0f565b9050919050565b60006020820190508181036000830152613f6081613b32565b9050919050565b60006020820190508181036000830152613f8081613b55565b9050919050565b60006020820190508181036000830152613fa081613b78565b9050919050565b60006020820190508181036000830152613fc081613b9b565b9050919050565b60006020820190508181036000830152613fe081613bbe565b9050919050565b6000602082019050818103600083015261400081613be1565b9050919050565b6000602082019050818103600083015261402081613c04565b9050919050565b6000602082019050818103600083015261404081613c27565b9050919050565b6000602082019050818103600083015261406081613c4a565b9050919050565b600060208201905061407c6000830184613c9f565b92915050565b600061408c61409d565b90506140988282614328565b919050565b6000604051905090565b600067ffffffffffffffff8211156140c2576140c1614460565b5b6140cb8261448f565b9050602081019050919050565b600067ffffffffffffffff8211156140f3576140f2614460565b5b6140fc8261448f565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614190826142aa565b915061419b836142aa565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156141d0576141cf6143d3565b5b828201905092915050565b60006141e6826142aa565b91506141f1836142aa565b92508261420157614200614402565b5b828204905092915050565b6000614217826142aa565b9150614222836142aa565b925082821015614235576142346143d3565b5b828203905092915050565b600061424b8261428a565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156142e15780820151818401526020810190506142c6565b838111156142f0576000848401525b50505050565b6000600282049050600182168061430e57607f821691505b6020821081141561432257614321614431565b5b50919050565b6143318261448f565b810181811067ffffffffffffffff821117156143505761434f614460565b5b80604052505050565b6000614364826142aa565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614397576143966143d3565b5b600182019050919050565b60006143ad826142aa565b91506143b8836142aa565b9250826143c8576143c7614402565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f4e65656420746f206d696e74206174206c65617374206f6e65204e4654000000600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f416c6c207468652070757a7a6c6520686164206265656e206d696e7465640000600082015250565b7f2f00000000000000000000000000000000000000000000000000000000000000600082015250565b614a1a81614240565b8114614a2557600080fd5b50565b614a3181614252565b8114614a3c57600080fd5b50565b614a488161425e565b8114614a5357600080fd5b50565b614a5f816142aa565b8114614a6a57600080fd5b5056fea2646970667358221220a2bdb152aabf13817e5e052631bdf93882500bcc5a70a4bea84e72ceaad0cfbc64736f6c63430008010033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000000800000000000000000000000005cc5b05a8a13e3fbdb0bb9fccd98d38e50f90c380000000000000000000000000000000000000000000000000000000000000009000000000000000000000000798eab545cfcb67d2436b7244c0d1133c5c0b944000000000000000000000000000000000000000000000000000000000000004568747470733a2f2f793468626376713876392e657865637574652d6170692e75732d656173742d312e616d617a6f6e6177732e636f6d2f70726f642f6d657461646174612f000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : baseTokenURI (string): https://y4hbcvq8v9.execute-api.us-east-1.amazonaws.com/prod/metadata/
Arg [1] : landContract (address): 0x5CC5B05a8A13E3fBDB0BB9FcCd98D38e50F90c38
Arg [2] : totalPiece (uint256): 9
Arg [3] : landOwner (address): 0x798EaB545cFcB67D2436B7244c0d1133c5c0b944
-----Encoded View---------------
8 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [1] : 0000000000000000000000005cc5b05a8a13e3fbdb0bb9fccd98d38e50f90c38
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000009
Arg [3] : 000000000000000000000000798eab545cfcb67d2436b7244c0d1133c5c0b944
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000045
Arg [5] : 68747470733a2f2f793468626376713876392e657865637574652d6170692e75
Arg [6] : 732d656173742d312e616d617a6f6e6177732e636f6d2f70726f642f6d657461
Arg [7] : 646174612f000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
45805:4923:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36922:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46059:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22650:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24209:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23732:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37562:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49569:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24959:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37230:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25369:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47438:375;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46342:51;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37752:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49459:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46202:75;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22344:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49311:117;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22074:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44789:103;;;;;;;;;;;;;:::i;:::-;;46400:49;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50602:123;;;:::i;:::-;;44138:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22819:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49687:99;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24502:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46284:51;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46113:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25625:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48167:722;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46025:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49794:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47821:190;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24728:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46167:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49905:689;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45047:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46790:640;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36922:224;37024:4;37063:35;37048:50;;;:11;:50;;;;:90;;;;37102:36;37126:11;37102:23;:36::i;:::-;37048:90;37041:97;;36922:224;;;:::o;46059:28::-;;;;;;;;;;;;;:::o;22650:100::-;22704:13;22737:5;22730:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22650:100;:::o;24209:221::-;24285:7;24313:16;24321:7;24313;:16::i;:::-;24305:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;24398:15;:24;24414:7;24398:24;;;;;;;;;;;;;;;;;;;;;24391:31;;24209:221;;;:::o;23732:411::-;23813:13;23829:23;23844:7;23829:14;:23::i;:::-;23813:39;;23877:5;23871:11;;:2;:11;;;;23863:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;23971:5;23955:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;23980:37;23997:5;24004:12;:10;:12::i;:::-;23980:16;:37::i;:::-;23955:62;23933:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;24114:21;24123:2;24127:7;24114:8;:21::i;:::-;23732:411;;;:::o;37562:113::-;37623:7;37650:10;:17;;;;37643:24;;37562:113;:::o;49569:110::-;44369:12;:10;:12::i;:::-;44358:23;;:7;:5;:7::i;:::-;:23;;;44350:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49659:12:::1;49643:13;;:28;;;;;;;;;;;;;;;;;;49569:110:::0;:::o;24959:339::-;25154:41;25173:12;:10;:12::i;:::-;25187:7;25154:18;:41::i;:::-;25146:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;25262:28;25272:4;25278:2;25282:7;25262:9;:28::i;:::-;24959:339;;;:::o;37230:256::-;37327:7;37363:23;37380:5;37363:16;:23::i;:::-;37355:5;:31;37347:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;37452:12;:19;37465:5;37452:19;;;;;;;;;;;;;;;:26;37472:5;37452:26;;;;;;;;;;;;37445:33;;37230:256;;;;:::o;25369:185::-;25507:39;25524:4;25530:2;25534:7;25507:39;;;;;;;;;;;;:16;:39::i;:::-;25369:185;;;:::o;47438:375::-;47525:16;47559:18;47580:17;47590:6;47580:9;:17::i;:::-;47559:38;;47608:25;47650:10;47636:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47608:53;;47677:9;47672:108;47692:10;47688:1;:14;47672:108;;;47738:30;47758:6;47766:1;47738:19;:30::i;:::-;47724:8;47733:1;47724:11;;;;;;;;;;;;;;;;;;;;;:44;;;;;47704:3;;;;;:::i;:::-;;;;47672:108;;;;47797:8;47790:15;;;;47438:375;;;:::o;46342:51::-;;;;;;;;;;;;;;;;;:::o;37752:233::-;37827:7;37863:30;:28;:30::i;:::-;37855:5;:38;37847:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;37960:10;37971:5;37960:17;;;;;;;;;;;;;;;;;;;;;;;;37953:24;;37752:233;;;:::o;49459:102::-;44369:12;:10;:12::i;:::-;44358:23;;:7;:5;:7::i;:::-;:23;;;44350:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49546:7:::1;49530:13;:23;;;;;;;;;;;;:::i;:::-;;49459:102:::0;:::o;46202:75::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;22344:239::-;22416:7;22436:13;22452:7;:16;22460:7;22452:16;;;;;;;;;;;;;;;;;;;;;22436:32;;22504:1;22487:19;;:5;:19;;;;22479:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;22570:5;22563:12;;;22344:239;;;:::o;49311:117::-;49372:7;44369:12;:10;:12::i;:::-;44358:23;;:7;:5;:7::i;:::-;:23;;;44350:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49399:21:::1;49392:28;;49311:117:::0;:::o;22074:208::-;22146:7;22191:1;22174:19;;:5;:19;;;;22166:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;22258:9;:16;22268:5;22258:16;;;;;;;;;;;;;;;;22251:23;;22074:208;;;:::o;44789:103::-;44369:12;:10;:12::i;:::-;44358:23;;:7;:5;:7::i;:::-;:23;;;44350:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44854:30:::1;44881:1;44854:18;:30::i;:::-;44789:103::o:0;46400:49::-;;;;;;;;;;;;;;;;;;;;;;:::o;50602:123::-;44369:12;:10;:12::i;:::-;44358:23;;:7;:5;:7::i;:::-;:23;;;44350:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50677:10:::1;50669:24;;:47;50694:21;50669:47;;;;;;;;;;;;;;;;;;;;;;;50661:56;;;::::0;::::1;;50602:123::o:0;44138:87::-;44184:7;44211:6;;;;;;;;;;;44204:13;;44138:87;:::o;22819:104::-;22875:13;22908:7;22901:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22819:104;:::o;49687:99::-;44369:12;:10;:12::i;:::-;44358:23;;:7;:5;:7::i;:::-;:23;;;44350:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49769:9:::1;49756:10;;:22;;;;;;;;;;;;;;;;;;49687:99:::0;:::o;24502:155::-;24597:52;24616:12;:10;:12::i;:::-;24630:8;24640;24597:18;:52::i;:::-;24502:155;;:::o;46284:51::-;;;;;;;;;;;;;;;;;:::o;46113:25::-;;;;;;;;;;;;;:::o;25625:328::-;25800:41;25819:12;:10;:12::i;:::-;25833:7;25800:18;:41::i;:::-;25792:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;25906:39;25920:4;25926:2;25930:7;25939:5;25906:13;:39::i;:::-;25625:328;;;;:::o;48167:722::-;48285:13;48338:16;48346:7;48338;:16::i;:::-;48316:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;48440:21;48464:10;:8;:10::i;:::-;48440:34;;48485:14;48502:16;:25;48519:7;48502:25;;;;;;;;;;;;48485:42;;48582:1;48564:7;48558:21;:25;:323;;;;;;;;;;;;;;;;;48675:7;48709:17;:6;:15;:17::i;:::-;48783:34;48794:11;;48784:7;:21;;;;:::i;:::-;48783:32;:34::i;:::-;48632:208;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;48558:323;48538:343;;;;48167:722;;;:::o;46025:27::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;49794:103::-;44369:12;:10;:12::i;:::-;44358:23;;:7;:5;:7::i;:::-;:23;;;44350:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49879:10:::1;49865:11;:24;;;;49794:103:::0;:::o;47821:190::-;47935:7;47967:20;:28;47988:6;47967:28;;;;;;;;;;;;;;;:36;47996:6;47967:36;;;;;;;;;;;;47960:43;;47821:190;;;;:::o;24728:164::-;24825:4;24849:18;:25;24868:5;24849:25;;;;;;;;;;;;;;;:35;24875:8;24849:35;;;;;;;;;;;;;;;;;;;;;;;;;24842:42;;24728:164;;;;:::o;46167:26::-;;;;:::o;49905:689::-;44369:12;:10;:12::i;:::-;44358:23;;:7;:5;:7::i;:::-;:23;;;44350:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50034:14:::1;50051:13;:11;:13::i;:::-;50034:30;;50097:1;50083:11;:15;50075:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;50207:11;;50192;50165:16;:24;50182:6;50165:24;;;;;;;;;;;;:38;;;;:::i;:::-;:53;;50143:133;;;;;;;;;;;;:::i;:::-;;;;;;;;;50324:11;50287:20;:25;50308:3;50287:25;;;;;;;;;;;;;;;:33;50313:6;50287:33;;;;;;;;;;;;:48;;;;;;;:::i;:::-;;;;;;;;50374:5;50346:17;:25;50364:6;50346:25;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;50395:9;50390:147;50414:11;50410:1;:15;50390:147;;;50478:6;50447:16;:28;50473:1;50464:6;:10;;;;:::i;:::-;50447:28;;;;;;;;;;;:37;;;;50499:26;50509:3;50523:1;50514:6;:10;;;;:::i;:::-;50499:9;:26::i;:::-;50427:3;;;;;:::i;:::-;;;;50390:147;;;;50575:11;50547:16;:24;50564:6;50547:24;;;;;;;;;;;;:39;;;;;;;:::i;:::-;;;;;;;;44429:1;49905:689:::0;;;:::o;45047:201::-;44369:12;:10;:12::i;:::-;44358:23;;:7;:5;:7::i;:::-;:23;;;44350:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45156:1:::1;45136:22;;:8;:22;;;;45128:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;45212:28;45231:8;45212:18;:28::i;:::-;45047:201:::0;:::o;46790:640::-;46919:11;;46881:20;:25;46902:3;46881:25;;;;;;;;;;;;;;;:34;46907:7;46881:34;;;;;;;;;;;;:49;:93;;;;;46948:17;:26;46966:7;46948:26;;;;;;;;;;;;;;;;;;;;;46947:27;46881:93;46863:560;;;47001:18;47030:13;;;;;;;;;;;47001:43;;47124:4;47081:48;;:10;:22;;;47104:7;47081:31;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:48;;;:110;;;;;47181:10;;;;;;;;;;;47150:41;;:10;:18;;;47169:7;47150:27;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:41;;;47081:110;47059:353;;;47264:7;47259:3;47231:41;;47247:10;;;;;;;;;;;47231:41;;;;;;;;;;;;47291:10;:27;;;47319:10;;;;;;;;;;;47331:3;47336:7;47291:53;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47392:4;47363:17;:26;47381:7;47363:26;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;47059:353;46863:560;;46790:640;;:::o;21705:305::-;21807:4;21859:25;21844:40;;;:11;:40;;;;:105;;;;21916:33;21901:48;;;:11;:48;;;;21844:105;:158;;;;21966:36;21990:11;21966:23;:36::i;:::-;21844:158;21824:178;;21705:305;;;:::o;27463:127::-;27528:4;27580:1;27552:30;;:7;:16;27560:7;27552:16;;;;;;;;;;;;;;;;;;;;;:30;;;;27545:37;;27463:127;;;:::o;16911:98::-;16964:7;16991:10;16984:17;;16911:98;:::o;31609:174::-;31711:2;31684:15;:24;31700:7;31684:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;31767:7;31763:2;31729:46;;31738:23;31753:7;31738:14;:23::i;:::-;31729:46;;;;;;;;;;;;31609:174;;:::o;27757:348::-;27850:4;27875:16;27883:7;27875;:16::i;:::-;27867:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27951:13;27967:23;27982:7;27967:14;:23::i;:::-;27951:39;;28020:5;28009:16;;:7;:16;;;:51;;;;28053:7;28029:31;;:20;28041:7;28029:11;:20::i;:::-;:31;;;28009:51;:87;;;;28064:32;28081:5;28088:7;28064:16;:32::i;:::-;28009:87;28001:96;;;27757:348;;;;:::o;30866:625::-;31025:4;30998:31;;:23;31013:7;30998:14;:23::i;:::-;:31;;;30990:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;31104:1;31090:16;;:2;:16;;;;31082:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;31160:39;31181:4;31187:2;31191:7;31160:20;:39::i;:::-;31264:29;31281:1;31285:7;31264:8;:29::i;:::-;31325:1;31306:9;:15;31316:4;31306:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;31354:1;31337:9;:13;31347:2;31337:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;31385:2;31366:7;:16;31374:7;31366:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;31424:7;31420:2;31405:27;;31414:4;31405:27;;;;;;;;;;;;31445:38;31465:4;31471:2;31475:7;31445:19;:38::i;:::-;30866:625;;;:::o;45408:191::-;45482:16;45501:6;;;;;;;;;;;45482:25;;45527:8;45518:6;;:17;;;;;;;;;;;;;;;;;;45582:8;45551:40;;45572:8;45551:40;;;;;;;;;;;;45408:191;;:::o;31925:315::-;32080:8;32071:17;;:5;:17;;;;32063:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;32167:8;32129:18;:25;32148:5;32129:25;;;;;;;;;;;;;;;:35;32155:8;32129:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;32213:8;32191:41;;32206:5;32191:41;;;32223:8;32191:41;;;;;;:::i;:::-;;;;;;;;31925:315;;;:::o;26835:::-;26992:28;27002:4;27008:2;27012:7;26992:9;:28::i;:::-;27039:48;27062:4;27068:2;27072:7;27081:5;27039:22;:48::i;:::-;27031:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;26835:315;;;;:::o;48045:114::-;48105:13;48138;48131:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48045:114;:::o;17498:723::-;17554:13;17784:1;17775:5;:10;17771:53;;;17802:10;;;;;;;;;;;;;;;;;;;;;17771:53;17834:12;17849:5;17834:20;;17865:14;17890:78;17905:1;17897:4;:9;17890:78;;17923:8;;;;;:::i;:::-;;;;17954:2;17946:10;;;;;:::i;:::-;;;17890:78;;;17978:19;18010:6;18000:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17978:39;;18028:154;18044:1;18035:5;:10;18028:154;;18072:1;18062:11;;;;;:::i;:::-;;;18139:2;18131:5;:10;;;;:::i;:::-;18118:2;:24;;;;:::i;:::-;18105:39;;18088:6;18095;18088:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;18168:2;18159:11;;;;;:::i;:::-;;;18028:154;;;18206:6;18192:21;;;;;17498:723;;;;:::o;28447:110::-;28523:26;28533:2;28537:7;28523:26;;;;;;;;;;;;:9;:26::i;:::-;28447:110;;:::o;20128:157::-;20213:4;20252:25;20237:40;;;:11;:40;;;;20230:47;;20128:157;;;:::o;38598:589::-;38742:45;38769:4;38775:2;38779:7;38742:26;:45::i;:::-;38820:1;38804:18;;:4;:18;;;38800:187;;;38839:40;38871:7;38839:31;:40::i;:::-;38800:187;;;38909:2;38901:10;;:4;:10;;;38897:90;;38928:47;38961:4;38967:7;38928:32;:47::i;:::-;38897:90;38800:187;39015:1;39001:16;;:2;:16;;;38997:183;;;39034:45;39071:7;39034:36;:45::i;:::-;38997:183;;;39107:4;39101:10;;:2;:10;;;39097:83;;39128:40;39156:2;39160:7;39128:27;:40::i;:::-;39097:83;38997:183;38598:589;;;:::o;48897:383::-;49040:14;49057:16;:25;49074:7;49057:25;;;;;;;;;;;;49040:42;;49113:1;49097:18;;:4;:18;;;49093:142;;49170:1;49132:20;:26;49153:4;49132:26;;;;;;;;;;;;;;;:34;49159:6;49132:34;;;;;;;;;;;;:39;;;;;;;:::i;:::-;;;;;;;;49222:1;49186:20;:24;49207:2;49186:24;;;;;;;;;;;;;;;:32;49211:6;49186:32;;;;;;;;;;;;:37;;;;;;;:::i;:::-;;;;;;;;49093:142;49245:27;49261:2;49265:6;49245:15;:27::i;:::-;48897:383;;;;:::o;32805:799::-;32960:4;32981:15;:2;:13;;;:15::i;:::-;32977:620;;;33033:2;33017:36;;;33054:12;:10;:12::i;:::-;33068:4;33074:7;33083:5;33017:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;33013:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33276:1;33259:6;:13;:18;33255:272;;;33302:60;;;;;;;;;;:::i;:::-;;;;;;;;33255:272;33477:6;33471:13;33462:6;33458:2;33454:15;33447:38;33013:529;33150:41;;;33140:51;;;:6;:51;;;;33133:58;;;;;32977:620;33581:4;33574:11;;32805:799;;;;;;;:::o;28784:321::-;28914:18;28920:2;28924:7;28914:5;:18::i;:::-;28965:54;28996:1;29000:2;29004:7;29013:5;28965:22;:54::i;:::-;28943:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;28784:321;;;:::o;34176:126::-;;;;:::o;39910:164::-;40014:10;:17;;;;39987:15;:24;40003:7;39987:24;;;;;;;;;;;:44;;;;40042:10;40058:7;40042:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39910:164;:::o;40701:988::-;40967:22;41017:1;40992:22;41009:4;40992:16;:22::i;:::-;:26;;;;:::i;:::-;40967:51;;41029:18;41050:17;:26;41068:7;41050:26;;;;;;;;;;;;41029:47;;41197:14;41183:10;:28;41179:328;;41228:19;41250:12;:18;41263:4;41250:18;;;;;;;;;;;;;;;:34;41269:14;41250:34;;;;;;;;;;;;41228:56;;41334:11;41301:12;:18;41314:4;41301:18;;;;;;;;;;;;;;;:30;41320:10;41301:30;;;;;;;;;;;:44;;;;41451:10;41418:17;:30;41436:11;41418:30;;;;;;;;;;;:43;;;;41179:328;;41603:17;:26;41621:7;41603:26;;;;;;;;;;;41596:33;;;41647:12;:18;41660:4;41647:18;;;;;;;;;;;;;;;:34;41666:14;41647:34;;;;;;;;;;;41640:41;;;40701:988;;;;:::o;41984:1079::-;42237:22;42282:1;42262:10;:17;;;;:21;;;;:::i;:::-;42237:46;;42294:18;42315:15;:24;42331:7;42315:24;;;;;;;;;;;;42294:45;;42666:19;42688:10;42699:14;42688:26;;;;;;;;;;;;;;;;;;;;;;;;42666:48;;42752:11;42727:10;42738;42727:22;;;;;;;;;;;;;;;;;;;;;;;:36;;;;42863:10;42832:15;:28;42848:11;42832:28;;;;;;;;;;;:41;;;;43004:15;:24;43020:7;43004:24;;;;;;;;;;;42997:31;;;43039:10;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41984:1079;;;;:::o;39488:221::-;39573:14;39590:20;39607:2;39590:16;:20::i;:::-;39573:37;;39648:7;39621:12;:16;39634:2;39621:16;;;;;;;;;;;;;;;:24;39638:6;39621:24;;;;;;;;;;;:34;;;;39695:6;39666:17;:26;39684:7;39666:26;;;;;;;;;;;:35;;;;39488:221;;;:::o;8954:326::-;9014:4;9271:1;9249:7;:19;;;:23;9242:30;;8954:326;;;:::o;29441:439::-;29535:1;29521:16;;:2;:16;;;;29513:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;29594:16;29602:7;29594;:16::i;:::-;29593:17;29585:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;29656:45;29685:1;29689:2;29693:7;29656:20;:45::i;:::-;29731:1;29714:9;:13;29724:2;29714:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;29762:2;29743:7;:16;29751:7;29743:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;29807:7;29803:2;29782:33;;29799:1;29782:33;;;;;;;;;;;;29828:44;29856:1;29860:2;29864:7;29828:19;:44::i;:::-;29441:439;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:343:1:-;;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:2;;;290:1;287;280:12;249:2;303:41;337:6;332:3;327;303:41;:::i;:::-;90:260;;;;;;:::o;356:345::-;;459:66;475:49;517:6;475:49;:::i;:::-;459:66;:::i;:::-;450:75;;548:6;541:5;534:21;586:4;579:5;575:16;624:3;615:6;610:3;606:16;603:25;600:2;;;641:1;638;631:12;600:2;654:41;688:6;683:3;678;654:41;:::i;:::-;440:261;;;;;;:::o;707:139::-;;791:6;778:20;769:29;;807:33;834:5;807:33;:::i;:::-;759:87;;;;:::o;852:143::-;;940:6;934:13;925:22;;956:33;983:5;956:33;:::i;:::-;915:80;;;;:::o;1001:133::-;;1082:6;1069:20;1060:29;;1098:30;1122:5;1098:30;:::i;:::-;1050:84;;;;:::o;1140:137::-;;1223:6;1210:20;1201:29;;1239:32;1265:5;1239:32;:::i;:::-;1191:86;;;;:::o;1283:141::-;;1370:6;1364:13;1355:22;;1386:32;1412:5;1386:32;:::i;:::-;1345:79;;;;:::o;1443:271::-;;1547:3;1540:4;1532:6;1528:17;1524:27;1514:2;;1565:1;1562;1555:12;1514:2;1605:6;1592:20;1630:78;1704:3;1696:6;1689:4;1681:6;1677:17;1630:78;:::i;:::-;1621:87;;1504:210;;;;;:::o;1734:273::-;;1839:3;1832:4;1824:6;1820:17;1816:27;1806:2;;1857:1;1854;1847:12;1806:2;1897:6;1884:20;1922:79;1997:3;1989:6;1982:4;1974:6;1970:17;1922:79;:::i;:::-;1913:88;;1796:211;;;;;:::o;2013:139::-;;2097:6;2084:20;2075:29;;2113:33;2140:5;2113:33;:::i;:::-;2065:87;;;;:::o;2158:262::-;;2266:2;2254:9;2245:7;2241:23;2237:32;2234:2;;;2282:1;2279;2272:12;2234:2;2325:1;2350:53;2395:7;2386:6;2375:9;2371:22;2350:53;:::i;:::-;2340:63;;2296:117;2224:196;;;;:::o;2426:284::-;;2545:2;2533:9;2524:7;2520:23;2516:32;2513:2;;;2561:1;2558;2551:12;2513:2;2604:1;2629:64;2685:7;2676:6;2665:9;2661:22;2629:64;:::i;:::-;2619:74;;2575:128;2503:207;;;;:::o;2716:407::-;;;2841:2;2829:9;2820:7;2816:23;2812:32;2809:2;;;2857:1;2854;2847:12;2809:2;2900:1;2925:53;2970:7;2961:6;2950:9;2946:22;2925:53;:::i;:::-;2915:63;;2871:117;3027:2;3053:53;3098:7;3089:6;3078:9;3074:22;3053:53;:::i;:::-;3043:63;;2998:118;2799:324;;;;;:::o;3129:552::-;;;;3271:2;3259:9;3250:7;3246:23;3242:32;3239:2;;;3287:1;3284;3277:12;3239:2;3330:1;3355:53;3400:7;3391:6;3380:9;3376:22;3355:53;:::i;:::-;3345:63;;3301:117;3457:2;3483:53;3528:7;3519:6;3508:9;3504:22;3483:53;:::i;:::-;3473:63;;3428:118;3585:2;3611:53;3656:7;3647:6;3636:9;3632:22;3611:53;:::i;:::-;3601:63;;3556:118;3229:452;;;;;:::o;3687:809::-;;;;;3855:3;3843:9;3834:7;3830:23;3826:33;3823:2;;;3872:1;3869;3862:12;3823:2;3915:1;3940:53;3985:7;3976:6;3965:9;3961:22;3940:53;:::i;:::-;3930:63;;3886:117;4042:2;4068:53;4113:7;4104:6;4093:9;4089:22;4068:53;:::i;:::-;4058:63;;4013:118;4170:2;4196:53;4241:7;4232:6;4221:9;4217:22;4196:53;:::i;:::-;4186:63;;4141:118;4326:2;4315:9;4311:18;4298:32;4357:18;4349:6;4346:30;4343:2;;;4389:1;4386;4379:12;4343:2;4417:62;4471:7;4462:6;4451:9;4447:22;4417:62;:::i;:::-;4407:72;;4269:220;3813:683;;;;;;;:::o;4502:401::-;;;4624:2;4612:9;4603:7;4599:23;4595:32;4592:2;;;4640:1;4637;4630:12;4592:2;4683:1;4708:53;4753:7;4744:6;4733:9;4729:22;4708:53;:::i;:::-;4698:63;;4654:117;4810:2;4836:50;4878:7;4869:6;4858:9;4854:22;4836:50;:::i;:::-;4826:60;;4781:115;4582:321;;;;;:::o;4909:407::-;;;5034:2;5022:9;5013:7;5009:23;5005:32;5002:2;;;5050:1;5047;5040:12;5002:2;5093:1;5118:53;5163:7;5154:6;5143:9;5139:22;5118:53;:::i;:::-;5108:63;;5064:117;5220:2;5246:53;5291:7;5282:6;5271:9;5267:22;5246:53;:::i;:::-;5236:63;;5191:118;4992:324;;;;;:::o;5322:260::-;;5429:2;5417:9;5408:7;5404:23;5400:32;5397:2;;;5445:1;5442;5435:12;5397:2;5488:1;5513:52;5557:7;5548:6;5537:9;5533:22;5513:52;:::i;:::-;5503:62;;5459:116;5387:195;;;;:::o;5588:282::-;;5706:2;5694:9;5685:7;5681:23;5677:32;5674:2;;;5722:1;5719;5712:12;5674:2;5765:1;5790:63;5845:7;5836:6;5825:9;5821:22;5790:63;:::i;:::-;5780:73;;5736:127;5664:206;;;;:::o;5876:375::-;;5994:2;5982:9;5973:7;5969:23;5965:32;5962:2;;;6010:1;6007;6000:12;5962:2;6081:1;6070:9;6066:17;6053:31;6111:18;6103:6;6100:30;6097:2;;;6143:1;6140;6133:12;6097:2;6171:63;6226:7;6217:6;6206:9;6202:22;6171:63;:::i;:::-;6161:73;;6024:220;5952:299;;;;:::o;6257:262::-;;6365:2;6353:9;6344:7;6340:23;6336:32;6333:2;;;6381:1;6378;6371:12;6333:2;6424:1;6449:53;6494:7;6485:6;6474:9;6470:22;6449:53;:::i;:::-;6439:63;;6395:117;6323:196;;;;:::o;6525:552::-;;;;6667:2;6655:9;6646:7;6642:23;6638:32;6635:2;;;6683:1;6680;6673:12;6635:2;6726:1;6751:53;6796:7;6787:6;6776:9;6772:22;6751:53;:::i;:::-;6741:63;;6697:117;6853:2;6879:53;6924:7;6915:6;6904:9;6900:22;6879:53;:::i;:::-;6869:63;;6824:118;6981:2;7007:53;7052:7;7043:6;7032:9;7028:22;7007:53;:::i;:::-;6997:63;;6952:118;6625:452;;;;;:::o;7083:179::-;;7173:46;7215:3;7207:6;7173:46;:::i;:::-;7251:4;7246:3;7242:14;7228:28;;7163:99;;;;:::o;7268:118::-;7355:24;7373:5;7355:24;:::i;:::-;7350:3;7343:37;7333:53;;:::o;7422:732::-;;7570:54;7618:5;7570:54;:::i;:::-;7640:86;7719:6;7714:3;7640:86;:::i;:::-;7633:93;;7750:56;7800:5;7750:56;:::i;:::-;7829:7;7860:1;7845:284;7870:6;7867:1;7864:13;7845:284;;;7946:6;7940:13;7973:63;8032:3;8017:13;7973:63;:::i;:::-;7966:70;;8059:60;8112:6;8059:60;:::i;:::-;8049:70;;7905:224;7892:1;7889;7885:9;7880:14;;7845:284;;;7849:14;8145:3;8138:10;;7546:608;;;;;;;:::o;8160:109::-;8241:21;8256:5;8241:21;:::i;:::-;8236:3;8229:34;8219:50;;:::o;8275:360::-;;8389:38;8421:5;8389:38;:::i;:::-;8443:70;8506:6;8501:3;8443:70;:::i;:::-;8436:77;;8522:52;8567:6;8562:3;8555:4;8548:5;8544:16;8522:52;:::i;:::-;8599:29;8621:6;8599:29;:::i;:::-;8594:3;8590:39;8583:46;;8365:270;;;;;:::o;8641:364::-;;8757:39;8790:5;8757:39;:::i;:::-;8812:71;8876:6;8871:3;8812:71;:::i;:::-;8805:78;;8892:52;8937:6;8932:3;8925:4;8918:5;8914:16;8892:52;:::i;:::-;8969:29;8991:6;8969:29;:::i;:::-;8964:3;8960:39;8953:46;;8733:272;;;;;:::o;9011:377::-;;9145:39;9178:5;9145:39;:::i;:::-;9200:89;9282:6;9277:3;9200:89;:::i;:::-;9193:96;;9298:52;9343:6;9338:3;9331:4;9324:5;9320:16;9298:52;:::i;:::-;9375:6;9370:3;9366:16;9359:23;;9121:267;;;;;:::o;9394:366::-;;9557:67;9621:2;9616:3;9557:67;:::i;:::-;9550:74;;9633:93;9722:3;9633:93;:::i;:::-;9751:2;9746:3;9742:12;9735:19;;9540:220;;;:::o;9766:366::-;;9929:67;9993:2;9988:3;9929:67;:::i;:::-;9922:74;;10005:93;10094:3;10005:93;:::i;:::-;10123:2;10118:3;10114:12;10107:19;;9912:220;;;:::o;10138:366::-;;10301:67;10365:2;10360:3;10301:67;:::i;:::-;10294:74;;10377:93;10466:3;10377:93;:::i;:::-;10495:2;10490:3;10486:12;10479:19;;10284:220;;;:::o;10510:366::-;;10673:67;10737:2;10732:3;10673:67;:::i;:::-;10666:74;;10749:93;10838:3;10749:93;:::i;:::-;10867:2;10862:3;10858:12;10851:19;;10656:220;;;:::o;10882:366::-;;11045:67;11109:2;11104:3;11045:67;:::i;:::-;11038:74;;11121:93;11210:3;11121:93;:::i;:::-;11239:2;11234:3;11230:12;11223:19;;11028:220;;;:::o;11254:366::-;;11417:67;11481:2;11476:3;11417:67;:::i;:::-;11410:74;;11493:93;11582:3;11493:93;:::i;:::-;11611:2;11606:3;11602:12;11595:19;;11400:220;;;:::o;11626:366::-;;11789:67;11853:2;11848:3;11789:67;:::i;:::-;11782:74;;11865:93;11954:3;11865:93;:::i;:::-;11983:2;11978:3;11974:12;11967:19;;11772:220;;;:::o;11998:366::-;;12161:67;12225:2;12220:3;12161:67;:::i;:::-;12154:74;;12237:93;12326:3;12237:93;:::i;:::-;12355:2;12350:3;12346:12;12339:19;;12144:220;;;:::o;12370:366::-;;12533:67;12597:2;12592:3;12533:67;:::i;:::-;12526:74;;12609:93;12698:3;12609:93;:::i;:::-;12727:2;12722:3;12718:12;12711:19;;12516:220;;;:::o;12742:366::-;;12905:67;12969:2;12964:3;12905:67;:::i;:::-;12898:74;;12981:93;13070:3;12981:93;:::i;:::-;13099:2;13094:3;13090:12;13083:19;;12888:220;;;:::o;13114:366::-;;13277:67;13341:2;13336:3;13277:67;:::i;:::-;13270:74;;13353:93;13442:3;13353:93;:::i;:::-;13471:2;13466:3;13462:12;13455:19;;13260:220;;;:::o;13486:366::-;;13649:67;13713:2;13708:3;13649:67;:::i;:::-;13642:74;;13725:93;13814:3;13725:93;:::i;:::-;13843:2;13838:3;13834:12;13827:19;;13632:220;;;:::o;13858:366::-;;14021:67;14085:2;14080:3;14021:67;:::i;:::-;14014:74;;14097:93;14186:3;14097:93;:::i;:::-;14215:2;14210:3;14206:12;14199:19;;14004:220;;;:::o;14230:366::-;;14393:67;14457:2;14452:3;14393:67;:::i;:::-;14386:74;;14469:93;14558:3;14469:93;:::i;:::-;14587:2;14582:3;14578:12;14571:19;;14376:220;;;:::o;14602:366::-;;14765:67;14829:2;14824:3;14765:67;:::i;:::-;14758:74;;14841:93;14930:3;14841:93;:::i;:::-;14959:2;14954:3;14950:12;14943:19;;14748:220;;;:::o;14974:366::-;;15137:67;15201:2;15196:3;15137:67;:::i;:::-;15130:74;;15213:93;15302:3;15213:93;:::i;:::-;15331:2;15326:3;15322:12;15315:19;;15120:220;;;:::o;15346:366::-;;15509:67;15573:2;15568:3;15509:67;:::i;:::-;15502:74;;15585:93;15674:3;15585:93;:::i;:::-;15703:2;15698:3;15694:12;15687:19;;15492:220;;;:::o;15718:366::-;;15881:67;15945:2;15940:3;15881:67;:::i;:::-;15874:74;;15957:93;16046:3;15957:93;:::i;:::-;16075:2;16070:3;16066:12;16059:19;;15864:220;;;:::o;16090:366::-;;16253:67;16317:2;16312:3;16253:67;:::i;:::-;16246:74;;16329:93;16418:3;16329:93;:::i;:::-;16447:2;16442:3;16438:12;16431:19;;16236:220;;;:::o;16462:366::-;;16625:67;16689:2;16684:3;16625:67;:::i;:::-;16618:74;;16701:93;16790:3;16701:93;:::i;:::-;16819:2;16814:3;16810:12;16803:19;;16608:220;;;:::o;16834:400::-;;17015:84;17097:1;17092:3;17015:84;:::i;:::-;17008:91;;17108:93;17197:3;17108:93;:::i;:::-;17226:1;17221:3;17217:11;17210:18;;16998:236;;;:::o;17240:108::-;17317:24;17335:5;17317:24;:::i;:::-;17312:3;17305:37;17295:53;;:::o;17354:118::-;17441:24;17459:5;17441:24;:::i;:::-;17436:3;17429:37;17419:53;;:::o;17478:861::-;;17829:95;17920:3;17911:6;17829:95;:::i;:::-;17822:102;;17941:95;18032:3;18023:6;17941:95;:::i;:::-;17934:102;;18053:148;18197:3;18053:148;:::i;:::-;18046:155;;18218:95;18309:3;18300:6;18218:95;:::i;:::-;18211:102;;18330:3;18323:10;;17811:528;;;;;;:::o;18345:222::-;;18476:2;18465:9;18461:18;18453:26;;18489:71;18557:1;18546:9;18542:17;18533:6;18489:71;:::i;:::-;18443:124;;;;:::o;18573:442::-;;18760:2;18749:9;18745:18;18737:26;;18773:71;18841:1;18830:9;18826:17;18817:6;18773:71;:::i;:::-;18854:72;18922:2;18911:9;18907:18;18898:6;18854:72;:::i;:::-;18936;19004:2;18993:9;18989:18;18980:6;18936:72;:::i;:::-;18727:288;;;;;;:::o;19021:640::-;;19254:3;19243:9;19239:19;19231:27;;19268:71;19336:1;19325:9;19321:17;19312:6;19268:71;:::i;:::-;19349:72;19417:2;19406:9;19402:18;19393:6;19349:72;:::i;:::-;19431;19499:2;19488:9;19484:18;19475:6;19431:72;:::i;:::-;19550:9;19544:4;19540:20;19535:2;19524:9;19520:18;19513:48;19578:76;19649:4;19640:6;19578:76;:::i;:::-;19570:84;;19221:440;;;;;;;:::o;19667:373::-;;19848:2;19837:9;19833:18;19825:26;;19897:9;19891:4;19887:20;19883:1;19872:9;19868:17;19861:47;19925:108;20028:4;20019:6;19925:108;:::i;:::-;19917:116;;19815:225;;;;:::o;20046:210::-;;20171:2;20160:9;20156:18;20148:26;;20184:65;20246:1;20235:9;20231:17;20222:6;20184:65;:::i;:::-;20138:118;;;;:::o;20262:313::-;;20413:2;20402:9;20398:18;20390:26;;20462:9;20456:4;20452:20;20448:1;20437:9;20433:17;20426:47;20490:78;20563:4;20554:6;20490:78;:::i;:::-;20482:86;;20380:195;;;;:::o;20581:419::-;;20785:2;20774:9;20770:18;20762:26;;20834:9;20828:4;20824:20;20820:1;20809:9;20805:17;20798:47;20862:131;20988:4;20862:131;:::i;:::-;20854:139;;20752:248;;;:::o;21006:419::-;;21210:2;21199:9;21195:18;21187:26;;21259:9;21253:4;21249:20;21245:1;21234:9;21230:17;21223:47;21287:131;21413:4;21287:131;:::i;:::-;21279:139;;21177:248;;;:::o;21431:419::-;;21635:2;21624:9;21620:18;21612:26;;21684:9;21678:4;21674:20;21670:1;21659:9;21655:17;21648:47;21712:131;21838:4;21712:131;:::i;:::-;21704:139;;21602:248;;;:::o;21856:419::-;;22060:2;22049:9;22045:18;22037:26;;22109:9;22103:4;22099:20;22095:1;22084:9;22080:17;22073:47;22137:131;22263:4;22137:131;:::i;:::-;22129:139;;22027:248;;;:::o;22281:419::-;;22485:2;22474:9;22470:18;22462:26;;22534:9;22528:4;22524:20;22520:1;22509:9;22505:17;22498:47;22562:131;22688:4;22562:131;:::i;:::-;22554:139;;22452:248;;;:::o;22706:419::-;;22910:2;22899:9;22895:18;22887:26;;22959:9;22953:4;22949:20;22945:1;22934:9;22930:17;22923:47;22987:131;23113:4;22987:131;:::i;:::-;22979:139;;22877:248;;;:::o;23131:419::-;;23335:2;23324:9;23320:18;23312:26;;23384:9;23378:4;23374:20;23370:1;23359:9;23355:17;23348:47;23412:131;23538:4;23412:131;:::i;:::-;23404:139;;23302:248;;;:::o;23556:419::-;;23760:2;23749:9;23745:18;23737:26;;23809:9;23803:4;23799:20;23795:1;23784:9;23780:17;23773:47;23837:131;23963:4;23837:131;:::i;:::-;23829:139;;23727:248;;;:::o;23981:419::-;;24185:2;24174:9;24170:18;24162:26;;24234:9;24228:4;24224:20;24220:1;24209:9;24205:17;24198:47;24262:131;24388:4;24262:131;:::i;:::-;24254:139;;24152:248;;;:::o;24406:419::-;;24610:2;24599:9;24595:18;24587:26;;24659:9;24653:4;24649:20;24645:1;24634:9;24630:17;24623:47;24687:131;24813:4;24687:131;:::i;:::-;24679:139;;24577:248;;;:::o;24831:419::-;;25035:2;25024:9;25020:18;25012:26;;25084:9;25078:4;25074:20;25070:1;25059:9;25055:17;25048:47;25112:131;25238:4;25112:131;:::i;:::-;25104:139;;25002:248;;;:::o;25256:419::-;;25460:2;25449:9;25445:18;25437:26;;25509:9;25503:4;25499:20;25495:1;25484:9;25480:17;25473:47;25537:131;25663:4;25537:131;:::i;:::-;25529:139;;25427:248;;;:::o;25681:419::-;;25885:2;25874:9;25870:18;25862:26;;25934:9;25928:4;25924:20;25920:1;25909:9;25905:17;25898:47;25962:131;26088:4;25962:131;:::i;:::-;25954:139;;25852:248;;;:::o;26106:419::-;;26310:2;26299:9;26295:18;26287:26;;26359:9;26353:4;26349:20;26345:1;26334:9;26330:17;26323:47;26387:131;26513:4;26387:131;:::i;:::-;26379:139;;26277:248;;;:::o;26531:419::-;;26735:2;26724:9;26720:18;26712:26;;26784:9;26778:4;26774:20;26770:1;26759:9;26755:17;26748:47;26812:131;26938:4;26812:131;:::i;:::-;26804:139;;26702:248;;;:::o;26956:419::-;;27160:2;27149:9;27145:18;27137:26;;27209:9;27203:4;27199:20;27195:1;27184:9;27180:17;27173:47;27237:131;27363:4;27237:131;:::i;:::-;27229:139;;27127:248;;;:::o;27381:419::-;;27585:2;27574:9;27570:18;27562:26;;27634:9;27628:4;27624:20;27620:1;27609:9;27605:17;27598:47;27662:131;27788:4;27662:131;:::i;:::-;27654:139;;27552:248;;;:::o;27806:419::-;;28010:2;27999:9;27995:18;27987:26;;28059:9;28053:4;28049:20;28045:1;28034:9;28030:17;28023:47;28087:131;28213:4;28087:131;:::i;:::-;28079:139;;27977:248;;;:::o;28231:419::-;;28435:2;28424:9;28420:18;28412:26;;28484:9;28478:4;28474:20;28470:1;28459:9;28455:17;28448:47;28512:131;28638:4;28512:131;:::i;:::-;28504:139;;28402:248;;;:::o;28656:419::-;;28860:2;28849:9;28845:18;28837:26;;28909:9;28903:4;28899:20;28895:1;28884:9;28880:17;28873:47;28937:131;29063:4;28937:131;:::i;:::-;28929:139;;28827:248;;;:::o;29081:222::-;;29212:2;29201:9;29197:18;29189:26;;29225:71;29293:1;29282:9;29278:17;29269:6;29225:71;:::i;:::-;29179:124;;;;:::o;29309:129::-;;29370:20;;:::i;:::-;29360:30;;29399:33;29427:4;29419:6;29399:33;:::i;:::-;29350:88;;;:::o;29444:75::-;;29510:2;29504:9;29494:19;;29484:35;:::o;29525:307::-;;29676:18;29668:6;29665:30;29662:2;;;29698:18;;:::i;:::-;29662:2;29736:29;29758:6;29736:29;:::i;:::-;29728:37;;29820:4;29814;29810:15;29802:23;;29591:241;;;:::o;29838:308::-;;29990:18;29982:6;29979:30;29976:2;;;30012:18;;:::i;:::-;29976:2;30050:29;30072:6;30050:29;:::i;:::-;30042:37;;30134:4;30128;30124:15;30116:23;;29905:241;;;:::o;30152:132::-;;30242:3;30234:11;;30272:4;30267:3;30263:14;30255:22;;30224:60;;;:::o;30290:114::-;;30391:5;30385:12;30375:22;;30364:40;;;:::o;30410:98::-;;30495:5;30489:12;30479:22;;30468:40;;;:::o;30514:99::-;;30600:5;30594:12;30584:22;;30573:40;;;:::o;30619:113::-;;30721:4;30716:3;30712:14;30704:22;;30694:38;;;:::o;30738:184::-;;30871:6;30866:3;30859:19;30911:4;30906:3;30902:14;30887:29;;30849:73;;;;:::o;30928:168::-;;31045:6;31040:3;31033:19;31085:4;31080:3;31076:14;31061:29;;31023:73;;;;:::o;31102:169::-;;31220:6;31215:3;31208:19;31260:4;31255:3;31251:14;31236:29;;31198:73;;;;:::o;31277:148::-;;31416:3;31401:18;;31391:34;;;;:::o;31431:305::-;;31490:20;31508:1;31490:20;:::i;:::-;31485:25;;31524:20;31542:1;31524:20;:::i;:::-;31519:25;;31678:1;31610:66;31606:74;31603:1;31600:81;31597:2;;;31684:18;;:::i;:::-;31597:2;31728:1;31725;31721:9;31714:16;;31475:261;;;;:::o;31742:185::-;;31799:20;31817:1;31799:20;:::i;:::-;31794:25;;31833:20;31851:1;31833:20;:::i;:::-;31828:25;;31872:1;31862:2;;31877:18;;:::i;:::-;31862:2;31919:1;31916;31912:9;31907:14;;31784:143;;;;:::o;31933:191::-;;31993:20;32011:1;31993:20;:::i;:::-;31988:25;;32027:20;32045:1;32027:20;:::i;:::-;32022:25;;32066:1;32063;32060:8;32057:2;;;32071:18;;:::i;:::-;32057:2;32116:1;32113;32109:9;32101:17;;31978:146;;;;:::o;32130:96::-;;32196:24;32214:5;32196:24;:::i;:::-;32185:35;;32175:51;;;:::o;32232:90::-;;32309:5;32302:13;32295:21;32284:32;;32274:48;;;:::o;32328:149::-;;32404:66;32397:5;32393:78;32382:89;;32372:105;;;:::o;32483:126::-;;32560:42;32553:5;32549:54;32538:65;;32528:81;;;:::o;32615:77::-;;32681:5;32670:16;;32660:32;;;:::o;32698:154::-;32782:6;32777:3;32772;32759:30;32844:1;32835:6;32830:3;32826:16;32819:27;32749:103;;;:::o;32858:307::-;32926:1;32936:113;32950:6;32947:1;32944:13;32936:113;;;33035:1;33030:3;33026:11;33020:18;33016:1;33011:3;33007:11;33000:39;32972:2;32969:1;32965:10;32960:15;;32936:113;;;33067:6;33064:1;33061:13;33058:2;;;33147:1;33138:6;33133:3;33129:16;33122:27;33058:2;32907:258;;;;:::o;33171:320::-;;33252:1;33246:4;33242:12;33232:22;;33299:1;33293:4;33289:12;33320:18;33310:2;;33376:4;33368:6;33364:17;33354:27;;33310:2;33438;33430:6;33427:14;33407:18;33404:38;33401:2;;;33457:18;;:::i;:::-;33401:2;33222:269;;;;:::o;33497:281::-;33580:27;33602:4;33580:27;:::i;:::-;33572:6;33568:40;33710:6;33698:10;33695:22;33674:18;33662:10;33659:34;33656:62;33653:2;;;33721:18;;:::i;:::-;33653:2;33761:10;33757:2;33750:22;33540:238;;;:::o;33784:233::-;;33846:24;33864:5;33846:24;:::i;:::-;33837:33;;33892:66;33885:5;33882:77;33879:2;;;33962:18;;:::i;:::-;33879:2;34009:1;34002:5;33998:13;33991:20;;33827:190;;;:::o;34023:176::-;;34072:20;34090:1;34072:20;:::i;:::-;34067:25;;34106:20;34124:1;34106:20;:::i;:::-;34101:25;;34145:1;34135:2;;34150:18;;:::i;:::-;34135:2;34191:1;34188;34184:9;34179:14;;34057:142;;;;:::o;34205:180::-;34253:77;34250:1;34243:88;34350:4;34347:1;34340:15;34374:4;34371:1;34364:15;34391:180;34439:77;34436:1;34429:88;34536:4;34533:1;34526:15;34560:4;34557:1;34550:15;34577:180;34625:77;34622:1;34615:88;34722:4;34719:1;34712:15;34746:4;34743:1;34736:15;34763:180;34811:77;34808:1;34801:88;34908:4;34905:1;34898:15;34932:4;34929:1;34922:15;34949:102;;35041:2;35037:7;35032:2;35025:5;35021:14;35017:28;35007:38;;34997:54;;;:::o;35057:179::-;35197:31;35193:1;35185:6;35181:14;35174:55;35163:73;:::o;35242:230::-;35382:34;35378:1;35370:6;35366:14;35359:58;35451:13;35446:2;35438:6;35434:15;35427:38;35348:124;:::o;35478:237::-;35618:34;35614:1;35606:6;35602:14;35595:58;35687:20;35682:2;35674:6;35670:15;35663:45;35584:131;:::o;35721:225::-;35861:34;35857:1;35849:6;35845:14;35838:58;35930:8;35925:2;35917:6;35913:15;35906:33;35827:119;:::o;35952:224::-;36092:34;36088:1;36080:6;36076:14;36069:58;36161:7;36156:2;36148:6;36144:15;36137:32;36058:118;:::o;36182:178::-;36322:30;36318:1;36310:6;36306:14;36299:54;36288:72;:::o;36366:223::-;36506:34;36502:1;36494:6;36490:14;36483:58;36575:6;36570:2;36562:6;36558:15;36551:31;36472:117;:::o;36595:175::-;36735:27;36731:1;36723:6;36719:14;36712:51;36701:69;:::o;36776:231::-;36916:34;36912:1;36904:6;36900:14;36893:58;36985:14;36980:2;36972:6;36968:15;36961:39;36882:125;:::o;37013:243::-;37153:34;37149:1;37141:6;37137:14;37130:58;37222:26;37217:2;37209:6;37205:15;37198:51;37119:137;:::o;37262:229::-;37402:34;37398:1;37390:6;37386:14;37379:58;37471:12;37466:2;37458:6;37454:15;37447:37;37368:123;:::o;37497:228::-;37637:34;37633:1;37625:6;37621:14;37614:58;37706:11;37701:2;37693:6;37689:15;37682:36;37603:122;:::o;37731:182::-;37871:34;37867:1;37859:6;37855:14;37848:58;37837:76;:::o;37919:231::-;38059:34;38055:1;38047:6;38043:14;38036:58;38128:14;38123:2;38115:6;38111:15;38104:39;38025:125;:::o;38156:182::-;38296:34;38292:1;38284:6;38280:14;38273:58;38262:76;:::o;38344:234::-;38484:34;38480:1;38472:6;38468:14;38461:58;38553:17;38548:2;38540:6;38536:15;38529:42;38450:128;:::o;38584:220::-;38724:34;38720:1;38712:6;38708:14;38701:58;38793:3;38788:2;38780:6;38776:15;38769:28;38690:114;:::o;38810:236::-;38950:34;38946:1;38938:6;38934:14;38927:58;39019:19;39014:2;39006:6;39002:15;38995:44;38916:130;:::o;39052:231::-;39192:34;39188:1;39180:6;39176:14;39169:58;39261:14;39256:2;39248:6;39244:15;39237:39;39158:125;:::o;39289:180::-;39429:32;39425:1;39417:6;39413:14;39406:56;39395:74;:::o;39475:151::-;39615:3;39611:1;39603:6;39599:14;39592:27;39581:45;:::o;39632:122::-;39705:24;39723:5;39705:24;:::i;:::-;39698:5;39695:35;39685:2;;39744:1;39741;39734:12;39685:2;39675:79;:::o;39760:116::-;39830:21;39845:5;39830:21;:::i;:::-;39823:5;39820:32;39810:2;;39866:1;39863;39856:12;39810:2;39800:76;:::o;39882:120::-;39954:23;39971:5;39954:23;:::i;:::-;39947:5;39944:34;39934:2;;39992:1;39989;39982:12;39934:2;39924:78;:::o;40008:122::-;40081:24;40099:5;40081:24;:::i;:::-;40074:5;40071:35;40061:2;;40120:1;40117;40110:12;40061:2;40051:79;:::o
Swarm Source
ipfs://a2bdb152aabf13817e5e052631bdf93882500bcc5a70a4bea84e72ceaad0cfbc
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.