ERC-721
Overview
Max Total Supply
3 wFTMOPR
Holders
2
Market
Fully Diluted Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract
Balance
0 wFTMOPRLoading...
Loading
Loading...
Loading
Loading...
Loading
Contract Name:
wrappedFantoms
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at ftmscan.com on 2021-12-06 */ /** *Submitted for verification at FtmScan.com on 2021-10-05 */ // SPDX-License-Identifier: GPL-3.0 // File: @openzeppelin/contracts/utils/introspection/IERC165.sol pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/utils/Strings.sol pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/contracts/utils/Address.sol pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/utils/Context.sol pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/token/ERC721/ERC721.sol pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { require(operator != _msgSender(), "ERC721: approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } function _exchangeMint(address to, uint tokenId) internal virtual { _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File: @openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol pragma solidity ^0.8.0; /** * @dev This implements an optional extension of {ERC721} defined in the EIP that adds * enumerability of all the token ids in the contract as well as all token ids owned by each * account. */ abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => mapping(uint256 => uint256)) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds"); return _ownedTokens[owner][index]; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds"); return _allTokens[index]; } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` cannot be the zero address. * - `to` cannot be the zero address. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array delete _allTokensIndex[tokenId]; _allTokens.pop(); } } // File: @openzeppelin/contracts/access/Ownable.sol pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _setOwner(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _setOwner(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: contracts/TBCNFT.sol pragma solidity ^0.8.0; contract wrappedFantoms is ERC721Enumerable, Ownable { IERC721 public fantomsContract; string private _baseTokenURI; event Wrapped(uint256 indexed tokenId); event Unwrapped(uint256 indexed tokenId); constructor(IERC721 _fantomsContract) ERC721("Wrapped Famtoms", "wFTMOPR") { fantomsContract = _fantomsContract; } function _baseURI() internal view virtual override returns (string memory) { return _baseTokenURI; } function setBaseTokenURI(string memory baseTokenURI) public onlyOwner { _baseTokenURI = baseTokenURI; } function wrap(uint256 tokenId) public { fantomsContract.transferFrom(_msgSender(), address(this), tokenId); _mint(_msgSender(), tokenId); emit Wrapped(tokenId); } function unwrap(uint256 tokenId) public { require( ownerOf(tokenId) == _msgSender(), "You do not own this Wrapped Fantom lolololololololololol!" ); fantomsContract.transferFrom(address(this), _msgSender(), tokenId); _burn(tokenId); emit Unwrapped(tokenId); } function tokenIdsForOwner(address owner) external view returns (uint256[] memory) { uint256 tokenCount = balanceOf(owner); uint256[] memory result = new uint256[](tokenCount); for (uint256 i = 0; i < tokenCount; i++) { result[i] = tokenOfOwnerByIndex(owner, i); } return result; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"contract IERC721","name":"_fantomsContract","type":"address"}],"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":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Unwrapped","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Wrapped","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"fantomsContract","outputs":[{"internalType":"contract IERC721","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseTokenURI","type":"string"}],"name":"setBaseTokenURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"tokenIdsForOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"unwrap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"wrap","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b5060405162003f6c38038062003f6c8339818101604052810190620000379190620002d4565b6040518060400160405280600f81526020017f577261707065642046616d746f6d7300000000000000000000000000000000008152506040518060400160405280600781526020017f7746544d4f5052000000000000000000000000000000000000000000000000008152508160009080519060200190620000bb9291906200020d565b508060019080519060200190620000d49291906200020d565b505050620000f7620000eb6200013f60201b60201c565b6200014760201b60201c565b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050620003d2565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200021b906200034e565b90600052602060002090601f0160209004810192826200023f57600085556200028b565b82601f106200025a57805160ff19168380011785556200028b565b828001600101855582156200028b579182015b828111156200028a5782518255916020019190600101906200026d565b5b5090506200029a91906200029e565b5090565b5b80821115620002b95760008160009055506001016200029f565b5090565b600081519050620002ce81620003b8565b92915050565b600060208284031215620002ed57620002ec620003b3565b5b6000620002fd84828501620002bd565b91505092915050565b600062000313826200032e565b9050919050565b6000620003278262000306565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600060028204905060018216806200036757607f821691505b602082108114156200037e576200037d62000384565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080fd5b620003c3816200031a565b8114620003cf57600080fd5b50565b613b8a80620003e26000396000f3fe608060405234801561001057600080fd5b50600436106101585760003560e01c80636352211e116100c3578063b88d4fde1161007c578063b88d4fde146103d9578063c87b56dd146103f5578063de0e9a3e14610425578063e985e9c514610441578063ea598cb014610471578063f2fde38b1461048d57610158565b80636352211e1461031757806370a0823114610347578063715018a6146103775780638da5cb5b1461038157806395d89b411461039f578063a22cb465146103bd57610158565b80632f745c59116101155780632f745c591461023157806330176e131461026157806342842e0e1461027d5780634ce6cb77146102995780634f6ccce7146102b757806350437dd1146102e757610158565b806301ffc9a71461015d57806306fdde031461018d578063081812fc146101ab578063095ea7b3146101db57806318160ddd146101f757806323b872dd14610215575b600080fd5b61017760048036038101906101729190612869565b6104a9565b6040516101849190612e1a565b60405180910390f35b610195610523565b6040516101a29190612e50565b60405180910390f35b6101c560048036038101906101c0919061290c565b6105b5565b6040516101d29190612d5a565b60405180910390f35b6101f560048036038101906101f09190612829565b61063a565b005b6101ff610752565b60405161020c91906130d2565b60405180910390f35b61022f600480360381019061022a9190612713565b61075f565b005b61024b60048036038101906102469190612829565b6107bf565b60405161025891906130d2565b60405180910390f35b61027b600480360381019061027691906128c3565b610864565b005b61029760048036038101906102929190612713565b6108fa565b005b6102a161091a565b6040516102ae9190612e35565b60405180910390f35b6102d160048036038101906102cc919061290c565b610940565b6040516102de91906130d2565b60405180910390f35b61030160048036038101906102fc91906126a6565b6109b1565b60405161030e9190612df8565b60405180910390f35b610331600480360381019061032c919061290c565b610a5f565b60405161033e9190612d5a565b60405180910390f35b610361600480360381019061035c91906126a6565b610b11565b60405161036e91906130d2565b60405180910390f35b61037f610bc9565b005b610389610c51565b6040516103969190612d5a565b60405180910390f35b6103a7610c7b565b6040516103b49190612e50565b60405180910390f35b6103d760048036038101906103d291906127e9565b610d0d565b005b6103f360048036038101906103ee9190612766565b610e8e565b005b61040f600480360381019061040a919061290c565b610ef0565b60405161041c9190612e50565b60405180910390f35b61043f600480360381019061043a919061290c565b610f97565b005b61045b600480360381019061045691906126d3565b6110e5565b6040516104689190612e1a565b60405180910390f35b61048b6004803603810190610486919061290c565b611179565b005b6104a760048036038101906104a291906126a6565b611252565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061051c575061051b8261134a565b5b9050919050565b60606000805461053290613397565b80601f016020809104026020016040519081016040528092919081815260200182805461055e90613397565b80156105ab5780601f10610580576101008083540402835291602001916105ab565b820191906000526020600020905b81548152906001019060200180831161058e57829003601f168201915b5050505050905090565b60006105c08261142c565b6105ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105f690612fd2565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061064582610a5f565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156106b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad90613052565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166106d5611498565b73ffffffffffffffffffffffffffffffffffffffff1614806107045750610703816106fe611498565b6110e5565b5b610743576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161073a90612f52565b60405180910390fd5b61074d83836114a0565b505050565b6000600880549050905090565b61077061076a611498565b82611559565b6107af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107a690613072565b60405180910390fd5b6107ba838383611637565b505050565b60006107ca83610b11565b821061080b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161080290612e72565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b61086c611498565b73ffffffffffffffffffffffffffffffffffffffff1661088a610c51565b73ffffffffffffffffffffffffffffffffffffffff16146108e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108d790612ff2565b60405180910390fd5b80600c90805190602001906108f69291906124ba565b5050565b61091583838360405180602001604052806000815250610e8e565b505050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600061094a610752565b821061098b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098290613092565b60405180910390fd5b6008828154811061099f5761099e613530565b5b90600052602060002001549050919050565b606060006109be83610b11565b905060008167ffffffffffffffff8111156109dc576109db61355f565b5b604051908082528060200260200182016040528015610a0a5781602001602082028036833780820191505090505b50905060005b82811015610a5457610a2285826107bf565b828281518110610a3557610a34613530565b5b6020026020010181815250508080610a4c906133fa565b915050610a10565b508092505050919050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610b08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aff90612f92565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610b82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7990612f72565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610bd1611498565b73ffffffffffffffffffffffffffffffffffffffff16610bef610c51565b73ffffffffffffffffffffffffffffffffffffffff1614610c45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3c90612ff2565b60405180910390fd5b610c4f6000611893565b565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054610c8a90613397565b80601f0160208091040260200160405190810160405280929190818152602001828054610cb690613397565b8015610d035780601f10610cd857610100808354040283529160200191610d03565b820191906000526020600020905b815481529060010190602001808311610ce657829003601f168201915b5050505050905090565b610d15611498565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610d83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7a90612f12565b60405180910390fd5b8060056000610d90611498565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16610e3d611498565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051610e829190612e1a565b60405180910390a35050565b610e9f610e99611498565b83611559565b610ede576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed590613072565b60405180910390fd5b610eea84848484611959565b50505050565b6060610efb8261142c565b610f3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3190613032565b60405180910390fd5b6000610f446119b5565b90506000815111610f645760405180602001604052806000815250610f8f565b80610f6e84611a47565b604051602001610f7f929190612d36565b6040516020818303038152906040525b915050919050565b610f9f611498565b73ffffffffffffffffffffffffffffffffffffffff16610fbe82610a5f565b73ffffffffffffffffffffffffffffffffffffffff1614611014576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100b906130b2565b60405180910390fd5b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3061105b611498565b846040518463ffffffff1660e01b815260040161107a93929190612d75565b600060405180830381600087803b15801561109457600080fd5b505af11580156110a8573d6000803e3d6000fd5b505050506110b581611ba8565b807fbeaa92c6354c6dcf375d2c514352b2c11bc865784722e5dd9b267e606eb5fc5f60405160405180910390a250565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd6111bf611498565b30846040518463ffffffff1660e01b81526004016111df93929190612d75565b600060405180830381600087803b1580156111f957600080fd5b505af115801561120d573d6000803e3d6000fd5b5050505061122261121c611498565b82611cb9565b807f5b8cd8f3a67af1dee11ad4321a05f79a76cc7ea517810fc56d6d96c1e60d368660405160405180910390a250565b61125a611498565b73ffffffffffffffffffffffffffffffffffffffff16611278610c51565b73ffffffffffffffffffffffffffffffffffffffff16146112ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c590612ff2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561133e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133590612eb2565b60405180910390fd5b61134781611893565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061141557507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611425575061142482611e87565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661151383610a5f565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006115648261142c565b6115a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159a90612f32565b60405180910390fd5b60006115ae83610a5f565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061161d57508373ffffffffffffffffffffffffffffffffffffffff16611605846105b5565b73ffffffffffffffffffffffffffffffffffffffff16145b8061162e575061162d81856110e5565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661165782610a5f565b73ffffffffffffffffffffffffffffffffffffffff16146116ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a490613012565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561171d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171490612ef2565b60405180910390fd5b611728838383611ef1565b6117336000826114a0565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546117839190613277565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546117da91906131f0565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611964848484611637565b61197084848484612005565b6119af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a690612e92565b60405180910390fd5b50505050565b6060600c80546119c490613397565b80601f01602080910402602001604051908101604052809291908181526020018280546119f090613397565b8015611a3d5780601f10611a1257610100808354040283529160200191611a3d565b820191906000526020600020905b815481529060010190602001808311611a2057829003601f168201915b5050505050905090565b60606000821415611a8f576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611ba3565b600082905060005b60008214611ac1578080611aaa906133fa565b915050600a82611aba9190613246565b9150611a97565b60008167ffffffffffffffff811115611add57611adc61355f565b5b6040519080825280601f01601f191660200182016040528015611b0f5781602001600182028036833780820191505090505b5090505b60008514611b9c57600182611b289190613277565b9150600a85611b379190613443565b6030611b4391906131f0565b60f81b818381518110611b5957611b58613530565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85611b959190613246565b9450611b13565b8093505050505b919050565b6000611bb382610a5f565b9050611bc181600084611ef1565b611bcc6000836114a0565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611c1c9190613277565b925050819055506002600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611d29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2090612fb2565b60405180910390fd5b611d328161142c565b15611d72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6990612ed2565b60405180910390fd5b611d7e60008383611ef1565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611dce91906131f0565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b611efc83838361219c565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611f3f57611f3a816121a1565b611f7e565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614611f7d57611f7c83826121ea565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611fc157611fbc81612357565b612000565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614611fff57611ffe8282612428565b5b5b505050565b60006120268473ffffffffffffffffffffffffffffffffffffffff166124a7565b1561218f578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261204f611498565b8786866040518563ffffffff1660e01b81526004016120719493929190612dac565b602060405180830381600087803b15801561208b57600080fd5b505af19250505080156120bc57506040513d601f19601f820116820180604052508101906120b99190612896565b60015b61213f573d80600081146120ec576040519150601f19603f3d011682016040523d82523d6000602084013e6120f1565b606091505b50600081511415612137576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212e90612e92565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612194565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016121f784610b11565b6122019190613277565b90506000600760008481526020019081526020016000205490508181146122e6576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905061236b9190613277565b905060006009600084815260200190815260200160002054905060006008838154811061239b5761239a613530565b5b9060005260206000200154905080600883815481106123bd576123bc613530565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548061240c5761240b613501565b5b6001900381819060005260206000200160009055905550505050565b600061243383610b11565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600080823b905060008111915050919050565b8280546124c690613397565b90600052602060002090601f0160209004810192826124e8576000855561252f565b82601f1061250157805160ff191683800117855561252f565b8280016001018555821561252f579182015b8281111561252e578251825591602001919060010190612513565b5b50905061253c9190612540565b5090565b5b80821115612559576000816000905550600101612541565b5090565b600061257061256b84613112565b6130ed565b90508281526020810184848401111561258c5761258b613593565b5b612597848285613355565b509392505050565b60006125b26125ad84613143565b6130ed565b9050828152602081018484840111156125ce576125cd613593565b5b6125d9848285613355565b509392505050565b6000813590506125f081613af8565b92915050565b60008135905061260581613b0f565b92915050565b60008135905061261a81613b26565b92915050565b60008151905061262f81613b26565b92915050565b600082601f83011261264a5761264961358e565b5b813561265a84826020860161255d565b91505092915050565b600082601f8301126126785761267761358e565b5b813561268884826020860161259f565b91505092915050565b6000813590506126a081613b3d565b92915050565b6000602082840312156126bc576126bb61359d565b5b60006126ca848285016125e1565b91505092915050565b600080604083850312156126ea576126e961359d565b5b60006126f8858286016125e1565b9250506020612709858286016125e1565b9150509250929050565b60008060006060848603121561272c5761272b61359d565b5b600061273a868287016125e1565b935050602061274b868287016125e1565b925050604061275c86828701612691565b9150509250925092565b600080600080608085870312156127805761277f61359d565b5b600061278e878288016125e1565b945050602061279f878288016125e1565b93505060406127b087828801612691565b925050606085013567ffffffffffffffff8111156127d1576127d0613598565b5b6127dd87828801612635565b91505092959194509250565b60008060408385031215612800576127ff61359d565b5b600061280e858286016125e1565b925050602061281f858286016125f6565b9150509250929050565b600080604083850312156128405761283f61359d565b5b600061284e858286016125e1565b925050602061285f85828601612691565b9150509250929050565b60006020828403121561287f5761287e61359d565b5b600061288d8482850161260b565b91505092915050565b6000602082840312156128ac576128ab61359d565b5b60006128ba84828501612620565b91505092915050565b6000602082840312156128d9576128d861359d565b5b600082013567ffffffffffffffff8111156128f7576128f6613598565b5b61290384828501612663565b91505092915050565b6000602082840312156129225761292161359d565b5b600061293084828501612691565b91505092915050565b60006129458383612d18565b60208301905092915050565b61295a816132ab565b82525050565b600061296b82613184565b61297581856131b2565b935061298083613174565b8060005b838110156129b15781516129988882612939565b97506129a3836131a5565b925050600181019050612984565b5085935050505092915050565b6129c7816132bd565b82525050565b60006129d88261318f565b6129e281856131c3565b93506129f2818560208601613364565b6129fb816135a2565b840191505092915050565b612a0f8161331f565b82525050565b6000612a208261319a565b612a2a81856131d4565b9350612a3a818560208601613364565b612a43816135a2565b840191505092915050565b6000612a598261319a565b612a6381856131e5565b9350612a73818560208601613364565b80840191505092915050565b6000612a8c602b836131d4565b9150612a97826135b3565b604082019050919050565b6000612aaf6032836131d4565b9150612aba82613602565b604082019050919050565b6000612ad26026836131d4565b9150612add82613651565b604082019050919050565b6000612af5601c836131d4565b9150612b00826136a0565b602082019050919050565b6000612b186024836131d4565b9150612b23826136c9565b604082019050919050565b6000612b3b6019836131d4565b9150612b4682613718565b602082019050919050565b6000612b5e602c836131d4565b9150612b6982613741565b604082019050919050565b6000612b816038836131d4565b9150612b8c82613790565b604082019050919050565b6000612ba4602a836131d4565b9150612baf826137df565b604082019050919050565b6000612bc76029836131d4565b9150612bd28261382e565b604082019050919050565b6000612bea6020836131d4565b9150612bf58261387d565b602082019050919050565b6000612c0d602c836131d4565b9150612c18826138a6565b604082019050919050565b6000612c306020836131d4565b9150612c3b826138f5565b602082019050919050565b6000612c536029836131d4565b9150612c5e8261391e565b604082019050919050565b6000612c76602f836131d4565b9150612c818261396d565b604082019050919050565b6000612c996021836131d4565b9150612ca4826139bc565b604082019050919050565b6000612cbc6031836131d4565b9150612cc782613a0b565b604082019050919050565b6000612cdf602c836131d4565b9150612cea82613a5a565b604082019050919050565b6000612d026039836131d4565b9150612d0d82613aa9565b604082019050919050565b612d2181613315565b82525050565b612d3081613315565b82525050565b6000612d428285612a4e565b9150612d4e8284612a4e565b91508190509392505050565b6000602082019050612d6f6000830184612951565b92915050565b6000606082019050612d8a6000830186612951565b612d976020830185612951565b612da46040830184612d27565b949350505050565b6000608082019050612dc16000830187612951565b612dce6020830186612951565b612ddb6040830185612d27565b8181036060830152612ded81846129cd565b905095945050505050565b60006020820190508181036000830152612e128184612960565b905092915050565b6000602082019050612e2f60008301846129be565b92915050565b6000602082019050612e4a6000830184612a06565b92915050565b60006020820190508181036000830152612e6a8184612a15565b905092915050565b60006020820190508181036000830152612e8b81612a7f565b9050919050565b60006020820190508181036000830152612eab81612aa2565b9050919050565b60006020820190508181036000830152612ecb81612ac5565b9050919050565b60006020820190508181036000830152612eeb81612ae8565b9050919050565b60006020820190508181036000830152612f0b81612b0b565b9050919050565b60006020820190508181036000830152612f2b81612b2e565b9050919050565b60006020820190508181036000830152612f4b81612b51565b9050919050565b60006020820190508181036000830152612f6b81612b74565b9050919050565b60006020820190508181036000830152612f8b81612b97565b9050919050565b60006020820190508181036000830152612fab81612bba565b9050919050565b60006020820190508181036000830152612fcb81612bdd565b9050919050565b60006020820190508181036000830152612feb81612c00565b9050919050565b6000602082019050818103600083015261300b81612c23565b9050919050565b6000602082019050818103600083015261302b81612c46565b9050919050565b6000602082019050818103600083015261304b81612c69565b9050919050565b6000602082019050818103600083015261306b81612c8c565b9050919050565b6000602082019050818103600083015261308b81612caf565b9050919050565b600060208201905081810360008301526130ab81612cd2565b9050919050565b600060208201905081810360008301526130cb81612cf5565b9050919050565b60006020820190506130e76000830184612d27565b92915050565b60006130f7613108565b905061310382826133c9565b919050565b6000604051905090565b600067ffffffffffffffff82111561312d5761312c61355f565b5b613136826135a2565b9050602081019050919050565b600067ffffffffffffffff82111561315e5761315d61355f565b5b613167826135a2565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006131fb82613315565b915061320683613315565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561323b5761323a613474565b5b828201905092915050565b600061325182613315565b915061325c83613315565b92508261326c5761326b6134a3565b5b828204905092915050565b600061328282613315565b915061328d83613315565b9250828210156132a05761329f613474565b5b828203905092915050565b60006132b6826132f5565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600061332a82613331565b9050919050565b600061333c82613343565b9050919050565b600061334e826132f5565b9050919050565b82818337600083830152505050565b60005b83811015613382578082015181840152602081019050613367565b83811115613391576000848401525b50505050565b600060028204905060018216806133af57607f821691505b602082108114156133c3576133c26134d2565b5b50919050565b6133d2826135a2565b810181811067ffffffffffffffff821117156133f1576133f061355f565b5b80604052505050565b600061340582613315565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561343857613437613474565b5b600182019050919050565b600061344e82613315565b915061345983613315565b925082613469576134686134a3565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f596f7520646f206e6f74206f776e207468697320577261707065642046616e7460008201527f6f6d206c6f6c6f6c6f6c6f6c6f6c6f6c6f6c6f6c6f6c6f6c2100000000000000602082015250565b613b01816132ab565b8114613b0c57600080fd5b50565b613b18816132bd565b8114613b2357600080fd5b50565b613b2f816132c9565b8114613b3a57600080fd5b50565b613b4681613315565b8114613b5157600080fd5b5056fea2646970667358221220284c222617ff3409e676aa5b69c2857141507abfe194724b998c2e13411e775364736f6c634300080700330000000000000000000000006e85f63449f090856ca5850d19611c50488bd7fd
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101585760003560e01c80636352211e116100c3578063b88d4fde1161007c578063b88d4fde146103d9578063c87b56dd146103f5578063de0e9a3e14610425578063e985e9c514610441578063ea598cb014610471578063f2fde38b1461048d57610158565b80636352211e1461031757806370a0823114610347578063715018a6146103775780638da5cb5b1461038157806395d89b411461039f578063a22cb465146103bd57610158565b80632f745c59116101155780632f745c591461023157806330176e131461026157806342842e0e1461027d5780634ce6cb77146102995780634f6ccce7146102b757806350437dd1146102e757610158565b806301ffc9a71461015d57806306fdde031461018d578063081812fc146101ab578063095ea7b3146101db57806318160ddd146101f757806323b872dd14610215575b600080fd5b61017760048036038101906101729190612869565b6104a9565b6040516101849190612e1a565b60405180910390f35b610195610523565b6040516101a29190612e50565b60405180910390f35b6101c560048036038101906101c0919061290c565b6105b5565b6040516101d29190612d5a565b60405180910390f35b6101f560048036038101906101f09190612829565b61063a565b005b6101ff610752565b60405161020c91906130d2565b60405180910390f35b61022f600480360381019061022a9190612713565b61075f565b005b61024b60048036038101906102469190612829565b6107bf565b60405161025891906130d2565b60405180910390f35b61027b600480360381019061027691906128c3565b610864565b005b61029760048036038101906102929190612713565b6108fa565b005b6102a161091a565b6040516102ae9190612e35565b60405180910390f35b6102d160048036038101906102cc919061290c565b610940565b6040516102de91906130d2565b60405180910390f35b61030160048036038101906102fc91906126a6565b6109b1565b60405161030e9190612df8565b60405180910390f35b610331600480360381019061032c919061290c565b610a5f565b60405161033e9190612d5a565b60405180910390f35b610361600480360381019061035c91906126a6565b610b11565b60405161036e91906130d2565b60405180910390f35b61037f610bc9565b005b610389610c51565b6040516103969190612d5a565b60405180910390f35b6103a7610c7b565b6040516103b49190612e50565b60405180910390f35b6103d760048036038101906103d291906127e9565b610d0d565b005b6103f360048036038101906103ee9190612766565b610e8e565b005b61040f600480360381019061040a919061290c565b610ef0565b60405161041c9190612e50565b60405180910390f35b61043f600480360381019061043a919061290c565b610f97565b005b61045b600480360381019061045691906126d3565b6110e5565b6040516104689190612e1a565b60405180910390f35b61048b6004803603810190610486919061290c565b611179565b005b6104a760048036038101906104a291906126a6565b611252565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061051c575061051b8261134a565b5b9050919050565b60606000805461053290613397565b80601f016020809104026020016040519081016040528092919081815260200182805461055e90613397565b80156105ab5780601f10610580576101008083540402835291602001916105ab565b820191906000526020600020905b81548152906001019060200180831161058e57829003601f168201915b5050505050905090565b60006105c08261142c565b6105ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105f690612fd2565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061064582610a5f565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156106b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad90613052565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166106d5611498565b73ffffffffffffffffffffffffffffffffffffffff1614806107045750610703816106fe611498565b6110e5565b5b610743576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161073a90612f52565b60405180910390fd5b61074d83836114a0565b505050565b6000600880549050905090565b61077061076a611498565b82611559565b6107af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107a690613072565b60405180910390fd5b6107ba838383611637565b505050565b60006107ca83610b11565b821061080b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161080290612e72565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b61086c611498565b73ffffffffffffffffffffffffffffffffffffffff1661088a610c51565b73ffffffffffffffffffffffffffffffffffffffff16146108e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108d790612ff2565b60405180910390fd5b80600c90805190602001906108f69291906124ba565b5050565b61091583838360405180602001604052806000815250610e8e565b505050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600061094a610752565b821061098b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098290613092565b60405180910390fd5b6008828154811061099f5761099e613530565b5b90600052602060002001549050919050565b606060006109be83610b11565b905060008167ffffffffffffffff8111156109dc576109db61355f565b5b604051908082528060200260200182016040528015610a0a5781602001602082028036833780820191505090505b50905060005b82811015610a5457610a2285826107bf565b828281518110610a3557610a34613530565b5b6020026020010181815250508080610a4c906133fa565b915050610a10565b508092505050919050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610b08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aff90612f92565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610b82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7990612f72565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610bd1611498565b73ffffffffffffffffffffffffffffffffffffffff16610bef610c51565b73ffffffffffffffffffffffffffffffffffffffff1614610c45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3c90612ff2565b60405180910390fd5b610c4f6000611893565b565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054610c8a90613397565b80601f0160208091040260200160405190810160405280929190818152602001828054610cb690613397565b8015610d035780601f10610cd857610100808354040283529160200191610d03565b820191906000526020600020905b815481529060010190602001808311610ce657829003601f168201915b5050505050905090565b610d15611498565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610d83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7a90612f12565b60405180910390fd5b8060056000610d90611498565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16610e3d611498565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051610e829190612e1a565b60405180910390a35050565b610e9f610e99611498565b83611559565b610ede576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed590613072565b60405180910390fd5b610eea84848484611959565b50505050565b6060610efb8261142c565b610f3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3190613032565b60405180910390fd5b6000610f446119b5565b90506000815111610f645760405180602001604052806000815250610f8f565b80610f6e84611a47565b604051602001610f7f929190612d36565b6040516020818303038152906040525b915050919050565b610f9f611498565b73ffffffffffffffffffffffffffffffffffffffff16610fbe82610a5f565b73ffffffffffffffffffffffffffffffffffffffff1614611014576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100b906130b2565b60405180910390fd5b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3061105b611498565b846040518463ffffffff1660e01b815260040161107a93929190612d75565b600060405180830381600087803b15801561109457600080fd5b505af11580156110a8573d6000803e3d6000fd5b505050506110b581611ba8565b807fbeaa92c6354c6dcf375d2c514352b2c11bc865784722e5dd9b267e606eb5fc5f60405160405180910390a250565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd6111bf611498565b30846040518463ffffffff1660e01b81526004016111df93929190612d75565b600060405180830381600087803b1580156111f957600080fd5b505af115801561120d573d6000803e3d6000fd5b5050505061122261121c611498565b82611cb9565b807f5b8cd8f3a67af1dee11ad4321a05f79a76cc7ea517810fc56d6d96c1e60d368660405160405180910390a250565b61125a611498565b73ffffffffffffffffffffffffffffffffffffffff16611278610c51565b73ffffffffffffffffffffffffffffffffffffffff16146112ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c590612ff2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561133e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133590612eb2565b60405180910390fd5b61134781611893565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061141557507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611425575061142482611e87565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661151383610a5f565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006115648261142c565b6115a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159a90612f32565b60405180910390fd5b60006115ae83610a5f565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061161d57508373ffffffffffffffffffffffffffffffffffffffff16611605846105b5565b73ffffffffffffffffffffffffffffffffffffffff16145b8061162e575061162d81856110e5565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661165782610a5f565b73ffffffffffffffffffffffffffffffffffffffff16146116ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a490613012565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561171d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171490612ef2565b60405180910390fd5b611728838383611ef1565b6117336000826114a0565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546117839190613277565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546117da91906131f0565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611964848484611637565b61197084848484612005565b6119af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a690612e92565b60405180910390fd5b50505050565b6060600c80546119c490613397565b80601f01602080910402602001604051908101604052809291908181526020018280546119f090613397565b8015611a3d5780601f10611a1257610100808354040283529160200191611a3d565b820191906000526020600020905b815481529060010190602001808311611a2057829003601f168201915b5050505050905090565b60606000821415611a8f576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611ba3565b600082905060005b60008214611ac1578080611aaa906133fa565b915050600a82611aba9190613246565b9150611a97565b60008167ffffffffffffffff811115611add57611adc61355f565b5b6040519080825280601f01601f191660200182016040528015611b0f5781602001600182028036833780820191505090505b5090505b60008514611b9c57600182611b289190613277565b9150600a85611b379190613443565b6030611b4391906131f0565b60f81b818381518110611b5957611b58613530565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85611b959190613246565b9450611b13565b8093505050505b919050565b6000611bb382610a5f565b9050611bc181600084611ef1565b611bcc6000836114a0565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611c1c9190613277565b925050819055506002600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611d29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2090612fb2565b60405180910390fd5b611d328161142c565b15611d72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6990612ed2565b60405180910390fd5b611d7e60008383611ef1565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611dce91906131f0565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b611efc83838361219c565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611f3f57611f3a816121a1565b611f7e565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614611f7d57611f7c83826121ea565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611fc157611fbc81612357565b612000565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614611fff57611ffe8282612428565b5b5b505050565b60006120268473ffffffffffffffffffffffffffffffffffffffff166124a7565b1561218f578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261204f611498565b8786866040518563ffffffff1660e01b81526004016120719493929190612dac565b602060405180830381600087803b15801561208b57600080fd5b505af19250505080156120bc57506040513d601f19601f820116820180604052508101906120b99190612896565b60015b61213f573d80600081146120ec576040519150601f19603f3d011682016040523d82523d6000602084013e6120f1565b606091505b50600081511415612137576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212e90612e92565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612194565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016121f784610b11565b6122019190613277565b90506000600760008481526020019081526020016000205490508181146122e6576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905061236b9190613277565b905060006009600084815260200190815260200160002054905060006008838154811061239b5761239a613530565b5b9060005260206000200154905080600883815481106123bd576123bc613530565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548061240c5761240b613501565b5b6001900381819060005260206000200160009055905550505050565b600061243383610b11565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600080823b905060008111915050919050565b8280546124c690613397565b90600052602060002090601f0160209004810192826124e8576000855561252f565b82601f1061250157805160ff191683800117855561252f565b8280016001018555821561252f579182015b8281111561252e578251825591602001919060010190612513565b5b50905061253c9190612540565b5090565b5b80821115612559576000816000905550600101612541565b5090565b600061257061256b84613112565b6130ed565b90508281526020810184848401111561258c5761258b613593565b5b612597848285613355565b509392505050565b60006125b26125ad84613143565b6130ed565b9050828152602081018484840111156125ce576125cd613593565b5b6125d9848285613355565b509392505050565b6000813590506125f081613af8565b92915050565b60008135905061260581613b0f565b92915050565b60008135905061261a81613b26565b92915050565b60008151905061262f81613b26565b92915050565b600082601f83011261264a5761264961358e565b5b813561265a84826020860161255d565b91505092915050565b600082601f8301126126785761267761358e565b5b813561268884826020860161259f565b91505092915050565b6000813590506126a081613b3d565b92915050565b6000602082840312156126bc576126bb61359d565b5b60006126ca848285016125e1565b91505092915050565b600080604083850312156126ea576126e961359d565b5b60006126f8858286016125e1565b9250506020612709858286016125e1565b9150509250929050565b60008060006060848603121561272c5761272b61359d565b5b600061273a868287016125e1565b935050602061274b868287016125e1565b925050604061275c86828701612691565b9150509250925092565b600080600080608085870312156127805761277f61359d565b5b600061278e878288016125e1565b945050602061279f878288016125e1565b93505060406127b087828801612691565b925050606085013567ffffffffffffffff8111156127d1576127d0613598565b5b6127dd87828801612635565b91505092959194509250565b60008060408385031215612800576127ff61359d565b5b600061280e858286016125e1565b925050602061281f858286016125f6565b9150509250929050565b600080604083850312156128405761283f61359d565b5b600061284e858286016125e1565b925050602061285f85828601612691565b9150509250929050565b60006020828403121561287f5761287e61359d565b5b600061288d8482850161260b565b91505092915050565b6000602082840312156128ac576128ab61359d565b5b60006128ba84828501612620565b91505092915050565b6000602082840312156128d9576128d861359d565b5b600082013567ffffffffffffffff8111156128f7576128f6613598565b5b61290384828501612663565b91505092915050565b6000602082840312156129225761292161359d565b5b600061293084828501612691565b91505092915050565b60006129458383612d18565b60208301905092915050565b61295a816132ab565b82525050565b600061296b82613184565b61297581856131b2565b935061298083613174565b8060005b838110156129b15781516129988882612939565b97506129a3836131a5565b925050600181019050612984565b5085935050505092915050565b6129c7816132bd565b82525050565b60006129d88261318f565b6129e281856131c3565b93506129f2818560208601613364565b6129fb816135a2565b840191505092915050565b612a0f8161331f565b82525050565b6000612a208261319a565b612a2a81856131d4565b9350612a3a818560208601613364565b612a43816135a2565b840191505092915050565b6000612a598261319a565b612a6381856131e5565b9350612a73818560208601613364565b80840191505092915050565b6000612a8c602b836131d4565b9150612a97826135b3565b604082019050919050565b6000612aaf6032836131d4565b9150612aba82613602565b604082019050919050565b6000612ad26026836131d4565b9150612add82613651565b604082019050919050565b6000612af5601c836131d4565b9150612b00826136a0565b602082019050919050565b6000612b186024836131d4565b9150612b23826136c9565b604082019050919050565b6000612b3b6019836131d4565b9150612b4682613718565b602082019050919050565b6000612b5e602c836131d4565b9150612b6982613741565b604082019050919050565b6000612b816038836131d4565b9150612b8c82613790565b604082019050919050565b6000612ba4602a836131d4565b9150612baf826137df565b604082019050919050565b6000612bc76029836131d4565b9150612bd28261382e565b604082019050919050565b6000612bea6020836131d4565b9150612bf58261387d565b602082019050919050565b6000612c0d602c836131d4565b9150612c18826138a6565b604082019050919050565b6000612c306020836131d4565b9150612c3b826138f5565b602082019050919050565b6000612c536029836131d4565b9150612c5e8261391e565b604082019050919050565b6000612c76602f836131d4565b9150612c818261396d565b604082019050919050565b6000612c996021836131d4565b9150612ca4826139bc565b604082019050919050565b6000612cbc6031836131d4565b9150612cc782613a0b565b604082019050919050565b6000612cdf602c836131d4565b9150612cea82613a5a565b604082019050919050565b6000612d026039836131d4565b9150612d0d82613aa9565b604082019050919050565b612d2181613315565b82525050565b612d3081613315565b82525050565b6000612d428285612a4e565b9150612d4e8284612a4e565b91508190509392505050565b6000602082019050612d6f6000830184612951565b92915050565b6000606082019050612d8a6000830186612951565b612d976020830185612951565b612da46040830184612d27565b949350505050565b6000608082019050612dc16000830187612951565b612dce6020830186612951565b612ddb6040830185612d27565b8181036060830152612ded81846129cd565b905095945050505050565b60006020820190508181036000830152612e128184612960565b905092915050565b6000602082019050612e2f60008301846129be565b92915050565b6000602082019050612e4a6000830184612a06565b92915050565b60006020820190508181036000830152612e6a8184612a15565b905092915050565b60006020820190508181036000830152612e8b81612a7f565b9050919050565b60006020820190508181036000830152612eab81612aa2565b9050919050565b60006020820190508181036000830152612ecb81612ac5565b9050919050565b60006020820190508181036000830152612eeb81612ae8565b9050919050565b60006020820190508181036000830152612f0b81612b0b565b9050919050565b60006020820190508181036000830152612f2b81612b2e565b9050919050565b60006020820190508181036000830152612f4b81612b51565b9050919050565b60006020820190508181036000830152612f6b81612b74565b9050919050565b60006020820190508181036000830152612f8b81612b97565b9050919050565b60006020820190508181036000830152612fab81612bba565b9050919050565b60006020820190508181036000830152612fcb81612bdd565b9050919050565b60006020820190508181036000830152612feb81612c00565b9050919050565b6000602082019050818103600083015261300b81612c23565b9050919050565b6000602082019050818103600083015261302b81612c46565b9050919050565b6000602082019050818103600083015261304b81612c69565b9050919050565b6000602082019050818103600083015261306b81612c8c565b9050919050565b6000602082019050818103600083015261308b81612caf565b9050919050565b600060208201905081810360008301526130ab81612cd2565b9050919050565b600060208201905081810360008301526130cb81612cf5565b9050919050565b60006020820190506130e76000830184612d27565b92915050565b60006130f7613108565b905061310382826133c9565b919050565b6000604051905090565b600067ffffffffffffffff82111561312d5761312c61355f565b5b613136826135a2565b9050602081019050919050565b600067ffffffffffffffff82111561315e5761315d61355f565b5b613167826135a2565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006131fb82613315565b915061320683613315565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561323b5761323a613474565b5b828201905092915050565b600061325182613315565b915061325c83613315565b92508261326c5761326b6134a3565b5b828204905092915050565b600061328282613315565b915061328d83613315565b9250828210156132a05761329f613474565b5b828203905092915050565b60006132b6826132f5565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600061332a82613331565b9050919050565b600061333c82613343565b9050919050565b600061334e826132f5565b9050919050565b82818337600083830152505050565b60005b83811015613382578082015181840152602081019050613367565b83811115613391576000848401525b50505050565b600060028204905060018216806133af57607f821691505b602082108114156133c3576133c26134d2565b5b50919050565b6133d2826135a2565b810181811067ffffffffffffffff821117156133f1576133f061355f565b5b80604052505050565b600061340582613315565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561343857613437613474565b5b600182019050919050565b600061344e82613315565b915061345983613315565b925082613469576134686134a3565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f596f7520646f206e6f74206f776e207468697320577261707065642046616e7460008201527f6f6d206c6f6c6f6c6f6c6f6c6f6c6f6c6f6c6f6c6f6c6f6c2100000000000000602082015250565b613b01816132ab565b8114613b0c57600080fd5b50565b613b18816132bd565b8114613b2357600080fd5b50565b613b2f816132c9565b8114613b3a57600080fd5b50565b613b4681613315565b8114613b5157600080fd5b5056fea2646970667358221220284c222617ff3409e676aa5b69c2857141507abfe194724b998c2e13411e775364736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000006e85f63449f090856ca5850d19611c50488bd7fd
-----Decoded View---------------
Arg [0] : _fantomsContract (address): 0x6e85F63449F090856ca5850D19611c50488bd7fD
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000006e85f63449f090856ca5850d19611c50488bd7fd
Deployed Bytecode Sourcemap
43466:1535:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34988:224;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22628:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24187:221;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23710:411;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35628:113;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25077:339;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35296:256;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43954:117;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25487:185;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43526:30;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35818:233;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44623:375;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22322:239;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22052:208;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42777:94;;;:::i;:::-;;42126:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22797:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24480:295;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25743:328;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22972:334;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44281;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24846:164;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44079:194;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43026:192;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34988:224;35090:4;35129:35;35114:50;;;:11;:50;;;;:90;;;;35168:36;35192:11;35168:23;:36::i;:::-;35114:90;35107:97;;34988:224;;;:::o;22628:100::-;22682:13;22715:5;22708:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22628:100;:::o;24187:221::-;24263:7;24291:16;24299:7;24291;:16::i;:::-;24283:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;24376:15;:24;24392:7;24376:24;;;;;;;;;;;;;;;;;;;;;24369:31;;24187:221;;;:::o;23710:411::-;23791:13;23807:23;23822:7;23807:14;:23::i;:::-;23791:39;;23855:5;23849:11;;:2;:11;;;;23841:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;23949:5;23933:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;23958:37;23975:5;23982:12;:10;:12::i;:::-;23958:16;:37::i;:::-;23933:62;23911:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;24092:21;24101:2;24105:7;24092:8;:21::i;:::-;23780:341;23710:411;;:::o;35628:113::-;35689:7;35716:10;:17;;;;35709:24;;35628:113;:::o;25077:339::-;25272:41;25291:12;:10;:12::i;:::-;25305:7;25272:18;:41::i;:::-;25264:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;25380:28;25390:4;25396:2;25400:7;25380:9;:28::i;:::-;25077:339;;;:::o;35296:256::-;35393:7;35429:23;35446:5;35429:16;:23::i;:::-;35421:5;:31;35413:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;35518:12;:19;35531:5;35518:19;;;;;;;;;;;;;;;:26;35538:5;35518:26;;;;;;;;;;;;35511:33;;35296:256;;;;:::o;43954:117::-;42357:12;:10;:12::i;:::-;42346:23;;:7;:5;:7::i;:::-;:23;;;42338:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44051:12:::1;44035:13;:28;;;;;;;;;;;;:::i;:::-;;43954:117:::0;:::o;25487:185::-;25625:39;25642:4;25648:2;25652:7;25625:39;;;;;;;;;;;;:16;:39::i;:::-;25487:185;;;:::o;43526:30::-;;;;;;;;;;;;;:::o;35818:233::-;35893:7;35929:30;:28;:30::i;:::-;35921:5;:38;35913:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;36026:10;36037:5;36026:17;;;;;;;;:::i;:::-;;;;;;;;;;36019:24;;35818:233;;;:::o;44623:375::-;44714:16;44748:18;44769:16;44779:5;44769:9;:16::i;:::-;44748:37;;44796:23;44836:10;44822:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44796:51;;44863:9;44858:109;44882:10;44878:1;:14;44858:109;;;44926:29;44946:5;44953:1;44926:19;:29::i;:::-;44914:6;44921:1;44914:9;;;;;;;;:::i;:::-;;;;;;;:41;;;;;44894:3;;;;;:::i;:::-;;;;44858:109;;;;44984:6;44977:13;;;;44623:375;;;:::o;22322:239::-;22394:7;22414:13;22430:7;:16;22438:7;22430:16;;;;;;;;;;;;;;;;;;;;;22414:32;;22482:1;22465:19;;:5;:19;;;;22457:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;22548:5;22541:12;;;22322:239;;;:::o;22052:208::-;22124:7;22169:1;22152:19;;:5;:19;;;;22144:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;22236:9;:16;22246:5;22236:16;;;;;;;;;;;;;;;;22229:23;;22052:208;;;:::o;42777:94::-;42357:12;:10;:12::i;:::-;42346:23;;:7;:5;:7::i;:::-;:23;;;42338:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42842:21:::1;42860:1;42842:9;:21::i;:::-;42777:94::o:0;42126:87::-;42172:7;42199:6;;;;;;;;;;;42192:13;;42126:87;:::o;22797:104::-;22853:13;22886:7;22879:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22797:104;:::o;24480:295::-;24595:12;:10;:12::i;:::-;24583:24;;:8;:24;;;;24575:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;24695:8;24650:18;:32;24669:12;:10;:12::i;:::-;24650:32;;;;;;;;;;;;;;;:42;24683:8;24650:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;24748:8;24719:48;;24734:12;:10;:12::i;:::-;24719:48;;;24758:8;24719:48;;;;;;:::i;:::-;;;;;;;;24480:295;;:::o;25743:328::-;25918:41;25937:12;:10;:12::i;:::-;25951:7;25918:18;:41::i;:::-;25910:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;26024:39;26038:4;26044:2;26048:7;26057:5;26024:13;:39::i;:::-;25743:328;;;;:::o;22972:334::-;23045:13;23079:16;23087:7;23079;:16::i;:::-;23071:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;23160:21;23184:10;:8;:10::i;:::-;23160:34;;23236:1;23218:7;23212:21;:25;:86;;;;;;;;;;;;;;;;;23264:7;23273:18;:7;:16;:18::i;:::-;23247:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;23212:86;23205:93;;;22972:334;;;:::o;44281:::-;44374:12;:10;:12::i;:::-;44354:32;;:16;44362:7;44354;:16::i;:::-;:32;;;44332:139;;;;;;;;;;;;:::i;:::-;;;;;;;;;44482:15;;;;;;;;;;;:28;;;44519:4;44526:12;:10;:12::i;:::-;44540:7;44482:66;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44559:14;44565:7;44559:5;:14::i;:::-;44599:7;44589:18;;;;;;;;;;44281:334;:::o;24846:164::-;24943:4;24967:18;:25;24986:5;24967:25;;;;;;;;;;;;;;;:35;24993:8;24967:35;;;;;;;;;;;;;;;;;;;;;;;;;24960:42;;24846:164;;;;:::o;44079:194::-;44128:15;;;;;;;;;;;:28;;;44157:12;:10;:12::i;:::-;44179:4;44186:7;44128:66;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44205:28;44211:12;:10;:12::i;:::-;44225:7;44205:5;:28::i;:::-;44257:7;44249:16;;;;;;;;;;44079:194;:::o;43026:192::-;42357:12;:10;:12::i;:::-;42346:23;;:7;:5;:7::i;:::-;:23;;;42338:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43135:1:::1;43115:22;;:8;:22;;;;43107:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;43191:19;43201:8;43191:9;:19::i;:::-;43026:192:::0;:::o;21683:305::-;21785:4;21837:25;21822:40;;;:11;:40;;;;:105;;;;21894:33;21879:48;;;:11;:48;;;;21822:105;:158;;;;21944:36;21968:11;21944:23;:36::i;:::-;21822:158;21802:178;;21683:305;;;:::o;27581:127::-;27646:4;27698:1;27670:30;;:7;:16;27678:7;27670:16;;;;;;;;;;;;;;;;;;;;;:30;;;;27663:37;;27581:127;;;:::o;20157:98::-;20210:7;20237:10;20230:17;;20157:98;:::o;31815:174::-;31917:2;31890:15;:24;31906:7;31890:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;31973:7;31969:2;31935:46;;31944:23;31959:7;31944:14;:23::i;:::-;31935:46;;;;;;;;;;;;31815:174;;:::o;27875:348::-;27968:4;27993:16;28001:7;27993;:16::i;:::-;27985:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;28069:13;28085:23;28100:7;28085:14;:23::i;:::-;28069:39;;28138:5;28127:16;;:7;:16;;;:51;;;;28171:7;28147:31;;:20;28159:7;28147:11;:20::i;:::-;:31;;;28127:51;:87;;;;28182:32;28199:5;28206:7;28182:16;:32::i;:::-;28127:87;28119:96;;;27875:348;;;;:::o;31119:578::-;31278:4;31251:31;;:23;31266:7;31251:14;:23::i;:::-;:31;;;31243:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;31361:1;31347:16;;:2;:16;;;;31339:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;31417:39;31438:4;31444:2;31448:7;31417:20;:39::i;:::-;31521:29;31538:1;31542:7;31521:8;:29::i;:::-;31582:1;31563:9;:15;31573:4;31563:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;31611:1;31594:9;:13;31604:2;31594:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;31642:2;31623:7;:16;31631:7;31623:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;31681:7;31677:2;31662:27;;31671:4;31662:27;;;;;;;;;;;;31119:578;;;:::o;43226:173::-;43282:16;43301:6;;;;;;;;;;;43282:25;;43327:8;43318:6;;:17;;;;;;;;;;;;;;;;;;43382:8;43351:40;;43372:8;43351:40;;;;;;;;;;;;43271:128;43226:173;:::o;26953:315::-;27110:28;27120:4;27126:2;27130:7;27110:9;:28::i;:::-;27157:48;27180:4;27186:2;27190:7;27199:5;27157:22;:48::i;:::-;27149:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;26953:315;;;;:::o;43832:114::-;43892:13;43925;43918:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43832:114;:::o;7989:723::-;8045:13;8275:1;8266:5;:10;8262:53;;;8293:10;;;;;;;;;;;;;;;;;;;;;8262:53;8325:12;8340:5;8325:20;;8356:14;8381:78;8396:1;8388:4;:9;8381:78;;8414:8;;;;;:::i;:::-;;;;8445:2;8437:10;;;;;:::i;:::-;;;8381:78;;;8469:19;8501:6;8491:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8469:39;;8519:154;8535:1;8526:5;:10;8519:154;;8563:1;8553:11;;;;;:::i;:::-;;;8630:2;8622:5;:10;;;;:::i;:::-;8609:2;:24;;;;:::i;:::-;8596:39;;8579:6;8586;8579:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;8659:2;8650:11;;;;;:::i;:::-;;;8519:154;;;8697:6;8683:21;;;;;7989:723;;;;:::o;30422:360::-;30482:13;30498:23;30513:7;30498:14;:23::i;:::-;30482:39;;30534:48;30555:5;30570:1;30574:7;30534:20;:48::i;:::-;30623:29;30640:1;30644:7;30623:8;:29::i;:::-;30685:1;30665:9;:16;30675:5;30665:16;;;;;;;;;;;;;;;;:21;;;;;;;:::i;:::-;;;;;;;;30704:7;:16;30712:7;30704:16;;;;;;;;;;;;30697:23;;;;;;;;;;;30766:7;30762:1;30738:36;;30747:5;30738:36;;;;;;;;;;;;30471:311;30422:360;:::o;29559:382::-;29653:1;29639:16;;:2;:16;;;;29631:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;29712:16;29720:7;29712;:16::i;:::-;29711:17;29703:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;29774:45;29803:1;29807:2;29811:7;29774:20;:45::i;:::-;29849:1;29832:9;:13;29842:2;29832:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;29880:2;29861:7;:16;29869:7;29861:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;29925:7;29921:2;29900:33;;29917:1;29900:33;;;;;;;;;;;;29559:382;;:::o;7514:157::-;7599:4;7638:25;7623:40;;;:11;:40;;;;7616:47;;7514:157;;;:::o;36664:589::-;36808:45;36835:4;36841:2;36845:7;36808:26;:45::i;:::-;36886:1;36870:18;;:4;:18;;;36866:187;;;36905:40;36937:7;36905:31;:40::i;:::-;36866:187;;;36975:2;36967:10;;:4;:10;;;36963:90;;36994:47;37027:4;37033:7;36994:32;:47::i;:::-;36963:90;36866:187;37081:1;37067:16;;:2;:16;;;37063:183;;;37100:45;37137:7;37100:36;:45::i;:::-;37063:183;;;37173:4;37167:10;;:2;:10;;;37163:83;;37194:40;37222:2;37226:7;37194:27;:40::i;:::-;37163:83;37063:183;36664:589;;;:::o;32554:799::-;32709:4;32730:15;:2;:13;;;:15::i;:::-;32726:620;;;32782:2;32766:36;;;32803:12;:10;:12::i;:::-;32817:4;32823:7;32832:5;32766:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;32762:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33025:1;33008:6;:13;:18;33004:272;;;33051:60;;;;;;;;;;:::i;:::-;;;;;;;;33004:272;33226:6;33220:13;33211:6;33207:2;33203:15;33196:38;32762:529;32899:41;;;32889:51;;;:6;:51;;;;32882:58;;;;;32726:620;33330:4;33323:11;;32554:799;;;;;;;:::o;33925:126::-;;;;:::o;37976:164::-;38080:10;:17;;;;38053:15;:24;38069:7;38053:24;;;;;;;;;;;:44;;;;38108:10;38124:7;38108:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37976:164;:::o;38767:988::-;39033:22;39083:1;39058:22;39075:4;39058:16;:22::i;:::-;:26;;;;:::i;:::-;39033:51;;39095:18;39116:17;:26;39134:7;39116:26;;;;;;;;;;;;39095:47;;39263:14;39249:10;:28;39245:328;;39294:19;39316:12;:18;39329:4;39316:18;;;;;;;;;;;;;;;:34;39335:14;39316:34;;;;;;;;;;;;39294:56;;39400:11;39367:12;:18;39380:4;39367:18;;;;;;;;;;;;;;;:30;39386:10;39367:30;;;;;;;;;;;:44;;;;39517:10;39484:17;:30;39502:11;39484:30;;;;;;;;;;;:43;;;;39279:294;39245:328;39669:17;:26;39687:7;39669:26;;;;;;;;;;;39662:33;;;39713:12;:18;39726:4;39713:18;;;;;;;;;;;;;;;:34;39732:14;39713:34;;;;;;;;;;;39706:41;;;38848:907;;38767:988;;:::o;40050:1079::-;40303:22;40348:1;40328:10;:17;;;;:21;;;;:::i;:::-;40303:46;;40360:18;40381:15;:24;40397:7;40381:24;;;;;;;;;;;;40360:45;;40732:19;40754:10;40765:14;40754:26;;;;;;;;:::i;:::-;;;;;;;;;;40732:48;;40818:11;40793:10;40804;40793:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;40929:10;40898:15;:28;40914:11;40898:28;;;;;;;;;;;:41;;;;41070:15;:24;41086:7;41070:24;;;;;;;;;;;41063:31;;;41105:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;40121:1008;;;40050:1079;:::o;37554:221::-;37639:14;37656:20;37673:2;37656:16;:20::i;:::-;37639:37;;37714:7;37687:12;:16;37700:2;37687:16;;;;;;;;;;;;;;;:24;37704:6;37687:24;;;;;;;;;;;:34;;;;37761:6;37732:17;:26;37750:7;37732:26;;;;;;;;;;;:35;;;;37628:147;37554:221;;:::o;10514:387::-;10574:4;10782:12;10849:7;10837:20;10829:28;;10892:1;10885:4;:8;10878:15;;;10514:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;986:133::-;1029:5;1067:6;1054:20;1045:29;;1083:30;1107:5;1083:30;:::i;:::-;986:133;;;;:::o;1125:137::-;1170:5;1208:6;1195:20;1186:29;;1224:32;1250:5;1224:32;:::i;:::-;1125:137;;;;:::o;1268:141::-;1324:5;1355:6;1349:13;1340:22;;1371:32;1397:5;1371:32;:::i;:::-;1268:141;;;;:::o;1428:338::-;1483:5;1532:3;1525:4;1517:6;1513:17;1509:27;1499:122;;1540:79;;:::i;:::-;1499:122;1657:6;1644:20;1682:78;1756:3;1748:6;1741:4;1733:6;1729:17;1682:78;:::i;:::-;1673:87;;1489:277;1428:338;;;;:::o;1786:340::-;1842:5;1891:3;1884:4;1876:6;1872:17;1868:27;1858:122;;1899:79;;:::i;:::-;1858:122;2016:6;2003:20;2041:79;2116:3;2108:6;2101:4;2093:6;2089:17;2041:79;:::i;:::-;2032:88;;1848:278;1786:340;;;;:::o;2132:139::-;2178:5;2216:6;2203:20;2194:29;;2232:33;2259:5;2232:33;:::i;:::-;2132:139;;;;:::o;2277:329::-;2336:6;2385:2;2373:9;2364:7;2360:23;2356:32;2353:119;;;2391:79;;:::i;:::-;2353:119;2511:1;2536:53;2581:7;2572:6;2561:9;2557:22;2536:53;:::i;:::-;2526:63;;2482:117;2277:329;;;;:::o;2612:474::-;2680:6;2688;2737:2;2725:9;2716:7;2712:23;2708:32;2705:119;;;2743:79;;:::i;:::-;2705:119;2863:1;2888:53;2933:7;2924:6;2913:9;2909:22;2888:53;:::i;:::-;2878:63;;2834:117;2990:2;3016:53;3061:7;3052:6;3041:9;3037:22;3016:53;:::i;:::-;3006:63;;2961:118;2612:474;;;;;:::o;3092:619::-;3169:6;3177;3185;3234:2;3222:9;3213:7;3209:23;3205:32;3202:119;;;3240:79;;:::i;:::-;3202:119;3360:1;3385:53;3430:7;3421:6;3410:9;3406:22;3385:53;:::i;:::-;3375:63;;3331:117;3487:2;3513:53;3558:7;3549:6;3538:9;3534:22;3513:53;:::i;:::-;3503:63;;3458:118;3615:2;3641:53;3686:7;3677:6;3666:9;3662:22;3641:53;:::i;:::-;3631:63;;3586:118;3092:619;;;;;:::o;3717:943::-;3812:6;3820;3828;3836;3885:3;3873:9;3864:7;3860:23;3856:33;3853:120;;;3892:79;;:::i;:::-;3853:120;4012:1;4037:53;4082:7;4073:6;4062:9;4058:22;4037:53;:::i;:::-;4027:63;;3983:117;4139:2;4165:53;4210:7;4201:6;4190:9;4186:22;4165:53;:::i;:::-;4155:63;;4110:118;4267:2;4293:53;4338:7;4329:6;4318:9;4314:22;4293:53;:::i;:::-;4283:63;;4238:118;4423:2;4412:9;4408:18;4395:32;4454:18;4446:6;4443:30;4440:117;;;4476:79;;:::i;:::-;4440:117;4581:62;4635:7;4626:6;4615:9;4611:22;4581:62;:::i;:::-;4571:72;;4366:287;3717:943;;;;;;;:::o;4666:468::-;4731:6;4739;4788:2;4776:9;4767:7;4763:23;4759:32;4756:119;;;4794:79;;:::i;:::-;4756:119;4914:1;4939:53;4984:7;4975:6;4964:9;4960:22;4939:53;:::i;:::-;4929:63;;4885:117;5041:2;5067:50;5109:7;5100:6;5089:9;5085:22;5067:50;:::i;:::-;5057:60;;5012:115;4666:468;;;;;:::o;5140:474::-;5208:6;5216;5265:2;5253:9;5244:7;5240:23;5236:32;5233:119;;;5271:79;;:::i;:::-;5233:119;5391:1;5416:53;5461:7;5452:6;5441:9;5437:22;5416:53;:::i;:::-;5406:63;;5362:117;5518:2;5544:53;5589:7;5580:6;5569:9;5565:22;5544:53;:::i;:::-;5534:63;;5489:118;5140:474;;;;;:::o;5620:327::-;5678:6;5727:2;5715:9;5706:7;5702:23;5698:32;5695:119;;;5733:79;;:::i;:::-;5695:119;5853:1;5878:52;5922:7;5913:6;5902:9;5898:22;5878:52;:::i;:::-;5868:62;;5824:116;5620:327;;;;:::o;5953:349::-;6022:6;6071:2;6059:9;6050:7;6046:23;6042:32;6039:119;;;6077:79;;:::i;:::-;6039:119;6197:1;6222:63;6277:7;6268:6;6257:9;6253:22;6222:63;:::i;:::-;6212:73;;6168:127;5953:349;;;;:::o;6308:509::-;6377:6;6426:2;6414:9;6405:7;6401:23;6397:32;6394:119;;;6432:79;;:::i;:::-;6394:119;6580:1;6569:9;6565:17;6552:31;6610:18;6602:6;6599:30;6596:117;;;6632:79;;:::i;:::-;6596:117;6737:63;6792:7;6783:6;6772:9;6768:22;6737:63;:::i;:::-;6727:73;;6523:287;6308:509;;;;:::o;6823:329::-;6882:6;6931:2;6919:9;6910:7;6906:23;6902:32;6899:119;;;6937:79;;:::i;:::-;6899:119;7057:1;7082:53;7127:7;7118:6;7107:9;7103:22;7082:53;:::i;:::-;7072:63;;7028:117;6823:329;;;;:::o;7158:179::-;7227:10;7248:46;7290:3;7282:6;7248:46;:::i;:::-;7326:4;7321:3;7317:14;7303:28;;7158:179;;;;:::o;7343:118::-;7430:24;7448:5;7430:24;:::i;:::-;7425:3;7418:37;7343:118;;:::o;7497:732::-;7616:3;7645:54;7693:5;7645:54;:::i;:::-;7715:86;7794:6;7789:3;7715:86;:::i;:::-;7708:93;;7825:56;7875:5;7825:56;:::i;:::-;7904:7;7935:1;7920:284;7945:6;7942:1;7939:13;7920:284;;;8021:6;8015:13;8048:63;8107:3;8092:13;8048:63;:::i;:::-;8041:70;;8134:60;8187:6;8134:60;:::i;:::-;8124:70;;7980:224;7967:1;7964;7960:9;7955:14;;7920:284;;;7924:14;8220:3;8213:10;;7621:608;;;7497:732;;;;:::o;8235:109::-;8316:21;8331:5;8316:21;:::i;:::-;8311:3;8304:34;8235:109;;:::o;8350:360::-;8436:3;8464:38;8496:5;8464:38;:::i;:::-;8518:70;8581:6;8576:3;8518:70;:::i;:::-;8511:77;;8597:52;8642:6;8637:3;8630:4;8623:5;8619:16;8597:52;:::i;:::-;8674:29;8696:6;8674:29;:::i;:::-;8669:3;8665:39;8658:46;;8440:270;8350:360;;;;:::o;8716:161::-;8818:52;8864:5;8818:52;:::i;:::-;8813:3;8806:65;8716:161;;:::o;8883:364::-;8971:3;8999:39;9032:5;8999:39;:::i;:::-;9054:71;9118:6;9113:3;9054:71;:::i;:::-;9047:78;;9134:52;9179:6;9174:3;9167:4;9160:5;9156:16;9134:52;:::i;:::-;9211:29;9233:6;9211:29;:::i;:::-;9206:3;9202:39;9195:46;;8975:272;8883:364;;;;:::o;9253:377::-;9359:3;9387:39;9420:5;9387:39;:::i;:::-;9442:89;9524:6;9519:3;9442:89;:::i;:::-;9435:96;;9540:52;9585:6;9580:3;9573:4;9566:5;9562:16;9540:52;:::i;:::-;9617:6;9612:3;9608:16;9601:23;;9363:267;9253:377;;;;:::o;9636:366::-;9778:3;9799:67;9863:2;9858:3;9799:67;:::i;:::-;9792:74;;9875:93;9964:3;9875:93;:::i;:::-;9993:2;9988:3;9984:12;9977:19;;9636:366;;;:::o;10008:::-;10150:3;10171:67;10235:2;10230:3;10171:67;:::i;:::-;10164:74;;10247:93;10336:3;10247:93;:::i;:::-;10365:2;10360:3;10356:12;10349:19;;10008:366;;;:::o;10380:::-;10522:3;10543:67;10607:2;10602:3;10543:67;:::i;:::-;10536:74;;10619:93;10708:3;10619:93;:::i;:::-;10737:2;10732:3;10728:12;10721:19;;10380:366;;;:::o;10752:::-;10894:3;10915:67;10979:2;10974:3;10915:67;:::i;:::-;10908:74;;10991:93;11080:3;10991:93;:::i;:::-;11109:2;11104:3;11100:12;11093:19;;10752:366;;;:::o;11124:::-;11266:3;11287:67;11351:2;11346:3;11287:67;:::i;:::-;11280:74;;11363:93;11452:3;11363:93;:::i;:::-;11481:2;11476:3;11472:12;11465:19;;11124:366;;;:::o;11496:::-;11638:3;11659:67;11723:2;11718:3;11659:67;:::i;:::-;11652:74;;11735:93;11824:3;11735:93;:::i;:::-;11853:2;11848:3;11844:12;11837:19;;11496:366;;;:::o;11868:::-;12010:3;12031:67;12095:2;12090:3;12031:67;:::i;:::-;12024:74;;12107:93;12196:3;12107:93;:::i;:::-;12225:2;12220:3;12216:12;12209:19;;11868:366;;;:::o;12240:::-;12382:3;12403:67;12467:2;12462:3;12403:67;:::i;:::-;12396:74;;12479:93;12568:3;12479:93;:::i;:::-;12597:2;12592:3;12588:12;12581:19;;12240:366;;;:::o;12612:::-;12754:3;12775:67;12839:2;12834:3;12775:67;:::i;:::-;12768:74;;12851:93;12940:3;12851:93;:::i;:::-;12969:2;12964:3;12960:12;12953:19;;12612:366;;;:::o;12984:::-;13126:3;13147:67;13211:2;13206:3;13147:67;:::i;:::-;13140:74;;13223:93;13312:3;13223:93;:::i;:::-;13341:2;13336:3;13332:12;13325:19;;12984:366;;;:::o;13356:::-;13498:3;13519:67;13583:2;13578:3;13519:67;:::i;:::-;13512:74;;13595:93;13684:3;13595:93;:::i;:::-;13713:2;13708:3;13704:12;13697:19;;13356:366;;;:::o;13728:::-;13870:3;13891:67;13955:2;13950:3;13891:67;:::i;:::-;13884:74;;13967:93;14056:3;13967:93;:::i;:::-;14085:2;14080:3;14076:12;14069:19;;13728:366;;;:::o;14100:::-;14242:3;14263:67;14327:2;14322:3;14263:67;:::i;:::-;14256:74;;14339:93;14428:3;14339:93;:::i;:::-;14457:2;14452:3;14448:12;14441:19;;14100:366;;;:::o;14472:::-;14614:3;14635:67;14699:2;14694:3;14635:67;:::i;:::-;14628:74;;14711:93;14800:3;14711:93;:::i;:::-;14829:2;14824:3;14820:12;14813:19;;14472:366;;;:::o;14844:::-;14986:3;15007:67;15071:2;15066:3;15007:67;:::i;:::-;15000:74;;15083:93;15172:3;15083:93;:::i;:::-;15201:2;15196:3;15192:12;15185:19;;14844:366;;;:::o;15216:::-;15358:3;15379:67;15443:2;15438:3;15379:67;:::i;:::-;15372:74;;15455:93;15544:3;15455:93;:::i;:::-;15573:2;15568:3;15564:12;15557:19;;15216:366;;;:::o;15588:::-;15730:3;15751:67;15815:2;15810:3;15751:67;:::i;:::-;15744:74;;15827:93;15916:3;15827:93;:::i;:::-;15945:2;15940:3;15936:12;15929:19;;15588:366;;;:::o;15960:::-;16102:3;16123:67;16187:2;16182:3;16123:67;:::i;:::-;16116:74;;16199:93;16288:3;16199:93;:::i;:::-;16317:2;16312:3;16308:12;16301:19;;15960:366;;;:::o;16332:::-;16474:3;16495:67;16559:2;16554:3;16495:67;:::i;:::-;16488:74;;16571:93;16660:3;16571:93;:::i;:::-;16689:2;16684:3;16680:12;16673:19;;16332:366;;;:::o;16704:108::-;16781:24;16799:5;16781:24;:::i;:::-;16776:3;16769:37;16704:108;;:::o;16818:118::-;16905:24;16923:5;16905:24;:::i;:::-;16900:3;16893:37;16818:118;;:::o;16942:435::-;17122:3;17144:95;17235:3;17226:6;17144:95;:::i;:::-;17137:102;;17256:95;17347:3;17338:6;17256:95;:::i;:::-;17249:102;;17368:3;17361:10;;16942:435;;;;;:::o;17383:222::-;17476:4;17514:2;17503:9;17499:18;17491:26;;17527:71;17595:1;17584:9;17580:17;17571:6;17527:71;:::i;:::-;17383:222;;;;:::o;17611:442::-;17760:4;17798:2;17787:9;17783:18;17775:26;;17811:71;17879:1;17868:9;17864:17;17855:6;17811:71;:::i;:::-;17892:72;17960:2;17949:9;17945:18;17936:6;17892:72;:::i;:::-;17974;18042:2;18031:9;18027:18;18018:6;17974:72;:::i;:::-;17611:442;;;;;;:::o;18059:640::-;18254:4;18292:3;18281:9;18277:19;18269:27;;18306:71;18374:1;18363:9;18359:17;18350:6;18306:71;:::i;:::-;18387:72;18455:2;18444:9;18440:18;18431:6;18387:72;:::i;:::-;18469;18537:2;18526:9;18522:18;18513:6;18469:72;:::i;:::-;18588:9;18582:4;18578:20;18573:2;18562:9;18558:18;18551:48;18616:76;18687:4;18678:6;18616:76;:::i;:::-;18608:84;;18059:640;;;;;;;:::o;18705:373::-;18848:4;18886:2;18875:9;18871:18;18863:26;;18935:9;18929:4;18925:20;18921:1;18910:9;18906:17;18899:47;18963:108;19066:4;19057:6;18963:108;:::i;:::-;18955:116;;18705:373;;;;:::o;19084:210::-;19171:4;19209:2;19198:9;19194:18;19186:26;;19222:65;19284:1;19273:9;19269:17;19260:6;19222:65;:::i;:::-;19084:210;;;;:::o;19300:252::-;19408:4;19446:2;19435:9;19431:18;19423:26;;19459:86;19542:1;19531:9;19527:17;19518:6;19459:86;:::i;:::-;19300:252;;;;:::o;19558:313::-;19671:4;19709:2;19698:9;19694:18;19686:26;;19758:9;19752:4;19748:20;19744:1;19733:9;19729:17;19722:47;19786:78;19859:4;19850:6;19786:78;:::i;:::-;19778:86;;19558:313;;;;:::o;19877:419::-;20043:4;20081:2;20070:9;20066:18;20058:26;;20130:9;20124:4;20120:20;20116:1;20105:9;20101:17;20094:47;20158:131;20284:4;20158:131;:::i;:::-;20150:139;;19877:419;;;:::o;20302:::-;20468:4;20506:2;20495:9;20491:18;20483:26;;20555:9;20549:4;20545:20;20541:1;20530:9;20526:17;20519:47;20583:131;20709:4;20583:131;:::i;:::-;20575:139;;20302:419;;;:::o;20727:::-;20893:4;20931:2;20920:9;20916:18;20908:26;;20980:9;20974:4;20970:20;20966:1;20955:9;20951:17;20944:47;21008:131;21134:4;21008:131;:::i;:::-;21000:139;;20727:419;;;:::o;21152:::-;21318:4;21356:2;21345:9;21341:18;21333:26;;21405:9;21399:4;21395:20;21391:1;21380:9;21376:17;21369:47;21433:131;21559:4;21433:131;:::i;:::-;21425:139;;21152:419;;;:::o;21577:::-;21743:4;21781:2;21770:9;21766:18;21758:26;;21830:9;21824:4;21820:20;21816:1;21805:9;21801:17;21794:47;21858:131;21984:4;21858:131;:::i;:::-;21850:139;;21577:419;;;:::o;22002:::-;22168:4;22206:2;22195:9;22191:18;22183:26;;22255:9;22249:4;22245:20;22241:1;22230:9;22226:17;22219:47;22283:131;22409:4;22283:131;:::i;:::-;22275:139;;22002:419;;;:::o;22427:::-;22593:4;22631:2;22620:9;22616:18;22608:26;;22680:9;22674:4;22670:20;22666:1;22655:9;22651:17;22644:47;22708:131;22834:4;22708:131;:::i;:::-;22700:139;;22427:419;;;:::o;22852:::-;23018:4;23056:2;23045:9;23041:18;23033:26;;23105:9;23099:4;23095:20;23091:1;23080:9;23076:17;23069:47;23133:131;23259:4;23133:131;:::i;:::-;23125:139;;22852:419;;;:::o;23277:::-;23443:4;23481:2;23470:9;23466:18;23458:26;;23530:9;23524:4;23520:20;23516:1;23505:9;23501:17;23494:47;23558:131;23684:4;23558:131;:::i;:::-;23550:139;;23277:419;;;:::o;23702:::-;23868:4;23906:2;23895:9;23891:18;23883:26;;23955:9;23949:4;23945:20;23941:1;23930:9;23926:17;23919:47;23983:131;24109:4;23983:131;:::i;:::-;23975:139;;23702:419;;;:::o;24127:::-;24293:4;24331:2;24320:9;24316:18;24308:26;;24380:9;24374:4;24370:20;24366:1;24355:9;24351:17;24344:47;24408:131;24534:4;24408:131;:::i;:::-;24400:139;;24127:419;;;:::o;24552:::-;24718:4;24756:2;24745:9;24741:18;24733:26;;24805:9;24799:4;24795:20;24791:1;24780:9;24776:17;24769:47;24833:131;24959:4;24833:131;:::i;:::-;24825:139;;24552:419;;;:::o;24977:::-;25143:4;25181:2;25170:9;25166:18;25158:26;;25230:9;25224:4;25220:20;25216:1;25205:9;25201:17;25194:47;25258:131;25384:4;25258:131;:::i;:::-;25250:139;;24977:419;;;:::o;25402:::-;25568:4;25606:2;25595:9;25591:18;25583:26;;25655:9;25649:4;25645:20;25641:1;25630:9;25626:17;25619:47;25683:131;25809:4;25683:131;:::i;:::-;25675:139;;25402:419;;;:::o;25827:::-;25993:4;26031:2;26020:9;26016:18;26008:26;;26080:9;26074:4;26070:20;26066:1;26055:9;26051:17;26044:47;26108:131;26234:4;26108:131;:::i;:::-;26100:139;;25827:419;;;:::o;26252:::-;26418:4;26456:2;26445:9;26441:18;26433:26;;26505:9;26499:4;26495:20;26491:1;26480:9;26476:17;26469:47;26533:131;26659:4;26533:131;:::i;:::-;26525:139;;26252:419;;;:::o;26677:::-;26843:4;26881:2;26870:9;26866:18;26858:26;;26930:9;26924:4;26920:20;26916:1;26905:9;26901:17;26894:47;26958:131;27084:4;26958:131;:::i;:::-;26950:139;;26677:419;;;:::o;27102:::-;27268:4;27306:2;27295:9;27291:18;27283:26;;27355:9;27349:4;27345:20;27341:1;27330:9;27326:17;27319:47;27383:131;27509:4;27383:131;:::i;:::-;27375:139;;27102:419;;;:::o;27527:::-;27693:4;27731:2;27720:9;27716:18;27708:26;;27780:9;27774:4;27770:20;27766:1;27755:9;27751:17;27744:47;27808:131;27934:4;27808:131;:::i;:::-;27800:139;;27527:419;;;:::o;27952:222::-;28045:4;28083:2;28072:9;28068:18;28060:26;;28096:71;28164:1;28153:9;28149:17;28140:6;28096:71;:::i;:::-;27952:222;;;;:::o;28180:129::-;28214:6;28241:20;;:::i;:::-;28231:30;;28270:33;28298:4;28290:6;28270:33;:::i;:::-;28180:129;;;:::o;28315:75::-;28348:6;28381:2;28375:9;28365:19;;28315:75;:::o;28396:307::-;28457:4;28547:18;28539:6;28536:30;28533:56;;;28569:18;;:::i;:::-;28533:56;28607:29;28629:6;28607:29;:::i;:::-;28599:37;;28691:4;28685;28681:15;28673:23;;28396:307;;;:::o;28709:308::-;28771:4;28861:18;28853:6;28850:30;28847:56;;;28883:18;;:::i;:::-;28847:56;28921:29;28943:6;28921:29;:::i;:::-;28913:37;;29005:4;28999;28995:15;28987:23;;28709:308;;;:::o;29023:132::-;29090:4;29113:3;29105:11;;29143:4;29138:3;29134:14;29126:22;;29023:132;;;:::o;29161:114::-;29228:6;29262:5;29256:12;29246:22;;29161:114;;;:::o;29281:98::-;29332:6;29366:5;29360:12;29350:22;;29281:98;;;:::o;29385:99::-;29437:6;29471:5;29465:12;29455:22;;29385:99;;;:::o;29490:113::-;29560:4;29592;29587:3;29583:14;29575:22;;29490:113;;;:::o;29609:184::-;29708:11;29742:6;29737:3;29730:19;29782:4;29777:3;29773:14;29758:29;;29609:184;;;;:::o;29799:168::-;29882:11;29916:6;29911:3;29904:19;29956:4;29951:3;29947:14;29932:29;;29799:168;;;;:::o;29973:169::-;30057:11;30091:6;30086:3;30079:19;30131:4;30126:3;30122:14;30107:29;;29973:169;;;;:::o;30148:148::-;30250:11;30287:3;30272:18;;30148:148;;;;:::o;30302:305::-;30342:3;30361:20;30379:1;30361:20;:::i;:::-;30356:25;;30395:20;30413:1;30395:20;:::i;:::-;30390:25;;30549:1;30481:66;30477:74;30474:1;30471:81;30468:107;;;30555:18;;:::i;:::-;30468:107;30599:1;30596;30592:9;30585:16;;30302:305;;;;:::o;30613:185::-;30653:1;30670:20;30688:1;30670:20;:::i;:::-;30665:25;;30704:20;30722:1;30704:20;:::i;:::-;30699:25;;30743:1;30733:35;;30748:18;;:::i;:::-;30733:35;30790:1;30787;30783:9;30778:14;;30613:185;;;;:::o;30804:191::-;30844:4;30864:20;30882:1;30864:20;:::i;:::-;30859:25;;30898:20;30916:1;30898:20;:::i;:::-;30893:25;;30937:1;30934;30931:8;30928:34;;;30942:18;;:::i;:::-;30928:34;30987:1;30984;30980:9;30972:17;;30804:191;;;;:::o;31001:96::-;31038:7;31067:24;31085:5;31067:24;:::i;:::-;31056:35;;31001:96;;;:::o;31103:90::-;31137:7;31180:5;31173:13;31166:21;31155:32;;31103:90;;;:::o;31199:149::-;31235:7;31275:66;31268:5;31264:78;31253:89;;31199:149;;;:::o;31354:126::-;31391:7;31431:42;31424:5;31420:54;31409:65;;31354:126;;;:::o;31486:77::-;31523:7;31552:5;31541:16;;31486:77;;;:::o;31569:141::-;31634:9;31667:37;31698:5;31667:37;:::i;:::-;31654:50;;31569:141;;;:::o;31716:126::-;31766:9;31799:37;31830:5;31799:37;:::i;:::-;31786:50;;31716:126;;;:::o;31848:113::-;31898:9;31931:24;31949:5;31931:24;:::i;:::-;31918:37;;31848:113;;;:::o;31967:154::-;32051:6;32046:3;32041;32028:30;32113:1;32104:6;32099:3;32095:16;32088:27;31967:154;;;:::o;32127:307::-;32195:1;32205:113;32219:6;32216:1;32213:13;32205:113;;;32304:1;32299:3;32295:11;32289:18;32285:1;32280:3;32276:11;32269:39;32241:2;32238:1;32234:10;32229:15;;32205:113;;;32336:6;32333:1;32330:13;32327:101;;;32416:1;32407:6;32402:3;32398:16;32391:27;32327:101;32176:258;32127:307;;;:::o;32440:320::-;32484:6;32521:1;32515:4;32511:12;32501:22;;32568:1;32562:4;32558:12;32589:18;32579:81;;32645:4;32637:6;32633:17;32623:27;;32579:81;32707:2;32699:6;32696:14;32676:18;32673:38;32670:84;;;32726:18;;:::i;:::-;32670:84;32491:269;32440:320;;;:::o;32766:281::-;32849:27;32871:4;32849:27;:::i;:::-;32841:6;32837:40;32979:6;32967:10;32964:22;32943:18;32931:10;32928:34;32925:62;32922:88;;;32990:18;;:::i;:::-;32922:88;33030:10;33026:2;33019:22;32809:238;32766:281;;:::o;33053:233::-;33092:3;33115:24;33133:5;33115:24;:::i;:::-;33106:33;;33161:66;33154:5;33151:77;33148:103;;;33231:18;;:::i;:::-;33148:103;33278:1;33271:5;33267:13;33260:20;;33053:233;;;:::o;33292:176::-;33324:1;33341:20;33359:1;33341:20;:::i;:::-;33336:25;;33375:20;33393:1;33375:20;:::i;:::-;33370:25;;33414:1;33404:35;;33419:18;;:::i;:::-;33404:35;33460:1;33457;33453:9;33448:14;;33292:176;;;;:::o;33474:180::-;33522:77;33519:1;33512:88;33619:4;33616:1;33609:15;33643:4;33640:1;33633:15;33660:180;33708:77;33705:1;33698:88;33805:4;33802:1;33795:15;33829:4;33826:1;33819:15;33846:180;33894:77;33891:1;33884:88;33991:4;33988:1;33981:15;34015:4;34012:1;34005:15;34032:180;34080:77;34077:1;34070:88;34177:4;34174:1;34167:15;34201:4;34198:1;34191:15;34218:180;34266:77;34263:1;34256:88;34363:4;34360:1;34353:15;34387:4;34384:1;34377:15;34404:180;34452:77;34449:1;34442:88;34549:4;34546:1;34539:15;34573:4;34570:1;34563:15;34590:117;34699:1;34696;34689:12;34713:117;34822:1;34819;34812:12;34836:117;34945:1;34942;34935:12;34959:117;35068:1;35065;35058:12;35082:102;35123:6;35174:2;35170:7;35165:2;35158:5;35154:14;35150:28;35140:38;;35082:102;;;:::o;35190:230::-;35330:34;35326:1;35318:6;35314:14;35307:58;35399:13;35394:2;35386:6;35382:15;35375:38;35190:230;:::o;35426:237::-;35566:34;35562:1;35554:6;35550:14;35543:58;35635:20;35630:2;35622:6;35618:15;35611:45;35426:237;:::o;35669:225::-;35809:34;35805:1;35797:6;35793:14;35786:58;35878:8;35873:2;35865:6;35861:15;35854:33;35669:225;:::o;35900:178::-;36040:30;36036:1;36028:6;36024:14;36017:54;35900:178;:::o;36084:223::-;36224:34;36220:1;36212:6;36208:14;36201:58;36293:6;36288:2;36280:6;36276:15;36269:31;36084:223;:::o;36313:175::-;36453:27;36449:1;36441:6;36437:14;36430:51;36313:175;:::o;36494:231::-;36634:34;36630:1;36622:6;36618:14;36611:58;36703:14;36698:2;36690:6;36686:15;36679:39;36494:231;:::o;36731:243::-;36871:34;36867:1;36859:6;36855:14;36848:58;36940:26;36935:2;36927:6;36923:15;36916:51;36731:243;:::o;36980:229::-;37120:34;37116:1;37108:6;37104:14;37097:58;37189:12;37184:2;37176:6;37172:15;37165:37;36980:229;:::o;37215:228::-;37355:34;37351:1;37343:6;37339:14;37332:58;37424:11;37419:2;37411:6;37407:15;37400:36;37215:228;:::o;37449:182::-;37589:34;37585:1;37577:6;37573:14;37566:58;37449:182;:::o;37637:231::-;37777:34;37773:1;37765:6;37761:14;37754:58;37846:14;37841:2;37833:6;37829:15;37822:39;37637:231;:::o;37874:182::-;38014:34;38010:1;38002:6;37998:14;37991:58;37874:182;:::o;38062:228::-;38202:34;38198:1;38190:6;38186:14;38179:58;38271:11;38266:2;38258:6;38254:15;38247:36;38062:228;:::o;38296:234::-;38436:34;38432:1;38424:6;38420:14;38413:58;38505:17;38500:2;38492:6;38488:15;38481:42;38296:234;:::o;38536:220::-;38676:34;38672:1;38664:6;38660:14;38653:58;38745:3;38740:2;38732:6;38728:15;38721:28;38536:220;:::o;38762:236::-;38902:34;38898:1;38890:6;38886:14;38879:58;38971:19;38966:2;38958:6;38954:15;38947:44;38762:236;:::o;39004:231::-;39144:34;39140:1;39132:6;39128:14;39121:58;39213:14;39208:2;39200:6;39196:15;39189:39;39004:231;:::o;39241:244::-;39381:34;39377:1;39369:6;39365:14;39358:58;39450:27;39445:2;39437:6;39433:15;39426:52;39241:244;:::o;39491:122::-;39564:24;39582:5;39564:24;:::i;:::-;39557:5;39554:35;39544:63;;39603:1;39600;39593:12;39544:63;39491:122;:::o;39619:116::-;39689:21;39704:5;39689:21;:::i;:::-;39682:5;39679:32;39669:60;;39725:1;39722;39715:12;39669:60;39619:116;:::o;39741:120::-;39813:23;39830:5;39813:23;:::i;:::-;39806:5;39803:34;39793:62;;39851:1;39848;39841:12;39793:62;39741:120;:::o;39867:122::-;39940:24;39958:5;39940:24;:::i;:::-;39933:5;39930:35;39920:63;;39979:1;39976;39969:12;39920:63;39867:122;:::o
Swarm Source
ipfs://284c222617ff3409e676aa5b69c2857141507abfe194724b998c2e13411e7753
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.