Feature Tip: Add private address tag to any address under My Name Tag !
ERC-721
Overview
Max Total Supply
555 KARMA
Holders
353
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
1 KARMALoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
KARMA
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-09-23 */ /** *Submitted for verification at Etherscan.io on 2021-09-14 */ // SPDX-License-Identifier: MIT 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); } /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } /** * @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); } /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) private pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } /* * @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; } } /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } /** * @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; } } /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { require(operator != _msgSender(), "ERC721: approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver(to).onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } /** * @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(); } } /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _setOwner(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _setOwner(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } contract KARMA is ERC721Enumerable, Ownable { using Strings for uint256; string _baseTokenURI; uint256 public _reserved = 555; uint256 private _price = 0.0555 ether; bool public _paused = true; // withdraw addresses address t1 = 0xeed0f861c97a181Cb1f91e39C500652e08e87955; constructor(string memory baseURI) ERC721("Karma Collective", "KARMA") { setBaseURI(baseURI); } function mint(uint256 num) public payable { uint256 supply = totalSupply(); require( !_paused, "Sale paused" ); require( num < 21, "You can mint a maximum of 20" ); require(balanceOf(msg.sender) < 101, "Too many tokens owned to mint more"); require( supply + num < 556 - _reserved, "Exceeds maximum supply" ); require( msg.value >= _price * num, "Ether sent is not correct" ); for(uint256 i; i < num; i++){ _safeMint( msg.sender, supply + i ); } } function walletOfOwner(address _owner) public view returns(uint256[] memory) { uint256 tokenCount = balanceOf(_owner); uint256[] memory tokensId = new uint256[](tokenCount); for(uint256 i; i < tokenCount; i++){ tokensId[i] = tokenOfOwnerByIndex(_owner, i); } return tokensId; } // Just in case Eth does some crazy stuff function setPrice(uint256 _newPrice) public onlyOwner() { _price = _newPrice; } function _baseURI() internal view virtual override returns (string memory) { return _baseTokenURI; } function setBaseURI(string memory baseURI) public onlyOwner { _baseTokenURI = baseURI; } function getPrice() public view returns (uint256){ return _price; } function giveAway(address _to, uint256 _amount) external onlyOwner() { require( _amount <= _reserved, "Exceeds reserved supply" ); uint256 supply = totalSupply(); for(uint256 i; i < _amount; i++){ _safeMint( _to, supply + i ); } _reserved -= _amount; } function pause(bool val) public onlyOwner { _paused = val; } function setReserved(uint256 _newReserved) public onlyOwner { _reserved = _newReserved; } function withdrawAll() public payable onlyOwner { uint256 _each = address(this).balance; require(payable(t1).send(_each)); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"baseURI","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":[],"name":"_paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_reserved","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"giveAway","outputs":[],"stateMutability":"nonpayable","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":"uint256","name":"num","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":"val","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPrice","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newReserved","type":"uint256"}],"name":"setReserved","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawAll","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
608060405261022b600c5566c52cf4b908c000600d556001600e60006101000a81548160ff02191690831515021790555073eed0f861c97a181cb1f91e39c500652e08e87955600e60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156200009257600080fd5b506040516200498e3803806200498e8339818101604052810190620000b8919062000461565b6040518060400160405280601081526020017f4b61726d6120436f6c6c656374697665000000000000000000000000000000008152506040518060400160405280600581526020017f4b41524d4100000000000000000000000000000000000000000000000000000081525081600090805190602001906200013c92919062000333565b5080600190805190602001906200015592919062000333565b505050620001786200016c6200019060201b60201c565b6200019860201b60201c565b62000189816200025e60201b60201c565b50620006b9565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6200026e6200019060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620002946200030960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620002ed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002e490620004d9565b60405180910390fd5b80600b90805190602001906200030592919062000333565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b8280546200034190620005a1565b90600052602060002090601f016020900481019282620003655760008555620003b1565b82601f106200038057805160ff1916838001178555620003b1565b82800160010185558215620003b1579182015b82811115620003b057825182559160200191906001019062000393565b5b509050620003c09190620003c4565b5090565b5b80821115620003df576000816000905550600101620003c5565b5090565b6000620003fa620003f48462000524565b620004fb565b90508281526020810184848401111562000419576200041862000670565b5b620004268482856200056b565b509392505050565b600082601f8301126200044657620004456200066b565b5b815162000458848260208601620003e3565b91505092915050565b6000602082840312156200047a57620004796200067a565b5b600082015167ffffffffffffffff8111156200049b576200049a62000675565b5b620004a9848285016200042e565b91505092915050565b6000620004c16020836200055a565b9150620004ce8262000690565b602082019050919050565b60006020820190508181036000830152620004f481620004b2565b9050919050565b6000620005076200051a565b9050620005158282620005d7565b919050565b6000604051905090565b600067ffffffffffffffff8211156200054257620005416200063c565b5b6200054d826200067f565b9050602081019050919050565b600082825260208201905092915050565b60005b838110156200058b5780820151818401526020810190506200056e565b838111156200059b576000848401525b50505050565b60006002820490506001821680620005ba57607f821691505b60208210811415620005d157620005d06200060d565b5b50919050565b620005e2826200067f565b810181811067ffffffffffffffff821117156200060457620006036200063c565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6142c580620006c96000396000f3fe6080604052600436106101cd5760003560e01c80636aaa571d116100f757806398d5fdca11610095578063c87b56dd11610064578063c87b56dd14610658578063ca80014414610695578063e985e9c5146106be578063f2fde38b146106fb576101cd565b806398d5fdca146105bf578063a0712d68146105ea578063a22cb46514610606578063b88d4fde1461062f576101cd565b8063853828b6116100d1578063853828b6146105365780638da5cb5b1461054057806391b7f5ed1461056b57806395d89b4114610594576101cd565b80636aaa571d146104b757806370a08231146104e2578063715018a61461051f576101cd565b806323b872dd1161016f578063438b63001161013e578063438b6300146103d75780634f6ccce71461041457806355f804b3146104515780636352211e1461047a576101cd565b806323b872dd1461031f5780632d6e71b6146103485780632f745c591461037157806342842e0e146103ae576101cd565b8063081812fc116101ab578063081812fc14610263578063095ea7b3146102a057806316c61ccc146102c957806318160ddd146102f4576101cd565b806301ffc9a7146101d257806302329a291461020f57806306fdde0314610238575b600080fd5b3480156101de57600080fd5b506101f960048036038101906101f49190612dc5565b610724565b60405161020691906133df565b60405180910390f35b34801561021b57600080fd5b5061023660048036038101906102319190612d98565b61079e565b005b34801561024457600080fd5b5061024d610837565b60405161025a91906133fa565b60405180910390f35b34801561026f57600080fd5b5061028a60048036038101906102859190612e68565b6108c9565b6040516102979190613356565b60405180910390f35b3480156102ac57600080fd5b506102c760048036038101906102c29190612d58565b61094e565b005b3480156102d557600080fd5b506102de610a66565b6040516102eb91906133df565b60405180910390f35b34801561030057600080fd5b50610309610a79565b604051610316919061371c565b60405180910390f35b34801561032b57600080fd5b5061034660048036038101906103419190612c42565b610a86565b005b34801561035457600080fd5b5061036f600480360381019061036a9190612e68565b610ae6565b005b34801561037d57600080fd5b5061039860048036038101906103939190612d58565b610b6c565b6040516103a5919061371c565b60405180910390f35b3480156103ba57600080fd5b506103d560048036038101906103d09190612c42565b610c11565b005b3480156103e357600080fd5b506103fe60048036038101906103f99190612bd5565b610c31565b60405161040b91906133bd565b60405180910390f35b34801561042057600080fd5b5061043b60048036038101906104369190612e68565b610cdf565b604051610448919061371c565b60405180910390f35b34801561045d57600080fd5b5061047860048036038101906104739190612e1f565b610d50565b005b34801561048657600080fd5b506104a1600480360381019061049c9190612e68565b610de6565b6040516104ae9190613356565b60405180910390f35b3480156104c357600080fd5b506104cc610e98565b6040516104d9919061371c565b60405180910390f35b3480156104ee57600080fd5b5061050960048036038101906105049190612bd5565b610e9e565b604051610516919061371c565b60405180910390f35b34801561052b57600080fd5b50610534610f56565b005b61053e610fde565b005b34801561054c57600080fd5b506105556110c2565b6040516105629190613356565b60405180910390f35b34801561057757600080fd5b50610592600480360381019061058d9190612e68565b6110ec565b005b3480156105a057600080fd5b506105a9611172565b6040516105b691906133fa565b60405180910390f35b3480156105cb57600080fd5b506105d4611204565b6040516105e1919061371c565b60405180910390f35b61060460048036038101906105ff9190612e68565b61120e565b005b34801561061257600080fd5b5061062d60048036038101906106289190612d18565b6113dc565b005b34801561063b57600080fd5b5061065660048036038101906106519190612c95565b61155d565b005b34801561066457600080fd5b5061067f600480360381019061067a9190612e68565b6115bf565b60405161068c91906133fa565b60405180910390f35b3480156106a157600080fd5b506106bc60048036038101906106b79190612d58565b611666565b005b3480156106ca57600080fd5b506106e560048036038101906106e09190612c02565b611785565b6040516106f291906133df565b60405180910390f35b34801561070757600080fd5b50610722600480360381019061071d9190612bd5565b611819565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610797575061079682611911565b5b9050919050565b6107a66119f3565b73ffffffffffffffffffffffffffffffffffffffff166107c46110c2565b73ffffffffffffffffffffffffffffffffffffffff161461081a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610811906135fc565b60405180910390fd5b80600e60006101000a81548160ff02191690831515021790555050565b60606000805461084690613a05565b80601f016020809104026020016040519081016040528092919081815260200182805461087290613a05565b80156108bf5780601f10610894576101008083540402835291602001916108bf565b820191906000526020600020905b8154815290600101906020018083116108a257829003601f168201915b5050505050905090565b60006108d4826119fb565b610913576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090a906135dc565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061095982610de6565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156109ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109c19061367c565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166109e96119f3565b73ffffffffffffffffffffffffffffffffffffffff161480610a185750610a1781610a126119f3565b611785565b5b610a57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4e9061353c565b60405180910390fd5b610a618383611a67565b505050565b600e60009054906101000a900460ff1681565b6000600880549050905090565b610a97610a916119f3565b82611b20565b610ad6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610acd906136dc565b60405180910390fd5b610ae1838383611bfe565b505050565b610aee6119f3565b73ffffffffffffffffffffffffffffffffffffffff16610b0c6110c2565b73ffffffffffffffffffffffffffffffffffffffff1614610b62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b59906135fc565b60405180910390fd5b80600c8190555050565b6000610b7783610e9e565b8210610bb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610baf9061343c565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610c2c8383836040518060200160405280600081525061155d565b505050565b60606000610c3e83610e9e565b905060008167ffffffffffffffff811115610c5c57610c5b613bcd565b5b604051908082528060200260200182016040528015610c8a5781602001602082028036833780820191505090505b50905060005b82811015610cd457610ca28582610b6c565b828281518110610cb557610cb4613b9e565b5b6020026020010181815250508080610ccc90613a68565b915050610c90565b508092505050919050565b6000610ce9610a79565b8210610d2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d21906136fc565b60405180910390fd5b60088281548110610d3e57610d3d613b9e565b5b90600052602060002001549050919050565b610d586119f3565b73ffffffffffffffffffffffffffffffffffffffff16610d766110c2565b73ffffffffffffffffffffffffffffffffffffffff1614610dcc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc3906135fc565b60405180910390fd5b80600b9080519060200190610de29291906129e9565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610e8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e869061357c565b60405180910390fd5b80915050919050565b600c5481565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610f0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f069061355c565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610f5e6119f3565b73ffffffffffffffffffffffffffffffffffffffff16610f7c6110c2565b73ffffffffffffffffffffffffffffffffffffffff1614610fd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc9906135fc565b60405180910390fd5b610fdc6000611e5a565b565b610fe66119f3565b73ffffffffffffffffffffffffffffffffffffffff166110046110c2565b73ffffffffffffffffffffffffffffffffffffffff161461105a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611051906135fc565b60405180910390fd5b6000479050600e60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050506110bf57600080fd5b50565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6110f46119f3565b73ffffffffffffffffffffffffffffffffffffffff166111126110c2565b73ffffffffffffffffffffffffffffffffffffffff1614611168576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115f906135fc565b60405180910390fd5b80600d8190555050565b60606001805461118190613a05565b80601f01602080910402602001604051908101604052809291908181526020018280546111ad90613a05565b80156111fa5780601f106111cf576101008083540402835291602001916111fa565b820191906000526020600020905b8154815290600101906020018083116111dd57829003601f168201915b5050505050905090565b6000600d54905090565b6000611218610a79565b9050600e60009054906101000a900460ff161561126a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112619061341c565b60405180910390fd5b601582106112ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a49061351c565b60405180910390fd5b60656112b833610e9e565b106112f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ef9061365c565b60405180910390fd5b600c5461022c611308919061391b565b8282611314919061383a565b10611354576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134b9061369c565b60405180910390fd5b81600d5461136291906138c1565b3410156113a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139b906136bc565b60405180910390fd5b60005b828110156113d7576113c43382846113bf919061383a565b611f20565b80806113cf90613a68565b9150506113a7565b505050565b6113e46119f3565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611452576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611449906134dc565b60405180910390fd5b806005600061145f6119f3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661150c6119f3565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161155191906133df565b60405180910390a35050565b61156e6115686119f3565b83611b20565b6115ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a4906136dc565b60405180910390fd5b6115b984848484611f3e565b50505050565b60606115ca826119fb565b611609576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116009061363c565b60405180910390fd5b6000611613611f9a565b90506000815111611633576040518060200160405280600081525061165e565b8061163d8461202c565b60405160200161164e929190613332565b6040516020818303038152906040525b915050919050565b61166e6119f3565b73ffffffffffffffffffffffffffffffffffffffff1661168c6110c2565b73ffffffffffffffffffffffffffffffffffffffff16146116e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d9906135fc565b60405180910390fd5b600c54811115611727576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171e9061359c565b60405180910390fd5b6000611731610a79565b905060005b828110156117665761175384828461174e919061383a565b611f20565b808061175e90613a68565b915050611736565b5081600c6000828254611779919061391b565b92505081905550505050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6118216119f3565b73ffffffffffffffffffffffffffffffffffffffff1661183f6110c2565b73ffffffffffffffffffffffffffffffffffffffff1614611895576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188c906135fc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611905576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118fc9061347c565b60405180910390fd5b61190e81611e5a565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806119dc57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806119ec57506119eb8261218d565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611ada83610de6565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611b2b826119fb565b611b6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b61906134fc565b60405180910390fd5b6000611b7583610de6565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611be457508373ffffffffffffffffffffffffffffffffffffffff16611bcc846108c9565b73ffffffffffffffffffffffffffffffffffffffff16145b80611bf55750611bf48185611785565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611c1e82610de6565b73ffffffffffffffffffffffffffffffffffffffff1614611c74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6b9061361c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ce4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cdb906134bc565b60405180910390fd5b611cef8383836121f7565b611cfa600082611a67565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611d4a919061391b565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611da1919061383a565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611f3a82826040518060200160405280600081525061230b565b5050565b611f49848484611bfe565b611f5584848484612366565b611f94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8b9061345c565b60405180910390fd5b50505050565b6060600b8054611fa990613a05565b80601f0160208091040260200160405190810160405280929190818152602001828054611fd590613a05565b80156120225780601f10611ff757610100808354040283529160200191612022565b820191906000526020600020905b81548152906001019060200180831161200557829003601f168201915b5050505050905090565b60606000821415612074576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612188565b600082905060005b600082146120a657808061208f90613a68565b915050600a8261209f9190613890565b915061207c565b60008167ffffffffffffffff8111156120c2576120c1613bcd565b5b6040519080825280601f01601f1916602001820160405280156120f45781602001600182028036833780820191505090505b5090505b600085146121815760018261210d919061391b565b9150600a8561211c9190613ab1565b6030612128919061383a565b60f81b81838151811061213e5761213d613b9e565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561217a9190613890565b94506120f8565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6122028383836124fd565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156122455761224081612502565b612284565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461228357612282838261254b565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156122c7576122c2816126b8565b612306565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612305576123048282612789565b5b5b505050565b6123158383612808565b6123226000848484612366565b612361576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123589061345c565b60405180910390fd5b505050565b60006123878473ffffffffffffffffffffffffffffffffffffffff166129d6565b156124f0578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026123b06119f3565b8786866040518563ffffffff1660e01b81526004016123d29493929190613371565b602060405180830381600087803b1580156123ec57600080fd5b505af192505050801561241d57506040513d601f19601f8201168201806040525081019061241a9190612df2565b60015b6124a0573d806000811461244d576040519150601f19603f3d011682016040523d82523d6000602084013e612452565b606091505b50600081511415612498576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161248f9061345c565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506124f5565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161255884610e9e565b612562919061391b565b9050600060076000848152602001908152602001600020549050818114612647576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506126cc919061391b565b90506000600960008481526020019081526020016000205490506000600883815481106126fc576126fb613b9e565b5b90600052602060002001549050806008838154811061271e5761271d613b9e565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548061276d5761276c613b6f565b5b6001900381819060005260206000200160009055905550505050565b600061279483610e9e565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612878576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161286f906135bc565b60405180910390fd5b612881816119fb565b156128c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128b89061349c565b60405180910390fd5b6128cd600083836121f7565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461291d919061383a565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b8280546129f590613a05565b90600052602060002090601f016020900481019282612a175760008555612a5e565b82601f10612a3057805160ff1916838001178555612a5e565b82800160010185558215612a5e579182015b82811115612a5d578251825591602001919060010190612a42565b5b509050612a6b9190612a6f565b5090565b5b80821115612a88576000816000905550600101612a70565b5090565b6000612a9f612a9a8461375c565b613737565b905082815260208101848484011115612abb57612aba613c01565b5b612ac68482856139c3565b509392505050565b6000612ae1612adc8461378d565b613737565b905082815260208101848484011115612afd57612afc613c01565b5b612b088482856139c3565b509392505050565b600081359050612b1f81614233565b92915050565b600081359050612b348161424a565b92915050565b600081359050612b4981614261565b92915050565b600081519050612b5e81614261565b92915050565b600082601f830112612b7957612b78613bfc565b5b8135612b89848260208601612a8c565b91505092915050565b600082601f830112612ba757612ba6613bfc565b5b8135612bb7848260208601612ace565b91505092915050565b600081359050612bcf81614278565b92915050565b600060208284031215612beb57612bea613c0b565b5b6000612bf984828501612b10565b91505092915050565b60008060408385031215612c1957612c18613c0b565b5b6000612c2785828601612b10565b9250506020612c3885828601612b10565b9150509250929050565b600080600060608486031215612c5b57612c5a613c0b565b5b6000612c6986828701612b10565b9350506020612c7a86828701612b10565b9250506040612c8b86828701612bc0565b9150509250925092565b60008060008060808587031215612caf57612cae613c0b565b5b6000612cbd87828801612b10565b9450506020612cce87828801612b10565b9350506040612cdf87828801612bc0565b925050606085013567ffffffffffffffff811115612d0057612cff613c06565b5b612d0c87828801612b64565b91505092959194509250565b60008060408385031215612d2f57612d2e613c0b565b5b6000612d3d85828601612b10565b9250506020612d4e85828601612b25565b9150509250929050565b60008060408385031215612d6f57612d6e613c0b565b5b6000612d7d85828601612b10565b9250506020612d8e85828601612bc0565b9150509250929050565b600060208284031215612dae57612dad613c0b565b5b6000612dbc84828501612b25565b91505092915050565b600060208284031215612ddb57612dda613c0b565b5b6000612de984828501612b3a565b91505092915050565b600060208284031215612e0857612e07613c0b565b5b6000612e1684828501612b4f565b91505092915050565b600060208284031215612e3557612e34613c0b565b5b600082013567ffffffffffffffff811115612e5357612e52613c06565b5b612e5f84828501612b92565b91505092915050565b600060208284031215612e7e57612e7d613c0b565b5b6000612e8c84828501612bc0565b91505092915050565b6000612ea18383613314565b60208301905092915050565b612eb68161394f565b82525050565b6000612ec7826137ce565b612ed181856137fc565b9350612edc836137be565b8060005b83811015612f0d578151612ef48882612e95565b9750612eff836137ef565b925050600181019050612ee0565b5085935050505092915050565b612f2381613961565b82525050565b6000612f34826137d9565b612f3e818561380d565b9350612f4e8185602086016139d2565b612f5781613c10565b840191505092915050565b6000612f6d826137e4565b612f77818561381e565b9350612f878185602086016139d2565b612f9081613c10565b840191505092915050565b6000612fa6826137e4565b612fb0818561382f565b9350612fc08185602086016139d2565b80840191505092915050565b6000612fd9600b8361381e565b9150612fe482613c21565b602082019050919050565b6000612ffc602b8361381e565b915061300782613c4a565b604082019050919050565b600061301f60328361381e565b915061302a82613c99565b604082019050919050565b600061304260268361381e565b915061304d82613ce8565b604082019050919050565b6000613065601c8361381e565b915061307082613d37565b602082019050919050565b600061308860248361381e565b915061309382613d60565b604082019050919050565b60006130ab60198361381e565b91506130b682613daf565b602082019050919050565b60006130ce602c8361381e565b91506130d982613dd8565b604082019050919050565b60006130f1601c8361381e565b91506130fc82613e27565b602082019050919050565b600061311460388361381e565b915061311f82613e50565b604082019050919050565b6000613137602a8361381e565b915061314282613e9f565b604082019050919050565b600061315a60298361381e565b915061316582613eee565b604082019050919050565b600061317d60178361381e565b915061318882613f3d565b602082019050919050565b60006131a060208361381e565b91506131ab82613f66565b602082019050919050565b60006131c3602c8361381e565b91506131ce82613f8f565b604082019050919050565b60006131e660208361381e565b91506131f182613fde565b602082019050919050565b600061320960298361381e565b915061321482614007565b604082019050919050565b600061322c602f8361381e565b915061323782614056565b604082019050919050565b600061324f60228361381e565b915061325a826140a5565b604082019050919050565b600061327260218361381e565b915061327d826140f4565b604082019050919050565b600061329560168361381e565b91506132a082614143565b602082019050919050565b60006132b860198361381e565b91506132c38261416c565b602082019050919050565b60006132db60318361381e565b91506132e682614195565b604082019050919050565b60006132fe602c8361381e565b9150613309826141e4565b604082019050919050565b61331d816139b9565b82525050565b61332c816139b9565b82525050565b600061333e8285612f9b565b915061334a8284612f9b565b91508190509392505050565b600060208201905061336b6000830184612ead565b92915050565b60006080820190506133866000830187612ead565b6133936020830186612ead565b6133a06040830185613323565b81810360608301526133b28184612f29565b905095945050505050565b600060208201905081810360008301526133d78184612ebc565b905092915050565b60006020820190506133f46000830184612f1a565b92915050565b600060208201905081810360008301526134148184612f62565b905092915050565b6000602082019050818103600083015261343581612fcc565b9050919050565b6000602082019050818103600083015261345581612fef565b9050919050565b6000602082019050818103600083015261347581613012565b9050919050565b6000602082019050818103600083015261349581613035565b9050919050565b600060208201905081810360008301526134b581613058565b9050919050565b600060208201905081810360008301526134d58161307b565b9050919050565b600060208201905081810360008301526134f58161309e565b9050919050565b60006020820190508181036000830152613515816130c1565b9050919050565b60006020820190508181036000830152613535816130e4565b9050919050565b6000602082019050818103600083015261355581613107565b9050919050565b600060208201905081810360008301526135758161312a565b9050919050565b600060208201905081810360008301526135958161314d565b9050919050565b600060208201905081810360008301526135b581613170565b9050919050565b600060208201905081810360008301526135d581613193565b9050919050565b600060208201905081810360008301526135f5816131b6565b9050919050565b60006020820190508181036000830152613615816131d9565b9050919050565b60006020820190508181036000830152613635816131fc565b9050919050565b600060208201905081810360008301526136558161321f565b9050919050565b6000602082019050818103600083015261367581613242565b9050919050565b6000602082019050818103600083015261369581613265565b9050919050565b600060208201905081810360008301526136b581613288565b9050919050565b600060208201905081810360008301526136d5816132ab565b9050919050565b600060208201905081810360008301526136f5816132ce565b9050919050565b60006020820190508181036000830152613715816132f1565b9050919050565b60006020820190506137316000830184613323565b92915050565b6000613741613752565b905061374d8282613a37565b919050565b6000604051905090565b600067ffffffffffffffff82111561377757613776613bcd565b5b61378082613c10565b9050602081019050919050565b600067ffffffffffffffff8211156137a8576137a7613bcd565b5b6137b182613c10565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613845826139b9565b9150613850836139b9565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561388557613884613ae2565b5b828201905092915050565b600061389b826139b9565b91506138a6836139b9565b9250826138b6576138b5613b11565b5b828204905092915050565b60006138cc826139b9565b91506138d7836139b9565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156139105761390f613ae2565b5b828202905092915050565b6000613926826139b9565b9150613931836139b9565b92508282101561394457613943613ae2565b5b828203905092915050565b600061395a82613999565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156139f05780820151818401526020810190506139d5565b838111156139ff576000848401525b50505050565b60006002820490506001821680613a1d57607f821691505b60208210811415613a3157613a30613b40565b5b50919050565b613a4082613c10565b810181811067ffffffffffffffff82111715613a5f57613a5e613bcd565b5b80604052505050565b6000613a73826139b9565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613aa657613aa5613ae2565b5b600182019050919050565b6000613abc826139b9565b9150613ac7836139b9565b925082613ad757613ad6613b11565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f53616c6520706175736564000000000000000000000000000000000000000000600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f596f752063616e206d696e742061206d6178696d756d206f6620323000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4578636565647320726573657276656420737570706c79000000000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f546f6f206d616e7920746f6b656e73206f776e656420746f206d696e74206d6f60008201527f7265000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f45786365656473206d6178696d756d20737570706c7900000000000000000000600082015250565b7f45746865722073656e74206973206e6f7420636f727265637400000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b61423c8161394f565b811461424757600080fd5b50565b61425381613961565b811461425e57600080fd5b50565b61426a8161396d565b811461427557600080fd5b50565b614281816139b9565b811461428c57600080fd5b5056fea2646970667358221220ea43623a9c74afe855fab0c5b33946f9b02f9e72628639823fee225a0fd2f93e64736f6c6343000807003300000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x6080604052600436106101cd5760003560e01c80636aaa571d116100f757806398d5fdca11610095578063c87b56dd11610064578063c87b56dd14610658578063ca80014414610695578063e985e9c5146106be578063f2fde38b146106fb576101cd565b806398d5fdca146105bf578063a0712d68146105ea578063a22cb46514610606578063b88d4fde1461062f576101cd565b8063853828b6116100d1578063853828b6146105365780638da5cb5b1461054057806391b7f5ed1461056b57806395d89b4114610594576101cd565b80636aaa571d146104b757806370a08231146104e2578063715018a61461051f576101cd565b806323b872dd1161016f578063438b63001161013e578063438b6300146103d75780634f6ccce71461041457806355f804b3146104515780636352211e1461047a576101cd565b806323b872dd1461031f5780632d6e71b6146103485780632f745c591461037157806342842e0e146103ae576101cd565b8063081812fc116101ab578063081812fc14610263578063095ea7b3146102a057806316c61ccc146102c957806318160ddd146102f4576101cd565b806301ffc9a7146101d257806302329a291461020f57806306fdde0314610238575b600080fd5b3480156101de57600080fd5b506101f960048036038101906101f49190612dc5565b610724565b60405161020691906133df565b60405180910390f35b34801561021b57600080fd5b5061023660048036038101906102319190612d98565b61079e565b005b34801561024457600080fd5b5061024d610837565b60405161025a91906133fa565b60405180910390f35b34801561026f57600080fd5b5061028a60048036038101906102859190612e68565b6108c9565b6040516102979190613356565b60405180910390f35b3480156102ac57600080fd5b506102c760048036038101906102c29190612d58565b61094e565b005b3480156102d557600080fd5b506102de610a66565b6040516102eb91906133df565b60405180910390f35b34801561030057600080fd5b50610309610a79565b604051610316919061371c565b60405180910390f35b34801561032b57600080fd5b5061034660048036038101906103419190612c42565b610a86565b005b34801561035457600080fd5b5061036f600480360381019061036a9190612e68565b610ae6565b005b34801561037d57600080fd5b5061039860048036038101906103939190612d58565b610b6c565b6040516103a5919061371c565b60405180910390f35b3480156103ba57600080fd5b506103d560048036038101906103d09190612c42565b610c11565b005b3480156103e357600080fd5b506103fe60048036038101906103f99190612bd5565b610c31565b60405161040b91906133bd565b60405180910390f35b34801561042057600080fd5b5061043b60048036038101906104369190612e68565b610cdf565b604051610448919061371c565b60405180910390f35b34801561045d57600080fd5b5061047860048036038101906104739190612e1f565b610d50565b005b34801561048657600080fd5b506104a1600480360381019061049c9190612e68565b610de6565b6040516104ae9190613356565b60405180910390f35b3480156104c357600080fd5b506104cc610e98565b6040516104d9919061371c565b60405180910390f35b3480156104ee57600080fd5b5061050960048036038101906105049190612bd5565b610e9e565b604051610516919061371c565b60405180910390f35b34801561052b57600080fd5b50610534610f56565b005b61053e610fde565b005b34801561054c57600080fd5b506105556110c2565b6040516105629190613356565b60405180910390f35b34801561057757600080fd5b50610592600480360381019061058d9190612e68565b6110ec565b005b3480156105a057600080fd5b506105a9611172565b6040516105b691906133fa565b60405180910390f35b3480156105cb57600080fd5b506105d4611204565b6040516105e1919061371c565b60405180910390f35b61060460048036038101906105ff9190612e68565b61120e565b005b34801561061257600080fd5b5061062d60048036038101906106289190612d18565b6113dc565b005b34801561063b57600080fd5b5061065660048036038101906106519190612c95565b61155d565b005b34801561066457600080fd5b5061067f600480360381019061067a9190612e68565b6115bf565b60405161068c91906133fa565b60405180910390f35b3480156106a157600080fd5b506106bc60048036038101906106b79190612d58565b611666565b005b3480156106ca57600080fd5b506106e560048036038101906106e09190612c02565b611785565b6040516106f291906133df565b60405180910390f35b34801561070757600080fd5b50610722600480360381019061071d9190612bd5565b611819565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610797575061079682611911565b5b9050919050565b6107a66119f3565b73ffffffffffffffffffffffffffffffffffffffff166107c46110c2565b73ffffffffffffffffffffffffffffffffffffffff161461081a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610811906135fc565b60405180910390fd5b80600e60006101000a81548160ff02191690831515021790555050565b60606000805461084690613a05565b80601f016020809104026020016040519081016040528092919081815260200182805461087290613a05565b80156108bf5780601f10610894576101008083540402835291602001916108bf565b820191906000526020600020905b8154815290600101906020018083116108a257829003601f168201915b5050505050905090565b60006108d4826119fb565b610913576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090a906135dc565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061095982610de6565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156109ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109c19061367c565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166109e96119f3565b73ffffffffffffffffffffffffffffffffffffffff161480610a185750610a1781610a126119f3565b611785565b5b610a57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4e9061353c565b60405180910390fd5b610a618383611a67565b505050565b600e60009054906101000a900460ff1681565b6000600880549050905090565b610a97610a916119f3565b82611b20565b610ad6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610acd906136dc565b60405180910390fd5b610ae1838383611bfe565b505050565b610aee6119f3565b73ffffffffffffffffffffffffffffffffffffffff16610b0c6110c2565b73ffffffffffffffffffffffffffffffffffffffff1614610b62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b59906135fc565b60405180910390fd5b80600c8190555050565b6000610b7783610e9e565b8210610bb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610baf9061343c565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610c2c8383836040518060200160405280600081525061155d565b505050565b60606000610c3e83610e9e565b905060008167ffffffffffffffff811115610c5c57610c5b613bcd565b5b604051908082528060200260200182016040528015610c8a5781602001602082028036833780820191505090505b50905060005b82811015610cd457610ca28582610b6c565b828281518110610cb557610cb4613b9e565b5b6020026020010181815250508080610ccc90613a68565b915050610c90565b508092505050919050565b6000610ce9610a79565b8210610d2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d21906136fc565b60405180910390fd5b60088281548110610d3e57610d3d613b9e565b5b90600052602060002001549050919050565b610d586119f3565b73ffffffffffffffffffffffffffffffffffffffff16610d766110c2565b73ffffffffffffffffffffffffffffffffffffffff1614610dcc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc3906135fc565b60405180910390fd5b80600b9080519060200190610de29291906129e9565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610e8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e869061357c565b60405180910390fd5b80915050919050565b600c5481565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610f0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f069061355c565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610f5e6119f3565b73ffffffffffffffffffffffffffffffffffffffff16610f7c6110c2565b73ffffffffffffffffffffffffffffffffffffffff1614610fd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc9906135fc565b60405180910390fd5b610fdc6000611e5a565b565b610fe66119f3565b73ffffffffffffffffffffffffffffffffffffffff166110046110c2565b73ffffffffffffffffffffffffffffffffffffffff161461105a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611051906135fc565b60405180910390fd5b6000479050600e60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050506110bf57600080fd5b50565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6110f46119f3565b73ffffffffffffffffffffffffffffffffffffffff166111126110c2565b73ffffffffffffffffffffffffffffffffffffffff1614611168576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115f906135fc565b60405180910390fd5b80600d8190555050565b60606001805461118190613a05565b80601f01602080910402602001604051908101604052809291908181526020018280546111ad90613a05565b80156111fa5780601f106111cf576101008083540402835291602001916111fa565b820191906000526020600020905b8154815290600101906020018083116111dd57829003601f168201915b5050505050905090565b6000600d54905090565b6000611218610a79565b9050600e60009054906101000a900460ff161561126a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112619061341c565b60405180910390fd5b601582106112ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a49061351c565b60405180910390fd5b60656112b833610e9e565b106112f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ef9061365c565b60405180910390fd5b600c5461022c611308919061391b565b8282611314919061383a565b10611354576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134b9061369c565b60405180910390fd5b81600d5461136291906138c1565b3410156113a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139b906136bc565b60405180910390fd5b60005b828110156113d7576113c43382846113bf919061383a565b611f20565b80806113cf90613a68565b9150506113a7565b505050565b6113e46119f3565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611452576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611449906134dc565b60405180910390fd5b806005600061145f6119f3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661150c6119f3565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161155191906133df565b60405180910390a35050565b61156e6115686119f3565b83611b20565b6115ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a4906136dc565b60405180910390fd5b6115b984848484611f3e565b50505050565b60606115ca826119fb565b611609576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116009061363c565b60405180910390fd5b6000611613611f9a565b90506000815111611633576040518060200160405280600081525061165e565b8061163d8461202c565b60405160200161164e929190613332565b6040516020818303038152906040525b915050919050565b61166e6119f3565b73ffffffffffffffffffffffffffffffffffffffff1661168c6110c2565b73ffffffffffffffffffffffffffffffffffffffff16146116e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d9906135fc565b60405180910390fd5b600c54811115611727576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171e9061359c565b60405180910390fd5b6000611731610a79565b905060005b828110156117665761175384828461174e919061383a565b611f20565b808061175e90613a68565b915050611736565b5081600c6000828254611779919061391b565b92505081905550505050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6118216119f3565b73ffffffffffffffffffffffffffffffffffffffff1661183f6110c2565b73ffffffffffffffffffffffffffffffffffffffff1614611895576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188c906135fc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611905576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118fc9061347c565b60405180910390fd5b61190e81611e5a565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806119dc57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806119ec57506119eb8261218d565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611ada83610de6565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611b2b826119fb565b611b6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b61906134fc565b60405180910390fd5b6000611b7583610de6565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611be457508373ffffffffffffffffffffffffffffffffffffffff16611bcc846108c9565b73ffffffffffffffffffffffffffffffffffffffff16145b80611bf55750611bf48185611785565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611c1e82610de6565b73ffffffffffffffffffffffffffffffffffffffff1614611c74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6b9061361c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ce4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cdb906134bc565b60405180910390fd5b611cef8383836121f7565b611cfa600082611a67565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611d4a919061391b565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611da1919061383a565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611f3a82826040518060200160405280600081525061230b565b5050565b611f49848484611bfe565b611f5584848484612366565b611f94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8b9061345c565b60405180910390fd5b50505050565b6060600b8054611fa990613a05565b80601f0160208091040260200160405190810160405280929190818152602001828054611fd590613a05565b80156120225780601f10611ff757610100808354040283529160200191612022565b820191906000526020600020905b81548152906001019060200180831161200557829003601f168201915b5050505050905090565b60606000821415612074576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612188565b600082905060005b600082146120a657808061208f90613a68565b915050600a8261209f9190613890565b915061207c565b60008167ffffffffffffffff8111156120c2576120c1613bcd565b5b6040519080825280601f01601f1916602001820160405280156120f45781602001600182028036833780820191505090505b5090505b600085146121815760018261210d919061391b565b9150600a8561211c9190613ab1565b6030612128919061383a565b60f81b81838151811061213e5761213d613b9e565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561217a9190613890565b94506120f8565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6122028383836124fd565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156122455761224081612502565b612284565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461228357612282838261254b565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156122c7576122c2816126b8565b612306565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612305576123048282612789565b5b5b505050565b6123158383612808565b6123226000848484612366565b612361576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123589061345c565b60405180910390fd5b505050565b60006123878473ffffffffffffffffffffffffffffffffffffffff166129d6565b156124f0578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026123b06119f3565b8786866040518563ffffffff1660e01b81526004016123d29493929190613371565b602060405180830381600087803b1580156123ec57600080fd5b505af192505050801561241d57506040513d601f19601f8201168201806040525081019061241a9190612df2565b60015b6124a0573d806000811461244d576040519150601f19603f3d011682016040523d82523d6000602084013e612452565b606091505b50600081511415612498576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161248f9061345c565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506124f5565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161255884610e9e565b612562919061391b565b9050600060076000848152602001908152602001600020549050818114612647576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506126cc919061391b565b90506000600960008481526020019081526020016000205490506000600883815481106126fc576126fb613b9e565b5b90600052602060002001549050806008838154811061271e5761271d613b9e565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548061276d5761276c613b6f565b5b6001900381819060005260206000200160009055905550505050565b600061279483610e9e565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612878576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161286f906135bc565b60405180910390fd5b612881816119fb565b156128c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128b89061349c565b60405180910390fd5b6128cd600083836121f7565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461291d919061383a565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b8280546129f590613a05565b90600052602060002090601f016020900481019282612a175760008555612a5e565b82601f10612a3057805160ff1916838001178555612a5e565b82800160010185558215612a5e579182015b82811115612a5d578251825591602001919060010190612a42565b5b509050612a6b9190612a6f565b5090565b5b80821115612a88576000816000905550600101612a70565b5090565b6000612a9f612a9a8461375c565b613737565b905082815260208101848484011115612abb57612aba613c01565b5b612ac68482856139c3565b509392505050565b6000612ae1612adc8461378d565b613737565b905082815260208101848484011115612afd57612afc613c01565b5b612b088482856139c3565b509392505050565b600081359050612b1f81614233565b92915050565b600081359050612b348161424a565b92915050565b600081359050612b4981614261565b92915050565b600081519050612b5e81614261565b92915050565b600082601f830112612b7957612b78613bfc565b5b8135612b89848260208601612a8c565b91505092915050565b600082601f830112612ba757612ba6613bfc565b5b8135612bb7848260208601612ace565b91505092915050565b600081359050612bcf81614278565b92915050565b600060208284031215612beb57612bea613c0b565b5b6000612bf984828501612b10565b91505092915050565b60008060408385031215612c1957612c18613c0b565b5b6000612c2785828601612b10565b9250506020612c3885828601612b10565b9150509250929050565b600080600060608486031215612c5b57612c5a613c0b565b5b6000612c6986828701612b10565b9350506020612c7a86828701612b10565b9250506040612c8b86828701612bc0565b9150509250925092565b60008060008060808587031215612caf57612cae613c0b565b5b6000612cbd87828801612b10565b9450506020612cce87828801612b10565b9350506040612cdf87828801612bc0565b925050606085013567ffffffffffffffff811115612d0057612cff613c06565b5b612d0c87828801612b64565b91505092959194509250565b60008060408385031215612d2f57612d2e613c0b565b5b6000612d3d85828601612b10565b9250506020612d4e85828601612b25565b9150509250929050565b60008060408385031215612d6f57612d6e613c0b565b5b6000612d7d85828601612b10565b9250506020612d8e85828601612bc0565b9150509250929050565b600060208284031215612dae57612dad613c0b565b5b6000612dbc84828501612b25565b91505092915050565b600060208284031215612ddb57612dda613c0b565b5b6000612de984828501612b3a565b91505092915050565b600060208284031215612e0857612e07613c0b565b5b6000612e1684828501612b4f565b91505092915050565b600060208284031215612e3557612e34613c0b565b5b600082013567ffffffffffffffff811115612e5357612e52613c06565b5b612e5f84828501612b92565b91505092915050565b600060208284031215612e7e57612e7d613c0b565b5b6000612e8c84828501612bc0565b91505092915050565b6000612ea18383613314565b60208301905092915050565b612eb68161394f565b82525050565b6000612ec7826137ce565b612ed181856137fc565b9350612edc836137be565b8060005b83811015612f0d578151612ef48882612e95565b9750612eff836137ef565b925050600181019050612ee0565b5085935050505092915050565b612f2381613961565b82525050565b6000612f34826137d9565b612f3e818561380d565b9350612f4e8185602086016139d2565b612f5781613c10565b840191505092915050565b6000612f6d826137e4565b612f77818561381e565b9350612f878185602086016139d2565b612f9081613c10565b840191505092915050565b6000612fa6826137e4565b612fb0818561382f565b9350612fc08185602086016139d2565b80840191505092915050565b6000612fd9600b8361381e565b9150612fe482613c21565b602082019050919050565b6000612ffc602b8361381e565b915061300782613c4a565b604082019050919050565b600061301f60328361381e565b915061302a82613c99565b604082019050919050565b600061304260268361381e565b915061304d82613ce8565b604082019050919050565b6000613065601c8361381e565b915061307082613d37565b602082019050919050565b600061308860248361381e565b915061309382613d60565b604082019050919050565b60006130ab60198361381e565b91506130b682613daf565b602082019050919050565b60006130ce602c8361381e565b91506130d982613dd8565b604082019050919050565b60006130f1601c8361381e565b91506130fc82613e27565b602082019050919050565b600061311460388361381e565b915061311f82613e50565b604082019050919050565b6000613137602a8361381e565b915061314282613e9f565b604082019050919050565b600061315a60298361381e565b915061316582613eee565b604082019050919050565b600061317d60178361381e565b915061318882613f3d565b602082019050919050565b60006131a060208361381e565b91506131ab82613f66565b602082019050919050565b60006131c3602c8361381e565b91506131ce82613f8f565b604082019050919050565b60006131e660208361381e565b91506131f182613fde565b602082019050919050565b600061320960298361381e565b915061321482614007565b604082019050919050565b600061322c602f8361381e565b915061323782614056565b604082019050919050565b600061324f60228361381e565b915061325a826140a5565b604082019050919050565b600061327260218361381e565b915061327d826140f4565b604082019050919050565b600061329560168361381e565b91506132a082614143565b602082019050919050565b60006132b860198361381e565b91506132c38261416c565b602082019050919050565b60006132db60318361381e565b91506132e682614195565b604082019050919050565b60006132fe602c8361381e565b9150613309826141e4565b604082019050919050565b61331d816139b9565b82525050565b61332c816139b9565b82525050565b600061333e8285612f9b565b915061334a8284612f9b565b91508190509392505050565b600060208201905061336b6000830184612ead565b92915050565b60006080820190506133866000830187612ead565b6133936020830186612ead565b6133a06040830185613323565b81810360608301526133b28184612f29565b905095945050505050565b600060208201905081810360008301526133d78184612ebc565b905092915050565b60006020820190506133f46000830184612f1a565b92915050565b600060208201905081810360008301526134148184612f62565b905092915050565b6000602082019050818103600083015261343581612fcc565b9050919050565b6000602082019050818103600083015261345581612fef565b9050919050565b6000602082019050818103600083015261347581613012565b9050919050565b6000602082019050818103600083015261349581613035565b9050919050565b600060208201905081810360008301526134b581613058565b9050919050565b600060208201905081810360008301526134d58161307b565b9050919050565b600060208201905081810360008301526134f58161309e565b9050919050565b60006020820190508181036000830152613515816130c1565b9050919050565b60006020820190508181036000830152613535816130e4565b9050919050565b6000602082019050818103600083015261355581613107565b9050919050565b600060208201905081810360008301526135758161312a565b9050919050565b600060208201905081810360008301526135958161314d565b9050919050565b600060208201905081810360008301526135b581613170565b9050919050565b600060208201905081810360008301526135d581613193565b9050919050565b600060208201905081810360008301526135f5816131b6565b9050919050565b60006020820190508181036000830152613615816131d9565b9050919050565b60006020820190508181036000830152613635816131fc565b9050919050565b600060208201905081810360008301526136558161321f565b9050919050565b6000602082019050818103600083015261367581613242565b9050919050565b6000602082019050818103600083015261369581613265565b9050919050565b600060208201905081810360008301526136b581613288565b9050919050565b600060208201905081810360008301526136d5816132ab565b9050919050565b600060208201905081810360008301526136f5816132ce565b9050919050565b60006020820190508181036000830152613715816132f1565b9050919050565b60006020820190506137316000830184613323565b92915050565b6000613741613752565b905061374d8282613a37565b919050565b6000604051905090565b600067ffffffffffffffff82111561377757613776613bcd565b5b61378082613c10565b9050602081019050919050565b600067ffffffffffffffff8211156137a8576137a7613bcd565b5b6137b182613c10565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613845826139b9565b9150613850836139b9565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561388557613884613ae2565b5b828201905092915050565b600061389b826139b9565b91506138a6836139b9565b9250826138b6576138b5613b11565b5b828204905092915050565b60006138cc826139b9565b91506138d7836139b9565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156139105761390f613ae2565b5b828202905092915050565b6000613926826139b9565b9150613931836139b9565b92508282101561394457613943613ae2565b5b828203905092915050565b600061395a82613999565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156139f05780820151818401526020810190506139d5565b838111156139ff576000848401525b50505050565b60006002820490506001821680613a1d57607f821691505b60208210811415613a3157613a30613b40565b5b50919050565b613a4082613c10565b810181811067ffffffffffffffff82111715613a5f57613a5e613bcd565b5b80604052505050565b6000613a73826139b9565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613aa657613aa5613ae2565b5b600182019050919050565b6000613abc826139b9565b9150613ac7836139b9565b925082613ad757613ad6613b11565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f53616c6520706175736564000000000000000000000000000000000000000000600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f596f752063616e206d696e742061206d6178696d756d206f6620323000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4578636565647320726573657276656420737570706c79000000000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f546f6f206d616e7920746f6b656e73206f776e656420746f206d696e74206d6f60008201527f7265000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f45786365656473206d6178696d756d20737570706c7900000000000000000000600082015250565b7f45746865722073656e74206973206e6f7420636f727265637400000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b61423c8161394f565b811461424757600080fd5b50565b61425381613961565b811461425e57600080fd5b50565b61426a8161396d565b811461427557600080fd5b50565b614281816139b9565b811461428c57600080fd5b5056fea2646970667358221220ea43623a9c74afe855fab0c5b33946f9b02f9e72628639823fee225a0fd2f93e64736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : baseURI (string):
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
41919:2556:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33573:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44123:74;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20687:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22246:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21769:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42114:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34213:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23136:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44208:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33881:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23546:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42977:342;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34403:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43597:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20381:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42033:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20111:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41284:94;;;;;;;;;;;;;:::i;:::-;;44325:147;;;:::i;:::-;;40633:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43374:93;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20856:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43707:81;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42362:607;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22539:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23802:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21031:334;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43796:319;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22905:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41533:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33573:224;33675:4;33714:35;33699:50;;;:11;:50;;;;:90;;;;33753:36;33777:11;33753:23;:36::i;:::-;33699:90;33692:97;;33573:224;;;:::o;44123:74::-;40864:12;:10;:12::i;:::-;40853:23;;:7;:5;:7::i;:::-;:23;;;40845:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44186:3:::1;44176:7;;:13;;;;;;;;;;;;;;;;;;44123:74:::0;:::o;20687:100::-;20741:13;20774:5;20767:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20687:100;:::o;22246:221::-;22322:7;22350:16;22358:7;22350;:16::i;:::-;22342:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;22435:15;:24;22451:7;22435:24;;;;;;;;;;;;;;;;;;;;;22428:31;;22246:221;;;:::o;21769:411::-;21850:13;21866:23;21881:7;21866:14;:23::i;:::-;21850:39;;21914:5;21908:11;;:2;:11;;;;21900:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;22008:5;21992:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;22017:37;22034:5;22041:12;:10;:12::i;:::-;22017:16;:37::i;:::-;21992:62;21970:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;22151:21;22160:2;22164:7;22151:8;:21::i;:::-;21839:341;21769:411;;:::o;42114:26::-;;;;;;;;;;;;;:::o;34213:113::-;34274:7;34301:10;:17;;;;34294:24;;34213:113;:::o;23136:339::-;23331:41;23350:12;:10;:12::i;:::-;23364:7;23331:18;:41::i;:::-;23323:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;23439:28;23449:4;23455:2;23459:7;23439:9;:28::i;:::-;23136:339;;;:::o;44208:103::-;40864:12;:10;:12::i;:::-;40853:23;;:7;:5;:7::i;:::-;:23;;;40845:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44291:12:::1;44279:9;:24;;;;44208:103:::0;:::o;33881:256::-;33978:7;34014:23;34031:5;34014:16;:23::i;:::-;34006:5;:31;33998:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;34103:12;:19;34116:5;34103:19;;;;;;;;;;;;;;;:26;34123:5;34103:26;;;;;;;;;;;;34096:33;;33881:256;;;;:::o;23546:185::-;23684:39;23701:4;23707:2;23711:7;23684:39;;;;;;;;;;;;:16;:39::i;:::-;23546:185;;;:::o;42977:342::-;43036:16;43065:18;43086:17;43096:6;43086:9;:17::i;:::-;43065:38;;43116:25;43158:10;43144:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43116:53;;43184:9;43180:106;43199:10;43195:1;:14;43180:106;;;43244:30;43264:6;43272:1;43244:19;:30::i;:::-;43230:8;43239:1;43230:11;;;;;;;;:::i;:::-;;;;;;;:44;;;;;43211:3;;;;;:::i;:::-;;;;43180:106;;;;43303:8;43296:15;;;;42977:342;;;:::o;34403:233::-;34478:7;34514:30;:28;:30::i;:::-;34506:5;:38;34498:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;34611:10;34622:5;34611:17;;;;;;;;:::i;:::-;;;;;;;;;;34604:24;;34403:233;;;:::o;43597:102::-;40864:12;:10;:12::i;:::-;40853:23;;:7;:5;:7::i;:::-;:23;;;40845:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43684:7:::1;43668:13;:23;;;;;;;;;;;;:::i;:::-;;43597:102:::0;:::o;20381:239::-;20453:7;20473:13;20489:7;:16;20497:7;20489:16;;;;;;;;;;;;;;;;;;;;;20473:32;;20541:1;20524:19;;:5;:19;;;;20516:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;20607:5;20600:12;;;20381:239;;;:::o;42033:30::-;;;;:::o;20111:208::-;20183:7;20228:1;20211:19;;:5;:19;;;;20203:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;20295:9;:16;20305:5;20295:16;;;;;;;;;;;;;;;;20288:23;;20111:208;;;:::o;41284:94::-;40864:12;:10;:12::i;:::-;40853:23;;:7;:5;:7::i;:::-;:23;;;40845:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41349:21:::1;41367:1;41349:9;:21::i;:::-;41284:94::o:0;44325:147::-;40864:12;:10;:12::i;:::-;40853:23;;:7;:5;:7::i;:::-;:23;;;40845:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44384:13:::1;44400:21;44384:37;;44448:2;;;;;;;;;;;44440:16;;:23;44457:5;44440:23;;;;;;;;;;;;;;;;;;;;;;;44432:32;;;::::0;::::1;;44373:99;44325:147::o:0;40633:87::-;40679:7;40706:6;;;;;;;;;;;40699:13;;40633:87;:::o;43374:93::-;40864:12;:10;:12::i;:::-;40853:23;;:7;:5;:7::i;:::-;:23;;;40845:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43450:9:::1;43441:6;:18;;;;43374:93:::0;:::o;20856:104::-;20912:13;20945:7;20938:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20856:104;:::o;43707:81::-;43748:7;43774:6;;43767:13;;43707:81;:::o;42362:607::-;42415:14;42432:13;:11;:13::i;:::-;42415:30;;42466:7;;;;;;;;;;;42465:8;42456:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;42543:2;42537:3;:8;42528:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;42649:3;42625:21;42635:10;42625:9;:21::i;:::-;:27;42617:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;42732:9;;42726:3;:15;;;;:::i;:::-;42720:3;42711:6;:12;;;;:::i;:::-;:30;42702:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;42815:3;42806:6;;:12;;;;:::i;:::-;42793:9;:25;;42784:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;42876:9;42872:90;42891:3;42887:1;:7;42872:90;;;42915:35;42926:10;42947:1;42938:6;:10;;;;:::i;:::-;42915:9;:35::i;:::-;42896:3;;;;;:::i;:::-;;;;42872:90;;;;42404:565;42362:607;:::o;22539:295::-;22654:12;:10;:12::i;:::-;22642:24;;:8;:24;;;;22634:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;22754:8;22709:18;:32;22728:12;:10;:12::i;:::-;22709:32;;;;;;;;;;;;;;;:42;22742:8;22709:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;22807:8;22778:48;;22793:12;:10;:12::i;:::-;22778:48;;;22817:8;22778:48;;;;;;:::i;:::-;;;;;;;;22539:295;;:::o;23802:328::-;23977:41;23996:12;:10;:12::i;:::-;24010:7;23977:18;:41::i;:::-;23969:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;24083:39;24097:4;24103:2;24107:7;24116:5;24083:13;:39::i;:::-;23802:328;;;;:::o;21031:334::-;21104:13;21138:16;21146:7;21138;:16::i;:::-;21130:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;21219:21;21243:10;:8;:10::i;:::-;21219:34;;21295:1;21277:7;21271:21;:25;:86;;;;;;;;;;;;;;;;;21323:7;21332:18;:7;:16;:18::i;:::-;21306:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;21271:86;21264:93;;;21031:334;;;:::o;43796:319::-;40864:12;:10;:12::i;:::-;40853:23;;:7;:5;:7::i;:::-;:23;;;40845:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43896:9:::1;;43885:7;:20;;43876:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;43947:14;43964:13;:11;:13::i;:::-;43947:30;;43992:9;43988:87;44007:7;44003:1;:11;43988:87;;;44035:28;44046:3;44060:1;44051:6;:10;;;;:::i;:::-;44035:9;:28::i;:::-;44016:3;;;;;:::i;:::-;;;;43988:87;;;;44100:7;44087:9;;:20;;;;;;;:::i;:::-;;;;;;;;43865:250;43796:319:::0;;:::o;22905:164::-;23002:4;23026:18;:25;23045:5;23026:25;;;;;;;;;;;;;;;:35;23052:8;23026:35;;;;;;;;;;;;;;;;;;;;;;;;;23019:42;;22905:164;;;;:::o;41533:192::-;40864:12;:10;:12::i;:::-;40853:23;;:7;:5;:7::i;:::-;:23;;;40845:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41642:1:::1;41622:22;;:8;:22;;;;41614:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;41698:19;41708:8;41698:9;:19::i;:::-;41533:192:::0;:::o;19742:305::-;19844:4;19896:25;19881:40;;;:11;:40;;;;:105;;;;19953:33;19938:48;;;:11;:48;;;;19881:105;:158;;;;20003:36;20027:11;20003:23;:36::i;:::-;19881:158;19861:178;;19742:305;;;:::o;15436:98::-;15489:7;15516:10;15509:17;;15436:98;:::o;25640:127::-;25705:4;25757:1;25729:30;;:7;:16;25737:7;25729:16;;;;;;;;;;;;;;;;;;;;;:30;;;;25722:37;;25640:127;;;:::o;29622:174::-;29724:2;29697:15;:24;29713:7;29697:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;29780:7;29776:2;29742:46;;29751:23;29766:7;29751:14;:23::i;:::-;29742:46;;;;;;;;;;;;29622:174;;:::o;25934:348::-;26027:4;26052:16;26060:7;26052;:16::i;:::-;26044:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26128:13;26144:23;26159:7;26144:14;:23::i;:::-;26128:39;;26197:5;26186:16;;:7;:16;;;:51;;;;26230:7;26206:31;;:20;26218:7;26206:11;:20::i;:::-;:31;;;26186:51;:87;;;;26241:32;26258:5;26265:7;26241:16;:32::i;:::-;26186:87;26178:96;;;25934:348;;;;:::o;28926:578::-;29085:4;29058:31;;:23;29073:7;29058:14;:23::i;:::-;:31;;;29050:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;29168:1;29154:16;;:2;:16;;;;29146:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;29224:39;29245:4;29251:2;29255:7;29224:20;:39::i;:::-;29328:29;29345:1;29349:7;29328:8;:29::i;:::-;29389:1;29370:9;:15;29380:4;29370:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;29418:1;29401:9;:13;29411:2;29401:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;29449:2;29430:7;:16;29438:7;29430:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;29488:7;29484:2;29469:27;;29478:4;29469:27;;;;;;;;;;;;28926:578;;;:::o;41733:173::-;41789:16;41808:6;;;;;;;;;;;41789:25;;41834:8;41825:6;;:17;;;;;;;;;;;;;;;;;;41889:8;41858:40;;41879:8;41858:40;;;;;;;;;;;;41778:128;41733:173;:::o;26624:110::-;26700:26;26710:2;26714:7;26700:26;;;;;;;;;;;;:9;:26::i;:::-;26624:110;;:::o;25012:315::-;25169:28;25179:4;25185:2;25189:7;25169:9;:28::i;:::-;25216:48;25239:4;25245:2;25249:7;25258:5;25216:22;:48::i;:::-;25208:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;25012:315;;;;:::o;43475:114::-;43535:13;43568;43561:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43475:114;:::o;15880:723::-;15936:13;16166:1;16157:5;:10;16153:53;;;16184:10;;;;;;;;;;;;;;;;;;;;;16153:53;16216:12;16231:5;16216:20;;16247:14;16272:78;16287:1;16279:4;:9;16272:78;;16305:8;;;;;:::i;:::-;;;;16336:2;16328:10;;;;;:::i;:::-;;;16272:78;;;16360:19;16392:6;16382:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16360:39;;16410:154;16426:1;16417:5;:10;16410:154;;16454:1;16444:11;;;;;:::i;:::-;;;16521:2;16513:5;:10;;;;:::i;:::-;16500:2;:24;;;;:::i;:::-;16487:39;;16470:6;16477;16470:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;16550:2;16541:11;;;;;:::i;:::-;;;16410:154;;;16588:6;16574:21;;;;;15880:723;;;;:::o;18345:157::-;18430:4;18469:25;18454:40;;;:11;:40;;;;18447:47;;18345:157;;;:::o;35249:589::-;35393:45;35420:4;35426:2;35430:7;35393:26;:45::i;:::-;35471:1;35455:18;;:4;:18;;;35451:187;;;35490:40;35522:7;35490:31;:40::i;:::-;35451:187;;;35560:2;35552:10;;:4;:10;;;35548:90;;35579:47;35612:4;35618:7;35579:32;:47::i;:::-;35548:90;35451:187;35666:1;35652:16;;:2;:16;;;35648:183;;;35685:45;35722:7;35685:36;:45::i;:::-;35648:183;;;35758:4;35752:10;;:2;:10;;;35748:83;;35779:40;35807:2;35811:7;35779:27;:40::i;:::-;35748:83;35648:183;35249:589;;;:::o;26961:321::-;27091:18;27097:2;27101:7;27091:5;:18::i;:::-;27142:54;27173:1;27177:2;27181:7;27190:5;27142:22;:54::i;:::-;27120:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;26961:321;;;:::o;30361:803::-;30516:4;30537:15;:2;:13;;;:15::i;:::-;30533:624;;;30589:2;30573:36;;;30610:12;:10;:12::i;:::-;30624:4;30630:7;30639:5;30573:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;30569:533;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30836:1;30819:6;:13;:18;30815:272;;;30862:60;;;;;;;;;;:::i;:::-;;;;;;;;30815:272;31037:6;31031:13;31022:6;31018:2;31014:15;31007:38;30569:533;30706:45;;;30696:55;;;:6;:55;;;;30689:62;;;;;30533:624;31141:4;31134:11;;30361:803;;;;;;;:::o;31736:126::-;;;;:::o;36561:164::-;36665:10;:17;;;;36638:15;:24;36654:7;36638:24;;;;;;;;;;;:44;;;;36693:10;36709:7;36693:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36561:164;:::o;37352:988::-;37618:22;37668:1;37643:22;37660:4;37643:16;:22::i;:::-;:26;;;;:::i;:::-;37618:51;;37680:18;37701:17;:26;37719:7;37701:26;;;;;;;;;;;;37680:47;;37848:14;37834:10;:28;37830:328;;37879:19;37901:12;:18;37914:4;37901:18;;;;;;;;;;;;;;;:34;37920:14;37901:34;;;;;;;;;;;;37879:56;;37985:11;37952:12;:18;37965:4;37952:18;;;;;;;;;;;;;;;:30;37971:10;37952:30;;;;;;;;;;;:44;;;;38102:10;38069:17;:30;38087:11;38069:30;;;;;;;;;;;:43;;;;37864:294;37830:328;38254:17;:26;38272:7;38254:26;;;;;;;;;;;38247:33;;;38298:12;:18;38311:4;38298:18;;;;;;;;;;;;;;;:34;38317:14;38298:34;;;;;;;;;;;38291:41;;;37433:907;;37352:988;;:::o;38635:1079::-;38888:22;38933:1;38913:10;:17;;;;:21;;;;:::i;:::-;38888:46;;38945:18;38966:15;:24;38982:7;38966:24;;;;;;;;;;;;38945:45;;39317:19;39339:10;39350:14;39339:26;;;;;;;;:::i;:::-;;;;;;;;;;39317:48;;39403:11;39378:10;39389;39378:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;39514:10;39483:15;:28;39499:11;39483:28;;;;;;;;;;;:41;;;;39655:15;:24;39671:7;39655:24;;;;;;;;;;;39648:31;;;39690:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;38706:1008;;;38635:1079;:::o;36139:221::-;36224:14;36241:20;36258:2;36241:16;:20::i;:::-;36224:37;;36299:7;36272:12;:16;36285:2;36272:16;;;;;;;;;;;;;;;:24;36289:6;36272:24;;;;;;;;;;;:34;;;;36346:6;36317:17;:26;36335:7;36317:26;;;;;;;;;;;:35;;;;36213:147;36139:221;;:::o;27618:382::-;27712:1;27698:16;;:2;:16;;;;27690:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;27771:16;27779:7;27771;:16::i;:::-;27770:17;27762:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;27833:45;27862:1;27866:2;27870:7;27833:20;:45::i;:::-;27908:1;27891:9;:13;27901:2;27891:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;27939:2;27920:7;:16;27928:7;27920:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;27984:7;27980:2;27959:33;;27976:1;27959:33;;;;;;;;;;;;27618:382;;:::o;7777:387::-;7837:4;8045:12;8112:7;8100:20;8092:28;;8155:1;8148:4;:8;8141:15;;;7777:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;986:133::-;1029:5;1067:6;1054:20;1045:29;;1083:30;1107:5;1083:30;:::i;:::-;986:133;;;;:::o;1125:137::-;1170:5;1208:6;1195:20;1186:29;;1224:32;1250:5;1224:32;:::i;:::-;1125:137;;;;:::o;1268:141::-;1324:5;1355:6;1349:13;1340:22;;1371:32;1397:5;1371:32;:::i;:::-;1268:141;;;;:::o;1428:338::-;1483:5;1532:3;1525:4;1517:6;1513:17;1509:27;1499:122;;1540:79;;:::i;:::-;1499:122;1657:6;1644:20;1682:78;1756:3;1748:6;1741:4;1733:6;1729:17;1682:78;:::i;:::-;1673:87;;1489:277;1428:338;;;;:::o;1786:340::-;1842:5;1891:3;1884:4;1876:6;1872:17;1868:27;1858:122;;1899:79;;:::i;:::-;1858:122;2016:6;2003:20;2041:79;2116:3;2108:6;2101:4;2093:6;2089:17;2041:79;:::i;:::-;2032:88;;1848:278;1786:340;;;;:::o;2132:139::-;2178:5;2216:6;2203:20;2194:29;;2232:33;2259:5;2232:33;:::i;:::-;2132:139;;;;:::o;2277:329::-;2336:6;2385:2;2373:9;2364:7;2360:23;2356:32;2353:119;;;2391:79;;:::i;:::-;2353:119;2511:1;2536:53;2581:7;2572:6;2561:9;2557:22;2536:53;:::i;:::-;2526:63;;2482:117;2277:329;;;;:::o;2612:474::-;2680:6;2688;2737:2;2725:9;2716:7;2712:23;2708:32;2705:119;;;2743:79;;:::i;:::-;2705:119;2863:1;2888:53;2933:7;2924:6;2913:9;2909:22;2888:53;:::i;:::-;2878:63;;2834:117;2990:2;3016:53;3061:7;3052:6;3041:9;3037:22;3016:53;:::i;:::-;3006:63;;2961:118;2612:474;;;;;:::o;3092:619::-;3169:6;3177;3185;3234:2;3222:9;3213:7;3209:23;3205:32;3202:119;;;3240:79;;:::i;:::-;3202:119;3360:1;3385:53;3430:7;3421:6;3410:9;3406:22;3385:53;:::i;:::-;3375:63;;3331:117;3487:2;3513:53;3558:7;3549:6;3538:9;3534:22;3513:53;:::i;:::-;3503:63;;3458:118;3615:2;3641:53;3686:7;3677:6;3666:9;3662:22;3641:53;:::i;:::-;3631:63;;3586:118;3092:619;;;;;:::o;3717:943::-;3812:6;3820;3828;3836;3885:3;3873:9;3864:7;3860:23;3856:33;3853:120;;;3892:79;;:::i;:::-;3853:120;4012:1;4037:53;4082:7;4073:6;4062:9;4058:22;4037:53;:::i;:::-;4027:63;;3983:117;4139:2;4165:53;4210:7;4201:6;4190:9;4186:22;4165:53;:::i;:::-;4155:63;;4110:118;4267:2;4293:53;4338:7;4329:6;4318:9;4314:22;4293:53;:::i;:::-;4283:63;;4238:118;4423:2;4412:9;4408:18;4395:32;4454:18;4446:6;4443:30;4440:117;;;4476:79;;:::i;:::-;4440:117;4581:62;4635:7;4626:6;4615:9;4611:22;4581:62;:::i;:::-;4571:72;;4366:287;3717:943;;;;;;;:::o;4666:468::-;4731:6;4739;4788:2;4776:9;4767:7;4763:23;4759:32;4756:119;;;4794:79;;:::i;:::-;4756:119;4914:1;4939:53;4984:7;4975:6;4964:9;4960:22;4939:53;:::i;:::-;4929:63;;4885:117;5041:2;5067:50;5109:7;5100:6;5089:9;5085:22;5067:50;:::i;:::-;5057:60;;5012:115;4666:468;;;;;:::o;5140:474::-;5208:6;5216;5265:2;5253:9;5244:7;5240:23;5236:32;5233:119;;;5271:79;;:::i;:::-;5233:119;5391:1;5416:53;5461:7;5452:6;5441:9;5437:22;5416:53;:::i;:::-;5406:63;;5362:117;5518:2;5544:53;5589:7;5580:6;5569:9;5565:22;5544:53;:::i;:::-;5534:63;;5489:118;5140:474;;;;;:::o;5620:323::-;5676:6;5725:2;5713:9;5704:7;5700:23;5696:32;5693:119;;;5731:79;;:::i;:::-;5693:119;5851:1;5876:50;5918:7;5909:6;5898:9;5894:22;5876:50;:::i;:::-;5866:60;;5822:114;5620:323;;;;:::o;5949:327::-;6007:6;6056:2;6044:9;6035:7;6031:23;6027:32;6024:119;;;6062:79;;:::i;:::-;6024:119;6182:1;6207:52;6251:7;6242:6;6231:9;6227:22;6207:52;:::i;:::-;6197:62;;6153:116;5949:327;;;;:::o;6282:349::-;6351:6;6400:2;6388:9;6379:7;6375:23;6371:32;6368:119;;;6406:79;;:::i;:::-;6368:119;6526:1;6551:63;6606:7;6597:6;6586:9;6582:22;6551:63;:::i;:::-;6541:73;;6497:127;6282:349;;;;:::o;6637:509::-;6706:6;6755:2;6743:9;6734:7;6730:23;6726:32;6723:119;;;6761:79;;:::i;:::-;6723:119;6909:1;6898:9;6894:17;6881:31;6939:18;6931:6;6928:30;6925:117;;;6961:79;;:::i;:::-;6925:117;7066:63;7121:7;7112:6;7101:9;7097:22;7066:63;:::i;:::-;7056:73;;6852:287;6637:509;;;;:::o;7152:329::-;7211:6;7260:2;7248:9;7239:7;7235:23;7231:32;7228:119;;;7266:79;;:::i;:::-;7228:119;7386:1;7411:53;7456:7;7447:6;7436:9;7432:22;7411:53;:::i;:::-;7401:63;;7357:117;7152:329;;;;:::o;7487:179::-;7556:10;7577:46;7619:3;7611:6;7577:46;:::i;:::-;7655:4;7650:3;7646:14;7632:28;;7487:179;;;;:::o;7672:118::-;7759:24;7777:5;7759:24;:::i;:::-;7754:3;7747:37;7672:118;;:::o;7826:732::-;7945:3;7974:54;8022:5;7974:54;:::i;:::-;8044:86;8123:6;8118:3;8044:86;:::i;:::-;8037:93;;8154:56;8204:5;8154:56;:::i;:::-;8233:7;8264:1;8249:284;8274:6;8271:1;8268:13;8249:284;;;8350:6;8344:13;8377:63;8436:3;8421:13;8377:63;:::i;:::-;8370:70;;8463:60;8516:6;8463:60;:::i;:::-;8453:70;;8309:224;8296:1;8293;8289:9;8284:14;;8249:284;;;8253:14;8549:3;8542:10;;7950:608;;;7826:732;;;;:::o;8564:109::-;8645:21;8660:5;8645:21;:::i;:::-;8640:3;8633:34;8564:109;;:::o;8679:360::-;8765:3;8793:38;8825:5;8793:38;:::i;:::-;8847:70;8910:6;8905:3;8847:70;:::i;:::-;8840:77;;8926:52;8971:6;8966:3;8959:4;8952:5;8948:16;8926:52;:::i;:::-;9003:29;9025:6;9003:29;:::i;:::-;8998:3;8994:39;8987:46;;8769:270;8679:360;;;;:::o;9045:364::-;9133:3;9161:39;9194:5;9161:39;:::i;:::-;9216:71;9280:6;9275:3;9216:71;:::i;:::-;9209:78;;9296:52;9341:6;9336:3;9329:4;9322:5;9318:16;9296:52;:::i;:::-;9373:29;9395:6;9373:29;:::i;:::-;9368:3;9364:39;9357:46;;9137:272;9045:364;;;;:::o;9415:377::-;9521:3;9549:39;9582:5;9549:39;:::i;:::-;9604:89;9686:6;9681:3;9604:89;:::i;:::-;9597:96;;9702:52;9747:6;9742:3;9735:4;9728:5;9724:16;9702:52;:::i;:::-;9779:6;9774:3;9770:16;9763:23;;9525:267;9415:377;;;;:::o;9798:366::-;9940:3;9961:67;10025:2;10020:3;9961:67;:::i;:::-;9954:74;;10037:93;10126:3;10037:93;:::i;:::-;10155:2;10150:3;10146:12;10139:19;;9798:366;;;:::o;10170:::-;10312:3;10333:67;10397:2;10392:3;10333:67;:::i;:::-;10326:74;;10409:93;10498:3;10409:93;:::i;:::-;10527:2;10522:3;10518:12;10511:19;;10170:366;;;:::o;10542:::-;10684:3;10705:67;10769:2;10764:3;10705:67;:::i;:::-;10698:74;;10781:93;10870:3;10781:93;:::i;:::-;10899:2;10894:3;10890:12;10883:19;;10542:366;;;:::o;10914:::-;11056:3;11077:67;11141:2;11136:3;11077:67;:::i;:::-;11070:74;;11153:93;11242:3;11153:93;:::i;:::-;11271:2;11266:3;11262:12;11255:19;;10914:366;;;:::o;11286:::-;11428:3;11449:67;11513:2;11508:3;11449:67;:::i;:::-;11442:74;;11525:93;11614:3;11525:93;:::i;:::-;11643:2;11638:3;11634:12;11627:19;;11286:366;;;:::o;11658:::-;11800:3;11821:67;11885:2;11880:3;11821:67;:::i;:::-;11814:74;;11897:93;11986:3;11897:93;:::i;:::-;12015:2;12010:3;12006:12;11999:19;;11658:366;;;:::o;12030:::-;12172:3;12193:67;12257:2;12252:3;12193:67;:::i;:::-;12186:74;;12269:93;12358:3;12269:93;:::i;:::-;12387:2;12382:3;12378:12;12371:19;;12030:366;;;:::o;12402:::-;12544:3;12565:67;12629:2;12624:3;12565:67;:::i;:::-;12558:74;;12641:93;12730:3;12641:93;:::i;:::-;12759:2;12754:3;12750:12;12743:19;;12402:366;;;:::o;12774:::-;12916:3;12937:67;13001:2;12996:3;12937:67;:::i;:::-;12930:74;;13013:93;13102:3;13013:93;:::i;:::-;13131:2;13126:3;13122:12;13115:19;;12774:366;;;:::o;13146:::-;13288:3;13309:67;13373:2;13368:3;13309:67;:::i;:::-;13302:74;;13385:93;13474:3;13385:93;:::i;:::-;13503:2;13498:3;13494:12;13487:19;;13146:366;;;:::o;13518:::-;13660:3;13681:67;13745:2;13740:3;13681:67;:::i;:::-;13674:74;;13757:93;13846:3;13757:93;:::i;:::-;13875:2;13870:3;13866:12;13859:19;;13518:366;;;:::o;13890:::-;14032:3;14053:67;14117:2;14112:3;14053:67;:::i;:::-;14046:74;;14129:93;14218:3;14129:93;:::i;:::-;14247:2;14242:3;14238:12;14231:19;;13890:366;;;:::o;14262:::-;14404:3;14425:67;14489:2;14484:3;14425:67;:::i;:::-;14418:74;;14501:93;14590:3;14501:93;:::i;:::-;14619:2;14614:3;14610:12;14603:19;;14262:366;;;:::o;14634:::-;14776:3;14797:67;14861:2;14856:3;14797:67;:::i;:::-;14790:74;;14873:93;14962:3;14873:93;:::i;:::-;14991:2;14986:3;14982:12;14975:19;;14634:366;;;:::o;15006:::-;15148:3;15169:67;15233:2;15228:3;15169:67;:::i;:::-;15162:74;;15245:93;15334:3;15245:93;:::i;:::-;15363:2;15358:3;15354:12;15347:19;;15006:366;;;:::o;15378:::-;15520:3;15541:67;15605:2;15600:3;15541:67;:::i;:::-;15534:74;;15617:93;15706:3;15617:93;:::i;:::-;15735:2;15730:3;15726:12;15719:19;;15378:366;;;:::o;15750:::-;15892:3;15913:67;15977:2;15972:3;15913:67;:::i;:::-;15906:74;;15989:93;16078:3;15989:93;:::i;:::-;16107:2;16102:3;16098:12;16091:19;;15750:366;;;:::o;16122:::-;16264:3;16285:67;16349:2;16344:3;16285:67;:::i;:::-;16278:74;;16361:93;16450:3;16361:93;:::i;:::-;16479:2;16474:3;16470:12;16463:19;;16122:366;;;:::o;16494:::-;16636:3;16657:67;16721:2;16716:3;16657:67;:::i;:::-;16650:74;;16733:93;16822:3;16733:93;:::i;:::-;16851:2;16846:3;16842:12;16835:19;;16494:366;;;:::o;16866:::-;17008:3;17029:67;17093:2;17088:3;17029:67;:::i;:::-;17022:74;;17105:93;17194:3;17105:93;:::i;:::-;17223:2;17218:3;17214:12;17207:19;;16866:366;;;:::o;17238:::-;17380:3;17401:67;17465:2;17460:3;17401:67;:::i;:::-;17394:74;;17477:93;17566:3;17477:93;:::i;:::-;17595:2;17590:3;17586:12;17579:19;;17238:366;;;:::o;17610:::-;17752:3;17773:67;17837:2;17832:3;17773:67;:::i;:::-;17766:74;;17849:93;17938:3;17849:93;:::i;:::-;17967:2;17962:3;17958:12;17951:19;;17610:366;;;:::o;17982:::-;18124:3;18145:67;18209:2;18204:3;18145:67;:::i;:::-;18138:74;;18221:93;18310:3;18221:93;:::i;:::-;18339:2;18334:3;18330:12;18323:19;;17982:366;;;:::o;18354:::-;18496:3;18517:67;18581:2;18576:3;18517:67;:::i;:::-;18510:74;;18593:93;18682:3;18593:93;:::i;:::-;18711:2;18706:3;18702:12;18695:19;;18354:366;;;:::o;18726:108::-;18803:24;18821:5;18803:24;:::i;:::-;18798:3;18791:37;18726:108;;:::o;18840:118::-;18927:24;18945:5;18927:24;:::i;:::-;18922:3;18915:37;18840:118;;:::o;18964:435::-;19144:3;19166:95;19257:3;19248:6;19166:95;:::i;:::-;19159:102;;19278:95;19369:3;19360:6;19278:95;:::i;:::-;19271:102;;19390:3;19383:10;;18964:435;;;;;:::o;19405:222::-;19498:4;19536:2;19525:9;19521:18;19513:26;;19549:71;19617:1;19606:9;19602:17;19593:6;19549:71;:::i;:::-;19405:222;;;;:::o;19633:640::-;19828:4;19866:3;19855:9;19851:19;19843:27;;19880:71;19948:1;19937:9;19933:17;19924:6;19880:71;:::i;:::-;19961:72;20029:2;20018:9;20014:18;20005:6;19961:72;:::i;:::-;20043;20111:2;20100:9;20096:18;20087:6;20043:72;:::i;:::-;20162:9;20156:4;20152:20;20147:2;20136:9;20132:18;20125:48;20190:76;20261:4;20252:6;20190:76;:::i;:::-;20182:84;;19633:640;;;;;;;:::o;20279:373::-;20422:4;20460:2;20449:9;20445:18;20437:26;;20509:9;20503:4;20499:20;20495:1;20484:9;20480:17;20473:47;20537:108;20640:4;20631:6;20537:108;:::i;:::-;20529:116;;20279:373;;;;:::o;20658:210::-;20745:4;20783:2;20772:9;20768:18;20760:26;;20796:65;20858:1;20847:9;20843:17;20834:6;20796:65;:::i;:::-;20658:210;;;;:::o;20874:313::-;20987:4;21025:2;21014:9;21010:18;21002:26;;21074:9;21068:4;21064:20;21060:1;21049:9;21045:17;21038:47;21102:78;21175:4;21166:6;21102:78;:::i;:::-;21094:86;;20874:313;;;;:::o;21193:419::-;21359:4;21397:2;21386:9;21382:18;21374:26;;21446:9;21440:4;21436:20;21432:1;21421:9;21417:17;21410:47;21474:131;21600:4;21474:131;:::i;:::-;21466:139;;21193:419;;;:::o;21618:::-;21784:4;21822:2;21811:9;21807:18;21799:26;;21871:9;21865:4;21861:20;21857:1;21846:9;21842:17;21835:47;21899:131;22025:4;21899:131;:::i;:::-;21891:139;;21618:419;;;:::o;22043:::-;22209:4;22247:2;22236:9;22232:18;22224:26;;22296:9;22290:4;22286:20;22282:1;22271:9;22267:17;22260:47;22324:131;22450:4;22324:131;:::i;:::-;22316:139;;22043:419;;;:::o;22468:::-;22634:4;22672:2;22661:9;22657:18;22649:26;;22721:9;22715:4;22711:20;22707:1;22696:9;22692:17;22685:47;22749:131;22875:4;22749:131;:::i;:::-;22741:139;;22468:419;;;:::o;22893:::-;23059:4;23097:2;23086:9;23082:18;23074:26;;23146:9;23140:4;23136:20;23132:1;23121:9;23117:17;23110:47;23174:131;23300:4;23174:131;:::i;:::-;23166:139;;22893:419;;;:::o;23318:::-;23484:4;23522:2;23511:9;23507:18;23499:26;;23571:9;23565:4;23561:20;23557:1;23546:9;23542:17;23535:47;23599:131;23725:4;23599:131;:::i;:::-;23591:139;;23318:419;;;:::o;23743:::-;23909:4;23947:2;23936:9;23932:18;23924:26;;23996:9;23990:4;23986:20;23982:1;23971:9;23967:17;23960:47;24024:131;24150:4;24024:131;:::i;:::-;24016:139;;23743:419;;;:::o;24168:::-;24334:4;24372:2;24361:9;24357:18;24349:26;;24421:9;24415:4;24411:20;24407:1;24396:9;24392:17;24385:47;24449:131;24575:4;24449:131;:::i;:::-;24441:139;;24168:419;;;:::o;24593:::-;24759:4;24797:2;24786:9;24782:18;24774:26;;24846:9;24840:4;24836:20;24832:1;24821:9;24817:17;24810:47;24874:131;25000:4;24874:131;:::i;:::-;24866:139;;24593:419;;;:::o;25018:::-;25184:4;25222:2;25211:9;25207:18;25199:26;;25271:9;25265:4;25261:20;25257:1;25246:9;25242:17;25235:47;25299:131;25425:4;25299:131;:::i;:::-;25291:139;;25018:419;;;:::o;25443:::-;25609:4;25647:2;25636:9;25632:18;25624:26;;25696:9;25690:4;25686:20;25682:1;25671:9;25667:17;25660:47;25724:131;25850:4;25724:131;:::i;:::-;25716:139;;25443:419;;;:::o;25868:::-;26034:4;26072:2;26061:9;26057:18;26049:26;;26121:9;26115:4;26111:20;26107:1;26096:9;26092:17;26085:47;26149:131;26275:4;26149:131;:::i;:::-;26141:139;;25868:419;;;:::o;26293:::-;26459:4;26497:2;26486:9;26482:18;26474:26;;26546:9;26540:4;26536:20;26532:1;26521:9;26517:17;26510:47;26574:131;26700:4;26574:131;:::i;:::-;26566:139;;26293:419;;;:::o;26718:::-;26884:4;26922:2;26911:9;26907:18;26899:26;;26971:9;26965:4;26961:20;26957:1;26946:9;26942:17;26935:47;26999:131;27125:4;26999:131;:::i;:::-;26991:139;;26718:419;;;:::o;27143:::-;27309:4;27347:2;27336:9;27332:18;27324:26;;27396:9;27390:4;27386:20;27382:1;27371:9;27367:17;27360:47;27424:131;27550:4;27424:131;:::i;:::-;27416:139;;27143:419;;;:::o;27568:::-;27734:4;27772:2;27761:9;27757:18;27749:26;;27821:9;27815:4;27811:20;27807:1;27796:9;27792:17;27785:47;27849:131;27975:4;27849:131;:::i;:::-;27841:139;;27568:419;;;:::o;27993:::-;28159:4;28197:2;28186:9;28182:18;28174:26;;28246:9;28240:4;28236:20;28232:1;28221:9;28217:17;28210:47;28274:131;28400:4;28274:131;:::i;:::-;28266:139;;27993:419;;;:::o;28418:::-;28584:4;28622:2;28611:9;28607:18;28599:26;;28671:9;28665:4;28661:20;28657:1;28646:9;28642:17;28635:47;28699:131;28825:4;28699:131;:::i;:::-;28691:139;;28418:419;;;:::o;28843:::-;29009:4;29047:2;29036:9;29032:18;29024:26;;29096:9;29090:4;29086:20;29082:1;29071:9;29067:17;29060:47;29124:131;29250:4;29124:131;:::i;:::-;29116:139;;28843:419;;;:::o;29268:::-;29434:4;29472:2;29461:9;29457:18;29449:26;;29521:9;29515:4;29511:20;29507:1;29496:9;29492:17;29485:47;29549:131;29675:4;29549:131;:::i;:::-;29541:139;;29268:419;;;:::o;29693:::-;29859:4;29897:2;29886:9;29882:18;29874:26;;29946:9;29940:4;29936:20;29932:1;29921:9;29917:17;29910:47;29974:131;30100:4;29974:131;:::i;:::-;29966:139;;29693:419;;;:::o;30118:::-;30284:4;30322:2;30311:9;30307:18;30299:26;;30371:9;30365:4;30361:20;30357:1;30346:9;30342:17;30335:47;30399:131;30525:4;30399:131;:::i;:::-;30391:139;;30118:419;;;:::o;30543:::-;30709:4;30747:2;30736:9;30732:18;30724:26;;30796:9;30790:4;30786:20;30782:1;30771:9;30767:17;30760:47;30824:131;30950:4;30824:131;:::i;:::-;30816:139;;30543:419;;;:::o;30968:::-;31134:4;31172:2;31161:9;31157:18;31149:26;;31221:9;31215:4;31211:20;31207:1;31196:9;31192:17;31185:47;31249:131;31375:4;31249:131;:::i;:::-;31241:139;;30968:419;;;:::o;31393:222::-;31486:4;31524:2;31513:9;31509:18;31501:26;;31537:71;31605:1;31594:9;31590:17;31581:6;31537:71;:::i;:::-;31393:222;;;;:::o;31621:129::-;31655:6;31682:20;;:::i;:::-;31672:30;;31711:33;31739:4;31731:6;31711:33;:::i;:::-;31621:129;;;:::o;31756:75::-;31789:6;31822:2;31816:9;31806:19;;31756:75;:::o;31837:307::-;31898:4;31988:18;31980:6;31977:30;31974:56;;;32010:18;;:::i;:::-;31974:56;32048:29;32070:6;32048:29;:::i;:::-;32040:37;;32132:4;32126;32122:15;32114:23;;31837:307;;;:::o;32150:308::-;32212:4;32302:18;32294:6;32291:30;32288:56;;;32324:18;;:::i;:::-;32288:56;32362:29;32384:6;32362:29;:::i;:::-;32354:37;;32446:4;32440;32436:15;32428:23;;32150:308;;;:::o;32464:132::-;32531:4;32554:3;32546:11;;32584:4;32579:3;32575:14;32567:22;;32464:132;;;:::o;32602:114::-;32669:6;32703:5;32697:12;32687:22;;32602:114;;;:::o;32722:98::-;32773:6;32807:5;32801:12;32791:22;;32722:98;;;:::o;32826:99::-;32878:6;32912:5;32906:12;32896:22;;32826:99;;;:::o;32931:113::-;33001:4;33033;33028:3;33024:14;33016:22;;32931:113;;;:::o;33050:184::-;33149:11;33183:6;33178:3;33171:19;33223:4;33218:3;33214:14;33199:29;;33050:184;;;;:::o;33240:168::-;33323:11;33357:6;33352:3;33345:19;33397:4;33392:3;33388:14;33373:29;;33240:168;;;;:::o;33414:169::-;33498:11;33532:6;33527:3;33520:19;33572:4;33567:3;33563:14;33548:29;;33414:169;;;;:::o;33589:148::-;33691:11;33728:3;33713:18;;33589:148;;;;:::o;33743:305::-;33783:3;33802:20;33820:1;33802:20;:::i;:::-;33797:25;;33836:20;33854:1;33836:20;:::i;:::-;33831:25;;33990:1;33922:66;33918:74;33915:1;33912:81;33909:107;;;33996:18;;:::i;:::-;33909:107;34040:1;34037;34033:9;34026:16;;33743:305;;;;:::o;34054:185::-;34094:1;34111:20;34129:1;34111:20;:::i;:::-;34106:25;;34145:20;34163:1;34145:20;:::i;:::-;34140:25;;34184:1;34174:35;;34189:18;;:::i;:::-;34174:35;34231:1;34228;34224:9;34219:14;;34054:185;;;;:::o;34245:348::-;34285:7;34308:20;34326:1;34308:20;:::i;:::-;34303:25;;34342:20;34360:1;34342:20;:::i;:::-;34337:25;;34530:1;34462:66;34458:74;34455:1;34452:81;34447:1;34440:9;34433:17;34429:105;34426:131;;;34537:18;;:::i;:::-;34426:131;34585:1;34582;34578:9;34567:20;;34245:348;;;;:::o;34599:191::-;34639:4;34659:20;34677:1;34659:20;:::i;:::-;34654:25;;34693:20;34711:1;34693:20;:::i;:::-;34688:25;;34732:1;34729;34726:8;34723:34;;;34737:18;;:::i;:::-;34723:34;34782:1;34779;34775:9;34767:17;;34599:191;;;;:::o;34796:96::-;34833:7;34862:24;34880:5;34862:24;:::i;:::-;34851:35;;34796:96;;;:::o;34898:90::-;34932:7;34975:5;34968:13;34961:21;34950:32;;34898:90;;;:::o;34994:149::-;35030:7;35070:66;35063:5;35059:78;35048:89;;34994:149;;;:::o;35149:126::-;35186:7;35226:42;35219:5;35215:54;35204:65;;35149:126;;;:::o;35281:77::-;35318:7;35347:5;35336:16;;35281:77;;;:::o;35364:154::-;35448:6;35443:3;35438;35425:30;35510:1;35501:6;35496:3;35492:16;35485:27;35364:154;;;:::o;35524:307::-;35592:1;35602:113;35616:6;35613:1;35610:13;35602:113;;;35701:1;35696:3;35692:11;35686:18;35682:1;35677:3;35673:11;35666:39;35638:2;35635:1;35631:10;35626:15;;35602:113;;;35733:6;35730:1;35727:13;35724:101;;;35813:1;35804:6;35799:3;35795:16;35788:27;35724:101;35573:258;35524:307;;;:::o;35837:320::-;35881:6;35918:1;35912:4;35908:12;35898:22;;35965:1;35959:4;35955:12;35986:18;35976:81;;36042:4;36034:6;36030:17;36020:27;;35976:81;36104:2;36096:6;36093:14;36073:18;36070:38;36067:84;;;36123:18;;:::i;:::-;36067:84;35888:269;35837:320;;;:::o;36163:281::-;36246:27;36268:4;36246:27;:::i;:::-;36238:6;36234:40;36376:6;36364:10;36361:22;36340:18;36328:10;36325:34;36322:62;36319:88;;;36387:18;;:::i;:::-;36319:88;36427:10;36423:2;36416:22;36206:238;36163:281;;:::o;36450:233::-;36489:3;36512:24;36530:5;36512:24;:::i;:::-;36503:33;;36558:66;36551:5;36548:77;36545:103;;;36628:18;;:::i;:::-;36545:103;36675:1;36668:5;36664:13;36657:20;;36450:233;;;:::o;36689:176::-;36721:1;36738:20;36756:1;36738:20;:::i;:::-;36733:25;;36772:20;36790:1;36772:20;:::i;:::-;36767:25;;36811:1;36801:35;;36816:18;;:::i;:::-;36801:35;36857:1;36854;36850:9;36845:14;;36689:176;;;;:::o;36871:180::-;36919:77;36916:1;36909:88;37016:4;37013:1;37006:15;37040:4;37037:1;37030:15;37057:180;37105:77;37102:1;37095:88;37202:4;37199:1;37192:15;37226:4;37223:1;37216:15;37243:180;37291:77;37288:1;37281:88;37388:4;37385:1;37378:15;37412:4;37409:1;37402:15;37429:180;37477:77;37474:1;37467:88;37574:4;37571:1;37564:15;37598:4;37595:1;37588:15;37615:180;37663:77;37660:1;37653:88;37760:4;37757:1;37750:15;37784:4;37781:1;37774:15;37801:180;37849:77;37846:1;37839:88;37946:4;37943:1;37936:15;37970:4;37967:1;37960:15;37987:117;38096:1;38093;38086:12;38110:117;38219:1;38216;38209:12;38233:117;38342:1;38339;38332:12;38356:117;38465:1;38462;38455:12;38479:102;38520:6;38571:2;38567:7;38562:2;38555:5;38551:14;38547:28;38537:38;;38479:102;;;:::o;38587:161::-;38727:13;38723:1;38715:6;38711:14;38704:37;38587:161;:::o;38754:230::-;38894:34;38890:1;38882:6;38878:14;38871:58;38963:13;38958:2;38950:6;38946:15;38939:38;38754:230;:::o;38990:237::-;39130:34;39126:1;39118:6;39114:14;39107:58;39199:20;39194:2;39186:6;39182:15;39175:45;38990:237;:::o;39233:225::-;39373:34;39369:1;39361:6;39357:14;39350:58;39442:8;39437:2;39429:6;39425:15;39418:33;39233:225;:::o;39464:178::-;39604:30;39600:1;39592:6;39588:14;39581:54;39464:178;:::o;39648:223::-;39788:34;39784:1;39776:6;39772:14;39765:58;39857:6;39852:2;39844:6;39840:15;39833:31;39648:223;:::o;39877:175::-;40017:27;40013:1;40005:6;40001:14;39994:51;39877:175;:::o;40058:231::-;40198:34;40194:1;40186:6;40182:14;40175:58;40267:14;40262:2;40254:6;40250:15;40243:39;40058:231;:::o;40295:178::-;40435:30;40431:1;40423:6;40419:14;40412:54;40295:178;:::o;40479:243::-;40619:34;40615:1;40607:6;40603:14;40596:58;40688:26;40683:2;40675:6;40671:15;40664:51;40479:243;:::o;40728:229::-;40868:34;40864:1;40856:6;40852:14;40845:58;40937:12;40932:2;40924:6;40920:15;40913:37;40728:229;:::o;40963:228::-;41103:34;41099:1;41091:6;41087:14;41080:58;41172:11;41167:2;41159:6;41155:15;41148:36;40963:228;:::o;41197:173::-;41337:25;41333:1;41325:6;41321:14;41314:49;41197:173;:::o;41376:182::-;41516:34;41512:1;41504:6;41500:14;41493:58;41376:182;:::o;41564:231::-;41704:34;41700:1;41692:6;41688:14;41681:58;41773:14;41768:2;41760:6;41756:15;41749:39;41564:231;:::o;41801:182::-;41941:34;41937:1;41929:6;41925:14;41918:58;41801:182;:::o;41989:228::-;42129:34;42125:1;42117:6;42113:14;42106:58;42198:11;42193:2;42185:6;42181:15;42174:36;41989:228;:::o;42223:234::-;42363:34;42359:1;42351:6;42347:14;42340:58;42432:17;42427:2;42419:6;42415:15;42408:42;42223:234;:::o;42463:221::-;42603:34;42599:1;42591:6;42587:14;42580:58;42672:4;42667:2;42659:6;42655:15;42648:29;42463:221;:::o;42690:220::-;42830:34;42826:1;42818:6;42814:14;42807:58;42899:3;42894:2;42886:6;42882:15;42875:28;42690:220;:::o;42916:172::-;43056:24;43052:1;43044:6;43040:14;43033:48;42916:172;:::o;43094:175::-;43234:27;43230:1;43222:6;43218:14;43211:51;43094:175;:::o;43275:236::-;43415:34;43411:1;43403:6;43399:14;43392:58;43484:19;43479:2;43471:6;43467:15;43460:44;43275:236;:::o;43517:231::-;43657:34;43653:1;43645:6;43641:14;43634:58;43726:14;43721:2;43713:6;43709:15;43702:39;43517:231;:::o;43754:122::-;43827:24;43845:5;43827:24;:::i;:::-;43820:5;43817:35;43807:63;;43866:1;43863;43856:12;43807:63;43754:122;:::o;43882:116::-;43952:21;43967:5;43952:21;:::i;:::-;43945:5;43942:32;43932:60;;43988:1;43985;43978:12;43932:60;43882:116;:::o;44004:120::-;44076:23;44093:5;44076:23;:::i;:::-;44069:5;44066:34;44056:62;;44114:1;44111;44104:12;44056:62;44004:120;:::o;44130:122::-;44203:24;44221:5;44203:24;:::i;:::-;44196:5;44193:35;44183:63;;44242:1;44239;44232:12;44183:63;44130:122;:::o
Swarm Source
ipfs://ea43623a9c74afe855fab0c5b33946f9b02f9e72628639823fee225a0fd2f93e
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.