Token Crotopia
Overview CRC721
Total Supply:
556 CTP
Holders:
211 addresses
Contract:
Balance
2 CTP
[ Download CSV Export ]
[ Download CSV Export ]
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
crotopia
Compiler Version
v0.8.4+commit.c7e474f2
Contract Source Code (Solidity)
/** *Submitted for verification at cronoscan.com on 2022-09-09 */ // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts (last updated v4.7.0) (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; uint8 private constant _ADDRESS_LENGTH = 20; /** * @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); } /** * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation. */ function toHexString(address addr) internal pure returns (string memory) { return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH); } } // 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 (last updated v4.7.0) (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 Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { 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.7.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 /// @solidity memory-safe-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.7.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 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.7.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: address zero is not a valid owner"); 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: invalid token ID"); 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) { _requireMinted(tokenId); 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 token owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { _requireMinted(tokenId); 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: caller is not token 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: caller is not token 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) { 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 an {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 an {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 Reverts if the `tokenId` has not been minted yet. */ function _requireMinted(uint256 tokenId) internal view virtual { require(_exists(tokenId), "ERC721: invalid token ID"); } /** * @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 { /// @solidity memory-safe-assembly 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: crotopi.sol //SPDX-License-Identifier: No License pragma solidity 0.8.4; contract crotopia is ERC721Enumerable, Ownable { using Strings for uint256; bool public whitelistPeriod; string public baseURI; string public baseExtension = ".json"; uint256 public cost = 850 ether; // price per NFT for Public Sale uint256 public wlCost = 750 ether; //price per NFT for WL members uint256 public maxSupply = 1000; // max supply of NFT collection uint256 public maxMintAmount = 20; // max mint per transaction (must be => than line 1241 - mint(msg.sender, 10);) bool public paused = false; mapping(address => bool) public whitelisted; constructor(string memory _initBaseURI) ERC721("Crotopia", "CTP") { setBaseURI(_initBaseURI); mint(20); // Must be lower than line 1231 | This is how many is minted FREE to owner upon deployment } // internal function _baseURI() internal view virtual override returns (string memory) { return baseURI; } // Public mint function function mint(uint256 _mintAmount) public payable { uint256 supply = totalSupply(); require(!paused, "Contract is Paused"); require(!whitelistPeriod, "WhitelistPeriod is ON"); require(_mintAmount > 0, "You can't mint 0 NFTs"); require(_mintAmount <= maxMintAmount, "Minting more than the allowed per transaction"); require(supply + _mintAmount <= maxSupply, "Supply exceeded from the total Supply"); if (msg.sender != owner() ) { require(msg.value >= cost * _mintAmount, "Must Pay Required Cost"); } for (uint256 i = 1; i <= _mintAmount; i++) { _safeMint(msg.sender, supply + i); } } // Whitelist mint function function whiteListMint(uint256 _mintAmount) public payable { uint256 supply = totalSupply(); require(!paused, "Contract is Paused"); require(whitelistPeriod, "WhitelistPeriod is OFF"); require(_mintAmount > 0, "You can't mint 0 NFTs"); require(_mintAmount <= maxMintAmount, "Minting more than the allowed per transaction"); require(supply + _mintAmount <= maxSupply, "Supply exceeded from the total Supply"); if (msg.sender != owner()) { require(whitelisted[msg.sender] == true, "User is Not WhiteListed"); require(msg.value >= wlCost * _mintAmount, "Must Pay Required Cost"); } for (uint256 i = 1; i <= _mintAmount; i++) { _safeMint(msg.sender, supply + i); } } 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)) : ""; } // Whitelist Checker for Address function isWhitelist(address _user) public view returns (bool) { return whitelisted[_user]; } // All tokenURI's for an address function walletOfOwnersMetadata(address _owner) public view returns (string[] memory){ uint256 ownerTokenCount = balanceOf(_owner); uint256[] memory tokenIds = new uint256[](ownerTokenCount); string[] memory tokenURIs = new string[](ownerTokenCount); for (uint256 i; i < ownerTokenCount; i++) { tokenIds[i] = tokenOfOwnerByIndex(_owner, i); tokenURIs[i] = tokenURI(tokenIds[i]); } return tokenURIs; } //<<<<<<<------only owner functions------>>>>>>> // Setting Public and Whitelist Costs function setCost(uint256 _newCost) public onlyOwner() { cost = _newCost; } function setwlCost(uint256 _newWlCost) public onlyOwner(){ wlCost = _newWlCost; } // Setting Max Number of NFT's minting per transaction 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; } // ON and OFF switches for WhiteList and Pause function pause(bool _state) public onlyOwner { paused = _state; } function setwhitelistPeriod(bool _state) public onlyOwner { whitelistPeriod = _state; } //Single User WhiteList Addition and Removing function whitelistUser(address _user) public onlyOwner { require(_user != address(0), "Inputting Dead Account"); whitelisted[_user] = true; } function removeWhitelistUser(address _user) public onlyOwner { require(_user != address(0), "Inputting Dead Account"); whitelisted[_user] = false; } //Multiple Addition and removing WhiteList Users function whitelistUsers(address[] memory _users) public onlyOwner { for( uint i; i< _users.length; i++){ require(_users[i] != address(0)); whitelisted[_users[i]] = true; } } function removeWhitelistUsers(address[] memory _users) public onlyOwner { for( uint i; i< _users.length; i++){ require(_users[i] != address(0)); whitelisted[_users[i]] = false; } } //Withdraw Funds function withdraw() public onlyOwner { (bool wavy, ) = payable(0xe390fe5cd2b3c8Af2540bB85264176416D34cFc6).call{value: address(this).balance * 31/ 100}(""); require(wavy); //replace it with wavy's address (bool kami, ) = payable(0x29769e04275795c87446C7Ee101021C6a675CF06).call{value: address(this).balance}(""); require(kami); //replace it with kami's address } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_initBaseURI","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"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":[{"internalType":"address","name":"_user","type":"address"}],"name":"isWhitelist","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":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","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":[{"internalType":"address[]","name":"_users","type":"address[]"}],"name":"removeWhitelistUsers","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":"bool","name":"_state","type":"bool"}],"name":"setwhitelistPeriod","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newWlCost","type":"uint256"}],"name":"setwlCost","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":"walletOfOwnersMetadata","outputs":[{"internalType":"string[]","name":"","type":"string[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"whiteListMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"whitelistPeriod","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"whitelistUser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_users","type":"address[]"}],"name":"whitelistUsers","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":"nonpayable","type":"function"},{"inputs":[],"name":"wlCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60806040526040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600c9080519060200190620000519291906200106d565b50682e141ea081ca080000600d556828a857425466f80000600e556103e8600f5560146010556000601160006101000a81548160ff0219169083151502179055503480156200009f57600080fd5b5060405162006c0738038062006c078339818101604052810190620000c59190620011d2565b6040518060400160405280600881526020017f43726f746f7069610000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f43545000000000000000000000000000000000000000000000000000000000008152508160009080519060200190620001499291906200106d565b508060019080519060200190620001629291906200106d565b5050506200018562000179620001af60201b60201c565b620001b760201b60201c565b62000196816200027d60201b60201c565b620001a86014620002a960201b60201c565b5062001be3565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6200028d6200052860201b60201c565b80600b9080519060200190620002a59291906200106d565b5050565b6000620002bb620005b960201b60201c565b9050601160009054906101000a900460ff161562000310576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000307906200158b565b60405180910390fd5b600a60149054906101000a900460ff161562000363576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200035a90620014bf565b60405180910390fd5b60008211620003a9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003a09062001525565b60405180910390fd5b601054821115620003f1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003e890620015cf565b60405180910390fd5b600f5482826200040291906200167d565b111562000446576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200043d90620015ad565b60405180910390fd5b62000456620005c660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614620004df5781600d54620004999190620016da565b341015620004de576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004d59062001547565b60405180910390fd5b5b6000600190505b82811162000523576200050d3382846200050191906200167d565b620005f060201b60201c565b80806200051a9062001882565b915050620004e6565b505050565b62000538620001af60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200055e620005c660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620005b7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005ae9062001569565b60405180910390fd5b565b6000600880549050905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620006128282604051806020016040528060008152506200061660201b60201c565b5050565b6200062883836200068460201b60201c565b6200063d60008484846200087e60201b60201c565b6200067f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000676906200147b565b60405180910390fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620006f7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006ee9062001503565b60405180910390fd5b620007088162000a3860201b60201c565b156200074b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000742906200149d565b60405180910390fd5b6200075f6000838362000aa460201b60201c565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620007b191906200167d565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46200087a6000838362000beb60201b60201c565b5050565b6000620008ac8473ffffffffffffffffffffffffffffffffffffffff1662000bf060201b620021e71760201c565b1562000a2b578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02620008de620001af60201b60201c565b8786866040518563ffffffff1660e01b815260040162000902949392919062001427565b602060405180830381600087803b1580156200091d57600080fd5b505af19250505080156200095157506040513d601f19601f820116820180604052508101906200094e9190620011a6565b60015b620009da573d806000811462000984576040519150601f19603f3d011682016040523d82523d6000602084013e62000989565b606091505b50600081511415620009d2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009c9906200147b565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505062000a30565b600190505b949350505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b62000abc83838362000c1360201b6200220a1760201c565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141562000b095762000b038162000c1860201b60201c565b62000b51565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161462000b505762000b4f838262000c6160201b60201c565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000b9e5762000b988162000dde60201b60201c565b62000be6565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161462000be55762000be4828262000f2660201b60201c565b5b5b505050565b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600162000c7b8462000fb260201b6200160a1760201c565b62000c8791906200173b565b905060006007600084815260200190815260200160002054905081811462000d6d576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905062000df491906200173b565b905060006009600084815260200190815260200160002054905060006008838154811062000e4b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050806008838154811062000e94577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548062000f0a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b600062000f3e8362000fb260201b6200160a1760201c565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562001026576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200101d90620014e1565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b8280546200107b9062001816565b90600052602060002090601f0160209004810192826200109f5760008555620010eb565b82601f10620010ba57805160ff1916838001178555620010eb565b82800160010185558215620010eb579182015b82811115620010ea578251825591602001919060010190620010cd565b5b509050620010fa9190620010fe565b5090565b5b8082111562001119576000816000905550600101620010ff565b5090565b6000620011346200112e846200161a565b620015f1565b9050828152602081018484840111156200114d57600080fd5b6200115a848285620017e0565b509392505050565b600081519050620011738162001bc9565b92915050565b600082601f8301126200118b57600080fd5b81516200119d8482602086016200111d565b91505092915050565b600060208284031215620011b957600080fd5b6000620011c98482850162001162565b91505092915050565b600060208284031215620011e557600080fd5b600082015167ffffffffffffffff8111156200120057600080fd5b6200120e8482850162001179565b91505092915050565b620012228162001776565b82525050565b6000620012358262001650565b6200124181856200165b565b935062001253818560208601620017e0565b6200125e816200195d565b840191505092915050565b6000620012786032836200166c565b915062001285826200196e565b604082019050919050565b60006200129f601c836200166c565b9150620012ac82620019bd565b602082019050919050565b6000620012c66015836200166c565b9150620012d382620019e6565b602082019050919050565b6000620012ed6029836200166c565b9150620012fa8262001a0f565b604082019050919050565b6000620013146020836200166c565b9150620013218262001a5e565b602082019050919050565b60006200133b6015836200166c565b9150620013488262001a87565b602082019050919050565b6000620013626016836200166c565b91506200136f8262001ab0565b602082019050919050565b6000620013896020836200166c565b9150620013968262001ad9565b602082019050919050565b6000620013b06012836200166c565b9150620013bd8262001b02565b602082019050919050565b6000620013d76025836200166c565b9150620013e48262001b2b565b604082019050919050565b6000620013fe602d836200166c565b91506200140b8262001b7a565b604082019050919050565b6200142181620017d6565b82525050565b60006080820190506200143e600083018762001217565b6200144d602083018662001217565b6200145c604083018562001416565b818103606083015262001470818462001228565b905095945050505050565b60006020820190508181036000830152620014968162001269565b9050919050565b60006020820190508181036000830152620014b88162001290565b9050919050565b60006020820190508181036000830152620014da81620012b7565b9050919050565b60006020820190508181036000830152620014fc81620012de565b9050919050565b600060208201905081810360008301526200151e8162001305565b9050919050565b6000602082019050818103600083015262001540816200132c565b9050919050565b60006020820190508181036000830152620015628162001353565b9050919050565b6000602082019050818103600083015262001584816200137a565b9050919050565b60006020820190508181036000830152620015a681620013a1565b9050919050565b60006020820190508181036000830152620015c881620013c8565b9050919050565b60006020820190508181036000830152620015ea81620013ef565b9050919050565b6000620015fd62001610565b90506200160b82826200184c565b919050565b6000604051905090565b600067ffffffffffffffff8211156200163857620016376200192e565b5b62001643826200195d565b9050602081019050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b60006200168a82620017d6565b91506200169783620017d6565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115620016cf57620016ce620018d0565b5b828201905092915050565b6000620016e782620017d6565b9150620016f483620017d6565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562001730576200172f620018d0565b5b828202905092915050565b60006200174882620017d6565b91506200175583620017d6565b9250828210156200176b576200176a620018d0565b5b828203905092915050565b60006200178382620017b6565b9050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b8381101562001800578082015181840152602081019050620017e3565b8381111562001810576000848401525b50505050565b600060028204905060018216806200182f57607f821691505b60208210811415620018465762001845620018ff565b5b50919050565b62001857826200195d565b810181811067ffffffffffffffff821117156200187957620018786200192e565b5b80604052505050565b60006200188f82620017d6565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415620018c557620018c4620018d0565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f57686974656c697374506572696f64206973204f4e0000000000000000000000600082015250565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f596f752063616e2774206d696e742030204e4654730000000000000000000000600082015250565b7f4d7573742050617920526571756972656420436f737400000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f436f6e7472616374206973205061757365640000000000000000000000000000600082015250565b7f537570706c792065786365656465642066726f6d2074686520746f74616c205360008201527f7570706c79000000000000000000000000000000000000000000000000000000602082015250565b7f4d696e74696e67206d6f7265207468616e2074686520616c6c6f77656420706560008201527f72207472616e73616374696f6e00000000000000000000000000000000000000602082015250565b62001bd4816200178a565b811462001be057600080fd5b50565b6150148062001bf36000396000f3fe6080604052600436106102675760003560e01c80636c0360eb11610144578063c6682862116100b6578063d936547e1161007a578063d936547e146108fc578063da3ef23f14610939578063dab12b3a14610962578063e985e9c51461099f578063edec5f27146109dc578063f2fde38b14610a0557610267565b8063c668286214610801578063c683630d1461082c578063c87b56dd14610869578063d5abeb01146108a6578063d70a28d1146108d157610267565b806395d89b411161010857806395d89b4114610714578063a0712d681461073f578063a22cb4651461075b578063b2e1311114610784578063b48e665e146107ad578063b88d4fde146107d857610267565b80636c0360eb1461064157806370a082311461066c578063715018a6146106a95780637f00c7a6146106c05780638da5cb5b146106e957610267565b806330cc7ae0116101dd5780634c59547f116101a15780634c59547f146105215780634f6ccce71461054a57806355f804b3146105875780635c975abb146105b05780636352211e146105db5780636a972e1a1461061857610267565b806330cc7ae0146104665780633ccfd60b1461048f57806342842e0e146104a657806344a0d68a146104cf5780634a4c560d146104f857610267565b8063095ea7b31161022f578063095ea7b31461035657806313faede61461037f57806318160ddd146103aa578063239c70ae146103d557806323b872dd146104005780632f745c591461042957610267565b806301ffc9a71461026c57806302329a29146102a957806302e001ef146102d257806306fdde03146102ee578063081812fc14610319575b600080fd5b34801561027857600080fd5b50610293600480360381019061028e9190613a19565b610a2e565b6040516102a09190614143565b60405180910390f35b3480156102b557600080fd5b506102d060048036038101906102cb91906139f0565b610aa8565b005b6102ec60048036038101906102e79190613aac565b610acd565b005b3480156102fa57600080fd5b50610303610da9565b604051610310919061415e565b60405180910390f35b34801561032557600080fd5b50610340600480360381019061033b9190613aac565b610e3b565b60405161034d91906140ba565b60405180910390f35b34801561036257600080fd5b5061037d60048036038101906103789190613973565b610e81565b005b34801561038b57600080fd5b50610394610f99565b6040516103a191906144a0565b60405180910390f35b3480156103b657600080fd5b506103bf610f9f565b6040516103cc91906144a0565b60405180910390f35b3480156103e157600080fd5b506103ea610fac565b6040516103f791906144a0565b60405180910390f35b34801561040c57600080fd5b506104276004803603810190610422919061386d565b610fb2565b005b34801561043557600080fd5b50610450600480360381019061044b9190613973565b611012565b60405161045d91906144a0565b60405180910390f35b34801561047257600080fd5b5061048d60048036038101906104889190613808565b6110b7565b005b34801561049b57600080fd5b506104a461118a565b005b3480156104b257600080fd5b506104cd60048036038101906104c8919061386d565b6112c2565b005b3480156104db57600080fd5b506104f660048036038101906104f19190613aac565b6112e2565b005b34801561050457600080fd5b5061051f600480360381019061051a9190613808565b6112f4565b005b34801561052d57600080fd5b50610548600480360381019061054391906139f0565b6113c7565b005b34801561055657600080fd5b50610571600480360381019061056c9190613aac565b6113ec565b60405161057e91906144a0565b60405180910390f35b34801561059357600080fd5b506105ae60048036038101906105a99190613a6b565b611483565b005b3480156105bc57600080fd5b506105c56114a5565b6040516105d29190614143565b60405180910390f35b3480156105e757600080fd5b5061060260048036038101906105fd9190613aac565b6114b8565b60405161060f91906140ba565b60405180910390f35b34801561062457600080fd5b5061063f600480360381019061063a9190613aac565b61156a565b005b34801561064d57600080fd5b5061065661157c565b604051610663919061415e565b60405180910390f35b34801561067857600080fd5b50610693600480360381019061068e9190613808565b61160a565b6040516106a091906144a0565b60405180910390f35b3480156106b557600080fd5b506106be6116c2565b005b3480156106cc57600080fd5b506106e760048036038101906106e29190613aac565b6116d6565b005b3480156106f557600080fd5b506106fe6116e8565b60405161070b91906140ba565b60405180910390f35b34801561072057600080fd5b50610729611712565b604051610736919061415e565b60405180910390f35b61075960048036038101906107549190613aac565b6117a4565b005b34801561076757600080fd5b50610782600480360381019061077d9190613937565b6119ee565b005b34801561079057600080fd5b506107ab60048036038101906107a691906139af565b611a04565b005b3480156107b957600080fd5b506107c2611b41565b6040516107cf9190614143565b60405180910390f35b3480156107e457600080fd5b506107ff60048036038101906107fa91906138bc565b611b54565b005b34801561080d57600080fd5b50610816611bb6565b604051610823919061415e565b60405180910390f35b34801561083857600080fd5b50610853600480360381019061084e9190613808565b611c44565b6040516108609190614143565b60405180910390f35b34801561087557600080fd5b50610890600480360381019061088b9190613aac565b611c9a565b60405161089d919061415e565b60405180910390f35b3480156108b257600080fd5b506108bb611d44565b6040516108c891906144a0565b60405180910390f35b3480156108dd57600080fd5b506108e6611d4a565b6040516108f391906144a0565b60405180910390f35b34801561090857600080fd5b50610923600480360381019061091e9190613808565b611d50565b6040516109309190614143565b60405180910390f35b34801561094557600080fd5b50610960600480360381019061095b9190613a6b565b611d70565b005b34801561096e57600080fd5b5061098960048036038101906109849190613808565b611d92565b6040516109969190614121565b60405180910390f35b3480156109ab57600080fd5b506109c660048036038101906109c19190613831565b611f92565b6040516109d39190614143565b60405180910390f35b3480156109e857600080fd5b50610a0360048036038101906109fe91906139af565b612026565b005b348015610a1157600080fd5b50610a2c6004803603810190610a279190613808565b612163565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610aa15750610aa08261220f565b5b9050919050565b610ab06122f1565b80601160006101000a81548160ff02191690831515021790555050565b6000610ad7610f9f565b9050601160009054906101000a900460ff1615610b29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2090614360565b60405180910390fd5b600a60149054906101000a900460ff16610b78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6f90614460565b60405180910390fd5b60008211610bbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb290614300565b60405180910390fd5b601054821115610c00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf790614420565b60405180910390fd5b600f548282610c0f919061461b565b1115610c50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c47906143c0565b60405180910390fd5b610c586116e8565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610d6e5760011515601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514610d1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1490614240565b60405180910390fd5b81600e54610d2b91906146a2565b341015610d6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6490614320565b60405180910390fd5b5b6000600190505b828111610da457610d91338284610d8c919061461b565b61236f565b8080610d9c90614849565b915050610d75565b505050565b606060008054610db8906147e6565b80601f0160208091040260200160405190810160405280929190818152602001828054610de4906147e6565b8015610e315780601f10610e0657610100808354040283529160200191610e31565b820191906000526020600020905b815481529060010190602001808311610e1457829003601f168201915b5050505050905090565b6000610e468261238d565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610e8c826114b8565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610efd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef490614400565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610f1c6123d8565b73ffffffffffffffffffffffffffffffffffffffff161480610f4b5750610f4a81610f456123d8565b611f92565b5b610f8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f81906142c0565b60405180910390fd5b610f9483836123e0565b505050565b600d5481565b6000600880549050905090565b60105481565b610fc3610fbd6123d8565b82612499565b611002576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff990614480565b60405180910390fd5b61100d83838361252e565b505050565b600061101d8361160a565b821061105e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105590614180565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b6110bf6122f1565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561112f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611126906143a0565b60405180910390fd5b6000601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6111926122f1565b600073e390fe5cd2b3c8af2540bb85264176416d34cfc673ffffffffffffffffffffffffffffffffffffffff166064601f476111ce91906146a2565b6111d89190614671565b6040516111e4906140a5565b60006040518083038185875af1925050503d8060008114611221576040519150601f19603f3d011682016040523d82523d6000602084013e611226565b606091505b505090508061123457600080fd5b60007329769e04275795c87446c7ee101021c6a675cf0673ffffffffffffffffffffffffffffffffffffffff164760405161126e906140a5565b60006040518083038185875af1925050503d80600081146112ab576040519150601f19603f3d011682016040523d82523d6000602084013e6112b0565b606091505b50509050806112be57600080fd5b5050565b6112dd83838360405180602001604052806000815250611b54565b505050565b6112ea6122f1565b80600d8190555050565b6112fc6122f1565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561136c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611363906143a0565b60405180910390fd5b6001601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6113cf6122f1565b80600a60146101000a81548160ff02191690831515021790555050565b60006113f6610f9f565b8210611437576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142e90614440565b60405180910390fd5b60088281548110611471577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b61148b6122f1565b80600b90805190602001906114a1929190613596565b5050565b601160009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611561576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611558906143e0565b60405180910390fd5b80915050919050565b6115726122f1565b80600e8190555050565b600b8054611589906147e6565b80601f01602080910402602001604051908101604052809291908181526020018280546115b5906147e6565b80156116025780601f106115d757610100808354040283529160200191611602565b820191906000526020600020905b8154815290600101906020018083116115e557829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561167b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611672906142a0565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6116ca6122f1565b6116d46000612795565b565b6116de6122f1565b8060108190555050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054611721906147e6565b80601f016020809104026020016040519081016040528092919081815260200182805461174d906147e6565b801561179a5780601f1061176f5761010080835404028352916020019161179a565b820191906000526020600020905b81548152906001019060200180831161177d57829003601f168201915b5050505050905090565b60006117ae610f9f565b9050601160009054906101000a900460ff1615611800576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f790614360565b60405180910390fd5b600a60149054906101000a900460ff1615611850576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184790614220565b60405180910390fd5b60008211611893576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188a90614300565b60405180910390fd5b6010548211156118d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118cf90614420565b60405180910390fd5b600f5482826118e7919061461b565b1115611928576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191f906143c0565b60405180910390fd5b6119306116e8565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146119b35781600d5461197091906146a2565b3410156119b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a990614320565b60405180910390fd5b5b6000600190505b8281116119e9576119d63382846119d1919061461b565b61236f565b80806119e190614849565b9150506119ba565b505050565b611a006119f96123d8565b838361285b565b5050565b611a0c6122f1565b60005b8151811015611b3d57600073ffffffffffffffffffffffffffffffffffffffff16828281518110611a69577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff161415611a9257600080fd5b600060126000848481518110611ad1577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611b3590614849565b915050611a0f565b5050565b600a60149054906101000a900460ff1681565b611b65611b5f6123d8565b83612499565b611ba4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9b90614480565b60405180910390fd5b611bb0848484846129c8565b50505050565b600c8054611bc3906147e6565b80601f0160208091040260200160405190810160405280929190818152602001828054611bef906147e6565b8015611c3c5780601f10611c1157610100808354040283529160200191611c3c565b820191906000526020600020905b815481529060010190602001808311611c1f57829003601f168201915b505050505081565b6000601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6060611ca582612a24565b611ce4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cdb90614380565b60405180910390fd5b6000611cee612a90565b90506000815111611d0e5760405180602001604052806000815250611d3c565b80611d1884612b22565b600c604051602001611d2c93929190614074565b6040516020818303038152906040525b915050919050565b600f5481565b600e5481565b60126020528060005260406000206000915054906101000a900460ff1681565b611d786122f1565b80600c9080519060200190611d8e929190613596565b5050565b60606000611d9f8361160a565b905060008167ffffffffffffffff811115611de3577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015611e115781602001602082028036833780820191505090505b50905060008267ffffffffffffffff811115611e56577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015611e8957816020015b6060815260200190600190039081611e745790505b50905060005b83811015611f8657611ea18682611012565b838281518110611eda577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001018181525050611f2f838281518110611f22577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151611c9a565b828281518110611f68577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101819052508080611f7e90614849565b915050611e8f565b50809350505050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61202e6122f1565b60005b815181101561215f57600073ffffffffffffffffffffffffffffffffffffffff1682828151811061208b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1614156120b457600080fd5b6001601260008484815181106120f3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061215790614849565b915050612031565b5050565b61216b6122f1565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156121db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d2906141c0565b60405180910390fd5b6121e481612795565b50565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806122da57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806122ea57506122e982612ccf565b5b9050919050565b6122f96123d8565b73ffffffffffffffffffffffffffffffffffffffff166123176116e8565b73ffffffffffffffffffffffffffffffffffffffff161461236d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236490614340565b60405180910390fd5b565b612389828260405180602001604052806000815250612d39565b5050565b61239681612a24565b6123d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123cc906143e0565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16612453836114b8565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000806124a5836114b8565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806124e757506124e68185611f92565b5b8061252557508373ffffffffffffffffffffffffffffffffffffffff1661250d84610e3b565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661254e826114b8565b73ffffffffffffffffffffffffffffffffffffffff16146125a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161259b906141e0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612614576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161260b90614260565b60405180910390fd5b61261f838383612d94565b61262a6000826123e0565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461267a91906146fc565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546126d1919061461b565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612790838383612ea8565b505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156128ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128c190614280565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516129bb9190614143565b60405180910390a3505050565b6129d384848461252e565b6129df84848484612ead565b612a1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a15906141a0565b60405180910390fd5b50505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b6060600b8054612a9f906147e6565b80601f0160208091040260200160405190810160405280929190818152602001828054612acb906147e6565b8015612b185780601f10612aed57610100808354040283529160200191612b18565b820191906000526020600020905b815481529060010190602001808311612afb57829003601f168201915b5050505050905090565b60606000821415612b6a576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612cca565b600082905060005b60008214612b9c578080612b8590614849565b915050600a82612b959190614671565b9150612b72565b60008167ffffffffffffffff811115612bde577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015612c105781602001600182028036833780820191505090505b5090505b60008514612cc357600182612c2991906146fc565b9150600a85612c389190614892565b6030612c44919061461b565b60f81b818381518110612c80577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612cbc9190614671565b9450612c14565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612d438383613044565b612d506000848484612ead565b612d8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d86906141a0565b60405180910390fd5b505050565b612d9f83838361220a565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612de257612ddd8161321e565b612e21565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612e2057612e1f8382613267565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612e6457612e5f816133d4565b612ea3565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612ea257612ea18282613517565b5b5b505050565b505050565b6000612ece8473ffffffffffffffffffffffffffffffffffffffff166121e7565b15613037578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612ef76123d8565b8786866040518563ffffffff1660e01b8152600401612f1994939291906140d5565b602060405180830381600087803b158015612f3357600080fd5b505af1925050508015612f6457506040513d601f19601f82011682018060405250810190612f619190613a42565b60015b612fe7573d8060008114612f94576040519150601f19603f3d011682016040523d82523d6000602084013e612f99565b606091505b50600081511415612fdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fd6906141a0565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061303c565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156130b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130ab906142e0565b60405180910390fd5b6130bd81612a24565b156130fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130f490614200565b60405180910390fd5b61310960008383612d94565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613159919061461b565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461321a60008383612ea8565b5050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016132748461160a565b61327e91906146fc565b9050600060076000848152602001908152602001600020549050818114613363576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506133e891906146fc565b905060006009600084815260200190815260200160002054905060006008838154811061343e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020015490508060088381548110613486577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806134fb577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b60006135228361160a565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b8280546135a2906147e6565b90600052602060002090601f0160209004810192826135c4576000855561360b565b82601f106135dd57805160ff191683800117855561360b565b8280016001018555821561360b579182015b8281111561360a5782518255916020019190600101906135ef565b5b509050613618919061361c565b5090565b5b8082111561363557600081600090555060010161361d565b5090565b600061364c613647846144e0565b6144bb565b9050808382526020820190508285602086028201111561366b57600080fd5b60005b8581101561369b57816136818882613721565b84526020840193506020830192505060018101905061366e565b5050509392505050565b60006136b86136b38461450c565b6144bb565b9050828152602081018484840111156136d057600080fd5b6136db8482856147a4565b509392505050565b60006136f66136f18461453d565b6144bb565b90508281526020810184848401111561370e57600080fd5b6137198482856147a4565b509392505050565b60008135905061373081614f82565b92915050565b600082601f83011261374757600080fd5b8135613757848260208601613639565b91505092915050565b60008135905061376f81614f99565b92915050565b60008135905061378481614fb0565b92915050565b60008151905061379981614fb0565b92915050565b600082601f8301126137b057600080fd5b81356137c08482602086016136a5565b91505092915050565b600082601f8301126137da57600080fd5b81356137ea8482602086016136e3565b91505092915050565b60008135905061380281614fc7565b92915050565b60006020828403121561381a57600080fd5b600061382884828501613721565b91505092915050565b6000806040838503121561384457600080fd5b600061385285828601613721565b925050602061386385828601613721565b9150509250929050565b60008060006060848603121561388257600080fd5b600061389086828701613721565b93505060206138a186828701613721565b92505060406138b2868287016137f3565b9150509250925092565b600080600080608085870312156138d257600080fd5b60006138e087828801613721565b94505060206138f187828801613721565b9350506040613902878288016137f3565b925050606085013567ffffffffffffffff81111561391f57600080fd5b61392b8782880161379f565b91505092959194509250565b6000806040838503121561394a57600080fd5b600061395885828601613721565b925050602061396985828601613760565b9150509250929050565b6000806040838503121561398657600080fd5b600061399485828601613721565b92505060206139a5858286016137f3565b9150509250929050565b6000602082840312156139c157600080fd5b600082013567ffffffffffffffff8111156139db57600080fd5b6139e784828501613736565b91505092915050565b600060208284031215613a0257600080fd5b6000613a1084828501613760565b91505092915050565b600060208284031215613a2b57600080fd5b6000613a3984828501613775565b91505092915050565b600060208284031215613a5457600080fd5b6000613a628482850161378a565b91505092915050565b600060208284031215613a7d57600080fd5b600082013567ffffffffffffffff811115613a9757600080fd5b613aa3848285016137c9565b91505092915050565b600060208284031215613abe57600080fd5b6000613acc848285016137f3565b91505092915050565b6000613ae18383613bb5565b905092915050565b613af281614730565b82525050565b6000613b0382614593565b613b0d81856145c1565b935083602082028501613b1f8561456e565b8060005b85811015613b5b5784840389528151613b3c8582613ad5565b9450613b47836145b4565b925060208a01995050600181019050613b23565b50829750879550505050505092915050565b613b7681614742565b82525050565b6000613b878261459e565b613b9181856145d2565b9350613ba18185602086016147b3565b613baa8161497f565b840191505092915050565b6000613bc0826145a9565b613bca81856145ee565b9350613bda8185602086016147b3565b613be38161497f565b840191505092915050565b6000613bf9826145a9565b613c0381856145ff565b9350613c138185602086016147b3565b613c1c8161497f565b840191505092915050565b6000613c32826145a9565b613c3c8185614610565b9350613c4c8185602086016147b3565b80840191505092915050565b60008154613c65816147e6565b613c6f8186614610565b94506001821660008114613c8a5760018114613c9b57613cce565b60ff19831686528186019350613cce565b613ca48561457e565b60005b83811015613cc657815481890152600182019150602081019050613ca7565b838801955050505b50505092915050565b6000613ce4602b836145ff565b9150613cef82614990565b604082019050919050565b6000613d076032836145ff565b9150613d12826149df565b604082019050919050565b6000613d2a6026836145ff565b9150613d3582614a2e565b604082019050919050565b6000613d4d6025836145ff565b9150613d5882614a7d565b604082019050919050565b6000613d70601c836145ff565b9150613d7b82614acc565b602082019050919050565b6000613d936015836145ff565b9150613d9e82614af5565b602082019050919050565b6000613db66017836145ff565b9150613dc182614b1e565b602082019050919050565b6000613dd96024836145ff565b9150613de482614b47565b604082019050919050565b6000613dfc6019836145ff565b9150613e0782614b96565b602082019050919050565b6000613e1f6029836145ff565b9150613e2a82614bbf565b604082019050919050565b6000613e42603e836145ff565b9150613e4d82614c0e565b604082019050919050565b6000613e656020836145ff565b9150613e7082614c5d565b602082019050919050565b6000613e886015836145ff565b9150613e9382614c86565b602082019050919050565b6000613eab6016836145ff565b9150613eb682614caf565b602082019050919050565b6000613ece6020836145ff565b9150613ed982614cd8565b602082019050919050565b6000613ef16012836145ff565b9150613efc82614d01565b602082019050919050565b6000613f14602f836145ff565b9150613f1f82614d2a565b604082019050919050565b6000613f376016836145ff565b9150613f4282614d79565b602082019050919050565b6000613f5a6025836145ff565b9150613f6582614da2565b604082019050919050565b6000613f7d6018836145ff565b9150613f8882614df1565b602082019050919050565b6000613fa06021836145ff565b9150613fab82614e1a565b604082019050919050565b6000613fc36000836145e3565b9150613fce82614e69565b600082019050919050565b6000613fe6602d836145ff565b9150613ff182614e6c565b604082019050919050565b6000614009602c836145ff565b915061401482614ebb565b604082019050919050565b600061402c6016836145ff565b915061403782614f0a565b602082019050919050565b600061404f602e836145ff565b915061405a82614f33565b604082019050919050565b61406e8161479a565b82525050565b60006140808286613c27565b915061408c8285613c27565b91506140988284613c58565b9150819050949350505050565b60006140b082613fb6565b9150819050919050565b60006020820190506140cf6000830184613ae9565b92915050565b60006080820190506140ea6000830187613ae9565b6140f76020830186613ae9565b6141046040830185614065565b81810360608301526141168184613b7c565b905095945050505050565b6000602082019050818103600083015261413b8184613af8565b905092915050565b60006020820190506141586000830184613b6d565b92915050565b600060208201905081810360008301526141788184613bee565b905092915050565b6000602082019050818103600083015261419981613cd7565b9050919050565b600060208201905081810360008301526141b981613cfa565b9050919050565b600060208201905081810360008301526141d981613d1d565b9050919050565b600060208201905081810360008301526141f981613d40565b9050919050565b6000602082019050818103600083015261421981613d63565b9050919050565b6000602082019050818103600083015261423981613d86565b9050919050565b6000602082019050818103600083015261425981613da9565b9050919050565b6000602082019050818103600083015261427981613dcc565b9050919050565b6000602082019050818103600083015261429981613def565b9050919050565b600060208201905081810360008301526142b981613e12565b9050919050565b600060208201905081810360008301526142d981613e35565b9050919050565b600060208201905081810360008301526142f981613e58565b9050919050565b6000602082019050818103600083015261431981613e7b565b9050919050565b6000602082019050818103600083015261433981613e9e565b9050919050565b6000602082019050818103600083015261435981613ec1565b9050919050565b6000602082019050818103600083015261437981613ee4565b9050919050565b6000602082019050818103600083015261439981613f07565b9050919050565b600060208201905081810360008301526143b981613f2a565b9050919050565b600060208201905081810360008301526143d981613f4d565b9050919050565b600060208201905081810360008301526143f981613f70565b9050919050565b6000602082019050818103600083015261441981613f93565b9050919050565b6000602082019050818103600083015261443981613fd9565b9050919050565b6000602082019050818103600083015261445981613ffc565b9050919050565b600060208201905081810360008301526144798161401f565b9050919050565b6000602082019050818103600083015261449981614042565b9050919050565b60006020820190506144b56000830184614065565b92915050565b60006144c56144d6565b90506144d18282614818565b919050565b6000604051905090565b600067ffffffffffffffff8211156144fb576144fa614950565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561452757614526614950565b5b6145308261497f565b9050602081019050919050565b600067ffffffffffffffff82111561455857614557614950565b5b6145618261497f565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006146268261479a565b91506146318361479a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614666576146656148c3565b5b828201905092915050565b600061467c8261479a565b91506146878361479a565b925082614697576146966148f2565b5b828204905092915050565b60006146ad8261479a565b91506146b88361479a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156146f1576146f06148c3565b5b828202905092915050565b60006147078261479a565b91506147128361479a565b925082821015614725576147246148c3565b5b828203905092915050565b600061473b8261477a565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156147d15780820151818401526020810190506147b6565b838111156147e0576000848401525b50505050565b600060028204905060018216806147fe57607f821691505b6020821081141561481257614811614921565b5b50919050565b6148218261497f565b810181811067ffffffffffffffff821117156148405761483f614950565b5b80604052505050565b60006148548261479a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614887576148866148c3565b5b600182019050919050565b600061489d8261479a565b91506148a88361479a565b9250826148b8576148b76148f2565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f57686974656c697374506572696f64206973204f4e0000000000000000000000600082015250565b7f55736572206973204e6f742057686974654c6973746564000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c0000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f596f752063616e2774206d696e742030204e4654730000000000000000000000600082015250565b7f4d7573742050617920526571756972656420436f737400000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f436f6e7472616374206973205061757365640000000000000000000000000000600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f496e70757474696e672044656164204163636f756e7400000000000000000000600082015250565b7f537570706c792065786365656465642066726f6d2074686520746f74616c205360008201527f7570706c79000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4d696e74696e67206d6f7265207468616e2074686520616c6c6f77656420706560008201527f72207472616e73616374696f6e00000000000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f57686974656c697374506572696f64206973204f464600000000000000000000600082015250565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206e6f7220617070726f766564000000000000000000000000000000000000602082015250565b614f8b81614730565b8114614f9657600080fd5b50565b614fa281614742565b8114614fad57600080fd5b50565b614fb98161474e565b8114614fc457600080fd5b50565b614fd08161479a565b8114614fdb57600080fd5b5056fea26469706673582212201a88c432eb9b017995c4ee703962a2713e60de4f092d88dbcebf842d3fb3c9e664736f6c634300080400330000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000005968747470733a2f2f62616679626569626d6775333568736d6f6670787762626a766379707a72696b66746768617466737067346e61793569706d666b667069676c6f652e697066732e6e667473746f726167652e6c696e6b2f00000000000000
Deployed Bytecode
0x6080604052600436106102675760003560e01c80636c0360eb11610144578063c6682862116100b6578063d936547e1161007a578063d936547e146108fc578063da3ef23f14610939578063dab12b3a14610962578063e985e9c51461099f578063edec5f27146109dc578063f2fde38b14610a0557610267565b8063c668286214610801578063c683630d1461082c578063c87b56dd14610869578063d5abeb01146108a6578063d70a28d1146108d157610267565b806395d89b411161010857806395d89b4114610714578063a0712d681461073f578063a22cb4651461075b578063b2e1311114610784578063b48e665e146107ad578063b88d4fde146107d857610267565b80636c0360eb1461064157806370a082311461066c578063715018a6146106a95780637f00c7a6146106c05780638da5cb5b146106e957610267565b806330cc7ae0116101dd5780634c59547f116101a15780634c59547f146105215780634f6ccce71461054a57806355f804b3146105875780635c975abb146105b05780636352211e146105db5780636a972e1a1461061857610267565b806330cc7ae0146104665780633ccfd60b1461048f57806342842e0e146104a657806344a0d68a146104cf5780634a4c560d146104f857610267565b8063095ea7b31161022f578063095ea7b31461035657806313faede61461037f57806318160ddd146103aa578063239c70ae146103d557806323b872dd146104005780632f745c591461042957610267565b806301ffc9a71461026c57806302329a29146102a957806302e001ef146102d257806306fdde03146102ee578063081812fc14610319575b600080fd5b34801561027857600080fd5b50610293600480360381019061028e9190613a19565b610a2e565b6040516102a09190614143565b60405180910390f35b3480156102b557600080fd5b506102d060048036038101906102cb91906139f0565b610aa8565b005b6102ec60048036038101906102e79190613aac565b610acd565b005b3480156102fa57600080fd5b50610303610da9565b604051610310919061415e565b60405180910390f35b34801561032557600080fd5b50610340600480360381019061033b9190613aac565b610e3b565b60405161034d91906140ba565b60405180910390f35b34801561036257600080fd5b5061037d60048036038101906103789190613973565b610e81565b005b34801561038b57600080fd5b50610394610f99565b6040516103a191906144a0565b60405180910390f35b3480156103b657600080fd5b506103bf610f9f565b6040516103cc91906144a0565b60405180910390f35b3480156103e157600080fd5b506103ea610fac565b6040516103f791906144a0565b60405180910390f35b34801561040c57600080fd5b506104276004803603810190610422919061386d565b610fb2565b005b34801561043557600080fd5b50610450600480360381019061044b9190613973565b611012565b60405161045d91906144a0565b60405180910390f35b34801561047257600080fd5b5061048d60048036038101906104889190613808565b6110b7565b005b34801561049b57600080fd5b506104a461118a565b005b3480156104b257600080fd5b506104cd60048036038101906104c8919061386d565b6112c2565b005b3480156104db57600080fd5b506104f660048036038101906104f19190613aac565b6112e2565b005b34801561050457600080fd5b5061051f600480360381019061051a9190613808565b6112f4565b005b34801561052d57600080fd5b50610548600480360381019061054391906139f0565b6113c7565b005b34801561055657600080fd5b50610571600480360381019061056c9190613aac565b6113ec565b60405161057e91906144a0565b60405180910390f35b34801561059357600080fd5b506105ae60048036038101906105a99190613a6b565b611483565b005b3480156105bc57600080fd5b506105c56114a5565b6040516105d29190614143565b60405180910390f35b3480156105e757600080fd5b5061060260048036038101906105fd9190613aac565b6114b8565b60405161060f91906140ba565b60405180910390f35b34801561062457600080fd5b5061063f600480360381019061063a9190613aac565b61156a565b005b34801561064d57600080fd5b5061065661157c565b604051610663919061415e565b60405180910390f35b34801561067857600080fd5b50610693600480360381019061068e9190613808565b61160a565b6040516106a091906144a0565b60405180910390f35b3480156106b557600080fd5b506106be6116c2565b005b3480156106cc57600080fd5b506106e760048036038101906106e29190613aac565b6116d6565b005b3480156106f557600080fd5b506106fe6116e8565b60405161070b91906140ba565b60405180910390f35b34801561072057600080fd5b50610729611712565b604051610736919061415e565b60405180910390f35b61075960048036038101906107549190613aac565b6117a4565b005b34801561076757600080fd5b50610782600480360381019061077d9190613937565b6119ee565b005b34801561079057600080fd5b506107ab60048036038101906107a691906139af565b611a04565b005b3480156107b957600080fd5b506107c2611b41565b6040516107cf9190614143565b60405180910390f35b3480156107e457600080fd5b506107ff60048036038101906107fa91906138bc565b611b54565b005b34801561080d57600080fd5b50610816611bb6565b604051610823919061415e565b60405180910390f35b34801561083857600080fd5b50610853600480360381019061084e9190613808565b611c44565b6040516108609190614143565b60405180910390f35b34801561087557600080fd5b50610890600480360381019061088b9190613aac565b611c9a565b60405161089d919061415e565b60405180910390f35b3480156108b257600080fd5b506108bb611d44565b6040516108c891906144a0565b60405180910390f35b3480156108dd57600080fd5b506108e6611d4a565b6040516108f391906144a0565b60405180910390f35b34801561090857600080fd5b50610923600480360381019061091e9190613808565b611d50565b6040516109309190614143565b60405180910390f35b34801561094557600080fd5b50610960600480360381019061095b9190613a6b565b611d70565b005b34801561096e57600080fd5b5061098960048036038101906109849190613808565b611d92565b6040516109969190614121565b60405180910390f35b3480156109ab57600080fd5b506109c660048036038101906109c19190613831565b611f92565b6040516109d39190614143565b60405180910390f35b3480156109e857600080fd5b50610a0360048036038101906109fe91906139af565b612026565b005b348015610a1157600080fd5b50610a2c6004803603810190610a279190613808565b612163565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610aa15750610aa08261220f565b5b9050919050565b610ab06122f1565b80601160006101000a81548160ff02191690831515021790555050565b6000610ad7610f9f565b9050601160009054906101000a900460ff1615610b29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2090614360565b60405180910390fd5b600a60149054906101000a900460ff16610b78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6f90614460565b60405180910390fd5b60008211610bbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb290614300565b60405180910390fd5b601054821115610c00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf790614420565b60405180910390fd5b600f548282610c0f919061461b565b1115610c50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c47906143c0565b60405180910390fd5b610c586116e8565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610d6e5760011515601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514610d1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1490614240565b60405180910390fd5b81600e54610d2b91906146a2565b341015610d6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6490614320565b60405180910390fd5b5b6000600190505b828111610da457610d91338284610d8c919061461b565b61236f565b8080610d9c90614849565b915050610d75565b505050565b606060008054610db8906147e6565b80601f0160208091040260200160405190810160405280929190818152602001828054610de4906147e6565b8015610e315780601f10610e0657610100808354040283529160200191610e31565b820191906000526020600020905b815481529060010190602001808311610e1457829003601f168201915b5050505050905090565b6000610e468261238d565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610e8c826114b8565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610efd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef490614400565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610f1c6123d8565b73ffffffffffffffffffffffffffffffffffffffff161480610f4b5750610f4a81610f456123d8565b611f92565b5b610f8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f81906142c0565b60405180910390fd5b610f9483836123e0565b505050565b600d5481565b6000600880549050905090565b60105481565b610fc3610fbd6123d8565b82612499565b611002576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff990614480565b60405180910390fd5b61100d83838361252e565b505050565b600061101d8361160a565b821061105e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105590614180565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b6110bf6122f1565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561112f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611126906143a0565b60405180910390fd5b6000601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6111926122f1565b600073e390fe5cd2b3c8af2540bb85264176416d34cfc673ffffffffffffffffffffffffffffffffffffffff166064601f476111ce91906146a2565b6111d89190614671565b6040516111e4906140a5565b60006040518083038185875af1925050503d8060008114611221576040519150601f19603f3d011682016040523d82523d6000602084013e611226565b606091505b505090508061123457600080fd5b60007329769e04275795c87446c7ee101021c6a675cf0673ffffffffffffffffffffffffffffffffffffffff164760405161126e906140a5565b60006040518083038185875af1925050503d80600081146112ab576040519150601f19603f3d011682016040523d82523d6000602084013e6112b0565b606091505b50509050806112be57600080fd5b5050565b6112dd83838360405180602001604052806000815250611b54565b505050565b6112ea6122f1565b80600d8190555050565b6112fc6122f1565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561136c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611363906143a0565b60405180910390fd5b6001601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6113cf6122f1565b80600a60146101000a81548160ff02191690831515021790555050565b60006113f6610f9f565b8210611437576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142e90614440565b60405180910390fd5b60088281548110611471577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b61148b6122f1565b80600b90805190602001906114a1929190613596565b5050565b601160009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611561576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611558906143e0565b60405180910390fd5b80915050919050565b6115726122f1565b80600e8190555050565b600b8054611589906147e6565b80601f01602080910402602001604051908101604052809291908181526020018280546115b5906147e6565b80156116025780601f106115d757610100808354040283529160200191611602565b820191906000526020600020905b8154815290600101906020018083116115e557829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561167b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611672906142a0565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6116ca6122f1565b6116d46000612795565b565b6116de6122f1565b8060108190555050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054611721906147e6565b80601f016020809104026020016040519081016040528092919081815260200182805461174d906147e6565b801561179a5780601f1061176f5761010080835404028352916020019161179a565b820191906000526020600020905b81548152906001019060200180831161177d57829003601f168201915b5050505050905090565b60006117ae610f9f565b9050601160009054906101000a900460ff1615611800576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f790614360565b60405180910390fd5b600a60149054906101000a900460ff1615611850576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184790614220565b60405180910390fd5b60008211611893576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188a90614300565b60405180910390fd5b6010548211156118d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118cf90614420565b60405180910390fd5b600f5482826118e7919061461b565b1115611928576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191f906143c0565b60405180910390fd5b6119306116e8565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146119b35781600d5461197091906146a2565b3410156119b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a990614320565b60405180910390fd5b5b6000600190505b8281116119e9576119d63382846119d1919061461b565b61236f565b80806119e190614849565b9150506119ba565b505050565b611a006119f96123d8565b838361285b565b5050565b611a0c6122f1565b60005b8151811015611b3d57600073ffffffffffffffffffffffffffffffffffffffff16828281518110611a69577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff161415611a9257600080fd5b600060126000848481518110611ad1577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611b3590614849565b915050611a0f565b5050565b600a60149054906101000a900460ff1681565b611b65611b5f6123d8565b83612499565b611ba4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9b90614480565b60405180910390fd5b611bb0848484846129c8565b50505050565b600c8054611bc3906147e6565b80601f0160208091040260200160405190810160405280929190818152602001828054611bef906147e6565b8015611c3c5780601f10611c1157610100808354040283529160200191611c3c565b820191906000526020600020905b815481529060010190602001808311611c1f57829003601f168201915b505050505081565b6000601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6060611ca582612a24565b611ce4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cdb90614380565b60405180910390fd5b6000611cee612a90565b90506000815111611d0e5760405180602001604052806000815250611d3c565b80611d1884612b22565b600c604051602001611d2c93929190614074565b6040516020818303038152906040525b915050919050565b600f5481565b600e5481565b60126020528060005260406000206000915054906101000a900460ff1681565b611d786122f1565b80600c9080519060200190611d8e929190613596565b5050565b60606000611d9f8361160a565b905060008167ffffffffffffffff811115611de3577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015611e115781602001602082028036833780820191505090505b50905060008267ffffffffffffffff811115611e56577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015611e8957816020015b6060815260200190600190039081611e745790505b50905060005b83811015611f8657611ea18682611012565b838281518110611eda577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001018181525050611f2f838281518110611f22577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151611c9a565b828281518110611f68577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101819052508080611f7e90614849565b915050611e8f565b50809350505050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61202e6122f1565b60005b815181101561215f57600073ffffffffffffffffffffffffffffffffffffffff1682828151811061208b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1614156120b457600080fd5b6001601260008484815181106120f3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061215790614849565b915050612031565b5050565b61216b6122f1565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156121db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d2906141c0565b60405180910390fd5b6121e481612795565b50565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806122da57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806122ea57506122e982612ccf565b5b9050919050565b6122f96123d8565b73ffffffffffffffffffffffffffffffffffffffff166123176116e8565b73ffffffffffffffffffffffffffffffffffffffff161461236d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236490614340565b60405180910390fd5b565b612389828260405180602001604052806000815250612d39565b5050565b61239681612a24565b6123d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123cc906143e0565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16612453836114b8565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000806124a5836114b8565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806124e757506124e68185611f92565b5b8061252557508373ffffffffffffffffffffffffffffffffffffffff1661250d84610e3b565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661254e826114b8565b73ffffffffffffffffffffffffffffffffffffffff16146125a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161259b906141e0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612614576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161260b90614260565b60405180910390fd5b61261f838383612d94565b61262a6000826123e0565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461267a91906146fc565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546126d1919061461b565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612790838383612ea8565b505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156128ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128c190614280565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516129bb9190614143565b60405180910390a3505050565b6129d384848461252e565b6129df84848484612ead565b612a1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a15906141a0565b60405180910390fd5b50505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b6060600b8054612a9f906147e6565b80601f0160208091040260200160405190810160405280929190818152602001828054612acb906147e6565b8015612b185780601f10612aed57610100808354040283529160200191612b18565b820191906000526020600020905b815481529060010190602001808311612afb57829003601f168201915b5050505050905090565b60606000821415612b6a576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612cca565b600082905060005b60008214612b9c578080612b8590614849565b915050600a82612b959190614671565b9150612b72565b60008167ffffffffffffffff811115612bde577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015612c105781602001600182028036833780820191505090505b5090505b60008514612cc357600182612c2991906146fc565b9150600a85612c389190614892565b6030612c44919061461b565b60f81b818381518110612c80577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612cbc9190614671565b9450612c14565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612d438383613044565b612d506000848484612ead565b612d8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d86906141a0565b60405180910390fd5b505050565b612d9f83838361220a565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612de257612ddd8161321e565b612e21565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612e2057612e1f8382613267565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612e6457612e5f816133d4565b612ea3565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612ea257612ea18282613517565b5b5b505050565b505050565b6000612ece8473ffffffffffffffffffffffffffffffffffffffff166121e7565b15613037578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612ef76123d8565b8786866040518563ffffffff1660e01b8152600401612f1994939291906140d5565b602060405180830381600087803b158015612f3357600080fd5b505af1925050508015612f6457506040513d601f19601f82011682018060405250810190612f619190613a42565b60015b612fe7573d8060008114612f94576040519150601f19603f3d011682016040523d82523d6000602084013e612f99565b606091505b50600081511415612fdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fd6906141a0565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061303c565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156130b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130ab906142e0565b60405180910390fd5b6130bd81612a24565b156130fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130f490614200565b60405180910390fd5b61310960008383612d94565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613159919061461b565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461321a60008383612ea8565b5050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016132748461160a565b61327e91906146fc565b9050600060076000848152602001908152602001600020549050818114613363576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506133e891906146fc565b905060006009600084815260200190815260200160002054905060006008838154811061343e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020015490508060088381548110613486577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806134fb577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b60006135228361160a565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b8280546135a2906147e6565b90600052602060002090601f0160209004810192826135c4576000855561360b565b82601f106135dd57805160ff191683800117855561360b565b8280016001018555821561360b579182015b8281111561360a5782518255916020019190600101906135ef565b5b509050613618919061361c565b5090565b5b8082111561363557600081600090555060010161361d565b5090565b600061364c613647846144e0565b6144bb565b9050808382526020820190508285602086028201111561366b57600080fd5b60005b8581101561369b57816136818882613721565b84526020840193506020830192505060018101905061366e565b5050509392505050565b60006136b86136b38461450c565b6144bb565b9050828152602081018484840111156136d057600080fd5b6136db8482856147a4565b509392505050565b60006136f66136f18461453d565b6144bb565b90508281526020810184848401111561370e57600080fd5b6137198482856147a4565b509392505050565b60008135905061373081614f82565b92915050565b600082601f83011261374757600080fd5b8135613757848260208601613639565b91505092915050565b60008135905061376f81614f99565b92915050565b60008135905061378481614fb0565b92915050565b60008151905061379981614fb0565b92915050565b600082601f8301126137b057600080fd5b81356137c08482602086016136a5565b91505092915050565b600082601f8301126137da57600080fd5b81356137ea8482602086016136e3565b91505092915050565b60008135905061380281614fc7565b92915050565b60006020828403121561381a57600080fd5b600061382884828501613721565b91505092915050565b6000806040838503121561384457600080fd5b600061385285828601613721565b925050602061386385828601613721565b9150509250929050565b60008060006060848603121561388257600080fd5b600061389086828701613721565b93505060206138a186828701613721565b92505060406138b2868287016137f3565b9150509250925092565b600080600080608085870312156138d257600080fd5b60006138e087828801613721565b94505060206138f187828801613721565b9350506040613902878288016137f3565b925050606085013567ffffffffffffffff81111561391f57600080fd5b61392b8782880161379f565b91505092959194509250565b6000806040838503121561394a57600080fd5b600061395885828601613721565b925050602061396985828601613760565b9150509250929050565b6000806040838503121561398657600080fd5b600061399485828601613721565b92505060206139a5858286016137f3565b9150509250929050565b6000602082840312156139c157600080fd5b600082013567ffffffffffffffff8111156139db57600080fd5b6139e784828501613736565b91505092915050565b600060208284031215613a0257600080fd5b6000613a1084828501613760565b91505092915050565b600060208284031215613a2b57600080fd5b6000613a3984828501613775565b91505092915050565b600060208284031215613a5457600080fd5b6000613a628482850161378a565b91505092915050565b600060208284031215613a7d57600080fd5b600082013567ffffffffffffffff811115613a9757600080fd5b613aa3848285016137c9565b91505092915050565b600060208284031215613abe57600080fd5b6000613acc848285016137f3565b91505092915050565b6000613ae18383613bb5565b905092915050565b613af281614730565b82525050565b6000613b0382614593565b613b0d81856145c1565b935083602082028501613b1f8561456e565b8060005b85811015613b5b5784840389528151613b3c8582613ad5565b9450613b47836145b4565b925060208a01995050600181019050613b23565b50829750879550505050505092915050565b613b7681614742565b82525050565b6000613b878261459e565b613b9181856145d2565b9350613ba18185602086016147b3565b613baa8161497f565b840191505092915050565b6000613bc0826145a9565b613bca81856145ee565b9350613bda8185602086016147b3565b613be38161497f565b840191505092915050565b6000613bf9826145a9565b613c0381856145ff565b9350613c138185602086016147b3565b613c1c8161497f565b840191505092915050565b6000613c32826145a9565b613c3c8185614610565b9350613c4c8185602086016147b3565b80840191505092915050565b60008154613c65816147e6565b613c6f8186614610565b94506001821660008114613c8a5760018114613c9b57613cce565b60ff19831686528186019350613cce565b613ca48561457e565b60005b83811015613cc657815481890152600182019150602081019050613ca7565b838801955050505b50505092915050565b6000613ce4602b836145ff565b9150613cef82614990565b604082019050919050565b6000613d076032836145ff565b9150613d12826149df565b604082019050919050565b6000613d2a6026836145ff565b9150613d3582614a2e565b604082019050919050565b6000613d4d6025836145ff565b9150613d5882614a7d565b604082019050919050565b6000613d70601c836145ff565b9150613d7b82614acc565b602082019050919050565b6000613d936015836145ff565b9150613d9e82614af5565b602082019050919050565b6000613db66017836145ff565b9150613dc182614b1e565b602082019050919050565b6000613dd96024836145ff565b9150613de482614b47565b604082019050919050565b6000613dfc6019836145ff565b9150613e0782614b96565b602082019050919050565b6000613e1f6029836145ff565b9150613e2a82614bbf565b604082019050919050565b6000613e42603e836145ff565b9150613e4d82614c0e565b604082019050919050565b6000613e656020836145ff565b9150613e7082614c5d565b602082019050919050565b6000613e886015836145ff565b9150613e9382614c86565b602082019050919050565b6000613eab6016836145ff565b9150613eb682614caf565b602082019050919050565b6000613ece6020836145ff565b9150613ed982614cd8565b602082019050919050565b6000613ef16012836145ff565b9150613efc82614d01565b602082019050919050565b6000613f14602f836145ff565b9150613f1f82614d2a565b604082019050919050565b6000613f376016836145ff565b9150613f4282614d79565b602082019050919050565b6000613f5a6025836145ff565b9150613f6582614da2565b604082019050919050565b6000613f7d6018836145ff565b9150613f8882614df1565b602082019050919050565b6000613fa06021836145ff565b9150613fab82614e1a565b604082019050919050565b6000613fc36000836145e3565b9150613fce82614e69565b600082019050919050565b6000613fe6602d836145ff565b9150613ff182614e6c565b604082019050919050565b6000614009602c836145ff565b915061401482614ebb565b604082019050919050565b600061402c6016836145ff565b915061403782614f0a565b602082019050919050565b600061404f602e836145ff565b915061405a82614f33565b604082019050919050565b61406e8161479a565b82525050565b60006140808286613c27565b915061408c8285613c27565b91506140988284613c58565b9150819050949350505050565b60006140b082613fb6565b9150819050919050565b60006020820190506140cf6000830184613ae9565b92915050565b60006080820190506140ea6000830187613ae9565b6140f76020830186613ae9565b6141046040830185614065565b81810360608301526141168184613b7c565b905095945050505050565b6000602082019050818103600083015261413b8184613af8565b905092915050565b60006020820190506141586000830184613b6d565b92915050565b600060208201905081810360008301526141788184613bee565b905092915050565b6000602082019050818103600083015261419981613cd7565b9050919050565b600060208201905081810360008301526141b981613cfa565b9050919050565b600060208201905081810360008301526141d981613d1d565b9050919050565b600060208201905081810360008301526141f981613d40565b9050919050565b6000602082019050818103600083015261421981613d63565b9050919050565b6000602082019050818103600083015261423981613d86565b9050919050565b6000602082019050818103600083015261425981613da9565b9050919050565b6000602082019050818103600083015261427981613dcc565b9050919050565b6000602082019050818103600083015261429981613def565b9050919050565b600060208201905081810360008301526142b981613e12565b9050919050565b600060208201905081810360008301526142d981613e35565b9050919050565b600060208201905081810360008301526142f981613e58565b9050919050565b6000602082019050818103600083015261431981613e7b565b9050919050565b6000602082019050818103600083015261433981613e9e565b9050919050565b6000602082019050818103600083015261435981613ec1565b9050919050565b6000602082019050818103600083015261437981613ee4565b9050919050565b6000602082019050818103600083015261439981613f07565b9050919050565b600060208201905081810360008301526143b981613f2a565b9050919050565b600060208201905081810360008301526143d981613f4d565b9050919050565b600060208201905081810360008301526143f981613f70565b9050919050565b6000602082019050818103600083015261441981613f93565b9050919050565b6000602082019050818103600083015261443981613fd9565b9050919050565b6000602082019050818103600083015261445981613ffc565b9050919050565b600060208201905081810360008301526144798161401f565b9050919050565b6000602082019050818103600083015261449981614042565b9050919050565b60006020820190506144b56000830184614065565b92915050565b60006144c56144d6565b90506144d18282614818565b919050565b6000604051905090565b600067ffffffffffffffff8211156144fb576144fa614950565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561452757614526614950565b5b6145308261497f565b9050602081019050919050565b600067ffffffffffffffff82111561455857614557614950565b5b6145618261497f565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006146268261479a565b91506146318361479a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614666576146656148c3565b5b828201905092915050565b600061467c8261479a565b91506146878361479a565b925082614697576146966148f2565b5b828204905092915050565b60006146ad8261479a565b91506146b88361479a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156146f1576146f06148c3565b5b828202905092915050565b60006147078261479a565b91506147128361479a565b925082821015614725576147246148c3565b5b828203905092915050565b600061473b8261477a565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156147d15780820151818401526020810190506147b6565b838111156147e0576000848401525b50505050565b600060028204905060018216806147fe57607f821691505b6020821081141561481257614811614921565b5b50919050565b6148218261497f565b810181811067ffffffffffffffff821117156148405761483f614950565b5b80604052505050565b60006148548261479a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614887576148866148c3565b5b600182019050919050565b600061489d8261479a565b91506148a88361479a565b9250826148b8576148b76148f2565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f57686974656c697374506572696f64206973204f4e0000000000000000000000600082015250565b7f55736572206973204e6f742057686974654c6973746564000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c0000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f596f752063616e2774206d696e742030204e4654730000000000000000000000600082015250565b7f4d7573742050617920526571756972656420436f737400000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f436f6e7472616374206973205061757365640000000000000000000000000000600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f496e70757474696e672044656164204163636f756e7400000000000000000000600082015250565b7f537570706c792065786365656465642066726f6d2074686520746f74616c205360008201527f7570706c79000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4d696e74696e67206d6f7265207468616e2074686520616c6c6f77656420706560008201527f72207472616e73616374696f6e00000000000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f57686974656c697374506572696f64206973204f464600000000000000000000600082015250565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206e6f7220617070726f766564000000000000000000000000000000000000602082015250565b614f8b81614730565b8114614f9657600080fd5b50565b614fa281614742565b8114614fad57600080fd5b50565b614fb98161474e565b8114614fc457600080fd5b50565b614fd08161479a565b8114614fdb57600080fd5b5056fea26469706673582212201a88c432eb9b017995c4ee703962a2713e60de4f092d88dbcebf842d3fb3c9e664736f6c63430008040033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000005968747470733a2f2f62616679626569626d6775333568736d6f6670787762626a766379707a72696b66746768617466737067346e61793569706d666b667069676c6f652e697066732e6e667473746f726167652e6c696e6b2f00000000000000
-----Decoded View---------------
Arg [0] : _initBaseURI (string): https://bafybeibmgu35hsmofpxwbbjvcypzrikftghatfspg4nay5ipmfkfpigloe.ipfs.nftstorage.link/
-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000059
Arg [2] : 68747470733a2f2f62616679626569626d6775333568736d6f6670787762626a
Arg [3] : 766379707a72696b66746768617466737067346e61793569706d666b66706967
Arg [4] : 6c6f652e697066732e6e667473746f726167652e6c696e6b2f00000000000000
Deployed ByteCode Sourcemap
46253:5608:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40010:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50414:73;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47898:742;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26744:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28257:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27774:417;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46437:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40650:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46643:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28957:336;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40318:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50805:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51471:387;;;;;;;;;;;;;:::i;:::-;;29364:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49766:82;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50647:154;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50491:95;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40840:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50131:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46761:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26455:222;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49852:91;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46369:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26186:207;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5273:103;;;;;;;;;;;;;:::i;:::-;;50007:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4625:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26913:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47207:656;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28500:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51234:209;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46337:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29620:323;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46395:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49063:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48646:373;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46575:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46506:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46792:43;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50233:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49212:451;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28726:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51028:202;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5531:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40010:224;40112:4;40151:35;40136:50;;;:11;:50;;;;:90;;;;40190:36;40214:11;40190:23;:36::i;:::-;40136:90;40129:97;;40010:224;;;:::o;50414:73::-;4511:13;:11;:13::i;:::-;50475:6:::1;50466;;:15;;;;;;;;;;;;;;;;;;50414:73:::0;:::o;47898:742::-;47964:14;47981:13;:11;:13::i;:::-;47964:30;;48010:6;;;;;;;;;;;48009:7;48001:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;48054:15;;;;;;;;;;;48046:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;48125:1;48111:11;:15;48103:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;48182:13;;48167:11;:28;;48159:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;48284:9;;48269:11;48260:6;:20;;;;:::i;:::-;:33;;48252:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;48362:7;:5;:7::i;:::-;48348:21;;:10;:21;;;48344:192;;48417:4;48390:31;;:11;:23;48402:10;48390:23;;;;;;;;;;;;;;;;;;;;;;;;;:31;;;48382:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;48490:11;48481:6;;:20;;;;:::i;:::-;48468:9;:33;;48460:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48344:192;48547:9;48559:1;48547:13;;48542:93;48567:11;48562:1;:16;48542:93;;48594:33;48604:10;48625:1;48616:6;:10;;;;:::i;:::-;48594:9;:33::i;:::-;48580:3;;;;;:::i;:::-;;;;48542:93;;;;47898:742;;:::o;26744:100::-;26798:13;26831:5;26824:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26744:100;:::o;28257:171::-;28333:7;28353:23;28368:7;28353:14;:23::i;:::-;28396:15;:24;28412:7;28396:24;;;;;;;;;;;;;;;;;;;;;28389:31;;28257:171;;;:::o;27774:417::-;27855:13;27871:23;27886:7;27871:14;:23::i;:::-;27855:39;;27919:5;27913:11;;:2;:11;;;;27905:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;28013:5;27997:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;28022:37;28039:5;28046:12;:10;:12::i;:::-;28022:16;:37::i;:::-;27997:62;27975:174;;;;;;;;;;;;:::i;:::-;;;;;;;;;28162:21;28171:2;28175:7;28162:8;:21::i;:::-;27774:417;;;:::o;46437:31::-;;;;:::o;40650:113::-;40711:7;40738:10;:17;;;;40731:24;;40650:113;:::o;46643:33::-;;;;:::o;28957:336::-;29152:41;29171:12;:10;:12::i;:::-;29185:7;29152:18;:41::i;:::-;29144:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;29257:28;29267:4;29273:2;29277:7;29257:9;:28::i;:::-;28957:336;;;:::o;40318:256::-;40415:7;40451:23;40468:5;40451:16;:23::i;:::-;40443:5;:31;40435:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;40540:12;:19;40553:5;40540:19;;;;;;;;;;;;;;;:26;40560:5;40540:26;;;;;;;;;;;;40533:33;;40318:256;;;;:::o;50805:161::-;4511:13;:11;:13::i;:::-;50898:1:::1;50881:19;;:5;:19;;;;50873:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;50955:5;50934:11;:18;50946:5;50934:18;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;50805:161:::0;:::o;51471:387::-;4511:13;:11;:13::i;:::-;51516:9:::1;51539:42;51531:56;;51623:3;51619:2;51595:21;:26;;;;:::i;:::-;:31;;;;:::i;:::-;51531:100;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51515:116;;;51646:4;51638:13;;;::::0;::::1;;51694:9;51717:42;51709:56;;51773:21;51709:90;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51693:106;;;51814:4;51806:13;;;::::0;::::1;;4535:1;;51471:387::o:0;29364:185::-;29502:39;29519:4;29525:2;29529:7;29502:39;;;;;;;;;;;;:16;:39::i;:::-;29364:185;;;:::o;49766:82::-;4511:13;:11;:13::i;:::-;49834:8:::1;49827:4;:15;;;;49766:82:::0;:::o;50647:154::-;4511:13;:11;:13::i;:::-;50734:1:::1;50717:19;;:5;:19;;;;50709:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;50791:4;50770:11;:18;50782:5;50770:18;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;50647:154:::0;:::o;50491:95::-;4511:13;:11;:13::i;:::-;50574:6:::1;50556:15;;:24;;;;;;;;;;;;;;;;;;50491:95:::0;:::o;40840:233::-;40915:7;40951:30;:28;:30::i;:::-;40943:5;:38;40935:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;41048:10;41059:5;41048:17;;;;;;;;;;;;;;;;;;;;;;;;41041:24;;40840:233;;;:::o;50131:98::-;4511:13;:11;:13::i;:::-;50212:11:::1;50202:7;:21;;;;;;;;;;;;:::i;:::-;;50131:98:::0;:::o;46761:26::-;;;;;;;;;;;;;:::o;26455:222::-;26527:7;26547:13;26563:7;:16;26571:7;26563:16;;;;;;;;;;;;;;;;;;;;;26547:32;;26615:1;26598:19;;:5;:19;;;;26590:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;26664:5;26657:12;;;26455:222;;;:::o;49852:91::-;4511:13;:11;:13::i;:::-;49927:10:::1;49918:6;:19;;;;49852:91:::0;:::o;46369:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;26186:207::-;26258:7;26303:1;26286:19;;:5;:19;;;;26278:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26369:9;:16;26379:5;26369:16;;;;;;;;;;;;;;;;26362:23;;26186:207;;;:::o;5273:103::-;4511:13;:11;:13::i;:::-;5338:30:::1;5365:1;5338:18;:30::i;:::-;5273:103::o:0;50007:118::-;4511:13;:11;:13::i;:::-;50102:17:::1;50086:13;:33;;;;50007:118:::0;:::o;4625:87::-;4671:7;4698:6;;;;;;;;;;;4691:13;;4625:87;:::o;26913:104::-;26969:13;27002:7;26995:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26913:104;:::o;47207:656::-;47264:14;47281:13;:11;:13::i;:::-;47264:30;;47310:6;;;;;;;;;;;47309:7;47301:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;47355:15;;;;;;;;;;;47354:16;47346:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;47425:1;47411:11;:15;47403:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;47482:13;;47467:11;:28;;47459:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;47584:9;;47569:11;47560:6;:20;;;;:::i;:::-;:33;;47552:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;47662:7;:5;:7::i;:::-;47648:21;;:10;:21;;;47644:115;;47713:11;47706:4;;:18;;;;:::i;:::-;47693:9;:31;;47685:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;47644:115;47770:9;47782:1;47770:13;;47765:93;47790:11;47785:1;:16;47765:93;;47817:33;47827:10;47848:1;47839:6;:10;;;;:::i;:::-;47817:9;:33::i;:::-;47803:3;;;;;:::i;:::-;;;;47765:93;;;;47207:656;;:::o;28500:155::-;28595:52;28614:12;:10;:12::i;:::-;28628:8;28638;28595:18;:52::i;:::-;28500:155;;:::o;51234:209::-;4511:13;:11;:13::i;:::-;51318:6:::1;51313:125;51329:6;:13;51326:1;:16;51313:125;;;51386:1;51365:23;;:6;51372:1;51365:9;;;;;;;;;;;;;;;;;;;;;;:23;;;;51357:32;;;::::0;::::1;;51425:5;51400:11;:22;51412:6;51419:1;51412:9;;;;;;;;;;;;;;;;;;;;;;51400:22;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;51344:3;;;;;:::i;:::-;;;;51313:125;;;;51234:209:::0;:::o;46337:27::-;;;;;;;;;;;;;:::o;29620:323::-;29794:41;29813:12;:10;:12::i;:::-;29827:7;29794:18;:41::i;:::-;29786:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;29897:38;29911:4;29917:2;29921:7;29930:4;29897:13;:38::i;:::-;29620:323;;;;:::o;46395:37::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;49063:107::-;49120:4;49144:11;:18;49156:5;49144:18;;;;;;;;;;;;;;;;;;;;;;;;;49137:25;;49063:107;;;:::o;48646:373::-;48719:13;48750:16;48758:7;48750;:16::i;:::-;48741:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;48825:28;48856:10;:8;:10::i;:::-;48825:41;;48911:1;48886:14;48880:28;:32;:133;;;;;;;;;;;;;;;;;48948:14;48964:18;:7;:16;:18::i;:::-;48984:13;48931:67;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;48880:133;48873:140;;;48646:373;;;:::o;46575:31::-;;;;:::o;46506:33::-;;;;:::o;46792:43::-;;;;;;;;;;;;;;;;;;;;;;:::o;50233:122::-;4511:13;:11;:13::i;:::-;50332:17:::1;50316:13;:33;;;;;;;;;;;;:::i;:::-;;50233:122:::0;:::o;49212:451::-;49281:15;49306:23;49332:17;49342:6;49332:9;:17::i;:::-;49306:43;;49356:25;49398:15;49384:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49356:58;;49421:25;49462:15;49449:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49421:57;;49490:9;49485:150;49505:15;49501:1;:19;49485:150;;;49552:30;49572:6;49580:1;49552:19;:30::i;:::-;49538:8;49547:1;49538:11;;;;;;;;;;;;;;;;;;;;;:44;;;;;49606:21;49615:8;49624:1;49615:11;;;;;;;;;;;;;;;;;;;;;;49606:8;:21::i;:::-;49591:9;49601:1;49591:12;;;;;;;;;;;;;;;;;;;;;:36;;;;49522:3;;;;;:::i;:::-;;;;49485:150;;;;49648:9;49641:16;;;;;49212:451;;;:::o;28726:164::-;28823:4;28847:18;:25;28866:5;28847:25;;;;;;;;;;;;;;;:35;28873:8;28847:35;;;;;;;;;;;;;;;;;;;;;;;;;28840:42;;28726:164;;;;:::o;51028:202::-;4511:13;:11;:13::i;:::-;51106:6:::1;51101:124;51117:6;:13;51114:1;:16;51101:124;;;51174:1;51153:23;;:6;51160:1;51153:9;;;;;;;;;;;;;;;;;;;;;;:23;;;;51145:32;;;::::0;::::1;;51213:4;51188:11;:22;51200:6;51207:1;51200:9;;;;;;;;;;;;;;;;;;;;;;51188:22;;;;;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;51132:3;;;;;:::i;:::-;;;;51101:124;;;;51028:202:::0;:::o;5531:201::-;4511:13;:11;:13::i;:::-;5640:1:::1;5620:22;;:8;:22;;;;5612:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;5696:28;5715:8;5696:18;:28::i;:::-;5531:201:::0;:::o;7323:326::-;7383:4;7640:1;7618:7;:19;;;:23;7611:30;;7323:326;;;:::o;38356:126::-;;;;:::o;25817:305::-;25919:4;25971:25;25956:40;;;:11;:40;;;;:105;;;;26028:33;26013:48;;;:11;:48;;;;25956:105;:158;;;;26078:36;26102:11;26078:23;:36::i;:::-;25956:158;25936:178;;25817:305;;;:::o;4790:132::-;4865:12;:10;:12::i;:::-;4854:23;;:7;:5;:7::i;:::-;:23;;;4846:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4790:132::o;32350:110::-;32426:26;32436:2;32440:7;32426:26;;;;;;;;;;;;:9;:26::i;:::-;32350:110;;:::o;36232:135::-;36314:16;36322:7;36314;:16::i;:::-;36306:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;36232:135;:::o;3176:98::-;3229:7;3256:10;3249:17;;3176:98;:::o;35511:174::-;35613:2;35586:15;:24;35602:7;35586:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;35669:7;35665:2;35631:46;;35640:23;35655:7;35640:14;:23::i;:::-;35631:46;;;;;;;;;;;;35511:174;;:::o;31744:264::-;31837:4;31854:13;31870:23;31885:7;31870:14;:23::i;:::-;31854:39;;31923:5;31912:16;;:7;:16;;;:52;;;;31932:32;31949:5;31956:7;31932:16;:32::i;:::-;31912:52;:87;;;;31992:7;31968:31;;:20;31980:7;31968:11;:20::i;:::-;:31;;;31912:87;31904:96;;;31744:264;;;;:::o;34767:625::-;34926:4;34899:31;;:23;34914:7;34899:14;:23::i;:::-;:31;;;34891:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;35005:1;34991:16;;:2;:16;;;;34983:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;35061:39;35082:4;35088:2;35092:7;35061:20;:39::i;:::-;35165:29;35182:1;35186:7;35165:8;:29::i;:::-;35226:1;35207:9;:15;35217:4;35207:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;35255:1;35238:9;:13;35248:2;35238:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;35286:2;35267:7;:16;35275:7;35267:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;35325:7;35321:2;35306:27;;35315:4;35306:27;;;;;;;;;;;;35346:38;35366:4;35372:2;35376:7;35346:19;:38::i;:::-;34767:625;;;:::o;5892:191::-;5966:16;5985:6;;;;;;;;;;;5966:25;;6011:8;6002:6;;:17;;;;;;;;;;;;;;;;;;6066:8;6035:40;;6056:8;6035:40;;;;;;;;;;;;5892:191;;:::o;35828:315::-;35983:8;35974:17;;:5;:17;;;;35966:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;36070:8;36032:18;:25;36051:5;36032:25;;;;;;;;;;;;;;;:35;36058:8;36032:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;36116:8;36094:41;;36109:5;36094:41;;;36126:8;36094:41;;;;;;:::i;:::-;;;;;;;;35828:315;;;:::o;30824:313::-;30980:28;30990:4;30996:2;31000:7;30980:9;:28::i;:::-;31027:47;31050:4;31056:2;31060:7;31069:4;31027:22;:47::i;:::-;31019:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;30824:313;;;;:::o;31450:127::-;31515:4;31567:1;31539:30;;:7;:16;31547:7;31539:16;;;;;;;;;;;;;;;;;;;;;:30;;;;31532:37;;31450:127;;;:::o;47072:102::-;47132:13;47161:7;47154:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47072:102;:::o;430:723::-;486:13;716:1;707:5;:10;703:53;;;734:10;;;;;;;;;;;;;;;;;;;;;703:53;766:12;781:5;766:20;;797:14;822:78;837:1;829:4;:9;822:78;;855:8;;;;;:::i;:::-;;;;886:2;878:10;;;;;:::i;:::-;;;822:78;;;910:19;942:6;932:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;910:39;;960:154;976:1;967:5;:10;960:154;;1004:1;994:11;;;;;:::i;:::-;;;1071:2;1063:5;:10;;;;:::i;:::-;1050:2;:24;;;;:::i;:::-;1037:39;;1020:6;1027;1020:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;1100:2;1091:11;;;;;:::i;:::-;;;960:154;;;1138:6;1124:21;;;;;430:723;;;;:::o;17479:157::-;17564:4;17603:25;17588:40;;;:11;:40;;;;17581:47;;17479:157;;;:::o;32687:319::-;32816:18;32822:2;32826:7;32816:5;:18::i;:::-;32867:53;32898:1;32902:2;32906:7;32915:4;32867:22;:53::i;:::-;32845:153;;;;;;;;;;;;:::i;:::-;;;;;;;;;32687:319;;;:::o;41686:589::-;41830:45;41857:4;41863:2;41867:7;41830:26;:45::i;:::-;41908:1;41892:18;;:4;:18;;;41888:187;;;41927:40;41959:7;41927:31;:40::i;:::-;41888:187;;;41997:2;41989:10;;:4;:10;;;41985:90;;42016:47;42049:4;42055:7;42016:32;:47::i;:::-;41985:90;41888:187;42103:1;42089:16;;:2;:16;;;42085:183;;;42122:45;42159:7;42122:36;:45::i;:::-;42085:183;;;42195:4;42189:10;;:2;:10;;;42185:83;;42216:40;42244:2;42248:7;42216:27;:40::i;:::-;42185:83;42085:183;41686:589;;;:::o;38867:125::-;;;;:::o;36931:853::-;37085:4;37106:15;:2;:13;;;:15::i;:::-;37102:675;;;37158:2;37142:36;;;37179:12;:10;:12::i;:::-;37193:4;37199:7;37208:4;37142:71;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;37138:584;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37400:1;37383:6;:13;:18;37379:328;;;37426:60;;;;;;;;;;:::i;:::-;;;;;;;;37379:328;37657:6;37651:13;37642:6;37638:2;37634:15;37627:38;37138:584;37274:41;;;37264:51;;;:6;:51;;;;37257:58;;;;;37102:675;37761:4;37754:11;;36931:853;;;;;;;:::o;33342:439::-;33436:1;33422:16;;:2;:16;;;;33414:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;33495:16;33503:7;33495;:16::i;:::-;33494:17;33486:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;33557:45;33586:1;33590:2;33594:7;33557:20;:45::i;:::-;33632:1;33615:9;:13;33625:2;33615:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;33663:2;33644:7;:16;33652:7;33644:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;33708:7;33704:2;33683:33;;33700:1;33683:33;;;;;;;;;;;;33729:44;33757:1;33761:2;33765:7;33729:19;:44::i;:::-;33342:439;;:::o;42998:164::-;43102:10;:17;;;;43075:15;:24;43091:7;43075:24;;;;;;;;;;;:44;;;;43130:10;43146:7;43130:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42998:164;:::o;43789:988::-;44055:22;44105:1;44080:22;44097:4;44080:16;:22::i;:::-;:26;;;;:::i;:::-;44055:51;;44117:18;44138:17;:26;44156:7;44138:26;;;;;;;;;;;;44117:47;;44285:14;44271:10;:28;44267:328;;44316:19;44338:12;:18;44351:4;44338:18;;;;;;;;;;;;;;;:34;44357:14;44338:34;;;;;;;;;;;;44316:56;;44422:11;44389:12;:18;44402:4;44389:18;;;;;;;;;;;;;;;:30;44408:10;44389:30;;;;;;;;;;;:44;;;;44539:10;44506:17;:30;44524:11;44506:30;;;;;;;;;;;:43;;;;44267:328;;44691:17;:26;44709:7;44691:26;;;;;;;;;;;44684:33;;;44735:12;:18;44748:4;44735:18;;;;;;;;;;;;;;;:34;44754:14;44735:34;;;;;;;;;;;44728:41;;;43789:988;;;;:::o;45072:1079::-;45325:22;45370:1;45350:10;:17;;;;:21;;;;:::i;:::-;45325:46;;45382:18;45403:15;:24;45419:7;45403:24;;;;;;;;;;;;45382:45;;45754:19;45776:10;45787:14;45776:26;;;;;;;;;;;;;;;;;;;;;;;;45754:48;;45840:11;45815:10;45826;45815:22;;;;;;;;;;;;;;;;;;;;;;;:36;;;;45951:10;45920:15;:28;45936:11;45920:28;;;;;;;;;;;:41;;;;46092:15;:24;46108:7;46092:24;;;;;;;;;;;46085:31;;;46127:10;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45072:1079;;;;:::o;42576:221::-;42661:14;42678:20;42695:2;42678:16;:20::i;:::-;42661:37;;42736:7;42709:12;:16;42722:2;42709:16;;;;;;;;;;;;;;;:24;42726:6;42709:24;;;;;;;;;;;:34;;;;42783:6;42754:17;:26;42772:7;42754:26;;;;;;;;;;;:35;;;;42576:221;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:655:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:2;;;414:1;411;404:12;350:2;450:1;435:238;460:6;457:1;454:13;435:238;;;528:3;557:37;590:3;578:10;557:37;:::i;:::-;552:3;545:50;624:4;619:3;615:14;608:21;;658:4;653:3;649:14;642:21;;495:178;482:1;479;475:9;470:14;;435:238;;;439:14;126:553;;;;;;;:::o;685:343::-;762:5;787:65;803:48;844:6;803:48;:::i;:::-;787:65;:::i;:::-;778:74;;875:6;868:5;861:21;913:4;906:5;902:16;951:3;942:6;937:3;933:16;930:25;927:2;;;968:1;965;958:12;927:2;981:41;1015:6;1010:3;1005;981:41;:::i;:::-;768:260;;;;;;:::o;1034:345::-;1112:5;1137:66;1153:49;1195:6;1153:49;:::i;:::-;1137:66;:::i;:::-;1128:75;;1226:6;1219:5;1212:21;1264:4;1257:5;1253:16;1302:3;1293:6;1288:3;1284:16;1281:25;1278:2;;;1319:1;1316;1309:12;1278:2;1332:41;1366:6;1361:3;1356;1332:41;:::i;:::-;1118:261;;;;;;:::o;1385:139::-;1431:5;1469:6;1456:20;1447:29;;1485:33;1512:5;1485:33;:::i;:::-;1437:87;;;;:::o;1547:303::-;1618:5;1667:3;1660:4;1652:6;1648:17;1644:27;1634:2;;1685:1;1682;1675:12;1634:2;1725:6;1712:20;1750:94;1840:3;1832:6;1825:4;1817:6;1813:17;1750:94;:::i;:::-;1741:103;;1624:226;;;;;:::o;1856:133::-;1899:5;1937:6;1924:20;1915:29;;1953:30;1977:5;1953:30;:::i;:::-;1905:84;;;;:::o;1995:137::-;2040:5;2078:6;2065:20;2056:29;;2094:32;2120:5;2094:32;:::i;:::-;2046:86;;;;:::o;2138:141::-;2194:5;2225:6;2219:13;2210:22;;2241:32;2267:5;2241:32;:::i;:::-;2200:79;;;;:::o;2298:271::-;2353:5;2402:3;2395:4;2387:6;2383:17;2379:27;2369:2;;2420:1;2417;2410:12;2369:2;2460:6;2447:20;2485:78;2559:3;2551:6;2544:4;2536:6;2532:17;2485:78;:::i;:::-;2476:87;;2359:210;;;;;:::o;2589:273::-;2645:5;2694:3;2687:4;2679:6;2675:17;2671:27;2661:2;;2712:1;2709;2702:12;2661:2;2752:6;2739:20;2777:79;2852:3;2844:6;2837:4;2829:6;2825:17;2777:79;:::i;:::-;2768:88;;2651:211;;;;;:::o;2868:139::-;2914:5;2952:6;2939:20;2930:29;;2968:33;2995:5;2968:33;:::i;:::-;2920:87;;;;:::o;3013:262::-;3072:6;3121:2;3109:9;3100:7;3096:23;3092:32;3089:2;;;3137:1;3134;3127:12;3089:2;3180:1;3205:53;3250:7;3241:6;3230:9;3226:22;3205:53;:::i;:::-;3195:63;;3151:117;3079:196;;;;:::o;3281:407::-;3349:6;3357;3406:2;3394:9;3385:7;3381:23;3377:32;3374:2;;;3422:1;3419;3412:12;3374:2;3465:1;3490:53;3535:7;3526:6;3515:9;3511:22;3490:53;:::i;:::-;3480:63;;3436:117;3592:2;3618:53;3663:7;3654:6;3643:9;3639:22;3618:53;:::i;:::-;3608:63;;3563:118;3364:324;;;;;:::o;3694:552::-;3771:6;3779;3787;3836:2;3824:9;3815:7;3811:23;3807:32;3804:2;;;3852:1;3849;3842:12;3804:2;3895:1;3920:53;3965:7;3956:6;3945:9;3941:22;3920:53;:::i;:::-;3910:63;;3866:117;4022:2;4048:53;4093:7;4084:6;4073:9;4069:22;4048:53;:::i;:::-;4038:63;;3993:118;4150:2;4176:53;4221:7;4212:6;4201:9;4197:22;4176:53;:::i;:::-;4166:63;;4121:118;3794:452;;;;;:::o;4252:809::-;4347:6;4355;4363;4371;4420:3;4408:9;4399:7;4395:23;4391:33;4388:2;;;4437:1;4434;4427:12;4388:2;4480:1;4505:53;4550:7;4541:6;4530:9;4526:22;4505:53;:::i;:::-;4495:63;;4451:117;4607:2;4633:53;4678:7;4669:6;4658:9;4654:22;4633:53;:::i;:::-;4623:63;;4578:118;4735:2;4761:53;4806:7;4797:6;4786:9;4782:22;4761:53;:::i;:::-;4751:63;;4706:118;4891:2;4880:9;4876:18;4863:32;4922:18;4914:6;4911:30;4908:2;;;4954:1;4951;4944:12;4908:2;4982:62;5036:7;5027:6;5016:9;5012:22;4982:62;:::i;:::-;4972:72;;4834:220;4378:683;;;;;;;:::o;5067:401::-;5132:6;5140;5189:2;5177:9;5168:7;5164:23;5160:32;5157:2;;;5205:1;5202;5195:12;5157:2;5248:1;5273:53;5318:7;5309:6;5298:9;5294:22;5273:53;:::i;:::-;5263:63;;5219:117;5375:2;5401:50;5443:7;5434:6;5423:9;5419:22;5401:50;:::i;:::-;5391:60;;5346:115;5147:321;;;;;:::o;5474:407::-;5542:6;5550;5599:2;5587:9;5578:7;5574:23;5570:32;5567:2;;;5615:1;5612;5605:12;5567:2;5658:1;5683:53;5728:7;5719:6;5708:9;5704:22;5683:53;:::i;:::-;5673:63;;5629:117;5785:2;5811:53;5856:7;5847:6;5836:9;5832:22;5811:53;:::i;:::-;5801:63;;5756:118;5557:324;;;;;:::o;5887:405::-;5971:6;6020:2;6008:9;5999:7;5995:23;5991:32;5988:2;;;6036:1;6033;6026:12;5988:2;6107:1;6096:9;6092:17;6079:31;6137:18;6129:6;6126:30;6123:2;;;6169:1;6166;6159:12;6123:2;6197:78;6267:7;6258:6;6247:9;6243:22;6197:78;:::i;:::-;6187:88;;6050:235;5978:314;;;;:::o;6298:256::-;6354:6;6403:2;6391:9;6382:7;6378:23;6374:32;6371:2;;;6419:1;6416;6409:12;6371:2;6462:1;6487:50;6529:7;6520:6;6509:9;6505:22;6487:50;:::i;:::-;6477:60;;6433:114;6361:193;;;;:::o;6560:260::-;6618:6;6667:2;6655:9;6646:7;6642:23;6638:32;6635:2;;;6683:1;6680;6673:12;6635:2;6726:1;6751:52;6795:7;6786:6;6775:9;6771:22;6751:52;:::i;:::-;6741:62;;6697:116;6625:195;;;;:::o;6826:282::-;6895:6;6944:2;6932:9;6923:7;6919:23;6915:32;6912:2;;;6960:1;6957;6950:12;6912:2;7003:1;7028:63;7083:7;7074:6;7063:9;7059:22;7028:63;:::i;:::-;7018:73;;6974:127;6902:206;;;;:::o;7114:375::-;7183:6;7232:2;7220:9;7211:7;7207:23;7203:32;7200:2;;;7248:1;7245;7238:12;7200:2;7319:1;7308:9;7304:17;7291:31;7349:18;7341:6;7338:30;7335:2;;;7381:1;7378;7371:12;7335:2;7409:63;7464:7;7455:6;7444:9;7440:22;7409:63;:::i;:::-;7399:73;;7262:220;7190:299;;;;:::o;7495:262::-;7554:6;7603:2;7591:9;7582:7;7578:23;7574:32;7571:2;;;7619:1;7616;7609:12;7571:2;7662:1;7687:53;7732:7;7723:6;7712:9;7708:22;7687:53;:::i;:::-;7677:63;;7633:117;7561:196;;;;:::o;7763:::-;7852:10;7887:66;7949:3;7941:6;7887:66;:::i;:::-;7873:80;;7863:96;;;;:::o;7965:118::-;8052:24;8070:5;8052:24;:::i;:::-;8047:3;8040:37;8030:53;;:::o;8117:991::-;8256:3;8285:64;8343:5;8285:64;:::i;:::-;8365:96;8454:6;8449:3;8365:96;:::i;:::-;8358:103;;8487:3;8532:4;8524:6;8520:17;8515:3;8511:27;8562:66;8622:5;8562:66;:::i;:::-;8651:7;8682:1;8667:396;8692:6;8689:1;8686:13;8667:396;;;8763:9;8757:4;8753:20;8748:3;8741:33;8814:6;8808:13;8842:84;8921:4;8906:13;8842:84;:::i;:::-;8834:92;;8949:70;9012:6;8949:70;:::i;:::-;8939:80;;9048:4;9043:3;9039:14;9032:21;;8727:336;8714:1;8711;8707:9;8702:14;;8667:396;;;8671:14;9079:4;9072:11;;9099:3;9092:10;;8261:847;;;;;;;;;:::o;9114:109::-;9195:21;9210:5;9195:21;:::i;:::-;9190:3;9183:34;9173:50;;:::o;9229:360::-;9315:3;9343:38;9375:5;9343:38;:::i;:::-;9397:70;9460:6;9455:3;9397:70;:::i;:::-;9390:77;;9476:52;9521:6;9516:3;9509:4;9502:5;9498:16;9476:52;:::i;:::-;9553:29;9575:6;9553:29;:::i;:::-;9548:3;9544:39;9537:46;;9319:270;;;;;:::o;9595:344::-;9673:3;9701:39;9734:5;9701:39;:::i;:::-;9756:61;9810:6;9805:3;9756:61;:::i;:::-;9749:68;;9826:52;9871:6;9866:3;9859:4;9852:5;9848:16;9826:52;:::i;:::-;9903:29;9925:6;9903:29;:::i;:::-;9898:3;9894:39;9887:46;;9677:262;;;;;:::o;9945:364::-;10033:3;10061:39;10094:5;10061:39;:::i;:::-;10116:71;10180:6;10175:3;10116:71;:::i;:::-;10109:78;;10196:52;10241:6;10236:3;10229:4;10222:5;10218:16;10196:52;:::i;:::-;10273:29;10295:6;10273:29;:::i;:::-;10268:3;10264:39;10257:46;;10037:272;;;;;:::o;10315:377::-;10421:3;10449:39;10482:5;10449:39;:::i;:::-;10504:89;10586:6;10581:3;10504:89;:::i;:::-;10497:96;;10602:52;10647:6;10642:3;10635:4;10628:5;10624:16;10602:52;:::i;:::-;10679:6;10674:3;10670:16;10663:23;;10425:267;;;;;:::o;10722:845::-;10825:3;10862:5;10856:12;10891:36;10917:9;10891:36;:::i;:::-;10943:89;11025:6;11020:3;10943:89;:::i;:::-;10936:96;;11063:1;11052:9;11048:17;11079:1;11074:137;;;;11225:1;11220:341;;;;11041:520;;11074:137;11158:4;11154:9;11143;11139:25;11134:3;11127:38;11194:6;11189:3;11185:16;11178:23;;11074:137;;11220:341;11287:38;11319:5;11287:38;:::i;:::-;11347:1;11361:154;11375:6;11372:1;11369:13;11361:154;;;11449:7;11443:14;11439:1;11434:3;11430:11;11423:35;11499:1;11490:7;11486:15;11475:26;;11397:4;11394:1;11390:12;11385:17;;11361:154;;;11544:6;11539:3;11535:16;11528:23;;11227:334;;11041:520;;10829:738;;;;;;:::o;11573:366::-;11715:3;11736:67;11800:2;11795:3;11736:67;:::i;:::-;11729:74;;11812:93;11901:3;11812:93;:::i;:::-;11930:2;11925:3;11921:12;11914:19;;11719:220;;;:::o;11945:366::-;12087:3;12108:67;12172:2;12167:3;12108:67;:::i;:::-;12101:74;;12184:93;12273:3;12184:93;:::i;:::-;12302:2;12297:3;12293:12;12286:19;;12091:220;;;:::o;12317:366::-;12459:3;12480:67;12544:2;12539:3;12480:67;:::i;:::-;12473:74;;12556:93;12645:3;12556:93;:::i;:::-;12674:2;12669:3;12665:12;12658:19;;12463:220;;;:::o;12689:366::-;12831:3;12852:67;12916:2;12911:3;12852:67;:::i;:::-;12845:74;;12928:93;13017:3;12928:93;:::i;:::-;13046:2;13041:3;13037:12;13030:19;;12835:220;;;:::o;13061:366::-;13203:3;13224:67;13288:2;13283:3;13224:67;:::i;:::-;13217:74;;13300:93;13389:3;13300:93;:::i;:::-;13418:2;13413:3;13409:12;13402:19;;13207:220;;;:::o;13433:366::-;13575:3;13596:67;13660:2;13655:3;13596:67;:::i;:::-;13589:74;;13672:93;13761:3;13672:93;:::i;:::-;13790:2;13785:3;13781:12;13774:19;;13579:220;;;:::o;13805:366::-;13947:3;13968:67;14032:2;14027:3;13968:67;:::i;:::-;13961:74;;14044:93;14133:3;14044:93;:::i;:::-;14162:2;14157:3;14153:12;14146:19;;13951:220;;;:::o;14177:366::-;14319:3;14340:67;14404:2;14399:3;14340:67;:::i;:::-;14333:74;;14416:93;14505:3;14416:93;:::i;:::-;14534:2;14529:3;14525:12;14518:19;;14323:220;;;:::o;14549:366::-;14691:3;14712:67;14776:2;14771:3;14712:67;:::i;:::-;14705:74;;14788:93;14877:3;14788:93;:::i;:::-;14906:2;14901:3;14897:12;14890:19;;14695:220;;;:::o;14921:366::-;15063:3;15084:67;15148:2;15143:3;15084:67;:::i;:::-;15077:74;;15160:93;15249:3;15160:93;:::i;:::-;15278:2;15273:3;15269:12;15262:19;;15067:220;;;:::o;15293:366::-;15435:3;15456:67;15520:2;15515:3;15456:67;:::i;:::-;15449:74;;15532:93;15621:3;15532:93;:::i;:::-;15650:2;15645:3;15641:12;15634:19;;15439:220;;;:::o;15665:366::-;15807:3;15828:67;15892:2;15887:3;15828:67;:::i;:::-;15821:74;;15904:93;15993:3;15904:93;:::i;:::-;16022:2;16017:3;16013:12;16006:19;;15811:220;;;:::o;16037:366::-;16179:3;16200:67;16264:2;16259:3;16200:67;:::i;:::-;16193:74;;16276:93;16365:3;16276:93;:::i;:::-;16394:2;16389:3;16385:12;16378:19;;16183:220;;;:::o;16409:366::-;16551:3;16572:67;16636:2;16631:3;16572:67;:::i;:::-;16565:74;;16648:93;16737:3;16648:93;:::i;:::-;16766:2;16761:3;16757:12;16750:19;;16555:220;;;:::o;16781:366::-;16923:3;16944:67;17008:2;17003:3;16944:67;:::i;:::-;16937:74;;17020:93;17109:3;17020:93;:::i;:::-;17138:2;17133:3;17129:12;17122:19;;16927:220;;;:::o;17153:366::-;17295:3;17316:67;17380:2;17375:3;17316:67;:::i;:::-;17309:74;;17392:93;17481:3;17392:93;:::i;:::-;17510:2;17505:3;17501:12;17494:19;;17299:220;;;:::o;17525:366::-;17667:3;17688:67;17752:2;17747:3;17688:67;:::i;:::-;17681:74;;17764:93;17853:3;17764:93;:::i;:::-;17882:2;17877:3;17873:12;17866:19;;17671:220;;;:::o;17897:366::-;18039:3;18060:67;18124:2;18119:3;18060:67;:::i;:::-;18053:74;;18136:93;18225:3;18136:93;:::i;:::-;18254:2;18249:3;18245:12;18238:19;;18043:220;;;:::o;18269:366::-;18411:3;18432:67;18496:2;18491:3;18432:67;:::i;:::-;18425:74;;18508:93;18597:3;18508:93;:::i;:::-;18626:2;18621:3;18617:12;18610:19;;18415:220;;;:::o;18641:366::-;18783:3;18804:67;18868:2;18863:3;18804:67;:::i;:::-;18797:74;;18880:93;18969:3;18880:93;:::i;:::-;18998:2;18993:3;18989:12;18982:19;;18787:220;;;:::o;19013:366::-;19155:3;19176:67;19240:2;19235:3;19176:67;:::i;:::-;19169:74;;19252:93;19341:3;19252:93;:::i;:::-;19370:2;19365:3;19361:12;19354:19;;19159:220;;;:::o;19385:398::-;19544:3;19565:83;19646:1;19641:3;19565:83;:::i;:::-;19558:90;;19657:93;19746:3;19657:93;:::i;:::-;19775:1;19770:3;19766:11;19759:18;;19548:235;;;:::o;19789:366::-;19931:3;19952:67;20016:2;20011:3;19952:67;:::i;:::-;19945:74;;20028:93;20117:3;20028:93;:::i;:::-;20146:2;20141:3;20137:12;20130:19;;19935:220;;;:::o;20161:366::-;20303:3;20324:67;20388:2;20383:3;20324:67;:::i;:::-;20317:74;;20400:93;20489:3;20400:93;:::i;:::-;20518:2;20513:3;20509:12;20502:19;;20307:220;;;:::o;20533:366::-;20675:3;20696:67;20760:2;20755:3;20696:67;:::i;:::-;20689:74;;20772:93;20861:3;20772:93;:::i;:::-;20890:2;20885:3;20881:12;20874:19;;20679:220;;;:::o;20905:366::-;21047:3;21068:67;21132:2;21127:3;21068:67;:::i;:::-;21061:74;;21144:93;21233:3;21144:93;:::i;:::-;21262:2;21257:3;21253:12;21246:19;;21051:220;;;:::o;21277:118::-;21364:24;21382:5;21364:24;:::i;:::-;21359:3;21352:37;21342:53;;:::o;21401:589::-;21626:3;21648:95;21739:3;21730:6;21648:95;:::i;:::-;21641:102;;21760:95;21851:3;21842:6;21760:95;:::i;:::-;21753:102;;21872:92;21960:3;21951:6;21872:92;:::i;:::-;21865:99;;21981:3;21974:10;;21630:360;;;;;;:::o;21996:379::-;22180:3;22202:147;22345:3;22202:147;:::i;:::-;22195:154;;22366:3;22359:10;;22184:191;;;:::o;22381:222::-;22474:4;22512:2;22501:9;22497:18;22489:26;;22525:71;22593:1;22582:9;22578:17;22569:6;22525:71;:::i;:::-;22479:124;;;;:::o;22609:640::-;22804:4;22842:3;22831:9;22827:19;22819:27;;22856:71;22924:1;22913:9;22909:17;22900:6;22856:71;:::i;:::-;22937:72;23005:2;22994:9;22990:18;22981:6;22937:72;:::i;:::-;23019;23087:2;23076:9;23072:18;23063:6;23019:72;:::i;:::-;23138:9;23132:4;23128:20;23123:2;23112:9;23108:18;23101:48;23166:76;23237:4;23228:6;23166:76;:::i;:::-;23158:84;;22809:440;;;;;;;:::o;23255:413::-;23418:4;23456:2;23445:9;23441:18;23433:26;;23505:9;23499:4;23495:20;23491:1;23480:9;23476:17;23469:47;23533:128;23656:4;23647:6;23533:128;:::i;:::-;23525:136;;23423:245;;;;:::o;23674:210::-;23761:4;23799:2;23788:9;23784:18;23776:26;;23812:65;23874:1;23863:9;23859:17;23850:6;23812:65;:::i;:::-;23766:118;;;;:::o;23890:313::-;24003:4;24041:2;24030:9;24026:18;24018:26;;24090:9;24084:4;24080:20;24076:1;24065:9;24061:17;24054:47;24118:78;24191:4;24182:6;24118:78;:::i;:::-;24110:86;;24008:195;;;;:::o;24209:419::-;24375:4;24413:2;24402:9;24398:18;24390:26;;24462:9;24456:4;24452:20;24448:1;24437:9;24433:17;24426:47;24490:131;24616:4;24490:131;:::i;:::-;24482:139;;24380:248;;;:::o;24634:419::-;24800:4;24838:2;24827:9;24823:18;24815:26;;24887:9;24881:4;24877:20;24873:1;24862:9;24858:17;24851:47;24915:131;25041:4;24915:131;:::i;:::-;24907:139;;24805:248;;;:::o;25059:419::-;25225:4;25263:2;25252:9;25248:18;25240:26;;25312:9;25306:4;25302:20;25298:1;25287:9;25283:17;25276:47;25340:131;25466:4;25340:131;:::i;:::-;25332:139;;25230:248;;;:::o;25484:419::-;25650:4;25688:2;25677:9;25673:18;25665:26;;25737:9;25731:4;25727:20;25723:1;25712:9;25708:17;25701:47;25765:131;25891:4;25765:131;:::i;:::-;25757:139;;25655:248;;;:::o;25909:419::-;26075:4;26113:2;26102:9;26098:18;26090:26;;26162:9;26156:4;26152:20;26148:1;26137:9;26133:17;26126:47;26190:131;26316:4;26190:131;:::i;:::-;26182:139;;26080:248;;;:::o;26334:419::-;26500:4;26538:2;26527:9;26523:18;26515:26;;26587:9;26581:4;26577:20;26573:1;26562:9;26558:17;26551:47;26615:131;26741:4;26615:131;:::i;:::-;26607:139;;26505:248;;;:::o;26759:419::-;26925:4;26963:2;26952:9;26948:18;26940:26;;27012:9;27006:4;27002:20;26998:1;26987:9;26983:17;26976:47;27040:131;27166:4;27040:131;:::i;:::-;27032:139;;26930:248;;;:::o;27184:419::-;27350:4;27388:2;27377:9;27373:18;27365:26;;27437:9;27431:4;27427:20;27423:1;27412:9;27408:17;27401:47;27465:131;27591:4;27465:131;:::i;:::-;27457:139;;27355:248;;;:::o;27609:419::-;27775:4;27813:2;27802:9;27798:18;27790:26;;27862:9;27856:4;27852:20;27848:1;27837:9;27833:17;27826:47;27890:131;28016:4;27890:131;:::i;:::-;27882:139;;27780:248;;;:::o;28034:419::-;28200:4;28238:2;28227:9;28223:18;28215:26;;28287:9;28281:4;28277:20;28273:1;28262:9;28258:17;28251:47;28315:131;28441:4;28315:131;:::i;:::-;28307:139;;28205:248;;;:::o;28459:419::-;28625:4;28663:2;28652:9;28648:18;28640:26;;28712:9;28706:4;28702:20;28698:1;28687:9;28683:17;28676:47;28740:131;28866:4;28740:131;:::i;:::-;28732:139;;28630:248;;;:::o;28884:419::-;29050:4;29088:2;29077:9;29073:18;29065:26;;29137:9;29131:4;29127:20;29123:1;29112:9;29108:17;29101:47;29165:131;29291:4;29165:131;:::i;:::-;29157:139;;29055:248;;;:::o;29309:419::-;29475:4;29513:2;29502:9;29498:18;29490:26;;29562:9;29556:4;29552:20;29548:1;29537:9;29533:17;29526:47;29590:131;29716:4;29590:131;:::i;:::-;29582:139;;29480:248;;;:::o;29734:419::-;29900:4;29938:2;29927:9;29923:18;29915:26;;29987:9;29981:4;29977:20;29973:1;29962:9;29958:17;29951:47;30015:131;30141:4;30015:131;:::i;:::-;30007:139;;29905:248;;;:::o;30159:419::-;30325:4;30363:2;30352:9;30348:18;30340:26;;30412:9;30406:4;30402:20;30398:1;30387:9;30383:17;30376:47;30440:131;30566:4;30440:131;:::i;:::-;30432:139;;30330:248;;;:::o;30584:419::-;30750:4;30788:2;30777:9;30773:18;30765:26;;30837:9;30831:4;30827:20;30823:1;30812:9;30808:17;30801:47;30865:131;30991:4;30865:131;:::i;:::-;30857:139;;30755:248;;;:::o;31009:419::-;31175:4;31213:2;31202:9;31198:18;31190:26;;31262:9;31256:4;31252:20;31248:1;31237:9;31233:17;31226:47;31290:131;31416:4;31290:131;:::i;:::-;31282:139;;31180:248;;;:::o;31434:419::-;31600:4;31638:2;31627:9;31623:18;31615:26;;31687:9;31681:4;31677:20;31673:1;31662:9;31658:17;31651:47;31715:131;31841:4;31715:131;:::i;:::-;31707:139;;31605:248;;;:::o;31859:419::-;32025:4;32063:2;32052:9;32048:18;32040:26;;32112:9;32106:4;32102:20;32098:1;32087:9;32083:17;32076:47;32140:131;32266:4;32140:131;:::i;:::-;32132:139;;32030:248;;;:::o;32284:419::-;32450:4;32488:2;32477:9;32473:18;32465:26;;32537:9;32531:4;32527:20;32523:1;32512:9;32508:17;32501:47;32565:131;32691:4;32565:131;:::i;:::-;32557:139;;32455:248;;;:::o;32709:419::-;32875:4;32913:2;32902:9;32898:18;32890:26;;32962:9;32956:4;32952:20;32948:1;32937:9;32933:17;32926:47;32990:131;33116:4;32990:131;:::i;:::-;32982:139;;32880:248;;;:::o;33134:419::-;33300:4;33338:2;33327:9;33323:18;33315:26;;33387:9;33381:4;33377:20;33373:1;33362:9;33358:17;33351:47;33415:131;33541:4;33415:131;:::i;:::-;33407:139;;33305:248;;;:::o;33559:419::-;33725:4;33763:2;33752:9;33748:18;33740:26;;33812:9;33806:4;33802:20;33798:1;33787:9;33783:17;33776:47;33840:131;33966:4;33840:131;:::i;:::-;33832:139;;33730:248;;;:::o;33984:419::-;34150:4;34188:2;34177:9;34173:18;34165:26;;34237:9;34231:4;34227:20;34223:1;34212:9;34208:17;34201:47;34265:131;34391:4;34265:131;:::i;:::-;34257:139;;34155:248;;;:::o;34409:419::-;34575:4;34613:2;34602:9;34598:18;34590:26;;34662:9;34656:4;34652:20;34648:1;34637:9;34633:17;34626:47;34690:131;34816:4;34690:131;:::i;:::-;34682:139;;34580:248;;;:::o;34834:222::-;34927:4;34965:2;34954:9;34950:18;34942:26;;34978:71;35046:1;35035:9;35031:17;35022:6;34978:71;:::i;:::-;34932:124;;;;:::o;35062:129::-;35096:6;35123:20;;:::i;:::-;35113:30;;35152:33;35180:4;35172:6;35152:33;:::i;:::-;35103:88;;;:::o;35197:75::-;35230:6;35263:2;35257:9;35247:19;;35237:35;:::o;35278:311::-;35355:4;35445:18;35437:6;35434:30;35431:2;;;35467:18;;:::i;:::-;35431:2;35517:4;35509:6;35505:17;35497:25;;35577:4;35571;35567:15;35559:23;;35360:229;;;:::o;35595:307::-;35656:4;35746:18;35738:6;35735:30;35732:2;;;35768:18;;:::i;:::-;35732:2;35806:29;35828:6;35806:29;:::i;:::-;35798:37;;35890:4;35884;35880:15;35872:23;;35661:241;;;:::o;35908:308::-;35970:4;36060:18;36052:6;36049:30;36046:2;;;36082:18;;:::i;:::-;36046:2;36120:29;36142:6;36120:29;:::i;:::-;36112:37;;36204:4;36198;36194:15;36186:23;;35975:241;;;:::o;36222:142::-;36299:4;36322:3;36314:11;;36352:4;36347:3;36343:14;36335:22;;36304:60;;;:::o;36370:141::-;36419:4;36442:3;36434:11;;36465:3;36462:1;36455:14;36499:4;36496:1;36486:18;36478:26;;36424:87;;;:::o;36517:124::-;36594:6;36628:5;36622:12;36612:22;;36601:40;;;:::o;36647:98::-;36698:6;36732:5;36726:12;36716:22;;36705:40;;;:::o;36751:99::-;36803:6;36837:5;36831:12;36821:22;;36810:40;;;:::o;36856:123::-;36936:4;36968;36963:3;36959:14;36951:22;;36941:38;;;:::o;36985:194::-;37094:11;37128:6;37123:3;37116:19;37168:4;37163:3;37159:14;37144:29;;37106:73;;;;:::o;37185:168::-;37268:11;37302:6;37297:3;37290:19;37342:4;37337:3;37333:14;37318:29;;37280:73;;;;:::o;37359:147::-;37460:11;37497:3;37482:18;;37472:34;;;;:::o;37512:159::-;37586:11;37620:6;37615:3;37608:19;37660:4;37655:3;37651:14;37636:29;;37598:73;;;;:::o;37677:169::-;37761:11;37795:6;37790:3;37783:19;37835:4;37830:3;37826:14;37811:29;;37773:73;;;;:::o;37852:148::-;37954:11;37991:3;37976:18;;37966:34;;;;:::o;38006:305::-;38046:3;38065:20;38083:1;38065:20;:::i;:::-;38060:25;;38099:20;38117:1;38099:20;:::i;:::-;38094:25;;38253:1;38185:66;38181:74;38178:1;38175:81;38172:2;;;38259:18;;:::i;:::-;38172:2;38303:1;38300;38296:9;38289:16;;38050:261;;;;:::o;38317:185::-;38357:1;38374:20;38392:1;38374:20;:::i;:::-;38369:25;;38408:20;38426:1;38408:20;:::i;:::-;38403:25;;38447:1;38437:2;;38452:18;;:::i;:::-;38437:2;38494:1;38491;38487:9;38482:14;;38359:143;;;;:::o;38508:348::-;38548:7;38571:20;38589:1;38571:20;:::i;:::-;38566:25;;38605:20;38623:1;38605:20;:::i;:::-;38600:25;;38793:1;38725:66;38721:74;38718:1;38715:81;38710:1;38703:9;38696:17;38692:105;38689:2;;;38800:18;;:::i;:::-;38689:2;38848:1;38845;38841:9;38830:20;;38556:300;;;;:::o;38862:191::-;38902:4;38922:20;38940:1;38922:20;:::i;:::-;38917:25;;38956:20;38974:1;38956:20;:::i;:::-;38951:25;;38995:1;38992;38989:8;38986:2;;;39000:18;;:::i;:::-;38986:2;39045:1;39042;39038:9;39030:17;;38907:146;;;;:::o;39059:96::-;39096:7;39125:24;39143:5;39125:24;:::i;:::-;39114:35;;39104:51;;;:::o;39161:90::-;39195:7;39238:5;39231:13;39224:21;39213:32;;39203:48;;;:::o;39257:149::-;39293:7;39333:66;39326:5;39322:78;39311:89;;39301:105;;;:::o;39412:126::-;39449:7;39489:42;39482:5;39478:54;39467:65;;39457:81;;;:::o;39544:77::-;39581:7;39610:5;39599:16;;39589:32;;;:::o;39627:154::-;39711:6;39706:3;39701;39688:30;39773:1;39764:6;39759:3;39755:16;39748:27;39678:103;;;:::o;39787:307::-;39855:1;39865:113;39879:6;39876:1;39873:13;39865:113;;;39964:1;39959:3;39955:11;39949:18;39945:1;39940:3;39936:11;39929:39;39901:2;39898:1;39894:10;39889:15;;39865:113;;;39996:6;39993:1;39990:13;39987:2;;;40076:1;40067:6;40062:3;40058:16;40051:27;39987:2;39836:258;;;;:::o;40100:320::-;40144:6;40181:1;40175:4;40171:12;40161:22;;40228:1;40222:4;40218:12;40249:18;40239:2;;40305:4;40297:6;40293:17;40283:27;;40239:2;40367;40359:6;40356:14;40336:18;40333:38;40330:2;;;40386:18;;:::i;:::-;40330:2;40151:269;;;;:::o;40426:281::-;40509:27;40531:4;40509:27;:::i;:::-;40501:6;40497:40;40639:6;40627:10;40624:22;40603:18;40591:10;40588:34;40585:62;40582:2;;;40650:18;;:::i;:::-;40582:2;40690:10;40686:2;40679:22;40469:238;;;:::o;40713:233::-;40752:3;40775:24;40793:5;40775:24;:::i;:::-;40766:33;;40821:66;40814:5;40811:77;40808:2;;;40891:18;;:::i;:::-;40808:2;40938:1;40931:5;40927:13;40920:20;;40756:190;;;:::o;40952:176::-;40984:1;41001:20;41019:1;41001:20;:::i;:::-;40996:25;;41035:20;41053:1;41035:20;:::i;:::-;41030:25;;41074:1;41064:2;;41079:18;;:::i;:::-;41064:2;41120:1;41117;41113:9;41108:14;;40986:142;;;;:::o;41134:180::-;41182:77;41179:1;41172:88;41279:4;41276:1;41269:15;41303:4;41300:1;41293:15;41320:180;41368:77;41365:1;41358:88;41465:4;41462:1;41455:15;41489:4;41486:1;41479:15;41506:180;41554:77;41551:1;41544:88;41651:4;41648:1;41641:15;41675:4;41672:1;41665:15;41692:180;41740:77;41737:1;41730:88;41837:4;41834:1;41827:15;41861:4;41858:1;41851:15;41878:102;41919:6;41970:2;41966:7;41961:2;41954:5;41950:14;41946:28;41936:38;;41926:54;;;:::o;41986:230::-;42126:34;42122:1;42114:6;42110:14;42103:58;42195:13;42190:2;42182:6;42178:15;42171:38;42092:124;:::o;42222:237::-;42362:34;42358:1;42350:6;42346:14;42339:58;42431:20;42426:2;42418:6;42414:15;42407:45;42328:131;:::o;42465:225::-;42605:34;42601:1;42593:6;42589:14;42582:58;42674:8;42669:2;42661:6;42657:15;42650:33;42571:119;:::o;42696:224::-;42836:34;42832:1;42824:6;42820:14;42813:58;42905:7;42900:2;42892:6;42888:15;42881:32;42802:118;:::o;42926:178::-;43066:30;43062:1;43054:6;43050:14;43043:54;43032:72;:::o;43110:171::-;43250:23;43246:1;43238:6;43234:14;43227:47;43216:65;:::o;43287:173::-;43427:25;43423:1;43415:6;43411:14;43404:49;43393:67;:::o;43466:223::-;43606:34;43602:1;43594:6;43590:14;43583:58;43675:6;43670:2;43662:6;43658:15;43651:31;43572:117;:::o;43695:175::-;43835:27;43831:1;43823:6;43819:14;43812:51;43801:69;:::o;43876:228::-;44016:34;44012:1;44004:6;44000:14;43993:58;44085:11;44080:2;44072:6;44068:15;44061:36;43982:122;:::o;44110:249::-;44250:34;44246:1;44238:6;44234:14;44227:58;44319:32;44314:2;44306:6;44302:15;44295:57;44216:143;:::o;44365:182::-;44505:34;44501:1;44493:6;44489:14;44482:58;44471:76;:::o;44553:171::-;44693:23;44689:1;44681:6;44677:14;44670:47;44659:65;:::o;44730:172::-;44870:24;44866:1;44858:6;44854:14;44847:48;44836:66;:::o;44908:182::-;45048:34;45044:1;45036:6;45032:14;45025:58;45014:76;:::o;45096:168::-;45236:20;45232:1;45224:6;45220:14;45213:44;45202:62;:::o;45270:234::-;45410:34;45406:1;45398:6;45394:14;45387:58;45479:17;45474:2;45466:6;45462:15;45455:42;45376:128;:::o;45510:172::-;45650:24;45646:1;45638:6;45634:14;45627:48;45616:66;:::o;45688:224::-;45828:34;45824:1;45816:6;45812:14;45805:58;45897:7;45892:2;45884:6;45880:15;45873:32;45794:118;:::o;45918:174::-;46058:26;46054:1;46046:6;46042:14;46035:50;46024:68;:::o;46098:220::-;46238:34;46234:1;46226:6;46222:14;46215:58;46307:3;46302:2;46294:6;46290:15;46283:28;46204:114;:::o;46324:::-;46430:8;:::o;46444:232::-;46584:34;46580:1;46572:6;46568:14;46561:58;46653:15;46648:2;46640:6;46636:15;46629:40;46550:126;:::o;46682:231::-;46822:34;46818:1;46810:6;46806:14;46799:58;46891:14;46886:2;46878:6;46874:15;46867:39;46788:125;:::o;46919:172::-;47059:24;47055:1;47047:6;47043:14;47036:48;47025:66;:::o;47097:233::-;47237:34;47233:1;47225:6;47221:14;47214:58;47306:16;47301:2;47293:6;47289:15;47282:41;47203:127;:::o;47336:122::-;47409:24;47427:5;47409:24;:::i;:::-;47402:5;47399:35;47389:2;;47448:1;47445;47438:12;47389:2;47379:79;:::o;47464:116::-;47534:21;47549:5;47534:21;:::i;:::-;47527:5;47524:32;47514:2;;47570:1;47567;47560:12;47514:2;47504:76;:::o;47586:120::-;47658:23;47675:5;47658:23;:::i;:::-;47651:5;47648:34;47638:2;;47696:1;47693;47686:12;47638:2;47628:78;:::o;47712:122::-;47785:24;47803:5;47785:24;:::i;:::-;47778:5;47775:35;47765:2;;47824:1;47821;47814:12;47765:2;47755:79;:::o
Swarm Source
ipfs://1a88c432eb9b017995c4ee703962a2713e60de4f092d88dbcebf842d3fb3c9e6