ERC-721
Overview
Max Total Supply
0 FNFT
Holders
4
Total Transfers
-
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Loading...
Loading
Loading...
Loading
Loading...
Loading
Contract Name:
FusionTokenRoyalty
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at polygonscan.com on 2023-07-13 */ // SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // OpenZeppelin Contracts (last updated v4.7.0) (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Note that the caller is responsible to confirm that the recipient is capable of receiving ERC721 * or else they may be permanently lost. Usage of {safeTransferFrom} prevents loss, though the caller must * understand this adds an external call which potentially creates a reentrancy vulnerability. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); } // OpenZeppelin Contracts (last updated v4.7.0) (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; uint8 private constant _ADDRESS_LENGTH = 20; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } /** * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation. */ function toHexString(address addr) internal pure returns (string memory) { return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH); } } // OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly /// @solidity memory-safe-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // OpenZeppelin Contracts (last updated v4.7.0) (token/ERC721/ERC721.sol) pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: address zero is not a valid owner"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: invalid token ID"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { _requireMinted(tokenId); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overridden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not token owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { _requireMinted(tokenId); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: caller is not token owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: caller is not token owner nor approved"); _safeTransfer(from, to, tokenId, data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { address owner = ERC721.ownerOf(tokenId); return (spender == owner || isApprovedForAll(owner, spender) || getApproved(tokenId) == spender); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); _afterTokenTransfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); _afterTokenTransfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer from incorrect owner"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); _afterTokenTransfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits an {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits an {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC721: approve to caller"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Reverts if the `tokenId` has not been minted yet. */ function _requireMinted(uint256 tokenId) internal view virtual { require(_exists(tokenId), "ERC721: invalid token ID"); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { /// @solidity memory-safe-assembly assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // OpenZeppelin Contracts v4.4.1 (utils/Counters.sol) pragma solidity ^0.8.0; /** * @title Counters * @author Matt Condon (@shrugs) * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number * of elements in a mapping, issuing ERC721 ids, or counting request ids. * * Include with `using Counters for Counters.Counter;` */ library Counters { struct Counter { // This variable should never be directly accessed by users of the library: interactions must be restricted to // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add // this feature: see https://github.com/ethereum/solidity/issues/4637 uint256 _value; // default: 0 } function current(Counter storage counter) internal view returns (uint256) { return counter._value; } function increment(Counter storage counter) internal { unchecked { counter._value += 1; } } function decrement(Counter storage counter) internal { uint256 value = counter._value; require(value > 0, "Counter: decrement overflow"); unchecked { counter._value = value - 1; } } function reset(Counter storage counter) internal { counter._value = 0; } } // OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // contracts/FusionToken.sol pragma solidity ^0.8.0; contract FusionTokenRoyalty is ERC721, Ownable { using Counters for Counters.Counter; Counters.Counter private _tokenIds; /// bytes4(keccak256("royaltyInfo(uint256,uint256)")) == 0x2a55205a bytes4 private constant _INTERFACE_ID_ERC2981 = 0x2a55205a; struct Item { uint256 id; address owner; string uri; address royaltyAddress; uint96 royaltyPercentage; } constructor() ERC721("Fusion NFTs", "FNFT") {} mapping(uint256 => Item) public Items; event itemCreated(uint256 tokenId, string tokenUri, address owner, address royaltyAddress, uint96 royaltyPercentage); event itemsCreated(uint256[] tokenIds, string[] tokenUris, address owner, address royaltyAddress, uint96 royaltyPercentage); function createItem( string memory uri, address creator, address royaltyAddress, uint96 royaltyPercentage) public onlyOwner returns (uint256) { _tokenIds.increment(); uint256 newItemId = _tokenIds.current(); _safeMint(creator, newItemId); Items[newItemId] = Item( newItemId, creator, uri, royaltyAddress, royaltyPercentage ); emit itemCreated(newItemId, uri, creator, royaltyAddress, royaltyPercentage); return newItemId; } function createItems(string[] memory tokenUris, address creator, address royaltyAddress, uint96 royaltyPercentage) public onlyOwner returns (uint256[] memory) { require(tokenUris.length > 0, "The token uris is not valid"); uint256[] memory newItems = new uint256[](tokenUris.length); for (uint256 i = 0; i < tokenUris.length; i++) { _tokenIds.increment(); uint256 newItemId = _tokenIds.current(); _safeMint(creator, newItemId); Items[newItemId] = Item( newItemId, creator, tokenUris[i], royaltyAddress, royaltyPercentage ); newItems[i] = newItemId; } emit itemsCreated(newItems, tokenUris, creator, royaltyAddress, royaltyPercentage); return newItems; } function setApprovalForItems(address to, uint256[] memory tokenIds) public{ require(tokenIds.length > 0, "The input data is incorrect"); for(uint256 i = 0; i < tokenIds.length; i++){ require(_isApprovedOrOwner(msg.sender, tokenIds[i]), "You are not owner of item"); _approve(to, tokenIds[i]); } } function transfers(address[] memory froms, address[] memory tos, uint256[] memory tokenIds) public{ require(froms.length == tos.length, "The input data is incorrect"); require(tokenIds.length == tos.length, "The input data is incorrect"); for(uint256 i = 0; i < froms.length; i++){ require(_isApprovedOrOwner(msg.sender, tokenIds[i]), "You are not owner of item"); _transfer(froms[i], tos[i], tokenIds[i]); } } // view function function tokenURI(uint256 _tokenId) public view override returns (string memory) { require(_exists(_tokenId), "ERC721Metadata: URI query for nonexistent token"); return Items[_tokenId].uri; } function royaltyInfo(uint256 _tokenId, uint256 _salePrice) external view returns (address receiver, uint256 royaltyAmount) { if (_exists(_tokenId)) { Item memory _item = Items[_tokenId]; return (_item.royaltyAddress,(_salePrice * _item.royaltyPercentage) / 1000); } else { return (address(0), 0); } } function supportsInterface(bytes4 interfaceId) public view virtual override(ERC721) returns (bool) { if (interfaceId == _INTERFACE_ID_ERC2981) { return true; } return super.supportsInterface(interfaceId); } }
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":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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"string","name":"tokenUri","type":"string"},{"indexed":false,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"address","name":"royaltyAddress","type":"address"},{"indexed":false,"internalType":"uint96","name":"royaltyPercentage","type":"uint96"}],"name":"itemCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"},{"indexed":false,"internalType":"string[]","name":"tokenUris","type":"string[]"},{"indexed":false,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"address","name":"royaltyAddress","type":"address"},{"indexed":false,"internalType":"uint96","name":"royaltyPercentage","type":"uint96"}],"name":"itemsCreated","type":"event"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"Items","outputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"string","name":"uri","type":"string"},{"internalType":"address","name":"royaltyAddress","type":"address"},{"internalType":"uint96","name":"royaltyPercentage","type":"uint96"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"uri","type":"string"},{"internalType":"address","name":"creator","type":"address"},{"internalType":"address","name":"royaltyAddress","type":"address"},{"internalType":"uint96","name":"royaltyPercentage","type":"uint96"}],"name":"createItem","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string[]","name":"tokenUris","type":"string[]"},{"internalType":"address","name":"creator","type":"address"},{"internalType":"address","name":"royaltyAddress","type":"address"},{"internalType":"uint96","name":"royaltyPercentage","type":"uint96"}],"name":"createItems","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"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":"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":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint256","name":"_salePrice","type":"uint256"}],"name":"royaltyInfo","outputs":[{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"royaltyAmount","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":"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":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"setApprovalForItems","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"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":"froms","type":"address[]"},{"internalType":"address[]","name":"tos","type":"address[]"},{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"transfers","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b506040518060400160405280600b81526020017f467573696f6e204e4654730000000000000000000000000000000000000000008152506040518060400160405280600481526020017f464e465400000000000000000000000000000000000000000000000000000000815250816000908051906020019062000096929190620001a6565b508060019080519060200190620000af929190620001a6565b505050620000d2620000c6620000d860201b60201c565b620000e060201b60201c565b620002bb565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620001b49062000256565b90600052602060002090601f016020900481019282620001d8576000855562000224565b82601f10620001f357805160ff191683800117855562000224565b8280016001018555821562000224579182015b828111156200022357825182559160200191906001019062000206565b5b50905062000233919062000237565b5090565b5b808211156200025257600081600090555060010162000238565b5090565b600060028204905060018216806200026f57607f821691505b602082108114156200028657620002856200028c565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b613e5180620002cb6000396000f3fe608060405234801561001057600080fd5b50600436106101425760003560e01c806370a08231116100b8578063a22cb4651161007c578063a22cb465146103a0578063b88d4fde146103bc578063c87b56dd146103d8578063dd34844514610408578063e985e9c514610424578063f2fde38b1461045457610142565b806370a08231146102fa578063715018a61461032a578063741a360c146103345780638da5cb5b1461036457806395d89b411461038257610142565b8063217ab9d21161010a578063217ab9d21461021557806323b872dd146102315780632a55205a1461024d57806342842e0e1461027e5780636352211e1461029a57806363f909ac146102ca57610142565b806301ffc9a71461014757806306fdde0314610177578063081812fc14610195578063095ea7b3146101c557806317b47cc4146101e1575b600080fd5b610161600480360381019061015c9190612a5e565b610470565b60405161016e9190613103565b60405180910390f35b61017f6104d9565b60405161018c919061311e565b60405180910390f35b6101af60048036038101906101aa9190612b3b565b61056b565b6040516101bc9190612ff0565b60405180910390f35b6101df60048036038101906101da91906128f4565b6105b1565b005b6101fb60048036038101906101f69190612b3b565b6106c9565b60405161020c95949392919061337b565b60405180910390f35b61022f600480360381019061022a9190612934565b6107df565b005b61024b60048036038101906102469190612782565b610948565b005b61026760048036038101906102629190612b68565b6109a8565b604051610275929190613057565b60405180910390f35b61029860048036038101906102939190612782565b610baa565b005b6102b460048036038101906102af9190612b3b565b610bca565b6040516102c19190612ff0565b60405180910390f35b6102e460048036038101906102df91906129db565b610c7c565b6040516102f19190613080565b60405180910390f35b610314600480360381019061030f9190612715565b610f43565b6040516103219190613360565b60405180910390f35b610332610ffb565b005b61034e60048036038101906103499190612ab8565b61100f565b60405161035b9190613360565b60405180910390f35b61036c6111e9565b6040516103799190612ff0565b60405180910390f35b61038a611213565b604051610397919061311e565b60405180910390f35b6103ba60048036038101906103b591906128b4565b6112a5565b005b6103d660048036038101906103d191906127d5565b6112bb565b005b6103f260048036038101906103ed9190612b3b565b61131d565b6040516103ff919061311e565b60405180910390f35b610422600480360381019061041d9190612858565b61140d565b005b61043e60048036038101906104399190612742565b6114fc565b60405161044b9190613103565b60405180910390f35b61046e60048036038101906104699190612715565b611590565b005b6000632a55205a60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614156104c857600190506104d4565b6104d182611614565b90505b919050565b6060600080546104e8906137d8565b80601f0160208091040260200160405190810160405280929190818152602001828054610514906137d8565b80156105615780601f1061053657610100808354040283529160200191610561565b820191906000526020600020905b81548152906001019060200180831161054457829003601f168201915b5050505050905090565b6000610576826116f6565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006105bc82610bca565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561062d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161062490613300565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661064c611741565b73ffffffffffffffffffffffffffffffffffffffff16148061067b575061067a81610675611741565b6114fc565b5b6106ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b190613260565b60405180910390fd5b6106c48383611749565b505050565b60086020528060005260406000206000915090508060000154908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806002018054610718906137d8565b80601f0160208091040260200160405190810160405280929190818152602001828054610744906137d8565b80156107915780601f1061076657610100808354040283529160200191610791565b820191906000526020600020905b81548152906001019060200180831161077457829003601f168201915b5050505050908060030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060030160149054906101000a90046bffffffffffffffffffffffff16905085565b8151835114610823576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161081a906131c0565b60405180910390fd5b8151815114610867576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161085e906131c0565b60405180910390fd5b60005b8351811015610942576108973383838151811061088a57610889613911565b5b6020026020010151611802565b6108d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108cd906131e0565b60405180910390fd5b61092f8482815181106108ec576108eb613911565b5b602002602001015184838151811061090757610906613911565b5b602002602001015184848151811061092257610921613911565b5b6020026020010151611897565b808061093a9061383b565b91505061086a565b50505050565b610959610953611741565b82611802565b610998576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098f90613320565b60405180910390fd5b6109a3838383611897565b505050565b6000806109b484611afe565b15610b9b576000600860008681526020019081526020016000206040518060a0016040529081600082015481526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600282018054610a49906137d8565b80601f0160208091040260200160405190810160405280929190818152602001828054610a75906137d8565b8015610ac25780601f10610a9757610100808354040283529160200191610ac2565b820191906000526020600020905b815481529060010190602001808311610aa557829003601f168201915b505050505081526020016003820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016003820160149054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff166bffffffffffffffffffffffff1681525050905080606001516103e882608001516bffffffffffffffffffffffff1686610b87919061367c565b610b91919061364b565b9250925050610ba3565b600080915091505b9250929050565b610bc5838383604051806020016040528060008152506112bb565b505050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610c73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6a906132e0565b60405180910390fd5b80915050919050565b6060610c86611b6a565b6000855111610cca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc190613340565b60405180910390fd5b6000855167ffffffffffffffff811115610ce757610ce6613940565b5b604051908082528060200260200182016040528015610d155781602001602082028036833780820191505090505b50905060005b8651811015610ef757610d2e6007611be8565b6000610d3a6007611bfe565b9050610d468782611c0c565b6040518060a001604052808281526020018873ffffffffffffffffffffffffffffffffffffffff168152602001898481518110610d8657610d85613911565b5b602002602001015181526020018773ffffffffffffffffffffffffffffffffffffffff168152602001866bffffffffffffffffffffffff16815250600860008381526020019081526020016000206000820151816000015560208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040820151816002019080519060200190610e4192919061231c565b5060608201518160030160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060808201518160030160146101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff16021790555090505080838381518110610ed757610ed6613911565b5b602002602001018181525050508080610eef9061383b565b915050610d1b565b507f287338e49ba50a36742de644e6bd28823e9102c35df360b08e65f6df6690b7c78187878787604051610f2f9594939291906130a2565b60405180910390a180915050949350505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610fb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fab90613240565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611003611b6a565b61100d6000611c2a565b565b6000611019611b6a565b6110236007611be8565b600061102f6007611bfe565b905061103b8582611c0c565b6040518060a001604052808281526020018673ffffffffffffffffffffffffffffffffffffffff1681526020018781526020018573ffffffffffffffffffffffffffffffffffffffff168152602001846bffffffffffffffffffffffff16815250600860008381526020019081526020016000206000820151816000015560208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550604082015181600201908051906020019061111c92919061231c565b5060608201518160030160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060808201518160030160146101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055509050507f4c2070fe1703dea1ee75e5ae890d9f8cbf543b4286f35cce392b633136b211c781878787876040516111d59594939291906133d5565b60405180910390a180915050949350505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054611222906137d8565b80601f016020809104026020016040519081016040528092919081815260200182805461124e906137d8565b801561129b5780601f106112705761010080835404028352916020019161129b565b820191906000526020600020905b81548152906001019060200180831161127e57829003601f168201915b5050505050905090565b6112b76112b0611741565b8383611cf0565b5050565b6112cc6112c6611741565b83611802565b61130b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130290613320565b60405180910390fd5b61131784848484611e5d565b50505050565b606061132882611afe565b611367576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135e906132c0565b60405180910390fd5b600860008381526020019081526020016000206002018054611388906137d8565b80601f01602080910402602001604051908101604052809291908181526020018280546113b4906137d8565b80156114015780601f106113d657610100808354040283529160200191611401565b820191906000526020600020905b8154815290600101906020018083116113e457829003601f168201915b50505050509050919050565b6000815111611451576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611448906131c0565b60405180910390fd5b60005b81518110156114f7576114813383838151811061147457611473613911565b5b6020026020010151611802565b6114c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b7906131e0565b60405180910390fd5b6114e4838383815181106114d7576114d6613911565b5b6020026020010151611749565b80806114ef9061383b565b915050611454565b505050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611598611b6a565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611608576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ff90613160565b60405180910390fd5b61161181611c2a565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806116df57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806116ef57506116ee82611eb9565b5b9050919050565b6116ff81611afe565b61173e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611735906132e0565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166117bc83610bca565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60008061180e83610bca565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611850575061184f81856114fc565b5b8061188e57508373ffffffffffffffffffffffffffffffffffffffff166118768461056b565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166118b782610bca565b73ffffffffffffffffffffffffffffffffffffffff161461190d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190490613180565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561197d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197490613200565b60405180910390fd5b611988838383611f23565b611993600082611749565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546119e391906136d6565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611a3a91906135f5565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611af9838383611f28565b505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b611b72611741565b73ffffffffffffffffffffffffffffffffffffffff16611b906111e9565b73ffffffffffffffffffffffffffffffffffffffff1614611be6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bdd906132a0565b60405180910390fd5b565b6001816000016000828254019250508190555050565b600081600001549050919050565b611c26828260405180602001604052806000815250611f2d565b5050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611d5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5690613220565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611e509190613103565b60405180910390a3505050565b611e68848484611897565b611e7484848484611f88565b611eb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eaa90613140565b60405180910390fd5b50505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b505050565b505050565b611f37838361211f565b611f446000848484611f88565b611f83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7a90613140565b60405180910390fd5b505050565b6000611fa98473ffffffffffffffffffffffffffffffffffffffff166122f9565b15612112578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611fd2611741565b8786866040518563ffffffff1660e01b8152600401611ff4949392919061300b565b602060405180830381600087803b15801561200e57600080fd5b505af192505050801561203f57506040513d601f19601f8201168201806040525081019061203c9190612a8b565b60015b6120c2573d806000811461206f576040519150601f19603f3d011682016040523d82523d6000602084013e612074565b606091505b506000815114156120ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b190613140565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612117565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561218f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218690613280565b60405180910390fd5b61219881611afe565b156121d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121cf906131a0565b60405180910390fd5b6121e460008383611f23565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461223491906135f5565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46122f560008383611f28565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b828054612328906137d8565b90600052602060002090601f01602090048101928261234a5760008555612391565b82601f1061236357805160ff1916838001178555612391565b82800160010185558215612391579182015b82811115612390578251825591602001919060010190612375565b5b50905061239e91906123a2565b5090565b5b808211156123bb5760008160009055506001016123a3565b5090565b60006123d26123cd84613454565b61342f565b905080838252602082019050828560208602820111156123f5576123f4613974565b5b60005b85811015612425578161240b88826125b1565b8452602084019350602083019250506001810190506123f8565b5050509392505050565b600061244261243d84613480565b61342f565b9050808382526020820190508285602086028201111561246557612464613974565b5b60005b858110156124b357813567ffffffffffffffff81111561248b5761248a61396f565b5b80860161249889826126bd565b85526020850194506020840193505050600181019050612468565b5050509392505050565b60006124d06124cb846134ac565b61342f565b905080838252602082019050828560208602820111156124f3576124f2613974565b5b60005b85811015612523578161250988826126eb565b8452602084019350602083019250506001810190506124f6565b5050509392505050565b600061254061253b846134d8565b61342f565b90508281526020810184848401111561255c5761255b613979565b5b612567848285613796565b509392505050565b600061258261257d84613509565b61342f565b90508281526020810184848401111561259e5761259d613979565b5b6125a9848285613796565b509392505050565b6000813590506125c081613da8565b92915050565b600082601f8301126125db576125da61396f565b5b81356125eb8482602086016123bf565b91505092915050565b600082601f8301126126095761260861396f565b5b813561261984826020860161242f565b91505092915050565b600082601f8301126126375761263661396f565b5b81356126478482602086016124bd565b91505092915050565b60008135905061265f81613dbf565b92915050565b60008135905061267481613dd6565b92915050565b60008151905061268981613dd6565b92915050565b600082601f8301126126a4576126a361396f565b5b81356126b484826020860161252d565b91505092915050565b600082601f8301126126d2576126d161396f565b5b81356126e284826020860161256f565b91505092915050565b6000813590506126fa81613ded565b92915050565b60008135905061270f81613e04565b92915050565b60006020828403121561272b5761272a613983565b5b6000612739848285016125b1565b91505092915050565b6000806040838503121561275957612758613983565b5b6000612767858286016125b1565b9250506020612778858286016125b1565b9150509250929050565b60008060006060848603121561279b5761279a613983565b5b60006127a9868287016125b1565b93505060206127ba868287016125b1565b92505060406127cb868287016126eb565b9150509250925092565b600080600080608085870312156127ef576127ee613983565b5b60006127fd878288016125b1565b945050602061280e878288016125b1565b935050604061281f878288016126eb565b925050606085013567ffffffffffffffff8111156128405761283f61397e565b5b61284c8782880161268f565b91505092959194509250565b6000806040838503121561286f5761286e613983565b5b600061287d858286016125b1565b925050602083013567ffffffffffffffff81111561289e5761289d61397e565b5b6128aa85828601612622565b9150509250929050565b600080604083850312156128cb576128ca613983565b5b60006128d9858286016125b1565b92505060206128ea85828601612650565b9150509250929050565b6000806040838503121561290b5761290a613983565b5b6000612919858286016125b1565b925050602061292a858286016126eb565b9150509250929050565b60008060006060848603121561294d5761294c613983565b5b600084013567ffffffffffffffff81111561296b5761296a61397e565b5b612977868287016125c6565b935050602084013567ffffffffffffffff8111156129985761299761397e565b5b6129a4868287016125c6565b925050604084013567ffffffffffffffff8111156129c5576129c461397e565b5b6129d186828701612622565b9150509250925092565b600080600080608085870312156129f5576129f4613983565b5b600085013567ffffffffffffffff811115612a1357612a1261397e565b5b612a1f878288016125f4565b9450506020612a30878288016125b1565b9350506040612a41878288016125b1565b9250506060612a5287828801612700565b91505092959194509250565b600060208284031215612a7457612a73613983565b5b6000612a8284828501612665565b91505092915050565b600060208284031215612aa157612aa0613983565b5b6000612aaf8482850161267a565b91505092915050565b60008060008060808587031215612ad257612ad1613983565b5b600085013567ffffffffffffffff811115612af057612aef61397e565b5b612afc878288016126bd565b9450506020612b0d878288016125b1565b9350506040612b1e878288016125b1565b9250506060612b2f87828801612700565b91505092959194509250565b600060208284031215612b5157612b50613983565b5b6000612b5f848285016126eb565b91505092915050565b60008060408385031215612b7f57612b7e613983565b5b6000612b8d858286016126eb565b9250506020612b9e858286016126eb565b9150509250929050565b6000612bb48383612cfe565b905092915050565b6000612bc88383612fc3565b60208301905092915050565b612bdd8161370a565b82525050565b6000612bee8261355a565b612bf881856135a0565b935083602082028501612c0a8561353a565b8060005b85811015612c465784840389528151612c278582612ba8565b9450612c3283613586565b925060208a01995050600181019050612c0e565b50829750879550505050505092915050565b6000612c6382613565565b612c6d81856135b1565b9350612c788361354a565b8060005b83811015612ca9578151612c908882612bbc565b9750612c9b83613593565b925050600181019050612c7c565b5085935050505092915050565b612cbf8161371c565b82525050565b6000612cd082613570565b612cda81856135c2565b9350612cea8185602086016137a5565b612cf381613988565b840191505092915050565b6000612d098261357b565b612d1381856135d3565b9350612d238185602086016137a5565b612d2c81613988565b840191505092915050565b6000612d428261357b565b612d4c81856135e4565b9350612d5c8185602086016137a5565b612d6581613988565b840191505092915050565b6000612d7d6032836135e4565b9150612d8882613999565b604082019050919050565b6000612da06026836135e4565b9150612dab826139e8565b604082019050919050565b6000612dc36025836135e4565b9150612dce82613a37565b604082019050919050565b6000612de6601c836135e4565b9150612df182613a86565b602082019050919050565b6000612e09601b836135e4565b9150612e1482613aaf565b602082019050919050565b6000612e2c6019836135e4565b9150612e3782613ad8565b602082019050919050565b6000612e4f6024836135e4565b9150612e5a82613b01565b604082019050919050565b6000612e726019836135e4565b9150612e7d82613b50565b602082019050919050565b6000612e956029836135e4565b9150612ea082613b79565b604082019050919050565b6000612eb8603e836135e4565b9150612ec382613bc8565b604082019050919050565b6000612edb6020836135e4565b9150612ee682613c17565b602082019050919050565b6000612efe6020836135e4565b9150612f0982613c40565b602082019050919050565b6000612f21602f836135e4565b9150612f2c82613c69565b604082019050919050565b6000612f446018836135e4565b9150612f4f82613cb8565b602082019050919050565b6000612f676021836135e4565b9150612f7282613ce1565b604082019050919050565b6000612f8a602e836135e4565b9150612f9582613d30565b604082019050919050565b6000612fad601b836135e4565b9150612fb882613d7f565b602082019050919050565b612fcc81613774565b82525050565b612fdb81613774565b82525050565b612fea8161377e565b82525050565b60006020820190506130056000830184612bd4565b92915050565b60006080820190506130206000830187612bd4565b61302d6020830186612bd4565b61303a6040830185612fd2565b818103606083015261304c8184612cc5565b905095945050505050565b600060408201905061306c6000830185612bd4565b6130796020830184612fd2565b9392505050565b6000602082019050818103600083015261309a8184612c58565b905092915050565b600060a08201905081810360008301526130bc8188612c58565b905081810360208301526130d08187612be3565b90506130df6040830186612bd4565b6130ec6060830185612bd4565b6130f96080830184612fe1565b9695505050505050565b60006020820190506131186000830184612cb6565b92915050565b600060208201905081810360008301526131388184612d37565b905092915050565b6000602082019050818103600083015261315981612d70565b9050919050565b6000602082019050818103600083015261317981612d93565b9050919050565b6000602082019050818103600083015261319981612db6565b9050919050565b600060208201905081810360008301526131b981612dd9565b9050919050565b600060208201905081810360008301526131d981612dfc565b9050919050565b600060208201905081810360008301526131f981612e1f565b9050919050565b6000602082019050818103600083015261321981612e42565b9050919050565b6000602082019050818103600083015261323981612e65565b9050919050565b6000602082019050818103600083015261325981612e88565b9050919050565b6000602082019050818103600083015261327981612eab565b9050919050565b6000602082019050818103600083015261329981612ece565b9050919050565b600060208201905081810360008301526132b981612ef1565b9050919050565b600060208201905081810360008301526132d981612f14565b9050919050565b600060208201905081810360008301526132f981612f37565b9050919050565b6000602082019050818103600083015261331981612f5a565b9050919050565b6000602082019050818103600083015261333981612f7d565b9050919050565b6000602082019050818103600083015261335981612fa0565b9050919050565b60006020820190506133756000830184612fd2565b92915050565b600060a0820190506133906000830188612fd2565b61339d6020830187612bd4565b81810360408301526133af8186612d37565b90506133be6060830185612bd4565b6133cb6080830184612fe1565b9695505050505050565b600060a0820190506133ea6000830188612fd2565b81810360208301526133fc8187612d37565b905061340b6040830186612bd4565b6134186060830185612bd4565b6134256080830184612fe1565b9695505050505050565b600061343961344a565b9050613445828261380a565b919050565b6000604051905090565b600067ffffffffffffffff82111561346f5761346e613940565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561349b5761349a613940565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156134c7576134c6613940565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156134f3576134f2613940565b5b6134fc82613988565b9050602081019050919050565b600067ffffffffffffffff82111561352457613523613940565b5b61352d82613988565b9050602081019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600061360082613774565b915061360b83613774565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156136405761363f613884565b5b828201905092915050565b600061365682613774565b915061366183613774565b925082613671576136706138b3565b5b828204905092915050565b600061368782613774565b915061369283613774565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156136cb576136ca613884565b5b828202905092915050565b60006136e182613774565b91506136ec83613774565b9250828210156136ff576136fe613884565b5b828203905092915050565b600061371582613754565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006bffffffffffffffffffffffff82169050919050565b82818337600083830152505050565b60005b838110156137c35780820151818401526020810190506137a8565b838111156137d2576000848401525b50505050565b600060028204905060018216806137f057607f821691505b60208210811415613804576138036138e2565b5b50919050565b61381382613988565b810181811067ffffffffffffffff8211171561383257613831613940565b5b80604052505050565b600061384682613774565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561387957613878613884565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f54686520696e707574206461746120697320696e636f72726563740000000000600082015250565b7f596f7520617265206e6f74206f776e6572206f66206974656d00000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c0000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206e6f7220617070726f766564000000000000000000000000000000000000602082015250565b7f54686520746f6b656e2075726973206973206e6f742076616c69640000000000600082015250565b613db18161370a565b8114613dbc57600080fd5b50565b613dc88161371c565b8114613dd357600080fd5b50565b613ddf81613728565b8114613dea57600080fd5b50565b613df681613774565b8114613e0157600080fd5b50565b613e0d8161377e565b8114613e1857600080fd5b5056fea26469706673582212206edfe7098343e424ee3f105a89d41700a3c7282c58f25d87c34accd8116ab9d864736f6c63430008070033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101425760003560e01c806370a08231116100b8578063a22cb4651161007c578063a22cb465146103a0578063b88d4fde146103bc578063c87b56dd146103d8578063dd34844514610408578063e985e9c514610424578063f2fde38b1461045457610142565b806370a08231146102fa578063715018a61461032a578063741a360c146103345780638da5cb5b1461036457806395d89b411461038257610142565b8063217ab9d21161010a578063217ab9d21461021557806323b872dd146102315780632a55205a1461024d57806342842e0e1461027e5780636352211e1461029a57806363f909ac146102ca57610142565b806301ffc9a71461014757806306fdde0314610177578063081812fc14610195578063095ea7b3146101c557806317b47cc4146101e1575b600080fd5b610161600480360381019061015c9190612a5e565b610470565b60405161016e9190613103565b60405180910390f35b61017f6104d9565b60405161018c919061311e565b60405180910390f35b6101af60048036038101906101aa9190612b3b565b61056b565b6040516101bc9190612ff0565b60405180910390f35b6101df60048036038101906101da91906128f4565b6105b1565b005b6101fb60048036038101906101f69190612b3b565b6106c9565b60405161020c95949392919061337b565b60405180910390f35b61022f600480360381019061022a9190612934565b6107df565b005b61024b60048036038101906102469190612782565b610948565b005b61026760048036038101906102629190612b68565b6109a8565b604051610275929190613057565b60405180910390f35b61029860048036038101906102939190612782565b610baa565b005b6102b460048036038101906102af9190612b3b565b610bca565b6040516102c19190612ff0565b60405180910390f35b6102e460048036038101906102df91906129db565b610c7c565b6040516102f19190613080565b60405180910390f35b610314600480360381019061030f9190612715565b610f43565b6040516103219190613360565b60405180910390f35b610332610ffb565b005b61034e60048036038101906103499190612ab8565b61100f565b60405161035b9190613360565b60405180910390f35b61036c6111e9565b6040516103799190612ff0565b60405180910390f35b61038a611213565b604051610397919061311e565b60405180910390f35b6103ba60048036038101906103b591906128b4565b6112a5565b005b6103d660048036038101906103d191906127d5565b6112bb565b005b6103f260048036038101906103ed9190612b3b565b61131d565b6040516103ff919061311e565b60405180910390f35b610422600480360381019061041d9190612858565b61140d565b005b61043e60048036038101906104399190612742565b6114fc565b60405161044b9190613103565b60405180910390f35b61046e60048036038101906104699190612715565b611590565b005b6000632a55205a60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614156104c857600190506104d4565b6104d182611614565b90505b919050565b6060600080546104e8906137d8565b80601f0160208091040260200160405190810160405280929190818152602001828054610514906137d8565b80156105615780601f1061053657610100808354040283529160200191610561565b820191906000526020600020905b81548152906001019060200180831161054457829003601f168201915b5050505050905090565b6000610576826116f6565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006105bc82610bca565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561062d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161062490613300565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661064c611741565b73ffffffffffffffffffffffffffffffffffffffff16148061067b575061067a81610675611741565b6114fc565b5b6106ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b190613260565b60405180910390fd5b6106c48383611749565b505050565b60086020528060005260406000206000915090508060000154908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806002018054610718906137d8565b80601f0160208091040260200160405190810160405280929190818152602001828054610744906137d8565b80156107915780601f1061076657610100808354040283529160200191610791565b820191906000526020600020905b81548152906001019060200180831161077457829003601f168201915b5050505050908060030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060030160149054906101000a90046bffffffffffffffffffffffff16905085565b8151835114610823576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161081a906131c0565b60405180910390fd5b8151815114610867576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161085e906131c0565b60405180910390fd5b60005b8351811015610942576108973383838151811061088a57610889613911565b5b6020026020010151611802565b6108d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108cd906131e0565b60405180910390fd5b61092f8482815181106108ec576108eb613911565b5b602002602001015184838151811061090757610906613911565b5b602002602001015184848151811061092257610921613911565b5b6020026020010151611897565b808061093a9061383b565b91505061086a565b50505050565b610959610953611741565b82611802565b610998576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098f90613320565b60405180910390fd5b6109a3838383611897565b505050565b6000806109b484611afe565b15610b9b576000600860008681526020019081526020016000206040518060a0016040529081600082015481526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600282018054610a49906137d8565b80601f0160208091040260200160405190810160405280929190818152602001828054610a75906137d8565b8015610ac25780601f10610a9757610100808354040283529160200191610ac2565b820191906000526020600020905b815481529060010190602001808311610aa557829003601f168201915b505050505081526020016003820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016003820160149054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff166bffffffffffffffffffffffff1681525050905080606001516103e882608001516bffffffffffffffffffffffff1686610b87919061367c565b610b91919061364b565b9250925050610ba3565b600080915091505b9250929050565b610bc5838383604051806020016040528060008152506112bb565b505050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610c73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6a906132e0565b60405180910390fd5b80915050919050565b6060610c86611b6a565b6000855111610cca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc190613340565b60405180910390fd5b6000855167ffffffffffffffff811115610ce757610ce6613940565b5b604051908082528060200260200182016040528015610d155781602001602082028036833780820191505090505b50905060005b8651811015610ef757610d2e6007611be8565b6000610d3a6007611bfe565b9050610d468782611c0c565b6040518060a001604052808281526020018873ffffffffffffffffffffffffffffffffffffffff168152602001898481518110610d8657610d85613911565b5b602002602001015181526020018773ffffffffffffffffffffffffffffffffffffffff168152602001866bffffffffffffffffffffffff16815250600860008381526020019081526020016000206000820151816000015560208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040820151816002019080519060200190610e4192919061231c565b5060608201518160030160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060808201518160030160146101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff16021790555090505080838381518110610ed757610ed6613911565b5b602002602001018181525050508080610eef9061383b565b915050610d1b565b507f287338e49ba50a36742de644e6bd28823e9102c35df360b08e65f6df6690b7c78187878787604051610f2f9594939291906130a2565b60405180910390a180915050949350505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610fb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fab90613240565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611003611b6a565b61100d6000611c2a565b565b6000611019611b6a565b6110236007611be8565b600061102f6007611bfe565b905061103b8582611c0c565b6040518060a001604052808281526020018673ffffffffffffffffffffffffffffffffffffffff1681526020018781526020018573ffffffffffffffffffffffffffffffffffffffff168152602001846bffffffffffffffffffffffff16815250600860008381526020019081526020016000206000820151816000015560208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550604082015181600201908051906020019061111c92919061231c565b5060608201518160030160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060808201518160030160146101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055509050507f4c2070fe1703dea1ee75e5ae890d9f8cbf543b4286f35cce392b633136b211c781878787876040516111d59594939291906133d5565b60405180910390a180915050949350505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054611222906137d8565b80601f016020809104026020016040519081016040528092919081815260200182805461124e906137d8565b801561129b5780601f106112705761010080835404028352916020019161129b565b820191906000526020600020905b81548152906001019060200180831161127e57829003601f168201915b5050505050905090565b6112b76112b0611741565b8383611cf0565b5050565b6112cc6112c6611741565b83611802565b61130b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130290613320565b60405180910390fd5b61131784848484611e5d565b50505050565b606061132882611afe565b611367576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135e906132c0565b60405180910390fd5b600860008381526020019081526020016000206002018054611388906137d8565b80601f01602080910402602001604051908101604052809291908181526020018280546113b4906137d8565b80156114015780601f106113d657610100808354040283529160200191611401565b820191906000526020600020905b8154815290600101906020018083116113e457829003601f168201915b50505050509050919050565b6000815111611451576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611448906131c0565b60405180910390fd5b60005b81518110156114f7576114813383838151811061147457611473613911565b5b6020026020010151611802565b6114c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b7906131e0565b60405180910390fd5b6114e4838383815181106114d7576114d6613911565b5b6020026020010151611749565b80806114ef9061383b565b915050611454565b505050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611598611b6a565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611608576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ff90613160565b60405180910390fd5b61161181611c2a565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806116df57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806116ef57506116ee82611eb9565b5b9050919050565b6116ff81611afe565b61173e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611735906132e0565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166117bc83610bca565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60008061180e83610bca565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611850575061184f81856114fc565b5b8061188e57508373ffffffffffffffffffffffffffffffffffffffff166118768461056b565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166118b782610bca565b73ffffffffffffffffffffffffffffffffffffffff161461190d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190490613180565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561197d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197490613200565b60405180910390fd5b611988838383611f23565b611993600082611749565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546119e391906136d6565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611a3a91906135f5565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611af9838383611f28565b505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b611b72611741565b73ffffffffffffffffffffffffffffffffffffffff16611b906111e9565b73ffffffffffffffffffffffffffffffffffffffff1614611be6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bdd906132a0565b60405180910390fd5b565b6001816000016000828254019250508190555050565b600081600001549050919050565b611c26828260405180602001604052806000815250611f2d565b5050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611d5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5690613220565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611e509190613103565b60405180910390a3505050565b611e68848484611897565b611e7484848484611f88565b611eb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eaa90613140565b60405180910390fd5b50505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b505050565b505050565b611f37838361211f565b611f446000848484611f88565b611f83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7a90613140565b60405180910390fd5b505050565b6000611fa98473ffffffffffffffffffffffffffffffffffffffff166122f9565b15612112578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611fd2611741565b8786866040518563ffffffff1660e01b8152600401611ff4949392919061300b565b602060405180830381600087803b15801561200e57600080fd5b505af192505050801561203f57506040513d601f19601f8201168201806040525081019061203c9190612a8b565b60015b6120c2573d806000811461206f576040519150601f19603f3d011682016040523d82523d6000602084013e612074565b606091505b506000815114156120ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b190613140565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612117565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561218f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218690613280565b60405180910390fd5b61219881611afe565b156121d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121cf906131a0565b60405180910390fd5b6121e460008383611f23565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461223491906135f5565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46122f560008383611f28565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b828054612328906137d8565b90600052602060002090601f01602090048101928261234a5760008555612391565b82601f1061236357805160ff1916838001178555612391565b82800160010185558215612391579182015b82811115612390578251825591602001919060010190612375565b5b50905061239e91906123a2565b5090565b5b808211156123bb5760008160009055506001016123a3565b5090565b60006123d26123cd84613454565b61342f565b905080838252602082019050828560208602820111156123f5576123f4613974565b5b60005b85811015612425578161240b88826125b1565b8452602084019350602083019250506001810190506123f8565b5050509392505050565b600061244261243d84613480565b61342f565b9050808382526020820190508285602086028201111561246557612464613974565b5b60005b858110156124b357813567ffffffffffffffff81111561248b5761248a61396f565b5b80860161249889826126bd565b85526020850194506020840193505050600181019050612468565b5050509392505050565b60006124d06124cb846134ac565b61342f565b905080838252602082019050828560208602820111156124f3576124f2613974565b5b60005b85811015612523578161250988826126eb565b8452602084019350602083019250506001810190506124f6565b5050509392505050565b600061254061253b846134d8565b61342f565b90508281526020810184848401111561255c5761255b613979565b5b612567848285613796565b509392505050565b600061258261257d84613509565b61342f565b90508281526020810184848401111561259e5761259d613979565b5b6125a9848285613796565b509392505050565b6000813590506125c081613da8565b92915050565b600082601f8301126125db576125da61396f565b5b81356125eb8482602086016123bf565b91505092915050565b600082601f8301126126095761260861396f565b5b813561261984826020860161242f565b91505092915050565b600082601f8301126126375761263661396f565b5b81356126478482602086016124bd565b91505092915050565b60008135905061265f81613dbf565b92915050565b60008135905061267481613dd6565b92915050565b60008151905061268981613dd6565b92915050565b600082601f8301126126a4576126a361396f565b5b81356126b484826020860161252d565b91505092915050565b600082601f8301126126d2576126d161396f565b5b81356126e284826020860161256f565b91505092915050565b6000813590506126fa81613ded565b92915050565b60008135905061270f81613e04565b92915050565b60006020828403121561272b5761272a613983565b5b6000612739848285016125b1565b91505092915050565b6000806040838503121561275957612758613983565b5b6000612767858286016125b1565b9250506020612778858286016125b1565b9150509250929050565b60008060006060848603121561279b5761279a613983565b5b60006127a9868287016125b1565b93505060206127ba868287016125b1565b92505060406127cb868287016126eb565b9150509250925092565b600080600080608085870312156127ef576127ee613983565b5b60006127fd878288016125b1565b945050602061280e878288016125b1565b935050604061281f878288016126eb565b925050606085013567ffffffffffffffff8111156128405761283f61397e565b5b61284c8782880161268f565b91505092959194509250565b6000806040838503121561286f5761286e613983565b5b600061287d858286016125b1565b925050602083013567ffffffffffffffff81111561289e5761289d61397e565b5b6128aa85828601612622565b9150509250929050565b600080604083850312156128cb576128ca613983565b5b60006128d9858286016125b1565b92505060206128ea85828601612650565b9150509250929050565b6000806040838503121561290b5761290a613983565b5b6000612919858286016125b1565b925050602061292a858286016126eb565b9150509250929050565b60008060006060848603121561294d5761294c613983565b5b600084013567ffffffffffffffff81111561296b5761296a61397e565b5b612977868287016125c6565b935050602084013567ffffffffffffffff8111156129985761299761397e565b5b6129a4868287016125c6565b925050604084013567ffffffffffffffff8111156129c5576129c461397e565b5b6129d186828701612622565b9150509250925092565b600080600080608085870312156129f5576129f4613983565b5b600085013567ffffffffffffffff811115612a1357612a1261397e565b5b612a1f878288016125f4565b9450506020612a30878288016125b1565b9350506040612a41878288016125b1565b9250506060612a5287828801612700565b91505092959194509250565b600060208284031215612a7457612a73613983565b5b6000612a8284828501612665565b91505092915050565b600060208284031215612aa157612aa0613983565b5b6000612aaf8482850161267a565b91505092915050565b60008060008060808587031215612ad257612ad1613983565b5b600085013567ffffffffffffffff811115612af057612aef61397e565b5b612afc878288016126bd565b9450506020612b0d878288016125b1565b9350506040612b1e878288016125b1565b9250506060612b2f87828801612700565b91505092959194509250565b600060208284031215612b5157612b50613983565b5b6000612b5f848285016126eb565b91505092915050565b60008060408385031215612b7f57612b7e613983565b5b6000612b8d858286016126eb565b9250506020612b9e858286016126eb565b9150509250929050565b6000612bb48383612cfe565b905092915050565b6000612bc88383612fc3565b60208301905092915050565b612bdd8161370a565b82525050565b6000612bee8261355a565b612bf881856135a0565b935083602082028501612c0a8561353a565b8060005b85811015612c465784840389528151612c278582612ba8565b9450612c3283613586565b925060208a01995050600181019050612c0e565b50829750879550505050505092915050565b6000612c6382613565565b612c6d81856135b1565b9350612c788361354a565b8060005b83811015612ca9578151612c908882612bbc565b9750612c9b83613593565b925050600181019050612c7c565b5085935050505092915050565b612cbf8161371c565b82525050565b6000612cd082613570565b612cda81856135c2565b9350612cea8185602086016137a5565b612cf381613988565b840191505092915050565b6000612d098261357b565b612d1381856135d3565b9350612d238185602086016137a5565b612d2c81613988565b840191505092915050565b6000612d428261357b565b612d4c81856135e4565b9350612d5c8185602086016137a5565b612d6581613988565b840191505092915050565b6000612d7d6032836135e4565b9150612d8882613999565b604082019050919050565b6000612da06026836135e4565b9150612dab826139e8565b604082019050919050565b6000612dc36025836135e4565b9150612dce82613a37565b604082019050919050565b6000612de6601c836135e4565b9150612df182613a86565b602082019050919050565b6000612e09601b836135e4565b9150612e1482613aaf565b602082019050919050565b6000612e2c6019836135e4565b9150612e3782613ad8565b602082019050919050565b6000612e4f6024836135e4565b9150612e5a82613b01565b604082019050919050565b6000612e726019836135e4565b9150612e7d82613b50565b602082019050919050565b6000612e956029836135e4565b9150612ea082613b79565b604082019050919050565b6000612eb8603e836135e4565b9150612ec382613bc8565b604082019050919050565b6000612edb6020836135e4565b9150612ee682613c17565b602082019050919050565b6000612efe6020836135e4565b9150612f0982613c40565b602082019050919050565b6000612f21602f836135e4565b9150612f2c82613c69565b604082019050919050565b6000612f446018836135e4565b9150612f4f82613cb8565b602082019050919050565b6000612f676021836135e4565b9150612f7282613ce1565b604082019050919050565b6000612f8a602e836135e4565b9150612f9582613d30565b604082019050919050565b6000612fad601b836135e4565b9150612fb882613d7f565b602082019050919050565b612fcc81613774565b82525050565b612fdb81613774565b82525050565b612fea8161377e565b82525050565b60006020820190506130056000830184612bd4565b92915050565b60006080820190506130206000830187612bd4565b61302d6020830186612bd4565b61303a6040830185612fd2565b818103606083015261304c8184612cc5565b905095945050505050565b600060408201905061306c6000830185612bd4565b6130796020830184612fd2565b9392505050565b6000602082019050818103600083015261309a8184612c58565b905092915050565b600060a08201905081810360008301526130bc8188612c58565b905081810360208301526130d08187612be3565b90506130df6040830186612bd4565b6130ec6060830185612bd4565b6130f96080830184612fe1565b9695505050505050565b60006020820190506131186000830184612cb6565b92915050565b600060208201905081810360008301526131388184612d37565b905092915050565b6000602082019050818103600083015261315981612d70565b9050919050565b6000602082019050818103600083015261317981612d93565b9050919050565b6000602082019050818103600083015261319981612db6565b9050919050565b600060208201905081810360008301526131b981612dd9565b9050919050565b600060208201905081810360008301526131d981612dfc565b9050919050565b600060208201905081810360008301526131f981612e1f565b9050919050565b6000602082019050818103600083015261321981612e42565b9050919050565b6000602082019050818103600083015261323981612e65565b9050919050565b6000602082019050818103600083015261325981612e88565b9050919050565b6000602082019050818103600083015261327981612eab565b9050919050565b6000602082019050818103600083015261329981612ece565b9050919050565b600060208201905081810360008301526132b981612ef1565b9050919050565b600060208201905081810360008301526132d981612f14565b9050919050565b600060208201905081810360008301526132f981612f37565b9050919050565b6000602082019050818103600083015261331981612f5a565b9050919050565b6000602082019050818103600083015261333981612f7d565b9050919050565b6000602082019050818103600083015261335981612fa0565b9050919050565b60006020820190506133756000830184612fd2565b92915050565b600060a0820190506133906000830188612fd2565b61339d6020830187612bd4565b81810360408301526133af8186612d37565b90506133be6060830185612bd4565b6133cb6080830184612fe1565b9695505050505050565b600060a0820190506133ea6000830188612fd2565b81810360208301526133fc8187612d37565b905061340b6040830186612bd4565b6134186060830185612bd4565b6134256080830184612fe1565b9695505050505050565b600061343961344a565b9050613445828261380a565b919050565b6000604051905090565b600067ffffffffffffffff82111561346f5761346e613940565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561349b5761349a613940565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156134c7576134c6613940565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156134f3576134f2613940565b5b6134fc82613988565b9050602081019050919050565b600067ffffffffffffffff82111561352457613523613940565b5b61352d82613988565b9050602081019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600061360082613774565b915061360b83613774565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156136405761363f613884565b5b828201905092915050565b600061365682613774565b915061366183613774565b925082613671576136706138b3565b5b828204905092915050565b600061368782613774565b915061369283613774565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156136cb576136ca613884565b5b828202905092915050565b60006136e182613774565b91506136ec83613774565b9250828210156136ff576136fe613884565b5b828203905092915050565b600061371582613754565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006bffffffffffffffffffffffff82169050919050565b82818337600083830152505050565b60005b838110156137c35780820151818401526020810190506137a8565b838111156137d2576000848401525b50505050565b600060028204905060018216806137f057607f821691505b60208210811415613804576138036138e2565b5b50919050565b61381382613988565b810181811067ffffffffffffffff8211171561383257613831613940565b5b80604052505050565b600061384682613774565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561387957613878613884565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f54686520696e707574206461746120697320696e636f72726563740000000000600082015250565b7f596f7520617265206e6f74206f776e6572206f66206974656d00000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c0000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206e6f7220617070726f766564000000000000000000000000000000000000602082015250565b7f54686520746f6b656e2075726973206973206e6f742076616c69640000000000600082015250565b613db18161370a565b8114613dbc57600080fd5b50565b613dc88161371c565b8114613dd357600080fd5b50565b613ddf81613728565b8114613dea57600080fd5b50565b613df681613774565b8114613e0157600080fd5b50565b613e0d8161377e565b8114613e1857600080fd5b5056fea26469706673582212206edfe7098343e424ee3f105a89d41700a3c7282c58f25d87c34accd8116ab9d864736f6c63430008070033
Deployed Bytecode Sourcemap
38987:4036:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42764:256;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22626:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24139:171;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23656:417;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39480:37;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;;;;;;41626:481;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24839:336;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42370:386;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;25246:185;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22337:222;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40357:885;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22068:207;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38115:103;;;:::i;:::-;;39781:568;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37467:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22795:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24382:155;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25502:323;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42141:221;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41252:366;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24608:164;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38373:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42764:256;42857:4;39247:10;42898:21;;42883:36;;;:11;:36;;;;42879:80;;;42943:4;42936:11;;;;42879:80;42976:36;43000:11;42976:23;:36::i;:::-;42969:43;;42764:256;;;;:::o;22626:100::-;22680:13;22713:5;22706:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22626:100;:::o;24139:171::-;24215:7;24235:23;24250:7;24235:14;:23::i;:::-;24278:15;:24;24294:7;24278:24;;;;;;;;;;;;;;;;;;;;;24271:31;;24139:171;;;:::o;23656:417::-;23737:13;23753:23;23768:7;23753:14;:23::i;:::-;23737:39;;23801:5;23795:11;;:2;:11;;;;23787:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;23895:5;23879:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;23904:37;23921:5;23928:12;:10;:12::i;:::-;23904:16;:37::i;:::-;23879:62;23857:174;;;;;;;;;;;;:::i;:::-;;;;;;;;;24044:21;24053:2;24057:7;24044:8;:21::i;:::-;23726:347;23656:417;;:::o;39480:37::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;41626:481::-;41759:3;:10;41743:5;:12;:26;41735:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;41839:3;:10;41820:8;:15;:29;41812:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;41898:9;41894:206;41917:5;:12;41913:1;:16;41894:206;;;41958:43;41977:10;41989:8;41998:1;41989:11;;;;;;;;:::i;:::-;;;;;;;;41958:18;:43::i;:::-;41950:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;42048:40;42058:5;42064:1;42058:8;;;;;;;;:::i;:::-;;;;;;;;42068:3;42072:1;42068:6;;;;;;;;:::i;:::-;;;;;;;;42076:8;42085:1;42076:11;;;;;;;;:::i;:::-;;;;;;;;42048:9;:40::i;:::-;41931:3;;;;;:::i;:::-;;;;41894:206;;;;41626:481;;;:::o;24839:336::-;25034:41;25053:12;:10;:12::i;:::-;25067:7;25034:18;:41::i;:::-;25026:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;25139:28;25149:4;25155:2;25159:7;25139:9;:28::i;:::-;24839:336;;;:::o;42370:386::-;42452:16;42470:21;42513:17;42521:8;42513:7;:17::i;:::-;42509:240;;;42547:17;42567:5;:15;42573:8;42567:15;;;;;;;;;;;42547:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42605:5;:20;;;42667:4;42640:5;:23;;;42627:36;;:10;:36;;;;:::i;:::-;42626:45;;;;:::i;:::-;42597:75;;;;;;;42509:240;42731:1;42735;42715:22;;;;42370:386;;;;;;:::o;25246:185::-;25384:39;25401:4;25407:2;25411:7;25384:39;;;;;;;;;;;;:16;:39::i;:::-;25246:185;;;:::o;22337:222::-;22409:7;22429:13;22445:7;:16;22453:7;22445:16;;;;;;;;;;;;;;;;;;;;;22429:32;;22497:1;22480:19;;:5;:19;;;;22472:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;22546:5;22539:12;;;22337:222;;;:::o;40357:885::-;40498:16;37353:13;:11;:13::i;:::-;40554:1:::1;40535:9;:16;:20;40527:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;40600:25;40642:9;:16;40628:31;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40600:59;;40677:9;40672:442;40696:9;:16;40692:1;:20;40672:442;;;40734:21;:9;:19;:21::i;:::-;40770:17;40790:19;:9;:17;:19::i;:::-;40770:39;;40824:29;40834:7;40843:9;40824;:29::i;:::-;40889:173;;;;;;;;40912:9;40889:173;;;;40940:7;40889:173;;;;;;40966:9;40976:1;40966:12;;;;;;;;:::i;:::-;;;;;;;;40889:173;;;;40997:14;40889:173;;;;;;41030:17;40889:173;;;;::::0;40870:5:::1;:16;40876:9;40870:16;;;;;;;;;;;:192;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41093:9;41079:8;41088:1;41079:11;;;;;;;;:::i;:::-;;;;;;;:23;;;::::0;::::1;40719:395;40714:3;;;;;:::i;:::-;;;;40672:442;;;;41131:77;41144:8;41154:9;41165:7;41174:14;41190:17;41131:77;;;;;;;;;;:::i;:::-;;;;;;;;41226:8;41219:15;;;40357:885:::0;;;;;;:::o;22068:207::-;22140:7;22185:1;22168:19;;:5;:19;;;;22160:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;22251:9;:16;22261:5;22251:16;;;;;;;;;;;;;;;;22244:23;;22068:207;;;:::o;38115:103::-;37353:13;:11;:13::i;:::-;38180:30:::1;38207:1;38180:18;:30::i;:::-;38115:103::o:0;39781:568::-;39914:7;37353:13;:11;:13::i;:::-;39934:21:::1;:9;:19;:21::i;:::-;39966:17;39986:19;:9;:17;:19::i;:::-;39966:39;;40016:29;40026:7;40035:9;40016;:29::i;:::-;40083:140;;;;;;;;40102:9;40083:140;;;;40126:7;40083:140;;;;;;40148:3;40083:140;;;;40166:14;40083:140;;;;;;40195:17;40083:140;;;;::::0;40064:5:::1;:16;40070:9;40064:16;;;;;;;;;;;:159;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40241:71;40253:9;40264:3;40269:7;40278:14;40294:17;40241:71;;;;;;;;;;:::i;:::-;;;;;;;;40332:9;40325:16;;;39781:568:::0;;;;;;:::o;37467:87::-;37513:7;37540:6;;;;;;;;;;;37533:13;;37467:87;:::o;22795:104::-;22851:13;22884:7;22877:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22795:104;:::o;24382:155::-;24477:52;24496:12;:10;:12::i;:::-;24510:8;24520;24477:18;:52::i;:::-;24382:155;;:::o;25502:323::-;25676:41;25695:12;:10;:12::i;:::-;25709:7;25676:18;:41::i;:::-;25668:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;25779:38;25793:4;25799:2;25803:7;25812:4;25779:13;:38::i;:::-;25502:323;;;;:::o;42141:221::-;42207:13;42246:17;42254:8;42246:7;:17::i;:::-;42238:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;42335:5;:15;42341:8;42335:15;;;;;;;;;;;:19;;42328:26;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42141:221;;;:::o;41252:366::-;41363:1;41345:8;:15;:19;41337:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;41421:9;41417:194;41440:8;:15;41436:1;:19;41417:194;;;41484:43;41503:10;41515:8;41524:1;41515:11;;;;;;;;:::i;:::-;;;;;;;;41484:18;:43::i;:::-;41476:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;41574:25;41583:2;41587:8;41596:1;41587:11;;;;;;;;:::i;:::-;;;;;;;;41574:8;:25::i;:::-;41457:3;;;;;:::i;:::-;;;;41417:194;;;;41252:366;;:::o;24608:164::-;24705:4;24729:18;:25;24748:5;24729:25;;;;;;;;;;;;;;;:35;24755:8;24729:35;;;;;;;;;;;;;;;;;;;;;;;;;24722:42;;24608:164;;;;:::o;38373:201::-;37353:13;:11;:13::i;:::-;38482:1:::1;38462:22;;:8;:22;;;;38454:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;38538:28;38557:8;38538:18;:28::i;:::-;38373:201:::0;:::o;21699:305::-;21801:4;21853:25;21838:40;;;:11;:40;;;;:105;;;;21910:33;21895:48;;;:11;:48;;;;21838:105;:158;;;;21960:36;21984:11;21960:23;:36::i;:::-;21838:158;21818:178;;21699:305;;;:::o;32114:135::-;32196:16;32204:7;32196;:16::i;:::-;32188:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;32114:135;:::o;656:98::-;709:7;736:10;729:17;;656:98;:::o;31393:174::-;31495:2;31468:15;:24;31484:7;31468:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;31551:7;31547:2;31513:46;;31522:23;31537:7;31522:14;:23::i;:::-;31513:46;;;;;;;;;;;;31393:174;;:::o;27626:264::-;27719:4;27736:13;27752:23;27767:7;27752:14;:23::i;:::-;27736:39;;27805:5;27794:16;;:7;:16;;;:52;;;;27814:32;27831:5;27838:7;27814:16;:32::i;:::-;27794:52;:87;;;;27874:7;27850:31;;:20;27862:7;27850:11;:20::i;:::-;:31;;;27794:87;27786:96;;;27626:264;;;;:::o;30649:625::-;30808:4;30781:31;;:23;30796:7;30781:14;:23::i;:::-;:31;;;30773:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;30887:1;30873:16;;:2;:16;;;;30865:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;30943:39;30964:4;30970:2;30974:7;30943:20;:39::i;:::-;31047:29;31064:1;31068:7;31047:8;:29::i;:::-;31108:1;31089:9;:15;31099:4;31089:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;31137:1;31120:9;:13;31130:2;31120:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;31168:2;31149:7;:16;31157:7;31149:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;31207:7;31203:2;31188:27;;31197:4;31188:27;;;;;;;;;;;;31228:38;31248:4;31254:2;31258:7;31228:19;:38::i;:::-;30649:625;;;:::o;27332:127::-;27397:4;27449:1;27421:30;;:7;:16;27429:7;27421:16;;;;;;;;;;;;;;;;;;;;;:30;;;;27414:37;;27332:127;;;:::o;37632:132::-;37707:12;:10;:12::i;:::-;37696:23;;:7;:5;:7::i;:::-;:23;;;37688:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37632:132::o;35818:127::-;35925:1;35907:7;:14;;;:19;;;;;;;;;;;35818:127;:::o;35696:114::-;35761:7;35788;:14;;;35781:21;;35696:114;;;:::o;28232:110::-;28308:26;28318:2;28322:7;28308:26;;;;;;;;;;;;:9;:26::i;:::-;28232:110;;:::o;38734:191::-;38808:16;38827:6;;;;;;;;;;;38808:25;;38853:8;38844:6;;:17;;;;;;;;;;;;;;;;;;38908:8;38877:40;;38898:8;38877:40;;;;;;;;;;;;38797:128;38734:191;:::o;31710:315::-;31865:8;31856:17;;:5;:17;;;;31848:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;31952:8;31914:18;:25;31933:5;31914:25;;;;;;;;;;;;;;;:35;31940:8;31914:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;31998:8;31976:41;;31991:5;31976:41;;;32008:8;31976:41;;;;;;:::i;:::-;;;;;;;;31710:315;;;:::o;26706:313::-;26862:28;26872:4;26878:2;26882:7;26862:9;:28::i;:::-;26909:47;26932:4;26938:2;26942:7;26951:4;26909:22;:47::i;:::-;26901:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;26706:313;;;;:::o;20204:157::-;20289:4;20328:25;20313:40;;;:11;:40;;;;20306:47;;20204:157;;;:::o;34238:126::-;;;;:::o;34749:125::-;;;;:::o;28569:319::-;28698:18;28704:2;28708:7;28698:5;:18::i;:::-;28749:53;28780:1;28784:2;28788:7;28797:4;28749:22;:53::i;:::-;28727:153;;;;;;;;;;;;:::i;:::-;;;;;;;;;28569:319;;;:::o;32813:853::-;32967:4;32988:15;:2;:13;;;:15::i;:::-;32984:675;;;33040:2;33024:36;;;33061:12;:10;:12::i;:::-;33075:4;33081:7;33090:4;33024:71;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;33020:584;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33282:1;33265:6;:13;:18;33261:328;;;33308:60;;;;;;;;;;:::i;:::-;;;;;;;;33261:328;33539:6;33533:13;33524:6;33520:2;33516:15;33509:38;33020:584;33156:41;;;33146:51;;;:6;:51;;;;33139:58;;;;;32984:675;33643:4;33636:11;;32813:853;;;;;;;:::o;29224:439::-;29318:1;29304:16;;:2;:16;;;;29296:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;29377:16;29385:7;29377;:16::i;:::-;29376:17;29368:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;29439:45;29468:1;29472:2;29476:7;29439:20;:45::i;:::-;29514:1;29497:9;:13;29507:2;29497:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;29545:2;29526:7;:16;29534:7;29526:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;29590:7;29586:2;29565:33;;29582:1;29565:33;;;;;;;;;;;;29611:44;29639:1;29643:2;29647:7;29611:19;:44::i;:::-;29224:439;;:::o;11361:326::-;11421:4;11678:1;11656:7;:19;;;:23;11649:30;;11361:326;;;:::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;768:957::-;874:5;899:91;915:74;982:6;915:74;:::i;:::-;899:91;:::i;:::-;890:100;;1010:5;1039:6;1032:5;1025:21;1073:4;1066:5;1062:16;1055:23;;1099:6;1149:3;1141:4;1133:6;1129:17;1124:3;1120:27;1117:36;1114:143;;;1168:79;;:::i;:::-;1114:143;1281:1;1266:453;1291:6;1288:1;1285:13;1266:453;;;1373:3;1360:17;1409:18;1396:11;1393:35;1390:122;;;1431:79;;:::i;:::-;1390:122;1555:11;1547:6;1543:24;1593:47;1636:3;1624:10;1593:47;:::i;:::-;1588:3;1581:60;1670:4;1665:3;1661:14;1654:21;;1704:4;1699:3;1695:14;1688:21;;1326:393;;1313:1;1310;1306:9;1301:14;;1266:453;;;1270:14;880:845;;768:957;;;;;:::o;1748:722::-;1844:5;1869:81;1885:64;1942:6;1885:64;:::i;:::-;1869:81;:::i;:::-;1860:90;;1970:5;1999:6;1992:5;1985:21;2033:4;2026:5;2022:16;2015:23;;2059:6;2109:3;2101:4;2093:6;2089:17;2084:3;2080:27;2077:36;2074:143;;;2128:79;;:::i;:::-;2074:143;2241:1;2226:238;2251:6;2248:1;2245:13;2226:238;;;2319:3;2348:37;2381:3;2369:10;2348:37;:::i;:::-;2343:3;2336:50;2415:4;2410:3;2406:14;2399:21;;2449:4;2444:3;2440:14;2433:21;;2286:178;2273:1;2270;2266:9;2261:14;;2226:238;;;2230:14;1850:620;;1748:722;;;;;:::o;2476:410::-;2553:5;2578:65;2594:48;2635:6;2594:48;:::i;:::-;2578:65;:::i;:::-;2569:74;;2666:6;2659:5;2652:21;2704:4;2697:5;2693:16;2742:3;2733:6;2728:3;2724:16;2721:25;2718:112;;;2749:79;;:::i;:::-;2718:112;2839:41;2873:6;2868:3;2863;2839:41;:::i;:::-;2559:327;2476:410;;;;;:::o;2892:412::-;2970:5;2995:66;3011:49;3053:6;3011:49;:::i;:::-;2995:66;:::i;:::-;2986:75;;3084:6;3077:5;3070:21;3122:4;3115:5;3111:16;3160:3;3151:6;3146:3;3142:16;3139:25;3136:112;;;3167:79;;:::i;:::-;3136:112;3257:41;3291:6;3286:3;3281;3257:41;:::i;:::-;2976:328;2892:412;;;;;:::o;3310:139::-;3356:5;3394:6;3381:20;3372:29;;3410:33;3437:5;3410:33;:::i;:::-;3310:139;;;;:::o;3472:370::-;3543:5;3592:3;3585:4;3577:6;3573:17;3569:27;3559:122;;3600:79;;:::i;:::-;3559:122;3717:6;3704:20;3742:94;3832:3;3824:6;3817:4;3809:6;3805:17;3742:94;:::i;:::-;3733:103;;3549:293;3472:370;;;;:::o;3864:390::-;3945:5;3994:3;3987:4;3979:6;3975:17;3971:27;3961:122;;4002:79;;:::i;:::-;3961:122;4119:6;4106:20;4144:104;4244:3;4236:6;4229:4;4221:6;4217:17;4144:104;:::i;:::-;4135:113;;3951:303;3864:390;;;;:::o;4277:370::-;4348:5;4397:3;4390:4;4382:6;4378:17;4374:27;4364:122;;4405:79;;:::i;:::-;4364:122;4522:6;4509:20;4547:94;4637:3;4629:6;4622:4;4614:6;4610:17;4547:94;:::i;:::-;4538:103;;4354:293;4277:370;;;;:::o;4653:133::-;4696:5;4734:6;4721:20;4712:29;;4750:30;4774:5;4750:30;:::i;:::-;4653:133;;;;:::o;4792:137::-;4837:5;4875:6;4862:20;4853:29;;4891:32;4917:5;4891:32;:::i;:::-;4792:137;;;;:::o;4935:141::-;4991:5;5022:6;5016:13;5007:22;;5038:32;5064:5;5038:32;:::i;:::-;4935:141;;;;:::o;5095:338::-;5150:5;5199:3;5192:4;5184:6;5180:17;5176:27;5166:122;;5207:79;;:::i;:::-;5166:122;5324:6;5311:20;5349:78;5423:3;5415:6;5408:4;5400:6;5396:17;5349:78;:::i;:::-;5340:87;;5156:277;5095:338;;;;:::o;5453:340::-;5509:5;5558:3;5551:4;5543:6;5539:17;5535:27;5525:122;;5566:79;;:::i;:::-;5525:122;5683:6;5670:20;5708:79;5783:3;5775:6;5768:4;5760:6;5756:17;5708:79;:::i;:::-;5699:88;;5515:278;5453:340;;;;:::o;5799:139::-;5845:5;5883:6;5870:20;5861:29;;5899:33;5926:5;5899:33;:::i;:::-;5799:139;;;;:::o;5944:137::-;5989:5;6027:6;6014:20;6005:29;;6043:32;6069:5;6043:32;:::i;:::-;5944:137;;;;:::o;6087:329::-;6146:6;6195:2;6183:9;6174:7;6170:23;6166:32;6163:119;;;6201:79;;:::i;:::-;6163:119;6321:1;6346:53;6391:7;6382:6;6371:9;6367:22;6346:53;:::i;:::-;6336:63;;6292:117;6087:329;;;;:::o;6422:474::-;6490:6;6498;6547:2;6535:9;6526:7;6522:23;6518:32;6515:119;;;6553:79;;:::i;:::-;6515:119;6673:1;6698:53;6743:7;6734:6;6723:9;6719:22;6698:53;:::i;:::-;6688:63;;6644:117;6800:2;6826:53;6871:7;6862:6;6851:9;6847:22;6826:53;:::i;:::-;6816:63;;6771:118;6422:474;;;;;:::o;6902:619::-;6979:6;6987;6995;7044:2;7032:9;7023:7;7019:23;7015:32;7012:119;;;7050:79;;:::i;:::-;7012:119;7170:1;7195:53;7240:7;7231:6;7220:9;7216:22;7195:53;:::i;:::-;7185:63;;7141:117;7297:2;7323:53;7368:7;7359:6;7348:9;7344:22;7323:53;:::i;:::-;7313:63;;7268:118;7425:2;7451:53;7496:7;7487:6;7476:9;7472:22;7451:53;:::i;:::-;7441:63;;7396:118;6902:619;;;;;:::o;7527:943::-;7622:6;7630;7638;7646;7695:3;7683:9;7674:7;7670:23;7666:33;7663:120;;;7702:79;;:::i;:::-;7663:120;7822:1;7847:53;7892:7;7883:6;7872:9;7868:22;7847:53;:::i;:::-;7837:63;;7793:117;7949:2;7975:53;8020:7;8011:6;8000:9;7996:22;7975:53;:::i;:::-;7965:63;;7920:118;8077:2;8103:53;8148:7;8139:6;8128:9;8124:22;8103:53;:::i;:::-;8093:63;;8048:118;8233:2;8222:9;8218:18;8205:32;8264:18;8256:6;8253:30;8250:117;;;8286:79;;:::i;:::-;8250:117;8391:62;8445:7;8436:6;8425:9;8421:22;8391:62;:::i;:::-;8381:72;;8176:287;7527:943;;;;;;;:::o;8476:684::-;8569:6;8577;8626:2;8614:9;8605:7;8601:23;8597:32;8594:119;;;8632:79;;:::i;:::-;8594:119;8752:1;8777:53;8822:7;8813:6;8802:9;8798:22;8777:53;:::i;:::-;8767:63;;8723:117;8907:2;8896:9;8892:18;8879:32;8938:18;8930:6;8927:30;8924:117;;;8960:79;;:::i;:::-;8924:117;9065:78;9135:7;9126:6;9115:9;9111:22;9065:78;:::i;:::-;9055:88;;8850:303;8476:684;;;;;:::o;9166:468::-;9231:6;9239;9288:2;9276:9;9267:7;9263:23;9259:32;9256:119;;;9294:79;;:::i;:::-;9256:119;9414:1;9439:53;9484:7;9475:6;9464:9;9460:22;9439:53;:::i;:::-;9429:63;;9385:117;9541:2;9567:50;9609:7;9600:6;9589:9;9585:22;9567:50;:::i;:::-;9557:60;;9512:115;9166:468;;;;;:::o;9640:474::-;9708:6;9716;9765:2;9753:9;9744:7;9740:23;9736:32;9733:119;;;9771:79;;:::i;:::-;9733:119;9891:1;9916:53;9961:7;9952:6;9941:9;9937:22;9916:53;:::i;:::-;9906:63;;9862:117;10018:2;10044:53;10089:7;10080:6;10069:9;10065:22;10044:53;:::i;:::-;10034:63;;9989:118;9640:474;;;;;:::o;10120:1249::-;10272:6;10280;10288;10337:2;10325:9;10316:7;10312:23;10308:32;10305:119;;;10343:79;;:::i;:::-;10305:119;10491:1;10480:9;10476:17;10463:31;10521:18;10513:6;10510:30;10507:117;;;10543:79;;:::i;:::-;10507:117;10648:78;10718:7;10709:6;10698:9;10694:22;10648:78;:::i;:::-;10638:88;;10434:302;10803:2;10792:9;10788:18;10775:32;10834:18;10826:6;10823:30;10820:117;;;10856:79;;:::i;:::-;10820:117;10961:78;11031:7;11022:6;11011:9;11007:22;10961:78;:::i;:::-;10951:88;;10746:303;11116:2;11105:9;11101:18;11088:32;11147:18;11139:6;11136:30;11133:117;;;11169:79;;:::i;:::-;11133:117;11274:78;11344:7;11335:6;11324:9;11320:22;11274:78;:::i;:::-;11264:88;;11059:303;10120:1249;;;;;:::o;11375:993::-;11495:6;11503;11511;11519;11568:3;11556:9;11547:7;11543:23;11539:33;11536:120;;;11575:79;;:::i;:::-;11536:120;11723:1;11712:9;11708:17;11695:31;11753:18;11745:6;11742:30;11739:117;;;11775:79;;:::i;:::-;11739:117;11880:88;11960:7;11951:6;11940:9;11936:22;11880:88;:::i;:::-;11870:98;;11666:312;12017:2;12043:53;12088:7;12079:6;12068:9;12064:22;12043:53;:::i;:::-;12033:63;;11988:118;12145:2;12171:53;12216:7;12207:6;12196:9;12192:22;12171:53;:::i;:::-;12161:63;;12116:118;12273:2;12299:52;12343:7;12334:6;12323:9;12319:22;12299:52;:::i;:::-;12289:62;;12244:117;11375:993;;;;;;;:::o;12374:327::-;12432:6;12481:2;12469:9;12460:7;12456:23;12452:32;12449:119;;;12487:79;;:::i;:::-;12449:119;12607:1;12632:52;12676:7;12667:6;12656:9;12652:22;12632:52;:::i;:::-;12622:62;;12578:116;12374:327;;;;:::o;12707:349::-;12776:6;12825:2;12813:9;12804:7;12800:23;12796:32;12793:119;;;12831:79;;:::i;:::-;12793:119;12951:1;12976:63;13031:7;13022:6;13011:9;13007:22;12976:63;:::i;:::-;12966:73;;12922:127;12707:349;;;;:::o;13062:943::-;13157:6;13165;13173;13181;13230:3;13218:9;13209:7;13205:23;13201:33;13198:120;;;13237:79;;:::i;:::-;13198:120;13385:1;13374:9;13370:17;13357:31;13415:18;13407:6;13404:30;13401:117;;;13437:79;;:::i;:::-;13401:117;13542:63;13597:7;13588:6;13577:9;13573:22;13542:63;:::i;:::-;13532:73;;13328:287;13654:2;13680:53;13725:7;13716:6;13705:9;13701:22;13680:53;:::i;:::-;13670:63;;13625:118;13782:2;13808:53;13853:7;13844:6;13833:9;13829:22;13808:53;:::i;:::-;13798:63;;13753:118;13910:2;13936:52;13980:7;13971:6;13960:9;13956:22;13936:52;:::i;:::-;13926:62;;13881:117;13062:943;;;;;;;:::o;14011:329::-;14070:6;14119:2;14107:9;14098:7;14094:23;14090:32;14087:119;;;14125:79;;:::i;:::-;14087:119;14245:1;14270:53;14315:7;14306:6;14295:9;14291:22;14270:53;:::i;:::-;14260:63;;14216:117;14011:329;;;;:::o;14346:474::-;14414:6;14422;14471:2;14459:9;14450:7;14446:23;14442:32;14439:119;;;14477:79;;:::i;:::-;14439:119;14597:1;14622:53;14667:7;14658:6;14647:9;14643:22;14622:53;:::i;:::-;14612:63;;14568:117;14724:2;14750:53;14795:7;14786:6;14775:9;14771:22;14750:53;:::i;:::-;14740:63;;14695:118;14346:474;;;;;:::o;14826:196::-;14915:10;14950:66;15012:3;15004:6;14950:66;:::i;:::-;14936:80;;14826:196;;;;:::o;15028:179::-;15097:10;15118:46;15160:3;15152:6;15118:46;:::i;:::-;15196:4;15191:3;15187:14;15173:28;;15028:179;;;;:::o;15213:118::-;15300:24;15318:5;15300:24;:::i;:::-;15295:3;15288:37;15213:118;;:::o;15365:991::-;15504:3;15533:64;15591:5;15533:64;:::i;:::-;15613:96;15702:6;15697:3;15613:96;:::i;:::-;15606:103;;15735:3;15780:4;15772:6;15768:17;15763:3;15759:27;15810:66;15870:5;15810:66;:::i;:::-;15899:7;15930:1;15915:396;15940:6;15937:1;15934:13;15915:396;;;16011:9;16005:4;16001:20;15996:3;15989:33;16062:6;16056:13;16090:84;16169:4;16154:13;16090:84;:::i;:::-;16082:92;;16197:70;16260:6;16197:70;:::i;:::-;16187:80;;16296:4;16291:3;16287:14;16280:21;;15975:336;15962:1;15959;15955:9;15950:14;;15915:396;;;15919:14;16327:4;16320:11;;16347:3;16340:10;;15509:847;;;;;15365:991;;;;:::o;16392:732::-;16511:3;16540:54;16588:5;16540:54;:::i;:::-;16610:86;16689:6;16684:3;16610:86;:::i;:::-;16603:93;;16720:56;16770:5;16720:56;:::i;:::-;16799:7;16830:1;16815:284;16840:6;16837:1;16834:13;16815:284;;;16916:6;16910:13;16943:63;17002:3;16987:13;16943:63;:::i;:::-;16936:70;;17029:60;17082:6;17029:60;:::i;:::-;17019:70;;16875:224;16862:1;16859;16855:9;16850:14;;16815:284;;;16819:14;17115:3;17108:10;;16516:608;;;16392:732;;;;:::o;17130:109::-;17211:21;17226:5;17211:21;:::i;:::-;17206:3;17199:34;17130:109;;:::o;17245:360::-;17331:3;17359:38;17391:5;17359:38;:::i;:::-;17413:70;17476:6;17471:3;17413:70;:::i;:::-;17406:77;;17492:52;17537:6;17532:3;17525:4;17518:5;17514:16;17492:52;:::i;:::-;17569:29;17591:6;17569:29;:::i;:::-;17564:3;17560:39;17553:46;;17335:270;17245:360;;;;:::o;17611:344::-;17689:3;17717:39;17750:5;17717:39;:::i;:::-;17772:61;17826:6;17821:3;17772:61;:::i;:::-;17765:68;;17842:52;17887:6;17882:3;17875:4;17868:5;17864:16;17842:52;:::i;:::-;17919:29;17941:6;17919:29;:::i;:::-;17914:3;17910:39;17903:46;;17693:262;17611:344;;;;:::o;17961:364::-;18049:3;18077:39;18110:5;18077:39;:::i;:::-;18132:71;18196:6;18191:3;18132:71;:::i;:::-;18125:78;;18212:52;18257:6;18252:3;18245:4;18238:5;18234:16;18212:52;:::i;:::-;18289:29;18311:6;18289:29;:::i;:::-;18284:3;18280:39;18273:46;;18053:272;17961:364;;;;:::o;18331:366::-;18473:3;18494:67;18558:2;18553:3;18494:67;:::i;:::-;18487:74;;18570:93;18659:3;18570:93;:::i;:::-;18688:2;18683:3;18679:12;18672:19;;18331:366;;;:::o;18703:::-;18845:3;18866:67;18930:2;18925:3;18866:67;:::i;:::-;18859:74;;18942:93;19031:3;18942:93;:::i;:::-;19060:2;19055:3;19051:12;19044:19;;18703:366;;;:::o;19075:::-;19217:3;19238:67;19302:2;19297:3;19238:67;:::i;:::-;19231:74;;19314:93;19403:3;19314:93;:::i;:::-;19432:2;19427:3;19423:12;19416:19;;19075:366;;;:::o;19447:::-;19589:3;19610:67;19674:2;19669:3;19610:67;:::i;:::-;19603:74;;19686:93;19775:3;19686:93;:::i;:::-;19804:2;19799:3;19795:12;19788:19;;19447:366;;;:::o;19819:::-;19961:3;19982:67;20046:2;20041:3;19982:67;:::i;:::-;19975:74;;20058:93;20147:3;20058:93;:::i;:::-;20176:2;20171:3;20167:12;20160:19;;19819:366;;;:::o;20191:::-;20333:3;20354:67;20418:2;20413:3;20354:67;:::i;:::-;20347:74;;20430:93;20519:3;20430:93;:::i;:::-;20548:2;20543:3;20539:12;20532:19;;20191:366;;;:::o;20563:::-;20705:3;20726:67;20790:2;20785:3;20726:67;:::i;:::-;20719:74;;20802:93;20891:3;20802:93;:::i;:::-;20920:2;20915:3;20911:12;20904:19;;20563:366;;;:::o;20935:::-;21077:3;21098:67;21162:2;21157:3;21098:67;:::i;:::-;21091:74;;21174:93;21263:3;21174:93;:::i;:::-;21292:2;21287:3;21283:12;21276:19;;20935:366;;;:::o;21307:::-;21449:3;21470:67;21534:2;21529:3;21470:67;:::i;:::-;21463:74;;21546:93;21635:3;21546:93;:::i;:::-;21664:2;21659:3;21655:12;21648:19;;21307:366;;;:::o;21679:::-;21821:3;21842:67;21906:2;21901:3;21842:67;:::i;:::-;21835:74;;21918:93;22007:3;21918:93;:::i;:::-;22036:2;22031:3;22027:12;22020:19;;21679:366;;;:::o;22051:::-;22193:3;22214:67;22278:2;22273:3;22214:67;:::i;:::-;22207:74;;22290:93;22379:3;22290:93;:::i;:::-;22408:2;22403:3;22399:12;22392:19;;22051:366;;;:::o;22423:::-;22565:3;22586:67;22650:2;22645:3;22586:67;:::i;:::-;22579:74;;22662:93;22751:3;22662:93;:::i;:::-;22780:2;22775:3;22771:12;22764:19;;22423:366;;;:::o;22795:::-;22937:3;22958:67;23022:2;23017:3;22958:67;:::i;:::-;22951:74;;23034:93;23123:3;23034:93;:::i;:::-;23152:2;23147:3;23143:12;23136:19;;22795:366;;;:::o;23167:::-;23309:3;23330:67;23394:2;23389:3;23330:67;:::i;:::-;23323:74;;23406:93;23495:3;23406:93;:::i;:::-;23524:2;23519:3;23515:12;23508:19;;23167:366;;;:::o;23539:::-;23681:3;23702:67;23766:2;23761:3;23702:67;:::i;:::-;23695:74;;23778:93;23867:3;23778:93;:::i;:::-;23896:2;23891:3;23887:12;23880:19;;23539:366;;;:::o;23911:::-;24053:3;24074:67;24138:2;24133:3;24074:67;:::i;:::-;24067:74;;24150:93;24239:3;24150:93;:::i;:::-;24268:2;24263:3;24259:12;24252:19;;23911:366;;;:::o;24283:::-;24425:3;24446:67;24510:2;24505:3;24446:67;:::i;:::-;24439:74;;24522:93;24611:3;24522:93;:::i;:::-;24640:2;24635:3;24631:12;24624:19;;24283:366;;;:::o;24655:108::-;24732:24;24750:5;24732:24;:::i;:::-;24727:3;24720:37;24655:108;;:::o;24769:118::-;24856:24;24874:5;24856:24;:::i;:::-;24851:3;24844:37;24769:118;;:::o;24893:115::-;24978:23;24995:5;24978:23;:::i;:::-;24973:3;24966:36;24893:115;;:::o;25014:222::-;25107:4;25145:2;25134:9;25130:18;25122:26;;25158:71;25226:1;25215:9;25211:17;25202:6;25158:71;:::i;:::-;25014:222;;;;:::o;25242:640::-;25437:4;25475:3;25464:9;25460:19;25452:27;;25489:71;25557:1;25546:9;25542:17;25533:6;25489:71;:::i;:::-;25570:72;25638:2;25627:9;25623:18;25614:6;25570:72;:::i;:::-;25652;25720:2;25709:9;25705:18;25696:6;25652:72;:::i;:::-;25771:9;25765:4;25761:20;25756:2;25745:9;25741:18;25734:48;25799:76;25870:4;25861:6;25799:76;:::i;:::-;25791:84;;25242:640;;;;;;;:::o;25888:332::-;26009:4;26047:2;26036:9;26032:18;26024:26;;26060:71;26128:1;26117:9;26113:17;26104:6;26060:71;:::i;:::-;26141:72;26209:2;26198:9;26194:18;26185:6;26141:72;:::i;:::-;25888:332;;;;;:::o;26226:373::-;26369:4;26407:2;26396:9;26392:18;26384:26;;26456:9;26450:4;26446:20;26442:1;26431:9;26427:17;26420:47;26484:108;26587:4;26578:6;26484:108;:::i;:::-;26476:116;;26226:373;;;;:::o;26605:1002::-;26928:4;26966:3;26955:9;26951:19;26943:27;;27016:9;27010:4;27006:20;27002:1;26991:9;26987:17;26980:47;27044:108;27147:4;27138:6;27044:108;:::i;:::-;27036:116;;27199:9;27193:4;27189:20;27184:2;27173:9;27169:18;27162:48;27227:128;27350:4;27341:6;27227:128;:::i;:::-;27219:136;;27365:72;27433:2;27422:9;27418:18;27409:6;27365:72;:::i;:::-;27447;27515:2;27504:9;27500:18;27491:6;27447:72;:::i;:::-;27529:71;27595:3;27584:9;27580:19;27571:6;27529:71;:::i;:::-;26605:1002;;;;;;;;:::o;27613:210::-;27700:4;27738:2;27727:9;27723:18;27715:26;;27751:65;27813:1;27802:9;27798:17;27789:6;27751:65;:::i;:::-;27613:210;;;;:::o;27829:313::-;27942:4;27980:2;27969:9;27965:18;27957:26;;28029:9;28023:4;28019:20;28015:1;28004:9;28000:17;27993:47;28057:78;28130:4;28121:6;28057:78;:::i;:::-;28049:86;;27829:313;;;;:::o;28148:419::-;28314:4;28352:2;28341:9;28337:18;28329:26;;28401:9;28395:4;28391:20;28387:1;28376:9;28372:17;28365:47;28429:131;28555:4;28429:131;:::i;:::-;28421:139;;28148:419;;;:::o;28573:::-;28739:4;28777:2;28766:9;28762:18;28754:26;;28826:9;28820:4;28816:20;28812:1;28801:9;28797:17;28790:47;28854:131;28980:4;28854:131;:::i;:::-;28846:139;;28573:419;;;:::o;28998:::-;29164:4;29202:2;29191:9;29187:18;29179:26;;29251:9;29245:4;29241:20;29237:1;29226:9;29222:17;29215:47;29279:131;29405:4;29279:131;:::i;:::-;29271:139;;28998:419;;;:::o;29423:::-;29589:4;29627:2;29616:9;29612:18;29604:26;;29676:9;29670:4;29666:20;29662:1;29651:9;29647:17;29640:47;29704:131;29830:4;29704:131;:::i;:::-;29696:139;;29423:419;;;:::o;29848:::-;30014:4;30052:2;30041:9;30037:18;30029:26;;30101:9;30095:4;30091:20;30087:1;30076:9;30072:17;30065:47;30129:131;30255:4;30129:131;:::i;:::-;30121:139;;29848:419;;;:::o;30273:::-;30439:4;30477:2;30466:9;30462:18;30454:26;;30526:9;30520:4;30516:20;30512:1;30501:9;30497:17;30490:47;30554:131;30680:4;30554:131;:::i;:::-;30546:139;;30273:419;;;:::o;30698:::-;30864:4;30902:2;30891:9;30887:18;30879:26;;30951:9;30945:4;30941:20;30937:1;30926:9;30922:17;30915:47;30979:131;31105:4;30979:131;:::i;:::-;30971:139;;30698:419;;;:::o;31123:::-;31289:4;31327:2;31316:9;31312:18;31304:26;;31376:9;31370:4;31366:20;31362:1;31351:9;31347:17;31340:47;31404:131;31530:4;31404:131;:::i;:::-;31396:139;;31123:419;;;:::o;31548:::-;31714:4;31752:2;31741:9;31737:18;31729:26;;31801:9;31795:4;31791:20;31787:1;31776:9;31772:17;31765:47;31829:131;31955:4;31829:131;:::i;:::-;31821:139;;31548:419;;;:::o;31973:::-;32139:4;32177:2;32166:9;32162:18;32154:26;;32226:9;32220:4;32216:20;32212:1;32201:9;32197:17;32190:47;32254:131;32380:4;32254:131;:::i;:::-;32246:139;;31973:419;;;:::o;32398:::-;32564:4;32602:2;32591:9;32587:18;32579:26;;32651:9;32645:4;32641:20;32637:1;32626:9;32622:17;32615:47;32679:131;32805:4;32679:131;:::i;:::-;32671:139;;32398:419;;;:::o;32823:::-;32989:4;33027:2;33016:9;33012:18;33004:26;;33076:9;33070:4;33066:20;33062:1;33051:9;33047:17;33040:47;33104:131;33230:4;33104:131;:::i;:::-;33096:139;;32823:419;;;:::o;33248:::-;33414:4;33452:2;33441:9;33437:18;33429:26;;33501:9;33495:4;33491:20;33487:1;33476:9;33472:17;33465:47;33529:131;33655:4;33529:131;:::i;:::-;33521:139;;33248:419;;;:::o;33673:::-;33839:4;33877:2;33866:9;33862:18;33854:26;;33926:9;33920:4;33916:20;33912:1;33901:9;33897:17;33890:47;33954:131;34080:4;33954:131;:::i;:::-;33946:139;;33673:419;;;:::o;34098:::-;34264:4;34302:2;34291:9;34287:18;34279:26;;34351:9;34345:4;34341:20;34337:1;34326:9;34322:17;34315:47;34379:131;34505:4;34379:131;:::i;:::-;34371:139;;34098:419;;;:::o;34523:::-;34689:4;34727:2;34716:9;34712:18;34704:26;;34776:9;34770:4;34766:20;34762:1;34751:9;34747:17;34740:47;34804:131;34930:4;34804:131;:::i;:::-;34796:139;;34523:419;;;:::o;34948:::-;35114:4;35152:2;35141:9;35137:18;35129:26;;35201:9;35195:4;35191:20;35187:1;35176:9;35172:17;35165:47;35229:131;35355:4;35229:131;:::i;:::-;35221:139;;34948:419;;;:::o;35373:222::-;35466:4;35504:2;35493:9;35489:18;35481:26;;35517:71;35585:1;35574:9;35570:17;35561:6;35517:71;:::i;:::-;35373:222;;;;:::o;35601:751::-;35824:4;35862:3;35851:9;35847:19;35839:27;;35876:71;35944:1;35933:9;35929:17;35920:6;35876:71;:::i;:::-;35957:72;36025:2;36014:9;36010:18;36001:6;35957:72;:::i;:::-;36076:9;36070:4;36066:20;36061:2;36050:9;36046:18;36039:48;36104:78;36177:4;36168:6;36104:78;:::i;:::-;36096:86;;36192:72;36260:2;36249:9;36245:18;36236:6;36192:72;:::i;:::-;36274:71;36340:3;36329:9;36325:19;36316:6;36274:71;:::i;:::-;35601:751;;;;;;;;:::o;36358:::-;36581:4;36619:3;36608:9;36604:19;36596:27;;36633:71;36701:1;36690:9;36686:17;36677:6;36633:71;:::i;:::-;36751:9;36745:4;36741:20;36736:2;36725:9;36721:18;36714:48;36779:78;36852:4;36843:6;36779:78;:::i;:::-;36771:86;;36867:72;36935:2;36924:9;36920:18;36911:6;36867:72;:::i;:::-;36949;37017:2;37006:9;37002:18;36993:6;36949:72;:::i;:::-;37031:71;37097:3;37086:9;37082:19;37073:6;37031:71;:::i;:::-;36358:751;;;;;;;;:::o;37115:129::-;37149:6;37176:20;;:::i;:::-;37166:30;;37205:33;37233:4;37225:6;37205:33;:::i;:::-;37115:129;;;:::o;37250:75::-;37283:6;37316:2;37310:9;37300:19;;37250:75;:::o;37331:311::-;37408:4;37498:18;37490:6;37487:30;37484:56;;;37520:18;;:::i;:::-;37484:56;37570:4;37562:6;37558:17;37550:25;;37630:4;37624;37620:15;37612:23;;37331:311;;;:::o;37648:321::-;37735:4;37825:18;37817:6;37814:30;37811:56;;;37847:18;;:::i;:::-;37811:56;37897:4;37889:6;37885:17;37877:25;;37957:4;37951;37947:15;37939:23;;37648:321;;;:::o;37975:311::-;38052:4;38142:18;38134:6;38131:30;38128:56;;;38164:18;;:::i;:::-;38128:56;38214:4;38206:6;38202:17;38194:25;;38274:4;38268;38264:15;38256:23;;37975:311;;;:::o;38292:307::-;38353:4;38443:18;38435:6;38432:30;38429:56;;;38465:18;;:::i;:::-;38429:56;38503:29;38525:6;38503:29;:::i;:::-;38495:37;;38587:4;38581;38577:15;38569:23;;38292:307;;;:::o;38605:308::-;38667:4;38757:18;38749:6;38746:30;38743:56;;;38779:18;;:::i;:::-;38743:56;38817:29;38839:6;38817:29;:::i;:::-;38809:37;;38901:4;38895;38891:15;38883:23;;38605:308;;;:::o;38919:142::-;38996:4;39019:3;39011:11;;39049:4;39044:3;39040:14;39032:22;;38919:142;;;:::o;39067:132::-;39134:4;39157:3;39149:11;;39187:4;39182:3;39178:14;39170:22;;39067:132;;;:::o;39205:124::-;39282:6;39316:5;39310:12;39300:22;;39205:124;;;:::o;39335:114::-;39402:6;39436:5;39430:12;39420:22;;39335:114;;;:::o;39455:98::-;39506:6;39540:5;39534:12;39524:22;;39455:98;;;:::o;39559:99::-;39611:6;39645:5;39639:12;39629:22;;39559:99;;;:::o;39664:123::-;39744:4;39776;39771:3;39767:14;39759:22;;39664:123;;;:::o;39793:113::-;39863:4;39895;39890:3;39886:14;39878:22;;39793:113;;;:::o;39912:194::-;40021:11;40055:6;40050:3;40043:19;40095:4;40090:3;40086:14;40071:29;;39912:194;;;;:::o;40112:184::-;40211:11;40245:6;40240:3;40233:19;40285:4;40280:3;40276:14;40261:29;;40112:184;;;;:::o;40302:168::-;40385:11;40419:6;40414:3;40407:19;40459:4;40454:3;40450:14;40435:29;;40302:168;;;;:::o;40476:159::-;40550:11;40584:6;40579:3;40572:19;40624:4;40619:3;40615:14;40600:29;;40476:159;;;;:::o;40641:169::-;40725:11;40759:6;40754:3;40747:19;40799:4;40794:3;40790:14;40775:29;;40641:169;;;;:::o;40816:305::-;40856:3;40875:20;40893:1;40875:20;:::i;:::-;40870:25;;40909:20;40927:1;40909:20;:::i;:::-;40904:25;;41063:1;40995:66;40991:74;40988:1;40985:81;40982:107;;;41069:18;;:::i;:::-;40982:107;41113:1;41110;41106:9;41099:16;;40816:305;;;;:::o;41127:185::-;41167:1;41184:20;41202:1;41184:20;:::i;:::-;41179:25;;41218:20;41236:1;41218:20;:::i;:::-;41213:25;;41257:1;41247:35;;41262:18;;:::i;:::-;41247:35;41304:1;41301;41297:9;41292:14;;41127:185;;;;:::o;41318:348::-;41358:7;41381:20;41399:1;41381:20;:::i;:::-;41376:25;;41415:20;41433:1;41415:20;:::i;:::-;41410:25;;41603:1;41535:66;41531:74;41528:1;41525:81;41520:1;41513:9;41506:17;41502:105;41499:131;;;41610:18;;:::i;:::-;41499:131;41658:1;41655;41651:9;41640:20;;41318:348;;;;:::o;41672:191::-;41712:4;41732:20;41750:1;41732:20;:::i;:::-;41727:25;;41766:20;41784:1;41766:20;:::i;:::-;41761:25;;41805:1;41802;41799:8;41796:34;;;41810:18;;:::i;:::-;41796:34;41855:1;41852;41848:9;41840:17;;41672:191;;;;:::o;41869:96::-;41906:7;41935:24;41953:5;41935:24;:::i;:::-;41924:35;;41869:96;;;:::o;41971:90::-;42005:7;42048:5;42041:13;42034:21;42023:32;;41971:90;;;:::o;42067:149::-;42103:7;42143:66;42136:5;42132:78;42121:89;;42067:149;;;:::o;42222:126::-;42259:7;42299:42;42292:5;42288:54;42277:65;;42222:126;;;:::o;42354:77::-;42391:7;42420:5;42409:16;;42354:77;;;:::o;42437:109::-;42473:7;42513:26;42506:5;42502:38;42491:49;;42437:109;;;:::o;42552:154::-;42636:6;42631:3;42626;42613:30;42698:1;42689:6;42684:3;42680:16;42673:27;42552:154;;;:::o;42712:307::-;42780:1;42790:113;42804:6;42801:1;42798:13;42790:113;;;42889:1;42884:3;42880:11;42874:18;42870:1;42865:3;42861:11;42854:39;42826:2;42823:1;42819:10;42814:15;;42790:113;;;42921:6;42918:1;42915:13;42912:101;;;43001:1;42992:6;42987:3;42983:16;42976:27;42912:101;42761:258;42712:307;;;:::o;43025:320::-;43069:6;43106:1;43100:4;43096:12;43086:22;;43153:1;43147:4;43143:12;43174:18;43164:81;;43230:4;43222:6;43218:17;43208:27;;43164:81;43292:2;43284:6;43281:14;43261:18;43258:38;43255:84;;;43311:18;;:::i;:::-;43255:84;43076:269;43025:320;;;:::o;43351:281::-;43434:27;43456:4;43434:27;:::i;:::-;43426:6;43422:40;43564:6;43552:10;43549:22;43528:18;43516:10;43513:34;43510:62;43507:88;;;43575:18;;:::i;:::-;43507:88;43615:10;43611:2;43604:22;43394:238;43351:281;;:::o;43638:233::-;43677:3;43700:24;43718:5;43700:24;:::i;:::-;43691:33;;43746:66;43739:5;43736:77;43733:103;;;43816:18;;:::i;:::-;43733:103;43863:1;43856:5;43852:13;43845:20;;43638:233;;;:::o;43877:180::-;43925:77;43922:1;43915:88;44022:4;44019:1;44012:15;44046:4;44043:1;44036:15;44063:180;44111:77;44108:1;44101:88;44208:4;44205:1;44198:15;44232:4;44229:1;44222:15;44249:180;44297:77;44294:1;44287:88;44394:4;44391:1;44384:15;44418:4;44415:1;44408:15;44435:180;44483:77;44480:1;44473:88;44580:4;44577:1;44570:15;44604:4;44601:1;44594:15;44621:180;44669:77;44666:1;44659:88;44766:4;44763:1;44756:15;44790:4;44787:1;44780:15;44807:117;44916:1;44913;44906:12;44930:117;45039:1;45036;45029:12;45053:117;45162:1;45159;45152:12;45176:117;45285:1;45282;45275:12;45299:117;45408:1;45405;45398:12;45422:102;45463:6;45514:2;45510:7;45505:2;45498:5;45494:14;45490:28;45480:38;;45422:102;;;:::o;45530:237::-;45670:34;45666:1;45658:6;45654:14;45647:58;45739:20;45734:2;45726:6;45722:15;45715:45;45530:237;:::o;45773:225::-;45913:34;45909:1;45901:6;45897:14;45890:58;45982:8;45977:2;45969:6;45965:15;45958:33;45773:225;:::o;46004:224::-;46144:34;46140:1;46132:6;46128:14;46121:58;46213:7;46208:2;46200:6;46196:15;46189:32;46004:224;:::o;46234:178::-;46374:30;46370:1;46362:6;46358:14;46351:54;46234:178;:::o;46418:177::-;46558:29;46554:1;46546:6;46542:14;46535:53;46418:177;:::o;46601:175::-;46741:27;46737:1;46729:6;46725:14;46718:51;46601:175;:::o;46782:223::-;46922:34;46918:1;46910:6;46906:14;46899:58;46991:6;46986:2;46978:6;46974:15;46967:31;46782:223;:::o;47011:175::-;47151:27;47147:1;47139:6;47135:14;47128:51;47011:175;:::o;47192:228::-;47332:34;47328:1;47320:6;47316:14;47309:58;47401:11;47396:2;47388:6;47384:15;47377:36;47192:228;:::o;47426:249::-;47566:34;47562:1;47554:6;47550:14;47543:58;47635:32;47630:2;47622:6;47618:15;47611:57;47426:249;:::o;47681:182::-;47821:34;47817:1;47809:6;47805:14;47798:58;47681:182;:::o;47869:::-;48009:34;48005:1;47997:6;47993:14;47986:58;47869:182;:::o;48057:234::-;48197:34;48193:1;48185:6;48181:14;48174:58;48266:17;48261:2;48253:6;48249:15;48242:42;48057:234;:::o;48297:174::-;48437:26;48433:1;48425:6;48421:14;48414:50;48297:174;:::o;48477:220::-;48617:34;48613:1;48605:6;48601:14;48594:58;48686:3;48681:2;48673:6;48669:15;48662:28;48477:220;:::o;48703:233::-;48843:34;48839:1;48831:6;48827:14;48820:58;48912:16;48907:2;48899:6;48895:15;48888:41;48703:233;:::o;48942:177::-;49082:29;49078:1;49070:6;49066:14;49059:53;48942:177;:::o;49125:122::-;49198:24;49216:5;49198:24;:::i;:::-;49191:5;49188:35;49178:63;;49237:1;49234;49227:12;49178:63;49125:122;:::o;49253:116::-;49323:21;49338:5;49323:21;:::i;:::-;49316:5;49313:32;49303:60;;49359:1;49356;49349:12;49303:60;49253:116;:::o;49375:120::-;49447:23;49464:5;49447:23;:::i;:::-;49440:5;49437:34;49427:62;;49485:1;49482;49475:12;49427:62;49375:120;:::o;49501:122::-;49574:24;49592:5;49574:24;:::i;:::-;49567:5;49564:35;49554:63;;49613:1;49610;49603:12;49554:63;49501:122;:::o;49629:120::-;49701:23;49718:5;49701:23;:::i;:::-;49694:5;49691:34;49681:62;;49739:1;49736;49729:12;49681:62;49629:120;:::o
Swarm Source
ipfs://6edfe7098343e424ee3f105a89d41700a3c7282c58f25d87c34accd8116ab9d8
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.