ERC-721
Overview
Max Total Supply
28 SICKK
Holders
14
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
8 SICKKLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Contagion
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-01-09 */ // SPDX-License-Identifier: MIT // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts v4.4.0 (access/Ownable.sol) pragma solidity ^0.8.0; // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.0 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.0 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol // OpenZeppelin Contracts v4.4.0 (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, 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; } /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.0 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts v4.4.0 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts v4.4.0 (utils/Address.sol) pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol // OpenZeppelin Contracts v4.4.0 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts v4.4.0 (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/token/ERC721/ERC721.sol // OpenZeppelin Contracts v4.4.0 (token/ERC721/ERC721.sol) pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits a {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC721: approve to caller"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File: contracts/5_contagion.sol pragma solidity ^0.8.0; contract Contagion is ERC721, Ownable { //hi everyone! We're safe, just having a fun project! using Address for address; string public baseURI; uint256 public constant MAX_VIRUS = 5000; uint256 public constant PRICE = 0.01 ether; uint256 public totalSupply; address patientZero = 0xeffF914A3Cc2A6400d54062C79451b3D58d73C02; constructor() ERC721("ContagionNFT", "SICKK") { } function mint(uint256 numberOfMints) public payable { require(numberOfMints > 0 && numberOfMints < 5, "Invalid purchase amount"); require(totalSupply + numberOfMints <= MAX_VIRUS, "Purchase would exceed max supply of tokens"); require(PRICE * numberOfMints == msg.value, "Ether value sent is not correct"); for(uint256 i; i < numberOfMints; i++) { _safeMint(msg.sender, totalSupply + i); } totalSupply += numberOfMints; uint256 percentage = random(totalSupply, totalSupply + 1); if (percentage < 2){ _safeMint(msg.sender, totalSupply + 1); totalSupply += 1; _safeMint(msg.sender, totalSupply + 1); totalSupply += 1; } else if(percentage < 4){ _safeMint(msg.sender, totalSupply + 1); totalSupply += 1; } } //look this is very not safe, but project is pretty dumb in itself. //so we find a way to do some maths to get a percentage to give an extra //token. I mean if you wanna steal or hack this, go ahead. function random(uint256 tokenId, uint256 prevId) private view returns (uint256) { uint256 targetBlock = block.number + 40 + tokenId + prevId + block.timestamp ; uint256 randomN = targetBlock % 100; return randomN; } function setBaseURI(string memory uri) public onlyOwner { baseURI = uri; } function _baseURI() internal view override returns (string memory) { return baseURI; } //coins for the lizards function withdraw() public { uint256 balance = address(this).balance; payable(patientZero).transfer(balance); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"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":"MAX_VIRUS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRICE","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":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"numberOfMints","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":[],"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":"uri","type":"string"}],"name":"setBaseURI","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":"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":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405273efff914a3cc2a6400d54062c79451b3d58d73c02600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156200006657600080fd5b506040518060400160405280600c81526020017f436f6e746167696f6e4e465400000000000000000000000000000000000000008152506040518060400160405280600581526020017f5349434b4b0000000000000000000000000000000000000000000000000000008152508160009080519060200190620000eb929190620001fb565b50806001908051906020019062000104929190620001fb565b505050620001276200011b6200012d60201b60201c565b6200013560201b60201c565b62000310565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200020990620002ab565b90600052602060002090601f0160209004810192826200022d576000855562000279565b82601f106200024857805160ff191683800117855562000279565b8280016001018555821562000279579182015b82811115620002785782518255916020019190600101906200025b565b5b5090506200028891906200028c565b5090565b5b80821115620002a75760008160009055506001016200028d565b5090565b60006002820490506001821680620002c457607f821691505b60208210811415620002db57620002da620002e1565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6134c480620003206000396000f3fe6080604052600436106101405760003560e01c806370a08231116100b6578063a22cb4651161006f578063a22cb46514610429578063b88d4fde14610452578063c87b56dd1461047b578063e985e9c5146104b8578063f2fde38b146104f5578063fc4caf5a1461051e57610140565b806370a0823114610338578063715018a6146103755780638d859f3e1461038c5780638da5cb5b146103b757806395d89b41146103e2578063a0712d681461040d57610140565b806323b872dd1161010857806323b872dd1461023e5780633ccfd60b1461026757806342842e0e1461027e57806355f804b3146102a75780636352211e146102d05780636c0360eb1461030d57610140565b806301ffc9a71461014557806306fdde0314610182578063081812fc146101ad578063095ea7b3146101ea57806318160ddd14610213575b600080fd5b34801561015157600080fd5b5061016c6004803603810190610167919061233b565b610549565b60405161017991906127ff565b60405180910390f35b34801561018e57600080fd5b5061019761062b565b6040516101a4919061281a565b60405180910390f35b3480156101b957600080fd5b506101d460048036038101906101cf91906123de565b6106bd565b6040516101e19190612798565b60405180910390f35b3480156101f657600080fd5b50610211600480360381019061020c91906122fb565b610742565b005b34801561021f57600080fd5b5061022861085a565b6040516102359190612a9c565b60405180910390f35b34801561024a57600080fd5b50610265600480360381019061026091906121e5565b610860565b005b34801561027357600080fd5b5061027c6108c0565b005b34801561028a57600080fd5b506102a560048036038101906102a091906121e5565b610931565b005b3480156102b357600080fd5b506102ce60048036038101906102c99190612395565b610951565b005b3480156102dc57600080fd5b506102f760048036038101906102f291906123de565b6109e7565b6040516103049190612798565b60405180910390f35b34801561031957600080fd5b50610322610a99565b60405161032f919061281a565b60405180910390f35b34801561034457600080fd5b5061035f600480360381019061035a9190612178565b610b27565b60405161036c9190612a9c565b60405180910390f35b34801561038157600080fd5b5061038a610bdf565b005b34801561039857600080fd5b506103a1610c67565b6040516103ae9190612a9c565b60405180910390f35b3480156103c357600080fd5b506103cc610c72565b6040516103d99190612798565b60405180910390f35b3480156103ee57600080fd5b506103f7610c9c565b604051610404919061281a565b60405180910390f35b610427600480360381019061042291906123de565b610d2e565b005b34801561043557600080fd5b50610450600480360381019061044b91906122bb565b610f43565b005b34801561045e57600080fd5b5061047960048036038101906104749190612238565b610f59565b005b34801561048757600080fd5b506104a2600480360381019061049d91906123de565b610fbb565b6040516104af919061281a565b60405180910390f35b3480156104c457600080fd5b506104df60048036038101906104da91906121a5565b611062565b6040516104ec91906127ff565b60405180910390f35b34801561050157600080fd5b5061051c60048036038101906105179190612178565b6110f6565b005b34801561052a57600080fd5b506105336111ee565b6040516105409190612a9c565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061061457507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806106245750610623826111f4565b5b9050919050565b60606000805461063a90612d4c565b80601f016020809104026020016040519081016040528092919081815260200182805461066690612d4c565b80156106b35780601f10610688576101008083540402835291602001916106b3565b820191906000526020600020905b81548152906001019060200180831161069657829003601f168201915b5050505050905090565b60006106c88261125e565b610707576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106fe906129bc565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061074d826109e7565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156107be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107b590612a3c565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166107dd6112ca565b73ffffffffffffffffffffffffffffffffffffffff16148061080c575061080b816108066112ca565b611062565b5b61084b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108429061291c565b60405180910390fd5b61085583836112d2565b505050565b60085481565b61087161086b6112ca565b8261138b565b6108b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108a790612a5c565b60405180910390fd5b6108bb838383611469565b505050565b6000479050600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561092d573d6000803e3d6000fd5b5050565b61094c83838360405180602001604052806000815250610f59565b505050565b6109596112ca565b73ffffffffffffffffffffffffffffffffffffffff16610977610c72565b73ffffffffffffffffffffffffffffffffffffffff16146109cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109c4906129dc565b60405180910390fd5b80600790805190602001906109e3929190611f8c565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610a90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a879061295c565b60405180910390fd5b80915050919050565b60078054610aa690612d4c565b80601f0160208091040260200160405190810160405280929190818152602001828054610ad290612d4c565b8015610b1f5780601f10610af457610100808354040283529160200191610b1f565b820191906000526020600020905b815481529060010190602001808311610b0257829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610b98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8f9061293c565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610be76112ca565b73ffffffffffffffffffffffffffffffffffffffff16610c05610c72565b73ffffffffffffffffffffffffffffffffffffffff1614610c5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c52906129dc565b60405180910390fd5b610c6560006116c5565b565b662386f26fc1000081565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054610cab90612d4c565b80601f0160208091040260200160405190810160405280929190818152602001828054610cd790612d4c565b8015610d245780601f10610cf957610100808354040283529160200191610d24565b820191906000526020600020905b815481529060010190602001808311610d0757829003601f168201915b5050505050905090565b600081118015610d3e5750600581105b610d7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7490612a7c565b60405180910390fd5b61138881600854610d8e9190612b81565b1115610dcf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc69061297c565b60405180910390fd5b3481662386f26fc10000610de39190612c08565b14610e23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1a906128dc565b60405180910390fd5b60005b81811015610e5857610e453382600854610e409190612b81565b61178b565b8080610e5090612daf565b915050610e26565b508060086000828254610e6b9190612b81565b925050819055506000610e8e6008546001600854610e899190612b81565b6117a9565b90506002811015610f0257610eb1336001600854610eac9190612b81565b61178b565b600160086000828254610ec49190612b81565b92505081905550610ee3336001600854610ede9190612b81565b61178b565b600160086000828254610ef69190612b81565b92505081905550610f3f565b6004811015610f3e57610f23336001600854610f1e9190612b81565b61178b565b600160086000828254610f369190612b81565b925050819055505b5b5050565b610f55610f4e6112ca565b83836117f8565b5050565b610f6a610f646112ca565b8361138b565b610fa9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa090612a5c565b60405180910390fd5b610fb584848484611965565b50505050565b6060610fc68261125e565b611005576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ffc90612a1c565b60405180910390fd5b600061100f6119c1565b9050600081511161102f576040518060200160405280600081525061105a565b8061103984611a53565b60405160200161104a929190612774565b6040516020818303038152906040525b915050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6110fe6112ca565b73ffffffffffffffffffffffffffffffffffffffff1661111c610c72565b73ffffffffffffffffffffffffffffffffffffffff1614611172576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611169906129dc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156111e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d99061285c565b60405180910390fd5b6111eb816116c5565b50565b61138881565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611345836109e7565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006113968261125e565b6113d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113cc906128fc565b60405180910390fd5b60006113e0836109e7565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061144f57508373ffffffffffffffffffffffffffffffffffffffff16611437846106bd565b73ffffffffffffffffffffffffffffffffffffffff16145b80611460575061145f8185611062565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611489826109e7565b73ffffffffffffffffffffffffffffffffffffffff16146114df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d6906129fc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561154f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115469061289c565b60405180910390fd5b61155a838383611bb4565b6115656000826112d2565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546115b59190612c62565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461160c9190612b81565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6117a5828260405180602001604052806000815250611bb9565b5050565b6000804283856028436117bc9190612b81565b6117c69190612b81565b6117d09190612b81565b6117da9190612b81565b905060006064826117eb9190612df8565b9050809250505092915050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611867576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185e906128bc565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161195891906127ff565b60405180910390a3505050565b611970848484611469565b61197c84848484611c14565b6119bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b29061283c565b60405180910390fd5b50505050565b6060600780546119d090612d4c565b80601f01602080910402602001604051908101604052809291908181526020018280546119fc90612d4c565b8015611a495780601f10611a1e57610100808354040283529160200191611a49565b820191906000526020600020905b815481529060010190602001808311611a2c57829003601f168201915b5050505050905090565b60606000821415611a9b576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611baf565b600082905060005b60008214611acd578080611ab690612daf565b915050600a82611ac69190612bd7565b9150611aa3565b60008167ffffffffffffffff811115611ae957611ae8612ee5565b5b6040519080825280601f01601f191660200182016040528015611b1b5781602001600182028036833780820191505090505b5090505b60008514611ba857600182611b349190612c62565b9150600a85611b439190612df8565b6030611b4f9190612b81565b60f81b818381518110611b6557611b64612eb6565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85611ba19190612bd7565b9450611b1f565b8093505050505b919050565b505050565b611bc38383611dab565b611bd06000848484611c14565b611c0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c069061283c565b60405180910390fd5b505050565b6000611c358473ffffffffffffffffffffffffffffffffffffffff16611f79565b15611d9e578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611c5e6112ca565b8786866040518563ffffffff1660e01b8152600401611c8094939291906127b3565b602060405180830381600087803b158015611c9a57600080fd5b505af1925050508015611ccb57506040513d601f19601f82011682018060405250810190611cc89190612368565b60015b611d4e573d8060008114611cfb576040519150601f19603f3d011682016040523d82523d6000602084013e611d00565b606091505b50600081511415611d46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3d9061283c565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050611da3565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611e1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e129061299c565b60405180910390fd5b611e248161125e565b15611e64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5b9061287c565b60405180910390fd5b611e7060008383611bb4565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611ec09190612b81565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b828054611f9890612d4c565b90600052602060002090601f016020900481019282611fba5760008555612001565b82601f10611fd357805160ff1916838001178555612001565b82800160010185558215612001579182015b82811115612000578251825591602001919060010190611fe5565b5b50905061200e9190612012565b5090565b5b8082111561202b576000816000905550600101612013565b5090565b600061204261203d84612adc565b612ab7565b90508281526020810184848401111561205e5761205d612f19565b5b612069848285612d0a565b509392505050565b600061208461207f84612b0d565b612ab7565b9050828152602081018484840111156120a05761209f612f19565b5b6120ab848285612d0a565b509392505050565b6000813590506120c281613432565b92915050565b6000813590506120d781613449565b92915050565b6000813590506120ec81613460565b92915050565b60008151905061210181613460565b92915050565b600082601f83011261211c5761211b612f14565b5b813561212c84826020860161202f565b91505092915050565b600082601f83011261214a57612149612f14565b5b813561215a848260208601612071565b91505092915050565b60008135905061217281613477565b92915050565b60006020828403121561218e5761218d612f23565b5b600061219c848285016120b3565b91505092915050565b600080604083850312156121bc576121bb612f23565b5b60006121ca858286016120b3565b92505060206121db858286016120b3565b9150509250929050565b6000806000606084860312156121fe576121fd612f23565b5b600061220c868287016120b3565b935050602061221d868287016120b3565b925050604061222e86828701612163565b9150509250925092565b6000806000806080858703121561225257612251612f23565b5b6000612260878288016120b3565b9450506020612271878288016120b3565b935050604061228287828801612163565b925050606085013567ffffffffffffffff8111156122a3576122a2612f1e565b5b6122af87828801612107565b91505092959194509250565b600080604083850312156122d2576122d1612f23565b5b60006122e0858286016120b3565b92505060206122f1858286016120c8565b9150509250929050565b6000806040838503121561231257612311612f23565b5b6000612320858286016120b3565b925050602061233185828601612163565b9150509250929050565b60006020828403121561235157612350612f23565b5b600061235f848285016120dd565b91505092915050565b60006020828403121561237e5761237d612f23565b5b600061238c848285016120f2565b91505092915050565b6000602082840312156123ab576123aa612f23565b5b600082013567ffffffffffffffff8111156123c9576123c8612f1e565b5b6123d584828501612135565b91505092915050565b6000602082840312156123f4576123f3612f23565b5b600061240284828501612163565b91505092915050565b61241481612c96565b82525050565b61242381612ca8565b82525050565b600061243482612b3e565b61243e8185612b54565b935061244e818560208601612d19565b61245781612f28565b840191505092915050565b600061246d82612b49565b6124778185612b65565b9350612487818560208601612d19565b61249081612f28565b840191505092915050565b60006124a682612b49565b6124b08185612b76565b93506124c0818560208601612d19565b80840191505092915050565b60006124d9603283612b65565b91506124e482612f39565b604082019050919050565b60006124fc602683612b65565b915061250782612f88565b604082019050919050565b600061251f601c83612b65565b915061252a82612fd7565b602082019050919050565b6000612542602483612b65565b915061254d82613000565b604082019050919050565b6000612565601983612b65565b91506125708261304f565b602082019050919050565b6000612588601f83612b65565b915061259382613078565b602082019050919050565b60006125ab602c83612b65565b91506125b6826130a1565b604082019050919050565b60006125ce603883612b65565b91506125d9826130f0565b604082019050919050565b60006125f1602a83612b65565b91506125fc8261313f565b604082019050919050565b6000612614602983612b65565b915061261f8261318e565b604082019050919050565b6000612637602a83612b65565b9150612642826131dd565b604082019050919050565b600061265a602083612b65565b91506126658261322c565b602082019050919050565b600061267d602c83612b65565b915061268882613255565b604082019050919050565b60006126a0602083612b65565b91506126ab826132a4565b602082019050919050565b60006126c3602983612b65565b91506126ce826132cd565b604082019050919050565b60006126e6602f83612b65565b91506126f18261331c565b604082019050919050565b6000612709602183612b65565b91506127148261336b565b604082019050919050565b600061272c603183612b65565b9150612737826133ba565b604082019050919050565b600061274f601783612b65565b915061275a82613409565b602082019050919050565b61276e81612d00565b82525050565b6000612780828561249b565b915061278c828461249b565b91508190509392505050565b60006020820190506127ad600083018461240b565b92915050565b60006080820190506127c8600083018761240b565b6127d5602083018661240b565b6127e26040830185612765565b81810360608301526127f48184612429565b905095945050505050565b6000602082019050612814600083018461241a565b92915050565b600060208201905081810360008301526128348184612462565b905092915050565b60006020820190508181036000830152612855816124cc565b9050919050565b60006020820190508181036000830152612875816124ef565b9050919050565b6000602082019050818103600083015261289581612512565b9050919050565b600060208201905081810360008301526128b581612535565b9050919050565b600060208201905081810360008301526128d581612558565b9050919050565b600060208201905081810360008301526128f58161257b565b9050919050565b600060208201905081810360008301526129158161259e565b9050919050565b60006020820190508181036000830152612935816125c1565b9050919050565b60006020820190508181036000830152612955816125e4565b9050919050565b6000602082019050818103600083015261297581612607565b9050919050565b600060208201905081810360008301526129958161262a565b9050919050565b600060208201905081810360008301526129b58161264d565b9050919050565b600060208201905081810360008301526129d581612670565b9050919050565b600060208201905081810360008301526129f581612693565b9050919050565b60006020820190508181036000830152612a15816126b6565b9050919050565b60006020820190508181036000830152612a35816126d9565b9050919050565b60006020820190508181036000830152612a55816126fc565b9050919050565b60006020820190508181036000830152612a758161271f565b9050919050565b60006020820190508181036000830152612a9581612742565b9050919050565b6000602082019050612ab16000830184612765565b92915050565b6000612ac1612ad2565b9050612acd8282612d7e565b919050565b6000604051905090565b600067ffffffffffffffff821115612af757612af6612ee5565b5b612b0082612f28565b9050602081019050919050565b600067ffffffffffffffff821115612b2857612b27612ee5565b5b612b3182612f28565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000612b8c82612d00565b9150612b9783612d00565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612bcc57612bcb612e29565b5b828201905092915050565b6000612be282612d00565b9150612bed83612d00565b925082612bfd57612bfc612e58565b5b828204905092915050565b6000612c1382612d00565b9150612c1e83612d00565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612c5757612c56612e29565b5b828202905092915050565b6000612c6d82612d00565b9150612c7883612d00565b925082821015612c8b57612c8a612e29565b5b828203905092915050565b6000612ca182612ce0565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015612d37578082015181840152602081019050612d1c565b83811115612d46576000848401525b50505050565b60006002820490506001821680612d6457607f821691505b60208210811415612d7857612d77612e87565b5b50919050565b612d8782612f28565b810181811067ffffffffffffffff82111715612da657612da5612ee5565b5b80604052505050565b6000612dba82612d00565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612ded57612dec612e29565b5b600182019050919050565b6000612e0382612d00565b9150612e0e83612d00565b925082612e1e57612e1d612e58565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f45746865722076616c75652073656e74206973206e6f7420636f727265637400600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f507572636861736520776f756c6420657863656564206d617820737570706c7960008201527f206f6620746f6b656e7300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f496e76616c696420707572636861736520616d6f756e74000000000000000000600082015250565b61343b81612c96565b811461344657600080fd5b50565b61345281612ca8565b811461345d57600080fd5b50565b61346981612cb4565b811461347457600080fd5b50565b61348081612d00565b811461348b57600080fd5b5056fea2646970667358221220309f11e780516972a6e9b075b630b6a34f2e7e6427b85ef0045b69ba862e965564736f6c63430008070033
Deployed Bytecode
0x6080604052600436106101405760003560e01c806370a08231116100b6578063a22cb4651161006f578063a22cb46514610429578063b88d4fde14610452578063c87b56dd1461047b578063e985e9c5146104b8578063f2fde38b146104f5578063fc4caf5a1461051e57610140565b806370a0823114610338578063715018a6146103755780638d859f3e1461038c5780638da5cb5b146103b757806395d89b41146103e2578063a0712d681461040d57610140565b806323b872dd1161010857806323b872dd1461023e5780633ccfd60b1461026757806342842e0e1461027e57806355f804b3146102a75780636352211e146102d05780636c0360eb1461030d57610140565b806301ffc9a71461014557806306fdde0314610182578063081812fc146101ad578063095ea7b3146101ea57806318160ddd14610213575b600080fd5b34801561015157600080fd5b5061016c6004803603810190610167919061233b565b610549565b60405161017991906127ff565b60405180910390f35b34801561018e57600080fd5b5061019761062b565b6040516101a4919061281a565b60405180910390f35b3480156101b957600080fd5b506101d460048036038101906101cf91906123de565b6106bd565b6040516101e19190612798565b60405180910390f35b3480156101f657600080fd5b50610211600480360381019061020c91906122fb565b610742565b005b34801561021f57600080fd5b5061022861085a565b6040516102359190612a9c565b60405180910390f35b34801561024a57600080fd5b50610265600480360381019061026091906121e5565b610860565b005b34801561027357600080fd5b5061027c6108c0565b005b34801561028a57600080fd5b506102a560048036038101906102a091906121e5565b610931565b005b3480156102b357600080fd5b506102ce60048036038101906102c99190612395565b610951565b005b3480156102dc57600080fd5b506102f760048036038101906102f291906123de565b6109e7565b6040516103049190612798565b60405180910390f35b34801561031957600080fd5b50610322610a99565b60405161032f919061281a565b60405180910390f35b34801561034457600080fd5b5061035f600480360381019061035a9190612178565b610b27565b60405161036c9190612a9c565b60405180910390f35b34801561038157600080fd5b5061038a610bdf565b005b34801561039857600080fd5b506103a1610c67565b6040516103ae9190612a9c565b60405180910390f35b3480156103c357600080fd5b506103cc610c72565b6040516103d99190612798565b60405180910390f35b3480156103ee57600080fd5b506103f7610c9c565b604051610404919061281a565b60405180910390f35b610427600480360381019061042291906123de565b610d2e565b005b34801561043557600080fd5b50610450600480360381019061044b91906122bb565b610f43565b005b34801561045e57600080fd5b5061047960048036038101906104749190612238565b610f59565b005b34801561048757600080fd5b506104a2600480360381019061049d91906123de565b610fbb565b6040516104af919061281a565b60405180910390f35b3480156104c457600080fd5b506104df60048036038101906104da91906121a5565b611062565b6040516104ec91906127ff565b60405180910390f35b34801561050157600080fd5b5061051c60048036038101906105179190612178565b6110f6565b005b34801561052a57600080fd5b506105336111ee565b6040516105409190612a9c565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061061457507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806106245750610623826111f4565b5b9050919050565b60606000805461063a90612d4c565b80601f016020809104026020016040519081016040528092919081815260200182805461066690612d4c565b80156106b35780601f10610688576101008083540402835291602001916106b3565b820191906000526020600020905b81548152906001019060200180831161069657829003601f168201915b5050505050905090565b60006106c88261125e565b610707576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106fe906129bc565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061074d826109e7565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156107be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107b590612a3c565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166107dd6112ca565b73ffffffffffffffffffffffffffffffffffffffff16148061080c575061080b816108066112ca565b611062565b5b61084b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108429061291c565b60405180910390fd5b61085583836112d2565b505050565b60085481565b61087161086b6112ca565b8261138b565b6108b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108a790612a5c565b60405180910390fd5b6108bb838383611469565b505050565b6000479050600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561092d573d6000803e3d6000fd5b5050565b61094c83838360405180602001604052806000815250610f59565b505050565b6109596112ca565b73ffffffffffffffffffffffffffffffffffffffff16610977610c72565b73ffffffffffffffffffffffffffffffffffffffff16146109cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109c4906129dc565b60405180910390fd5b80600790805190602001906109e3929190611f8c565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610a90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a879061295c565b60405180910390fd5b80915050919050565b60078054610aa690612d4c565b80601f0160208091040260200160405190810160405280929190818152602001828054610ad290612d4c565b8015610b1f5780601f10610af457610100808354040283529160200191610b1f565b820191906000526020600020905b815481529060010190602001808311610b0257829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610b98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8f9061293c565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610be76112ca565b73ffffffffffffffffffffffffffffffffffffffff16610c05610c72565b73ffffffffffffffffffffffffffffffffffffffff1614610c5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c52906129dc565b60405180910390fd5b610c6560006116c5565b565b662386f26fc1000081565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054610cab90612d4c565b80601f0160208091040260200160405190810160405280929190818152602001828054610cd790612d4c565b8015610d245780601f10610cf957610100808354040283529160200191610d24565b820191906000526020600020905b815481529060010190602001808311610d0757829003601f168201915b5050505050905090565b600081118015610d3e5750600581105b610d7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7490612a7c565b60405180910390fd5b61138881600854610d8e9190612b81565b1115610dcf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc69061297c565b60405180910390fd5b3481662386f26fc10000610de39190612c08565b14610e23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1a906128dc565b60405180910390fd5b60005b81811015610e5857610e453382600854610e409190612b81565b61178b565b8080610e5090612daf565b915050610e26565b508060086000828254610e6b9190612b81565b925050819055506000610e8e6008546001600854610e899190612b81565b6117a9565b90506002811015610f0257610eb1336001600854610eac9190612b81565b61178b565b600160086000828254610ec49190612b81565b92505081905550610ee3336001600854610ede9190612b81565b61178b565b600160086000828254610ef69190612b81565b92505081905550610f3f565b6004811015610f3e57610f23336001600854610f1e9190612b81565b61178b565b600160086000828254610f369190612b81565b925050819055505b5b5050565b610f55610f4e6112ca565b83836117f8565b5050565b610f6a610f646112ca565b8361138b565b610fa9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa090612a5c565b60405180910390fd5b610fb584848484611965565b50505050565b6060610fc68261125e565b611005576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ffc90612a1c565b60405180910390fd5b600061100f6119c1565b9050600081511161102f576040518060200160405280600081525061105a565b8061103984611a53565b60405160200161104a929190612774565b6040516020818303038152906040525b915050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6110fe6112ca565b73ffffffffffffffffffffffffffffffffffffffff1661111c610c72565b73ffffffffffffffffffffffffffffffffffffffff1614611172576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611169906129dc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156111e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d99061285c565b60405180910390fd5b6111eb816116c5565b50565b61138881565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611345836109e7565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006113968261125e565b6113d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113cc906128fc565b60405180910390fd5b60006113e0836109e7565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061144f57508373ffffffffffffffffffffffffffffffffffffffff16611437846106bd565b73ffffffffffffffffffffffffffffffffffffffff16145b80611460575061145f8185611062565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611489826109e7565b73ffffffffffffffffffffffffffffffffffffffff16146114df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d6906129fc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561154f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115469061289c565b60405180910390fd5b61155a838383611bb4565b6115656000826112d2565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546115b59190612c62565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461160c9190612b81565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6117a5828260405180602001604052806000815250611bb9565b5050565b6000804283856028436117bc9190612b81565b6117c69190612b81565b6117d09190612b81565b6117da9190612b81565b905060006064826117eb9190612df8565b9050809250505092915050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611867576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185e906128bc565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161195891906127ff565b60405180910390a3505050565b611970848484611469565b61197c84848484611c14565b6119bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b29061283c565b60405180910390fd5b50505050565b6060600780546119d090612d4c565b80601f01602080910402602001604051908101604052809291908181526020018280546119fc90612d4c565b8015611a495780601f10611a1e57610100808354040283529160200191611a49565b820191906000526020600020905b815481529060010190602001808311611a2c57829003601f168201915b5050505050905090565b60606000821415611a9b576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611baf565b600082905060005b60008214611acd578080611ab690612daf565b915050600a82611ac69190612bd7565b9150611aa3565b60008167ffffffffffffffff811115611ae957611ae8612ee5565b5b6040519080825280601f01601f191660200182016040528015611b1b5781602001600182028036833780820191505090505b5090505b60008514611ba857600182611b349190612c62565b9150600a85611b439190612df8565b6030611b4f9190612b81565b60f81b818381518110611b6557611b64612eb6565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85611ba19190612bd7565b9450611b1f565b8093505050505b919050565b505050565b611bc38383611dab565b611bd06000848484611c14565b611c0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c069061283c565b60405180910390fd5b505050565b6000611c358473ffffffffffffffffffffffffffffffffffffffff16611f79565b15611d9e578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611c5e6112ca565b8786866040518563ffffffff1660e01b8152600401611c8094939291906127b3565b602060405180830381600087803b158015611c9a57600080fd5b505af1925050508015611ccb57506040513d601f19601f82011682018060405250810190611cc89190612368565b60015b611d4e573d8060008114611cfb576040519150601f19603f3d011682016040523d82523d6000602084013e611d00565b606091505b50600081511415611d46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3d9061283c565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050611da3565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611e1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e129061299c565b60405180910390fd5b611e248161125e565b15611e64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5b9061287c565b60405180910390fd5b611e7060008383611bb4565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611ec09190612b81565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b828054611f9890612d4c565b90600052602060002090601f016020900481019282611fba5760008555612001565b82601f10611fd357805160ff1916838001178555612001565b82800160010185558215612001579182015b82811115612000578251825591602001919060010190611fe5565b5b50905061200e9190612012565b5090565b5b8082111561202b576000816000905550600101612013565b5090565b600061204261203d84612adc565b612ab7565b90508281526020810184848401111561205e5761205d612f19565b5b612069848285612d0a565b509392505050565b600061208461207f84612b0d565b612ab7565b9050828152602081018484840111156120a05761209f612f19565b5b6120ab848285612d0a565b509392505050565b6000813590506120c281613432565b92915050565b6000813590506120d781613449565b92915050565b6000813590506120ec81613460565b92915050565b60008151905061210181613460565b92915050565b600082601f83011261211c5761211b612f14565b5b813561212c84826020860161202f565b91505092915050565b600082601f83011261214a57612149612f14565b5b813561215a848260208601612071565b91505092915050565b60008135905061217281613477565b92915050565b60006020828403121561218e5761218d612f23565b5b600061219c848285016120b3565b91505092915050565b600080604083850312156121bc576121bb612f23565b5b60006121ca858286016120b3565b92505060206121db858286016120b3565b9150509250929050565b6000806000606084860312156121fe576121fd612f23565b5b600061220c868287016120b3565b935050602061221d868287016120b3565b925050604061222e86828701612163565b9150509250925092565b6000806000806080858703121561225257612251612f23565b5b6000612260878288016120b3565b9450506020612271878288016120b3565b935050604061228287828801612163565b925050606085013567ffffffffffffffff8111156122a3576122a2612f1e565b5b6122af87828801612107565b91505092959194509250565b600080604083850312156122d2576122d1612f23565b5b60006122e0858286016120b3565b92505060206122f1858286016120c8565b9150509250929050565b6000806040838503121561231257612311612f23565b5b6000612320858286016120b3565b925050602061233185828601612163565b9150509250929050565b60006020828403121561235157612350612f23565b5b600061235f848285016120dd565b91505092915050565b60006020828403121561237e5761237d612f23565b5b600061238c848285016120f2565b91505092915050565b6000602082840312156123ab576123aa612f23565b5b600082013567ffffffffffffffff8111156123c9576123c8612f1e565b5b6123d584828501612135565b91505092915050565b6000602082840312156123f4576123f3612f23565b5b600061240284828501612163565b91505092915050565b61241481612c96565b82525050565b61242381612ca8565b82525050565b600061243482612b3e565b61243e8185612b54565b935061244e818560208601612d19565b61245781612f28565b840191505092915050565b600061246d82612b49565b6124778185612b65565b9350612487818560208601612d19565b61249081612f28565b840191505092915050565b60006124a682612b49565b6124b08185612b76565b93506124c0818560208601612d19565b80840191505092915050565b60006124d9603283612b65565b91506124e482612f39565b604082019050919050565b60006124fc602683612b65565b915061250782612f88565b604082019050919050565b600061251f601c83612b65565b915061252a82612fd7565b602082019050919050565b6000612542602483612b65565b915061254d82613000565b604082019050919050565b6000612565601983612b65565b91506125708261304f565b602082019050919050565b6000612588601f83612b65565b915061259382613078565b602082019050919050565b60006125ab602c83612b65565b91506125b6826130a1565b604082019050919050565b60006125ce603883612b65565b91506125d9826130f0565b604082019050919050565b60006125f1602a83612b65565b91506125fc8261313f565b604082019050919050565b6000612614602983612b65565b915061261f8261318e565b604082019050919050565b6000612637602a83612b65565b9150612642826131dd565b604082019050919050565b600061265a602083612b65565b91506126658261322c565b602082019050919050565b600061267d602c83612b65565b915061268882613255565b604082019050919050565b60006126a0602083612b65565b91506126ab826132a4565b602082019050919050565b60006126c3602983612b65565b91506126ce826132cd565b604082019050919050565b60006126e6602f83612b65565b91506126f18261331c565b604082019050919050565b6000612709602183612b65565b91506127148261336b565b604082019050919050565b600061272c603183612b65565b9150612737826133ba565b604082019050919050565b600061274f601783612b65565b915061275a82613409565b602082019050919050565b61276e81612d00565b82525050565b6000612780828561249b565b915061278c828461249b565b91508190509392505050565b60006020820190506127ad600083018461240b565b92915050565b60006080820190506127c8600083018761240b565b6127d5602083018661240b565b6127e26040830185612765565b81810360608301526127f48184612429565b905095945050505050565b6000602082019050612814600083018461241a565b92915050565b600060208201905081810360008301526128348184612462565b905092915050565b60006020820190508181036000830152612855816124cc565b9050919050565b60006020820190508181036000830152612875816124ef565b9050919050565b6000602082019050818103600083015261289581612512565b9050919050565b600060208201905081810360008301526128b581612535565b9050919050565b600060208201905081810360008301526128d581612558565b9050919050565b600060208201905081810360008301526128f58161257b565b9050919050565b600060208201905081810360008301526129158161259e565b9050919050565b60006020820190508181036000830152612935816125c1565b9050919050565b60006020820190508181036000830152612955816125e4565b9050919050565b6000602082019050818103600083015261297581612607565b9050919050565b600060208201905081810360008301526129958161262a565b9050919050565b600060208201905081810360008301526129b58161264d565b9050919050565b600060208201905081810360008301526129d581612670565b9050919050565b600060208201905081810360008301526129f581612693565b9050919050565b60006020820190508181036000830152612a15816126b6565b9050919050565b60006020820190508181036000830152612a35816126d9565b9050919050565b60006020820190508181036000830152612a55816126fc565b9050919050565b60006020820190508181036000830152612a758161271f565b9050919050565b60006020820190508181036000830152612a9581612742565b9050919050565b6000602082019050612ab16000830184612765565b92915050565b6000612ac1612ad2565b9050612acd8282612d7e565b919050565b6000604051905090565b600067ffffffffffffffff821115612af757612af6612ee5565b5b612b0082612f28565b9050602081019050919050565b600067ffffffffffffffff821115612b2857612b27612ee5565b5b612b3182612f28565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000612b8c82612d00565b9150612b9783612d00565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612bcc57612bcb612e29565b5b828201905092915050565b6000612be282612d00565b9150612bed83612d00565b925082612bfd57612bfc612e58565b5b828204905092915050565b6000612c1382612d00565b9150612c1e83612d00565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612c5757612c56612e29565b5b828202905092915050565b6000612c6d82612d00565b9150612c7883612d00565b925082821015612c8b57612c8a612e29565b5b828203905092915050565b6000612ca182612ce0565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015612d37578082015181840152602081019050612d1c565b83811115612d46576000848401525b50505050565b60006002820490506001821680612d6457607f821691505b60208210811415612d7857612d77612e87565b5b50919050565b612d8782612f28565b810181811067ffffffffffffffff82111715612da657612da5612ee5565b5b80604052505050565b6000612dba82612d00565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612ded57612dec612e29565b5b600182019050919050565b6000612e0382612d00565b9150612e0e83612d00565b925082612e1e57612e1d612e58565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f45746865722076616c75652073656e74206973206e6f7420636f727265637400600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f507572636861736520776f756c6420657863656564206d617820737570706c7960008201527f206f6620746f6b656e7300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f496e76616c696420707572636861736520616d6f756e74000000000000000000600082015250565b61343b81612c96565b811461344657600080fd5b50565b61345281612ca8565b811461345d57600080fd5b50565b61346981612cb4565b811461347457600080fd5b50565b61348081612d00565b811461348b57600080fd5b5056fea2646970667358221220309f11e780516972a6e9b075b630b6a34f2e7e6427b85ef0045b69ba862e965564736f6c63430008070033
Deployed Bytecode Sourcemap
36301:2234:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23789:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24734:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26293:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25816:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36566:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27043:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38398:134;;;;;;;;;;;;;:::i;:::-;;27453:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38169:88;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24428:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36442:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24158:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8420:103;;;;;;;;;;;;;:::i;:::-;;36517:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7769:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24903:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36752:935;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26586:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27709:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25078:334;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26812:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8678:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36470:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23789:305;23891:4;23943:25;23928:40;;;:11;:40;;;;:105;;;;24000:33;23985:48;;;:11;:48;;;;23928:105;:158;;;;24050:36;24074:11;24050:23;:36::i;:::-;23928:158;23908:178;;23789:305;;;:::o;24734:100::-;24788:13;24821:5;24814:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24734:100;:::o;26293:221::-;26369:7;26397:16;26405:7;26397;:16::i;:::-;26389:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26482:15;:24;26498:7;26482:24;;;;;;;;;;;;;;;;;;;;;26475:31;;26293:221;;;:::o;25816:411::-;25897:13;25913:23;25928:7;25913:14;:23::i;:::-;25897:39;;25961:5;25955:11;;:2;:11;;;;25947:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;26055:5;26039:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;26064:37;26081:5;26088:12;:10;:12::i;:::-;26064:16;:37::i;:::-;26039:62;26017:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;26198:21;26207:2;26211:7;26198:8;:21::i;:::-;25886:341;25816:411;;:::o;36566:26::-;;;;:::o;27043:339::-;27238:41;27257:12;:10;:12::i;:::-;27271:7;27238:18;:41::i;:::-;27230:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;27346:28;27356:4;27362:2;27366:7;27346:9;:28::i;:::-;27043:339;;;:::o;38398:134::-;38436:15;38454:21;38436:39;;38494:11;;;;;;;;;;;38486:29;;:38;38516:7;38486:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38425:107;38398:134::o;27453:185::-;27591:39;27608:4;27614:2;27618:7;27591:39;;;;;;;;;;;;:16;:39::i;:::-;27453:185;;;:::o;38169:88::-;8000:12;:10;:12::i;:::-;7989:23;;:7;:5;:7::i;:::-;:23;;;7981:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38246:3:::1;38236:7;:13;;;;;;;;;;;;:::i;:::-;;38169:88:::0;:::o;24428:239::-;24500:7;24520:13;24536:7;:16;24544:7;24536:16;;;;;;;;;;;;;;;;;;;;;24520:32;;24588:1;24571:19;;:5;:19;;;;24563:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;24654:5;24647:12;;;24428:239;;;:::o;36442:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;24158:208::-;24230:7;24275:1;24258:19;;:5;:19;;;;24250:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;24342:9;:16;24352:5;24342:16;;;;;;;;;;;;;;;;24335:23;;24158:208;;;:::o;8420:103::-;8000:12;:10;:12::i;:::-;7989:23;;:7;:5;:7::i;:::-;:23;;;7981:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8485:30:::1;8512:1;8485:18;:30::i;:::-;8420:103::o:0;36517:42::-;36549:10;36517:42;:::o;7769:87::-;7815:7;7842:6;;;;;;;;;;;7835:13;;7769:87;:::o;24903:104::-;24959:13;24992:7;24985:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24903:104;:::o;36752:935::-;36839:1;36823:13;:17;:38;;;;;36860:1;36844:13;:17;36823:38;36815:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;36506:4;36934:13;36920:11;;:27;;;;:::i;:::-;:40;;36912:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;37059:9;37042:13;36549:10;37034:21;;;;:::i;:::-;:34;37026:94;;;;;;;;;;;;:::i;:::-;;;;;;;;;37135:9;37131:104;37150:13;37146:1;:17;37131:104;;;37185:38;37195:10;37221:1;37207:11;;:15;;;;:::i;:::-;37185:9;:38::i;:::-;37165:3;;;;;:::i;:::-;;;;37131:104;;;;37260:13;37245:11;;:28;;;;;;;:::i;:::-;;;;;;;;37284:18;37305:36;37312:11;;37339:1;37325:11;;:15;;;;:::i;:::-;37305:6;:36::i;:::-;37284:57;;37369:1;37356:10;:14;37352:328;;;37386:38;37396:10;37422:1;37408:11;;:15;;;;:::i;:::-;37386:9;:38::i;:::-;37454:1;37439:11;;:16;;;;;;;:::i;:::-;;;;;;;;37470:38;37480:10;37506:1;37492:11;;:15;;;;:::i;:::-;37470:9;:38::i;:::-;37538:1;37523:11;;:16;;;;;;;:::i;:::-;;;;;;;;37352:328;;;37582:1;37569:10;:14;37566:114;;;37599:38;37609:10;37635:1;37621:11;;:15;;;;:::i;:::-;37599:9;:38::i;:::-;37667:1;37652:11;;:16;;;;;;;:::i;:::-;;;;;;;;37566:114;37352:328;36804:883;36752:935;:::o;26586:155::-;26681:52;26700:12;:10;:12::i;:::-;26714:8;26724;26681:18;:52::i;:::-;26586:155;;:::o;27709:328::-;27884:41;27903:12;:10;:12::i;:::-;27917:7;27884:18;:41::i;:::-;27876:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;27990:39;28004:4;28010:2;28014:7;28023:5;27990:13;:39::i;:::-;27709:328;;;;:::o;25078:334::-;25151:13;25185:16;25193:7;25185;:16::i;:::-;25177:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;25266:21;25290:10;:8;:10::i;:::-;25266:34;;25342:1;25324:7;25318:21;:25;:86;;;;;;;;;;;;;;;;;25370:7;25379:18;:7;:16;:18::i;:::-;25353:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;25318:86;25311:93;;;25078:334;;;:::o;26812:164::-;26909:4;26933:18;:25;26952:5;26933:25;;;;;;;;;;;;;;;:35;26959:8;26933:35;;;;;;;;;;;;;;;;;;;;;;;;;26926:42;;26812:164;;;;:::o;8678:201::-;8000:12;:10;:12::i;:::-;7989:23;;:7;:5;:7::i;:::-;:23;;;7981:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8787:1:::1;8767:22;;:8;:22;;;;8759:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;8843:28;8862:8;8843:18;:28::i;:::-;8678:201:::0;:::o;36470:40::-;36506:4;36470:40;:::o;10102:157::-;10187:4;10226:25;10211:40;;;:11;:40;;;;10204:47;;10102:157;;;:::o;29547:127::-;29612:4;29664:1;29636:30;;:7;:16;29644:7;29636:16;;;;;;;;;;;;;;;;;;;;;:30;;;;29629:37;;29547:127;;;:::o;857:98::-;910:7;937:10;930:17;;857:98;:::o;33529:174::-;33631:2;33604:15;:24;33620:7;33604:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;33687:7;33683:2;33649:46;;33658:23;33673:7;33658:14;:23::i;:::-;33649:46;;;;;;;;;;;;33529:174;;:::o;29841:348::-;29934:4;29959:16;29967:7;29959;:16::i;:::-;29951:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;30035:13;30051:23;30066:7;30051:14;:23::i;:::-;30035:39;;30104:5;30093:16;;:7;:16;;;:51;;;;30137:7;30113:31;;:20;30125:7;30113:11;:20::i;:::-;:31;;;30093:51;:87;;;;30148:32;30165:5;30172:7;30148:16;:32::i;:::-;30093:87;30085:96;;;29841:348;;;;:::o;32833:578::-;32992:4;32965:31;;:23;32980:7;32965:14;:23::i;:::-;:31;;;32957:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;33075:1;33061:16;;:2;:16;;;;33053:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;33131:39;33152:4;33158:2;33162:7;33131:20;:39::i;:::-;33235:29;33252:1;33256:7;33235:8;:29::i;:::-;33296:1;33277:9;:15;33287:4;33277:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;33325:1;33308:9;:13;33318:2;33308:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;33356:2;33337:7;:16;33345:7;33337:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;33395:7;33391:2;33376:27;;33385:4;33376:27;;;;;;;;;;;;32833:578;;;:::o;9039:191::-;9113:16;9132:6;;;;;;;;;;;9113:25;;9158:8;9149:6;;:17;;;;;;;;;;;;;;;;;;9213:8;9182:40;;9203:8;9182:40;;;;;;;;;;;;9102:128;9039:191;:::o;30531:110::-;30607:26;30617:2;30621:7;30607:26;;;;;;;;;;;;:9;:26::i;:::-;30531:110;;:::o;37910:247::-;37981:7;38001:19;38062:15;38053:6;38043:7;38038:2;38023:12;:17;;;;:::i;:::-;:27;;;;:::i;:::-;:36;;;;:::i;:::-;:54;;;;:::i;:::-;38001:76;;38089:15;38121:3;38107:11;:17;;;;:::i;:::-;38089:35;;38142:7;38135:14;;;;37910:247;;;;:::o;33845:315::-;34000:8;33991:17;;:5;:17;;;;33983:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;34087:8;34049:18;:25;34068:5;34049:25;;;;;;;;;;;;;;;:35;34075:8;34049:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;34133:8;34111:41;;34126:5;34111:41;;;34143:8;34111:41;;;;;;:::i;:::-;;;;;;;;33845:315;;;:::o;28919:::-;29076:28;29086:4;29092:2;29096:7;29076:9;:28::i;:::-;29123:48;29146:4;29152:2;29156:7;29165:5;29123:22;:48::i;:::-;29115:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;28919:315;;;;:::o;38263:100::-;38315:13;38348:7;38341:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38263:100;:::o;10631:723::-;10687:13;10917:1;10908:5;:10;10904:53;;;10935:10;;;;;;;;;;;;;;;;;;;;;10904:53;10967:12;10982:5;10967:20;;10998:14;11023:78;11038:1;11030:4;:9;11023:78;;11056:8;;;;;:::i;:::-;;;;11087:2;11079:10;;;;;:::i;:::-;;;11023:78;;;11111:19;11143:6;11133:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11111:39;;11161:154;11177:1;11168:5;:10;11161:154;;11205:1;11195:11;;;;;:::i;:::-;;;11272:2;11264:5;:10;;;;:::i;:::-;11251:2;:24;;;;:::i;:::-;11238:39;;11221:6;11228;11221:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;11301:2;11292:11;;;;;:::i;:::-;;;11161:154;;;11339:6;11325:21;;;;;10631:723;;;;:::o;36096:126::-;;;;:::o;30868:321::-;30998:18;31004:2;31008:7;30998:5;:18::i;:::-;31049:54;31080:1;31084:2;31088:7;31097:5;31049:22;:54::i;:::-;31027:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;30868:321;;;:::o;34725:799::-;34880:4;34901:15;:2;:13;;;:15::i;:::-;34897:620;;;34953:2;34937:36;;;34974:12;:10;:12::i;:::-;34988:4;34994:7;35003:5;34937:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;34933:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35196:1;35179:6;:13;:18;35175:272;;;35222:60;;;;;;;;;;:::i;:::-;;;;;;;;35175:272;35397:6;35391:13;35382:6;35378:2;35374:15;35367:38;34933:529;35070:41;;;35060:51;;;:6;:51;;;;35053:58;;;;;34897:620;35501:4;35494:11;;34725:799;;;;;;;:::o;31525:382::-;31619:1;31605:16;;:2;:16;;;;31597:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;31678:16;31686:7;31678;:16::i;:::-;31677:17;31669:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;31740:45;31769:1;31773:2;31777:7;31740:20;:45::i;:::-;31815:1;31798:9;:13;31808:2;31798:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;31846:2;31827:7;:16;31835:7;31827:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;31891:7;31887:2;31866:33;;31883:1;31866:33;;;;;;;;;;;;31525:382;;:::o;13214:387::-;13274:4;13482:12;13549:7;13537:20;13529:28;;13592:1;13585:4;:8;13578:15;;;13214: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:327::-;5678:6;5727:2;5715:9;5706:7;5702:23;5698:32;5695:119;;;5733:79;;:::i;:::-;5695:119;5853:1;5878:52;5922:7;5913:6;5902:9;5898:22;5878:52;:::i;:::-;5868:62;;5824:116;5620:327;;;;:::o;5953:349::-;6022:6;6071:2;6059:9;6050:7;6046:23;6042:32;6039:119;;;6077:79;;:::i;:::-;6039:119;6197:1;6222:63;6277:7;6268:6;6257:9;6253:22;6222:63;:::i;:::-;6212:73;;6168:127;5953:349;;;;:::o;6308:509::-;6377:6;6426:2;6414:9;6405:7;6401:23;6397:32;6394:119;;;6432:79;;:::i;:::-;6394:119;6580:1;6569:9;6565:17;6552:31;6610:18;6602:6;6599:30;6596:117;;;6632:79;;:::i;:::-;6596:117;6737:63;6792:7;6783:6;6772:9;6768:22;6737:63;:::i;:::-;6727:73;;6523:287;6308:509;;;;:::o;6823:329::-;6882:6;6931:2;6919:9;6910:7;6906:23;6902:32;6899:119;;;6937:79;;:::i;:::-;6899:119;7057:1;7082:53;7127:7;7118:6;7107:9;7103:22;7082:53;:::i;:::-;7072:63;;7028:117;6823:329;;;;:::o;7158:118::-;7245:24;7263:5;7245:24;:::i;:::-;7240:3;7233:37;7158:118;;:::o;7282:109::-;7363:21;7378:5;7363:21;:::i;:::-;7358:3;7351:34;7282:109;;:::o;7397:360::-;7483:3;7511:38;7543:5;7511:38;:::i;:::-;7565:70;7628:6;7623:3;7565:70;:::i;:::-;7558:77;;7644:52;7689:6;7684:3;7677:4;7670:5;7666:16;7644:52;:::i;:::-;7721:29;7743:6;7721:29;:::i;:::-;7716:3;7712:39;7705:46;;7487:270;7397:360;;;;:::o;7763:364::-;7851:3;7879:39;7912:5;7879:39;:::i;:::-;7934:71;7998:6;7993:3;7934:71;:::i;:::-;7927:78;;8014:52;8059:6;8054:3;8047:4;8040:5;8036:16;8014:52;:::i;:::-;8091:29;8113:6;8091:29;:::i;:::-;8086:3;8082:39;8075:46;;7855:272;7763:364;;;;:::o;8133:377::-;8239:3;8267:39;8300:5;8267:39;:::i;:::-;8322:89;8404:6;8399:3;8322:89;:::i;:::-;8315:96;;8420:52;8465:6;8460:3;8453:4;8446:5;8442:16;8420:52;:::i;:::-;8497:6;8492:3;8488:16;8481:23;;8243:267;8133:377;;;;:::o;8516:366::-;8658:3;8679:67;8743:2;8738:3;8679:67;:::i;:::-;8672:74;;8755:93;8844:3;8755:93;:::i;:::-;8873:2;8868:3;8864:12;8857:19;;8516:366;;;:::o;8888:::-;9030:3;9051:67;9115:2;9110:3;9051:67;:::i;:::-;9044:74;;9127:93;9216:3;9127:93;:::i;:::-;9245:2;9240:3;9236:12;9229:19;;8888:366;;;:::o;9260:::-;9402:3;9423:67;9487:2;9482:3;9423:67;:::i;:::-;9416:74;;9499:93;9588:3;9499:93;:::i;:::-;9617:2;9612:3;9608:12;9601:19;;9260:366;;;:::o;9632:::-;9774:3;9795:67;9859:2;9854:3;9795:67;:::i;:::-;9788:74;;9871:93;9960:3;9871:93;:::i;:::-;9989:2;9984:3;9980:12;9973:19;;9632:366;;;:::o;10004:::-;10146:3;10167:67;10231:2;10226:3;10167:67;:::i;:::-;10160:74;;10243:93;10332:3;10243:93;:::i;:::-;10361:2;10356:3;10352:12;10345:19;;10004:366;;;:::o;10376:::-;10518:3;10539:67;10603:2;10598:3;10539:67;:::i;:::-;10532:74;;10615:93;10704:3;10615:93;:::i;:::-;10733:2;10728:3;10724:12;10717:19;;10376:366;;;:::o;10748:::-;10890:3;10911:67;10975:2;10970:3;10911:67;:::i;:::-;10904:74;;10987:93;11076:3;10987:93;:::i;:::-;11105:2;11100:3;11096:12;11089:19;;10748:366;;;:::o;11120:::-;11262:3;11283:67;11347:2;11342:3;11283:67;:::i;:::-;11276:74;;11359:93;11448:3;11359:93;:::i;:::-;11477:2;11472:3;11468:12;11461:19;;11120:366;;;:::o;11492:::-;11634:3;11655:67;11719:2;11714:3;11655:67;:::i;:::-;11648:74;;11731:93;11820:3;11731:93;:::i;:::-;11849:2;11844:3;11840:12;11833:19;;11492:366;;;:::o;11864:::-;12006:3;12027:67;12091:2;12086:3;12027:67;:::i;:::-;12020:74;;12103:93;12192:3;12103:93;:::i;:::-;12221:2;12216:3;12212:12;12205:19;;11864:366;;;:::o;12236:::-;12378:3;12399:67;12463:2;12458:3;12399:67;:::i;:::-;12392:74;;12475:93;12564:3;12475:93;:::i;:::-;12593:2;12588:3;12584:12;12577:19;;12236:366;;;:::o;12608:::-;12750:3;12771:67;12835:2;12830:3;12771:67;:::i;:::-;12764:74;;12847:93;12936:3;12847:93;:::i;:::-;12965:2;12960:3;12956:12;12949:19;;12608:366;;;:::o;12980:::-;13122:3;13143:67;13207:2;13202:3;13143:67;:::i;:::-;13136:74;;13219:93;13308:3;13219:93;:::i;:::-;13337:2;13332:3;13328:12;13321:19;;12980:366;;;:::o;13352:::-;13494:3;13515:67;13579:2;13574:3;13515:67;:::i;:::-;13508:74;;13591:93;13680:3;13591:93;:::i;:::-;13709:2;13704:3;13700:12;13693:19;;13352:366;;;:::o;13724:::-;13866:3;13887:67;13951:2;13946:3;13887:67;:::i;:::-;13880:74;;13963:93;14052:3;13963:93;:::i;:::-;14081:2;14076:3;14072:12;14065:19;;13724:366;;;:::o;14096:::-;14238:3;14259:67;14323:2;14318:3;14259:67;:::i;:::-;14252:74;;14335:93;14424:3;14335:93;:::i;:::-;14453:2;14448:3;14444:12;14437:19;;14096:366;;;:::o;14468:::-;14610:3;14631:67;14695:2;14690:3;14631:67;:::i;:::-;14624:74;;14707:93;14796:3;14707:93;:::i;:::-;14825:2;14820:3;14816:12;14809:19;;14468:366;;;:::o;14840:::-;14982:3;15003:67;15067:2;15062:3;15003:67;:::i;:::-;14996:74;;15079:93;15168:3;15079:93;:::i;:::-;15197:2;15192:3;15188:12;15181:19;;14840:366;;;:::o;15212:::-;15354:3;15375:67;15439:2;15434:3;15375:67;:::i;:::-;15368:74;;15451:93;15540:3;15451:93;:::i;:::-;15569:2;15564:3;15560:12;15553:19;;15212:366;;;:::o;15584:118::-;15671:24;15689:5;15671:24;:::i;:::-;15666:3;15659:37;15584:118;;:::o;15708:435::-;15888:3;15910:95;16001:3;15992:6;15910:95;:::i;:::-;15903:102;;16022:95;16113:3;16104:6;16022:95;:::i;:::-;16015:102;;16134:3;16127:10;;15708:435;;;;;:::o;16149:222::-;16242:4;16280:2;16269:9;16265:18;16257:26;;16293:71;16361:1;16350:9;16346:17;16337:6;16293:71;:::i;:::-;16149:222;;;;:::o;16377:640::-;16572:4;16610:3;16599:9;16595:19;16587:27;;16624:71;16692:1;16681:9;16677:17;16668:6;16624:71;:::i;:::-;16705:72;16773:2;16762:9;16758:18;16749:6;16705:72;:::i;:::-;16787;16855:2;16844:9;16840:18;16831:6;16787:72;:::i;:::-;16906:9;16900:4;16896:20;16891:2;16880:9;16876:18;16869:48;16934:76;17005:4;16996:6;16934:76;:::i;:::-;16926:84;;16377:640;;;;;;;:::o;17023:210::-;17110:4;17148:2;17137:9;17133:18;17125:26;;17161:65;17223:1;17212:9;17208:17;17199:6;17161:65;:::i;:::-;17023:210;;;;:::o;17239:313::-;17352:4;17390:2;17379:9;17375:18;17367:26;;17439:9;17433:4;17429:20;17425:1;17414:9;17410:17;17403:47;17467:78;17540:4;17531:6;17467:78;:::i;:::-;17459:86;;17239:313;;;;:::o;17558:419::-;17724:4;17762:2;17751:9;17747:18;17739:26;;17811:9;17805:4;17801:20;17797:1;17786:9;17782:17;17775:47;17839:131;17965:4;17839:131;:::i;:::-;17831:139;;17558:419;;;:::o;17983:::-;18149:4;18187:2;18176:9;18172:18;18164:26;;18236:9;18230:4;18226:20;18222:1;18211:9;18207:17;18200:47;18264:131;18390:4;18264:131;:::i;:::-;18256:139;;17983:419;;;:::o;18408:::-;18574:4;18612:2;18601:9;18597:18;18589:26;;18661:9;18655:4;18651:20;18647:1;18636:9;18632:17;18625:47;18689:131;18815:4;18689:131;:::i;:::-;18681:139;;18408:419;;;:::o;18833:::-;18999:4;19037:2;19026:9;19022:18;19014:26;;19086:9;19080:4;19076:20;19072:1;19061:9;19057:17;19050:47;19114:131;19240:4;19114:131;:::i;:::-;19106:139;;18833:419;;;:::o;19258:::-;19424:4;19462:2;19451:9;19447:18;19439:26;;19511:9;19505:4;19501:20;19497:1;19486:9;19482:17;19475:47;19539:131;19665:4;19539:131;:::i;:::-;19531:139;;19258:419;;;:::o;19683:::-;19849:4;19887:2;19876:9;19872:18;19864:26;;19936:9;19930:4;19926:20;19922:1;19911:9;19907:17;19900:47;19964:131;20090:4;19964:131;:::i;:::-;19956:139;;19683:419;;;:::o;20108:::-;20274:4;20312:2;20301:9;20297:18;20289:26;;20361:9;20355:4;20351:20;20347:1;20336:9;20332:17;20325:47;20389:131;20515:4;20389:131;:::i;:::-;20381:139;;20108:419;;;:::o;20533:::-;20699:4;20737:2;20726:9;20722:18;20714:26;;20786:9;20780:4;20776:20;20772:1;20761:9;20757:17;20750:47;20814:131;20940:4;20814:131;:::i;:::-;20806:139;;20533:419;;;:::o;20958:::-;21124:4;21162:2;21151:9;21147:18;21139:26;;21211:9;21205:4;21201:20;21197:1;21186:9;21182:17;21175:47;21239:131;21365:4;21239:131;:::i;:::-;21231:139;;20958:419;;;:::o;21383:::-;21549:4;21587:2;21576:9;21572:18;21564:26;;21636:9;21630:4;21626:20;21622:1;21611:9;21607:17;21600:47;21664:131;21790:4;21664:131;:::i;:::-;21656:139;;21383:419;;;:::o;21808:::-;21974:4;22012:2;22001:9;21997:18;21989:26;;22061:9;22055:4;22051:20;22047:1;22036:9;22032:17;22025:47;22089:131;22215:4;22089:131;:::i;:::-;22081:139;;21808:419;;;:::o;22233:::-;22399:4;22437:2;22426:9;22422:18;22414:26;;22486:9;22480:4;22476:20;22472:1;22461:9;22457:17;22450:47;22514:131;22640:4;22514:131;:::i;:::-;22506:139;;22233:419;;;:::o;22658:::-;22824:4;22862:2;22851:9;22847:18;22839:26;;22911:9;22905:4;22901:20;22897:1;22886:9;22882:17;22875:47;22939:131;23065:4;22939:131;:::i;:::-;22931:139;;22658:419;;;:::o;23083:::-;23249:4;23287:2;23276:9;23272:18;23264:26;;23336:9;23330:4;23326:20;23322:1;23311:9;23307:17;23300:47;23364:131;23490:4;23364:131;:::i;:::-;23356:139;;23083:419;;;:::o;23508:::-;23674:4;23712:2;23701:9;23697:18;23689:26;;23761:9;23755:4;23751:20;23747:1;23736:9;23732:17;23725:47;23789:131;23915:4;23789:131;:::i;:::-;23781:139;;23508:419;;;:::o;23933:::-;24099:4;24137:2;24126:9;24122:18;24114:26;;24186:9;24180:4;24176:20;24172:1;24161:9;24157:17;24150:47;24214:131;24340:4;24214:131;:::i;:::-;24206:139;;23933:419;;;:::o;24358:::-;24524:4;24562:2;24551:9;24547:18;24539:26;;24611:9;24605:4;24601:20;24597:1;24586:9;24582:17;24575:47;24639:131;24765:4;24639:131;:::i;:::-;24631:139;;24358:419;;;:::o;24783:::-;24949:4;24987:2;24976:9;24972:18;24964:26;;25036:9;25030:4;25026:20;25022:1;25011:9;25007:17;25000:47;25064:131;25190:4;25064:131;:::i;:::-;25056:139;;24783:419;;;:::o;25208:::-;25374:4;25412:2;25401:9;25397:18;25389:26;;25461:9;25455:4;25451:20;25447:1;25436:9;25432:17;25425:47;25489:131;25615:4;25489:131;:::i;:::-;25481:139;;25208:419;;;:::o;25633:222::-;25726:4;25764:2;25753:9;25749:18;25741:26;;25777:71;25845:1;25834:9;25830:17;25821:6;25777:71;:::i;:::-;25633:222;;;;:::o;25861:129::-;25895:6;25922:20;;:::i;:::-;25912:30;;25951:33;25979:4;25971:6;25951:33;:::i;:::-;25861:129;;;:::o;25996:75::-;26029:6;26062:2;26056:9;26046:19;;25996:75;:::o;26077:307::-;26138:4;26228:18;26220:6;26217:30;26214:56;;;26250:18;;:::i;:::-;26214:56;26288:29;26310:6;26288:29;:::i;:::-;26280:37;;26372:4;26366;26362:15;26354:23;;26077:307;;;:::o;26390:308::-;26452:4;26542:18;26534:6;26531:30;26528:56;;;26564:18;;:::i;:::-;26528:56;26602:29;26624:6;26602:29;:::i;:::-;26594:37;;26686:4;26680;26676:15;26668:23;;26390:308;;;:::o;26704:98::-;26755:6;26789:5;26783:12;26773:22;;26704:98;;;:::o;26808:99::-;26860:6;26894:5;26888:12;26878:22;;26808:99;;;:::o;26913:168::-;26996:11;27030:6;27025:3;27018:19;27070:4;27065:3;27061:14;27046:29;;26913:168;;;;:::o;27087:169::-;27171:11;27205:6;27200:3;27193:19;27245:4;27240:3;27236:14;27221:29;;27087:169;;;;:::o;27262:148::-;27364:11;27401:3;27386:18;;27262:148;;;;:::o;27416:305::-;27456:3;27475:20;27493:1;27475:20;:::i;:::-;27470:25;;27509:20;27527:1;27509:20;:::i;:::-;27504:25;;27663:1;27595:66;27591:74;27588:1;27585:81;27582:107;;;27669:18;;:::i;:::-;27582:107;27713:1;27710;27706:9;27699:16;;27416:305;;;;:::o;27727:185::-;27767:1;27784:20;27802:1;27784:20;:::i;:::-;27779:25;;27818:20;27836:1;27818:20;:::i;:::-;27813:25;;27857:1;27847:35;;27862:18;;:::i;:::-;27847:35;27904:1;27901;27897:9;27892:14;;27727:185;;;;:::o;27918:348::-;27958:7;27981:20;27999:1;27981:20;:::i;:::-;27976:25;;28015:20;28033:1;28015:20;:::i;:::-;28010:25;;28203:1;28135:66;28131:74;28128:1;28125:81;28120:1;28113:9;28106:17;28102:105;28099:131;;;28210:18;;:::i;:::-;28099:131;28258:1;28255;28251:9;28240:20;;27918:348;;;;:::o;28272:191::-;28312:4;28332:20;28350:1;28332:20;:::i;:::-;28327:25;;28366:20;28384:1;28366:20;:::i;:::-;28361:25;;28405:1;28402;28399:8;28396:34;;;28410:18;;:::i;:::-;28396:34;28455:1;28452;28448:9;28440:17;;28272:191;;;;:::o;28469:96::-;28506:7;28535:24;28553:5;28535:24;:::i;:::-;28524:35;;28469:96;;;:::o;28571:90::-;28605:7;28648:5;28641:13;28634:21;28623:32;;28571:90;;;:::o;28667:149::-;28703:7;28743:66;28736:5;28732:78;28721:89;;28667:149;;;:::o;28822:126::-;28859:7;28899:42;28892:5;28888:54;28877:65;;28822:126;;;:::o;28954:77::-;28991:7;29020:5;29009:16;;28954:77;;;:::o;29037:154::-;29121:6;29116:3;29111;29098:30;29183:1;29174:6;29169:3;29165:16;29158:27;29037:154;;;:::o;29197:307::-;29265:1;29275:113;29289:6;29286:1;29283:13;29275:113;;;29374:1;29369:3;29365:11;29359:18;29355:1;29350:3;29346:11;29339:39;29311:2;29308:1;29304:10;29299:15;;29275:113;;;29406:6;29403:1;29400:13;29397:101;;;29486:1;29477:6;29472:3;29468:16;29461:27;29397:101;29246:258;29197:307;;;:::o;29510:320::-;29554:6;29591:1;29585:4;29581:12;29571:22;;29638:1;29632:4;29628:12;29659:18;29649:81;;29715:4;29707:6;29703:17;29693:27;;29649:81;29777:2;29769:6;29766:14;29746:18;29743:38;29740:84;;;29796:18;;:::i;:::-;29740:84;29561:269;29510:320;;;:::o;29836:281::-;29919:27;29941:4;29919:27;:::i;:::-;29911:6;29907:40;30049:6;30037:10;30034:22;30013:18;30001:10;29998:34;29995:62;29992:88;;;30060:18;;:::i;:::-;29992:88;30100:10;30096:2;30089:22;29879:238;29836:281;;:::o;30123:233::-;30162:3;30185:24;30203:5;30185:24;:::i;:::-;30176:33;;30231:66;30224:5;30221:77;30218:103;;;30301:18;;:::i;:::-;30218:103;30348:1;30341:5;30337:13;30330:20;;30123:233;;;:::o;30362:176::-;30394:1;30411:20;30429:1;30411:20;:::i;:::-;30406:25;;30445:20;30463:1;30445:20;:::i;:::-;30440:25;;30484:1;30474:35;;30489:18;;:::i;:::-;30474:35;30530:1;30527;30523:9;30518:14;;30362:176;;;;:::o;30544:180::-;30592:77;30589:1;30582:88;30689:4;30686:1;30679:15;30713:4;30710:1;30703:15;30730:180;30778:77;30775:1;30768:88;30875:4;30872:1;30865:15;30899:4;30896:1;30889:15;30916:180;30964:77;30961:1;30954:88;31061:4;31058:1;31051:15;31085:4;31082:1;31075:15;31102:180;31150:77;31147:1;31140:88;31247:4;31244:1;31237:15;31271:4;31268:1;31261:15;31288:180;31336:77;31333:1;31326:88;31433:4;31430:1;31423:15;31457:4;31454:1;31447:15;31474:117;31583:1;31580;31573:12;31597:117;31706:1;31703;31696:12;31720:117;31829:1;31826;31819:12;31843:117;31952:1;31949;31942:12;31966:102;32007:6;32058:2;32054:7;32049:2;32042:5;32038:14;32034:28;32024:38;;31966:102;;;:::o;32074:237::-;32214:34;32210:1;32202:6;32198:14;32191:58;32283:20;32278:2;32270:6;32266:15;32259:45;32074:237;:::o;32317:225::-;32457:34;32453:1;32445:6;32441:14;32434:58;32526:8;32521:2;32513:6;32509:15;32502:33;32317:225;:::o;32548:178::-;32688:30;32684:1;32676:6;32672:14;32665:54;32548:178;:::o;32732:223::-;32872:34;32868:1;32860:6;32856:14;32849:58;32941:6;32936:2;32928:6;32924:15;32917:31;32732:223;:::o;32961:175::-;33101:27;33097:1;33089:6;33085:14;33078:51;32961:175;:::o;33142:181::-;33282:33;33278:1;33270:6;33266:14;33259:57;33142:181;:::o;33329:231::-;33469:34;33465:1;33457:6;33453:14;33446:58;33538:14;33533:2;33525:6;33521:15;33514:39;33329:231;:::o;33566:243::-;33706:34;33702:1;33694:6;33690:14;33683:58;33775:26;33770:2;33762:6;33758:15;33751:51;33566:243;:::o;33815:229::-;33955:34;33951:1;33943:6;33939:14;33932:58;34024:12;34019:2;34011:6;34007:15;34000:37;33815:229;:::o;34050:228::-;34190:34;34186:1;34178:6;34174:14;34167:58;34259:11;34254:2;34246:6;34242:15;34235:36;34050:228;:::o;34284:229::-;34424:34;34420:1;34412:6;34408:14;34401:58;34493:12;34488:2;34480:6;34476:15;34469:37;34284:229;:::o;34519:182::-;34659:34;34655:1;34647:6;34643:14;34636:58;34519:182;:::o;34707:231::-;34847:34;34843:1;34835:6;34831:14;34824:58;34916:14;34911:2;34903:6;34899:15;34892:39;34707:231;:::o;34944:182::-;35084:34;35080:1;35072:6;35068:14;35061:58;34944:182;:::o;35132:228::-;35272:34;35268:1;35260:6;35256:14;35249:58;35341:11;35336:2;35328:6;35324:15;35317:36;35132:228;:::o;35366:234::-;35506:34;35502:1;35494:6;35490:14;35483:58;35575:17;35570:2;35562:6;35558:15;35551:42;35366:234;:::o;35606:220::-;35746:34;35742:1;35734:6;35730:14;35723:58;35815:3;35810:2;35802:6;35798:15;35791:28;35606:220;:::o;35832:236::-;35972:34;35968:1;35960:6;35956:14;35949:58;36041:19;36036:2;36028:6;36024:15;36017:44;35832:236;:::o;36074:173::-;36214:25;36210:1;36202:6;36198:14;36191:49;36074:173;:::o;36253:122::-;36326:24;36344:5;36326:24;:::i;:::-;36319:5;36316:35;36306:63;;36365:1;36362;36355:12;36306:63;36253:122;:::o;36381:116::-;36451:21;36466:5;36451:21;:::i;:::-;36444:5;36441:32;36431:60;;36487:1;36484;36477:12;36431:60;36381:116;:::o;36503:120::-;36575:23;36592:5;36575:23;:::i;:::-;36568:5;36565:34;36555:62;;36613:1;36610;36603:12;36555:62;36503:120;:::o;36629:122::-;36702:24;36720:5;36702:24;:::i;:::-;36695:5;36692:35;36682:63;;36741:1;36738;36731:12;36682:63;36629:122;:::o
Swarm Source
ipfs://309f11e780516972a6e9b075b630b6a34f2e7e6427b85ef0045b69ba862e9655
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.