Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 84 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Withdraw | 17637367 | 496 days ago | IN | 0 ETH | 0.00078863 | ||||
White And Trans | 17546313 | 509 days ago | IN | 0 ETH | 0.00217865 | ||||
High Run PC Mint | 17544832 | 509 days ago | IN | 0.054 ETH | 0.00228582 | ||||
Safe Transfer Fr... | 16878669 | 603 days ago | IN | 0 ETH | 0.00172577 | ||||
White And Trans | 16362722 | 675 days ago | IN | 0 ETH | 0.00231968 | ||||
Safe Transfer Fr... | 16016202 | 723 days ago | IN | 0 ETH | 0.00099455 | ||||
Withdraw | 15905528 | 739 days ago | IN | 0 ETH | 0.00034563 | ||||
Set Approval For... | 15878596 | 743 days ago | IN | 0 ETH | 0.00048011 | ||||
Safe Transfer Fr... | 15877214 | 743 days ago | IN | 0 ETH | 0.00160748 | ||||
Safe Transfer Fr... | 15877210 | 743 days ago | IN | 0 ETH | 0.00160578 | ||||
Safe Transfer Fr... | 15877200 | 743 days ago | IN | 0 ETH | 0.00126416 | ||||
Safe Transfer Fr... | 15877194 | 743 days ago | IN | 0 ETH | 0.00141118 | ||||
White And Trans | 15870820 | 744 days ago | IN | 0 ETH | 0.00623731 | ||||
Transfer From | 15869975 | 744 days ago | IN | 0 ETH | 0.00211757 | ||||
Safe Transfer Fr... | 15851170 | 747 days ago | IN | 0 ETH | 0.00103579 | ||||
Safe Transfer Fr... | 15851142 | 747 days ago | IN | 0 ETH | 0.0009598 | ||||
Safe Transfer Fr... | 15851135 | 747 days ago | IN | 0 ETH | 0.00092569 | ||||
High Run PC Mint | 15850821 | 747 days ago | IN | 0.54 ETH | 0.01208691 | ||||
Safe Transfer Fr... | 15762597 | 759 days ago | IN | 0 ETH | 0.00132338 | ||||
Safe Transfer Fr... | 15762591 | 759 days ago | IN | 0 ETH | 0.00151558 | ||||
Safe Transfer Fr... | 15762573 | 759 days ago | IN | 0 ETH | 0.001742 | ||||
Safe Transfer Fr... | 15762555 | 759 days ago | IN | 0 ETH | 0.00168039 | ||||
Withdraw | 15534976 | 791 days ago | IN | 0 ETH | 0.00048405 | ||||
Transfer From | 15491152 | 798 days ago | IN | 0 ETH | 0.0017398 | ||||
Safe Transfer Fr... | 15491130 | 798 days ago | IN | 0 ETH | 0.00248208 |
Latest 9 internal transactions
Advanced mode:
Loading...
Loading
Contract Name:
HighRunPokerClub
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-09-10 */ // File: @openzeppelin/contracts/security/ReentrancyGuard.sol // OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol) pragma solidity ^0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } // File: @openzeppelin/contracts/utils/Strings.sol // 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/Context.sol // 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/access/Ownable.sol // 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: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts (last updated v4.6.0) (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 `IERC721Receiver.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // 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/utils/introspection/ERC165.sol // 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/IERC721.sol // OpenZeppelin Contracts (last updated v4.6.0) (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`. * * 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; /** * @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 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 the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @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); } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/extensions/IERC721Enumerable.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol // 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/token/ERC721/ERC721.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/ERC721.sol) pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overridden 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 || isApprovedForAll(owner, spender) || getApproved(tokenId) == spender); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); _afterTokenTransfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); _afterTokenTransfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer from incorrect owner"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); _afterTokenTransfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits a {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC721: approve to caller"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File: @openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol // 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: contracts/HighRunPokerClub.sol //High Run Poker Club NFT /* // // // // // ###### ###### ############# ############### ############### // #### #### ###$$$$$$#### ############### ##############! // #### #### ### ### #### #### ###### // #### #### ### ### #### ###$ #### // #### #### ############ #### ###$ #### // #####$$$$$$##### ############ ###########$### #### // #####$$$$$$##### #### #### ##########$### #### // #### #### #### #### #### #### // #### #### #### #### #### #### // #### #### #### #### #### ####### // #### #### #### #### #### ##############! // ###### ###### ###### ###### ###### ############### // // NFT OWNERS ALWAYS REGISTER FOR TOURNAMENTS FOR FREE // OPENED HIGH RUN TEAM PRO // SUPPORT FOR INTERNATIONAL POKER TOURNAMENT */ pragma solidity ^0.8.0; contract HighRunPokerClub is ERC721Enumerable, ReentrancyGuard, Ownable { using Strings for uint256; string public baseURI; string public baseExtension = ".json"; uint256 public cost = 0.054 ether; uint256 public maxSupply = 10000; uint256 public maxMintAmount = 10; bool public paused = false; mapping(address => bool) public whitelisted; constructor( string memory _initBaseURI ) ERC721("High Run Poker Club", "HRPC") { setBaseURI(_initBaseURI); } // internal function _baseURI() internal view virtual override returns(string memory) { return baseURI; } // public function HighRunPCMint(uint256 _mintAmount) public payable nonReentrant{ uint256 supply = totalSupply(); require(!paused); require(_mintAmount > 0); require(_mintAmount <= maxMintAmount, "Exceeding the maximum token purchase"); require(supply + _mintAmount <= maxSupply, "Purchase exceeds the maximum supply of tokens."); require(msg.value >= cost * _mintAmount); for (uint256 i = 1; i <= _mintAmount; i++) { _safeMint(msg.sender, supply + i); } } function WhiteAndTrans(address _to, uint256 _mintAmount) public payable nonReentrant{ uint256 supply = totalSupply(); require(!paused); require(_mintAmount > 0); require(_mintAmount <= maxMintAmount, "Exceeding the maximum token purchase"); require(supply + _mintAmount <= maxSupply, "Purchase exceeds the maximum supply of tokens."); if (msg.sender != owner()) { if (whitelisted[msg.sender] != true) { require(msg.value >= cost * _mintAmount); } } for (uint256 i = 1; i <= _mintAmount; i++) { _safeMint(_to, supply + i); } } function TransForOwner(uint256 _mintAmount) public onlyOwner nonReentrant{ uint256 supply = totalSupply(); require(!paused); require(_mintAmount > 0); require(_mintAmount <= 100); require(supply + _mintAmount <= maxSupply); for (uint256 i = 1; i <= _mintAmount; i++) { _safeMint(msg.sender, supply + i); } } function walletOfOwner(address _owner) public view returns(uint256[] memory) { uint256 ownerTokenCount = balanceOf(_owner); uint256[] memory tokenIds = new uint256[](ownerTokenCount); for (uint256 i; i < ownerTokenCount; i++) { tokenIds[i] = tokenOfOwnerByIndex(_owner, i); } return tokenIds; } function tokenURI(uint256 tokenId) public view virtual override returns(string memory) { require( _exists(tokenId), "ERC721Metadata: URI query for nonexistent token" ); string memory currentBaseURI = _baseURI(); return bytes(currentBaseURI).length > 0 ? string(abi.encodePacked(currentBaseURI, tokenId.toString(), baseExtension)) : ""; } //only owner function setCost(uint256 _newCost) public onlyOwner { cost = _newCost; } function setmaxMintAmount(uint256 _newmaxMintAmount) public onlyOwner { maxMintAmount = _newmaxMintAmount; } function setBaseURI(string memory _newBaseURI) public onlyOwner { baseURI = _newBaseURI; } function setBaseExtension(string memory _newBaseExtension) public onlyOwner { baseExtension = _newBaseExtension; } function pause(bool _state) public onlyOwner { paused = _state; } function whitelistUser(address _user) public onlyOwner { whitelisted[_user] = true; } function removeWhitelistUser(address _user) public onlyOwner { whitelisted[_user] = false; } function withdraw() public payable onlyOwner nonReentrant{ (bool os, ) = payable(owner()).call { value: address(this).balance }(""); require(os); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_initBaseURI","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"HighRunPCMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"TransForOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"WhiteAndTrans","outputs":[],"stateMutability":"payable","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":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintAmount","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":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"removeWhitelistUser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseExtension","type":"string"}],"name":"setBaseExtension","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":"uint256","name":"_newmaxMintAmount","type":"uint256"}],"name":"setmaxMintAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"whitelistUser","outputs":[],"stateMutability":"nonpayable","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
60806040526040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600d90805190602001906200005192919062000339565b5066bfd8b6c1df0000600e55612710600f55600a6010556000601160006101000a81548160ff0219169083151502179055503480156200009057600080fd5b5060405162005121380380620051218339818101604052810190620000b6919062000467565b6040518060400160405280601381526020017f486967682052756e20506f6b657220436c7562000000000000000000000000008152506040518060400160405280600481526020017f485250430000000000000000000000000000000000000000000000000000000081525081600090805190602001906200013a92919062000339565b5080600190805190602001906200015392919062000339565b5050506001600a819055506200017e620001726200019660201b60201c565b6200019e60201b60201c565b6200018f816200026460201b60201c565b50620006bf565b600033905090565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620002746200019660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200029a6200030f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620002f3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002ea90620004df565b60405180910390fd5b80600c90805190602001906200030b92919062000339565b5050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b8280546200034790620005a7565b90600052602060002090601f0160209004810192826200036b5760008555620003b7565b82601f106200038657805160ff1916838001178555620003b7565b82800160010185558215620003b7579182015b82811115620003b657825182559160200191906001019062000399565b5b509050620003c69190620003ca565b5090565b5b80821115620003e5576000816000905550600101620003cb565b5090565b600062000400620003fa846200052a565b62000501565b9050828152602081018484840111156200041f576200041e62000676565b5b6200042c84828562000571565b509392505050565b600082601f8301126200044c576200044b62000671565b5b81516200045e848260208601620003e9565b91505092915050565b60006020828403121562000480576200047f62000680565b5b600082015167ffffffffffffffff811115620004a157620004a06200067b565b5b620004af8482850162000434565b91505092915050565b6000620004c760208362000560565b9150620004d48262000696565b602082019050919050565b60006020820190508181036000830152620004fa81620004b8565b9050919050565b60006200050d62000520565b90506200051b8282620005dd565b919050565b6000604051905090565b600067ffffffffffffffff82111562000548576200054762000642565b5b620005538262000685565b9050602081019050919050565b600082825260208201905092915050565b60005b838110156200059157808201518184015260208101905062000574565b83811115620005a1576000848401525b50505050565b60006002820490506001821680620005c057607f821691505b60208210811415620005d757620005d662000613565b5b50919050565b620005e88262000685565b810181811067ffffffffffffffff821117156200060a576200060962000642565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b614a5280620006cf6000396000f3fe6080604052600436106102255760003560e01c80635c975abb11610123578063a63e8aa2116100ab578063d5abeb011161006f578063d5abeb01146107da578063d936547e14610805578063da3ef23f14610842578063e985e9c51461086b578063f2fde38b146108a857610225565b8063a63e8aa214610704578063b88d4fde1461072d578063bd268efb14610756578063c668286214610772578063c87b56dd1461079d57610225565b8063715018a6116100f2578063715018a6146106455780637f00c7a61461065c5780638da5cb5b1461068557806395d89b41146106b0578063a22cb465146106db57610225565b80635c975abb146105755780636352211e146105a05780636c0360eb146105dd57806370a082311461060857610225565b80632f745c59116101b157806344a0d68a1161017557806344a0d68a146104a15780634a4c560d146104ca5780634f6ccce7146104f357806353f7444b1461053057806355f804b31461054c57610225565b80632f745c59146103cb57806330cc7ae0146104085780633ccfd60b1461043157806342842e0e1461043b578063438b63001461046457610225565b8063095ea7b3116101f8578063095ea7b3146102f857806313faede61461032157806318160ddd1461034c578063239c70ae1461037757806323b872dd146103a257610225565b806301ffc9a71461022a57806302329a291461026757806306fdde0314610290578063081812fc146102bb575b600080fd5b34801561023657600080fd5b50610251600480360381019061024c9190613589565b6108d1565b60405161025e9190613bfe565b60405180910390f35b34801561027357600080fd5b5061028e6004803603810190610289919061355c565b61094b565b005b34801561029c57600080fd5b506102a56109e4565b6040516102b29190613c19565b60405180910390f35b3480156102c757600080fd5b506102e260048036038101906102dd919061362c565b610a76565b6040516102ef9190613b75565b60405180910390f35b34801561030457600080fd5b5061031f600480360381019061031a919061351c565b610afb565b005b34801561032d57600080fd5b50610336610c13565b6040516103439190613edb565b60405180910390f35b34801561035857600080fd5b50610361610c19565b60405161036e9190613edb565b60405180910390f35b34801561038357600080fd5b5061038c610c26565b6040516103999190613edb565b60405180910390f35b3480156103ae57600080fd5b506103c960048036038101906103c49190613406565b610c2c565b005b3480156103d757600080fd5b506103f260048036038101906103ed919061351c565b610c8c565b6040516103ff9190613edb565b60405180910390f35b34801561041457600080fd5b5061042f600480360381019061042a9190613399565b610d31565b005b610439610e08565b005b34801561044757600080fd5b50610462600480360381019061045d9190613406565b610f5a565b005b34801561047057600080fd5b5061048b60048036038101906104869190613399565b610f7a565b6040516104989190613bdc565b60405180910390f35b3480156104ad57600080fd5b506104c860048036038101906104c3919061362c565b611028565b005b3480156104d657600080fd5b506104f160048036038101906104ec9190613399565b6110ae565b005b3480156104ff57600080fd5b5061051a6004803603810190610515919061362c565b611185565b6040516105279190613edb565b60405180910390f35b61054a6004803603810190610545919061351c565b6111f6565b005b34801561055857600080fd5b50610573600480360381019061056e91906135e3565b6113fe565b005b34801561058157600080fd5b5061058a611494565b6040516105979190613bfe565b60405180910390f35b3480156105ac57600080fd5b506105c760048036038101906105c2919061362c565b6114a7565b6040516105d49190613b75565b60405180910390f35b3480156105e957600080fd5b506105f2611559565b6040516105ff9190613c19565b60405180910390f35b34801561061457600080fd5b5061062f600480360381019061062a9190613399565b6115e7565b60405161063c9190613edb565b60405180910390f35b34801561065157600080fd5b5061065a61169f565b005b34801561066857600080fd5b50610683600480360381019061067e919061362c565b611727565b005b34801561069157600080fd5b5061069a6117ad565b6040516106a79190613b75565b60405180910390f35b3480156106bc57600080fd5b506106c56117d7565b6040516106d29190613c19565b60405180910390f35b3480156106e757600080fd5b5061070260048036038101906106fd91906134dc565b611869565b005b34801561071057600080fd5b5061072b6004803603810190610726919061362c565b61187f565b005b34801561073957600080fd5b50610754600480360381019061074f9190613459565b6119e7565b005b610770600480360381019061076b919061362c565b611a49565b005b34801561077e57600080fd5b50610787611bbc565b6040516107949190613c19565b60405180910390f35b3480156107a957600080fd5b506107c460048036038101906107bf919061362c565b611c4a565b6040516107d19190613c19565b60405180910390f35b3480156107e657600080fd5b506107ef611cf4565b6040516107fc9190613edb565b60405180910390f35b34801561081157600080fd5b5061082c60048036038101906108279190613399565b611cfa565b6040516108399190613bfe565b60405180910390f35b34801561084e57600080fd5b50610869600480360381019061086491906135e3565b611d1a565b005b34801561087757600080fd5b50610892600480360381019061088d91906133c6565b611db0565b60405161089f9190613bfe565b60405180910390f35b3480156108b457600080fd5b506108cf60048036038101906108ca9190613399565b611e44565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610944575061094382611f3c565b5b9050919050565b61095361201e565b73ffffffffffffffffffffffffffffffffffffffff166109716117ad565b73ffffffffffffffffffffffffffffffffffffffff16146109c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109be90613dfb565b60405180910390fd5b80601160006101000a81548160ff02191690831515021790555050565b6060600080546109f3906141e4565b80601f0160208091040260200160405190810160405280929190818152602001828054610a1f906141e4565b8015610a6c5780601f10610a4157610100808354040283529160200191610a6c565b820191906000526020600020905b815481529060010190602001808311610a4f57829003601f168201915b5050505050905090565b6000610a8182612026565b610ac0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab790613ddb565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b06826114a7565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6e90613e3b565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b9661201e565b73ffffffffffffffffffffffffffffffffffffffff161480610bc55750610bc481610bbf61201e565b611db0565b5b610c04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bfb90613d3b565b60405180910390fd5b610c0e8383612092565b505050565b600e5481565b6000600880549050905090565b60105481565b610c3d610c3761201e565b8261214b565b610c7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7390613e5b565b60405180910390fd5b610c87838383612229565b505050565b6000610c97836115e7565b8210610cd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ccf90613c3b565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610d3961201e565b73ffffffffffffffffffffffffffffffffffffffff16610d576117ad565b73ffffffffffffffffffffffffffffffffffffffff1614610dad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da490613dfb565b60405180910390fd5b6000601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b610e1061201e565b73ffffffffffffffffffffffffffffffffffffffff16610e2e6117ad565b73ffffffffffffffffffffffffffffffffffffffff1614610e84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7b90613dfb565b60405180910390fd5b6002600a541415610eca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec190613ebb565b60405180910390fd5b6002600a819055506000610edc6117ad565b73ffffffffffffffffffffffffffffffffffffffff1647604051610eff90613b60565b60006040518083038185875af1925050503d8060008114610f3c576040519150601f19603f3d011682016040523d82523d6000602084013e610f41565b606091505b5050905080610f4f57600080fd5b506001600a81905550565b610f75838383604051806020016040528060008152506119e7565b505050565b60606000610f87836115e7565b905060008167ffffffffffffffff811115610fa557610fa46143ac565b5b604051908082528060200260200182016040528015610fd35781602001602082028036833780820191505090505b50905060005b8281101561101d57610feb8582610c8c565b828281518110610ffe57610ffd61437d565b5b602002602001018181525050808061101590614247565b915050610fd9565b508092505050919050565b61103061201e565b73ffffffffffffffffffffffffffffffffffffffff1661104e6117ad565b73ffffffffffffffffffffffffffffffffffffffff16146110a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109b90613dfb565b60405180910390fd5b80600e8190555050565b6110b661201e565b73ffffffffffffffffffffffffffffffffffffffff166110d46117ad565b73ffffffffffffffffffffffffffffffffffffffff161461112a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112190613dfb565b60405180910390fd5b6001601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600061118f610c19565b82106111d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c790613e7b565b60405180910390fd5b600882815481106111e4576111e361437d565b5b90600052602060002001549050919050565b6002600a54141561123c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123390613ebb565b60405180910390fd5b6002600a81905550600061124e610c19565b9050601160009054906101000a900460ff161561126a57600080fd5b6000821161127757600080fd5b6010548211156112bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b390613e9b565b60405180910390fd5b600f5482826112cb9190614019565b111561130c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130390613d9b565b60405180910390fd5b6113146117ad565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146113ba5760011515601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515146113b95781600e546113ac91906140a0565b3410156113b857600080fd5b5b5b6000600190505b8281116113f0576113dd8482846113d89190614019565b612490565b80806113e890614247565b9150506113c1565b50506001600a819055505050565b61140661201e565b73ffffffffffffffffffffffffffffffffffffffff166114246117ad565b73ffffffffffffffffffffffffffffffffffffffff161461147a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147190613dfb565b60405180910390fd5b80600c90805190602001906114909291906131ad565b5050565b601160009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611550576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154790613d7b565b60405180910390fd5b80915050919050565b600c8054611566906141e4565b80601f0160208091040260200160405190810160405280929190818152602001828054611592906141e4565b80156115df5780601f106115b4576101008083540402835291602001916115df565b820191906000526020600020905b8154815290600101906020018083116115c257829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611658576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164f90613d5b565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6116a761201e565b73ffffffffffffffffffffffffffffffffffffffff166116c56117ad565b73ffffffffffffffffffffffffffffffffffffffff161461171b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171290613dfb565b60405180910390fd5b61172560006124ae565b565b61172f61201e565b73ffffffffffffffffffffffffffffffffffffffff1661174d6117ad565b73ffffffffffffffffffffffffffffffffffffffff16146117a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179a90613dfb565b60405180910390fd5b8060108190555050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546117e6906141e4565b80601f0160208091040260200160405190810160405280929190818152602001828054611812906141e4565b801561185f5780601f106118345761010080835404028352916020019161185f565b820191906000526020600020905b81548152906001019060200180831161184257829003601f168201915b5050505050905090565b61187b61187461201e565b8383612574565b5050565b61188761201e565b73ffffffffffffffffffffffffffffffffffffffff166118a56117ad565b73ffffffffffffffffffffffffffffffffffffffff16146118fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f290613dfb565b60405180910390fd5b6002600a541415611941576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193890613ebb565b60405180910390fd5b6002600a819055506000611953610c19565b9050601160009054906101000a900460ff161561196f57600080fd5b6000821161197c57600080fd5b606482111561198a57600080fd5b600f5482826119999190614019565b11156119a457600080fd5b6000600190505b8281116119da576119c73382846119c29190614019565b612490565b80806119d290614247565b9150506119ab565b50506001600a8190555050565b6119f86119f261201e565b8361214b565b611a37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2e90613e5b565b60405180910390fd5b611a43848484846126e1565b50505050565b6002600a541415611a8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8690613ebb565b60405180910390fd5b6002600a819055506000611aa1610c19565b9050601160009054906101000a900460ff1615611abd57600080fd5b60008211611aca57600080fd5b601054821115611b0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0690613e9b565b60405180910390fd5b600f548282611b1e9190614019565b1115611b5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5690613d9b565b60405180910390fd5b81600e54611b6d91906140a0565b341015611b7957600080fd5b6000600190505b828111611baf57611b9c338284611b979190614019565b612490565b8080611ba790614247565b915050611b80565b50506001600a8190555050565b600d8054611bc9906141e4565b80601f0160208091040260200160405190810160405280929190818152602001828054611bf5906141e4565b8015611c425780601f10611c1757610100808354040283529160200191611c42565b820191906000526020600020905b815481529060010190602001808311611c2557829003601f168201915b505050505081565b6060611c5582612026565b611c94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8b90613e1b565b60405180910390fd5b6000611c9e61273d565b90506000815111611cbe5760405180602001604052806000815250611cec565b80611cc8846127cf565b600d604051602001611cdc93929190613b2f565b6040516020818303038152906040525b915050919050565b600f5481565b60126020528060005260406000206000915054906101000a900460ff1681565b611d2261201e565b73ffffffffffffffffffffffffffffffffffffffff16611d406117ad565b73ffffffffffffffffffffffffffffffffffffffff1614611d96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8d90613dfb565b60405180910390fd5b80600d9080519060200190611dac9291906131ad565b5050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611e4c61201e565b73ffffffffffffffffffffffffffffffffffffffff16611e6a6117ad565b73ffffffffffffffffffffffffffffffffffffffff1614611ec0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb790613dfb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611f30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2790613c7b565b60405180910390fd5b611f39816124ae565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061200757507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612017575061201682612930565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16612105836114a7565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061215682612026565b612195576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218c90613d1b565b60405180910390fd5b60006121a0836114a7565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806121e257506121e18185611db0565b5b8061222057508373ffffffffffffffffffffffffffffffffffffffff1661220884610a76565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612249826114a7565b73ffffffffffffffffffffffffffffffffffffffff161461229f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229690613c9b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561230f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230690613cdb565b60405180910390fd5b61231a83838361299a565b612325600082612092565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461237591906140fa565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546123cc9190614019565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461248b838383612aae565b505050565b6124aa828260405180602001604052806000815250612ab3565b5050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156125e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125da90613cfb565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516126d49190613bfe565b60405180910390a3505050565b6126ec848484612229565b6126f884848484612b0e565b612737576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161272e90613c5b565b60405180910390fd5b50505050565b6060600c805461274c906141e4565b80601f0160208091040260200160405190810160405280929190818152602001828054612778906141e4565b80156127c55780601f1061279a576101008083540402835291602001916127c5565b820191906000526020600020905b8154815290600101906020018083116127a857829003601f168201915b5050505050905090565b60606000821415612817576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061292b565b600082905060005b6000821461284957808061283290614247565b915050600a82612842919061406f565b915061281f565b60008167ffffffffffffffff811115612865576128646143ac565b5b6040519080825280601f01601f1916602001820160405280156128975781602001600182028036833780820191505090505b5090505b60008514612924576001826128b091906140fa565b9150600a856128bf9190614290565b60306128cb9190614019565b60f81b8183815181106128e1576128e061437d565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561291d919061406f565b945061289b565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6129a5838383612ca5565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156129e8576129e381612caa565b612a27565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612a2657612a258382612cf3565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612a6a57612a6581612e60565b612aa9565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612aa857612aa78282612f31565b5b5b505050565b505050565b612abd8383612fb0565b612aca6000848484612b0e565b612b09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b0090613c5b565b60405180910390fd5b505050565b6000612b2f8473ffffffffffffffffffffffffffffffffffffffff1661318a565b15612c98578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612b5861201e565b8786866040518563ffffffff1660e01b8152600401612b7a9493929190613b90565b602060405180830381600087803b158015612b9457600080fd5b505af1925050508015612bc557506040513d601f19601f82011682018060405250810190612bc291906135b6565b60015b612c48573d8060008114612bf5576040519150601f19603f3d011682016040523d82523d6000602084013e612bfa565b606091505b50600081511415612c40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c3790613c5b565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612c9d565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612d00846115e7565b612d0a91906140fa565b9050600060076000848152602001908152602001600020549050818114612def576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612e7491906140fa565b9050600060096000848152602001908152602001600020549050600060088381548110612ea457612ea361437d565b5b906000526020600020015490508060088381548110612ec657612ec561437d565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612f1557612f1461434e565b5b6001900381819060005260206000200160009055905550505050565b6000612f3c836115e7565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613020576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161301790613dbb565b60405180910390fd5b61302981612026565b15613069576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161306090613cbb565b60405180910390fd5b6130756000838361299a565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546130c59190614019565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461318660008383612aae565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b8280546131b9906141e4565b90600052602060002090601f0160209004810192826131db5760008555613222565b82601f106131f457805160ff1916838001178555613222565b82800160010185558215613222579182015b82811115613221578251825591602001919060010190613206565b5b50905061322f9190613233565b5090565b5b8082111561324c576000816000905550600101613234565b5090565b600061326361325e84613f1b565b613ef6565b90508281526020810184848401111561327f5761327e6143e0565b5b61328a8482856141a2565b509392505050565b60006132a56132a084613f4c565b613ef6565b9050828152602081018484840111156132c1576132c06143e0565b5b6132cc8482856141a2565b509392505050565b6000813590506132e3816149c0565b92915050565b6000813590506132f8816149d7565b92915050565b60008135905061330d816149ee565b92915050565b600081519050613322816149ee565b92915050565b600082601f83011261333d5761333c6143db565b5b813561334d848260208601613250565b91505092915050565b600082601f83011261336b5761336a6143db565b5b813561337b848260208601613292565b91505092915050565b60008135905061339381614a05565b92915050565b6000602082840312156133af576133ae6143ea565b5b60006133bd848285016132d4565b91505092915050565b600080604083850312156133dd576133dc6143ea565b5b60006133eb858286016132d4565b92505060206133fc858286016132d4565b9150509250929050565b60008060006060848603121561341f5761341e6143ea565b5b600061342d868287016132d4565b935050602061343e868287016132d4565b925050604061344f86828701613384565b9150509250925092565b60008060008060808587031215613473576134726143ea565b5b6000613481878288016132d4565b9450506020613492878288016132d4565b93505060406134a387828801613384565b925050606085013567ffffffffffffffff8111156134c4576134c36143e5565b5b6134d087828801613328565b91505092959194509250565b600080604083850312156134f3576134f26143ea565b5b6000613501858286016132d4565b9250506020613512858286016132e9565b9150509250929050565b60008060408385031215613533576135326143ea565b5b6000613541858286016132d4565b925050602061355285828601613384565b9150509250929050565b600060208284031215613572576135716143ea565b5b6000613580848285016132e9565b91505092915050565b60006020828403121561359f5761359e6143ea565b5b60006135ad848285016132fe565b91505092915050565b6000602082840312156135cc576135cb6143ea565b5b60006135da84828501613313565b91505092915050565b6000602082840312156135f9576135f86143ea565b5b600082013567ffffffffffffffff811115613617576136166143e5565b5b61362384828501613356565b91505092915050565b600060208284031215613642576136416143ea565b5b600061365084828501613384565b91505092915050565b60006136658383613b11565b60208301905092915050565b61367a8161412e565b82525050565b600061368b82613fa2565b6136958185613fd0565b93506136a083613f7d565b8060005b838110156136d15781516136b88882613659565b97506136c383613fc3565b9250506001810190506136a4565b5085935050505092915050565b6136e781614140565b82525050565b60006136f882613fad565b6137028185613fe1565b93506137128185602086016141b1565b61371b816143ef565b840191505092915050565b600061373182613fb8565b61373b8185613ffd565b935061374b8185602086016141b1565b613754816143ef565b840191505092915050565b600061376a82613fb8565b613774818561400e565b93506137848185602086016141b1565b80840191505092915050565b6000815461379d816141e4565b6137a7818661400e565b945060018216600081146137c257600181146137d357613806565b60ff19831686528186019350613806565b6137dc85613f8d565b60005b838110156137fe578154818901526001820191506020810190506137df565b838801955050505b50505092915050565b600061381c602b83613ffd565b915061382782614400565b604082019050919050565b600061383f603283613ffd565b915061384a8261444f565b604082019050919050565b6000613862602683613ffd565b915061386d8261449e565b604082019050919050565b6000613885602583613ffd565b9150613890826144ed565b604082019050919050565b60006138a8601c83613ffd565b91506138b38261453c565b602082019050919050565b60006138cb602483613ffd565b91506138d682614565565b604082019050919050565b60006138ee601983613ffd565b91506138f9826145b4565b602082019050919050565b6000613911602c83613ffd565b915061391c826145dd565b604082019050919050565b6000613934603883613ffd565b915061393f8261462c565b604082019050919050565b6000613957602a83613ffd565b91506139628261467b565b604082019050919050565b600061397a602983613ffd565b9150613985826146ca565b604082019050919050565b600061399d602e83613ffd565b91506139a882614719565b604082019050919050565b60006139c0602083613ffd565b91506139cb82614768565b602082019050919050565b60006139e3602c83613ffd565b91506139ee82614791565b604082019050919050565b6000613a06602083613ffd565b9150613a11826147e0565b602082019050919050565b6000613a29602f83613ffd565b9150613a3482614809565b604082019050919050565b6000613a4c602183613ffd565b9150613a5782614858565b604082019050919050565b6000613a6f600083613ff2565b9150613a7a826148a7565b600082019050919050565b6000613a92603183613ffd565b9150613a9d826148aa565b604082019050919050565b6000613ab5602c83613ffd565b9150613ac0826148f9565b604082019050919050565b6000613ad8602483613ffd565b9150613ae382614948565b604082019050919050565b6000613afb601f83613ffd565b9150613b0682614997565b602082019050919050565b613b1a81614198565b82525050565b613b2981614198565b82525050565b6000613b3b828661375f565b9150613b47828561375f565b9150613b538284613790565b9150819050949350505050565b6000613b6b82613a62565b9150819050919050565b6000602082019050613b8a6000830184613671565b92915050565b6000608082019050613ba56000830187613671565b613bb26020830186613671565b613bbf6040830185613b20565b8181036060830152613bd181846136ed565b905095945050505050565b60006020820190508181036000830152613bf68184613680565b905092915050565b6000602082019050613c1360008301846136de565b92915050565b60006020820190508181036000830152613c338184613726565b905092915050565b60006020820190508181036000830152613c548161380f565b9050919050565b60006020820190508181036000830152613c7481613832565b9050919050565b60006020820190508181036000830152613c9481613855565b9050919050565b60006020820190508181036000830152613cb481613878565b9050919050565b60006020820190508181036000830152613cd48161389b565b9050919050565b60006020820190508181036000830152613cf4816138be565b9050919050565b60006020820190508181036000830152613d14816138e1565b9050919050565b60006020820190508181036000830152613d3481613904565b9050919050565b60006020820190508181036000830152613d5481613927565b9050919050565b60006020820190508181036000830152613d748161394a565b9050919050565b60006020820190508181036000830152613d948161396d565b9050919050565b60006020820190508181036000830152613db481613990565b9050919050565b60006020820190508181036000830152613dd4816139b3565b9050919050565b60006020820190508181036000830152613df4816139d6565b9050919050565b60006020820190508181036000830152613e14816139f9565b9050919050565b60006020820190508181036000830152613e3481613a1c565b9050919050565b60006020820190508181036000830152613e5481613a3f565b9050919050565b60006020820190508181036000830152613e7481613a85565b9050919050565b60006020820190508181036000830152613e9481613aa8565b9050919050565b60006020820190508181036000830152613eb481613acb565b9050919050565b60006020820190508181036000830152613ed481613aee565b9050919050565b6000602082019050613ef06000830184613b20565b92915050565b6000613f00613f11565b9050613f0c8282614216565b919050565b6000604051905090565b600067ffffffffffffffff821115613f3657613f356143ac565b5b613f3f826143ef565b9050602081019050919050565b600067ffffffffffffffff821115613f6757613f666143ac565b5b613f70826143ef565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061402482614198565b915061402f83614198565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614064576140636142c1565b5b828201905092915050565b600061407a82614198565b915061408583614198565b925082614095576140946142f0565b5b828204905092915050565b60006140ab82614198565b91506140b683614198565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156140ef576140ee6142c1565b5b828202905092915050565b600061410582614198565b915061411083614198565b925082821015614123576141226142c1565b5b828203905092915050565b600061413982614178565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156141cf5780820151818401526020810190506141b4565b838111156141de576000848401525b50505050565b600060028204905060018216806141fc57607f821691505b602082108114156142105761420f61431f565b5b50919050565b61421f826143ef565b810181811067ffffffffffffffff8211171561423e5761423d6143ac565b5b80604052505050565b600061425282614198565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614285576142846142c1565b5b600182019050919050565b600061429b82614198565b91506142a683614198565b9250826142b6576142b56142f0565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f5075726368617365206578636565647320746865206d6178696d756d2073757060008201527f706c79206f6620746f6b656e732e000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f457863656564696e6720746865206d6178696d756d20746f6b656e207075726360008201527f6861736500000000000000000000000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6149c98161412e565b81146149d457600080fd5b50565b6149e081614140565b81146149eb57600080fd5b50565b6149f78161414c565b8114614a0257600080fd5b50565b614a0e81614198565b8114614a1957600080fd5b5056fea264697066735822122035909ab08e194c3aaf7c73a371b0ab1d3d313b5491a3391cfd59c1e25833924c64736f6c6343000807003300000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d5054593671726b4b5a6173576e446462346659576f32753372694c6531674d344c4455565474567039746d4a2f00000000000000000000
Deployed Bytecode
0x6080604052600436106102255760003560e01c80635c975abb11610123578063a63e8aa2116100ab578063d5abeb011161006f578063d5abeb01146107da578063d936547e14610805578063da3ef23f14610842578063e985e9c51461086b578063f2fde38b146108a857610225565b8063a63e8aa214610704578063b88d4fde1461072d578063bd268efb14610756578063c668286214610772578063c87b56dd1461079d57610225565b8063715018a6116100f2578063715018a6146106455780637f00c7a61461065c5780638da5cb5b1461068557806395d89b41146106b0578063a22cb465146106db57610225565b80635c975abb146105755780636352211e146105a05780636c0360eb146105dd57806370a082311461060857610225565b80632f745c59116101b157806344a0d68a1161017557806344a0d68a146104a15780634a4c560d146104ca5780634f6ccce7146104f357806353f7444b1461053057806355f804b31461054c57610225565b80632f745c59146103cb57806330cc7ae0146104085780633ccfd60b1461043157806342842e0e1461043b578063438b63001461046457610225565b8063095ea7b3116101f8578063095ea7b3146102f857806313faede61461032157806318160ddd1461034c578063239c70ae1461037757806323b872dd146103a257610225565b806301ffc9a71461022a57806302329a291461026757806306fdde0314610290578063081812fc146102bb575b600080fd5b34801561023657600080fd5b50610251600480360381019061024c9190613589565b6108d1565b60405161025e9190613bfe565b60405180910390f35b34801561027357600080fd5b5061028e6004803603810190610289919061355c565b61094b565b005b34801561029c57600080fd5b506102a56109e4565b6040516102b29190613c19565b60405180910390f35b3480156102c757600080fd5b506102e260048036038101906102dd919061362c565b610a76565b6040516102ef9190613b75565b60405180910390f35b34801561030457600080fd5b5061031f600480360381019061031a919061351c565b610afb565b005b34801561032d57600080fd5b50610336610c13565b6040516103439190613edb565b60405180910390f35b34801561035857600080fd5b50610361610c19565b60405161036e9190613edb565b60405180910390f35b34801561038357600080fd5b5061038c610c26565b6040516103999190613edb565b60405180910390f35b3480156103ae57600080fd5b506103c960048036038101906103c49190613406565b610c2c565b005b3480156103d757600080fd5b506103f260048036038101906103ed919061351c565b610c8c565b6040516103ff9190613edb565b60405180910390f35b34801561041457600080fd5b5061042f600480360381019061042a9190613399565b610d31565b005b610439610e08565b005b34801561044757600080fd5b50610462600480360381019061045d9190613406565b610f5a565b005b34801561047057600080fd5b5061048b60048036038101906104869190613399565b610f7a565b6040516104989190613bdc565b60405180910390f35b3480156104ad57600080fd5b506104c860048036038101906104c3919061362c565b611028565b005b3480156104d657600080fd5b506104f160048036038101906104ec9190613399565b6110ae565b005b3480156104ff57600080fd5b5061051a6004803603810190610515919061362c565b611185565b6040516105279190613edb565b60405180910390f35b61054a6004803603810190610545919061351c565b6111f6565b005b34801561055857600080fd5b50610573600480360381019061056e91906135e3565b6113fe565b005b34801561058157600080fd5b5061058a611494565b6040516105979190613bfe565b60405180910390f35b3480156105ac57600080fd5b506105c760048036038101906105c2919061362c565b6114a7565b6040516105d49190613b75565b60405180910390f35b3480156105e957600080fd5b506105f2611559565b6040516105ff9190613c19565b60405180910390f35b34801561061457600080fd5b5061062f600480360381019061062a9190613399565b6115e7565b60405161063c9190613edb565b60405180910390f35b34801561065157600080fd5b5061065a61169f565b005b34801561066857600080fd5b50610683600480360381019061067e919061362c565b611727565b005b34801561069157600080fd5b5061069a6117ad565b6040516106a79190613b75565b60405180910390f35b3480156106bc57600080fd5b506106c56117d7565b6040516106d29190613c19565b60405180910390f35b3480156106e757600080fd5b5061070260048036038101906106fd91906134dc565b611869565b005b34801561071057600080fd5b5061072b6004803603810190610726919061362c565b61187f565b005b34801561073957600080fd5b50610754600480360381019061074f9190613459565b6119e7565b005b610770600480360381019061076b919061362c565b611a49565b005b34801561077e57600080fd5b50610787611bbc565b6040516107949190613c19565b60405180910390f35b3480156107a957600080fd5b506107c460048036038101906107bf919061362c565b611c4a565b6040516107d19190613c19565b60405180910390f35b3480156107e657600080fd5b506107ef611cf4565b6040516107fc9190613edb565b60405180910390f35b34801561081157600080fd5b5061082c60048036038101906108279190613399565b611cfa565b6040516108399190613bfe565b60405180910390f35b34801561084e57600080fd5b50610869600480360381019061086491906135e3565b611d1a565b005b34801561087757600080fd5b50610892600480360381019061088d91906133c6565b611db0565b60405161089f9190613bfe565b60405180910390f35b3480156108b457600080fd5b506108cf60048036038101906108ca9190613399565b611e44565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610944575061094382611f3c565b5b9050919050565b61095361201e565b73ffffffffffffffffffffffffffffffffffffffff166109716117ad565b73ffffffffffffffffffffffffffffffffffffffff16146109c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109be90613dfb565b60405180910390fd5b80601160006101000a81548160ff02191690831515021790555050565b6060600080546109f3906141e4565b80601f0160208091040260200160405190810160405280929190818152602001828054610a1f906141e4565b8015610a6c5780601f10610a4157610100808354040283529160200191610a6c565b820191906000526020600020905b815481529060010190602001808311610a4f57829003601f168201915b5050505050905090565b6000610a8182612026565b610ac0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab790613ddb565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b06826114a7565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6e90613e3b565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b9661201e565b73ffffffffffffffffffffffffffffffffffffffff161480610bc55750610bc481610bbf61201e565b611db0565b5b610c04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bfb90613d3b565b60405180910390fd5b610c0e8383612092565b505050565b600e5481565b6000600880549050905090565b60105481565b610c3d610c3761201e565b8261214b565b610c7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7390613e5b565b60405180910390fd5b610c87838383612229565b505050565b6000610c97836115e7565b8210610cd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ccf90613c3b565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610d3961201e565b73ffffffffffffffffffffffffffffffffffffffff16610d576117ad565b73ffffffffffffffffffffffffffffffffffffffff1614610dad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da490613dfb565b60405180910390fd5b6000601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b610e1061201e565b73ffffffffffffffffffffffffffffffffffffffff16610e2e6117ad565b73ffffffffffffffffffffffffffffffffffffffff1614610e84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7b90613dfb565b60405180910390fd5b6002600a541415610eca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec190613ebb565b60405180910390fd5b6002600a819055506000610edc6117ad565b73ffffffffffffffffffffffffffffffffffffffff1647604051610eff90613b60565b60006040518083038185875af1925050503d8060008114610f3c576040519150601f19603f3d011682016040523d82523d6000602084013e610f41565b606091505b5050905080610f4f57600080fd5b506001600a81905550565b610f75838383604051806020016040528060008152506119e7565b505050565b60606000610f87836115e7565b905060008167ffffffffffffffff811115610fa557610fa46143ac565b5b604051908082528060200260200182016040528015610fd35781602001602082028036833780820191505090505b50905060005b8281101561101d57610feb8582610c8c565b828281518110610ffe57610ffd61437d565b5b602002602001018181525050808061101590614247565b915050610fd9565b508092505050919050565b61103061201e565b73ffffffffffffffffffffffffffffffffffffffff1661104e6117ad565b73ffffffffffffffffffffffffffffffffffffffff16146110a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109b90613dfb565b60405180910390fd5b80600e8190555050565b6110b661201e565b73ffffffffffffffffffffffffffffffffffffffff166110d46117ad565b73ffffffffffffffffffffffffffffffffffffffff161461112a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112190613dfb565b60405180910390fd5b6001601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600061118f610c19565b82106111d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c790613e7b565b60405180910390fd5b600882815481106111e4576111e361437d565b5b90600052602060002001549050919050565b6002600a54141561123c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123390613ebb565b60405180910390fd5b6002600a81905550600061124e610c19565b9050601160009054906101000a900460ff161561126a57600080fd5b6000821161127757600080fd5b6010548211156112bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b390613e9b565b60405180910390fd5b600f5482826112cb9190614019565b111561130c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130390613d9b565b60405180910390fd5b6113146117ad565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146113ba5760011515601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515146113b95781600e546113ac91906140a0565b3410156113b857600080fd5b5b5b6000600190505b8281116113f0576113dd8482846113d89190614019565b612490565b80806113e890614247565b9150506113c1565b50506001600a819055505050565b61140661201e565b73ffffffffffffffffffffffffffffffffffffffff166114246117ad565b73ffffffffffffffffffffffffffffffffffffffff161461147a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147190613dfb565b60405180910390fd5b80600c90805190602001906114909291906131ad565b5050565b601160009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611550576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154790613d7b565b60405180910390fd5b80915050919050565b600c8054611566906141e4565b80601f0160208091040260200160405190810160405280929190818152602001828054611592906141e4565b80156115df5780601f106115b4576101008083540402835291602001916115df565b820191906000526020600020905b8154815290600101906020018083116115c257829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611658576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164f90613d5b565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6116a761201e565b73ffffffffffffffffffffffffffffffffffffffff166116c56117ad565b73ffffffffffffffffffffffffffffffffffffffff161461171b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171290613dfb565b60405180910390fd5b61172560006124ae565b565b61172f61201e565b73ffffffffffffffffffffffffffffffffffffffff1661174d6117ad565b73ffffffffffffffffffffffffffffffffffffffff16146117a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179a90613dfb565b60405180910390fd5b8060108190555050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546117e6906141e4565b80601f0160208091040260200160405190810160405280929190818152602001828054611812906141e4565b801561185f5780601f106118345761010080835404028352916020019161185f565b820191906000526020600020905b81548152906001019060200180831161184257829003601f168201915b5050505050905090565b61187b61187461201e565b8383612574565b5050565b61188761201e565b73ffffffffffffffffffffffffffffffffffffffff166118a56117ad565b73ffffffffffffffffffffffffffffffffffffffff16146118fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f290613dfb565b60405180910390fd5b6002600a541415611941576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193890613ebb565b60405180910390fd5b6002600a819055506000611953610c19565b9050601160009054906101000a900460ff161561196f57600080fd5b6000821161197c57600080fd5b606482111561198a57600080fd5b600f5482826119999190614019565b11156119a457600080fd5b6000600190505b8281116119da576119c73382846119c29190614019565b612490565b80806119d290614247565b9150506119ab565b50506001600a8190555050565b6119f86119f261201e565b8361214b565b611a37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2e90613e5b565b60405180910390fd5b611a43848484846126e1565b50505050565b6002600a541415611a8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8690613ebb565b60405180910390fd5b6002600a819055506000611aa1610c19565b9050601160009054906101000a900460ff1615611abd57600080fd5b60008211611aca57600080fd5b601054821115611b0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0690613e9b565b60405180910390fd5b600f548282611b1e9190614019565b1115611b5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5690613d9b565b60405180910390fd5b81600e54611b6d91906140a0565b341015611b7957600080fd5b6000600190505b828111611baf57611b9c338284611b979190614019565b612490565b8080611ba790614247565b915050611b80565b50506001600a8190555050565b600d8054611bc9906141e4565b80601f0160208091040260200160405190810160405280929190818152602001828054611bf5906141e4565b8015611c425780601f10611c1757610100808354040283529160200191611c42565b820191906000526020600020905b815481529060010190602001808311611c2557829003601f168201915b505050505081565b6060611c5582612026565b611c94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8b90613e1b565b60405180910390fd5b6000611c9e61273d565b90506000815111611cbe5760405180602001604052806000815250611cec565b80611cc8846127cf565b600d604051602001611cdc93929190613b2f565b6040516020818303038152906040525b915050919050565b600f5481565b60126020528060005260406000206000915054906101000a900460ff1681565b611d2261201e565b73ffffffffffffffffffffffffffffffffffffffff16611d406117ad565b73ffffffffffffffffffffffffffffffffffffffff1614611d96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8d90613dfb565b60405180910390fd5b80600d9080519060200190611dac9291906131ad565b5050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611e4c61201e565b73ffffffffffffffffffffffffffffffffffffffff16611e6a6117ad565b73ffffffffffffffffffffffffffffffffffffffff1614611ec0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb790613dfb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611f30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2790613c7b565b60405180910390fd5b611f39816124ae565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061200757507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612017575061201682612930565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16612105836114a7565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061215682612026565b612195576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218c90613d1b565b60405180910390fd5b60006121a0836114a7565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806121e257506121e18185611db0565b5b8061222057508373ffffffffffffffffffffffffffffffffffffffff1661220884610a76565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612249826114a7565b73ffffffffffffffffffffffffffffffffffffffff161461229f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229690613c9b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561230f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230690613cdb565b60405180910390fd5b61231a83838361299a565b612325600082612092565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461237591906140fa565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546123cc9190614019565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461248b838383612aae565b505050565b6124aa828260405180602001604052806000815250612ab3565b5050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156125e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125da90613cfb565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516126d49190613bfe565b60405180910390a3505050565b6126ec848484612229565b6126f884848484612b0e565b612737576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161272e90613c5b565b60405180910390fd5b50505050565b6060600c805461274c906141e4565b80601f0160208091040260200160405190810160405280929190818152602001828054612778906141e4565b80156127c55780601f1061279a576101008083540402835291602001916127c5565b820191906000526020600020905b8154815290600101906020018083116127a857829003601f168201915b5050505050905090565b60606000821415612817576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061292b565b600082905060005b6000821461284957808061283290614247565b915050600a82612842919061406f565b915061281f565b60008167ffffffffffffffff811115612865576128646143ac565b5b6040519080825280601f01601f1916602001820160405280156128975781602001600182028036833780820191505090505b5090505b60008514612924576001826128b091906140fa565b9150600a856128bf9190614290565b60306128cb9190614019565b60f81b8183815181106128e1576128e061437d565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561291d919061406f565b945061289b565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6129a5838383612ca5565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156129e8576129e381612caa565b612a27565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612a2657612a258382612cf3565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612a6a57612a6581612e60565b612aa9565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612aa857612aa78282612f31565b5b5b505050565b505050565b612abd8383612fb0565b612aca6000848484612b0e565b612b09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b0090613c5b565b60405180910390fd5b505050565b6000612b2f8473ffffffffffffffffffffffffffffffffffffffff1661318a565b15612c98578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612b5861201e565b8786866040518563ffffffff1660e01b8152600401612b7a9493929190613b90565b602060405180830381600087803b158015612b9457600080fd5b505af1925050508015612bc557506040513d601f19601f82011682018060405250810190612bc291906135b6565b60015b612c48573d8060008114612bf5576040519150601f19603f3d011682016040523d82523d6000602084013e612bfa565b606091505b50600081511415612c40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c3790613c5b565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612c9d565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612d00846115e7565b612d0a91906140fa565b9050600060076000848152602001908152602001600020549050818114612def576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612e7491906140fa565b9050600060096000848152602001908152602001600020549050600060088381548110612ea457612ea361437d565b5b906000526020600020015490508060088381548110612ec657612ec561437d565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612f1557612f1461434e565b5b6001900381819060005260206000200160009055905550505050565b6000612f3c836115e7565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613020576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161301790613dbb565b60405180910390fd5b61302981612026565b15613069576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161306090613cbb565b60405180910390fd5b6130756000838361299a565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546130c59190614019565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461318660008383612aae565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b8280546131b9906141e4565b90600052602060002090601f0160209004810192826131db5760008555613222565b82601f106131f457805160ff1916838001178555613222565b82800160010185558215613222579182015b82811115613221578251825591602001919060010190613206565b5b50905061322f9190613233565b5090565b5b8082111561324c576000816000905550600101613234565b5090565b600061326361325e84613f1b565b613ef6565b90508281526020810184848401111561327f5761327e6143e0565b5b61328a8482856141a2565b509392505050565b60006132a56132a084613f4c565b613ef6565b9050828152602081018484840111156132c1576132c06143e0565b5b6132cc8482856141a2565b509392505050565b6000813590506132e3816149c0565b92915050565b6000813590506132f8816149d7565b92915050565b60008135905061330d816149ee565b92915050565b600081519050613322816149ee565b92915050565b600082601f83011261333d5761333c6143db565b5b813561334d848260208601613250565b91505092915050565b600082601f83011261336b5761336a6143db565b5b813561337b848260208601613292565b91505092915050565b60008135905061339381614a05565b92915050565b6000602082840312156133af576133ae6143ea565b5b60006133bd848285016132d4565b91505092915050565b600080604083850312156133dd576133dc6143ea565b5b60006133eb858286016132d4565b92505060206133fc858286016132d4565b9150509250929050565b60008060006060848603121561341f5761341e6143ea565b5b600061342d868287016132d4565b935050602061343e868287016132d4565b925050604061344f86828701613384565b9150509250925092565b60008060008060808587031215613473576134726143ea565b5b6000613481878288016132d4565b9450506020613492878288016132d4565b93505060406134a387828801613384565b925050606085013567ffffffffffffffff8111156134c4576134c36143e5565b5b6134d087828801613328565b91505092959194509250565b600080604083850312156134f3576134f26143ea565b5b6000613501858286016132d4565b9250506020613512858286016132e9565b9150509250929050565b60008060408385031215613533576135326143ea565b5b6000613541858286016132d4565b925050602061355285828601613384565b9150509250929050565b600060208284031215613572576135716143ea565b5b6000613580848285016132e9565b91505092915050565b60006020828403121561359f5761359e6143ea565b5b60006135ad848285016132fe565b91505092915050565b6000602082840312156135cc576135cb6143ea565b5b60006135da84828501613313565b91505092915050565b6000602082840312156135f9576135f86143ea565b5b600082013567ffffffffffffffff811115613617576136166143e5565b5b61362384828501613356565b91505092915050565b600060208284031215613642576136416143ea565b5b600061365084828501613384565b91505092915050565b60006136658383613b11565b60208301905092915050565b61367a8161412e565b82525050565b600061368b82613fa2565b6136958185613fd0565b93506136a083613f7d565b8060005b838110156136d15781516136b88882613659565b97506136c383613fc3565b9250506001810190506136a4565b5085935050505092915050565b6136e781614140565b82525050565b60006136f882613fad565b6137028185613fe1565b93506137128185602086016141b1565b61371b816143ef565b840191505092915050565b600061373182613fb8565b61373b8185613ffd565b935061374b8185602086016141b1565b613754816143ef565b840191505092915050565b600061376a82613fb8565b613774818561400e565b93506137848185602086016141b1565b80840191505092915050565b6000815461379d816141e4565b6137a7818661400e565b945060018216600081146137c257600181146137d357613806565b60ff19831686528186019350613806565b6137dc85613f8d565b60005b838110156137fe578154818901526001820191506020810190506137df565b838801955050505b50505092915050565b600061381c602b83613ffd565b915061382782614400565b604082019050919050565b600061383f603283613ffd565b915061384a8261444f565b604082019050919050565b6000613862602683613ffd565b915061386d8261449e565b604082019050919050565b6000613885602583613ffd565b9150613890826144ed565b604082019050919050565b60006138a8601c83613ffd565b91506138b38261453c565b602082019050919050565b60006138cb602483613ffd565b91506138d682614565565b604082019050919050565b60006138ee601983613ffd565b91506138f9826145b4565b602082019050919050565b6000613911602c83613ffd565b915061391c826145dd565b604082019050919050565b6000613934603883613ffd565b915061393f8261462c565b604082019050919050565b6000613957602a83613ffd565b91506139628261467b565b604082019050919050565b600061397a602983613ffd565b9150613985826146ca565b604082019050919050565b600061399d602e83613ffd565b91506139a882614719565b604082019050919050565b60006139c0602083613ffd565b91506139cb82614768565b602082019050919050565b60006139e3602c83613ffd565b91506139ee82614791565b604082019050919050565b6000613a06602083613ffd565b9150613a11826147e0565b602082019050919050565b6000613a29602f83613ffd565b9150613a3482614809565b604082019050919050565b6000613a4c602183613ffd565b9150613a5782614858565b604082019050919050565b6000613a6f600083613ff2565b9150613a7a826148a7565b600082019050919050565b6000613a92603183613ffd565b9150613a9d826148aa565b604082019050919050565b6000613ab5602c83613ffd565b9150613ac0826148f9565b604082019050919050565b6000613ad8602483613ffd565b9150613ae382614948565b604082019050919050565b6000613afb601f83613ffd565b9150613b0682614997565b602082019050919050565b613b1a81614198565b82525050565b613b2981614198565b82525050565b6000613b3b828661375f565b9150613b47828561375f565b9150613b538284613790565b9150819050949350505050565b6000613b6b82613a62565b9150819050919050565b6000602082019050613b8a6000830184613671565b92915050565b6000608082019050613ba56000830187613671565b613bb26020830186613671565b613bbf6040830185613b20565b8181036060830152613bd181846136ed565b905095945050505050565b60006020820190508181036000830152613bf68184613680565b905092915050565b6000602082019050613c1360008301846136de565b92915050565b60006020820190508181036000830152613c338184613726565b905092915050565b60006020820190508181036000830152613c548161380f565b9050919050565b60006020820190508181036000830152613c7481613832565b9050919050565b60006020820190508181036000830152613c9481613855565b9050919050565b60006020820190508181036000830152613cb481613878565b9050919050565b60006020820190508181036000830152613cd48161389b565b9050919050565b60006020820190508181036000830152613cf4816138be565b9050919050565b60006020820190508181036000830152613d14816138e1565b9050919050565b60006020820190508181036000830152613d3481613904565b9050919050565b60006020820190508181036000830152613d5481613927565b9050919050565b60006020820190508181036000830152613d748161394a565b9050919050565b60006020820190508181036000830152613d948161396d565b9050919050565b60006020820190508181036000830152613db481613990565b9050919050565b60006020820190508181036000830152613dd4816139b3565b9050919050565b60006020820190508181036000830152613df4816139d6565b9050919050565b60006020820190508181036000830152613e14816139f9565b9050919050565b60006020820190508181036000830152613e3481613a1c565b9050919050565b60006020820190508181036000830152613e5481613a3f565b9050919050565b60006020820190508181036000830152613e7481613a85565b9050919050565b60006020820190508181036000830152613e9481613aa8565b9050919050565b60006020820190508181036000830152613eb481613acb565b9050919050565b60006020820190508181036000830152613ed481613aee565b9050919050565b6000602082019050613ef06000830184613b20565b92915050565b6000613f00613f11565b9050613f0c8282614216565b919050565b6000604051905090565b600067ffffffffffffffff821115613f3657613f356143ac565b5b613f3f826143ef565b9050602081019050919050565b600067ffffffffffffffff821115613f6757613f666143ac565b5b613f70826143ef565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061402482614198565b915061402f83614198565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614064576140636142c1565b5b828201905092915050565b600061407a82614198565b915061408583614198565b925082614095576140946142f0565b5b828204905092915050565b60006140ab82614198565b91506140b683614198565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156140ef576140ee6142c1565b5b828202905092915050565b600061410582614198565b915061411083614198565b925082821015614123576141226142c1565b5b828203905092915050565b600061413982614178565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156141cf5780820151818401526020810190506141b4565b838111156141de576000848401525b50505050565b600060028204905060018216806141fc57607f821691505b602082108114156142105761420f61431f565b5b50919050565b61421f826143ef565b810181811067ffffffffffffffff8211171561423e5761423d6143ac565b5b80604052505050565b600061425282614198565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614285576142846142c1565b5b600182019050919050565b600061429b82614198565b91506142a683614198565b9250826142b6576142b56142f0565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f5075726368617365206578636565647320746865206d6178696d756d2073757060008201527f706c79206f6620746f6b656e732e000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f457863656564696e6720746865206d6178696d756d20746f6b656e207075726360008201527f6861736500000000000000000000000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6149c98161412e565b81146149d457600080fd5b50565b6149e081614140565b81146149eb57600080fd5b50565b6149f78161414c565b8114614a0257600080fd5b50565b614a0e81614198565b8114614a1957600080fd5b5056fea264697066735822122035909ab08e194c3aaf7c73a371b0ab1d3d313b5491a3391cfd59c1e25833924c64736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d5054593671726b4b5a6173576e446462346659576f32753372694c6531674d344c4455565474567039746d4a2f00000000000000000000
-----Decoded View---------------
Arg [0] : _initBaseURI (string): ipfs://QmPTY6qrkKZasWnDdb4fYWo2u3riLe1gM4LDUVTtVp9tmJ/
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [2] : 697066733a2f2f516d5054593671726b4b5a6173576e446462346659576f3275
Arg [3] : 3372694c6531674d344c4455565474567039746d4a2f00000000000000000000
Deployed Bytecode Sourcemap
49626:4156:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42112:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53279:79;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28931:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30491:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30014:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49816:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42752:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49895:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31241:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42420:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53473:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53587:192;;;:::i;:::-;;31651:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51944:372;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52807:86;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53366:99;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42942:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50863:671;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53031:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49935:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28625:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49744:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28355:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7489:103;;;;;;;;;;;;;:::i;:::-;;52901:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6838:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29100:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30784:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51544:390;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31907:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50316:539;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49772:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52324:457;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49856:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49968:43;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53143:128;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31010:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7747:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42112:224;42214:4;42253:35;42238:50;;;:11;:50;;;;:90;;;;42292:36;42316:11;42292:23;:36::i;:::-;42238:90;42231:97;;42112:224;;;:::o;53279:79::-;7069:12;:10;:12::i;:::-;7058:23;;:7;:5;:7::i;:::-;:23;;;7050:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53344:6:::1;53335;;:15;;;;;;;;;;;;;;;;;;53279:79:::0;:::o;28931:100::-;28985:13;29018:5;29011:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28931:100;:::o;30491:221::-;30567:7;30595:16;30603:7;30595;:16::i;:::-;30587:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;30680:15;:24;30696:7;30680:24;;;;;;;;;;;;;;;;;;;;;30673:31;;30491:221;;;:::o;30014:411::-;30095:13;30111:23;30126:7;30111:14;:23::i;:::-;30095:39;;30159:5;30153:11;;:2;:11;;;;30145:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;30253:5;30237:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;30262:37;30279:5;30286:12;:10;:12::i;:::-;30262:16;:37::i;:::-;30237:62;30215:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;30396:21;30405:2;30409:7;30396:8;:21::i;:::-;30084:341;30014:411;;:::o;49816:33::-;;;;:::o;42752:113::-;42813:7;42840:10;:17;;;;42833:24;;42752:113;:::o;49895:33::-;;;;:::o;31241:339::-;31436:41;31455:12;:10;:12::i;:::-;31469:7;31436:18;:41::i;:::-;31428:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;31544:28;31554:4;31560:2;31564:7;31544:9;:28::i;:::-;31241:339;;;:::o;42420:256::-;42517:7;42553:23;42570:5;42553:16;:23::i;:::-;42545:5;:31;42537:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;42642:12;:19;42655:5;42642:19;;;;;;;;;;;;;;;:26;42662:5;42642:26;;;;;;;;;;;;42635:33;;42420:256;;;;:::o;53473:106::-;7069:12;:10;:12::i;:::-;7058:23;;:7;:5;:7::i;:::-;:23;;;7050:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53566:5:::1;53545:11;:18;53557:5;53545:18;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;53473:106:::0;:::o;53587:192::-;7069:12;:10;:12::i;:::-;7058:23;;:7;:5;:7::i;:::-;:23;;;7050:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1812:1:::1;2410:7;;:19;;2402:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;1812:1;2543:7;:18;;;;53656:7:::2;53677;:5;:7::i;:::-;53669:21;;53713;53669:80;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53655:94;;;53768:2;53760:11;;;::::0;::::2;;53644:135;1768:1:::1;2722:7;:22;;;;53587:192::o:0;31651:185::-;31789:39;31806:4;31812:2;31816:7;31789:39;;;;;;;;;;;;:16;:39::i;:::-;31651:185;;;:::o;51944:372::-;52018:16;52047:23;52073:17;52083:6;52073:9;:17::i;:::-;52047:43;;52101:25;52143:15;52129:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52101:58;;52175:9;52170:113;52190:15;52186:1;:19;52170:113;;;52241:30;52261:6;52269:1;52241:19;:30::i;:::-;52227:8;52236:1;52227:11;;;;;;;;:::i;:::-;;;;;;;:44;;;;;52207:3;;;;;:::i;:::-;;;;52170:113;;;;52300:8;52293:15;;;;51944:372;;;:::o;52807:86::-;7069:12;:10;:12::i;:::-;7058:23;;:7;:5;:7::i;:::-;:23;;;7050:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52877:8:::1;52870:4;:15;;;;52807:86:::0;:::o;53366:99::-;7069:12;:10;:12::i;:::-;7058:23;;:7;:5;:7::i;:::-;:23;;;7050:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53453:4:::1;53432:11;:18;53444:5;53432:18;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;53366:99:::0;:::o;42942:233::-;43017:7;43053:30;:28;:30::i;:::-;43045:5;:38;43037:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;43150:10;43161:5;43150:17;;;;;;;;:::i;:::-;;;;;;;;;;43143:24;;42942:233;;;:::o;50863:671::-;1812:1;2410:7;;:19;;2402:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;1812:1;2543:7;:18;;;;50958:14:::1;50975:13;:11;:13::i;:::-;50958:30;;51008:6;;;;;;;;;;;51007:7;50999:16;;;::::0;::::1;;51048:1;51034:11;:15;51026:24;;;::::0;::::1;;51084:13;;51069:11;:28;;51061:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;51181:9;;51166:11;51157:6;:20;;;;:::i;:::-;:33;;51149:92;;;;;;;;;;;;:::i;:::-;;;;;;;;;51272:7;:5;:7::i;:::-;51258:21;;:10;:21;;;51254:165;;51327:4;51300:31;;:11;:23;51312:10;51300:23;;;;;;;;;;;;;;;;;;;;;;;;;:31;;;51296:112;;51380:11;51373:4;;:18;;;;:::i;:::-;51360:9;:31;;51352:40;;;::::0;::::1;;51296:112;51254:165;51436:9;51448:1;51436:13;;51431:96;51456:11;51451:1;:16;51431:96;;51489:26;51499:3;51513:1;51504:6;:10;;;;:::i;:::-;51489:9;:26::i;:::-;51469:3;;;;;:::i;:::-;;;;51431:96;;;;50947:587;1768:1:::0;2722:7;:22;;;;50863:671;;:::o;53031:104::-;7069:12;:10;:12::i;:::-;7058:23;;:7;:5;:7::i;:::-;:23;;;7050:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53116:11:::1;53106:7;:21;;;;;;;;;;;;:::i;:::-;;53031:104:::0;:::o;49935:26::-;;;;;;;;;;;;;:::o;28625:239::-;28697:7;28717:13;28733:7;:16;28741:7;28733:16;;;;;;;;;;;;;;;;;;;;;28717:32;;28785:1;28768:19;;:5;:19;;;;28760:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;28851:5;28844:12;;;28625:239;;;:::o;49744:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;28355:208::-;28427:7;28472:1;28455:19;;:5;:19;;;;28447:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;28539:9;:16;28549:5;28539:16;;;;;;;;;;;;;;;;28532:23;;28355:208;;;:::o;7489:103::-;7069:12;:10;:12::i;:::-;7058:23;;:7;:5;:7::i;:::-;:23;;;7050:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7554:30:::1;7581:1;7554:18;:30::i;:::-;7489:103::o:0;52901:122::-;7069:12;:10;:12::i;:::-;7058:23;;:7;:5;:7::i;:::-;:23;;;7050:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52998:17:::1;52982:13;:33;;;;52901:122:::0;:::o;6838:87::-;6884:7;6911:6;;;;;;;;;;;6904:13;;6838:87;:::o;29100:104::-;29156:13;29189:7;29182:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29100:104;:::o;30784:155::-;30879:52;30898:12;:10;:12::i;:::-;30912:8;30922;30879:18;:52::i;:::-;30784:155;;:::o;51544:390::-;7069:12;:10;:12::i;:::-;7058:23;;:7;:5;:7::i;:::-;:23;;;7050:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1812:1:::1;2410:7;;:19;;2402:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;1812:1;2543:7;:18;;;;51628:14:::2;51645:13;:11;:13::i;:::-;51628:30;;51678:6;;;;;;;;;;;51677:7;51669:16;;;::::0;::::2;;51718:1;51704:11;:15;51696:24;;;::::0;::::2;;51754:3;51739:11;:18;;51731:27;;;::::0;::::2;;51801:9;;51786:11;51777:6;:20;;;;:::i;:::-;:33;;51769:42;;;::::0;::::2;;51829:9;51841:1;51829:13;;51824:103;51849:11;51844:1;:16;51824:103;;51882:33;51892:10;51913:1;51904:6;:10;;;;:::i;:::-;51882:9;:33::i;:::-;51862:3;;;;;:::i;:::-;;;;51824:103;;;;51617:317;1768:1:::1;2722:7;:22;;;;51544:390:::0;:::o;31907:328::-;32082:41;32101:12;:10;:12::i;:::-;32115:7;32082:18;:41::i;:::-;32074:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;32188:39;32202:4;32208:2;32212:7;32221:5;32188:13;:39::i;:::-;31907:328;;;;:::o;50316:539::-;1812:1;2410:7;;:19;;2402:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;1812:1;2543:7;:18;;;;50398:14:::1;50415:13;:11;:13::i;:::-;50398:30;;50448:6;;;;;;;;;;;50447:7;50439:16;;;::::0;::::1;;50488:1;50474:11;:15;50466:24;;;::::0;::::1;;50524:13;;50509:11;:28;;50501:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;50621:9;;50606:11;50597:6;:20;;;;:::i;:::-;:33;;50589:92;;;;;;;;;;;;:::i;:::-;;;;;;;;;50720:11;50713:4;;:18;;;;:::i;:::-;50700:9;:31;;50692:40;;;::::0;::::1;;50750:9;50762:1;50750:13;;50745:103;50770:11;50765:1;:16;50745:103;;50803:33;50813:10;50834:1;50825:6;:10;;;;:::i;:::-;50803:9;:33::i;:::-;50783:3;;;;;:::i;:::-;;;;50745:103;;;;50387:468;1768:1:::0;2722:7;:22;;;;50316:539;:::o;49772:37::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;52324:457::-;52421:13;52469:16;52477:7;52469;:16::i;:::-;52447:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;52573:28;52604:10;:8;:10::i;:::-;52573:41;;52663:1;52638:14;52632:28;:32;:141;;;;;;;;;;;;;;;;;52704:14;52720:18;:7;:16;:18::i;:::-;52740:13;52687:67;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;52632:141;52625:148;;;52324:457;;;:::o;49856:32::-;;;;:::o;49968:43::-;;;;;;;;;;;;;;;;;;;;;;:::o;53143:128::-;7069:12;:10;:12::i;:::-;7058:23;;:7;:5;:7::i;:::-;:23;;;7050:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53246:17:::1;53230:13;:33;;;;;;;;;;;;:::i;:::-;;53143:128:::0;:::o;31010:164::-;31107:4;31131:18;:25;31150:5;31131:25;;;;;;;;;;;;;;;:35;31157:8;31131:35;;;;;;;;;;;;;;;;;;;;;;;;;31124:42;;31010:164;;;;:::o;7747:201::-;7069:12;:10;:12::i;:::-;7058:23;;:7;:5;:7::i;:::-;:23;;;7050:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7856:1:::1;7836:22;;:8;:22;;;;7828:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;7912:28;7931:8;7912:18;:28::i;:::-;7747:201:::0;:::o;27986:305::-;28088:4;28140:25;28125:40;;;:11;:40;;;;:105;;;;28197:33;28182:48;;;:11;:48;;;;28125:105;:158;;;;28247:36;28271:11;28247:23;:36::i;:::-;28125:158;28105:178;;27986:305;;;:::o;5562:98::-;5615:7;5642:10;5635:17;;5562:98;:::o;33745:127::-;33810:4;33862:1;33834:30;;:7;:16;33842:7;33834:16;;;;;;;;;;;;;;;;;;;;;:30;;;;33827:37;;33745:127;;;:::o;37891:174::-;37993:2;37966:15;:24;37982:7;37966:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;38049:7;38045:2;38011:46;;38020:23;38035:7;38020:14;:23::i;:::-;38011:46;;;;;;;;;;;;37891:174;;:::o;34039:348::-;34132:4;34157:16;34165:7;34157;:16::i;:::-;34149:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;34233:13;34249:23;34264:7;34249:14;:23::i;:::-;34233:39;;34302:5;34291:16;;:7;:16;;;:52;;;;34311:32;34328:5;34335:7;34311:16;:32::i;:::-;34291:52;:87;;;;34371:7;34347:31;;:20;34359:7;34347:11;:20::i;:::-;:31;;;34291:87;34283:96;;;34039:348;;;;:::o;37148:625::-;37307:4;37280:31;;:23;37295:7;37280:14;:23::i;:::-;:31;;;37272:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;37386:1;37372:16;;:2;:16;;;;37364:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;37442:39;37463:4;37469:2;37473:7;37442:20;:39::i;:::-;37546:29;37563:1;37567:7;37546:8;:29::i;:::-;37607:1;37588:9;:15;37598:4;37588:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;37636:1;37619:9;:13;37629:2;37619:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;37667:2;37648:7;:16;37656:7;37648:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;37706:7;37702:2;37687:27;;37696:4;37687:27;;;;;;;;;;;;37727:38;37747:4;37753:2;37757:7;37727:19;:38::i;:::-;37148:625;;;:::o;34729:110::-;34805:26;34815:2;34819:7;34805:26;;;;;;;;;;;;:9;:26::i;:::-;34729:110;;:::o;8108:191::-;8182:16;8201:6;;;;;;;;;;;8182:25;;8227:8;8218:6;;:17;;;;;;;;;;;;;;;;;;8282:8;8251:40;;8272:8;8251:40;;;;;;;;;;;;8171:128;8108:191;:::o;38207:315::-;38362:8;38353:17;;:5;:17;;;;38345:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;38449:8;38411:18;:25;38430:5;38411:25;;;;;;;;;;;;;;;:35;38437:8;38411:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;38495:8;38473:41;;38488:5;38473:41;;;38505:8;38473:41;;;;;;:::i;:::-;;;;;;;;38207:315;;;:::o;33117:::-;33274:28;33284:4;33290:2;33294:7;33274:9;:28::i;:::-;33321:48;33344:4;33350:2;33354:7;33363:5;33321:22;:48::i;:::-;33313:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;33117:315;;;;:::o;50186:107::-;50245:13;50278:7;50271:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50186:107;:::o;3124:723::-;3180:13;3410:1;3401:5;:10;3397:53;;;3428:10;;;;;;;;;;;;;;;;;;;;;3397:53;3460:12;3475:5;3460:20;;3491:14;3516:78;3531:1;3523:4;:9;3516:78;;3549:8;;;;;:::i;:::-;;;;3580:2;3572:10;;;;;:::i;:::-;;;3516:78;;;3604:19;3636:6;3626:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3604:39;;3654:154;3670:1;3661:5;:10;3654:154;;3698:1;3688:11;;;;;:::i;:::-;;;3765:2;3757:5;:10;;;;:::i;:::-;3744:2;:24;;;;:::i;:::-;3731:39;;3714:6;3721;3714:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;3794:2;3785:11;;;;;:::i;:::-;;;3654:154;;;3832:6;3818:21;;;;;3124:723;;;;:::o;19645:157::-;19730:4;19769:25;19754:40;;;:11;:40;;;;19747:47;;19645:157;;;:::o;43788:589::-;43932:45;43959:4;43965:2;43969:7;43932:26;:45::i;:::-;44010:1;43994:18;;:4;:18;;;43990:187;;;44029:40;44061:7;44029:31;:40::i;:::-;43990:187;;;44099:2;44091:10;;:4;:10;;;44087:90;;44118:47;44151:4;44157:7;44118:32;:47::i;:::-;44087:90;43990:187;44205:1;44191:16;;:2;:16;;;44187:183;;;44224:45;44261:7;44224:36;:45::i;:::-;44187:183;;;44297:4;44291:10;;:2;:10;;;44287:83;;44318:40;44346:2;44350:7;44318:27;:40::i;:::-;44287:83;44187:183;43788:589;;;:::o;40969:125::-;;;;:::o;35066:321::-;35196:18;35202:2;35206:7;35196:5;:18::i;:::-;35247:54;35278:1;35282:2;35286:7;35295:5;35247:22;:54::i;:::-;35225:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;35066:321;;;:::o;39087:799::-;39242:4;39263:15;:2;:13;;;:15::i;:::-;39259:620;;;39315:2;39299:36;;;39336:12;:10;:12::i;:::-;39350:4;39356:7;39365:5;39299:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;39295:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39558:1;39541:6;:13;:18;39537:272;;;39584:60;;;;;;;;;;:::i;:::-;;;;;;;;39537:272;39759:6;39753:13;39744:6;39740:2;39736:15;39729:38;39295:529;39432:41;;;39422:51;;;:6;:51;;;;39415:58;;;;;39259:620;39863:4;39856:11;;39087:799;;;;;;;:::o;40458:126::-;;;;:::o;45100:164::-;45204:10;:17;;;;45177:15;:24;45193:7;45177:24;;;;;;;;;;;:44;;;;45232:10;45248:7;45232:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45100:164;:::o;45891:988::-;46157:22;46207:1;46182:22;46199:4;46182:16;:22::i;:::-;:26;;;;:::i;:::-;46157:51;;46219:18;46240:17;:26;46258:7;46240:26;;;;;;;;;;;;46219:47;;46387:14;46373:10;:28;46369:328;;46418:19;46440:12;:18;46453:4;46440:18;;;;;;;;;;;;;;;:34;46459:14;46440:34;;;;;;;;;;;;46418:56;;46524:11;46491:12;:18;46504:4;46491:18;;;;;;;;;;;;;;;:30;46510:10;46491:30;;;;;;;;;;;:44;;;;46641:10;46608:17;:30;46626:11;46608:30;;;;;;;;;;;:43;;;;46403:294;46369:328;46793:17;:26;46811:7;46793:26;;;;;;;;;;;46786:33;;;46837:12;:18;46850:4;46837:18;;;;;;;;;;;;;;;:34;46856:14;46837:34;;;;;;;;;;;46830:41;;;45972:907;;45891:988;;:::o;47174:1079::-;47427:22;47472:1;47452:10;:17;;;;:21;;;;:::i;:::-;47427:46;;47484:18;47505:15;:24;47521:7;47505:24;;;;;;;;;;;;47484:45;;47856:19;47878:10;47889:14;47878:26;;;;;;;;:::i;:::-;;;;;;;;;;47856:48;;47942:11;47917:10;47928;47917:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;48053:10;48022:15;:28;48038:11;48022:28;;;;;;;;;;;:41;;;;48194:15;:24;48210:7;48194:24;;;;;;;;;;;48187:31;;;48229:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;47245:1008;;;47174:1079;:::o;44678:221::-;44763:14;44780:20;44797:2;44780:16;:20::i;:::-;44763:37;;44838:7;44811:12;:16;44824:2;44811:16;;;;;;;;;;;;;;;:24;44828:6;44811:24;;;;;;;;;;;:34;;;;44885:6;44856:17;:26;44874:7;44856:26;;;;;;;;;;;:35;;;;44752:147;44678:221;;:::o;35723:439::-;35817:1;35803:16;;:2;:16;;;;35795:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;35876:16;35884:7;35876;:16::i;:::-;35875:17;35867:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;35938:45;35967:1;35971:2;35975:7;35938:20;:45::i;:::-;36013:1;35996:9;:13;36006:2;35996:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;36044:2;36025:7;:16;36033:7;36025:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;36089:7;36085:2;36064:33;;36081:1;36064:33;;;;;;;;;;;;36110:44;36138:1;36142:2;36146:7;36110:19;:44::i;:::-;35723:439;;:::o;9539:326::-;9599:4;9856:1;9834:7;:19;;;:23;9827:30;;9539:326;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;986:133::-;1029:5;1067:6;1054:20;1045:29;;1083:30;1107:5;1083:30;:::i;:::-;986:133;;;;:::o;1125:137::-;1170:5;1208:6;1195:20;1186:29;;1224:32;1250:5;1224:32;:::i;:::-;1125:137;;;;:::o;1268:141::-;1324:5;1355:6;1349:13;1340:22;;1371:32;1397:5;1371:32;:::i;:::-;1268:141;;;;:::o;1428:338::-;1483:5;1532:3;1525:4;1517:6;1513:17;1509:27;1499:122;;1540:79;;:::i;:::-;1499:122;1657:6;1644:20;1682:78;1756:3;1748:6;1741:4;1733:6;1729:17;1682:78;:::i;:::-;1673:87;;1489:277;1428:338;;;;:::o;1786:340::-;1842:5;1891:3;1884:4;1876:6;1872:17;1868:27;1858:122;;1899:79;;:::i;:::-;1858:122;2016:6;2003:20;2041:79;2116:3;2108:6;2101:4;2093:6;2089:17;2041:79;:::i;:::-;2032:88;;1848:278;1786:340;;;;:::o;2132:139::-;2178:5;2216:6;2203:20;2194:29;;2232:33;2259:5;2232:33;:::i;:::-;2132:139;;;;:::o;2277:329::-;2336:6;2385:2;2373:9;2364:7;2360:23;2356:32;2353:119;;;2391:79;;:::i;:::-;2353:119;2511:1;2536:53;2581:7;2572:6;2561:9;2557:22;2536:53;:::i;:::-;2526:63;;2482:117;2277:329;;;;:::o;2612:474::-;2680:6;2688;2737:2;2725:9;2716:7;2712:23;2708:32;2705:119;;;2743:79;;:::i;:::-;2705:119;2863:1;2888:53;2933:7;2924:6;2913:9;2909:22;2888:53;:::i;:::-;2878:63;;2834:117;2990:2;3016:53;3061:7;3052:6;3041:9;3037:22;3016:53;:::i;:::-;3006:63;;2961:118;2612:474;;;;;:::o;3092:619::-;3169:6;3177;3185;3234:2;3222:9;3213:7;3209:23;3205:32;3202:119;;;3240:79;;:::i;:::-;3202:119;3360:1;3385:53;3430:7;3421:6;3410:9;3406:22;3385:53;:::i;:::-;3375:63;;3331:117;3487:2;3513:53;3558:7;3549:6;3538:9;3534:22;3513:53;:::i;:::-;3503:63;;3458:118;3615:2;3641:53;3686:7;3677:6;3666:9;3662:22;3641:53;:::i;:::-;3631:63;;3586:118;3092:619;;;;;:::o;3717:943::-;3812:6;3820;3828;3836;3885:3;3873:9;3864:7;3860:23;3856:33;3853:120;;;3892:79;;:::i;:::-;3853:120;4012:1;4037:53;4082:7;4073:6;4062:9;4058:22;4037:53;:::i;:::-;4027:63;;3983:117;4139:2;4165:53;4210:7;4201:6;4190:9;4186:22;4165:53;:::i;:::-;4155:63;;4110:118;4267:2;4293:53;4338:7;4329:6;4318:9;4314:22;4293:53;:::i;:::-;4283:63;;4238:118;4423:2;4412:9;4408:18;4395:32;4454:18;4446:6;4443:30;4440:117;;;4476:79;;:::i;:::-;4440:117;4581:62;4635:7;4626:6;4615:9;4611:22;4581:62;:::i;:::-;4571:72;;4366:287;3717:943;;;;;;;:::o;4666:468::-;4731:6;4739;4788:2;4776:9;4767:7;4763:23;4759:32;4756:119;;;4794:79;;:::i;:::-;4756:119;4914:1;4939:53;4984:7;4975:6;4964:9;4960:22;4939:53;:::i;:::-;4929:63;;4885:117;5041:2;5067:50;5109:7;5100:6;5089:9;5085:22;5067:50;:::i;:::-;5057:60;;5012:115;4666:468;;;;;:::o;5140:474::-;5208:6;5216;5265:2;5253:9;5244:7;5240:23;5236:32;5233:119;;;5271:79;;:::i;:::-;5233:119;5391:1;5416:53;5461:7;5452:6;5441:9;5437:22;5416:53;:::i;:::-;5406:63;;5362:117;5518:2;5544:53;5589:7;5580:6;5569:9;5565:22;5544:53;:::i;:::-;5534:63;;5489:118;5140:474;;;;;:::o;5620:323::-;5676:6;5725:2;5713:9;5704:7;5700:23;5696:32;5693:119;;;5731:79;;:::i;:::-;5693:119;5851:1;5876:50;5918:7;5909:6;5898:9;5894:22;5876:50;:::i;:::-;5866:60;;5822:114;5620:323;;;;:::o;5949:327::-;6007:6;6056:2;6044:9;6035:7;6031:23;6027:32;6024:119;;;6062:79;;:::i;:::-;6024:119;6182:1;6207:52;6251:7;6242:6;6231:9;6227:22;6207:52;:::i;:::-;6197:62;;6153:116;5949:327;;;;:::o;6282:349::-;6351:6;6400:2;6388:9;6379:7;6375:23;6371:32;6368:119;;;6406:79;;:::i;:::-;6368:119;6526:1;6551:63;6606:7;6597:6;6586:9;6582:22;6551:63;:::i;:::-;6541:73;;6497:127;6282:349;;;;:::o;6637:509::-;6706:6;6755:2;6743:9;6734:7;6730:23;6726:32;6723:119;;;6761:79;;:::i;:::-;6723:119;6909:1;6898:9;6894:17;6881:31;6939:18;6931:6;6928:30;6925:117;;;6961:79;;:::i;:::-;6925:117;7066:63;7121:7;7112:6;7101:9;7097:22;7066:63;:::i;:::-;7056:73;;6852:287;6637:509;;;;:::o;7152:329::-;7211:6;7260:2;7248:9;7239:7;7235:23;7231:32;7228:119;;;7266:79;;:::i;:::-;7228:119;7386:1;7411:53;7456:7;7447:6;7436:9;7432:22;7411:53;:::i;:::-;7401:63;;7357:117;7152:329;;;;:::o;7487:179::-;7556:10;7577:46;7619:3;7611:6;7577:46;:::i;:::-;7655:4;7650:3;7646:14;7632:28;;7487:179;;;;:::o;7672:118::-;7759:24;7777:5;7759:24;:::i;:::-;7754:3;7747:37;7672:118;;:::o;7826:732::-;7945:3;7974:54;8022:5;7974:54;:::i;:::-;8044:86;8123:6;8118:3;8044:86;:::i;:::-;8037:93;;8154:56;8204:5;8154:56;:::i;:::-;8233:7;8264:1;8249:284;8274:6;8271:1;8268:13;8249:284;;;8350:6;8344:13;8377:63;8436:3;8421:13;8377:63;:::i;:::-;8370:70;;8463:60;8516:6;8463:60;:::i;:::-;8453:70;;8309:224;8296:1;8293;8289:9;8284:14;;8249:284;;;8253:14;8549:3;8542:10;;7950:608;;;7826:732;;;;:::o;8564:109::-;8645:21;8660:5;8645:21;:::i;:::-;8640:3;8633:34;8564:109;;:::o;8679:360::-;8765:3;8793:38;8825:5;8793:38;:::i;:::-;8847:70;8910:6;8905:3;8847:70;:::i;:::-;8840:77;;8926:52;8971:6;8966:3;8959:4;8952:5;8948:16;8926:52;:::i;:::-;9003:29;9025:6;9003:29;:::i;:::-;8998:3;8994:39;8987:46;;8769:270;8679:360;;;;:::o;9045:364::-;9133:3;9161:39;9194:5;9161:39;:::i;:::-;9216:71;9280:6;9275:3;9216:71;:::i;:::-;9209:78;;9296:52;9341:6;9336:3;9329:4;9322:5;9318:16;9296:52;:::i;:::-;9373:29;9395:6;9373:29;:::i;:::-;9368:3;9364:39;9357:46;;9137:272;9045:364;;;;:::o;9415:377::-;9521:3;9549:39;9582:5;9549:39;:::i;:::-;9604:89;9686:6;9681:3;9604:89;:::i;:::-;9597:96;;9702:52;9747:6;9742:3;9735:4;9728:5;9724:16;9702:52;:::i;:::-;9779:6;9774:3;9770:16;9763:23;;9525:267;9415:377;;;;:::o;9822:845::-;9925:3;9962:5;9956:12;9991:36;10017:9;9991:36;:::i;:::-;10043:89;10125:6;10120:3;10043:89;:::i;:::-;10036:96;;10163:1;10152:9;10148:17;10179:1;10174:137;;;;10325:1;10320:341;;;;10141:520;;10174:137;10258:4;10254:9;10243;10239:25;10234:3;10227:38;10294:6;10289:3;10285:16;10278:23;;10174:137;;10320:341;10387:38;10419:5;10387:38;:::i;:::-;10447:1;10461:154;10475:6;10472:1;10469:13;10461:154;;;10549:7;10543:14;10539:1;10534:3;10530:11;10523:35;10599:1;10590:7;10586:15;10575:26;;10497:4;10494:1;10490:12;10485:17;;10461:154;;;10644:6;10639:3;10635:16;10628:23;;10327:334;;10141:520;;9929:738;;9822:845;;;;:::o;10673:366::-;10815:3;10836:67;10900:2;10895:3;10836:67;:::i;:::-;10829:74;;10912:93;11001:3;10912:93;:::i;:::-;11030:2;11025:3;11021:12;11014:19;;10673:366;;;:::o;11045:::-;11187:3;11208:67;11272:2;11267:3;11208:67;:::i;:::-;11201:74;;11284:93;11373:3;11284:93;:::i;:::-;11402:2;11397:3;11393:12;11386:19;;11045:366;;;:::o;11417:::-;11559:3;11580:67;11644:2;11639:3;11580:67;:::i;:::-;11573:74;;11656:93;11745:3;11656:93;:::i;:::-;11774:2;11769:3;11765:12;11758:19;;11417:366;;;:::o;11789:::-;11931:3;11952:67;12016:2;12011:3;11952:67;:::i;:::-;11945:74;;12028:93;12117:3;12028:93;:::i;:::-;12146:2;12141:3;12137:12;12130:19;;11789:366;;;:::o;12161:::-;12303:3;12324:67;12388:2;12383:3;12324:67;:::i;:::-;12317:74;;12400:93;12489:3;12400:93;:::i;:::-;12518:2;12513:3;12509:12;12502:19;;12161:366;;;:::o;12533:::-;12675:3;12696:67;12760:2;12755:3;12696:67;:::i;:::-;12689:74;;12772:93;12861:3;12772:93;:::i;:::-;12890:2;12885:3;12881:12;12874:19;;12533:366;;;:::o;12905:::-;13047:3;13068:67;13132:2;13127:3;13068:67;:::i;:::-;13061:74;;13144:93;13233:3;13144:93;:::i;:::-;13262:2;13257:3;13253:12;13246:19;;12905:366;;;:::o;13277:::-;13419:3;13440:67;13504:2;13499:3;13440:67;:::i;:::-;13433:74;;13516:93;13605:3;13516:93;:::i;:::-;13634:2;13629:3;13625:12;13618:19;;13277:366;;;:::o;13649:::-;13791:3;13812:67;13876:2;13871:3;13812:67;:::i;:::-;13805:74;;13888:93;13977:3;13888:93;:::i;:::-;14006:2;14001:3;13997:12;13990:19;;13649:366;;;:::o;14021:::-;14163:3;14184:67;14248:2;14243:3;14184:67;:::i;:::-;14177:74;;14260:93;14349:3;14260:93;:::i;:::-;14378:2;14373:3;14369:12;14362:19;;14021:366;;;:::o;14393:::-;14535:3;14556:67;14620:2;14615:3;14556:67;:::i;:::-;14549:74;;14632:93;14721:3;14632:93;:::i;:::-;14750:2;14745:3;14741:12;14734:19;;14393:366;;;:::o;14765:::-;14907:3;14928:67;14992:2;14987:3;14928:67;:::i;:::-;14921:74;;15004:93;15093:3;15004:93;:::i;:::-;15122:2;15117:3;15113:12;15106:19;;14765:366;;;:::o;15137:::-;15279:3;15300:67;15364:2;15359:3;15300:67;:::i;:::-;15293:74;;15376:93;15465:3;15376:93;:::i;:::-;15494:2;15489:3;15485:12;15478:19;;15137:366;;;:::o;15509:::-;15651:3;15672:67;15736:2;15731:3;15672:67;:::i;:::-;15665:74;;15748:93;15837:3;15748:93;:::i;:::-;15866:2;15861:3;15857:12;15850:19;;15509:366;;;:::o;15881:::-;16023:3;16044:67;16108:2;16103:3;16044:67;:::i;:::-;16037:74;;16120:93;16209:3;16120:93;:::i;:::-;16238:2;16233:3;16229:12;16222:19;;15881:366;;;:::o;16253:::-;16395:3;16416:67;16480:2;16475:3;16416:67;:::i;:::-;16409:74;;16492:93;16581:3;16492:93;:::i;:::-;16610:2;16605:3;16601:12;16594:19;;16253:366;;;:::o;16625:::-;16767:3;16788:67;16852:2;16847:3;16788:67;:::i;:::-;16781:74;;16864:93;16953:3;16864:93;:::i;:::-;16982:2;16977:3;16973:12;16966:19;;16625:366;;;:::o;16997:398::-;17156:3;17177:83;17258:1;17253:3;17177:83;:::i;:::-;17170:90;;17269:93;17358:3;17269:93;:::i;:::-;17387:1;17382:3;17378:11;17371:18;;16997:398;;;:::o;17401:366::-;17543:3;17564:67;17628:2;17623:3;17564:67;:::i;:::-;17557:74;;17640:93;17729:3;17640:93;:::i;:::-;17758:2;17753:3;17749:12;17742:19;;17401:366;;;:::o;17773:::-;17915:3;17936:67;18000:2;17995:3;17936:67;:::i;:::-;17929:74;;18012:93;18101:3;18012:93;:::i;:::-;18130:2;18125:3;18121:12;18114:19;;17773:366;;;:::o;18145:::-;18287:3;18308:67;18372:2;18367:3;18308:67;:::i;:::-;18301:74;;18384:93;18473:3;18384:93;:::i;:::-;18502:2;18497:3;18493:12;18486:19;;18145:366;;;:::o;18517:::-;18659:3;18680:67;18744:2;18739:3;18680:67;:::i;:::-;18673:74;;18756:93;18845:3;18756:93;:::i;:::-;18874:2;18869:3;18865:12;18858:19;;18517:366;;;:::o;18889:108::-;18966:24;18984:5;18966:24;:::i;:::-;18961:3;18954:37;18889:108;;:::o;19003:118::-;19090:24;19108:5;19090:24;:::i;:::-;19085:3;19078:37;19003:118;;:::o;19127:589::-;19352:3;19374:95;19465:3;19456:6;19374:95;:::i;:::-;19367:102;;19486:95;19577:3;19568:6;19486:95;:::i;:::-;19479:102;;19598:92;19686:3;19677:6;19598:92;:::i;:::-;19591:99;;19707:3;19700:10;;19127:589;;;;;;:::o;19722:379::-;19906:3;19928:147;20071:3;19928:147;:::i;:::-;19921:154;;20092:3;20085:10;;19722:379;;;:::o;20107:222::-;20200:4;20238:2;20227:9;20223:18;20215:26;;20251:71;20319:1;20308:9;20304:17;20295:6;20251:71;:::i;:::-;20107:222;;;;:::o;20335:640::-;20530:4;20568:3;20557:9;20553:19;20545:27;;20582:71;20650:1;20639:9;20635:17;20626:6;20582:71;:::i;:::-;20663:72;20731:2;20720:9;20716:18;20707:6;20663:72;:::i;:::-;20745;20813:2;20802:9;20798:18;20789:6;20745:72;:::i;:::-;20864:9;20858:4;20854:20;20849:2;20838:9;20834:18;20827:48;20892:76;20963:4;20954:6;20892:76;:::i;:::-;20884:84;;20335:640;;;;;;;:::o;20981:373::-;21124:4;21162:2;21151:9;21147:18;21139:26;;21211:9;21205:4;21201:20;21197:1;21186:9;21182:17;21175:47;21239:108;21342:4;21333:6;21239:108;:::i;:::-;21231:116;;20981:373;;;;:::o;21360:210::-;21447:4;21485:2;21474:9;21470:18;21462:26;;21498:65;21560:1;21549:9;21545:17;21536:6;21498:65;:::i;:::-;21360:210;;;;:::o;21576:313::-;21689:4;21727:2;21716:9;21712:18;21704:26;;21776:9;21770:4;21766:20;21762:1;21751:9;21747:17;21740:47;21804:78;21877:4;21868:6;21804:78;:::i;:::-;21796:86;;21576:313;;;;:::o;21895:419::-;22061:4;22099:2;22088:9;22084:18;22076:26;;22148:9;22142:4;22138:20;22134:1;22123:9;22119:17;22112:47;22176:131;22302:4;22176:131;:::i;:::-;22168:139;;21895:419;;;:::o;22320:::-;22486:4;22524:2;22513:9;22509:18;22501:26;;22573:9;22567:4;22563:20;22559:1;22548:9;22544:17;22537:47;22601:131;22727:4;22601:131;:::i;:::-;22593:139;;22320:419;;;:::o;22745:::-;22911:4;22949:2;22938:9;22934:18;22926:26;;22998:9;22992:4;22988:20;22984:1;22973:9;22969:17;22962:47;23026:131;23152:4;23026:131;:::i;:::-;23018:139;;22745:419;;;:::o;23170:::-;23336:4;23374:2;23363:9;23359:18;23351:26;;23423:9;23417:4;23413:20;23409:1;23398:9;23394:17;23387:47;23451:131;23577:4;23451:131;:::i;:::-;23443:139;;23170:419;;;:::o;23595:::-;23761:4;23799:2;23788:9;23784:18;23776:26;;23848:9;23842:4;23838:20;23834:1;23823:9;23819:17;23812:47;23876:131;24002:4;23876:131;:::i;:::-;23868:139;;23595:419;;;:::o;24020:::-;24186:4;24224:2;24213:9;24209:18;24201:26;;24273:9;24267:4;24263:20;24259:1;24248:9;24244:17;24237:47;24301:131;24427:4;24301:131;:::i;:::-;24293:139;;24020:419;;;:::o;24445:::-;24611:4;24649:2;24638:9;24634:18;24626:26;;24698:9;24692:4;24688:20;24684:1;24673:9;24669:17;24662:47;24726:131;24852:4;24726:131;:::i;:::-;24718:139;;24445:419;;;:::o;24870:::-;25036:4;25074:2;25063:9;25059:18;25051:26;;25123:9;25117:4;25113:20;25109:1;25098:9;25094:17;25087:47;25151:131;25277:4;25151:131;:::i;:::-;25143:139;;24870:419;;;:::o;25295:::-;25461:4;25499:2;25488:9;25484:18;25476:26;;25548:9;25542:4;25538:20;25534:1;25523:9;25519:17;25512:47;25576:131;25702:4;25576:131;:::i;:::-;25568:139;;25295:419;;;:::o;25720:::-;25886:4;25924:2;25913:9;25909:18;25901:26;;25973:9;25967:4;25963:20;25959:1;25948:9;25944:17;25937:47;26001:131;26127:4;26001:131;:::i;:::-;25993:139;;25720:419;;;:::o;26145:::-;26311:4;26349:2;26338:9;26334:18;26326:26;;26398:9;26392:4;26388:20;26384:1;26373:9;26369:17;26362:47;26426:131;26552:4;26426:131;:::i;:::-;26418:139;;26145:419;;;:::o;26570:::-;26736:4;26774:2;26763:9;26759:18;26751:26;;26823:9;26817:4;26813:20;26809:1;26798:9;26794:17;26787:47;26851:131;26977:4;26851:131;:::i;:::-;26843:139;;26570:419;;;:::o;26995:::-;27161:4;27199:2;27188:9;27184:18;27176:26;;27248:9;27242:4;27238:20;27234:1;27223:9;27219:17;27212:47;27276:131;27402:4;27276:131;:::i;:::-;27268:139;;26995:419;;;:::o;27420:::-;27586:4;27624:2;27613:9;27609:18;27601:26;;27673:9;27667:4;27663:20;27659:1;27648:9;27644:17;27637:47;27701:131;27827:4;27701:131;:::i;:::-;27693:139;;27420:419;;;:::o;27845:::-;28011:4;28049:2;28038:9;28034:18;28026:26;;28098:9;28092:4;28088:20;28084:1;28073:9;28069:17;28062:47;28126:131;28252:4;28126:131;:::i;:::-;28118:139;;27845:419;;;:::o;28270:::-;28436:4;28474:2;28463:9;28459:18;28451:26;;28523:9;28517:4;28513:20;28509:1;28498:9;28494:17;28487:47;28551:131;28677:4;28551:131;:::i;:::-;28543:139;;28270:419;;;:::o;28695:::-;28861:4;28899:2;28888:9;28884:18;28876:26;;28948:9;28942:4;28938:20;28934:1;28923:9;28919:17;28912:47;28976:131;29102:4;28976:131;:::i;:::-;28968:139;;28695:419;;;:::o;29120:::-;29286:4;29324:2;29313:9;29309:18;29301:26;;29373:9;29367:4;29363:20;29359:1;29348:9;29344:17;29337:47;29401:131;29527:4;29401:131;:::i;:::-;29393:139;;29120:419;;;:::o;29545:::-;29711:4;29749:2;29738:9;29734:18;29726:26;;29798:9;29792:4;29788:20;29784:1;29773:9;29769:17;29762:47;29826:131;29952:4;29826:131;:::i;:::-;29818:139;;29545:419;;;:::o;29970:::-;30136:4;30174:2;30163:9;30159:18;30151:26;;30223:9;30217:4;30213:20;30209:1;30198:9;30194:17;30187:47;30251:131;30377:4;30251:131;:::i;:::-;30243:139;;29970:419;;;:::o;30395:::-;30561:4;30599:2;30588:9;30584:18;30576:26;;30648:9;30642:4;30638:20;30634:1;30623:9;30619:17;30612:47;30676:131;30802:4;30676:131;:::i;:::-;30668:139;;30395:419;;;:::o;30820:222::-;30913:4;30951:2;30940:9;30936:18;30928:26;;30964:71;31032:1;31021:9;31017:17;31008:6;30964:71;:::i;:::-;30820:222;;;;:::o;31048:129::-;31082:6;31109:20;;:::i;:::-;31099:30;;31138:33;31166:4;31158:6;31138:33;:::i;:::-;31048:129;;;:::o;31183:75::-;31216:6;31249:2;31243:9;31233:19;;31183:75;:::o;31264:307::-;31325:4;31415:18;31407:6;31404:30;31401:56;;;31437:18;;:::i;:::-;31401:56;31475:29;31497:6;31475:29;:::i;:::-;31467:37;;31559:4;31553;31549:15;31541:23;;31264:307;;;:::o;31577:308::-;31639:4;31729:18;31721:6;31718:30;31715:56;;;31751:18;;:::i;:::-;31715:56;31789:29;31811:6;31789:29;:::i;:::-;31781:37;;31873:4;31867;31863:15;31855:23;;31577:308;;;:::o;31891:132::-;31958:4;31981:3;31973:11;;32011:4;32006:3;32002:14;31994:22;;31891:132;;;:::o;32029:141::-;32078:4;32101:3;32093:11;;32124:3;32121:1;32114:14;32158:4;32155:1;32145:18;32137:26;;32029:141;;;:::o;32176:114::-;32243:6;32277:5;32271:12;32261:22;;32176:114;;;:::o;32296:98::-;32347:6;32381:5;32375:12;32365:22;;32296:98;;;:::o;32400:99::-;32452:6;32486:5;32480:12;32470:22;;32400:99;;;:::o;32505:113::-;32575:4;32607;32602:3;32598:14;32590:22;;32505:113;;;:::o;32624:184::-;32723:11;32757:6;32752:3;32745:19;32797:4;32792:3;32788:14;32773:29;;32624:184;;;;:::o;32814:168::-;32897:11;32931:6;32926:3;32919:19;32971:4;32966:3;32962:14;32947:29;;32814:168;;;;:::o;32988:147::-;33089:11;33126:3;33111:18;;32988:147;;;;:::o;33141:169::-;33225:11;33259:6;33254:3;33247:19;33299:4;33294:3;33290:14;33275:29;;33141:169;;;;:::o;33316:148::-;33418:11;33455:3;33440:18;;33316:148;;;;:::o;33470:305::-;33510:3;33529:20;33547:1;33529:20;:::i;:::-;33524:25;;33563:20;33581:1;33563:20;:::i;:::-;33558:25;;33717:1;33649:66;33645:74;33642:1;33639:81;33636:107;;;33723:18;;:::i;:::-;33636:107;33767:1;33764;33760:9;33753:16;;33470:305;;;;:::o;33781:185::-;33821:1;33838:20;33856:1;33838:20;:::i;:::-;33833:25;;33872:20;33890:1;33872:20;:::i;:::-;33867:25;;33911:1;33901:35;;33916:18;;:::i;:::-;33901:35;33958:1;33955;33951:9;33946:14;;33781:185;;;;:::o;33972:348::-;34012:7;34035:20;34053:1;34035:20;:::i;:::-;34030:25;;34069:20;34087:1;34069:20;:::i;:::-;34064:25;;34257:1;34189:66;34185:74;34182:1;34179:81;34174:1;34167:9;34160:17;34156:105;34153:131;;;34264:18;;:::i;:::-;34153:131;34312:1;34309;34305:9;34294:20;;33972:348;;;;:::o;34326:191::-;34366:4;34386:20;34404:1;34386:20;:::i;:::-;34381:25;;34420:20;34438:1;34420:20;:::i;:::-;34415:25;;34459:1;34456;34453:8;34450:34;;;34464:18;;:::i;:::-;34450:34;34509:1;34506;34502:9;34494:17;;34326:191;;;;:::o;34523:96::-;34560:7;34589:24;34607:5;34589:24;:::i;:::-;34578:35;;34523:96;;;:::o;34625:90::-;34659:7;34702:5;34695:13;34688:21;34677:32;;34625:90;;;:::o;34721:149::-;34757:7;34797:66;34790:5;34786:78;34775:89;;34721:149;;;:::o;34876:126::-;34913:7;34953:42;34946:5;34942:54;34931:65;;34876:126;;;:::o;35008:77::-;35045:7;35074:5;35063:16;;35008:77;;;:::o;35091:154::-;35175:6;35170:3;35165;35152:30;35237:1;35228:6;35223:3;35219:16;35212:27;35091:154;;;:::o;35251:307::-;35319:1;35329:113;35343:6;35340:1;35337:13;35329:113;;;35428:1;35423:3;35419:11;35413:18;35409:1;35404:3;35400:11;35393:39;35365:2;35362:1;35358:10;35353:15;;35329:113;;;35460:6;35457:1;35454:13;35451:101;;;35540:1;35531:6;35526:3;35522:16;35515:27;35451:101;35300:258;35251:307;;;:::o;35564:320::-;35608:6;35645:1;35639:4;35635:12;35625:22;;35692:1;35686:4;35682:12;35713:18;35703:81;;35769:4;35761:6;35757:17;35747:27;;35703:81;35831:2;35823:6;35820:14;35800:18;35797:38;35794:84;;;35850:18;;:::i;:::-;35794:84;35615:269;35564:320;;;:::o;35890:281::-;35973:27;35995:4;35973:27;:::i;:::-;35965:6;35961:40;36103:6;36091:10;36088:22;36067:18;36055:10;36052:34;36049:62;36046:88;;;36114:18;;:::i;:::-;36046:88;36154:10;36150:2;36143:22;35933:238;35890:281;;:::o;36177:233::-;36216:3;36239:24;36257:5;36239:24;:::i;:::-;36230:33;;36285:66;36278:5;36275:77;36272:103;;;36355:18;;:::i;:::-;36272:103;36402:1;36395:5;36391:13;36384:20;;36177:233;;;:::o;36416:176::-;36448:1;36465:20;36483:1;36465:20;:::i;:::-;36460:25;;36499:20;36517:1;36499:20;:::i;:::-;36494:25;;36538:1;36528:35;;36543:18;;:::i;:::-;36528:35;36584:1;36581;36577:9;36572:14;;36416:176;;;;:::o;36598:180::-;36646:77;36643:1;36636:88;36743:4;36740:1;36733:15;36767:4;36764:1;36757:15;36784:180;36832:77;36829:1;36822:88;36929:4;36926:1;36919:15;36953:4;36950:1;36943:15;36970:180;37018:77;37015:1;37008:88;37115:4;37112:1;37105:15;37139:4;37136:1;37129:15;37156:180;37204:77;37201:1;37194:88;37301:4;37298:1;37291:15;37325:4;37322:1;37315:15;37342:180;37390:77;37387:1;37380:88;37487:4;37484:1;37477:15;37511:4;37508:1;37501:15;37528:180;37576:77;37573:1;37566:88;37673:4;37670:1;37663:15;37697:4;37694:1;37687:15;37714:117;37823:1;37820;37813:12;37837:117;37946:1;37943;37936:12;37960:117;38069:1;38066;38059:12;38083:117;38192:1;38189;38182:12;38206:102;38247:6;38298:2;38294:7;38289:2;38282:5;38278:14;38274:28;38264:38;;38206:102;;;:::o;38314:230::-;38454:34;38450:1;38442:6;38438:14;38431:58;38523:13;38518:2;38510:6;38506:15;38499:38;38314:230;:::o;38550:237::-;38690:34;38686:1;38678:6;38674:14;38667:58;38759:20;38754:2;38746:6;38742:15;38735:45;38550:237;:::o;38793:225::-;38933:34;38929:1;38921:6;38917:14;38910:58;39002:8;38997:2;38989:6;38985:15;38978:33;38793:225;:::o;39024:224::-;39164:34;39160:1;39152:6;39148:14;39141:58;39233:7;39228:2;39220:6;39216:15;39209:32;39024:224;:::o;39254:178::-;39394:30;39390:1;39382:6;39378:14;39371:54;39254:178;:::o;39438:223::-;39578:34;39574:1;39566:6;39562:14;39555:58;39647:6;39642:2;39634:6;39630:15;39623:31;39438:223;:::o;39667:175::-;39807:27;39803:1;39795:6;39791:14;39784:51;39667:175;:::o;39848:231::-;39988:34;39984:1;39976:6;39972:14;39965:58;40057:14;40052:2;40044:6;40040:15;40033:39;39848:231;:::o;40085:243::-;40225:34;40221:1;40213:6;40209:14;40202:58;40294:26;40289:2;40281:6;40277:15;40270:51;40085:243;:::o;40334:229::-;40474:34;40470:1;40462:6;40458:14;40451:58;40543:12;40538:2;40530:6;40526:15;40519:37;40334:229;:::o;40569:228::-;40709:34;40705:1;40697:6;40693:14;40686:58;40778:11;40773:2;40765:6;40761:15;40754:36;40569:228;:::o;40803:233::-;40943:34;40939:1;40931:6;40927:14;40920:58;41012:16;41007:2;40999:6;40995:15;40988:41;40803:233;:::o;41042:182::-;41182:34;41178:1;41170:6;41166:14;41159:58;41042:182;:::o;41230:231::-;41370:34;41366:1;41358:6;41354:14;41347:58;41439:14;41434:2;41426:6;41422:15;41415:39;41230:231;:::o;41467:182::-;41607:34;41603:1;41595:6;41591:14;41584:58;41467:182;:::o;41655:234::-;41795:34;41791:1;41783:6;41779:14;41772:58;41864:17;41859:2;41851:6;41847:15;41840:42;41655:234;:::o;41895:220::-;42035:34;42031:1;42023:6;42019:14;42012:58;42104:3;42099:2;42091:6;42087:15;42080:28;41895:220;:::o;42121:114::-;;:::o;42241:236::-;42381:34;42377:1;42369:6;42365:14;42358:58;42450:19;42445:2;42437:6;42433:15;42426:44;42241:236;:::o;42483:231::-;42623:34;42619:1;42611:6;42607:14;42600:58;42692:14;42687:2;42679:6;42675:15;42668:39;42483:231;:::o;42720:223::-;42860:34;42856:1;42848:6;42844:14;42837:58;42929:6;42924:2;42916:6;42912:15;42905:31;42720:223;:::o;42949:181::-;43089:33;43085:1;43077:6;43073:14;43066:57;42949:181;:::o;43136:122::-;43209:24;43227:5;43209:24;:::i;:::-;43202:5;43199:35;43189:63;;43248:1;43245;43238:12;43189:63;43136:122;:::o;43264:116::-;43334:21;43349:5;43334:21;:::i;:::-;43327:5;43324:32;43314:60;;43370:1;43367;43360:12;43314:60;43264:116;:::o;43386:120::-;43458:23;43475:5;43458:23;:::i;:::-;43451:5;43448:34;43438:62;;43496:1;43493;43486:12;43438:62;43386:120;:::o;43512:122::-;43585:24;43603:5;43585:24;:::i;:::-;43578:5;43575:35;43565:63;;43624:1;43621;43614:12;43565:63;43512:122;:::o
Swarm Source
ipfs://35909ab08e194c3aaf7c73a371b0ab1d3d313b5491a3391cfd59c1e25833924c
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.