Feature Tip: Add private address tag to any address under My Name Tag !
ERC-721
Overview
Max Total Supply
303 NFTv
Holders
98
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
2 NFTvLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
NFTv
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-10-26 */ // File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.0.0/contracts/utils/Strings.sol pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant alphabet = "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] = alphabet[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.0.0/contracts/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) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } // File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.0.0/contracts/access/Ownable.sol pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), 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 { emit OwnershipTransferred(_owner, address(0)); _owner = 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"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } // File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.0.0/contracts/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; // solhint-disable-next-line no-inline-assembly 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"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (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"); // solhint-disable-next-line avoid-low-level-calls (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"); // solhint-disable-next-line avoid-low-level-calls (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"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.0.0/contracts/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: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.0.0/contracts/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: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.0.0/contracts/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: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.0.0/contracts/token/ERC721/IERC721.sol pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom(address from, address to, uint256 tokenId) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom(address from, address to, uint256 tokenId) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external; } // File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.0.0/contracts/token/ERC721/extensions/IERC721Enumerable.sol pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.0.0/contracts/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: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.0.0/contracts/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}. 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 || ERC721.isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { require(operator != _msgSender(), "ERC721: approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom(address from, address to, uint256 tokenId) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom(address from, address to, uint256 tokenId) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory _data) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer(address from, address to, uint256 tokenId, bytes memory _data) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || ERC721.isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint(address to, uint256 tokenId, bytes memory _data) internal virtual { _mint(to, tokenId); require(_checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer(address from, address to, uint256 tokenId) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received(address from, address to, uint256 tokenId, bytes memory _data) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver(to).onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { // solhint-disable-next-line no-inline-assembly assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` cannot be the zero address. * - `to` cannot be the zero address. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal virtual { } } // File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.0.0/contracts/token/ERC721/extensions/ERC721Enumerable.sol pragma solidity ^0.8.0; /** * @dev This implements an optional extension of {ERC721} defined in the EIP that adds * enumerability of all the token ids in the contract as well as all token ids owned by each * account. */ abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => mapping(uint256 => uint256)) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds"); return _ownedTokens[owner][index]; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds"); return _allTokens[index]; } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` cannot be the zero address. * - `to` cannot be the zero address. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal virtual override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array delete _allTokensIndex[tokenId]; _allTokens.pop(); } } // File: contracts/NFTv.sol pragma solidity >=0.8.0 <0.9.0; contract NFTv is ERC721Enumerable, Ownable { string private _baseUri = ""; bool public isMintingActive = false; ERC721Enumerable couches; event Claimed(address _to, uint256[] _claimedTokens); constructor() ERC721("NFTv", "NFTv") { couches = ERC721Enumerable(address(0x434136D5b3Bb85edB5274DF3A7888ac15418bdd4)); } function claim(uint256[] memory tokensToClaim) public { require(isMintingActive, "NFTv: sale is not active"); for (uint i = 0; i < tokensToClaim.length; i++) { require(msg.sender == couches.ownerOf(tokensToClaim[i]), "NFTv: Must own all couches being claimed"); require(!_exists(tokensToClaim[i]), "NFTv: Couch was already used to claim"); _mint(msg.sender, tokensToClaim[i]); } emit Claimed(msg.sender, tokensToClaim); } function setBaseURI(string memory baseUri) public onlyOwner { _baseUri = baseUri; } function _baseURI() internal view virtual override returns (string memory) { return _baseUri; } function toggleMinting() public onlyOwner { isMintingActive = !isMintingActive; } function withdraw(address _target) public onlyOwner { payable(_target).transfer(address(this).balance); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"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":false,"internalType":"address","name":"_to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"_claimedTokens","type":"uint256[]"}],"name":"Claimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokensToClaim","type":"uint256[]"}],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isMintingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseUri","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"toggleMinting","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_target","type":"address"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405260405180602001604052806000815250600b90805190602001906200002b92919062000209565b506000600c60006101000a81548160ff0219169083151502179055503480156200005457600080fd5b506040518060400160405280600481526020017f4e465476000000000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f4e465476000000000000000000000000000000000000000000000000000000008152508160009080519060200190620000d992919062000209565b508060019080519060200190620000f292919062000209565b5050506000620001076200020160201b60201c565b905080600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35073434136d5b3bb85edb5274df3a7888ac15418bdd4600c60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200031e565b600033905090565b8280546200021790620002b9565b90600052602060002090601f0160209004810192826200023b576000855562000287565b82601f106200025657805160ff191683800117855562000287565b8280016001018555821562000287579182015b828111156200028657825182559160200191906001019062000269565b5b5090506200029691906200029a565b5090565b5b80821115620002b55760008160009055506001016200029b565b5090565b60006002820490506001821680620002d257607f821691505b60208210811415620002e957620002e8620002ef565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b613daf806200032e6000396000f3fe608060405234801561001057600080fd5b50600436106101585760003560e01c80636ac437b0116100c357806395d89b411161007c57806395d89b41146103b1578063a22cb465146103cf578063b88d4fde146103eb578063c87b56dd14610407578063e985e9c514610437578063f2fde38b1461046757610158565b80636ac437b0146103155780636ba4c1381461033357806370a082311461034f578063715018a61461037f5780637d55094d146103895780638da5cb5b1461039357610158565b80632f745c59116101155780632f745c591461023157806342842e0e146102615780634f6ccce71461027d57806351cff8d9146102ad57806355f804b3146102c95780636352211e146102e557610158565b806301ffc9a71461015d57806306fdde031461018d578063081812fc146101ab578063095ea7b3146101db57806318160ddd146101f757806323b872dd14610215575b600080fd5b610177600480360381019061017291906129e8565b610483565b6040516101849190612fa7565b60405180910390f35b6101956104fd565b6040516101a29190612fc2565b60405180910390f35b6101c560048036038101906101c09190612a8b565b61058f565b6040516101d29190612f10565b60405180910390f35b6101f560048036038101906101f0919061295f565b610614565b005b6101ff61072c565b60405161020c9190613284565b60405180910390f35b61022f600480360381019061022a9190612849565b610739565b005b61024b6004803603810190610246919061295f565b610799565b6040516102589190613284565b60405180910390f35b61027b60048036038101906102769190612849565b61083e565b005b61029760048036038101906102929190612a8b565b61085e565b6040516102a49190613284565b60405180910390f35b6102c760048036038101906102c291906127af565b6108cf565b005b6102e360048036038101906102de9190612a42565b610995565b005b6102ff60048036038101906102fa9190612a8b565b610a2b565b60405161030c9190612f10565b60405180910390f35b61031d610add565b60405161032a9190612fa7565b60405180910390f35b61034d6004803603810190610348919061299f565b610af0565b005b610369600480360381019061036491906127af565b610d54565b6040516103769190613284565b60405180910390f35b610387610e0c565b005b610391610f49565b005b61039b610ff1565b6040516103a89190612f10565b60405180910390f35b6103b961101b565b6040516103c69190612fc2565b60405180910390f35b6103e960048036038101906103e4919061291f565b6110ad565b005b6104056004803603810190610400919061289c565b61122e565b005b610421600480360381019061041c9190612a8b565b611290565b60405161042e9190612fc2565b60405180910390f35b610451600480360381019061044c9190612809565b611337565b60405161045e9190612fa7565b60405180910390f35b610481600480360381019061047c91906127af565b6113cb565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806104f657506104f582611577565b5b9050919050565b60606000805461050c9061353f565b80601f01602080910402602001604051908101604052809291908181526020018280546105389061353f565b80156105855780601f1061055a57610100808354040283529160200191610585565b820191906000526020600020905b81548152906001019060200180831161056857829003601f168201915b5050505050905090565b600061059a82611659565b6105d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105d090613184565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061061f82610a2b565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610690576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161068790613204565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166106af6116c5565b73ffffffffffffffffffffffffffffffffffffffff1614806106de57506106dd816106d86116c5565b611337565b5b61071d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610714906130e4565b60405180910390fd5b61072783836116cd565b505050565b6000600880549050905090565b61074a6107446116c5565b82611786565b610789576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078090613244565b60405180910390fd5b610794838383611864565b505050565b60006107a483610d54565b82106107e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107dc90613004565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b6108598383836040518060200160405280600081525061122e565b505050565b600061086861072c565b82106108a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108a090613264565b60405180910390fd5b600882815481106108bd576108bc6136d8565b5b90600052602060002001549050919050565b6108d76116c5565b73ffffffffffffffffffffffffffffffffffffffff166108f5610ff1565b73ffffffffffffffffffffffffffffffffffffffff161461094b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610942906131a4565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610991573d6000803e3d6000fd5b5050565b61099d6116c5565b73ffffffffffffffffffffffffffffffffffffffff166109bb610ff1565b73ffffffffffffffffffffffffffffffffffffffff1614610a11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a08906131a4565b60405180910390fd5b80600b9080519060200190610a27929190612510565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610ad4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610acb90613124565b60405180910390fd5b80915050919050565b600c60009054906101000a900460ff1681565b600c60009054906101000a900460ff16610b3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3690613144565b60405180910390fd5b60005b8151811015610d1757600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e838381518110610b9c57610b9b6136d8565b5b60200260200101516040518263ffffffff1660e01b8152600401610bc09190613284565b60206040518083038186803b158015610bd857600080fd5b505afa158015610bec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c1091906127dc565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610c7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7490612fe4565b60405180910390fd5b610ca0828281518110610c9357610c926136d8565b5b6020026020010151611659565b15610ce0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd790613224565b60405180910390fd5b610d0433838381518110610cf757610cf66136d8565b5b6020026020010151611ac0565b8080610d0f906135a2565b915050610b42565b507f28ee566bdecaf975c0979f4d09fecf91a9009ffe78523aef053a678134137b8b3382604051610d49929190612f77565b60405180910390a150565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610dc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dbc90613104565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610e146116c5565b73ffffffffffffffffffffffffffffffffffffffff16610e32610ff1565b73ffffffffffffffffffffffffffffffffffffffff1614610e88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7f906131a4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b610f516116c5565b73ffffffffffffffffffffffffffffffffffffffff16610f6f610ff1565b73ffffffffffffffffffffffffffffffffffffffff1614610fc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fbc906131a4565b60405180910390fd5b600c60009054906101000a900460ff1615600c60006101000a81548160ff021916908315150217905550565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461102a9061353f565b80601f01602080910402602001604051908101604052809291908181526020018280546110569061353f565b80156110a35780601f10611078576101008083540402835291602001916110a3565b820191906000526020600020905b81548152906001019060200180831161108657829003601f168201915b5050505050905090565b6110b56116c5565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611123576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111a906130a4565b60405180910390fd5b80600560006111306116c5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166111dd6116c5565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516112229190612fa7565b60405180910390a35050565b61123f6112396116c5565b83611786565b61127e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127590613244565b60405180910390fd5b61128a84848484611c8e565b50505050565b606061129b82611659565b6112da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d1906131e4565b60405180910390fd5b60006112e4611cea565b90506000815111611304576040518060200160405280600081525061132f565b8061130e84611d7c565b60405160200161131f929190612eec565b6040516020818303038152906040525b915050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6113d36116c5565b73ffffffffffffffffffffffffffffffffffffffff166113f1610ff1565b73ffffffffffffffffffffffffffffffffffffffff1614611447576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143e906131a4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156114b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ae90613044565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061164257507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611652575061165182611edd565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661174083610a2b565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061179182611659565b6117d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c7906130c4565b60405180910390fd5b60006117db83610a2b565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061184a57508373ffffffffffffffffffffffffffffffffffffffff166118328461058f565b73ffffffffffffffffffffffffffffffffffffffff16145b8061185b575061185a8185611337565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661188482610a2b565b73ffffffffffffffffffffffffffffffffffffffff16146118da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d1906131c4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561194a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194190613084565b60405180910390fd5b611955838383611f47565b6119606000826116cd565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546119b09190613455565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611a0791906133ce565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2790613164565b60405180910390fd5b611b3981611659565b15611b79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7090613064565b60405180910390fd5b611b8560008383611f47565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611bd591906133ce565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b611c99848484611864565b611ca58484848461205b565b611ce4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cdb90613024565b60405180910390fd5b50505050565b6060600b8054611cf99061353f565b80601f0160208091040260200160405190810160405280929190818152602001828054611d259061353f565b8015611d725780601f10611d4757610100808354040283529160200191611d72565b820191906000526020600020905b815481529060010190602001808311611d5557829003601f168201915b5050505050905090565b60606000821415611dc4576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611ed8565b600082905060005b60008214611df6578080611ddf906135a2565b915050600a82611def9190613424565b9150611dcc565b60008167ffffffffffffffff811115611e1257611e11613707565b5b6040519080825280601f01601f191660200182016040528015611e445781602001600182028036833780820191505090505b5090505b60008514611ed157600182611e5d9190613455565b9150600a85611e6c91906135eb565b6030611e7891906133ce565b60f81b818381518110611e8e57611e8d6136d8565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85611eca9190613424565b9450611e48565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b611f528383836121f2565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611f9557611f90816121f7565b611fd4565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614611fd357611fd28382612240565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561201757612012816123ad565b612056565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461205557612054828261247e565b5b5b505050565b600061207c8473ffffffffffffffffffffffffffffffffffffffff166124fd565b156121e5578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026120a56116c5565b8786866040518563ffffffff1660e01b81526004016120c79493929190612f2b565b602060405180830381600087803b1580156120e157600080fd5b505af192505050801561211257506040513d601f19601f8201168201806040525081019061210f9190612a15565b60015b612195573d8060008114612142576040519150601f19603f3d011682016040523d82523d6000602084013e612147565b606091505b5060008151141561218d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218490613024565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506121ea565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161224d84610d54565b6122579190613455565b905060006007600084815260200190815260200160002054905081811461233c576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506123c19190613455565b90506000600960008481526020019081526020016000205490506000600883815481106123f1576123f06136d8565b5b906000526020600020015490508060088381548110612413576124126136d8565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612462576124616136a9565b5b6001900381819060005260206000200160009055905550505050565b600061248983610d54565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600080823b905060008111915050919050565b82805461251c9061353f565b90600052602060002090601f01602090048101928261253e5760008555612585565b82601f1061255757805160ff1916838001178555612585565b82800160010185558215612585579182015b82811115612584578251825591602001919060010190612569565b5b5090506125929190612596565b5090565b5b808211156125af576000816000905550600101612597565b5090565b60006125c66125c1846132c4565b61329f565b905080838252602082019050828560208602820111156125e9576125e861373b565b5b60005b8581101561261957816125ff888261279a565b8452602084019350602083019250506001810190506125ec565b5050509392505050565b6000612636612631846132f0565b61329f565b90508281526020810184848401111561265257612651613740565b5b61265d8482856134fd565b509392505050565b600061267861267384613321565b61329f565b90508281526020810184848401111561269457612693613740565b5b61269f8482856134fd565b509392505050565b6000813590506126b681613d1d565b92915050565b6000815190506126cb81613d1d565b92915050565b600082601f8301126126e6576126e5613736565b5b81356126f68482602086016125b3565b91505092915050565b60008135905061270e81613d34565b92915050565b60008135905061272381613d4b565b92915050565b60008151905061273881613d4b565b92915050565b600082601f83011261275357612752613736565b5b8135612763848260208601612623565b91505092915050565b600082601f83011261278157612780613736565b5b8135612791848260208601612665565b91505092915050565b6000813590506127a981613d62565b92915050565b6000602082840312156127c5576127c461374a565b5b60006127d3848285016126a7565b91505092915050565b6000602082840312156127f2576127f161374a565b5b6000612800848285016126bc565b91505092915050565b600080604083850312156128205761281f61374a565b5b600061282e858286016126a7565b925050602061283f858286016126a7565b9150509250929050565b6000806000606084860312156128625761286161374a565b5b6000612870868287016126a7565b9350506020612881868287016126a7565b92505060406128928682870161279a565b9150509250925092565b600080600080608085870312156128b6576128b561374a565b5b60006128c4878288016126a7565b94505060206128d5878288016126a7565b93505060406128e68782880161279a565b925050606085013567ffffffffffffffff81111561290757612906613745565b5b6129138782880161273e565b91505092959194509250565b600080604083850312156129365761293561374a565b5b6000612944858286016126a7565b9250506020612955858286016126ff565b9150509250929050565b600080604083850312156129765761297561374a565b5b6000612984858286016126a7565b92505060206129958582860161279a565b9150509250929050565b6000602082840312156129b5576129b461374a565b5b600082013567ffffffffffffffff8111156129d3576129d2613745565b5b6129df848285016126d1565b91505092915050565b6000602082840312156129fe576129fd61374a565b5b6000612a0c84828501612714565b91505092915050565b600060208284031215612a2b57612a2a61374a565b5b6000612a3984828501612729565b91505092915050565b600060208284031215612a5857612a5761374a565b5b600082013567ffffffffffffffff811115612a7657612a75613745565b5b612a828482850161276c565b91505092915050565b600060208284031215612aa157612aa061374a565b5b6000612aaf8482850161279a565b91505092915050565b6000612ac48383612ece565b60208301905092915050565b612ad981613489565b82525050565b6000612aea82613362565b612af48185613390565b9350612aff83613352565b8060005b83811015612b30578151612b178882612ab8565b9750612b2283613383565b925050600181019050612b03565b5085935050505092915050565b612b468161349b565b82525050565b6000612b578261336d565b612b6181856133a1565b9350612b7181856020860161350c565b612b7a8161374f565b840191505092915050565b6000612b9082613378565b612b9a81856133b2565b9350612baa81856020860161350c565b612bb38161374f565b840191505092915050565b6000612bc982613378565b612bd381856133c3565b9350612be381856020860161350c565b80840191505092915050565b6000612bfc6028836133b2565b9150612c0782613760565b604082019050919050565b6000612c1f602b836133b2565b9150612c2a826137af565b604082019050919050565b6000612c426032836133b2565b9150612c4d826137fe565b604082019050919050565b6000612c656026836133b2565b9150612c708261384d565b604082019050919050565b6000612c88601c836133b2565b9150612c938261389c565b602082019050919050565b6000612cab6024836133b2565b9150612cb6826138c5565b604082019050919050565b6000612cce6019836133b2565b9150612cd982613914565b602082019050919050565b6000612cf1602c836133b2565b9150612cfc8261393d565b604082019050919050565b6000612d146038836133b2565b9150612d1f8261398c565b604082019050919050565b6000612d37602a836133b2565b9150612d42826139db565b604082019050919050565b6000612d5a6029836133b2565b9150612d6582613a2a565b604082019050919050565b6000612d7d6018836133b2565b9150612d8882613a79565b602082019050919050565b6000612da06020836133b2565b9150612dab82613aa2565b602082019050919050565b6000612dc3602c836133b2565b9150612dce82613acb565b604082019050919050565b6000612de66020836133b2565b9150612df182613b1a565b602082019050919050565b6000612e096029836133b2565b9150612e1482613b43565b604082019050919050565b6000612e2c602f836133b2565b9150612e3782613b92565b604082019050919050565b6000612e4f6021836133b2565b9150612e5a82613be1565b604082019050919050565b6000612e726025836133b2565b9150612e7d82613c30565b604082019050919050565b6000612e956031836133b2565b9150612ea082613c7f565b604082019050919050565b6000612eb8602c836133b2565b9150612ec382613cce565b604082019050919050565b612ed7816134f3565b82525050565b612ee6816134f3565b82525050565b6000612ef88285612bbe565b9150612f048284612bbe565b91508190509392505050565b6000602082019050612f256000830184612ad0565b92915050565b6000608082019050612f406000830187612ad0565b612f4d6020830186612ad0565b612f5a6040830185612edd565b8181036060830152612f6c8184612b4c565b905095945050505050565b6000604082019050612f8c6000830185612ad0565b8181036020830152612f9e8184612adf565b90509392505050565b6000602082019050612fbc6000830184612b3d565b92915050565b60006020820190508181036000830152612fdc8184612b85565b905092915050565b60006020820190508181036000830152612ffd81612bef565b9050919050565b6000602082019050818103600083015261301d81612c12565b9050919050565b6000602082019050818103600083015261303d81612c35565b9050919050565b6000602082019050818103600083015261305d81612c58565b9050919050565b6000602082019050818103600083015261307d81612c7b565b9050919050565b6000602082019050818103600083015261309d81612c9e565b9050919050565b600060208201905081810360008301526130bd81612cc1565b9050919050565b600060208201905081810360008301526130dd81612ce4565b9050919050565b600060208201905081810360008301526130fd81612d07565b9050919050565b6000602082019050818103600083015261311d81612d2a565b9050919050565b6000602082019050818103600083015261313d81612d4d565b9050919050565b6000602082019050818103600083015261315d81612d70565b9050919050565b6000602082019050818103600083015261317d81612d93565b9050919050565b6000602082019050818103600083015261319d81612db6565b9050919050565b600060208201905081810360008301526131bd81612dd9565b9050919050565b600060208201905081810360008301526131dd81612dfc565b9050919050565b600060208201905081810360008301526131fd81612e1f565b9050919050565b6000602082019050818103600083015261321d81612e42565b9050919050565b6000602082019050818103600083015261323d81612e65565b9050919050565b6000602082019050818103600083015261325d81612e88565b9050919050565b6000602082019050818103600083015261327d81612eab565b9050919050565b60006020820190506132996000830184612edd565b92915050565b60006132a96132ba565b90506132b58282613571565b919050565b6000604051905090565b600067ffffffffffffffff8211156132df576132de613707565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561330b5761330a613707565b5b6133148261374f565b9050602081019050919050565b600067ffffffffffffffff82111561333c5761333b613707565b5b6133458261374f565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006133d9826134f3565b91506133e4836134f3565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156134195761341861361c565b5b828201905092915050565b600061342f826134f3565b915061343a836134f3565b92508261344a5761344961364b565b5b828204905092915050565b6000613460826134f3565b915061346b836134f3565b92508282101561347e5761347d61361c565b5b828203905092915050565b6000613494826134d3565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561352a57808201518184015260208101905061350f565b83811115613539576000848401525b50505050565b6000600282049050600182168061355757607f821691505b6020821081141561356b5761356a61367a565b5b50919050565b61357a8261374f565b810181811067ffffffffffffffff8211171561359957613598613707565b5b80604052505050565b60006135ad826134f3565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156135e0576135df61361c565b5b600182019050919050565b60006135f6826134f3565b9150613601836134f3565b9250826136115761361061364b565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e4654763a204d757374206f776e20616c6c20636f7563686573206265696e6760008201527f20636c61696d6564000000000000000000000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4e4654763a2073616c65206973206e6f74206163746976650000000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4e4654763a20436f7563682077617320616c7265616479207573656420746f2060008201527f636c61696d000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b613d2681613489565b8114613d3157600080fd5b50565b613d3d8161349b565b8114613d4857600080fd5b50565b613d54816134a7565b8114613d5f57600080fd5b50565b613d6b816134f3565b8114613d7657600080fd5b5056fea26469706673582212202be304767f61535b1ec6320d146f45e25e08e452953e3eee09c7f8165f9a5e1164736f6c63430008070033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101585760003560e01c80636ac437b0116100c357806395d89b411161007c57806395d89b41146103b1578063a22cb465146103cf578063b88d4fde146103eb578063c87b56dd14610407578063e985e9c514610437578063f2fde38b1461046757610158565b80636ac437b0146103155780636ba4c1381461033357806370a082311461034f578063715018a61461037f5780637d55094d146103895780638da5cb5b1461039357610158565b80632f745c59116101155780632f745c591461023157806342842e0e146102615780634f6ccce71461027d57806351cff8d9146102ad57806355f804b3146102c95780636352211e146102e557610158565b806301ffc9a71461015d57806306fdde031461018d578063081812fc146101ab578063095ea7b3146101db57806318160ddd146101f757806323b872dd14610215575b600080fd5b610177600480360381019061017291906129e8565b610483565b6040516101849190612fa7565b60405180910390f35b6101956104fd565b6040516101a29190612fc2565b60405180910390f35b6101c560048036038101906101c09190612a8b565b61058f565b6040516101d29190612f10565b60405180910390f35b6101f560048036038101906101f0919061295f565b610614565b005b6101ff61072c565b60405161020c9190613284565b60405180910390f35b61022f600480360381019061022a9190612849565b610739565b005b61024b6004803603810190610246919061295f565b610799565b6040516102589190613284565b60405180910390f35b61027b60048036038101906102769190612849565b61083e565b005b61029760048036038101906102929190612a8b565b61085e565b6040516102a49190613284565b60405180910390f35b6102c760048036038101906102c291906127af565b6108cf565b005b6102e360048036038101906102de9190612a42565b610995565b005b6102ff60048036038101906102fa9190612a8b565b610a2b565b60405161030c9190612f10565b60405180910390f35b61031d610add565b60405161032a9190612fa7565b60405180910390f35b61034d6004803603810190610348919061299f565b610af0565b005b610369600480360381019061036491906127af565b610d54565b6040516103769190613284565b60405180910390f35b610387610e0c565b005b610391610f49565b005b61039b610ff1565b6040516103a89190612f10565b60405180910390f35b6103b961101b565b6040516103c69190612fc2565b60405180910390f35b6103e960048036038101906103e4919061291f565b6110ad565b005b6104056004803603810190610400919061289c565b61122e565b005b610421600480360381019061041c9190612a8b565b611290565b60405161042e9190612fc2565b60405180910390f35b610451600480360381019061044c9190612809565b611337565b60405161045e9190612fa7565b60405180910390f35b610481600480360381019061047c91906127af565b6113cb565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806104f657506104f582611577565b5b9050919050565b60606000805461050c9061353f565b80601f01602080910402602001604051908101604052809291908181526020018280546105389061353f565b80156105855780601f1061055a57610100808354040283529160200191610585565b820191906000526020600020905b81548152906001019060200180831161056857829003601f168201915b5050505050905090565b600061059a82611659565b6105d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105d090613184565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061061f82610a2b565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610690576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161068790613204565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166106af6116c5565b73ffffffffffffffffffffffffffffffffffffffff1614806106de57506106dd816106d86116c5565b611337565b5b61071d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610714906130e4565b60405180910390fd5b61072783836116cd565b505050565b6000600880549050905090565b61074a6107446116c5565b82611786565b610789576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078090613244565b60405180910390fd5b610794838383611864565b505050565b60006107a483610d54565b82106107e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107dc90613004565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b6108598383836040518060200160405280600081525061122e565b505050565b600061086861072c565b82106108a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108a090613264565b60405180910390fd5b600882815481106108bd576108bc6136d8565b5b90600052602060002001549050919050565b6108d76116c5565b73ffffffffffffffffffffffffffffffffffffffff166108f5610ff1565b73ffffffffffffffffffffffffffffffffffffffff161461094b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610942906131a4565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610991573d6000803e3d6000fd5b5050565b61099d6116c5565b73ffffffffffffffffffffffffffffffffffffffff166109bb610ff1565b73ffffffffffffffffffffffffffffffffffffffff1614610a11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a08906131a4565b60405180910390fd5b80600b9080519060200190610a27929190612510565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610ad4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610acb90613124565b60405180910390fd5b80915050919050565b600c60009054906101000a900460ff1681565b600c60009054906101000a900460ff16610b3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3690613144565b60405180910390fd5b60005b8151811015610d1757600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e838381518110610b9c57610b9b6136d8565b5b60200260200101516040518263ffffffff1660e01b8152600401610bc09190613284565b60206040518083038186803b158015610bd857600080fd5b505afa158015610bec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c1091906127dc565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610c7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7490612fe4565b60405180910390fd5b610ca0828281518110610c9357610c926136d8565b5b6020026020010151611659565b15610ce0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd790613224565b60405180910390fd5b610d0433838381518110610cf757610cf66136d8565b5b6020026020010151611ac0565b8080610d0f906135a2565b915050610b42565b507f28ee566bdecaf975c0979f4d09fecf91a9009ffe78523aef053a678134137b8b3382604051610d49929190612f77565b60405180910390a150565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610dc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dbc90613104565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610e146116c5565b73ffffffffffffffffffffffffffffffffffffffff16610e32610ff1565b73ffffffffffffffffffffffffffffffffffffffff1614610e88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7f906131a4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b610f516116c5565b73ffffffffffffffffffffffffffffffffffffffff16610f6f610ff1565b73ffffffffffffffffffffffffffffffffffffffff1614610fc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fbc906131a4565b60405180910390fd5b600c60009054906101000a900460ff1615600c60006101000a81548160ff021916908315150217905550565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461102a9061353f565b80601f01602080910402602001604051908101604052809291908181526020018280546110569061353f565b80156110a35780601f10611078576101008083540402835291602001916110a3565b820191906000526020600020905b81548152906001019060200180831161108657829003601f168201915b5050505050905090565b6110b56116c5565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611123576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111a906130a4565b60405180910390fd5b80600560006111306116c5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166111dd6116c5565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516112229190612fa7565b60405180910390a35050565b61123f6112396116c5565b83611786565b61127e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127590613244565b60405180910390fd5b61128a84848484611c8e565b50505050565b606061129b82611659565b6112da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d1906131e4565b60405180910390fd5b60006112e4611cea565b90506000815111611304576040518060200160405280600081525061132f565b8061130e84611d7c565b60405160200161131f929190612eec565b6040516020818303038152906040525b915050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6113d36116c5565b73ffffffffffffffffffffffffffffffffffffffff166113f1610ff1565b73ffffffffffffffffffffffffffffffffffffffff1614611447576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143e906131a4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156114b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ae90613044565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061164257507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611652575061165182611edd565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661174083610a2b565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061179182611659565b6117d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c7906130c4565b60405180910390fd5b60006117db83610a2b565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061184a57508373ffffffffffffffffffffffffffffffffffffffff166118328461058f565b73ffffffffffffffffffffffffffffffffffffffff16145b8061185b575061185a8185611337565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661188482610a2b565b73ffffffffffffffffffffffffffffffffffffffff16146118da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d1906131c4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561194a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194190613084565b60405180910390fd5b611955838383611f47565b6119606000826116cd565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546119b09190613455565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611a0791906133ce565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2790613164565b60405180910390fd5b611b3981611659565b15611b79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7090613064565b60405180910390fd5b611b8560008383611f47565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611bd591906133ce565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b611c99848484611864565b611ca58484848461205b565b611ce4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cdb90613024565b60405180910390fd5b50505050565b6060600b8054611cf99061353f565b80601f0160208091040260200160405190810160405280929190818152602001828054611d259061353f565b8015611d725780601f10611d4757610100808354040283529160200191611d72565b820191906000526020600020905b815481529060010190602001808311611d5557829003601f168201915b5050505050905090565b60606000821415611dc4576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611ed8565b600082905060005b60008214611df6578080611ddf906135a2565b915050600a82611def9190613424565b9150611dcc565b60008167ffffffffffffffff811115611e1257611e11613707565b5b6040519080825280601f01601f191660200182016040528015611e445781602001600182028036833780820191505090505b5090505b60008514611ed157600182611e5d9190613455565b9150600a85611e6c91906135eb565b6030611e7891906133ce565b60f81b818381518110611e8e57611e8d6136d8565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85611eca9190613424565b9450611e48565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b611f528383836121f2565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611f9557611f90816121f7565b611fd4565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614611fd357611fd28382612240565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561201757612012816123ad565b612056565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461205557612054828261247e565b5b5b505050565b600061207c8473ffffffffffffffffffffffffffffffffffffffff166124fd565b156121e5578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026120a56116c5565b8786866040518563ffffffff1660e01b81526004016120c79493929190612f2b565b602060405180830381600087803b1580156120e157600080fd5b505af192505050801561211257506040513d601f19601f8201168201806040525081019061210f9190612a15565b60015b612195573d8060008114612142576040519150601f19603f3d011682016040523d82523d6000602084013e612147565b606091505b5060008151141561218d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218490613024565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506121ea565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161224d84610d54565b6122579190613455565b905060006007600084815260200190815260200160002054905081811461233c576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506123c19190613455565b90506000600960008481526020019081526020016000205490506000600883815481106123f1576123f06136d8565b5b906000526020600020015490508060088381548110612413576124126136d8565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612462576124616136a9565b5b6001900381819060005260206000200160009055905550505050565b600061248983610d54565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600080823b905060008111915050919050565b82805461251c9061353f565b90600052602060002090601f01602090048101928261253e5760008555612585565b82601f1061255757805160ff1916838001178555612585565b82800160010185558215612585579182015b82811115612584578251825591602001919060010190612569565b5b5090506125929190612596565b5090565b5b808211156125af576000816000905550600101612597565b5090565b60006125c66125c1846132c4565b61329f565b905080838252602082019050828560208602820111156125e9576125e861373b565b5b60005b8581101561261957816125ff888261279a565b8452602084019350602083019250506001810190506125ec565b5050509392505050565b6000612636612631846132f0565b61329f565b90508281526020810184848401111561265257612651613740565b5b61265d8482856134fd565b509392505050565b600061267861267384613321565b61329f565b90508281526020810184848401111561269457612693613740565b5b61269f8482856134fd565b509392505050565b6000813590506126b681613d1d565b92915050565b6000815190506126cb81613d1d565b92915050565b600082601f8301126126e6576126e5613736565b5b81356126f68482602086016125b3565b91505092915050565b60008135905061270e81613d34565b92915050565b60008135905061272381613d4b565b92915050565b60008151905061273881613d4b565b92915050565b600082601f83011261275357612752613736565b5b8135612763848260208601612623565b91505092915050565b600082601f83011261278157612780613736565b5b8135612791848260208601612665565b91505092915050565b6000813590506127a981613d62565b92915050565b6000602082840312156127c5576127c461374a565b5b60006127d3848285016126a7565b91505092915050565b6000602082840312156127f2576127f161374a565b5b6000612800848285016126bc565b91505092915050565b600080604083850312156128205761281f61374a565b5b600061282e858286016126a7565b925050602061283f858286016126a7565b9150509250929050565b6000806000606084860312156128625761286161374a565b5b6000612870868287016126a7565b9350506020612881868287016126a7565b92505060406128928682870161279a565b9150509250925092565b600080600080608085870312156128b6576128b561374a565b5b60006128c4878288016126a7565b94505060206128d5878288016126a7565b93505060406128e68782880161279a565b925050606085013567ffffffffffffffff81111561290757612906613745565b5b6129138782880161273e565b91505092959194509250565b600080604083850312156129365761293561374a565b5b6000612944858286016126a7565b9250506020612955858286016126ff565b9150509250929050565b600080604083850312156129765761297561374a565b5b6000612984858286016126a7565b92505060206129958582860161279a565b9150509250929050565b6000602082840312156129b5576129b461374a565b5b600082013567ffffffffffffffff8111156129d3576129d2613745565b5b6129df848285016126d1565b91505092915050565b6000602082840312156129fe576129fd61374a565b5b6000612a0c84828501612714565b91505092915050565b600060208284031215612a2b57612a2a61374a565b5b6000612a3984828501612729565b91505092915050565b600060208284031215612a5857612a5761374a565b5b600082013567ffffffffffffffff811115612a7657612a75613745565b5b612a828482850161276c565b91505092915050565b600060208284031215612aa157612aa061374a565b5b6000612aaf8482850161279a565b91505092915050565b6000612ac48383612ece565b60208301905092915050565b612ad981613489565b82525050565b6000612aea82613362565b612af48185613390565b9350612aff83613352565b8060005b83811015612b30578151612b178882612ab8565b9750612b2283613383565b925050600181019050612b03565b5085935050505092915050565b612b468161349b565b82525050565b6000612b578261336d565b612b6181856133a1565b9350612b7181856020860161350c565b612b7a8161374f565b840191505092915050565b6000612b9082613378565b612b9a81856133b2565b9350612baa81856020860161350c565b612bb38161374f565b840191505092915050565b6000612bc982613378565b612bd381856133c3565b9350612be381856020860161350c565b80840191505092915050565b6000612bfc6028836133b2565b9150612c0782613760565b604082019050919050565b6000612c1f602b836133b2565b9150612c2a826137af565b604082019050919050565b6000612c426032836133b2565b9150612c4d826137fe565b604082019050919050565b6000612c656026836133b2565b9150612c708261384d565b604082019050919050565b6000612c88601c836133b2565b9150612c938261389c565b602082019050919050565b6000612cab6024836133b2565b9150612cb6826138c5565b604082019050919050565b6000612cce6019836133b2565b9150612cd982613914565b602082019050919050565b6000612cf1602c836133b2565b9150612cfc8261393d565b604082019050919050565b6000612d146038836133b2565b9150612d1f8261398c565b604082019050919050565b6000612d37602a836133b2565b9150612d42826139db565b604082019050919050565b6000612d5a6029836133b2565b9150612d6582613a2a565b604082019050919050565b6000612d7d6018836133b2565b9150612d8882613a79565b602082019050919050565b6000612da06020836133b2565b9150612dab82613aa2565b602082019050919050565b6000612dc3602c836133b2565b9150612dce82613acb565b604082019050919050565b6000612de66020836133b2565b9150612df182613b1a565b602082019050919050565b6000612e096029836133b2565b9150612e1482613b43565b604082019050919050565b6000612e2c602f836133b2565b9150612e3782613b92565b604082019050919050565b6000612e4f6021836133b2565b9150612e5a82613be1565b604082019050919050565b6000612e726025836133b2565b9150612e7d82613c30565b604082019050919050565b6000612e956031836133b2565b9150612ea082613c7f565b604082019050919050565b6000612eb8602c836133b2565b9150612ec382613cce565b604082019050919050565b612ed7816134f3565b82525050565b612ee6816134f3565b82525050565b6000612ef88285612bbe565b9150612f048284612bbe565b91508190509392505050565b6000602082019050612f256000830184612ad0565b92915050565b6000608082019050612f406000830187612ad0565b612f4d6020830186612ad0565b612f5a6040830185612edd565b8181036060830152612f6c8184612b4c565b905095945050505050565b6000604082019050612f8c6000830185612ad0565b8181036020830152612f9e8184612adf565b90509392505050565b6000602082019050612fbc6000830184612b3d565b92915050565b60006020820190508181036000830152612fdc8184612b85565b905092915050565b60006020820190508181036000830152612ffd81612bef565b9050919050565b6000602082019050818103600083015261301d81612c12565b9050919050565b6000602082019050818103600083015261303d81612c35565b9050919050565b6000602082019050818103600083015261305d81612c58565b9050919050565b6000602082019050818103600083015261307d81612c7b565b9050919050565b6000602082019050818103600083015261309d81612c9e565b9050919050565b600060208201905081810360008301526130bd81612cc1565b9050919050565b600060208201905081810360008301526130dd81612ce4565b9050919050565b600060208201905081810360008301526130fd81612d07565b9050919050565b6000602082019050818103600083015261311d81612d2a565b9050919050565b6000602082019050818103600083015261313d81612d4d565b9050919050565b6000602082019050818103600083015261315d81612d70565b9050919050565b6000602082019050818103600083015261317d81612d93565b9050919050565b6000602082019050818103600083015261319d81612db6565b9050919050565b600060208201905081810360008301526131bd81612dd9565b9050919050565b600060208201905081810360008301526131dd81612dfc565b9050919050565b600060208201905081810360008301526131fd81612e1f565b9050919050565b6000602082019050818103600083015261321d81612e42565b9050919050565b6000602082019050818103600083015261323d81612e65565b9050919050565b6000602082019050818103600083015261325d81612e88565b9050919050565b6000602082019050818103600083015261327d81612eab565b9050919050565b60006020820190506132996000830184612edd565b92915050565b60006132a96132ba565b90506132b58282613571565b919050565b6000604051905090565b600067ffffffffffffffff8211156132df576132de613707565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561330b5761330a613707565b5b6133148261374f565b9050602081019050919050565b600067ffffffffffffffff82111561333c5761333b613707565b5b6133458261374f565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006133d9826134f3565b91506133e4836134f3565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156134195761341861361c565b5b828201905092915050565b600061342f826134f3565b915061343a836134f3565b92508261344a5761344961364b565b5b828204905092915050565b6000613460826134f3565b915061346b836134f3565b92508282101561347e5761347d61361c565b5b828203905092915050565b6000613494826134d3565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561352a57808201518184015260208101905061350f565b83811115613539576000848401525b50505050565b6000600282049050600182168061355757607f821691505b6020821081141561356b5761356a61367a565b5b50919050565b61357a8261374f565b810181811067ffffffffffffffff8211171561359957613598613707565b5b80604052505050565b60006135ad826134f3565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156135e0576135df61361c565b5b600182019050919050565b60006135f6826134f3565b9150613601836134f3565b9250826136115761361061364b565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e4654763a204d757374206f776e20616c6c20636f7563686573206265696e6760008201527f20636c61696d6564000000000000000000000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4e4654763a2073616c65206973206e6f74206163746976650000000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4e4654763a20436f7563682077617320616c7265616479207573656420746f2060008201527f636c61696d000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b613d2681613489565b8114613d3157600080fd5b50565b613d3d8161349b565b8114613d4857600080fd5b50565b613d54816134a7565b8114613d5f57600080fd5b50565b613d6b816134f3565b8114613d7657600080fd5b5056fea26469706673582212202be304767f61535b1ec6320d146f45e25e08e452953e3eee09c7f8165f9a5e1164736f6c63430008070033
Deployed Bytecode Sourcemap
43443:1241:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37244:237;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25375:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26842:221;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26372:404;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37897:113;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27732:305;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37565:256;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28108:151;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38087:233;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44568:113;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44267:91;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25069:239;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43524:35;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43792:469;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24799:208;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4940:148;;;:::i;:::-;;44473:89;;;:::i;:::-;;4289:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25544:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27135:295;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28330:285;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25719:360;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27501:164;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5243:244;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37244:237;37346:4;37385:35;37370:50;;;:11;:50;;;;:103;;;;37437:36;37461:11;37437:23;:36::i;:::-;37370:103;37363:110;;37244:237;;;:::o;25375:100::-;25429:13;25462:5;25455:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25375:100;:::o;26842:221::-;26918:7;26946:16;26954:7;26946;:16::i;:::-;26938:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27031:15;:24;27047:7;27031:24;;;;;;;;;;;;;;;;;;;;;27024:31;;26842:221;;;:::o;26372:404::-;26453:13;26469:23;26484:7;26469:14;:23::i;:::-;26453:39;;26517:5;26511:11;;:2;:11;;;;26503:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;26597:5;26581:21;;:12;:10;:12::i;:::-;:21;;;:69;;;;26606:44;26630:5;26637:12;:10;:12::i;:::-;26606:23;:44::i;:::-;26581:69;26573:161;;;;;;;;;;;;:::i;:::-;;;;;;;;;26747:21;26756:2;26760:7;26747:8;:21::i;:::-;26442:334;26372:404;;:::o;37897:113::-;37958:7;37985:10;:17;;;;37978:24;;37897:113;:::o;27732:305::-;27893:41;27912:12;:10;:12::i;:::-;27926:7;27893:18;:41::i;:::-;27885:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;28001:28;28011:4;28017:2;28021:7;28001:9;:28::i;:::-;27732:305;;;:::o;37565:256::-;37662:7;37698:23;37715:5;37698:16;:23::i;:::-;37690:5;:31;37682:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;37787:12;:19;37800:5;37787:19;;;;;;;;;;;;;;;:26;37807:5;37787:26;;;;;;;;;;;;37780:33;;37565:256;;;;:::o;28108:151::-;28212:39;28229:4;28235:2;28239:7;28212:39;;;;;;;;;;;;:16;:39::i;:::-;28108:151;;;:::o;38087:233::-;38162:7;38198:30;:28;:30::i;:::-;38190:5;:38;38182:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;38295:10;38306:5;38295:17;;;;;;;;:::i;:::-;;;;;;;;;;38288:24;;38087:233;;;:::o;44568:113::-;4520:12;:10;:12::i;:::-;4509:23;;:7;:5;:7::i;:::-;:23;;;4501:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44635:7:::1;44627:25;;:48;44653:21;44627:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;44568:113:::0;:::o;44267:91::-;4520:12;:10;:12::i;:::-;4509:23;;:7;:5;:7::i;:::-;:23;;;4501:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44345:7:::1;44334:8;:18;;;;;;;;;;;;:::i;:::-;;44267:91:::0;:::o;25069:239::-;25141:7;25161:13;25177:7;:16;25185:7;25177:16;;;;;;;;;;;;;;;;;;;;;25161:32;;25229:1;25212:19;;:5;:19;;;;25204:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;25295:5;25288:12;;;25069:239;;;:::o;43524:35::-;;;;;;;;;;;;;:::o;43792:469::-;43861:15;;;;;;;;;;;43853:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;43919:6;43914:294;43935:13;:20;43931:1;:24;43914:294;;;43993:7;;;;;;;;;;;:15;;;44009:13;44023:1;44009:16;;;;;;;;:::i;:::-;;;;;;;;43993:33;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43979:47;;:10;:47;;;43971:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;44089:25;44097:13;44111:1;44097:16;;;;;;;;:::i;:::-;;;;;;;;44089:7;:25::i;:::-;44088:26;44080:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;44165:35;44171:10;44183:13;44197:1;44183:16;;;;;;;;:::i;:::-;;;;;;;;44165:5;:35::i;:::-;43957:3;;;;;:::i;:::-;;;;43914:294;;;;44221:34;44229:10;44241:13;44221:34;;;;;;;:::i;:::-;;;;;;;;43792:469;:::o;24799:208::-;24871:7;24916:1;24899:19;;:5;:19;;;;24891:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;24983:9;:16;24993:5;24983:16;;;;;;;;;;;;;;;;24976:23;;24799:208;;;:::o;4940:148::-;4520:12;:10;:12::i;:::-;4509:23;;:7;:5;:7::i;:::-;:23;;;4501:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5047:1:::1;5010:40;;5031:6;;;;;;;;;;;5010:40;;;;;;;;;;;;5078:1;5061:6;;:19;;;;;;;;;;;;;;;;;;4940:148::o:0;44473:89::-;4520:12;:10;:12::i;:::-;4509:23;;:7;:5;:7::i;:::-;:23;;;4501:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44541:15:::1;;;;;;;;;;;44540:16;44522:15;;:34;;;;;;;;;;;;;;;;;;44473:89::o:0;4289:87::-;4335:7;4362:6;;;;;;;;;;;4355:13;;4289:87;:::o;25544:104::-;25600:13;25633:7;25626:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25544:104;:::o;27135:295::-;27250:12;:10;:12::i;:::-;27238:24;;:8;:24;;;;27230:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;27350:8;27305:18;:32;27324:12;:10;:12::i;:::-;27305:32;;;;;;;;;;;;;;;:42;27338:8;27305:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;27403:8;27374:48;;27389:12;:10;:12::i;:::-;27374:48;;;27413:8;27374:48;;;;;;:::i;:::-;;;;;;;;27135:295;;:::o;28330:285::-;28462:41;28481:12;:10;:12::i;:::-;28495:7;28462:18;:41::i;:::-;28454:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;28568:39;28582:4;28588:2;28592:7;28601:5;28568:13;:39::i;:::-;28330:285;;;;:::o;25719:360::-;25792:13;25826:16;25834:7;25826;:16::i;:::-;25818:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;25907:21;25931:10;:8;:10::i;:::-;25907:34;;25983:1;25965:7;25959:21;:25;:112;;;;;;;;;;;;;;;;;26024:7;26033:18;:7;:16;:18::i;:::-;26007:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;25959:112;25952:119;;;25719:360;;;:::o;27501:164::-;27598:4;27622:18;:25;27641:5;27622:25;;;;;;;;;;;;;;;:35;27648:8;27622:35;;;;;;;;;;;;;;;;;;;;;;;;;27615:42;;27501:164;;;;:::o;5243:244::-;4520:12;:10;:12::i;:::-;4509:23;;:7;:5;:7::i;:::-;:23;;;4501:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5352:1:::1;5332:22;;:8;:22;;;;5324:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;5442:8;5413:38;;5434:6;;;;;;;;;;;5413:38;;;;;;;;;;;;5471:8;5462:6;;:17;;;;;;;;;;;;;;;;;;5243:244:::0;:::o;24443:292::-;24545:4;24584:25;24569:40;;;:11;:40;;;;:105;;;;24641:33;24626:48;;;:11;:48;;;;24569:105;:158;;;;24691:36;24715:11;24691:23;:36::i;:::-;24569:158;24562:165;;24443:292;;;:::o;30082:127::-;30147:4;30199:1;30171:30;;:7;:16;30179:7;30171:16;;;;;;;;;;;;;;;;;;;;;:30;;;;30164:37;;30082:127;;;:::o;2794:98::-;2847:7;2874:10;2867:17;;2794:98;:::o;33966:174::-;34068:2;34041:15;:24;34057:7;34041:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;34124:7;34120:2;34086:46;;34095:23;34110:7;34095:14;:23::i;:::-;34086:46;;;;;;;;;;;;33966:174;;:::o;30376:355::-;30469:4;30494:16;30502:7;30494;:16::i;:::-;30486:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;30570:13;30586:23;30601:7;30586:14;:23::i;:::-;30570:39;;30639:5;30628:16;;:7;:16;;;:51;;;;30672:7;30648:31;;:20;30660:7;30648:11;:20::i;:::-;:31;;;30628:51;:94;;;;30683:39;30707:5;30714:7;30683:23;:39::i;:::-;30628:94;30620:103;;;30376:355;;;;:::o;33304:544::-;33429:4;33402:31;;:23;33417:7;33402:14;:23::i;:::-;:31;;;33394:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;33512:1;33498:16;;:2;:16;;;;33490:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;33568:39;33589:4;33595:2;33599:7;33568:20;:39::i;:::-;33672:29;33689:1;33693:7;33672:8;:29::i;:::-;33733:1;33714:9;:15;33724:4;33714:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;33762:1;33745:9;:13;33755:2;33745:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;33793:2;33774:7;:16;33782:7;33774:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;33832:7;33828:2;33813:27;;33822:4;33813:27;;;;;;;;;;;;33304:544;;;:::o;31996:382::-;32090:1;32076:16;;:2;:16;;;;32068:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;32149:16;32157:7;32149;:16::i;:::-;32148:17;32140:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;32211:45;32240:1;32244:2;32248:7;32211:20;:45::i;:::-;32286:1;32269:9;:13;32279:2;32269:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;32317:2;32298:7;:16;32306:7;32298:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;32362:7;32358:2;32337:33;;32354:1;32337:33;;;;;;;;;;;;31996:382;;:::o;29497:272::-;29611:28;29621:4;29627:2;29631:7;29611:9;:28::i;:::-;29658:48;29681:4;29687:2;29691:7;29700:5;29658:22;:48::i;:::-;29650:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;29497:272;;;;:::o;44364:103::-;44424:13;44453:8;44446:15;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44364:103;:::o;360:723::-;416:13;646:1;637:5;:10;633:53;;;664:10;;;;;;;;;;;;;;;;;;;;;633:53;696:12;711:5;696:20;;727:14;752:78;767:1;759:4;:9;752:78;;785:8;;;;;:::i;:::-;;;;816:2;808:10;;;;;:::i;:::-;;;752:78;;;840:19;872:6;862:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;840:39;;890:154;906:1;897:5;:10;890:154;;934:1;924:11;;;;;:::i;:::-;;;1001:2;993:5;:10;;;;:::i;:::-;980:2;:24;;;;:::i;:::-;967:39;;950:6;957;950:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;1030:2;1021:11;;;;;:::i;:::-;;;890:154;;;1068:6;1054:21;;;;;360:723;;;;:::o;16297:157::-;16382:4;16421:25;16406:40;;;:11;:40;;;;16399:47;;16297:157;;;:::o;38933:555::-;39043:45;39070:4;39076:2;39080:7;39043:26;:45::i;:::-;39121:1;39105:18;;:4;:18;;;39101:187;;;39140:40;39172:7;39140:31;:40::i;:::-;39101:187;;;39210:2;39202:10;;:4;:10;;;39198:90;;39229:47;39262:4;39268:7;39229:32;:47::i;:::-;39198:90;39101:187;39316:1;39302:16;;:2;:16;;;39298:183;;;39335:45;39372:7;39335:36;:45::i;:::-;39298:183;;;39408:4;39402:10;;:2;:10;;;39398:83;;39429:40;39457:2;39461:7;39429:27;:40::i;:::-;39398:83;39298:183;38933:555;;;:::o;34705:843::-;34826:4;34852:15;:2;:13;;;:15::i;:::-;34848:693;;;34904:2;34888:36;;;34925:12;:10;:12::i;:::-;34939:4;34945:7;34954:5;34888:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;34884:602;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35151:1;35134:6;:13;:18;35130:341;;;35177:60;;;;;;;;;;:::i;:::-;;;;;;;;35130:341;35421:6;35415:13;35406:6;35402:2;35398:15;35391:38;34884:602;35021:45;;;35011:55;;;:6;:55;;;;35004:62;;;;;34848:693;35525:4;35518:11;;34705:843;;;;;;;:::o;36161:93::-;;;;:::o;40211:164::-;40315:10;:17;;;;40288:15;:24;40304:7;40288:24;;;;;;;;;;;:44;;;;40343:10;40359:7;40343:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40211:164;:::o;41002:988::-;41268:22;41318:1;41293:22;41310:4;41293:16;:22::i;:::-;:26;;;;:::i;:::-;41268:51;;41330:18;41351:17;:26;41369:7;41351:26;;;;;;;;;;;;41330:47;;41498:14;41484:10;:28;41480:328;;41529:19;41551:12;:18;41564:4;41551:18;;;;;;;;;;;;;;;:34;41570:14;41551:34;;;;;;;;;;;;41529:56;;41635:11;41602:12;:18;41615:4;41602:18;;;;;;;;;;;;;;;:30;41621:10;41602:30;;;;;;;;;;;:44;;;;41752:10;41719:17;:30;41737:11;41719:30;;;;;;;;;;;:43;;;;41514:294;41480:328;41904:17;:26;41922:7;41904:26;;;;;;;;;;;41897:33;;;41948:12;:18;41961:4;41948:18;;;;;;;;;;;;;;;:34;41967:14;41948:34;;;;;;;;;;;41941:41;;;41083:907;;41002:988;;:::o;42285:1079::-;42538:22;42583:1;42563:10;:17;;;;:21;;;;:::i;:::-;42538:46;;42595:18;42616:15;:24;42632:7;42616:24;;;;;;;;;;;;42595:45;;42967:19;42989:10;43000:14;42989:26;;;;;;;;:::i;:::-;;;;;;;;;;42967:48;;43053:11;43028:10;43039;43028:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;43164:10;43133:15;:28;43149:11;43133:28;;;;;;;;;;;:41;;;;43305:15;:24;43321:7;43305:24;;;;;;;;;;;43298:31;;;43340:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;42356:1008;;;42285:1079;:::o;39789:221::-;39874:14;39891:20;39908:2;39891:16;:20::i;:::-;39874:37;;39949:7;39922:12;:16;39935:2;39922:16;;;;;;;;;;;;;;;:24;39939:6;39922:24;;;;;;;;;;;:34;;;;39996:6;39967:17;:26;39985:7;39967:26;;;;;;;;;;;:35;;;;39863:147;39789:221;;:::o;6313:422::-;6373:4;6581:12;6692:7;6680:20;6672:28;;6726:1;6719:4;:8;6712:15;;;6313:422;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;752:410::-;829:5;854:65;870:48;911:6;870:48;:::i;:::-;854:65;:::i;:::-;845:74;;942:6;935:5;928:21;980:4;973:5;969:16;1018:3;1009:6;1004:3;1000:16;997:25;994:112;;;1025:79;;:::i;:::-;994:112;1115:41;1149:6;1144:3;1139;1115:41;:::i;:::-;835:327;752:410;;;;;:::o;1168:412::-;1246:5;1271:66;1287:49;1329:6;1287:49;:::i;:::-;1271:66;:::i;:::-;1262:75;;1360:6;1353:5;1346:21;1398:4;1391:5;1387:16;1436:3;1427:6;1422:3;1418:16;1415:25;1412:112;;;1443:79;;:::i;:::-;1412:112;1533:41;1567:6;1562:3;1557;1533:41;:::i;:::-;1252:328;1168:412;;;;;:::o;1586:139::-;1632:5;1670:6;1657:20;1648:29;;1686:33;1713:5;1686:33;:::i;:::-;1586:139;;;;:::o;1731:143::-;1788:5;1819:6;1813:13;1804:22;;1835:33;1862:5;1835:33;:::i;:::-;1731:143;;;;:::o;1897:370::-;1968:5;2017:3;2010:4;2002:6;1998:17;1994:27;1984:122;;2025:79;;:::i;:::-;1984:122;2142:6;2129:20;2167:94;2257:3;2249:6;2242:4;2234:6;2230:17;2167:94;:::i;:::-;2158:103;;1974:293;1897:370;;;;:::o;2273:133::-;2316:5;2354:6;2341:20;2332:29;;2370:30;2394:5;2370:30;:::i;:::-;2273:133;;;;:::o;2412:137::-;2457:5;2495:6;2482:20;2473:29;;2511:32;2537:5;2511:32;:::i;:::-;2412:137;;;;:::o;2555:141::-;2611:5;2642:6;2636:13;2627:22;;2658:32;2684:5;2658:32;:::i;:::-;2555:141;;;;:::o;2715:338::-;2770:5;2819:3;2812:4;2804:6;2800:17;2796:27;2786:122;;2827:79;;:::i;:::-;2786:122;2944:6;2931:20;2969:78;3043:3;3035:6;3028:4;3020:6;3016:17;2969:78;:::i;:::-;2960:87;;2776:277;2715:338;;;;:::o;3073:340::-;3129:5;3178:3;3171:4;3163:6;3159:17;3155:27;3145:122;;3186:79;;:::i;:::-;3145:122;3303:6;3290:20;3328:79;3403:3;3395:6;3388:4;3380:6;3376:17;3328:79;:::i;:::-;3319:88;;3135:278;3073:340;;;;:::o;3419:139::-;3465:5;3503:6;3490:20;3481:29;;3519:33;3546:5;3519:33;:::i;:::-;3419:139;;;;:::o;3564:329::-;3623:6;3672:2;3660:9;3651:7;3647:23;3643:32;3640:119;;;3678:79;;:::i;:::-;3640:119;3798:1;3823:53;3868:7;3859:6;3848:9;3844:22;3823:53;:::i;:::-;3813:63;;3769:117;3564:329;;;;:::o;3899:351::-;3969:6;4018:2;4006:9;3997:7;3993:23;3989:32;3986:119;;;4024:79;;:::i;:::-;3986:119;4144:1;4169:64;4225:7;4216:6;4205:9;4201:22;4169:64;:::i;:::-;4159:74;;4115:128;3899:351;;;;:::o;4256:474::-;4324:6;4332;4381:2;4369:9;4360:7;4356:23;4352:32;4349:119;;;4387:79;;:::i;:::-;4349:119;4507:1;4532:53;4577:7;4568:6;4557:9;4553:22;4532:53;:::i;:::-;4522:63;;4478:117;4634:2;4660:53;4705:7;4696:6;4685:9;4681:22;4660:53;:::i;:::-;4650:63;;4605:118;4256:474;;;;;:::o;4736:619::-;4813:6;4821;4829;4878:2;4866:9;4857:7;4853:23;4849:32;4846:119;;;4884:79;;:::i;:::-;4846:119;5004:1;5029:53;5074:7;5065:6;5054:9;5050:22;5029:53;:::i;:::-;5019:63;;4975:117;5131:2;5157:53;5202:7;5193:6;5182:9;5178:22;5157:53;:::i;:::-;5147:63;;5102:118;5259:2;5285:53;5330:7;5321:6;5310:9;5306:22;5285:53;:::i;:::-;5275:63;;5230:118;4736:619;;;;;:::o;5361:943::-;5456:6;5464;5472;5480;5529:3;5517:9;5508:7;5504:23;5500:33;5497:120;;;5536:79;;:::i;:::-;5497:120;5656:1;5681:53;5726:7;5717:6;5706:9;5702:22;5681:53;:::i;:::-;5671:63;;5627:117;5783:2;5809:53;5854:7;5845:6;5834:9;5830:22;5809:53;:::i;:::-;5799:63;;5754:118;5911:2;5937:53;5982:7;5973:6;5962:9;5958:22;5937:53;:::i;:::-;5927:63;;5882:118;6067:2;6056:9;6052:18;6039:32;6098:18;6090:6;6087:30;6084:117;;;6120:79;;:::i;:::-;6084:117;6225:62;6279:7;6270:6;6259:9;6255:22;6225:62;:::i;:::-;6215:72;;6010:287;5361:943;;;;;;;:::o;6310:468::-;6375:6;6383;6432:2;6420:9;6411:7;6407:23;6403:32;6400:119;;;6438:79;;:::i;:::-;6400:119;6558:1;6583:53;6628:7;6619:6;6608:9;6604:22;6583:53;:::i;:::-;6573:63;;6529:117;6685:2;6711:50;6753:7;6744:6;6733:9;6729:22;6711:50;:::i;:::-;6701:60;;6656:115;6310:468;;;;;:::o;6784:474::-;6852:6;6860;6909:2;6897:9;6888:7;6884:23;6880:32;6877:119;;;6915:79;;:::i;:::-;6877:119;7035:1;7060:53;7105:7;7096:6;7085:9;7081:22;7060:53;:::i;:::-;7050:63;;7006:117;7162:2;7188:53;7233:7;7224:6;7213:9;7209:22;7188:53;:::i;:::-;7178:63;;7133:118;6784:474;;;;;:::o;7264:539::-;7348:6;7397:2;7385:9;7376:7;7372:23;7368:32;7365:119;;;7403:79;;:::i;:::-;7365:119;7551:1;7540:9;7536:17;7523:31;7581:18;7573:6;7570:30;7567:117;;;7603:79;;:::i;:::-;7567:117;7708:78;7778:7;7769:6;7758:9;7754:22;7708:78;:::i;:::-;7698:88;;7494:302;7264:539;;;;:::o;7809:327::-;7867:6;7916:2;7904:9;7895:7;7891:23;7887:32;7884:119;;;7922:79;;:::i;:::-;7884:119;8042:1;8067:52;8111:7;8102:6;8091:9;8087:22;8067:52;:::i;:::-;8057:62;;8013:116;7809:327;;;;:::o;8142:349::-;8211:6;8260:2;8248:9;8239:7;8235:23;8231:32;8228:119;;;8266:79;;:::i;:::-;8228:119;8386:1;8411:63;8466:7;8457:6;8446:9;8442:22;8411:63;:::i;:::-;8401:73;;8357:127;8142:349;;;;:::o;8497:509::-;8566:6;8615:2;8603:9;8594:7;8590:23;8586:32;8583:119;;;8621:79;;:::i;:::-;8583:119;8769:1;8758:9;8754:17;8741:31;8799:18;8791:6;8788:30;8785:117;;;8821:79;;:::i;:::-;8785:117;8926:63;8981:7;8972:6;8961:9;8957:22;8926:63;:::i;:::-;8916:73;;8712:287;8497:509;;;;:::o;9012:329::-;9071:6;9120:2;9108:9;9099:7;9095:23;9091:32;9088:119;;;9126:79;;:::i;:::-;9088:119;9246:1;9271:53;9316:7;9307:6;9296:9;9292:22;9271:53;:::i;:::-;9261:63;;9217:117;9012:329;;;;:::o;9347:179::-;9416:10;9437:46;9479:3;9471:6;9437:46;:::i;:::-;9515:4;9510:3;9506:14;9492:28;;9347:179;;;;:::o;9532:118::-;9619:24;9637:5;9619:24;:::i;:::-;9614:3;9607:37;9532:118;;:::o;9686:732::-;9805:3;9834:54;9882:5;9834:54;:::i;:::-;9904:86;9983:6;9978:3;9904:86;:::i;:::-;9897:93;;10014:56;10064:5;10014:56;:::i;:::-;10093:7;10124:1;10109:284;10134:6;10131:1;10128:13;10109:284;;;10210:6;10204:13;10237:63;10296:3;10281:13;10237:63;:::i;:::-;10230:70;;10323:60;10376:6;10323:60;:::i;:::-;10313:70;;10169:224;10156:1;10153;10149:9;10144:14;;10109:284;;;10113:14;10409:3;10402:10;;9810:608;;;9686:732;;;;:::o;10424:109::-;10505:21;10520:5;10505:21;:::i;:::-;10500:3;10493:34;10424:109;;:::o;10539:360::-;10625:3;10653:38;10685:5;10653:38;:::i;:::-;10707:70;10770:6;10765:3;10707:70;:::i;:::-;10700:77;;10786:52;10831:6;10826:3;10819:4;10812:5;10808:16;10786:52;:::i;:::-;10863:29;10885:6;10863:29;:::i;:::-;10858:3;10854:39;10847:46;;10629:270;10539:360;;;;:::o;10905:364::-;10993:3;11021:39;11054:5;11021:39;:::i;:::-;11076:71;11140:6;11135:3;11076:71;:::i;:::-;11069:78;;11156:52;11201:6;11196:3;11189:4;11182:5;11178:16;11156:52;:::i;:::-;11233:29;11255:6;11233:29;:::i;:::-;11228:3;11224:39;11217:46;;10997:272;10905:364;;;;:::o;11275:377::-;11381:3;11409:39;11442:5;11409:39;:::i;:::-;11464:89;11546:6;11541:3;11464:89;:::i;:::-;11457:96;;11562:52;11607:6;11602:3;11595:4;11588:5;11584:16;11562:52;:::i;:::-;11639:6;11634:3;11630:16;11623:23;;11385:267;11275:377;;;;:::o;11658:366::-;11800:3;11821:67;11885:2;11880:3;11821:67;:::i;:::-;11814:74;;11897:93;11986:3;11897:93;:::i;:::-;12015:2;12010:3;12006:12;11999:19;;11658:366;;;:::o;12030:::-;12172:3;12193:67;12257:2;12252:3;12193:67;:::i;:::-;12186:74;;12269:93;12358:3;12269:93;:::i;:::-;12387:2;12382:3;12378:12;12371:19;;12030:366;;;:::o;12402:::-;12544:3;12565:67;12629:2;12624:3;12565:67;:::i;:::-;12558:74;;12641:93;12730:3;12641:93;:::i;:::-;12759:2;12754:3;12750:12;12743:19;;12402:366;;;:::o;12774:::-;12916:3;12937:67;13001:2;12996:3;12937:67;:::i;:::-;12930:74;;13013:93;13102:3;13013:93;:::i;:::-;13131:2;13126:3;13122:12;13115:19;;12774:366;;;:::o;13146:::-;13288:3;13309:67;13373:2;13368:3;13309:67;:::i;:::-;13302:74;;13385:93;13474:3;13385:93;:::i;:::-;13503:2;13498:3;13494:12;13487:19;;13146:366;;;:::o;13518:::-;13660:3;13681:67;13745:2;13740:3;13681:67;:::i;:::-;13674:74;;13757:93;13846:3;13757:93;:::i;:::-;13875:2;13870:3;13866:12;13859:19;;13518:366;;;:::o;13890:::-;14032:3;14053:67;14117:2;14112:3;14053:67;:::i;:::-;14046:74;;14129:93;14218:3;14129:93;:::i;:::-;14247:2;14242:3;14238:12;14231:19;;13890:366;;;:::o;14262:::-;14404:3;14425:67;14489:2;14484:3;14425:67;:::i;:::-;14418:74;;14501:93;14590:3;14501:93;:::i;:::-;14619:2;14614:3;14610:12;14603:19;;14262:366;;;:::o;14634:::-;14776:3;14797:67;14861:2;14856:3;14797:67;:::i;:::-;14790:74;;14873:93;14962:3;14873:93;:::i;:::-;14991:2;14986:3;14982:12;14975:19;;14634:366;;;:::o;15006:::-;15148:3;15169:67;15233:2;15228:3;15169:67;:::i;:::-;15162:74;;15245:93;15334:3;15245:93;:::i;:::-;15363:2;15358:3;15354:12;15347:19;;15006:366;;;:::o;15378:::-;15520:3;15541:67;15605:2;15600:3;15541:67;:::i;:::-;15534:74;;15617:93;15706:3;15617:93;:::i;:::-;15735:2;15730:3;15726:12;15719:19;;15378:366;;;:::o;15750:::-;15892:3;15913:67;15977:2;15972:3;15913:67;:::i;:::-;15906:74;;15989:93;16078:3;15989:93;:::i;:::-;16107:2;16102:3;16098:12;16091:19;;15750:366;;;:::o;16122:::-;16264:3;16285:67;16349:2;16344:3;16285:67;:::i;:::-;16278:74;;16361:93;16450:3;16361:93;:::i;:::-;16479:2;16474:3;16470:12;16463:19;;16122:366;;;:::o;16494:::-;16636:3;16657:67;16721:2;16716:3;16657:67;:::i;:::-;16650:74;;16733:93;16822:3;16733:93;:::i;:::-;16851:2;16846:3;16842:12;16835:19;;16494:366;;;:::o;16866:::-;17008:3;17029:67;17093:2;17088:3;17029:67;:::i;:::-;17022:74;;17105:93;17194:3;17105:93;:::i;:::-;17223:2;17218:3;17214:12;17207:19;;16866:366;;;:::o;17238:::-;17380:3;17401:67;17465:2;17460:3;17401:67;:::i;:::-;17394:74;;17477:93;17566:3;17477:93;:::i;:::-;17595:2;17590:3;17586:12;17579:19;;17238:366;;;:::o;17610:::-;17752:3;17773:67;17837:2;17832:3;17773:67;:::i;:::-;17766:74;;17849:93;17938:3;17849:93;:::i;:::-;17967:2;17962:3;17958:12;17951:19;;17610:366;;;:::o;17982:::-;18124:3;18145:67;18209:2;18204:3;18145:67;:::i;:::-;18138:74;;18221:93;18310:3;18221:93;:::i;:::-;18339:2;18334:3;18330:12;18323:19;;17982:366;;;:::o;18354:::-;18496:3;18517:67;18581:2;18576:3;18517:67;:::i;:::-;18510:74;;18593:93;18682:3;18593:93;:::i;:::-;18711:2;18706:3;18702:12;18695:19;;18354:366;;;:::o;18726:::-;18868:3;18889:67;18953:2;18948:3;18889:67;:::i;:::-;18882:74;;18965:93;19054:3;18965:93;:::i;:::-;19083:2;19078:3;19074:12;19067:19;;18726:366;;;:::o;19098:::-;19240:3;19261:67;19325:2;19320:3;19261:67;:::i;:::-;19254:74;;19337:93;19426:3;19337:93;:::i;:::-;19455:2;19450:3;19446:12;19439:19;;19098:366;;;:::o;19470:108::-;19547:24;19565:5;19547:24;:::i;:::-;19542:3;19535:37;19470:108;;:::o;19584:118::-;19671:24;19689:5;19671:24;:::i;:::-;19666:3;19659:37;19584:118;;:::o;19708:435::-;19888:3;19910:95;20001:3;19992:6;19910:95;:::i;:::-;19903:102;;20022:95;20113:3;20104:6;20022:95;:::i;:::-;20015:102;;20134:3;20127:10;;19708:435;;;;;:::o;20149:222::-;20242:4;20280:2;20269:9;20265:18;20257:26;;20293:71;20361:1;20350:9;20346:17;20337:6;20293:71;:::i;:::-;20149:222;;;;:::o;20377:640::-;20572:4;20610:3;20599:9;20595:19;20587:27;;20624:71;20692:1;20681:9;20677:17;20668:6;20624:71;:::i;:::-;20705:72;20773:2;20762:9;20758:18;20749:6;20705:72;:::i;:::-;20787;20855:2;20844:9;20840:18;20831:6;20787:72;:::i;:::-;20906:9;20900:4;20896:20;20891:2;20880:9;20876:18;20869:48;20934:76;21005:4;20996:6;20934:76;:::i;:::-;20926:84;;20377:640;;;;;;;:::o;21023:483::-;21194:4;21232:2;21221:9;21217:18;21209:26;;21245:71;21313:1;21302:9;21298:17;21289:6;21245:71;:::i;:::-;21363:9;21357:4;21353:20;21348:2;21337:9;21333:18;21326:48;21391:108;21494:4;21485:6;21391:108;:::i;:::-;21383:116;;21023:483;;;;;:::o;21512:210::-;21599:4;21637:2;21626:9;21622:18;21614:26;;21650:65;21712:1;21701:9;21697:17;21688:6;21650:65;:::i;:::-;21512:210;;;;:::o;21728:313::-;21841:4;21879:2;21868:9;21864:18;21856:26;;21928:9;21922:4;21918:20;21914:1;21903:9;21899:17;21892:47;21956:78;22029:4;22020:6;21956:78;:::i;:::-;21948:86;;21728:313;;;;:::o;22047:419::-;22213:4;22251:2;22240:9;22236:18;22228:26;;22300:9;22294:4;22290:20;22286:1;22275:9;22271:17;22264:47;22328:131;22454:4;22328:131;:::i;:::-;22320:139;;22047:419;;;:::o;22472:::-;22638:4;22676:2;22665:9;22661:18;22653:26;;22725:9;22719:4;22715:20;22711:1;22700:9;22696:17;22689:47;22753:131;22879:4;22753:131;:::i;:::-;22745:139;;22472:419;;;:::o;22897:::-;23063:4;23101:2;23090:9;23086:18;23078:26;;23150:9;23144:4;23140:20;23136:1;23125:9;23121:17;23114:47;23178:131;23304:4;23178:131;:::i;:::-;23170:139;;22897:419;;;:::o;23322:::-;23488:4;23526:2;23515:9;23511:18;23503:26;;23575:9;23569:4;23565:20;23561:1;23550:9;23546:17;23539:47;23603:131;23729:4;23603:131;:::i;:::-;23595:139;;23322:419;;;:::o;23747:::-;23913:4;23951:2;23940:9;23936:18;23928:26;;24000:9;23994:4;23990:20;23986:1;23975:9;23971:17;23964:47;24028:131;24154:4;24028:131;:::i;:::-;24020:139;;23747:419;;;:::o;24172:::-;24338:4;24376:2;24365:9;24361:18;24353:26;;24425:9;24419:4;24415:20;24411:1;24400:9;24396:17;24389:47;24453:131;24579:4;24453:131;:::i;:::-;24445:139;;24172:419;;;:::o;24597:::-;24763:4;24801:2;24790:9;24786:18;24778:26;;24850:9;24844:4;24840:20;24836:1;24825:9;24821:17;24814:47;24878:131;25004:4;24878:131;:::i;:::-;24870:139;;24597:419;;;:::o;25022:::-;25188:4;25226:2;25215:9;25211:18;25203:26;;25275:9;25269:4;25265:20;25261:1;25250:9;25246:17;25239:47;25303:131;25429:4;25303:131;:::i;:::-;25295:139;;25022:419;;;:::o;25447:::-;25613:4;25651:2;25640:9;25636:18;25628:26;;25700:9;25694:4;25690:20;25686:1;25675:9;25671:17;25664:47;25728:131;25854:4;25728:131;:::i;:::-;25720:139;;25447:419;;;:::o;25872:::-;26038:4;26076:2;26065:9;26061:18;26053:26;;26125:9;26119:4;26115:20;26111:1;26100:9;26096:17;26089:47;26153:131;26279:4;26153:131;:::i;:::-;26145:139;;25872:419;;;:::o;26297:::-;26463:4;26501:2;26490:9;26486:18;26478:26;;26550:9;26544:4;26540:20;26536:1;26525:9;26521:17;26514:47;26578:131;26704:4;26578:131;:::i;:::-;26570:139;;26297:419;;;:::o;26722:::-;26888:4;26926:2;26915:9;26911:18;26903:26;;26975:9;26969:4;26965:20;26961:1;26950:9;26946:17;26939:47;27003:131;27129:4;27003:131;:::i;:::-;26995:139;;26722:419;;;:::o;27147:::-;27313:4;27351:2;27340:9;27336:18;27328:26;;27400:9;27394:4;27390:20;27386:1;27375:9;27371:17;27364:47;27428:131;27554:4;27428:131;:::i;:::-;27420:139;;27147:419;;;:::o;27572:::-;27738:4;27776:2;27765:9;27761:18;27753:26;;27825:9;27819:4;27815:20;27811:1;27800:9;27796:17;27789:47;27853:131;27979:4;27853:131;:::i;:::-;27845:139;;27572:419;;;:::o;27997:::-;28163:4;28201:2;28190:9;28186:18;28178:26;;28250:9;28244:4;28240:20;28236:1;28225:9;28221:17;28214:47;28278:131;28404:4;28278:131;:::i;:::-;28270:139;;27997:419;;;:::o;28422:::-;28588:4;28626:2;28615:9;28611:18;28603:26;;28675:9;28669:4;28665:20;28661:1;28650:9;28646:17;28639:47;28703:131;28829:4;28703:131;:::i;:::-;28695:139;;28422:419;;;:::o;28847:::-;29013:4;29051:2;29040:9;29036:18;29028:26;;29100:9;29094:4;29090:20;29086:1;29075:9;29071:17;29064:47;29128:131;29254:4;29128:131;:::i;:::-;29120:139;;28847:419;;;:::o;29272:::-;29438:4;29476:2;29465:9;29461:18;29453:26;;29525:9;29519:4;29515:20;29511:1;29500:9;29496:17;29489:47;29553:131;29679:4;29553:131;:::i;:::-;29545:139;;29272:419;;;:::o;29697:::-;29863:4;29901:2;29890:9;29886:18;29878:26;;29950:9;29944:4;29940:20;29936:1;29925:9;29921:17;29914:47;29978:131;30104:4;29978:131;:::i;:::-;29970:139;;29697:419;;;:::o;30122:::-;30288:4;30326:2;30315:9;30311:18;30303:26;;30375:9;30369:4;30365:20;30361:1;30350:9;30346:17;30339:47;30403:131;30529:4;30403:131;:::i;:::-;30395:139;;30122:419;;;:::o;30547:::-;30713:4;30751:2;30740:9;30736:18;30728:26;;30800:9;30794:4;30790:20;30786:1;30775:9;30771:17;30764:47;30828:131;30954:4;30828:131;:::i;:::-;30820:139;;30547:419;;;:::o;30972:222::-;31065:4;31103:2;31092:9;31088:18;31080:26;;31116:71;31184:1;31173:9;31169:17;31160:6;31116:71;:::i;:::-;30972:222;;;;:::o;31200:129::-;31234:6;31261:20;;:::i;:::-;31251:30;;31290:33;31318:4;31310:6;31290:33;:::i;:::-;31200:129;;;:::o;31335:75::-;31368:6;31401:2;31395:9;31385:19;;31335:75;:::o;31416:311::-;31493:4;31583:18;31575:6;31572:30;31569:56;;;31605:18;;:::i;:::-;31569:56;31655:4;31647:6;31643:17;31635:25;;31715:4;31709;31705:15;31697:23;;31416:311;;;:::o;31733:307::-;31794:4;31884:18;31876:6;31873:30;31870:56;;;31906:18;;:::i;:::-;31870:56;31944:29;31966:6;31944:29;:::i;:::-;31936:37;;32028:4;32022;32018:15;32010:23;;31733:307;;;:::o;32046:308::-;32108:4;32198:18;32190:6;32187:30;32184:56;;;32220:18;;:::i;:::-;32184:56;32258:29;32280:6;32258:29;:::i;:::-;32250:37;;32342:4;32336;32332:15;32324:23;;32046:308;;;:::o;32360:132::-;32427:4;32450:3;32442:11;;32480:4;32475:3;32471:14;32463:22;;32360:132;;;:::o;32498:114::-;32565:6;32599:5;32593:12;32583:22;;32498:114;;;:::o;32618:98::-;32669:6;32703:5;32697:12;32687:22;;32618:98;;;:::o;32722:99::-;32774:6;32808:5;32802:12;32792:22;;32722:99;;;:::o;32827:113::-;32897:4;32929;32924:3;32920:14;32912:22;;32827:113;;;:::o;32946:184::-;33045:11;33079:6;33074:3;33067:19;33119:4;33114:3;33110:14;33095:29;;32946:184;;;;:::o;33136:168::-;33219:11;33253:6;33248:3;33241:19;33293:4;33288:3;33284:14;33269:29;;33136:168;;;;:::o;33310:169::-;33394:11;33428:6;33423:3;33416:19;33468:4;33463:3;33459:14;33444:29;;33310:169;;;;:::o;33485:148::-;33587:11;33624:3;33609:18;;33485:148;;;;:::o;33639:305::-;33679:3;33698:20;33716:1;33698:20;:::i;:::-;33693:25;;33732:20;33750:1;33732:20;:::i;:::-;33727:25;;33886:1;33818:66;33814:74;33811:1;33808:81;33805:107;;;33892:18;;:::i;:::-;33805:107;33936:1;33933;33929:9;33922:16;;33639:305;;;;:::o;33950:185::-;33990:1;34007:20;34025:1;34007:20;:::i;:::-;34002:25;;34041:20;34059:1;34041:20;:::i;:::-;34036:25;;34080:1;34070:35;;34085:18;;:::i;:::-;34070:35;34127:1;34124;34120:9;34115:14;;33950:185;;;;:::o;34141:191::-;34181:4;34201:20;34219:1;34201:20;:::i;:::-;34196:25;;34235:20;34253:1;34235:20;:::i;:::-;34230:25;;34274:1;34271;34268:8;34265:34;;;34279:18;;:::i;:::-;34265:34;34324:1;34321;34317:9;34309:17;;34141:191;;;;:::o;34338:96::-;34375:7;34404:24;34422:5;34404:24;:::i;:::-;34393:35;;34338:96;;;:::o;34440:90::-;34474:7;34517:5;34510:13;34503:21;34492:32;;34440:90;;;:::o;34536:149::-;34572:7;34612:66;34605:5;34601:78;34590:89;;34536:149;;;:::o;34691:126::-;34728:7;34768:42;34761:5;34757:54;34746:65;;34691:126;;;:::o;34823:77::-;34860:7;34889:5;34878:16;;34823:77;;;:::o;34906:154::-;34990:6;34985:3;34980;34967:30;35052:1;35043:6;35038:3;35034:16;35027:27;34906:154;;;:::o;35066:307::-;35134:1;35144:113;35158:6;35155:1;35152:13;35144:113;;;35243:1;35238:3;35234:11;35228:18;35224:1;35219:3;35215:11;35208:39;35180:2;35177:1;35173:10;35168:15;;35144:113;;;35275:6;35272:1;35269:13;35266:101;;;35355:1;35346:6;35341:3;35337:16;35330:27;35266:101;35115:258;35066:307;;;:::o;35379:320::-;35423:6;35460:1;35454:4;35450:12;35440:22;;35507:1;35501:4;35497:12;35528:18;35518:81;;35584:4;35576:6;35572:17;35562:27;;35518:81;35646:2;35638:6;35635:14;35615:18;35612:38;35609:84;;;35665:18;;:::i;:::-;35609:84;35430:269;35379:320;;;:::o;35705:281::-;35788:27;35810:4;35788:27;:::i;:::-;35780:6;35776:40;35918:6;35906:10;35903:22;35882:18;35870:10;35867:34;35864:62;35861:88;;;35929:18;;:::i;:::-;35861:88;35969:10;35965:2;35958:22;35748:238;35705:281;;:::o;35992:233::-;36031:3;36054:24;36072:5;36054:24;:::i;:::-;36045:33;;36100:66;36093:5;36090:77;36087:103;;;36170:18;;:::i;:::-;36087:103;36217:1;36210:5;36206:13;36199:20;;35992:233;;;:::o;36231:176::-;36263:1;36280:20;36298:1;36280:20;:::i;:::-;36275:25;;36314:20;36332:1;36314:20;:::i;:::-;36309:25;;36353:1;36343:35;;36358:18;;:::i;:::-;36343:35;36399:1;36396;36392:9;36387:14;;36231:176;;;;:::o;36413:180::-;36461:77;36458:1;36451:88;36558:4;36555:1;36548:15;36582:4;36579:1;36572:15;36599:180;36647:77;36644:1;36637:88;36744:4;36741:1;36734:15;36768:4;36765:1;36758:15;36785:180;36833:77;36830:1;36823:88;36930:4;36927:1;36920:15;36954:4;36951:1;36944:15;36971:180;37019:77;37016:1;37009:88;37116:4;37113:1;37106:15;37140:4;37137:1;37130:15;37157:180;37205:77;37202:1;37195:88;37302:4;37299:1;37292:15;37326:4;37323:1;37316:15;37343:180;37391:77;37388:1;37381:88;37488:4;37485:1;37478:15;37512:4;37509:1;37502:15;37529:117;37638:1;37635;37628:12;37652:117;37761:1;37758;37751:12;37775:117;37884:1;37881;37874:12;37898:117;38007:1;38004;37997:12;38021:117;38130:1;38127;38120:12;38144:102;38185:6;38236:2;38232:7;38227:2;38220:5;38216:14;38212:28;38202:38;;38144:102;;;:::o;38252:227::-;38392:34;38388:1;38380:6;38376:14;38369:58;38461:10;38456:2;38448:6;38444:15;38437:35;38252:227;:::o;38485:230::-;38625:34;38621:1;38613:6;38609:14;38602:58;38694:13;38689:2;38681:6;38677:15;38670:38;38485:230;:::o;38721:237::-;38861:34;38857:1;38849:6;38845:14;38838:58;38930:20;38925:2;38917:6;38913:15;38906:45;38721:237;:::o;38964:225::-;39104:34;39100:1;39092:6;39088:14;39081:58;39173:8;39168:2;39160:6;39156:15;39149:33;38964:225;:::o;39195:178::-;39335:30;39331:1;39323:6;39319:14;39312:54;39195:178;:::o;39379:223::-;39519:34;39515:1;39507:6;39503:14;39496:58;39588:6;39583:2;39575:6;39571:15;39564:31;39379:223;:::o;39608:175::-;39748:27;39744:1;39736:6;39732:14;39725:51;39608:175;:::o;39789:231::-;39929:34;39925:1;39917:6;39913:14;39906:58;39998:14;39993:2;39985:6;39981:15;39974:39;39789:231;:::o;40026:243::-;40166:34;40162:1;40154:6;40150:14;40143:58;40235:26;40230:2;40222:6;40218:15;40211:51;40026:243;:::o;40275:229::-;40415:34;40411:1;40403:6;40399:14;40392:58;40484:12;40479:2;40471:6;40467:15;40460:37;40275:229;:::o;40510:228::-;40650:34;40646:1;40638:6;40634:14;40627:58;40719:11;40714:2;40706:6;40702:15;40695:36;40510:228;:::o;40744:174::-;40884:26;40880:1;40872:6;40868:14;40861:50;40744:174;:::o;40924:182::-;41064:34;41060:1;41052:6;41048:14;41041:58;40924:182;:::o;41112:231::-;41252:34;41248:1;41240:6;41236:14;41229:58;41321:14;41316:2;41308:6;41304:15;41297:39;41112:231;:::o;41349:182::-;41489:34;41485:1;41477:6;41473:14;41466:58;41349:182;:::o;41537:228::-;41677:34;41673:1;41665:6;41661:14;41654:58;41746:11;41741:2;41733:6;41729:15;41722:36;41537:228;:::o;41771:234::-;41911:34;41907:1;41899:6;41895:14;41888:58;41980:17;41975:2;41967:6;41963:15;41956:42;41771:234;:::o;42011:220::-;42151:34;42147:1;42139:6;42135:14;42128:58;42220:3;42215:2;42207:6;42203:15;42196:28;42011:220;:::o;42237:224::-;42377:34;42373:1;42365:6;42361:14;42354:58;42446:7;42441:2;42433:6;42429:15;42422:32;42237:224;:::o;42467:236::-;42607:34;42603:1;42595:6;42591:14;42584:58;42676:19;42671:2;42663:6;42659:15;42652:44;42467:236;:::o;42709:231::-;42849:34;42845:1;42837:6;42833:14;42826:58;42918:14;42913:2;42905:6;42901:15;42894:39;42709:231;:::o;42946:122::-;43019:24;43037:5;43019:24;:::i;:::-;43012:5;43009:35;42999:63;;43058:1;43055;43048:12;42999:63;42946:122;:::o;43074:116::-;43144:21;43159:5;43144:21;:::i;:::-;43137:5;43134:32;43124:60;;43180:1;43177;43170:12;43124:60;43074:116;:::o;43196:120::-;43268:23;43285:5;43268:23;:::i;:::-;43261:5;43258:34;43248:62;;43306:1;43303;43296:12;43248:62;43196:120;:::o;43322:122::-;43395:24;43413:5;43395:24;:::i;:::-;43388:5;43385:35;43375:63;;43434:1;43431;43424:12;43375:63;43322:122;:::o
Swarm Source
ipfs://2be304767f61535b1ec6320d146f45e25e08e452953e3eee09c7f8165f9a5e11
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.