More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 22,988 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Approve | 16200417 | 32 hrs ago | IN | 0 CRO | 0.2490862 | ||||
Set Approval For... | 16183362 | 2 days ago | IN | 0 CRO | 0.236037 | ||||
Safe Transfer Fr... | 16177841 | 2 days ago | IN | 0 CRO | 0.50502165 | ||||
Approve | 16168610 | 3 days ago | IN | 0 CRO | 0.2490862 | ||||
Approve | 16141613 | 5 days ago | IN | 0 CRO | 0.2490862 | ||||
Approve | 16141606 | 5 days ago | IN | 0 CRO | 0.2490862 | ||||
Set Approval For... | 16118538 | 6 days ago | IN | 0 CRO | 0.1496214 | ||||
Set Approval For... | 16118535 | 6 days ago | IN | 0 CRO | 0.1496214 | ||||
Set Approval For... | 16116996 | 6 days ago | IN | 0 CRO | 0.236037 | ||||
Set Approval For... | 16116978 | 6 days ago | IN | 0 CRO | 0.236037 | ||||
Safe Transfer Fr... | 16062747 | 10 days ago | IN | 0 CRO | 0.506212 | ||||
Set Approval For... | 16013677 | 13 days ago | IN | 0 CRO | 0.2373346 | ||||
Safe Transfer Fr... | 15946037 | 17 days ago | IN | 0 CRO | 0.503706 | ||||
Set Approval For... | 15945708 | 18 days ago | IN | 0 CRO | 0.243048 | ||||
Set Approval For... | 15919488 | 19 days ago | IN | 0 CRO | 0.236037 | ||||
Approve | 15898646 | 21 days ago | IN | 0 CRO | 0.2490256 | ||||
Approve | 15898628 | 21 days ago | IN | 0 CRO | 0.2490862 | ||||
Approve | 15898607 | 21 days ago | IN | 0 CRO | 0.2490862 | ||||
Approve | 15888802 | 21 days ago | IN | 0 CRO | 0.2490862 | ||||
Approve | 15881593 | 22 days ago | IN | 0 CRO | 0.2490862 | ||||
Approve | 15881522 | 22 days ago | IN | 0 CRO | 0.2490862 | ||||
Approve | 15881514 | 22 days ago | IN | 0 CRO | 0.2490862 | ||||
Set Approval For... | 15812278 | 26 days ago | IN | 0 CRO | 0.23377011 | ||||
Set Approval For... | 15782368 | 28 days ago | IN | 0 CRO | 0.23596689 | ||||
Approve | 15706728 | 33 days ago | IN | 0 CRO | 0.2490256 |
Loading...
Loading
Contract Name:
CroKingNFT
Compiler Version
v0.8.4+commit.c7e474f2
Contract Source Code (Solidity)
/** *Submitted for verification at cronoscan.com on 2022-02-01 */ // Sources flattened with hardhat v2.8.0 https://hardhat.org // File @openzeppelin/contracts/utils/introspection/[email protected] // SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File @openzeppelin/contracts/token/ERC721/[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 v4.4.1 (utils/Address.sol) pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File @openzeppelin/contracts/utils/[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 v4.4.1 (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); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev 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 {} } // File @openzeppelin/contracts/token/ERC721/extensions/[email protected] // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Enumerable.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // File @openzeppelin/contracts/token/ERC721/extensions/[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/NFT.sol pragma solidity >=0.8.0 <0.9.0; contract CroKingNFT is ERC721Enumerable, Ownable { using Strings for uint256; string public baseURI; string public baseExtension = ".json"; string public notRevealedURI; uint256 public cost = 140 ether; uint256 public maxSupply = 3000; uint256 public maxMintAmount = 5; uint256 public maxSupplyForWhitelist = 2000; uint256 public maxMintAmountForWhitelistUser = 10; uint256 public maxSupplyForGiveaway = 65; bool public paused = true; bool public whitelistOnly = true; bool public revealAllowed = false; bool public giveAwayTokensMinted = false; address public devAddress = 0x823f149a1084d5E46B54372787edBa0E5b92F9F2; address public teamAddress = 0x1A79d6E75fa9FA7bf5c1F22572E9299836D148B3; mapping(address => bool) public whitelisted; mapping(uint256 => bool) public tokenRevealed; mapping(address => uint256) public totalMintedByAddress; constructor(string memory _name, string memory _symbol, string memory _initialBaseUri, string memory _initialNotRevealedUri) ERC721(_name, _symbol) { setBaseURI(_initialBaseUri); setNotRevealedURI(_initialNotRevealedUri); } function _baseURI() internal view virtual override returns (string memory) { return baseURI; } function mint() public payable { uint256 supply = totalSupply(); require(!paused, "Minting is paused. Come back later!"); require(supply <= maxSupply, "Sold out!"); require(msg.value >= cost, "Please enter the correct price"); if (whitelistOnly) { require(whitelisted[msg.sender], "Address is not whitelisted"); require(maxSupplyForWhitelist > 0, "Whitelist sold out"); require(totalMintedByAddress[msg.sender] < maxMintAmountForWhitelistUser, "You have reached the limit of NFT's you can mint during whitelist sale"); totalMintedByAddress[msg.sender] = totalMintedByAddress[msg.sender] + 1; maxSupplyForWhitelist = maxSupplyForWhitelist - 1 ; } else { if(whitelisted[msg.sender]) { require(totalMintedByAddress[msg.sender] < maxMintAmountForWhitelistUser, "You have reached the limit of NFT's you can mint"); } else { require(totalMintedByAddress[msg.sender] < maxMintAmount, "You have reached the limit of NFT's you can mint"); } totalMintedByAddress[msg.sender] = totalMintedByAddress[msg.sender] + 1; } _safeMint(msg.sender, supply + 1); } function revealToken(uint256 _tokenId) public { require(_exists(_tokenId), "ERC721Metadata: URI query for nonexistent token"); require(ownerOf(_tokenId) == msg.sender, "You don't own this token"); require(!tokenRevealed[_tokenId], "This token has already been revealed"); require(revealAllowed, "Token reveal is not yet allowed"); tokenRevealed[_tokenId] = true; } function tokenURI(uint256 _tokenId) public view virtual override returns(string memory) { require(_exists(_tokenId), "ERC721Metadata: URI query for nonexistent token"); if (!tokenRevealed[_tokenId]) { return notRevealedURI; } string memory currentBaseURI = _baseURI(); return bytes(currentBaseURI).length > 0 ? string(abi.encodePacked(currentBaseURI, _tokenId.toString(), baseExtension)) : ""; } function setPaused(bool _paused) public onlyOwner { paused = _paused; } function setWhitelistOnly(bool _whitelistOnly) public onlyOwner { whitelistOnly = _whitelistOnly; } function setRevealAllowed(bool _revealAllowed) public onlyOwner { revealAllowed = _revealAllowed; } function setCost(uint256 _newCost) public onlyOwner { cost = _newCost; } function setNotRevealedURI(string memory _newNotRevealedURI) public onlyOwner { notRevealedURI = _newNotRevealedURI; } function setBaseURI(string memory _newBaseURI) public onlyOwner { baseURI = _newBaseURI; } function setMaxMintAmount(uint256 _maxMintAmount) public onlyOwner { maxMintAmount = _maxMintAmount; } function addWalletToWhitelist(address _wallet) public onlyOwner { whitelisted[_wallet] = true; } function removeWalletFromWhitelist(address _wallet) public onlyOwner { whitelisted[_wallet] = false; } function bulkAddWalletsToWhitelist(address[] memory _wallets) public onlyOwner { for (uint256 i = 0; i < _wallets.length; i++) { whitelisted[_wallets[i]] = true; } } function mintGiveAwayTokens() public onlyOwner { require(!giveAwayTokensMinted, "Giveaway tokens already minted"); uint256 supply = totalSupply(); for (uint256 i = 1; i <= maxSupplyForGiveaway; i++) { _safeMint(teamAddress, supply + i); } giveAwayTokensMinted = true; } function setDevAddress(address _devAddress) public { require(msg.sender == devAddress, "You're not the dev"); devAddress = _devAddress; } function setTeamAddress(address _teamAddress) public { require(msg.sender == teamAddress, "You're not the team"); teamAddress = _teamAddress; } function withdraw() public payable onlyOwner { (bool devPaid, ) = payable(devAddress).call{value: address(this).balance * 8 / 100}(""); require(devPaid); (bool teamPaid, ) = payable(teamAddress).call{value: address(this).balance}(""); require(teamPaid); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"string","name":"_initialBaseUri","type":"string"},{"internalType":"string","name":"_initialNotRevealedUri","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"}],"name":"addWalletToWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_wallets","type":"address[]"}],"name":"bulkAddWalletsToWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"giveAwayTokensMinted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintAmountForWhitelistUser","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupplyForGiveaway","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupplyForWhitelist","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintGiveAwayTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"notRevealedURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"}],"name":"removeWalletFromWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealAllowed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"revealToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_devAddress","type":"address"}],"name":"setDevAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxMintAmount","type":"uint256"}],"name":"setMaxMintAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newNotRevealedURI","type":"string"}],"name":"setNotRevealedURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_paused","type":"bool"}],"name":"setPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_revealAllowed","type":"bool"}],"name":"setRevealAllowed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_teamAddress","type":"address"}],"name":"setTeamAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_whitelistOnly","type":"bool"}],"name":"setWhitelistOnly","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":[],"name":"teamAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"","type":"uint256"}],"name":"tokenRevealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"","type":"address"}],"name":"totalMintedByAddress","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":[],"name":"whitelistOnly","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
60806040526040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600c90805190602001906200005192919062000493565b50680796e3ea3f8ab00000600e55610bb8600f5560056010556107d0601155600a60125560416013556001601460006101000a81548160ff0219169083151502179055506001601460016101000a81548160ff0219169083151502179055506000601460026101000a81548160ff0219169083151502179055506000601460036101000a81548160ff02191690831515021790555073823f149a1084d5e46b54372787edba0e5b92f9f2601460046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550731a79d6e75fa9fa7bf5c1f22572e9299836d148b3601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156200019d57600080fd5b506040516200640a3803806200640a8339818101604052810190620001c39190620005b5565b83838160009080519060200190620001dd92919062000493565b508060019080519060200190620001f692919062000493565b505050620002196200020d6200024560201b60201c565b6200024d60201b60201c565b6200022a826200031360201b60201c565b6200023b81620003be60201b60201c565b5050505062000878565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620003236200024560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620003496200046960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620003a2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200039990620006ac565b60405180910390fd5b80600b9080519060200190620003ba92919062000493565b5050565b620003ce6200024560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620003f46200046960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200044d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200044490620006ac565b60405180910390fd5b80600d90805190602001906200046592919062000493565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054620004a19062000774565b90600052602060002090601f016020900481019282620004c5576000855562000511565b82601f10620004e057805160ff191683800117855562000511565b8280016001018555821562000511579182015b8281111562000510578251825591602001919060010190620004f3565b5b50905062000520919062000524565b5090565b5b808211156200053f57600081600090555060010162000525565b5090565b60006200055a6200055484620006f7565b620006ce565b9050828152602081018484840111156200057357600080fd5b620005808482856200073e565b509392505050565b600082601f8301126200059a57600080fd5b8151620005ac84826020860162000543565b91505092915050565b60008060008060808587031215620005cc57600080fd5b600085015167ffffffffffffffff811115620005e757600080fd5b620005f58782880162000588565b945050602085015167ffffffffffffffff8111156200061357600080fd5b620006218782880162000588565b935050604085015167ffffffffffffffff8111156200063f57600080fd5b6200064d8782880162000588565b925050606085015167ffffffffffffffff8111156200066b57600080fd5b620006798782880162000588565b91505092959194509250565b6000620006946020836200072d565b9150620006a1826200084f565b602082019050919050565b60006020820190508181036000830152620006c78162000685565b9050919050565b6000620006da620006ed565b9050620006e88282620007aa565b919050565b6000604051905090565b600067ffffffffffffffff8211156200071557620007146200080f565b5b62000720826200083e565b9050602081019050919050565b600082825260208201905092915050565b60005b838110156200075e57808201518184015260208101905062000741565b838111156200076e576000848401525b50505050565b600060028204905060018216806200078d57607f821691505b60208210811415620007a457620007a3620007e0565b5b50919050565b620007b5826200083e565b810181811067ffffffffffffffff82111715620007d757620007d66200080f565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b615b8280620008886000396000f3fe6080604052600436106103185760003560e01c80636352211e116101ab578063b88d4fde116100f7578063d5abeb0111610095578063ea05a8c61161006f578063ea05a8c614610b94578063f2c4ce1e14610bbd578063f2fde38b14610be6578063f4ab554614610c0f57610318565b8063d5abeb0114610aef578063d936547e14610b1a578063e985e9c514610b5757610318565b8063c6682862116100d1578063c668286214610a35578063c87b56dd14610a60578063ce23772b14610a9d578063d0d41fe114610ac657610318565b8063b88d4fde146109b6578063c2709ac6146109df578063c2865c6614610a0a57610318565b80637ec0276c1161016457806397cf84fc1161013e57806397cf84fc146108ea5780639d89735114610927578063a22cb46514610964578063a96cc3ce1461098d57610318565b80637ec0276c146108695780638da5cb5b1461089457806395d89b41146108bf57610318565b80636352211e146107595780636690864e146107965780636c0360eb146107bf57806370a08231146107ea578063715018a614610827578063722503801461083e57610318565b80632f745c591161026a57806342842e0e116102235780634f6ccce7116101fd5780634f6ccce71461069f57806355f804b3146106dc5780635a46cf3d146107055780635c975abb1461072e57610318565b806342842e0e1461062257806344a0d68a1461064b5780634b4687b51461067457610318565b80632f745c591461053357806331ed16ac14610570578063395952e6146105995780633ad10ef6146105c45780633ccfd60b146105ef5780633f0f42e2146105f957610318565b80631249c58b116102d757806318160ddd116102b157806318160ddd146104895780631c75f085146104b4578063239c70ae146104df57806323b872dd1461050a57610318565b80631249c58b1461042b57806313faede61461043557806316c38b3c1461046057610318565b8061fb5a1461031d57806301ffc9a71461033457806306fdde0314610371578063081812fc1461039c578063088a4ed0146103d9578063095ea7b314610402575b600080fd5b34801561032957600080fd5b50610332610c3a565b005b34801561034057600080fd5b5061035b60048036038101906103569190614349565b610d8b565b6040516103689190614a61565b60405180910390f35b34801561037d57600080fd5b50610386610e05565b6040516103939190614a7c565b60405180910390f35b3480156103a857600080fd5b506103c360048036038101906103be91906143dc565b610e97565b6040516103d091906149fa565b60405180910390f35b3480156103e557600080fd5b5061040060048036038101906103fb91906143dc565b610f1c565b005b34801561040e57600080fd5b50610429600480360381019061042491906142a3565b610fa2565b005b6104336110ba565b005b34801561044157600080fd5b5061044a6115b9565b6040516104579190614e7e565b60405180910390f35b34801561046c57600080fd5b5061048760048036038101906104829190614320565b6115bf565b005b34801561049557600080fd5b5061049e611658565b6040516104ab9190614e7e565b60405180910390f35b3480156104c057600080fd5b506104c9611665565b6040516104d691906149fa565b60405180910390f35b3480156104eb57600080fd5b506104f461168b565b6040516105019190614e7e565b60405180910390f35b34801561051657600080fd5b50610531600480360381019061052c919061419d565b611691565b005b34801561053f57600080fd5b5061055a600480360381019061055591906142a3565b6116f1565b6040516105679190614e7e565b60405180910390f35b34801561057c57600080fd5b50610597600480360381019061059291906142df565b611796565b005b3480156105a557600080fd5b506105ae6118cd565b6040516105bb9190614e7e565b60405180910390f35b3480156105d057600080fd5b506105d96118d3565b6040516105e691906149fa565b60405180910390f35b6105f76118f9565b005b34801561060557600080fd5b50610620600480360381019061061b9190614138565b611ac1565b005b34801561062e57600080fd5b506106496004803603810190610644919061419d565b611b98565b005b34801561065757600080fd5b50610672600480360381019061066d91906143dc565b611bb8565b005b34801561068057600080fd5b50610689611c3e565b6040516106969190614a61565b60405180910390f35b3480156106ab57600080fd5b506106c660048036038101906106c191906143dc565b611c51565b6040516106d39190614e7e565b60405180910390f35b3480156106e857600080fd5b5061070360048036038101906106fe919061439b565b611ce8565b005b34801561071157600080fd5b5061072c600480360381019061072791906143dc565b611d7e565b005b34801561073a57600080fd5b50610743611f1b565b6040516107509190614a61565b60405180910390f35b34801561076557600080fd5b50610780600480360381019061077b91906143dc565b611f2e565b60405161078d91906149fa565b60405180910390f35b3480156107a257600080fd5b506107bd60048036038101906107b89190614138565b611fe0565b005b3480156107cb57600080fd5b506107d46120b4565b6040516107e19190614a7c565b60405180910390f35b3480156107f657600080fd5b50610811600480360381019061080c9190614138565b612142565b60405161081e9190614e7e565b60405180910390f35b34801561083357600080fd5b5061083c6121fa565b005b34801561084a57600080fd5b50610853612282565b6040516108609190614a7c565b60405180910390f35b34801561087557600080fd5b5061087e612310565b60405161088b9190614a61565b60405180910390f35b3480156108a057600080fd5b506108a9612323565b6040516108b691906149fa565b60405180910390f35b3480156108cb57600080fd5b506108d461234d565b6040516108e19190614a7c565b60405180910390f35b3480156108f657600080fd5b50610911600480360381019061090c9190614138565b6123df565b60405161091e9190614e7e565b60405180910390f35b34801561093357600080fd5b5061094e600480360381019061094991906143dc565b6123f7565b60405161095b9190614a61565b60405180910390f35b34801561097057600080fd5b5061098b60048036038101906109869190614267565b612417565b005b34801561099957600080fd5b506109b460048036038101906109af9190614320565b61242d565b005b3480156109c257600080fd5b506109dd60048036038101906109d891906141ec565b6124c6565b005b3480156109eb57600080fd5b506109f4612528565b604051610a019190614e7e565b60405180910390f35b348015610a1657600080fd5b50610a1f61252e565b604051610a2c9190614e7e565b60405180910390f35b348015610a4157600080fd5b50610a4a612534565b604051610a579190614a7c565b60405180910390f35b348015610a6c57600080fd5b50610a876004803603810190610a8291906143dc565b6125c2565b604051610a949190614a7c565b60405180910390f35b348015610aa957600080fd5b50610ac46004803603810190610abf9190614138565b612724565b005b348015610ad257600080fd5b50610aed6004803603810190610ae89190614138565b6127fb565b005b348015610afb57600080fd5b50610b046128cf565b604051610b119190614e7e565b60405180910390f35b348015610b2657600080fd5b50610b416004803603810190610b3c9190614138565b6128d5565b604051610b4e9190614a61565b60405180910390f35b348015610b6357600080fd5b50610b7e6004803603810190610b799190614161565b6128f5565b604051610b8b9190614a61565b60405180910390f35b348015610ba057600080fd5b50610bbb6004803603810190610bb69190614320565b612989565b005b348015610bc957600080fd5b50610be46004803603810190610bdf919061439b565b612a22565b005b348015610bf257600080fd5b50610c0d6004803603810190610c089190614138565b612ab8565b005b348015610c1b57600080fd5b50610c24612bb0565b604051610c319190614a61565b60405180910390f35b610c42612bc3565b73ffffffffffffffffffffffffffffffffffffffff16610c60612323565b73ffffffffffffffffffffffffffffffffffffffff1614610cb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cad90614d5e565b60405180910390fd5b601460039054906101000a900460ff1615610d06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cfd90614c7e565b60405180910390fd5b6000610d10611658565b90506000600190505b6013548111610d6c57610d59601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168284610d549190614faf565b612bcb565b8080610d64906151dd565b915050610d19565b506001601460036101000a81548160ff02191690831515021790555050565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610dfe5750610dfd82612be9565b5b9050919050565b606060008054610e149061517a565b80601f0160208091040260200160405190810160405280929190818152602001828054610e409061517a565b8015610e8d5780601f10610e6257610100808354040283529160200191610e8d565b820191906000526020600020905b815481529060010190602001808311610e7057829003601f168201915b5050505050905090565b6000610ea282612ccb565b610ee1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed890614d3e565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b610f24612bc3565b73ffffffffffffffffffffffffffffffffffffffff16610f42612323565b73ffffffffffffffffffffffffffffffffffffffff1614610f98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8f90614d5e565b60405180910390fd5b8060108190555050565b6000610fad82611f2e565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561101e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101590614dbe565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661103d612bc3565b73ffffffffffffffffffffffffffffffffffffffff16148061106c575061106b81611066612bc3565b6128f5565b5b6110ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a290614c5e565b60405180910390fd5b6110b58383612d37565b505050565b60006110c4611658565b9050601460009054906101000a900460ff1615611116576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110d90614c3e565b60405180910390fd5b600f5481111561115b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115290614e5e565b60405180910390fd5b600e543410156111a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119790614cfe565b60405180910390fd5b601460019054906101000a900460ff16156113b257601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611241576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123890614bbe565b60405180910390fd5b600060115411611286576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127d90614b5e565b60405180910390fd5b601254601860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410611309576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130090614e1e565b60405180910390fd5b6001601860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546113559190614faf565b601860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060016011546113a79190615090565b6011819055506115a0565b601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561148c57601254601860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410611487576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147e90614b3e565b60405180910390fd5b611510565b601054601860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541061150f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150690614b3e565b60405180910390fd5b5b6001601860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461155c9190614faf565b601860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6115b6336001836115b19190614faf565b612bcb565b50565b600e5481565b6115c7612bc3565b73ffffffffffffffffffffffffffffffffffffffff166115e5612323565b73ffffffffffffffffffffffffffffffffffffffff161461163b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163290614d5e565b60405180910390fd5b80601460006101000a81548160ff02191690831515021790555050565b6000600880549050905090565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60105481565b6116a261169c612bc3565b82612df0565b6116e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d890614dde565b60405180910390fd5b6116ec838383612ece565b505050565b60006116fc83612142565b821061173d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173490614abe565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b61179e612bc3565b73ffffffffffffffffffffffffffffffffffffffff166117bc612323565b73ffffffffffffffffffffffffffffffffffffffff1614611812576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180990614d5e565b60405180910390fd5b60005b81518110156118c95760016016600084848151811061185d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806118c1906151dd565b915050611815565b5050565b60115481565b601460049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611901612bc3565b73ffffffffffffffffffffffffffffffffffffffff1661191f612323565b73ffffffffffffffffffffffffffffffffffffffff1614611975576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196c90614d5e565b60405180910390fd5b6000601460049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660646008476119bf9190615036565b6119c99190615005565b6040516119d5906149e5565b60006040518083038185875af1925050503d8060008114611a12576040519150601f19603f3d011682016040523d82523d6000602084013e611a17565b606091505b5050905080611a2557600080fd5b6000601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051611a6d906149e5565b60006040518083038185875af1925050503d8060008114611aaa576040519150601f19603f3d011682016040523d82523d6000602084013e611aaf565b606091505b5050905080611abd57600080fd5b5050565b611ac9612bc3565b73ffffffffffffffffffffffffffffffffffffffff16611ae7612323565b73ffffffffffffffffffffffffffffffffffffffff1614611b3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3490614d5e565b60405180910390fd5b6001601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b611bb3838383604051806020016040528060008152506124c6565b505050565b611bc0612bc3565b73ffffffffffffffffffffffffffffffffffffffff16611bde612323565b73ffffffffffffffffffffffffffffffffffffffff1614611c34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2b90614d5e565b60405180910390fd5b80600e8190555050565b601460019054906101000a900460ff1681565b6000611c5b611658565b8210611c9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9390614dfe565b60405180910390fd5b60088281548110611cd6577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b611cf0612bc3565b73ffffffffffffffffffffffffffffffffffffffff16611d0e612323565b73ffffffffffffffffffffffffffffffffffffffff1614611d64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5b90614d5e565b60405180910390fd5b80600b9080519060200190611d7a929190613ec6565b5050565b611d8781612ccb565b611dc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dbd90614d9e565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff16611de682611f2e565b73ffffffffffffffffffffffffffffffffffffffff1614611e3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3390614cbe565b60405180910390fd5b6017600082815260200190815260200160002060009054906101000a900460ff1615611e9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9490614bde565b60405180910390fd5b601460029054906101000a900460ff16611eec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee390614a9e565b60405180910390fd5b60016017600083815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b601460009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611fd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fce90614cde565b60405180910390fd5b80915050919050565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612070576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206790614e3e565b60405180910390fd5b80601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600b80546120c19061517a565b80601f01602080910402602001604051908101604052809291908181526020018280546120ed9061517a565b801561213a5780601f1061210f5761010080835404028352916020019161213a565b820191906000526020600020905b81548152906001019060200180831161211d57829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156121b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121aa90614c9e565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b612202612bc3565b73ffffffffffffffffffffffffffffffffffffffff16612220612323565b73ffffffffffffffffffffffffffffffffffffffff1614612276576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226d90614d5e565b60405180910390fd5b612280600061312a565b565b600d805461228f9061517a565b80601f01602080910402602001604051908101604052809291908181526020018280546122bb9061517a565b80156123085780601f106122dd57610100808354040283529160200191612308565b820191906000526020600020905b8154815290600101906020018083116122eb57829003601f168201915b505050505081565b601460039054906101000a900460ff1681565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461235c9061517a565b80601f01602080910402602001604051908101604052809291908181526020018280546123889061517a565b80156123d55780601f106123aa576101008083540402835291602001916123d5565b820191906000526020600020905b8154815290600101906020018083116123b857829003601f168201915b5050505050905090565b60186020528060005260406000206000915090505481565b60176020528060005260406000206000915054906101000a900460ff1681565b612429612422612bc3565b83836131f0565b5050565b612435612bc3565b73ffffffffffffffffffffffffffffffffffffffff16612453612323565b73ffffffffffffffffffffffffffffffffffffffff16146124a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124a090614d5e565b60405180910390fd5b80601460026101000a81548160ff02191690831515021790555050565b6124d76124d1612bc3565b83612df0565b612516576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161250d90614dde565b60405180910390fd5b6125228484848461335d565b50505050565b60135481565b60125481565b600c80546125419061517a565b80601f016020809104026020016040519081016040528092919081815260200182805461256d9061517a565b80156125ba5780601f1061258f576101008083540402835291602001916125ba565b820191906000526020600020905b81548152906001019060200180831161259d57829003601f168201915b505050505081565b60606125cd82612ccb565b61260c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161260390614d9e565b60405180910390fd5b6017600083815260200190815260200160002060009054906101000a900460ff166126c357600d805461263e9061517a565b80601f016020809104026020016040519081016040528092919081815260200182805461266a9061517a565b80156126b75780601f1061268c576101008083540402835291602001916126b7565b820191906000526020600020905b81548152906001019060200180831161269a57829003601f168201915b5050505050905061271f565b60006126cd6133b9565b905060008151116126ed576040518060200160405280600081525061271b565b806126f78461344b565b600c60405160200161270b939291906149b4565b6040516020818303038152906040525b9150505b919050565b61272c612bc3565b73ffffffffffffffffffffffffffffffffffffffff1661274a612323565b73ffffffffffffffffffffffffffffffffffffffff16146127a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161279790614d5e565b60405180910390fd5b6000601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b601460049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461288b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161288290614bfe565b60405180910390fd5b80601460046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600f5481565b60166020528060005260406000206000915054906101000a900460ff1681565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b612991612bc3565b73ffffffffffffffffffffffffffffffffffffffff166129af612323565b73ffffffffffffffffffffffffffffffffffffffff1614612a05576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129fc90614d5e565b60405180910390fd5b80601460016101000a81548160ff02191690831515021790555050565b612a2a612bc3565b73ffffffffffffffffffffffffffffffffffffffff16612a48612323565b73ffffffffffffffffffffffffffffffffffffffff1614612a9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a9590614d5e565b60405180910390fd5b80600d9080519060200190612ab4929190613ec6565b5050565b612ac0612bc3565b73ffffffffffffffffffffffffffffffffffffffff16612ade612323565b73ffffffffffffffffffffffffffffffffffffffff1614612b34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b2b90614d5e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612ba4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b9b90614afe565b60405180910390fd5b612bad8161312a565b50565b601460029054906101000a900460ff1681565b600033905090565b612be58282604051806020016040528060008152506135f8565b5050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612cb457507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612cc45750612cc382613653565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16612daa83611f2e565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000612dfb82612ccb565b612e3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e3190614c1e565b60405180910390fd5b6000612e4583611f2e565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612eb457508373ffffffffffffffffffffffffffffffffffffffff16612e9c84610e97565b73ffffffffffffffffffffffffffffffffffffffff16145b80612ec55750612ec481856128f5565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612eee82611f2e565b73ffffffffffffffffffffffffffffffffffffffff1614612f44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f3b90614d7e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612fb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fab90614b7e565b60405180910390fd5b612fbf8383836136bd565b612fca600082612d37565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461301a9190615090565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546130719190614faf565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561325f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161325690614b9e565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516133509190614a61565b60405180910390a3505050565b613368848484612ece565b613374848484846137d1565b6133b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133aa90614ade565b60405180910390fd5b50505050565b6060600b80546133c89061517a565b80601f01602080910402602001604051908101604052809291908181526020018280546133f49061517a565b80156134415780601f1061341657610100808354040283529160200191613441565b820191906000526020600020905b81548152906001019060200180831161342457829003601f168201915b5050505050905090565b60606000821415613493576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506135f3565b600082905060005b600082146134c55780806134ae906151dd565b915050600a826134be9190615005565b915061349b565b60008167ffffffffffffffff811115613507577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156135395781602001600182028036833780820191505090505b5090505b600085146135ec576001826135529190615090565b9150600a856135619190615226565b603061356d9190614faf565b60f81b8183815181106135a9577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856135e59190615005565b945061353d565b8093505050505b919050565b6136028383613968565b61360f60008484846137d1565b61364e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161364590614ade565b60405180910390fd5b505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6136c8838383613b36565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561370b5761370681613b3b565b61374a565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614613749576137488382613b84565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561378d5761378881613cf1565b6137cc565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146137cb576137ca8282613e34565b5b5b505050565b60006137f28473ffffffffffffffffffffffffffffffffffffffff16613eb3565b1561395b578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261381b612bc3565b8786866040518563ffffffff1660e01b815260040161383d9493929190614a15565b602060405180830381600087803b15801561385757600080fd5b505af192505050801561388857506040513d601f19601f820116820180604052508101906138859190614372565b60015b61390b573d80600081146138b8576040519150601f19603f3d011682016040523d82523d6000602084013e6138bd565b606091505b50600081511415613903576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138fa90614ade565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613960565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156139d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139cf90614d1e565b60405180910390fd5b6139e181612ccb565b15613a21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a1890614b1e565b60405180910390fd5b613a2d600083836136bd565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613a7d9190614faf565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001613b9184612142565b613b9b9190615090565b9050600060076000848152602001908152602001600020549050818114613c80576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050613d059190615090565b9050600060096000848152602001908152602001600020549050600060088381548110613d5b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020015490508060088381548110613da3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480613e18577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b6000613e3f83612142565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600080823b905060008111915050919050565b828054613ed29061517a565b90600052602060002090601f016020900481019282613ef45760008555613f3b565b82601f10613f0d57805160ff1916838001178555613f3b565b82800160010185558215613f3b579182015b82811115613f3a578251825591602001919060010190613f1f565b5b509050613f489190613f4c565b5090565b5b80821115613f65576000816000905550600101613f4d565b5090565b6000613f7c613f7784614ebe565b614e99565b90508083825260208201905082856020860282011115613f9b57600080fd5b60005b85811015613fcb5781613fb18882614051565b845260208401935060208301925050600181019050613f9e565b5050509392505050565b6000613fe8613fe384614eea565b614e99565b90508281526020810184848401111561400057600080fd5b61400b848285615138565b509392505050565b600061402661402184614f1b565b614e99565b90508281526020810184848401111561403e57600080fd5b614049848285615138565b509392505050565b60008135905061406081615af0565b92915050565b600082601f83011261407757600080fd5b8135614087848260208601613f69565b91505092915050565b60008135905061409f81615b07565b92915050565b6000813590506140b481615b1e565b92915050565b6000815190506140c981615b1e565b92915050565b600082601f8301126140e057600080fd5b81356140f0848260208601613fd5565b91505092915050565b600082601f83011261410a57600080fd5b813561411a848260208601614013565b91505092915050565b60008135905061413281615b35565b92915050565b60006020828403121561414a57600080fd5b600061415884828501614051565b91505092915050565b6000806040838503121561417457600080fd5b600061418285828601614051565b925050602061419385828601614051565b9150509250929050565b6000806000606084860312156141b257600080fd5b60006141c086828701614051565b93505060206141d186828701614051565b92505060406141e286828701614123565b9150509250925092565b6000806000806080858703121561420257600080fd5b600061421087828801614051565b945050602061422187828801614051565b935050604061423287828801614123565b925050606085013567ffffffffffffffff81111561424f57600080fd5b61425b878288016140cf565b91505092959194509250565b6000806040838503121561427a57600080fd5b600061428885828601614051565b925050602061429985828601614090565b9150509250929050565b600080604083850312156142b657600080fd5b60006142c485828601614051565b92505060206142d585828601614123565b9150509250929050565b6000602082840312156142f157600080fd5b600082013567ffffffffffffffff81111561430b57600080fd5b61431784828501614066565b91505092915050565b60006020828403121561433257600080fd5b600061434084828501614090565b91505092915050565b60006020828403121561435b57600080fd5b6000614369848285016140a5565b91505092915050565b60006020828403121561438457600080fd5b6000614392848285016140ba565b91505092915050565b6000602082840312156143ad57600080fd5b600082013567ffffffffffffffff8111156143c757600080fd5b6143d3848285016140f9565b91505092915050565b6000602082840312156143ee57600080fd5b60006143fc84828501614123565b91505092915050565b61440e816150c4565b82525050565b61441d816150d6565b82525050565b600061442e82614f61565b6144388185614f77565b9350614448818560208601615147565b61445181615313565b840191505092915050565b600061446782614f6c565b6144718185614f93565b9350614481818560208601615147565b61448a81615313565b840191505092915050565b60006144a082614f6c565b6144aa8185614fa4565b93506144ba818560208601615147565b80840191505092915050565b600081546144d38161517a565b6144dd8186614fa4565b945060018216600081146144f857600181146145095761453c565b60ff1983168652818601935061453c565b61451285614f4c565b60005b8381101561453457815481890152600182019150602081019050614515565b838801955050505b50505092915050565b6000614552601f83614f93565b915061455d82615324565b602082019050919050565b6000614575602b83614f93565b91506145808261534d565b604082019050919050565b6000614598603283614f93565b91506145a38261539c565b604082019050919050565b60006145bb602683614f93565b91506145c6826153eb565b604082019050919050565b60006145de601c83614f93565b91506145e98261543a565b602082019050919050565b6000614601603083614f93565b915061460c82615463565b604082019050919050565b6000614624601283614f93565b915061462f826154b2565b602082019050919050565b6000614647602483614f93565b9150614652826154db565b604082019050919050565b600061466a601983614f93565b91506146758261552a565b602082019050919050565b600061468d601a83614f93565b915061469882615553565b602082019050919050565b60006146b0602483614f93565b91506146bb8261557c565b604082019050919050565b60006146d3601283614f93565b91506146de826155cb565b602082019050919050565b60006146f6602c83614f93565b9150614701826155f4565b604082019050919050565b6000614719602383614f93565b915061472482615643565b604082019050919050565b600061473c603883614f93565b915061474782615692565b604082019050919050565b600061475f601e83614f93565b915061476a826156e1565b602082019050919050565b6000614782602a83614f93565b915061478d8261570a565b604082019050919050565b60006147a5601883614f93565b91506147b082615759565b602082019050919050565b60006147c8602983614f93565b91506147d382615782565b604082019050919050565b60006147eb601e83614f93565b91506147f6826157d1565b602082019050919050565b600061480e602083614f93565b9150614819826157fa565b602082019050919050565b6000614831602c83614f93565b915061483c82615823565b604082019050919050565b6000614854602083614f93565b915061485f82615872565b602082019050919050565b6000614877602983614f93565b91506148828261589b565b604082019050919050565b600061489a602f83614f93565b91506148a5826158ea565b604082019050919050565b60006148bd602183614f93565b91506148c882615939565b604082019050919050565b60006148e0600083614f88565b91506148eb82615988565b600082019050919050565b6000614903603183614f93565b915061490e8261598b565b604082019050919050565b6000614926602c83614f93565b9150614931826159da565b604082019050919050565b6000614949604683614f93565b915061495482615a29565b606082019050919050565b600061496c601383614f93565b915061497782615a9e565b602082019050919050565b600061498f600983614f93565b915061499a82615ac7565b602082019050919050565b6149ae8161512e565b82525050565b60006149c08286614495565b91506149cc8285614495565b91506149d882846144c6565b9150819050949350505050565b60006149f0826148d3565b9150819050919050565b6000602082019050614a0f6000830184614405565b92915050565b6000608082019050614a2a6000830187614405565b614a376020830186614405565b614a4460408301856149a5565b8181036060830152614a568184614423565b905095945050505050565b6000602082019050614a766000830184614414565b92915050565b60006020820190508181036000830152614a96818461445c565b905092915050565b60006020820190508181036000830152614ab781614545565b9050919050565b60006020820190508181036000830152614ad781614568565b9050919050565b60006020820190508181036000830152614af78161458b565b9050919050565b60006020820190508181036000830152614b17816145ae565b9050919050565b60006020820190508181036000830152614b37816145d1565b9050919050565b60006020820190508181036000830152614b57816145f4565b9050919050565b60006020820190508181036000830152614b7781614617565b9050919050565b60006020820190508181036000830152614b978161463a565b9050919050565b60006020820190508181036000830152614bb78161465d565b9050919050565b60006020820190508181036000830152614bd781614680565b9050919050565b60006020820190508181036000830152614bf7816146a3565b9050919050565b60006020820190508181036000830152614c17816146c6565b9050919050565b60006020820190508181036000830152614c37816146e9565b9050919050565b60006020820190508181036000830152614c578161470c565b9050919050565b60006020820190508181036000830152614c778161472f565b9050919050565b60006020820190508181036000830152614c9781614752565b9050919050565b60006020820190508181036000830152614cb781614775565b9050919050565b60006020820190508181036000830152614cd781614798565b9050919050565b60006020820190508181036000830152614cf7816147bb565b9050919050565b60006020820190508181036000830152614d17816147de565b9050919050565b60006020820190508181036000830152614d3781614801565b9050919050565b60006020820190508181036000830152614d5781614824565b9050919050565b60006020820190508181036000830152614d7781614847565b9050919050565b60006020820190508181036000830152614d978161486a565b9050919050565b60006020820190508181036000830152614db78161488d565b9050919050565b60006020820190508181036000830152614dd7816148b0565b9050919050565b60006020820190508181036000830152614df7816148f6565b9050919050565b60006020820190508181036000830152614e1781614919565b9050919050565b60006020820190508181036000830152614e378161493c565b9050919050565b60006020820190508181036000830152614e578161495f565b9050919050565b60006020820190508181036000830152614e7781614982565b9050919050565b6000602082019050614e9360008301846149a5565b92915050565b6000614ea3614eb4565b9050614eaf82826151ac565b919050565b6000604051905090565b600067ffffffffffffffff821115614ed957614ed86152e4565b5b602082029050602081019050919050565b600067ffffffffffffffff821115614f0557614f046152e4565b5b614f0e82615313565b9050602081019050919050565b600067ffffffffffffffff821115614f3657614f356152e4565b5b614f3f82615313565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000614fba8261512e565b9150614fc58361512e565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614ffa57614ff9615257565b5b828201905092915050565b60006150108261512e565b915061501b8361512e565b92508261502b5761502a615286565b5b828204905092915050565b60006150418261512e565b915061504c8361512e565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561508557615084615257565b5b828202905092915050565b600061509b8261512e565b91506150a68361512e565b9250828210156150b9576150b8615257565b5b828203905092915050565b60006150cf8261510e565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561516557808201518184015260208101905061514a565b83811115615174576000848401525b50505050565b6000600282049050600182168061519257607f821691505b602082108114156151a6576151a56152b5565b5b50919050565b6151b582615313565b810181811067ffffffffffffffff821117156151d4576151d36152e4565b5b80604052505050565b60006151e88261512e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561521b5761521a615257565b5b600182019050919050565b60006152318261512e565b915061523c8361512e565b92508261524c5761524b615286565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f546f6b656e2072657665616c206973206e6f742079657420616c6c6f77656400600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f596f752068617665207265616368656420746865206c696d6974206f66204e4660008201527f54277320796f752063616e206d696e7400000000000000000000000000000000602082015250565b7f57686974656c69737420736f6c64206f75740000000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f41646472657373206973206e6f742077686974656c6973746564000000000000600082015250565b7f5468697320746f6b656e2068617320616c7265616479206265656e207265766560008201527f616c656400000000000000000000000000000000000000000000000000000000602082015250565b7f596f75277265206e6f7420746865206465760000000000000000000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4d696e74696e67206973207061757365642e20436f6d65206261636b206c617460008201527f6572210000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f476976656177617920746f6b656e7320616c7265616479206d696e7465640000600082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f596f7520646f6e2774206f776e207468697320746f6b656e0000000000000000600082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f506c6561736520656e7465722074686520636f72726563742070726963650000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f596f752068617665207265616368656420746865206c696d6974206f66204e4660008201527f54277320796f752063616e206d696e7420647572696e672077686974656c697360208201527f742073616c650000000000000000000000000000000000000000000000000000604082015250565b7f596f75277265206e6f7420746865207465616d00000000000000000000000000600082015250565b7f536f6c64206f7574210000000000000000000000000000000000000000000000600082015250565b615af9816150c4565b8114615b0457600080fd5b50565b615b10816150d6565b8114615b1b57600080fd5b50565b615b27816150e2565b8114615b3257600080fd5b50565b615b3e8161512e565b8114615b4957600080fd5b5056fea26469706673582212201cf4b34ec6070fab736382c9d908b5f94d68fc9d98a57ffa8cb3adb459531e5e64736f6c63430008040033000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000000b43726f4b696e67204e4654000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000643524b4e465400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d656e72374c7751556d4c4258346d55734a4e4c5134486758466e77657364504b57777445585a526767625a6d2f000000000000000000000000000000000000000000000000000000000000000000000000000000000035697066733a2f2f516d656e72374c7751556d4c4258346d55734a4e4c5134486758466e77657364504b57777445585a526767625a6d0000000000000000000000
Deployed Bytecode
0x6080604052600436106103185760003560e01c80636352211e116101ab578063b88d4fde116100f7578063d5abeb0111610095578063ea05a8c61161006f578063ea05a8c614610b94578063f2c4ce1e14610bbd578063f2fde38b14610be6578063f4ab554614610c0f57610318565b8063d5abeb0114610aef578063d936547e14610b1a578063e985e9c514610b5757610318565b8063c6682862116100d1578063c668286214610a35578063c87b56dd14610a60578063ce23772b14610a9d578063d0d41fe114610ac657610318565b8063b88d4fde146109b6578063c2709ac6146109df578063c2865c6614610a0a57610318565b80637ec0276c1161016457806397cf84fc1161013e57806397cf84fc146108ea5780639d89735114610927578063a22cb46514610964578063a96cc3ce1461098d57610318565b80637ec0276c146108695780638da5cb5b1461089457806395d89b41146108bf57610318565b80636352211e146107595780636690864e146107965780636c0360eb146107bf57806370a08231146107ea578063715018a614610827578063722503801461083e57610318565b80632f745c591161026a57806342842e0e116102235780634f6ccce7116101fd5780634f6ccce71461069f57806355f804b3146106dc5780635a46cf3d146107055780635c975abb1461072e57610318565b806342842e0e1461062257806344a0d68a1461064b5780634b4687b51461067457610318565b80632f745c591461053357806331ed16ac14610570578063395952e6146105995780633ad10ef6146105c45780633ccfd60b146105ef5780633f0f42e2146105f957610318565b80631249c58b116102d757806318160ddd116102b157806318160ddd146104895780631c75f085146104b4578063239c70ae146104df57806323b872dd1461050a57610318565b80631249c58b1461042b57806313faede61461043557806316c38b3c1461046057610318565b8061fb5a1461031d57806301ffc9a71461033457806306fdde0314610371578063081812fc1461039c578063088a4ed0146103d9578063095ea7b314610402575b600080fd5b34801561032957600080fd5b50610332610c3a565b005b34801561034057600080fd5b5061035b60048036038101906103569190614349565b610d8b565b6040516103689190614a61565b60405180910390f35b34801561037d57600080fd5b50610386610e05565b6040516103939190614a7c565b60405180910390f35b3480156103a857600080fd5b506103c360048036038101906103be91906143dc565b610e97565b6040516103d091906149fa565b60405180910390f35b3480156103e557600080fd5b5061040060048036038101906103fb91906143dc565b610f1c565b005b34801561040e57600080fd5b50610429600480360381019061042491906142a3565b610fa2565b005b6104336110ba565b005b34801561044157600080fd5b5061044a6115b9565b6040516104579190614e7e565b60405180910390f35b34801561046c57600080fd5b5061048760048036038101906104829190614320565b6115bf565b005b34801561049557600080fd5b5061049e611658565b6040516104ab9190614e7e565b60405180910390f35b3480156104c057600080fd5b506104c9611665565b6040516104d691906149fa565b60405180910390f35b3480156104eb57600080fd5b506104f461168b565b6040516105019190614e7e565b60405180910390f35b34801561051657600080fd5b50610531600480360381019061052c919061419d565b611691565b005b34801561053f57600080fd5b5061055a600480360381019061055591906142a3565b6116f1565b6040516105679190614e7e565b60405180910390f35b34801561057c57600080fd5b50610597600480360381019061059291906142df565b611796565b005b3480156105a557600080fd5b506105ae6118cd565b6040516105bb9190614e7e565b60405180910390f35b3480156105d057600080fd5b506105d96118d3565b6040516105e691906149fa565b60405180910390f35b6105f76118f9565b005b34801561060557600080fd5b50610620600480360381019061061b9190614138565b611ac1565b005b34801561062e57600080fd5b506106496004803603810190610644919061419d565b611b98565b005b34801561065757600080fd5b50610672600480360381019061066d91906143dc565b611bb8565b005b34801561068057600080fd5b50610689611c3e565b6040516106969190614a61565b60405180910390f35b3480156106ab57600080fd5b506106c660048036038101906106c191906143dc565b611c51565b6040516106d39190614e7e565b60405180910390f35b3480156106e857600080fd5b5061070360048036038101906106fe919061439b565b611ce8565b005b34801561071157600080fd5b5061072c600480360381019061072791906143dc565b611d7e565b005b34801561073a57600080fd5b50610743611f1b565b6040516107509190614a61565b60405180910390f35b34801561076557600080fd5b50610780600480360381019061077b91906143dc565b611f2e565b60405161078d91906149fa565b60405180910390f35b3480156107a257600080fd5b506107bd60048036038101906107b89190614138565b611fe0565b005b3480156107cb57600080fd5b506107d46120b4565b6040516107e19190614a7c565b60405180910390f35b3480156107f657600080fd5b50610811600480360381019061080c9190614138565b612142565b60405161081e9190614e7e565b60405180910390f35b34801561083357600080fd5b5061083c6121fa565b005b34801561084a57600080fd5b50610853612282565b6040516108609190614a7c565b60405180910390f35b34801561087557600080fd5b5061087e612310565b60405161088b9190614a61565b60405180910390f35b3480156108a057600080fd5b506108a9612323565b6040516108b691906149fa565b60405180910390f35b3480156108cb57600080fd5b506108d461234d565b6040516108e19190614a7c565b60405180910390f35b3480156108f657600080fd5b50610911600480360381019061090c9190614138565b6123df565b60405161091e9190614e7e565b60405180910390f35b34801561093357600080fd5b5061094e600480360381019061094991906143dc565b6123f7565b60405161095b9190614a61565b60405180910390f35b34801561097057600080fd5b5061098b60048036038101906109869190614267565b612417565b005b34801561099957600080fd5b506109b460048036038101906109af9190614320565b61242d565b005b3480156109c257600080fd5b506109dd60048036038101906109d891906141ec565b6124c6565b005b3480156109eb57600080fd5b506109f4612528565b604051610a019190614e7e565b60405180910390f35b348015610a1657600080fd5b50610a1f61252e565b604051610a2c9190614e7e565b60405180910390f35b348015610a4157600080fd5b50610a4a612534565b604051610a579190614a7c565b60405180910390f35b348015610a6c57600080fd5b50610a876004803603810190610a8291906143dc565b6125c2565b604051610a949190614a7c565b60405180910390f35b348015610aa957600080fd5b50610ac46004803603810190610abf9190614138565b612724565b005b348015610ad257600080fd5b50610aed6004803603810190610ae89190614138565b6127fb565b005b348015610afb57600080fd5b50610b046128cf565b604051610b119190614e7e565b60405180910390f35b348015610b2657600080fd5b50610b416004803603810190610b3c9190614138565b6128d5565b604051610b4e9190614a61565b60405180910390f35b348015610b6357600080fd5b50610b7e6004803603810190610b799190614161565b6128f5565b604051610b8b9190614a61565b60405180910390f35b348015610ba057600080fd5b50610bbb6004803603810190610bb69190614320565b612989565b005b348015610bc957600080fd5b50610be46004803603810190610bdf919061439b565b612a22565b005b348015610bf257600080fd5b50610c0d6004803603810190610c089190614138565b612ab8565b005b348015610c1b57600080fd5b50610c24612bb0565b604051610c319190614a61565b60405180910390f35b610c42612bc3565b73ffffffffffffffffffffffffffffffffffffffff16610c60612323565b73ffffffffffffffffffffffffffffffffffffffff1614610cb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cad90614d5e565b60405180910390fd5b601460039054906101000a900460ff1615610d06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cfd90614c7e565b60405180910390fd5b6000610d10611658565b90506000600190505b6013548111610d6c57610d59601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168284610d549190614faf565b612bcb565b8080610d64906151dd565b915050610d19565b506001601460036101000a81548160ff02191690831515021790555050565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610dfe5750610dfd82612be9565b5b9050919050565b606060008054610e149061517a565b80601f0160208091040260200160405190810160405280929190818152602001828054610e409061517a565b8015610e8d5780601f10610e6257610100808354040283529160200191610e8d565b820191906000526020600020905b815481529060010190602001808311610e7057829003601f168201915b5050505050905090565b6000610ea282612ccb565b610ee1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed890614d3e565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b610f24612bc3565b73ffffffffffffffffffffffffffffffffffffffff16610f42612323565b73ffffffffffffffffffffffffffffffffffffffff1614610f98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8f90614d5e565b60405180910390fd5b8060108190555050565b6000610fad82611f2e565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561101e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101590614dbe565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661103d612bc3565b73ffffffffffffffffffffffffffffffffffffffff16148061106c575061106b81611066612bc3565b6128f5565b5b6110ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a290614c5e565b60405180910390fd5b6110b58383612d37565b505050565b60006110c4611658565b9050601460009054906101000a900460ff1615611116576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110d90614c3e565b60405180910390fd5b600f5481111561115b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115290614e5e565b60405180910390fd5b600e543410156111a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119790614cfe565b60405180910390fd5b601460019054906101000a900460ff16156113b257601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611241576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123890614bbe565b60405180910390fd5b600060115411611286576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127d90614b5e565b60405180910390fd5b601254601860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410611309576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130090614e1e565b60405180910390fd5b6001601860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546113559190614faf565b601860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060016011546113a79190615090565b6011819055506115a0565b601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561148c57601254601860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410611487576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147e90614b3e565b60405180910390fd5b611510565b601054601860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541061150f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150690614b3e565b60405180910390fd5b5b6001601860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461155c9190614faf565b601860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6115b6336001836115b19190614faf565b612bcb565b50565b600e5481565b6115c7612bc3565b73ffffffffffffffffffffffffffffffffffffffff166115e5612323565b73ffffffffffffffffffffffffffffffffffffffff161461163b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163290614d5e565b60405180910390fd5b80601460006101000a81548160ff02191690831515021790555050565b6000600880549050905090565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60105481565b6116a261169c612bc3565b82612df0565b6116e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d890614dde565b60405180910390fd5b6116ec838383612ece565b505050565b60006116fc83612142565b821061173d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173490614abe565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b61179e612bc3565b73ffffffffffffffffffffffffffffffffffffffff166117bc612323565b73ffffffffffffffffffffffffffffffffffffffff1614611812576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180990614d5e565b60405180910390fd5b60005b81518110156118c95760016016600084848151811061185d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806118c1906151dd565b915050611815565b5050565b60115481565b601460049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611901612bc3565b73ffffffffffffffffffffffffffffffffffffffff1661191f612323565b73ffffffffffffffffffffffffffffffffffffffff1614611975576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196c90614d5e565b60405180910390fd5b6000601460049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660646008476119bf9190615036565b6119c99190615005565b6040516119d5906149e5565b60006040518083038185875af1925050503d8060008114611a12576040519150601f19603f3d011682016040523d82523d6000602084013e611a17565b606091505b5050905080611a2557600080fd5b6000601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051611a6d906149e5565b60006040518083038185875af1925050503d8060008114611aaa576040519150601f19603f3d011682016040523d82523d6000602084013e611aaf565b606091505b5050905080611abd57600080fd5b5050565b611ac9612bc3565b73ffffffffffffffffffffffffffffffffffffffff16611ae7612323565b73ffffffffffffffffffffffffffffffffffffffff1614611b3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3490614d5e565b60405180910390fd5b6001601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b611bb3838383604051806020016040528060008152506124c6565b505050565b611bc0612bc3565b73ffffffffffffffffffffffffffffffffffffffff16611bde612323565b73ffffffffffffffffffffffffffffffffffffffff1614611c34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2b90614d5e565b60405180910390fd5b80600e8190555050565b601460019054906101000a900460ff1681565b6000611c5b611658565b8210611c9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9390614dfe565b60405180910390fd5b60088281548110611cd6577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b611cf0612bc3565b73ffffffffffffffffffffffffffffffffffffffff16611d0e612323565b73ffffffffffffffffffffffffffffffffffffffff1614611d64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5b90614d5e565b60405180910390fd5b80600b9080519060200190611d7a929190613ec6565b5050565b611d8781612ccb565b611dc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dbd90614d9e565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff16611de682611f2e565b73ffffffffffffffffffffffffffffffffffffffff1614611e3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3390614cbe565b60405180910390fd5b6017600082815260200190815260200160002060009054906101000a900460ff1615611e9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9490614bde565b60405180910390fd5b601460029054906101000a900460ff16611eec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee390614a9e565b60405180910390fd5b60016017600083815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b601460009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611fd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fce90614cde565b60405180910390fd5b80915050919050565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612070576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206790614e3e565b60405180910390fd5b80601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600b80546120c19061517a565b80601f01602080910402602001604051908101604052809291908181526020018280546120ed9061517a565b801561213a5780601f1061210f5761010080835404028352916020019161213a565b820191906000526020600020905b81548152906001019060200180831161211d57829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156121b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121aa90614c9e565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b612202612bc3565b73ffffffffffffffffffffffffffffffffffffffff16612220612323565b73ffffffffffffffffffffffffffffffffffffffff1614612276576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226d90614d5e565b60405180910390fd5b612280600061312a565b565b600d805461228f9061517a565b80601f01602080910402602001604051908101604052809291908181526020018280546122bb9061517a565b80156123085780601f106122dd57610100808354040283529160200191612308565b820191906000526020600020905b8154815290600101906020018083116122eb57829003601f168201915b505050505081565b601460039054906101000a900460ff1681565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461235c9061517a565b80601f01602080910402602001604051908101604052809291908181526020018280546123889061517a565b80156123d55780601f106123aa576101008083540402835291602001916123d5565b820191906000526020600020905b8154815290600101906020018083116123b857829003601f168201915b5050505050905090565b60186020528060005260406000206000915090505481565b60176020528060005260406000206000915054906101000a900460ff1681565b612429612422612bc3565b83836131f0565b5050565b612435612bc3565b73ffffffffffffffffffffffffffffffffffffffff16612453612323565b73ffffffffffffffffffffffffffffffffffffffff16146124a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124a090614d5e565b60405180910390fd5b80601460026101000a81548160ff02191690831515021790555050565b6124d76124d1612bc3565b83612df0565b612516576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161250d90614dde565b60405180910390fd5b6125228484848461335d565b50505050565b60135481565b60125481565b600c80546125419061517a565b80601f016020809104026020016040519081016040528092919081815260200182805461256d9061517a565b80156125ba5780601f1061258f576101008083540402835291602001916125ba565b820191906000526020600020905b81548152906001019060200180831161259d57829003601f168201915b505050505081565b60606125cd82612ccb565b61260c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161260390614d9e565b60405180910390fd5b6017600083815260200190815260200160002060009054906101000a900460ff166126c357600d805461263e9061517a565b80601f016020809104026020016040519081016040528092919081815260200182805461266a9061517a565b80156126b75780601f1061268c576101008083540402835291602001916126b7565b820191906000526020600020905b81548152906001019060200180831161269a57829003601f168201915b5050505050905061271f565b60006126cd6133b9565b905060008151116126ed576040518060200160405280600081525061271b565b806126f78461344b565b600c60405160200161270b939291906149b4565b6040516020818303038152906040525b9150505b919050565b61272c612bc3565b73ffffffffffffffffffffffffffffffffffffffff1661274a612323565b73ffffffffffffffffffffffffffffffffffffffff16146127a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161279790614d5e565b60405180910390fd5b6000601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b601460049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461288b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161288290614bfe565b60405180910390fd5b80601460046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600f5481565b60166020528060005260406000206000915054906101000a900460ff1681565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b612991612bc3565b73ffffffffffffffffffffffffffffffffffffffff166129af612323565b73ffffffffffffffffffffffffffffffffffffffff1614612a05576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129fc90614d5e565b60405180910390fd5b80601460016101000a81548160ff02191690831515021790555050565b612a2a612bc3565b73ffffffffffffffffffffffffffffffffffffffff16612a48612323565b73ffffffffffffffffffffffffffffffffffffffff1614612a9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a9590614d5e565b60405180910390fd5b80600d9080519060200190612ab4929190613ec6565b5050565b612ac0612bc3565b73ffffffffffffffffffffffffffffffffffffffff16612ade612323565b73ffffffffffffffffffffffffffffffffffffffff1614612b34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b2b90614d5e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612ba4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b9b90614afe565b60405180910390fd5b612bad8161312a565b50565b601460029054906101000a900460ff1681565b600033905090565b612be58282604051806020016040528060008152506135f8565b5050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612cb457507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612cc45750612cc382613653565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16612daa83611f2e565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000612dfb82612ccb565b612e3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e3190614c1e565b60405180910390fd5b6000612e4583611f2e565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612eb457508373ffffffffffffffffffffffffffffffffffffffff16612e9c84610e97565b73ffffffffffffffffffffffffffffffffffffffff16145b80612ec55750612ec481856128f5565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612eee82611f2e565b73ffffffffffffffffffffffffffffffffffffffff1614612f44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f3b90614d7e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612fb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fab90614b7e565b60405180910390fd5b612fbf8383836136bd565b612fca600082612d37565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461301a9190615090565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546130719190614faf565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561325f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161325690614b9e565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516133509190614a61565b60405180910390a3505050565b613368848484612ece565b613374848484846137d1565b6133b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133aa90614ade565b60405180910390fd5b50505050565b6060600b80546133c89061517a565b80601f01602080910402602001604051908101604052809291908181526020018280546133f49061517a565b80156134415780601f1061341657610100808354040283529160200191613441565b820191906000526020600020905b81548152906001019060200180831161342457829003601f168201915b5050505050905090565b60606000821415613493576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506135f3565b600082905060005b600082146134c55780806134ae906151dd565b915050600a826134be9190615005565b915061349b565b60008167ffffffffffffffff811115613507577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156135395781602001600182028036833780820191505090505b5090505b600085146135ec576001826135529190615090565b9150600a856135619190615226565b603061356d9190614faf565b60f81b8183815181106135a9577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856135e59190615005565b945061353d565b8093505050505b919050565b6136028383613968565b61360f60008484846137d1565b61364e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161364590614ade565b60405180910390fd5b505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6136c8838383613b36565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561370b5761370681613b3b565b61374a565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614613749576137488382613b84565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561378d5761378881613cf1565b6137cc565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146137cb576137ca8282613e34565b5b5b505050565b60006137f28473ffffffffffffffffffffffffffffffffffffffff16613eb3565b1561395b578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261381b612bc3565b8786866040518563ffffffff1660e01b815260040161383d9493929190614a15565b602060405180830381600087803b15801561385757600080fd5b505af192505050801561388857506040513d601f19601f820116820180604052508101906138859190614372565b60015b61390b573d80600081146138b8576040519150601f19603f3d011682016040523d82523d6000602084013e6138bd565b606091505b50600081511415613903576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138fa90614ade565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613960565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156139d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139cf90614d1e565b60405180910390fd5b6139e181612ccb565b15613a21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a1890614b1e565b60405180910390fd5b613a2d600083836136bd565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613a7d9190614faf565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001613b9184612142565b613b9b9190615090565b9050600060076000848152602001908152602001600020549050818114613c80576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050613d059190615090565b9050600060096000848152602001908152602001600020549050600060088381548110613d5b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020015490508060088381548110613da3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480613e18577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b6000613e3f83612142565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600080823b905060008111915050919050565b828054613ed29061517a565b90600052602060002090601f016020900481019282613ef45760008555613f3b565b82601f10613f0d57805160ff1916838001178555613f3b565b82800160010185558215613f3b579182015b82811115613f3a578251825591602001919060010190613f1f565b5b509050613f489190613f4c565b5090565b5b80821115613f65576000816000905550600101613f4d565b5090565b6000613f7c613f7784614ebe565b614e99565b90508083825260208201905082856020860282011115613f9b57600080fd5b60005b85811015613fcb5781613fb18882614051565b845260208401935060208301925050600181019050613f9e565b5050509392505050565b6000613fe8613fe384614eea565b614e99565b90508281526020810184848401111561400057600080fd5b61400b848285615138565b509392505050565b600061402661402184614f1b565b614e99565b90508281526020810184848401111561403e57600080fd5b614049848285615138565b509392505050565b60008135905061406081615af0565b92915050565b600082601f83011261407757600080fd5b8135614087848260208601613f69565b91505092915050565b60008135905061409f81615b07565b92915050565b6000813590506140b481615b1e565b92915050565b6000815190506140c981615b1e565b92915050565b600082601f8301126140e057600080fd5b81356140f0848260208601613fd5565b91505092915050565b600082601f83011261410a57600080fd5b813561411a848260208601614013565b91505092915050565b60008135905061413281615b35565b92915050565b60006020828403121561414a57600080fd5b600061415884828501614051565b91505092915050565b6000806040838503121561417457600080fd5b600061418285828601614051565b925050602061419385828601614051565b9150509250929050565b6000806000606084860312156141b257600080fd5b60006141c086828701614051565b93505060206141d186828701614051565b92505060406141e286828701614123565b9150509250925092565b6000806000806080858703121561420257600080fd5b600061421087828801614051565b945050602061422187828801614051565b935050604061423287828801614123565b925050606085013567ffffffffffffffff81111561424f57600080fd5b61425b878288016140cf565b91505092959194509250565b6000806040838503121561427a57600080fd5b600061428885828601614051565b925050602061429985828601614090565b9150509250929050565b600080604083850312156142b657600080fd5b60006142c485828601614051565b92505060206142d585828601614123565b9150509250929050565b6000602082840312156142f157600080fd5b600082013567ffffffffffffffff81111561430b57600080fd5b61431784828501614066565b91505092915050565b60006020828403121561433257600080fd5b600061434084828501614090565b91505092915050565b60006020828403121561435b57600080fd5b6000614369848285016140a5565b91505092915050565b60006020828403121561438457600080fd5b6000614392848285016140ba565b91505092915050565b6000602082840312156143ad57600080fd5b600082013567ffffffffffffffff8111156143c757600080fd5b6143d3848285016140f9565b91505092915050565b6000602082840312156143ee57600080fd5b60006143fc84828501614123565b91505092915050565b61440e816150c4565b82525050565b61441d816150d6565b82525050565b600061442e82614f61565b6144388185614f77565b9350614448818560208601615147565b61445181615313565b840191505092915050565b600061446782614f6c565b6144718185614f93565b9350614481818560208601615147565b61448a81615313565b840191505092915050565b60006144a082614f6c565b6144aa8185614fa4565b93506144ba818560208601615147565b80840191505092915050565b600081546144d38161517a565b6144dd8186614fa4565b945060018216600081146144f857600181146145095761453c565b60ff1983168652818601935061453c565b61451285614f4c565b60005b8381101561453457815481890152600182019150602081019050614515565b838801955050505b50505092915050565b6000614552601f83614f93565b915061455d82615324565b602082019050919050565b6000614575602b83614f93565b91506145808261534d565b604082019050919050565b6000614598603283614f93565b91506145a38261539c565b604082019050919050565b60006145bb602683614f93565b91506145c6826153eb565b604082019050919050565b60006145de601c83614f93565b91506145e98261543a565b602082019050919050565b6000614601603083614f93565b915061460c82615463565b604082019050919050565b6000614624601283614f93565b915061462f826154b2565b602082019050919050565b6000614647602483614f93565b9150614652826154db565b604082019050919050565b600061466a601983614f93565b91506146758261552a565b602082019050919050565b600061468d601a83614f93565b915061469882615553565b602082019050919050565b60006146b0602483614f93565b91506146bb8261557c565b604082019050919050565b60006146d3601283614f93565b91506146de826155cb565b602082019050919050565b60006146f6602c83614f93565b9150614701826155f4565b604082019050919050565b6000614719602383614f93565b915061472482615643565b604082019050919050565b600061473c603883614f93565b915061474782615692565b604082019050919050565b600061475f601e83614f93565b915061476a826156e1565b602082019050919050565b6000614782602a83614f93565b915061478d8261570a565b604082019050919050565b60006147a5601883614f93565b91506147b082615759565b602082019050919050565b60006147c8602983614f93565b91506147d382615782565b604082019050919050565b60006147eb601e83614f93565b91506147f6826157d1565b602082019050919050565b600061480e602083614f93565b9150614819826157fa565b602082019050919050565b6000614831602c83614f93565b915061483c82615823565b604082019050919050565b6000614854602083614f93565b915061485f82615872565b602082019050919050565b6000614877602983614f93565b91506148828261589b565b604082019050919050565b600061489a602f83614f93565b91506148a5826158ea565b604082019050919050565b60006148bd602183614f93565b91506148c882615939565b604082019050919050565b60006148e0600083614f88565b91506148eb82615988565b600082019050919050565b6000614903603183614f93565b915061490e8261598b565b604082019050919050565b6000614926602c83614f93565b9150614931826159da565b604082019050919050565b6000614949604683614f93565b915061495482615a29565b606082019050919050565b600061496c601383614f93565b915061497782615a9e565b602082019050919050565b600061498f600983614f93565b915061499a82615ac7565b602082019050919050565b6149ae8161512e565b82525050565b60006149c08286614495565b91506149cc8285614495565b91506149d882846144c6565b9150819050949350505050565b60006149f0826148d3565b9150819050919050565b6000602082019050614a0f6000830184614405565b92915050565b6000608082019050614a2a6000830187614405565b614a376020830186614405565b614a4460408301856149a5565b8181036060830152614a568184614423565b905095945050505050565b6000602082019050614a766000830184614414565b92915050565b60006020820190508181036000830152614a96818461445c565b905092915050565b60006020820190508181036000830152614ab781614545565b9050919050565b60006020820190508181036000830152614ad781614568565b9050919050565b60006020820190508181036000830152614af78161458b565b9050919050565b60006020820190508181036000830152614b17816145ae565b9050919050565b60006020820190508181036000830152614b37816145d1565b9050919050565b60006020820190508181036000830152614b57816145f4565b9050919050565b60006020820190508181036000830152614b7781614617565b9050919050565b60006020820190508181036000830152614b978161463a565b9050919050565b60006020820190508181036000830152614bb78161465d565b9050919050565b60006020820190508181036000830152614bd781614680565b9050919050565b60006020820190508181036000830152614bf7816146a3565b9050919050565b60006020820190508181036000830152614c17816146c6565b9050919050565b60006020820190508181036000830152614c37816146e9565b9050919050565b60006020820190508181036000830152614c578161470c565b9050919050565b60006020820190508181036000830152614c778161472f565b9050919050565b60006020820190508181036000830152614c9781614752565b9050919050565b60006020820190508181036000830152614cb781614775565b9050919050565b60006020820190508181036000830152614cd781614798565b9050919050565b60006020820190508181036000830152614cf7816147bb565b9050919050565b60006020820190508181036000830152614d17816147de565b9050919050565b60006020820190508181036000830152614d3781614801565b9050919050565b60006020820190508181036000830152614d5781614824565b9050919050565b60006020820190508181036000830152614d7781614847565b9050919050565b60006020820190508181036000830152614d978161486a565b9050919050565b60006020820190508181036000830152614db78161488d565b9050919050565b60006020820190508181036000830152614dd7816148b0565b9050919050565b60006020820190508181036000830152614df7816148f6565b9050919050565b60006020820190508181036000830152614e1781614919565b9050919050565b60006020820190508181036000830152614e378161493c565b9050919050565b60006020820190508181036000830152614e578161495f565b9050919050565b60006020820190508181036000830152614e7781614982565b9050919050565b6000602082019050614e9360008301846149a5565b92915050565b6000614ea3614eb4565b9050614eaf82826151ac565b919050565b6000604051905090565b600067ffffffffffffffff821115614ed957614ed86152e4565b5b602082029050602081019050919050565b600067ffffffffffffffff821115614f0557614f046152e4565b5b614f0e82615313565b9050602081019050919050565b600067ffffffffffffffff821115614f3657614f356152e4565b5b614f3f82615313565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000614fba8261512e565b9150614fc58361512e565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614ffa57614ff9615257565b5b828201905092915050565b60006150108261512e565b915061501b8361512e565b92508261502b5761502a615286565b5b828204905092915050565b60006150418261512e565b915061504c8361512e565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561508557615084615257565b5b828202905092915050565b600061509b8261512e565b91506150a68361512e565b9250828210156150b9576150b8615257565b5b828203905092915050565b60006150cf8261510e565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561516557808201518184015260208101905061514a565b83811115615174576000848401525b50505050565b6000600282049050600182168061519257607f821691505b602082108114156151a6576151a56152b5565b5b50919050565b6151b582615313565b810181811067ffffffffffffffff821117156151d4576151d36152e4565b5b80604052505050565b60006151e88261512e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561521b5761521a615257565b5b600182019050919050565b60006152318261512e565b915061523c8361512e565b92508261524c5761524b615286565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f546f6b656e2072657665616c206973206e6f742079657420616c6c6f77656400600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f596f752068617665207265616368656420746865206c696d6974206f66204e4660008201527f54277320796f752063616e206d696e7400000000000000000000000000000000602082015250565b7f57686974656c69737420736f6c64206f75740000000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f41646472657373206973206e6f742077686974656c6973746564000000000000600082015250565b7f5468697320746f6b656e2068617320616c7265616479206265656e207265766560008201527f616c656400000000000000000000000000000000000000000000000000000000602082015250565b7f596f75277265206e6f7420746865206465760000000000000000000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4d696e74696e67206973207061757365642e20436f6d65206261636b206c617460008201527f6572210000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f476976656177617920746f6b656e7320616c7265616479206d696e7465640000600082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f596f7520646f6e2774206f776e207468697320746f6b656e0000000000000000600082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f506c6561736520656e7465722074686520636f72726563742070726963650000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f596f752068617665207265616368656420746865206c696d6974206f66204e4660008201527f54277320796f752063616e206d696e7420647572696e672077686974656c697360208201527f742073616c650000000000000000000000000000000000000000000000000000604082015250565b7f596f75277265206e6f7420746865207465616d00000000000000000000000000600082015250565b7f536f6c64206f7574210000000000000000000000000000000000000000000000600082015250565b615af9816150c4565b8114615b0457600080fd5b50565b615b10816150d6565b8114615b1b57600080fd5b50565b615b27816150e2565b8114615b3257600080fd5b50565b615b3e8161512e565b8114615b4957600080fd5b5056fea26469706673582212201cf4b34ec6070fab736382c9d908b5f94d68fc9d98a57ffa8cb3adb459531e5e64736f6c63430008040033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000000b43726f4b696e67204e4654000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000643524b4e465400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d656e72374c7751556d4c4258346d55734a4e4c5134486758466e77657364504b57777445585a526767625a6d2f000000000000000000000000000000000000000000000000000000000000000000000000000000000035697066733a2f2f516d656e72374c7751556d4c4258346d55734a4e4c5134486758466e77657364504b57777445585a526767625a6d0000000000000000000000
-----Decoded View---------------
Arg [0] : _name (string): CroKing NFT
Arg [1] : _symbol (string): CRKNFT
Arg [2] : _initialBaseUri (string): ipfs://Qmenr7LwQUmLBX4mUsJNLQ4HgXFnwesdPKWwtEXZRggbZm/
Arg [3] : _initialNotRevealedUri (string): ipfs://Qmenr7LwQUmLBX4mUsJNLQ4HgXFnwesdPKWwtEXZRggbZm
-----Encoded View---------------
14 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000160
Arg [4] : 000000000000000000000000000000000000000000000000000000000000000b
Arg [5] : 43726f4b696e67204e4654000000000000000000000000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000006
Arg [7] : 43524b4e46540000000000000000000000000000000000000000000000000000
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [9] : 697066733a2f2f516d656e72374c7751556d4c4258346d55734a4e4c51344867
Arg [10] : 58466e77657364504b57777445585a526767625a6d2f00000000000000000000
Arg [11] : 0000000000000000000000000000000000000000000000000000000000000035
Arg [12] : 697066733a2f2f516d656e72374c7751556d4c4258346d55734a4e4c51344867
Arg [13] : 58466e77657364504b57777445585a526767625a6d0000000000000000000000
Deployed Bytecode Sourcemap
44641:5776:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49427:338;;;;;;;;;;;;;:::i;:::-;;35885:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22298:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23857:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48852:116;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23380:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45969:1291;;;:::i;:::-;;44840:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48170:85;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36525:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45353:71;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44916:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24607:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36193:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49218:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44957:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45276:70;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50115:299;;;:::i;:::-;;48976:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25017:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48505:86;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45148:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36715:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48740:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47268:424;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45116:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21992:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49941:166;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44731:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21722:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43750:103;;;;;;;;;;;;;:::i;:::-;;44803:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45227:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43099:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22467:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45535:55;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45483:45;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24150:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48384:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25273:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45063:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45007:49;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44759:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47700:462;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49094:116;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49773:160;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44878:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45433:43;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24376:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48263:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48599:133;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44008:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45187:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49427:338;43330:12;:10;:12::i;:::-;43319:23;;:7;:5;:7::i;:::-;:23;;;43311:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49494:20:::1;;;;;;;;;;;49493:21;49485:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;49562:14;49579:13;:11;:13::i;:::-;49562:30;;49610:9;49622:1;49610:13;;49605:113;49630:20;;49625:1;:25;49605:113;;49672:34;49682:11;;;;;;;;;;;49704:1;49695:6;:10;;;;:::i;:::-;49672:9;:34::i;:::-;49652:3;;;;;:::i;:::-;;;;49605:113;;;;49753:4;49730:20;;:27;;;;;;;;;;;;;;;;;;43390:1;49427:338::o:0;35885:224::-;35987:4;36026:35;36011:50;;;:11;:50;;;;:90;;;;36065:36;36089:11;36065:23;:36::i;:::-;36011:90;36004:97;;35885:224;;;:::o;22298:100::-;22352:13;22385:5;22378:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22298:100;:::o;23857:221::-;23933:7;23961:16;23969:7;23961;:16::i;:::-;23953:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;24046:15;:24;24062:7;24046:24;;;;;;;;;;;;;;;;;;;;;24039:31;;23857:221;;;:::o;48852:116::-;43330:12;:10;:12::i;:::-;43319:23;;:7;:5;:7::i;:::-;:23;;;43311:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48946:14:::1;48930:13;:30;;;;48852:116:::0;:::o;23380:411::-;23461:13;23477:23;23492:7;23477:14;:23::i;:::-;23461:39;;23525:5;23519:11;;:2;:11;;;;23511:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;23619:5;23603:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;23628:37;23645:5;23652:12;:10;:12::i;:::-;23628:16;:37::i;:::-;23603:62;23581:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;23762:21;23771:2;23775:7;23762:8;:21::i;:::-;23380:411;;;:::o;45969:1291::-;46011:14;46028:13;:11;:13::i;:::-;46011:30;;46063:6;;;;;;;;;;;46062:7;46054:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;46138:9;;46128:6;:19;;46120:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;46195:4;;46182:9;:17;;46174:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;46251:13;;;;;;;;;;;46247:960;;;46289:11;:23;46301:10;46289:23;;;;;;;;;;;;;;;;;;;;;;;;;46281:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;46390:1;46366:21;;:25;46358:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;46472:29;;46437:20;:32;46458:10;46437:32;;;;;;;;;;;;;;;;:64;46429:147;;;;;;;;;;;;:::i;:::-;;;;;;;;;46671:1;46636:20;:32;46657:10;46636:32;;;;;;;;;;;;;;;;:36;;;;:::i;:::-;46601:20;:32;46622:10;46601:32;;;;;;;;;;;;;;;:71;;;;46735:1;46711:21;;:25;;;;:::i;:::-;46687:21;:49;;;;46247:960;;;46775:11;:23;46787:10;46775:23;;;;;;;;;;;;;;;;;;;;;;;;;46772:338;;;46862:29;;46827:20;:32;46848:10;46827:32;;;;;;;;;;;;;;;;:64;46819:125;;;;;;;;;;;;:::i;:::-;;;;;;;;;46772:338;;;47028:13;;46993:20;:32;47014:10;46993:32;;;;;;;;;;;;;;;;:48;46985:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;46772:338;47194:1;47159:20;:32;47180:10;47159:32;;;;;;;;;;;;;;;;:36;;;;:::i;:::-;47124:20;:32;47145:10;47124:32;;;;;;;;;;;;;;;:71;;;;46247:960;47219:33;47229:10;47250:1;47241:6;:10;;;;:::i;:::-;47219:9;:33::i;:::-;45969:1291;:::o;44840:31::-;;;;:::o;48170:85::-;43330:12;:10;:12::i;:::-;43319:23;;:7;:5;:7::i;:::-;:23;;;43311:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48240:7:::1;48231:6;;:16;;;;;;;;;;;;;;;;;;48170:85:::0;:::o;36525:113::-;36586:7;36613:10;:17;;;;36606:24;;36525:113;:::o;45353:71::-;;;;;;;;;;;;;:::o;44916:32::-;;;;:::o;24607:339::-;24802:41;24821:12;:10;:12::i;:::-;24835:7;24802:18;:41::i;:::-;24794:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;24910:28;24920:4;24926:2;24930:7;24910:9;:28::i;:::-;24607:339;;;:::o;36193:256::-;36290:7;36326:23;36343:5;36326:16;:23::i;:::-;36318:5;:31;36310:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;36415:12;:19;36428:5;36415:19;;;;;;;;;;;;;;;:26;36435:5;36415:26;;;;;;;;;;;;36408:33;;36193:256;;;;:::o;49218:201::-;43330:12;:10;:12::i;:::-;43319:23;;:7;:5;:7::i;:::-;:23;;;43311:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49313:9:::1;49308:104;49332:8;:15;49328:1;:19;49308:104;;;49396:4;49369:11;:24;49381:8;49390:1;49381:11;;;;;;;;;;;;;;;;;;;;;;49369:24;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;49349:3;;;;;:::i;:::-;;;;49308:104;;;;49218:201:::0;:::o;44957:43::-;;;;:::o;45276:70::-;;;;;;;;;;;;;:::o;50115:299::-;43330:12;:10;:12::i;:::-;43319:23;;:7;:5;:7::i;:::-;:23;;;43311:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50172:12:::1;50198:10;;;;;;;;;;;50190:24;;50250:3;50246:1;50222:21;:25;;;;:::i;:::-;:31;;;;:::i;:::-;50190:68;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50171:87;;;50277:7;50269:16;;;::::0;::::1;;50299:13;50326:11;;;;;;;;;;;50318:25;;50351:21;50318:59;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50298:79;;;50396:8;50388:17;;;::::0;::::1;;43390:1;;50115:299::o:0;48976:110::-;43330:12;:10;:12::i;:::-;43319:23;;:7;:5;:7::i;:::-;:23;;;43311:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49074:4:::1;49051:11;:20;49063:7;49051:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;48976:110:::0;:::o;25017:185::-;25155:39;25172:4;25178:2;25182:7;25155:39;;;;;;;;;;;;:16;:39::i;:::-;25017:185;;;:::o;48505:86::-;43330:12;:10;:12::i;:::-;43319:23;;:7;:5;:7::i;:::-;:23;;;43311:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48575:8:::1;48568:4;:15;;;;48505:86:::0;:::o;45148:32::-;;;;;;;;;;;;;:::o;36715:233::-;36790:7;36826:30;:28;:30::i;:::-;36818:5;:38;36810:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;36923:10;36934:5;36923:17;;;;;;;;;;;;;;;;;;;;;;;;36916:24;;36715:233;;;:::o;48740:104::-;43330:12;:10;:12::i;:::-;43319:23;;:7;:5;:7::i;:::-;:23;;;43311:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48825:11:::1;48815:7;:21;;;;;;;;;;;;:::i;:::-;;48740:104:::0;:::o;47268:424::-;47333:17;47341:8;47333:7;:17::i;:::-;47325:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;47442:10;47421:31;;:17;47429:8;47421:7;:17::i;:::-;:31;;;47413:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47501:13;:23;47515:8;47501:23;;;;;;;;;;;;;;;;;;;;;47500:24;47492:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;47584:13;;;;;;;;;;;47576:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;47680:4;47654:13;:23;47668:8;47654:23;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;47268:424;:::o;45116:25::-;;;;;;;;;;;;;:::o;21992:239::-;22064:7;22084:13;22100:7;:16;22108:7;22100:16;;;;;;;;;;;;;;;;;;;;;22084:32;;22152:1;22135:19;;:5;:19;;;;22127:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;22218:5;22211:12;;;21992:239;;;:::o;49941:166::-;50027:11;;;;;;;;;;;50013:25;;:10;:25;;;50005:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;50087:12;50073:11;;:26;;;;;;;;;;;;;;;;;;49941:166;:::o;44731:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;21722:208::-;21794:7;21839:1;21822:19;;:5;:19;;;;21814:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;21906:9;:16;21916:5;21906:16;;;;;;;;;;;;;;;;21899:23;;21722:208;;;:::o;43750:103::-;43330:12;:10;:12::i;:::-;43319:23;;:7;:5;:7::i;:::-;:23;;;43311:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43815:30:::1;43842:1;43815:18;:30::i;:::-;43750:103::o:0;44803:28::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;45227:40::-;;;;;;;;;;;;;:::o;43099:87::-;43145:7;43172:6;;;;;;;;;;;43165:13;;43099:87;:::o;22467:104::-;22523:13;22556:7;22549:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22467:104;:::o;45535:55::-;;;;;;;;;;;;;;;;;:::o;45483:45::-;;;;;;;;;;;;;;;;;;;;;;:::o;24150:155::-;24245:52;24264:12;:10;:12::i;:::-;24278:8;24288;24245:18;:52::i;:::-;24150:155;;:::o;48384:113::-;43330:12;:10;:12::i;:::-;43319:23;;:7;:5;:7::i;:::-;:23;;;43311:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48475:14:::1;48459:13;;:30;;;;;;;;;;;;;;;;;;48384:113:::0;:::o;25273:328::-;25448:41;25467:12;:10;:12::i;:::-;25481:7;25448:18;:41::i;:::-;25440:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;25554:39;25568:4;25574:2;25578:7;25587:5;25554:13;:39::i;:::-;25273:328;;;;:::o;45063:40::-;;;;:::o;45007:49::-;;;;:::o;44759:37::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;47700:462::-;47773:13;47807:17;47815:8;47807:7;:17::i;:::-;47799:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;47894:13;:23;47908:8;47894:23;;;;;;;;;;;;;;;;;;;;;47889:78;;47941:14;47934:21;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47889:78;47979:28;48010:10;:8;:10::i;:::-;47979:41;;48069:1;48044:14;48038:28;:32;:116;;;;;;;;;;;;;;;;;48097:14;48113:19;:8;:17;:19::i;:::-;48134:13;48080:68;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;48038:116;48031:123;;;47700:462;;;;:::o;49094:116::-;43330:12;:10;:12::i;:::-;43319:23;;:7;:5;:7::i;:::-;:23;;;43311:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49197:5:::1;49174:11;:20;49186:7;49174:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;49094:116:::0;:::o;49773:160::-;49857:10;;;;;;;;;;;49843:24;;:10;:24;;;49835:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;49914:11;49901:10;;:24;;;;;;;;;;;;;;;;;;49773:160;:::o;44878:31::-;;;;:::o;45433:43::-;;;;;;;;;;;;;;;;;;;;;;:::o;24376:164::-;24473:4;24497:18;:25;24516:5;24497:25;;;;;;;;;;;;;;;:35;24523:8;24497:35;;;;;;;;;;;;;;;;;;;;;;;;;24490:42;;24376:164;;;;:::o;48263:113::-;43330:12;:10;:12::i;:::-;43319:23;;:7;:5;:7::i;:::-;:23;;;43311:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48354:14:::1;48338:13;;:30;;;;;;;;;;;;;;;;;;48263:113:::0;:::o;48599:133::-;43330:12;:10;:12::i;:::-;43319:23;;:7;:5;:7::i;:::-;:23;;;43311:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48706:18:::1;48689:14;:35;;;;;;;;;;;;:::i;:::-;;48599:133:::0;:::o;44008:201::-;43330:12;:10;:12::i;:::-;43319:23;;:7;:5;:7::i;:::-;:23;;;43311:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44117:1:::1;44097:22;;:8;:22;;;;44089:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;44173:28;44192:8;44173:18;:28::i;:::-;44008:201:::0;:::o;45187:33::-;;;;;;;;;;;;;:::o;16580:98::-;16633:7;16660:10;16653:17;;16580:98;:::o;28095:110::-;28171:26;28181:2;28185:7;28171:26;;;;;;;;;;;;:9;:26::i;:::-;28095:110;;:::o;21353:305::-;21455:4;21507:25;21492:40;;;:11;:40;;;;:105;;;;21564:33;21549:48;;;:11;:48;;;;21492:105;:158;;;;21614:36;21638:11;21614:23;:36::i;:::-;21492:158;21472:178;;21353:305;;;:::o;27111:127::-;27176:4;27228:1;27200:30;;:7;:16;27208:7;27200:16;;;;;;;;;;;;;;;;;;;;;:30;;;;27193:37;;27111:127;;;:::o;31093:174::-;31195:2;31168:15;:24;31184:7;31168:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;31251:7;31247:2;31213:46;;31222:23;31237:7;31222:14;:23::i;:::-;31213:46;;;;;;;;;;;;31093:174;;:::o;27405:348::-;27498:4;27523:16;27531:7;27523;:16::i;:::-;27515:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27599:13;27615:23;27630:7;27615:14;:23::i;:::-;27599:39;;27668:5;27657:16;;:7;:16;;;:51;;;;27701:7;27677:31;;:20;27689:7;27677:11;:20::i;:::-;:31;;;27657:51;:87;;;;27712:32;27729:5;27736:7;27712:16;:32::i;:::-;27657:87;27649:96;;;27405:348;;;;:::o;30397:578::-;30556:4;30529:31;;:23;30544:7;30529:14;:23::i;:::-;:31;;;30521:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;30639:1;30625:16;;:2;:16;;;;30617:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;30695:39;30716:4;30722:2;30726:7;30695:20;:39::i;:::-;30799:29;30816:1;30820:7;30799:8;:29::i;:::-;30860:1;30841:9;:15;30851:4;30841:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;30889:1;30872:9;:13;30882:2;30872:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;30920:2;30901:7;:16;30909:7;30901:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;30959:7;30955:2;30940:27;;30949:4;30940:27;;;;;;;;;;;;30397:578;;;:::o;44369:191::-;44443:16;44462:6;;;;;;;;;;;44443:25;;44488:8;44479:6;;:17;;;;;;;;;;;;;;;;;;44543:8;44512:40;;44533:8;44512:40;;;;;;;;;;;;44369:191;;:::o;31409:315::-;31564:8;31555:17;;:5;:17;;;;31547:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;31651:8;31613:18;:25;31632:5;31613:25;;;;;;;;;;;;;;;:35;31639:8;31613:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;31697:8;31675:41;;31690:5;31675:41;;;31707:8;31675:41;;;;;;:::i;:::-;;;;;;;;31409:315;;;:::o;26483:::-;26640:28;26650:4;26656:2;26660:7;26640:9;:28::i;:::-;26687:48;26710:4;26716:2;26720:7;26729:5;26687:22;:48::i;:::-;26679:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;26483:315;;;;:::o;45853:108::-;45913:13;45946:7;45939:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45853:108;:::o;17165:723::-;17221:13;17451:1;17442:5;:10;17438:53;;;17469:10;;;;;;;;;;;;;;;;;;;;;17438:53;17501:12;17516:5;17501:20;;17532:14;17557:78;17572:1;17564:4;:9;17557:78;;17590:8;;;;;:::i;:::-;;;;17621:2;17613:10;;;;;:::i;:::-;;;17557:78;;;17645:19;17677:6;17667:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17645:39;;17695:154;17711:1;17702:5;:10;17695:154;;17739:1;17729:11;;;;;:::i;:::-;;;17806:2;17798:5;:10;;;;:::i;:::-;17785:2;:24;;;;:::i;:::-;17772:39;;17755:6;17762;17755:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;17835:2;17826:11;;;;;:::i;:::-;;;17695:154;;;17873:6;17859:21;;;;;17165:723;;;;:::o;28432:321::-;28562:18;28568:2;28572:7;28562:5;:18::i;:::-;28613:54;28644:1;28648:2;28652:7;28661:5;28613:22;:54::i;:::-;28591:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;28432:321;;;:::o;19793:157::-;19878:4;19917:25;19902:40;;;:11;:40;;;;19895:47;;19793:157;;;:::o;37561:589::-;37705:45;37732:4;37738:2;37742:7;37705:26;:45::i;:::-;37783:1;37767:18;;:4;:18;;;37763:187;;;37802:40;37834:7;37802:31;:40::i;:::-;37763:187;;;37872:2;37864:10;;:4;:10;;;37860:90;;37891:47;37924:4;37930:7;37891:32;:47::i;:::-;37860:90;37763:187;37978:1;37964:16;;:2;:16;;;37960:183;;;37997:45;38034:7;37997:36;:45::i;:::-;37960:183;;;38070:4;38064:10;;:2;:10;;;38060:83;;38091:40;38119:2;38123:7;38091:27;:40::i;:::-;38060:83;37960:183;37561:589;;;:::o;32289:799::-;32444:4;32465:15;:2;:13;;;:15::i;:::-;32461:620;;;32517:2;32501:36;;;32538:12;:10;:12::i;:::-;32552:4;32558:7;32567:5;32501:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;32497:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32760:1;32743:6;:13;:18;32739:272;;;32786:60;;;;;;;;;;:::i;:::-;;;;;;;;32739:272;32961:6;32955:13;32946:6;32942:2;32938:15;32931:38;32497:529;32634:41;;;32624:51;;;:6;:51;;;;32617:58;;;;;32461:620;33065:4;33058:11;;32289:799;;;;;;;:::o;29089:382::-;29183:1;29169:16;;:2;:16;;;;29161:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;29242:16;29250:7;29242;:16::i;:::-;29241:17;29233:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;29304:45;29333:1;29337:2;29341:7;29304:20;:45::i;:::-;29379:1;29362:9;:13;29372:2;29362:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;29410:2;29391:7;:16;29399:7;29391:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;29455:7;29451:2;29430:33;;29447:1;29430:33;;;;;;;;;;;;29089:382;;:::o;33660:126::-;;;;:::o;38873:164::-;38977:10;:17;;;;38950:15;:24;38966:7;38950:24;;;;;;;;;;;:44;;;;39005:10;39021:7;39005:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38873:164;:::o;39664:988::-;39930:22;39980:1;39955:22;39972:4;39955:16;:22::i;:::-;:26;;;;:::i;:::-;39930:51;;39992:18;40013:17;:26;40031:7;40013:26;;;;;;;;;;;;39992:47;;40160:14;40146:10;:28;40142:328;;40191:19;40213:12;:18;40226:4;40213:18;;;;;;;;;;;;;;;:34;40232:14;40213:34;;;;;;;;;;;;40191:56;;40297:11;40264:12;:18;40277:4;40264:18;;;;;;;;;;;;;;;:30;40283:10;40264:30;;;;;;;;;;;:44;;;;40414:10;40381:17;:30;40399:11;40381:30;;;;;;;;;;;:43;;;;40142:328;;40566:17;:26;40584:7;40566:26;;;;;;;;;;;40559:33;;;40610:12;:18;40623:4;40610:18;;;;;;;;;;;;;;;:34;40629:14;40610:34;;;;;;;;;;;40603:41;;;39664:988;;;;:::o;40947:1079::-;41200:22;41245:1;41225:10;:17;;;;:21;;;;:::i;:::-;41200:46;;41257:18;41278:15;:24;41294:7;41278:24;;;;;;;;;;;;41257:45;;41629:19;41651:10;41662:14;41651:26;;;;;;;;;;;;;;;;;;;;;;;;41629:48;;41715:11;41690:10;41701;41690:22;;;;;;;;;;;;;;;;;;;;;;;:36;;;;41826:10;41795:15;:28;41811:11;41795:28;;;;;;;;;;;:41;;;;41967:15;:24;41983:7;41967:24;;;;;;;;;;;41960:31;;;42002:10;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40947:1079;;;;:::o;38451:221::-;38536:14;38553:20;38570:2;38553:16;:20::i;:::-;38536:37;;38611:7;38584:12;:16;38597:2;38584:16;;;;;;;;;;;;;;;:24;38601:6;38584:24;;;;;;;;;;;:34;;;;38658:6;38629:17;:26;38647:7;38629:26;;;;;;;;;;;:35;;;;38451:221;;;:::o;8564:387::-;8624:4;8832:12;8899:7;8887:20;8879:28;;8942:1;8935:4;:8;8928:15;;;8564:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:655:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:2;;;414:1;411;404:12;350:2;450:1;435:238;460:6;457:1;454:13;435:238;;;528:3;557:37;590:3;578:10;557:37;:::i;:::-;552:3;545:50;624:4;619:3;615:14;608:21;;658:4;653:3;649:14;642:21;;495:178;482:1;479;475:9;470:14;;435:238;;;439:14;126:553;;;;;;;:::o;685:343::-;762:5;787:65;803:48;844:6;803:48;:::i;:::-;787:65;:::i;:::-;778:74;;875:6;868:5;861:21;913:4;906:5;902:16;951:3;942:6;937:3;933:16;930:25;927:2;;;968:1;965;958:12;927:2;981:41;1015:6;1010:3;1005;981:41;:::i;:::-;768:260;;;;;;:::o;1034:345::-;1112:5;1137:66;1153:49;1195:6;1153:49;:::i;:::-;1137:66;:::i;:::-;1128:75;;1226:6;1219:5;1212:21;1264:4;1257:5;1253:16;1302:3;1293:6;1288:3;1284:16;1281:25;1278:2;;;1319:1;1316;1309:12;1278:2;1332:41;1366:6;1361:3;1356;1332:41;:::i;:::-;1118:261;;;;;;:::o;1385:139::-;1431:5;1469:6;1456:20;1447:29;;1485:33;1512:5;1485:33;:::i;:::-;1437:87;;;;:::o;1547:303::-;1618:5;1667:3;1660:4;1652:6;1648:17;1644:27;1634:2;;1685:1;1682;1675:12;1634:2;1725:6;1712:20;1750:94;1840:3;1832:6;1825:4;1817:6;1813:17;1750:94;:::i;:::-;1741:103;;1624:226;;;;;:::o;1856:133::-;1899:5;1937:6;1924:20;1915:29;;1953:30;1977:5;1953:30;:::i;:::-;1905:84;;;;:::o;1995:137::-;2040:5;2078:6;2065:20;2056:29;;2094:32;2120:5;2094:32;:::i;:::-;2046:86;;;;:::o;2138:141::-;2194:5;2225:6;2219:13;2210:22;;2241:32;2267:5;2241:32;:::i;:::-;2200:79;;;;:::o;2298:271::-;2353:5;2402:3;2395:4;2387:6;2383:17;2379:27;2369:2;;2420:1;2417;2410:12;2369:2;2460:6;2447:20;2485:78;2559:3;2551:6;2544:4;2536:6;2532:17;2485:78;:::i;:::-;2476:87;;2359:210;;;;;:::o;2589:273::-;2645:5;2694:3;2687:4;2679:6;2675:17;2671:27;2661:2;;2712:1;2709;2702:12;2661:2;2752:6;2739:20;2777:79;2852:3;2844:6;2837:4;2829:6;2825:17;2777:79;:::i;:::-;2768:88;;2651:211;;;;;:::o;2868:139::-;2914:5;2952:6;2939:20;2930:29;;2968:33;2995:5;2968:33;:::i;:::-;2920:87;;;;:::o;3013:262::-;3072:6;3121:2;3109:9;3100:7;3096:23;3092:32;3089:2;;;3137:1;3134;3127:12;3089:2;3180:1;3205:53;3250:7;3241:6;3230:9;3226:22;3205:53;:::i;:::-;3195:63;;3151:117;3079:196;;;;:::o;3281:407::-;3349:6;3357;3406:2;3394:9;3385:7;3381:23;3377:32;3374:2;;;3422:1;3419;3412:12;3374:2;3465:1;3490:53;3535:7;3526:6;3515:9;3511:22;3490:53;:::i;:::-;3480:63;;3436:117;3592:2;3618:53;3663:7;3654:6;3643:9;3639:22;3618:53;:::i;:::-;3608:63;;3563:118;3364:324;;;;;:::o;3694:552::-;3771:6;3779;3787;3836:2;3824:9;3815:7;3811:23;3807:32;3804:2;;;3852:1;3849;3842:12;3804:2;3895:1;3920:53;3965:7;3956:6;3945:9;3941:22;3920:53;:::i;:::-;3910:63;;3866:117;4022:2;4048:53;4093:7;4084:6;4073:9;4069:22;4048:53;:::i;:::-;4038:63;;3993:118;4150:2;4176:53;4221:7;4212:6;4201:9;4197:22;4176:53;:::i;:::-;4166:63;;4121:118;3794:452;;;;;:::o;4252:809::-;4347:6;4355;4363;4371;4420:3;4408:9;4399:7;4395:23;4391:33;4388:2;;;4437:1;4434;4427:12;4388:2;4480:1;4505:53;4550:7;4541:6;4530:9;4526:22;4505:53;:::i;:::-;4495:63;;4451:117;4607:2;4633:53;4678:7;4669:6;4658:9;4654:22;4633:53;:::i;:::-;4623:63;;4578:118;4735:2;4761:53;4806:7;4797:6;4786:9;4782:22;4761:53;:::i;:::-;4751:63;;4706:118;4891:2;4880:9;4876:18;4863:32;4922:18;4914:6;4911:30;4908:2;;;4954:1;4951;4944:12;4908:2;4982:62;5036:7;5027:6;5016:9;5012:22;4982:62;:::i;:::-;4972:72;;4834:220;4378:683;;;;;;;:::o;5067:401::-;5132:6;5140;5189:2;5177:9;5168:7;5164:23;5160:32;5157:2;;;5205:1;5202;5195:12;5157:2;5248:1;5273:53;5318:7;5309:6;5298:9;5294:22;5273:53;:::i;:::-;5263:63;;5219:117;5375:2;5401:50;5443:7;5434:6;5423:9;5419:22;5401:50;:::i;:::-;5391:60;;5346:115;5147:321;;;;;:::o;5474:407::-;5542:6;5550;5599:2;5587:9;5578:7;5574:23;5570:32;5567:2;;;5615:1;5612;5605:12;5567:2;5658:1;5683:53;5728:7;5719:6;5708:9;5704:22;5683:53;:::i;:::-;5673:63;;5629:117;5785:2;5811:53;5856:7;5847:6;5836:9;5832:22;5811:53;:::i;:::-;5801:63;;5756:118;5557:324;;;;;:::o;5887:405::-;5971:6;6020:2;6008:9;5999:7;5995:23;5991:32;5988:2;;;6036:1;6033;6026:12;5988:2;6107:1;6096:9;6092:17;6079:31;6137:18;6129:6;6126:30;6123:2;;;6169:1;6166;6159:12;6123:2;6197:78;6267:7;6258:6;6247:9;6243:22;6197:78;:::i;:::-;6187:88;;6050:235;5978:314;;;;:::o;6298:256::-;6354:6;6403:2;6391:9;6382:7;6378:23;6374:32;6371:2;;;6419:1;6416;6409:12;6371:2;6462:1;6487:50;6529:7;6520:6;6509:9;6505:22;6487:50;:::i;:::-;6477:60;;6433:114;6361:193;;;;:::o;6560:260::-;6618:6;6667:2;6655:9;6646:7;6642:23;6638:32;6635:2;;;6683:1;6680;6673:12;6635:2;6726:1;6751:52;6795:7;6786:6;6775:9;6771:22;6751:52;:::i;:::-;6741:62;;6697:116;6625:195;;;;:::o;6826:282::-;6895:6;6944:2;6932:9;6923:7;6919:23;6915:32;6912:2;;;6960:1;6957;6950:12;6912:2;7003:1;7028:63;7083:7;7074:6;7063:9;7059:22;7028:63;:::i;:::-;7018:73;;6974:127;6902:206;;;;:::o;7114:375::-;7183:6;7232:2;7220:9;7211:7;7207:23;7203:32;7200:2;;;7248:1;7245;7238:12;7200:2;7319:1;7308:9;7304:17;7291:31;7349:18;7341:6;7338:30;7335:2;;;7381:1;7378;7371:12;7335:2;7409:63;7464:7;7455:6;7444:9;7440:22;7409:63;:::i;:::-;7399:73;;7262:220;7190:299;;;;:::o;7495:262::-;7554:6;7603:2;7591:9;7582:7;7578:23;7574:32;7571:2;;;7619:1;7616;7609:12;7571:2;7662:1;7687:53;7732:7;7723:6;7712:9;7708:22;7687:53;:::i;:::-;7677:63;;7633:117;7561:196;;;;:::o;7763:118::-;7850:24;7868:5;7850:24;:::i;:::-;7845:3;7838:37;7828:53;;:::o;7887:109::-;7968:21;7983:5;7968:21;:::i;:::-;7963:3;7956:34;7946:50;;:::o;8002:360::-;8088:3;8116:38;8148:5;8116:38;:::i;:::-;8170:70;8233:6;8228:3;8170:70;:::i;:::-;8163:77;;8249:52;8294:6;8289:3;8282:4;8275:5;8271:16;8249:52;:::i;:::-;8326:29;8348:6;8326:29;:::i;:::-;8321:3;8317:39;8310:46;;8092:270;;;;;:::o;8368:364::-;8456:3;8484:39;8517:5;8484:39;:::i;:::-;8539:71;8603:6;8598:3;8539:71;:::i;:::-;8532:78;;8619:52;8664:6;8659:3;8652:4;8645:5;8641:16;8619:52;:::i;:::-;8696:29;8718:6;8696:29;:::i;:::-;8691:3;8687:39;8680:46;;8460:272;;;;;:::o;8738:377::-;8844:3;8872:39;8905:5;8872:39;:::i;:::-;8927:89;9009:6;9004:3;8927:89;:::i;:::-;8920:96;;9025:52;9070:6;9065:3;9058:4;9051:5;9047:16;9025:52;:::i;:::-;9102:6;9097:3;9093:16;9086:23;;8848:267;;;;;:::o;9145:845::-;9248:3;9285:5;9279:12;9314:36;9340:9;9314:36;:::i;:::-;9366:89;9448:6;9443:3;9366:89;:::i;:::-;9359:96;;9486:1;9475:9;9471:17;9502:1;9497:137;;;;9648:1;9643:341;;;;9464:520;;9497:137;9581:4;9577:9;9566;9562:25;9557:3;9550:38;9617:6;9612:3;9608:16;9601:23;;9497:137;;9643:341;9710:38;9742:5;9710:38;:::i;:::-;9770:1;9784:154;9798:6;9795:1;9792:13;9784:154;;;9872:7;9866:14;9862:1;9857:3;9853:11;9846:35;9922:1;9913:7;9909:15;9898:26;;9820:4;9817:1;9813:12;9808:17;;9784:154;;;9967:6;9962:3;9958:16;9951:23;;9650:334;;9464:520;;9252:738;;;;;;:::o;9996:366::-;10138:3;10159:67;10223:2;10218:3;10159:67;:::i;:::-;10152:74;;10235:93;10324:3;10235:93;:::i;:::-;10353:2;10348:3;10344:12;10337:19;;10142:220;;;:::o;10368:366::-;10510:3;10531:67;10595:2;10590:3;10531:67;:::i;:::-;10524:74;;10607:93;10696:3;10607:93;:::i;:::-;10725:2;10720:3;10716:12;10709:19;;10514:220;;;:::o;10740:366::-;10882:3;10903:67;10967:2;10962:3;10903:67;:::i;:::-;10896:74;;10979:93;11068:3;10979:93;:::i;:::-;11097:2;11092:3;11088:12;11081:19;;10886:220;;;:::o;11112:366::-;11254:3;11275:67;11339:2;11334:3;11275:67;:::i;:::-;11268:74;;11351:93;11440:3;11351:93;:::i;:::-;11469:2;11464:3;11460:12;11453:19;;11258:220;;;:::o;11484:366::-;11626:3;11647:67;11711:2;11706:3;11647:67;:::i;:::-;11640:74;;11723:93;11812:3;11723:93;:::i;:::-;11841:2;11836:3;11832:12;11825:19;;11630:220;;;:::o;11856:366::-;11998:3;12019:67;12083:2;12078:3;12019:67;:::i;:::-;12012:74;;12095:93;12184:3;12095:93;:::i;:::-;12213:2;12208:3;12204:12;12197:19;;12002:220;;;:::o;12228:366::-;12370:3;12391:67;12455:2;12450:3;12391:67;:::i;:::-;12384:74;;12467:93;12556:3;12467:93;:::i;:::-;12585:2;12580:3;12576:12;12569:19;;12374:220;;;:::o;12600:366::-;12742:3;12763:67;12827:2;12822:3;12763:67;:::i;:::-;12756:74;;12839:93;12928:3;12839:93;:::i;:::-;12957:2;12952:3;12948:12;12941:19;;12746:220;;;:::o;12972:366::-;13114:3;13135:67;13199:2;13194:3;13135:67;:::i;:::-;13128:74;;13211:93;13300:3;13211:93;:::i;:::-;13329:2;13324:3;13320:12;13313:19;;13118:220;;;:::o;13344:366::-;13486:3;13507:67;13571:2;13566:3;13507:67;:::i;:::-;13500:74;;13583:93;13672:3;13583:93;:::i;:::-;13701:2;13696:3;13692:12;13685:19;;13490:220;;;:::o;13716:366::-;13858:3;13879:67;13943:2;13938:3;13879:67;:::i;:::-;13872:74;;13955:93;14044:3;13955:93;:::i;:::-;14073:2;14068:3;14064:12;14057:19;;13862:220;;;:::o;14088:366::-;14230:3;14251:67;14315:2;14310:3;14251:67;:::i;:::-;14244:74;;14327:93;14416:3;14327:93;:::i;:::-;14445:2;14440:3;14436:12;14429:19;;14234:220;;;:::o;14460:366::-;14602:3;14623:67;14687:2;14682:3;14623:67;:::i;:::-;14616:74;;14699:93;14788:3;14699:93;:::i;:::-;14817:2;14812:3;14808:12;14801:19;;14606:220;;;:::o;14832:366::-;14974:3;14995:67;15059:2;15054:3;14995:67;:::i;:::-;14988:74;;15071:93;15160:3;15071:93;:::i;:::-;15189:2;15184:3;15180:12;15173:19;;14978:220;;;:::o;15204:366::-;15346:3;15367:67;15431:2;15426:3;15367:67;:::i;:::-;15360:74;;15443:93;15532:3;15443:93;:::i;:::-;15561:2;15556:3;15552:12;15545:19;;15350:220;;;:::o;15576:366::-;15718:3;15739:67;15803:2;15798:3;15739:67;:::i;:::-;15732:74;;15815:93;15904:3;15815:93;:::i;:::-;15933:2;15928:3;15924:12;15917:19;;15722:220;;;:::o;15948:366::-;16090:3;16111:67;16175:2;16170:3;16111:67;:::i;:::-;16104:74;;16187:93;16276:3;16187:93;:::i;:::-;16305:2;16300:3;16296:12;16289:19;;16094:220;;;:::o;16320:366::-;16462:3;16483:67;16547:2;16542:3;16483:67;:::i;:::-;16476:74;;16559:93;16648:3;16559:93;:::i;:::-;16677:2;16672:3;16668:12;16661:19;;16466:220;;;:::o;16692:366::-;16834:3;16855:67;16919:2;16914:3;16855:67;:::i;:::-;16848:74;;16931:93;17020:3;16931:93;:::i;:::-;17049:2;17044:3;17040:12;17033:19;;16838:220;;;:::o;17064:366::-;17206:3;17227:67;17291:2;17286:3;17227:67;:::i;:::-;17220:74;;17303:93;17392:3;17303:93;:::i;:::-;17421:2;17416:3;17412:12;17405:19;;17210:220;;;:::o;17436:366::-;17578:3;17599:67;17663:2;17658:3;17599:67;:::i;:::-;17592:74;;17675:93;17764:3;17675:93;:::i;:::-;17793:2;17788:3;17784:12;17777:19;;17582:220;;;:::o;17808:366::-;17950:3;17971:67;18035:2;18030:3;17971:67;:::i;:::-;17964:74;;18047:93;18136:3;18047:93;:::i;:::-;18165:2;18160:3;18156:12;18149:19;;17954:220;;;:::o;18180:366::-;18322:3;18343:67;18407:2;18402:3;18343:67;:::i;:::-;18336:74;;18419:93;18508:3;18419:93;:::i;:::-;18537:2;18532:3;18528:12;18521:19;;18326:220;;;:::o;18552:366::-;18694:3;18715:67;18779:2;18774:3;18715:67;:::i;:::-;18708:74;;18791:93;18880:3;18791:93;:::i;:::-;18909:2;18904:3;18900:12;18893:19;;18698:220;;;:::o;18924:366::-;19066:3;19087:67;19151:2;19146:3;19087:67;:::i;:::-;19080:74;;19163:93;19252:3;19163:93;:::i;:::-;19281:2;19276:3;19272:12;19265:19;;19070:220;;;:::o;19296:366::-;19438:3;19459:67;19523:2;19518:3;19459:67;:::i;:::-;19452:74;;19535:93;19624:3;19535:93;:::i;:::-;19653:2;19648:3;19644:12;19637:19;;19442:220;;;:::o;19668:398::-;19827:3;19848:83;19929:1;19924:3;19848:83;:::i;:::-;19841:90;;19940:93;20029:3;19940:93;:::i;:::-;20058:1;20053:3;20049:11;20042:18;;19831:235;;;:::o;20072:366::-;20214:3;20235:67;20299:2;20294:3;20235:67;:::i;:::-;20228:74;;20311:93;20400:3;20311:93;:::i;:::-;20429:2;20424:3;20420:12;20413:19;;20218:220;;;:::o;20444:366::-;20586:3;20607:67;20671:2;20666:3;20607:67;:::i;:::-;20600:74;;20683:93;20772:3;20683:93;:::i;:::-;20801:2;20796:3;20792:12;20785:19;;20590:220;;;:::o;20816:366::-;20958:3;20979:67;21043:2;21038:3;20979:67;:::i;:::-;20972:74;;21055:93;21144:3;21055:93;:::i;:::-;21173:2;21168:3;21164:12;21157:19;;20962:220;;;:::o;21188:366::-;21330:3;21351:67;21415:2;21410:3;21351:67;:::i;:::-;21344:74;;21427:93;21516:3;21427:93;:::i;:::-;21545:2;21540:3;21536:12;21529:19;;21334:220;;;:::o;21560:365::-;21702:3;21723:66;21787:1;21782:3;21723:66;:::i;:::-;21716:73;;21798:93;21887:3;21798:93;:::i;:::-;21916:2;21911:3;21907:12;21900:19;;21706:219;;;:::o;21931:118::-;22018:24;22036:5;22018:24;:::i;:::-;22013:3;22006:37;21996:53;;:::o;22055:589::-;22280:3;22302:95;22393:3;22384:6;22302:95;:::i;:::-;22295:102;;22414:95;22505:3;22496:6;22414:95;:::i;:::-;22407:102;;22526:92;22614:3;22605:6;22526:92;:::i;:::-;22519:99;;22635:3;22628:10;;22284:360;;;;;;:::o;22650:379::-;22834:3;22856:147;22999:3;22856:147;:::i;:::-;22849:154;;23020:3;23013:10;;22838:191;;;:::o;23035:222::-;23128:4;23166:2;23155:9;23151:18;23143:26;;23179:71;23247:1;23236:9;23232:17;23223:6;23179:71;:::i;:::-;23133:124;;;;:::o;23263:640::-;23458:4;23496:3;23485:9;23481:19;23473:27;;23510:71;23578:1;23567:9;23563:17;23554:6;23510:71;:::i;:::-;23591:72;23659:2;23648:9;23644:18;23635:6;23591:72;:::i;:::-;23673;23741:2;23730:9;23726:18;23717:6;23673:72;:::i;:::-;23792:9;23786:4;23782:20;23777:2;23766:9;23762:18;23755:48;23820:76;23891:4;23882:6;23820:76;:::i;:::-;23812:84;;23463:440;;;;;;;:::o;23909:210::-;23996:4;24034:2;24023:9;24019:18;24011:26;;24047:65;24109:1;24098:9;24094:17;24085:6;24047:65;:::i;:::-;24001:118;;;;:::o;24125:313::-;24238:4;24276:2;24265:9;24261:18;24253:26;;24325:9;24319:4;24315:20;24311:1;24300:9;24296:17;24289:47;24353:78;24426:4;24417:6;24353:78;:::i;:::-;24345:86;;24243:195;;;;:::o;24444:419::-;24610:4;24648:2;24637:9;24633:18;24625:26;;24697:9;24691:4;24687:20;24683:1;24672:9;24668:17;24661:47;24725:131;24851:4;24725:131;:::i;:::-;24717:139;;24615:248;;;:::o;24869:419::-;25035:4;25073:2;25062:9;25058:18;25050:26;;25122:9;25116:4;25112:20;25108:1;25097:9;25093:17;25086:47;25150:131;25276:4;25150:131;:::i;:::-;25142:139;;25040:248;;;:::o;25294:419::-;25460:4;25498:2;25487:9;25483:18;25475:26;;25547:9;25541:4;25537:20;25533:1;25522:9;25518:17;25511:47;25575:131;25701:4;25575:131;:::i;:::-;25567:139;;25465:248;;;:::o;25719:419::-;25885:4;25923:2;25912:9;25908:18;25900:26;;25972:9;25966:4;25962:20;25958:1;25947:9;25943:17;25936:47;26000:131;26126:4;26000:131;:::i;:::-;25992:139;;25890:248;;;:::o;26144:419::-;26310:4;26348:2;26337:9;26333:18;26325:26;;26397:9;26391:4;26387:20;26383:1;26372:9;26368:17;26361:47;26425:131;26551:4;26425:131;:::i;:::-;26417:139;;26315:248;;;:::o;26569:419::-;26735:4;26773:2;26762:9;26758:18;26750:26;;26822:9;26816:4;26812:20;26808:1;26797:9;26793:17;26786:47;26850:131;26976:4;26850:131;:::i;:::-;26842:139;;26740:248;;;:::o;26994:419::-;27160:4;27198:2;27187:9;27183:18;27175:26;;27247:9;27241:4;27237:20;27233:1;27222:9;27218:17;27211:47;27275:131;27401:4;27275:131;:::i;:::-;27267:139;;27165:248;;;:::o;27419:419::-;27585:4;27623:2;27612:9;27608:18;27600:26;;27672:9;27666:4;27662:20;27658:1;27647:9;27643:17;27636:47;27700:131;27826:4;27700:131;:::i;:::-;27692:139;;27590:248;;;:::o;27844:419::-;28010:4;28048:2;28037:9;28033:18;28025:26;;28097:9;28091:4;28087:20;28083:1;28072:9;28068:17;28061:47;28125:131;28251:4;28125:131;:::i;:::-;28117:139;;28015:248;;;:::o;28269:419::-;28435:4;28473:2;28462:9;28458:18;28450:26;;28522:9;28516:4;28512:20;28508:1;28497:9;28493:17;28486:47;28550:131;28676:4;28550:131;:::i;:::-;28542:139;;28440:248;;;:::o;28694:419::-;28860:4;28898:2;28887:9;28883:18;28875:26;;28947:9;28941:4;28937:20;28933:1;28922:9;28918:17;28911:47;28975:131;29101:4;28975:131;:::i;:::-;28967:139;;28865:248;;;:::o;29119:419::-;29285:4;29323:2;29312:9;29308:18;29300:26;;29372:9;29366:4;29362:20;29358:1;29347:9;29343:17;29336:47;29400:131;29526:4;29400:131;:::i;:::-;29392:139;;29290:248;;;:::o;29544:419::-;29710:4;29748:2;29737:9;29733:18;29725:26;;29797:9;29791:4;29787:20;29783:1;29772:9;29768:17;29761:47;29825:131;29951:4;29825:131;:::i;:::-;29817:139;;29715:248;;;:::o;29969:419::-;30135:4;30173:2;30162:9;30158:18;30150:26;;30222:9;30216:4;30212:20;30208:1;30197:9;30193:17;30186:47;30250:131;30376:4;30250:131;:::i;:::-;30242:139;;30140:248;;;:::o;30394:419::-;30560:4;30598:2;30587:9;30583:18;30575:26;;30647:9;30641:4;30637:20;30633:1;30622:9;30618:17;30611:47;30675:131;30801:4;30675:131;:::i;:::-;30667:139;;30565:248;;;:::o;30819:419::-;30985:4;31023:2;31012:9;31008:18;31000:26;;31072:9;31066:4;31062:20;31058:1;31047:9;31043:17;31036:47;31100:131;31226:4;31100:131;:::i;:::-;31092:139;;30990:248;;;:::o;31244:419::-;31410:4;31448:2;31437:9;31433:18;31425:26;;31497:9;31491:4;31487:20;31483:1;31472:9;31468:17;31461:47;31525:131;31651:4;31525:131;:::i;:::-;31517:139;;31415:248;;;:::o;31669:419::-;31835:4;31873:2;31862:9;31858:18;31850:26;;31922:9;31916:4;31912:20;31908:1;31897:9;31893:17;31886:47;31950:131;32076:4;31950:131;:::i;:::-;31942:139;;31840:248;;;:::o;32094:419::-;32260:4;32298:2;32287:9;32283:18;32275:26;;32347:9;32341:4;32337:20;32333:1;32322:9;32318:17;32311:47;32375:131;32501:4;32375:131;:::i;:::-;32367:139;;32265:248;;;:::o;32519:419::-;32685:4;32723:2;32712:9;32708:18;32700:26;;32772:9;32766:4;32762:20;32758:1;32747:9;32743:17;32736:47;32800:131;32926:4;32800:131;:::i;:::-;32792:139;;32690:248;;;:::o;32944:419::-;33110:4;33148:2;33137:9;33133:18;33125:26;;33197:9;33191:4;33187:20;33183:1;33172:9;33168:17;33161:47;33225:131;33351:4;33225:131;:::i;:::-;33217:139;;33115:248;;;:::o;33369:419::-;33535:4;33573:2;33562:9;33558:18;33550:26;;33622:9;33616:4;33612:20;33608:1;33597:9;33593:17;33586:47;33650:131;33776:4;33650:131;:::i;:::-;33642:139;;33540:248;;;:::o;33794:419::-;33960:4;33998:2;33987:9;33983:18;33975:26;;34047:9;34041:4;34037:20;34033:1;34022:9;34018:17;34011:47;34075:131;34201:4;34075:131;:::i;:::-;34067:139;;33965:248;;;:::o;34219:419::-;34385:4;34423:2;34412:9;34408:18;34400:26;;34472:9;34466:4;34462:20;34458:1;34447:9;34443:17;34436:47;34500:131;34626:4;34500:131;:::i;:::-;34492:139;;34390:248;;;:::o;34644:419::-;34810:4;34848:2;34837:9;34833:18;34825:26;;34897:9;34891:4;34887:20;34883:1;34872:9;34868:17;34861:47;34925:131;35051:4;34925:131;:::i;:::-;34917:139;;34815:248;;;:::o;35069:419::-;35235:4;35273:2;35262:9;35258:18;35250:26;;35322:9;35316:4;35312:20;35308:1;35297:9;35293:17;35286:47;35350:131;35476:4;35350:131;:::i;:::-;35342:139;;35240:248;;;:::o;35494:419::-;35660:4;35698:2;35687:9;35683:18;35675:26;;35747:9;35741:4;35737:20;35733:1;35722:9;35718:17;35711:47;35775:131;35901:4;35775:131;:::i;:::-;35767:139;;35665:248;;;:::o;35919:419::-;36085:4;36123:2;36112:9;36108:18;36100:26;;36172:9;36166:4;36162:20;36158:1;36147:9;36143:17;36136:47;36200:131;36326:4;36200:131;:::i;:::-;36192:139;;36090:248;;;:::o;36344:419::-;36510:4;36548:2;36537:9;36533:18;36525:26;;36597:9;36591:4;36587:20;36583:1;36572:9;36568:17;36561:47;36625:131;36751:4;36625:131;:::i;:::-;36617:139;;36515:248;;;:::o;36769:419::-;36935:4;36973:2;36962:9;36958:18;36950:26;;37022:9;37016:4;37012:20;37008:1;36997:9;36993:17;36986:47;37050:131;37176:4;37050:131;:::i;:::-;37042:139;;36940:248;;;:::o;37194:419::-;37360:4;37398:2;37387:9;37383:18;37375:26;;37447:9;37441:4;37437:20;37433:1;37422:9;37418:17;37411:47;37475:131;37601:4;37475:131;:::i;:::-;37467:139;;37365:248;;;:::o;37619:222::-;37712:4;37750:2;37739:9;37735:18;37727:26;;37763:71;37831:1;37820:9;37816:17;37807:6;37763:71;:::i;:::-;37717:124;;;;:::o;37847:129::-;37881:6;37908:20;;:::i;:::-;37898:30;;37937:33;37965:4;37957:6;37937:33;:::i;:::-;37888:88;;;:::o;37982:75::-;38015:6;38048:2;38042:9;38032:19;;38022:35;:::o;38063:311::-;38140:4;38230:18;38222:6;38219:30;38216:2;;;38252:18;;:::i;:::-;38216:2;38302:4;38294:6;38290:17;38282:25;;38362:4;38356;38352:15;38344:23;;38145:229;;;:::o;38380:307::-;38441:4;38531:18;38523:6;38520:30;38517:2;;;38553:18;;:::i;:::-;38517:2;38591:29;38613:6;38591:29;:::i;:::-;38583:37;;38675:4;38669;38665:15;38657:23;;38446:241;;;:::o;38693:308::-;38755:4;38845:18;38837:6;38834:30;38831:2;;;38867:18;;:::i;:::-;38831:2;38905:29;38927:6;38905:29;:::i;:::-;38897:37;;38989:4;38983;38979:15;38971:23;;38760:241;;;:::o;39007:141::-;39056:4;39079:3;39071:11;;39102:3;39099:1;39092:14;39136:4;39133:1;39123:18;39115:26;;39061:87;;;:::o;39154:98::-;39205:6;39239:5;39233:12;39223:22;;39212:40;;;:::o;39258:99::-;39310:6;39344:5;39338:12;39328:22;;39317:40;;;:::o;39363:168::-;39446:11;39480:6;39475:3;39468:19;39520:4;39515:3;39511:14;39496:29;;39458:73;;;;:::o;39537:147::-;39638:11;39675:3;39660:18;;39650:34;;;;:::o;39690:169::-;39774:11;39808:6;39803:3;39796:19;39848:4;39843:3;39839:14;39824:29;;39786:73;;;;:::o;39865:148::-;39967:11;40004:3;39989:18;;39979:34;;;;:::o;40019:305::-;40059:3;40078:20;40096:1;40078:20;:::i;:::-;40073:25;;40112:20;40130:1;40112:20;:::i;:::-;40107:25;;40266:1;40198:66;40194:74;40191:1;40188:81;40185:2;;;40272:18;;:::i;:::-;40185:2;40316:1;40313;40309:9;40302:16;;40063:261;;;;:::o;40330:185::-;40370:1;40387:20;40405:1;40387:20;:::i;:::-;40382:25;;40421:20;40439:1;40421:20;:::i;:::-;40416:25;;40460:1;40450:2;;40465:18;;:::i;:::-;40450:2;40507:1;40504;40500:9;40495:14;;40372:143;;;;:::o;40521:348::-;40561:7;40584:20;40602:1;40584:20;:::i;:::-;40579:25;;40618:20;40636:1;40618:20;:::i;:::-;40613:25;;40806:1;40738:66;40734:74;40731:1;40728:81;40723:1;40716:9;40709:17;40705:105;40702:2;;;40813:18;;:::i;:::-;40702:2;40861:1;40858;40854:9;40843:20;;40569:300;;;;:::o;40875:191::-;40915:4;40935:20;40953:1;40935:20;:::i;:::-;40930:25;;40969:20;40987:1;40969:20;:::i;:::-;40964:25;;41008:1;41005;41002:8;40999:2;;;41013:18;;:::i;:::-;40999:2;41058:1;41055;41051:9;41043:17;;40920:146;;;;:::o;41072:96::-;41109:7;41138:24;41156:5;41138:24;:::i;:::-;41127:35;;41117:51;;;:::o;41174:90::-;41208:7;41251:5;41244:13;41237:21;41226:32;;41216:48;;;:::o;41270:149::-;41306:7;41346:66;41339:5;41335:78;41324:89;;41314:105;;;:::o;41425:126::-;41462:7;41502:42;41495:5;41491:54;41480:65;;41470:81;;;:::o;41557:77::-;41594:7;41623:5;41612:16;;41602:32;;;:::o;41640:154::-;41724:6;41719:3;41714;41701:30;41786:1;41777:6;41772:3;41768:16;41761:27;41691:103;;;:::o;41800:307::-;41868:1;41878:113;41892:6;41889:1;41886:13;41878:113;;;41977:1;41972:3;41968:11;41962:18;41958:1;41953:3;41949:11;41942:39;41914:2;41911:1;41907:10;41902:15;;41878:113;;;42009:6;42006:1;42003:13;42000:2;;;42089:1;42080:6;42075:3;42071:16;42064:27;42000:2;41849:258;;;;:::o;42113:320::-;42157:6;42194:1;42188:4;42184:12;42174:22;;42241:1;42235:4;42231:12;42262:18;42252:2;;42318:4;42310:6;42306:17;42296:27;;42252:2;42380;42372:6;42369:14;42349:18;42346:38;42343:2;;;42399:18;;:::i;:::-;42343:2;42164:269;;;;:::o;42439:281::-;42522:27;42544:4;42522:27;:::i;:::-;42514:6;42510:40;42652:6;42640:10;42637:22;42616:18;42604:10;42601:34;42598:62;42595:2;;;42663:18;;:::i;:::-;42595:2;42703:10;42699:2;42692:22;42482:238;;;:::o;42726:233::-;42765:3;42788:24;42806:5;42788:24;:::i;:::-;42779:33;;42834:66;42827:5;42824:77;42821:2;;;42904:18;;:::i;:::-;42821:2;42951:1;42944:5;42940:13;42933:20;;42769:190;;;:::o;42965:176::-;42997:1;43014:20;43032:1;43014:20;:::i;:::-;43009:25;;43048:20;43066:1;43048:20;:::i;:::-;43043:25;;43087:1;43077:2;;43092:18;;:::i;:::-;43077:2;43133:1;43130;43126:9;43121:14;;42999:142;;;;:::o;43147:180::-;43195:77;43192:1;43185:88;43292:4;43289:1;43282:15;43316:4;43313:1;43306:15;43333:180;43381:77;43378:1;43371:88;43478:4;43475:1;43468:15;43502:4;43499:1;43492:15;43519:180;43567:77;43564:1;43557:88;43664:4;43661:1;43654:15;43688:4;43685:1;43678:15;43705:180;43753:77;43750:1;43743:88;43850:4;43847:1;43840:15;43874:4;43871:1;43864:15;43891:102;43932:6;43983:2;43979:7;43974:2;43967:5;43963:14;43959:28;43949:38;;43939:54;;;:::o;43999:181::-;44139:33;44135:1;44127:6;44123:14;44116:57;44105:75;:::o;44186:230::-;44326:34;44322:1;44314:6;44310:14;44303:58;44395:13;44390:2;44382:6;44378:15;44371:38;44292:124;:::o;44422:237::-;44562:34;44558:1;44550:6;44546:14;44539:58;44631:20;44626:2;44618:6;44614:15;44607:45;44528:131;:::o;44665:225::-;44805:34;44801:1;44793:6;44789:14;44782:58;44874:8;44869:2;44861:6;44857:15;44850:33;44771:119;:::o;44896:178::-;45036:30;45032:1;45024:6;45020:14;45013:54;45002:72;:::o;45080:235::-;45220:34;45216:1;45208:6;45204:14;45197:58;45289:18;45284:2;45276:6;45272:15;45265:43;45186:129;:::o;45321:168::-;45461:20;45457:1;45449:6;45445:14;45438:44;45427:62;:::o;45495:223::-;45635:34;45631:1;45623:6;45619:14;45612:58;45704:6;45699:2;45691:6;45687:15;45680:31;45601:117;:::o;45724:175::-;45864:27;45860:1;45852:6;45848:14;45841:51;45830:69;:::o;45905:176::-;46045:28;46041:1;46033:6;46029:14;46022:52;46011:70;:::o;46087:223::-;46227:34;46223:1;46215:6;46211:14;46204:58;46296:6;46291:2;46283:6;46279:15;46272:31;46193:117;:::o;46316:168::-;46456:20;46452:1;46444:6;46440:14;46433:44;46422:62;:::o;46490:231::-;46630:34;46626:1;46618:6;46614:14;46607:58;46699:14;46694:2;46686:6;46682:15;46675:39;46596:125;:::o;46727:222::-;46867:34;46863:1;46855:6;46851:14;46844:58;46936:5;46931:2;46923:6;46919:15;46912:30;46833:116;:::o;46955:243::-;47095:34;47091:1;47083:6;47079:14;47072:58;47164:26;47159:2;47151:6;47147:15;47140:51;47061:137;:::o;47204:180::-;47344:32;47340:1;47332:6;47328:14;47321:56;47310:74;:::o;47390:229::-;47530:34;47526:1;47518:6;47514:14;47507:58;47599:12;47594:2;47586:6;47582:15;47575:37;47496:123;:::o;47625:174::-;47765:26;47761:1;47753:6;47749:14;47742:50;47731:68;:::o;47805:228::-;47945:34;47941:1;47933:6;47929:14;47922:58;48014:11;48009:2;48001:6;47997:15;47990:36;47911:122;:::o;48039:180::-;48179:32;48175:1;48167:6;48163:14;48156:56;48145:74;:::o;48225:182::-;48365:34;48361:1;48353:6;48349:14;48342:58;48331:76;:::o;48413:231::-;48553:34;48549:1;48541:6;48537:14;48530:58;48622:14;48617:2;48609:6;48605:15;48598:39;48519:125;:::o;48650:182::-;48790:34;48786:1;48778:6;48774:14;48767:58;48756:76;:::o;48838:228::-;48978:34;48974:1;48966:6;48962:14;48955:58;49047:11;49042:2;49034:6;49030:15;49023:36;48944:122;:::o;49072:234::-;49212:34;49208:1;49200:6;49196:14;49189:58;49281:17;49276:2;49268:6;49264:15;49257:42;49178:128;:::o;49312:220::-;49452:34;49448:1;49440:6;49436:14;49429:58;49521:3;49516:2;49508:6;49504:15;49497:28;49418:114;:::o;49538:::-;49644:8;:::o;49658:236::-;49798:34;49794:1;49786:6;49782:14;49775:58;49867:19;49862:2;49854:6;49850:15;49843:44;49764:130;:::o;49900:231::-;50040:34;50036:1;50028:6;50024:14;50017:58;50109:14;50104:2;50096:6;50092:15;50085:39;50006:125;:::o;50137:294::-;50277:34;50273:1;50265:6;50261:14;50254:58;50346:34;50341:2;50333:6;50329:15;50322:59;50415:8;50410:2;50402:6;50398:15;50391:33;50243:188;:::o;50437:169::-;50577:21;50573:1;50565:6;50561:14;50554:45;50543:63;:::o;50612:159::-;50752:11;50748:1;50740:6;50736:14;50729:35;50718:53;:::o;50777:122::-;50850:24;50868:5;50850:24;:::i;:::-;50843:5;50840:35;50830:2;;50889:1;50886;50879:12;50830:2;50820:79;:::o;50905:116::-;50975:21;50990:5;50975:21;:::i;:::-;50968:5;50965:32;50955:2;;51011:1;51008;51001:12;50955:2;50945:76;:::o;51027:120::-;51099:23;51116:5;51099:23;:::i;:::-;51092:5;51089:34;51079:2;;51137:1;51134;51127:12;51079:2;51069:78;:::o;51153:122::-;51226:24;51244:5;51226:24;:::i;:::-;51219:5;51216:35;51206:2;;51265:1;51262;51255:12;51206:2;51196:79;:::o
Swarm Source
ipfs://1cf4b34ec6070fab736382c9d908b5f94d68fc9d98a57ffa8cb3adb459531e5e
Loading...
Loading
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 27 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.