Feature Tip: Add private address tag to any address under My Name Tag !
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 76 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Mint And Approve... | 13613001 | 1159 days ago | IN | 0 ETH | 0.01256781 | ||||
Mint And Approve... | 13612854 | 1159 days ago | IN | 0 ETH | 0.01568401 | ||||
Mint And Approve... | 13612836 | 1159 days ago | IN | 0 ETH | 0.01718608 | ||||
Mint And Approve... | 13612794 | 1159 days ago | IN | 0 ETH | 0.01935141 | ||||
Mint And Approve... | 13612713 | 1159 days ago | IN | 0 ETH | 0.0169355 | ||||
Mint And Approve... | 13594704 | 1162 days ago | IN | 0 ETH | 0.0204835 | ||||
Mint And Approve... | 13594677 | 1162 days ago | IN | 0 ETH | 0.02656313 | ||||
Mint And Approve... | 13594662 | 1162 days ago | IN | 0 ETH | 0.02897883 | ||||
Mint And Approve... | 13574753 | 1165 days ago | IN | 0 ETH | 0.0154851 | ||||
Mint And Approve... | 13574608 | 1165 days ago | IN | 0 ETH | 0.01876186 | ||||
Mint And Approve... | 13574592 | 1165 days ago | IN | 0 ETH | 0.01438528 | ||||
Mint And Approve... | 13569851 | 1166 days ago | IN | 0 ETH | 0.01602961 | ||||
Mint And Approve... | 13569836 | 1166 days ago | IN | 0 ETH | 0.0155823 | ||||
Mint And Approve... | 13569822 | 1166 days ago | IN | 0 ETH | 0.01800643 | ||||
Mint And Approve... | 13569716 | 1166 days ago | IN | 0 ETH | 0.01241609 | ||||
Mint And Approve... | 13545527 | 1169 days ago | IN | 0 ETH | 0.03380319 | ||||
Mint And Approve... | 13544150 | 1170 days ago | IN | 0 ETH | 0.03094842 | ||||
Mint And Approve... | 13544096 | 1170 days ago | IN | 0 ETH | 0.0295026 | ||||
Mint And Approve... | 13544029 | 1170 days ago | IN | 0 ETH | 0.03029666 | ||||
Mint And Approve... | 13543995 | 1170 days ago | IN | 0 ETH | 0.02281787 | ||||
Mint And Approve... | 13543865 | 1170 days ago | IN | 0 ETH | 0.02698892 | ||||
Mint And Approve... | 13543851 | 1170 days ago | IN | 0 ETH | 0.0169908 | ||||
Mint And Approve... | 13543467 | 1170 days ago | IN | 0 ETH | 0.02068351 | ||||
Mint And Approve... | 13543445 | 1170 days ago | IN | 0 ETH | 0.01839054 | ||||
Mint And Approve... | 13543382 | 1170 days ago | IN | 0 ETH | 0.02091227 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
OwnixNFT
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-09-12 */ // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/token/ERC1155/IERC1155.sol pragma solidity ^0.8.0; /** * @dev Required interface of an ERC1155 compliant contract, as defined in the * https://eips.ethereum.org/EIPS/eip-1155[EIP]. * * _Available since v3.1._ */ interface IERC1155 is IERC165 { /** * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`. */ event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value); /** * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all * transfers. */ event TransferBatch(address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values); /** * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to * `approved`. */ event ApprovalForAll(address indexed account, address indexed operator, bool approved); /** * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI. * * If an {URI} event was emitted for `id`, the standard * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value * returned by {IERC1155MetadataURI-uri}. */ event URI(string value, uint256 indexed id); /** * @dev Returns the amount of tokens of token type `id` owned by `account`. * * Requirements: * * - `account` cannot be the zero address. */ function balanceOf(address account, uint256 id) external view returns (uint256); /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}. * * Requirements: * * - `accounts` and `ids` must have the same length. */ function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory); /** * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`, * * Emits an {ApprovalForAll} event. * * Requirements: * * - `operator` cannot be the caller. */ function setApprovalForAll(address operator, bool approved) external; /** * @dev Returns true if `operator` is approved to transfer ``account``'s tokens. * * See {setApprovalForAll}. */ function isApprovedForAll(address account, address operator) external view returns (bool); /** * @dev Transfers `amount` tokens of token type `id` from `from` to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}. * - `from` must have a balance of tokens of type `id` of at least `amount`. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function safeTransferFrom(address from, address to, uint256 id, uint256 amount, bytes calldata data) external; /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}. * * Emits a {TransferBatch} event. * * Requirements: * * - `ids` and `amounts` must have the same length. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function safeBatchTransferFrom(address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data) external; } // File: @openzeppelin/contracts/token/ERC1155/IERC1155Receiver.sol pragma solidity ^0.8.0; /** * @dev _Available since v3.1._ */ interface IERC1155Receiver is IERC165 { /** @dev Handles the receipt of a single ERC1155 token type. This function is called at the end of a `safeTransferFrom` after the balance has been updated. To accept the transfer, this must return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` (i.e. 0xf23a6e61, or its own function selector). @param operator The address which initiated the transfer (i.e. msg.sender) @param from The address which previously owned the token @param id The ID of the token being transferred @param value The amount of tokens being transferred @param data Additional data with no specified format @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed */ function onERC1155Received( address operator, address from, uint256 id, uint256 value, bytes calldata data ) external returns(bytes4); /** @dev Handles the receipt of a multiple ERC1155 token types. This function is called at the end of a `safeBatchTransferFrom` after the balances have been updated. To accept the transfer(s), this must return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` (i.e. 0xbc197c81, or its own function selector). @param operator The address which initiated the batch transfer (i.e. msg.sender) @param from The address which previously owned the token @param ids An array containing ids of each token being transferred (order and length must match values array) @param values An array containing amounts of each token being transferred (order and length must match ids array) @param data Additional data with no specified format @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed */ function onERC1155BatchReceived( address operator, address from, uint256[] calldata ids, uint256[] calldata values, bytes calldata data ) external returns(bytes4); } // File: @openzeppelin/contracts/token/ERC1155/extensions/IERC1155MetadataURI.sol pragma solidity ^0.8.0; /** * @dev Interface of the optional ERC1155MetadataExtension interface, as defined * in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[EIP]. * * _Available since v3.1._ */ interface IERC1155MetadataURI is IERC1155 { /** * @dev Returns the URI for token type `id`. * * If the `\{id\}` substring is present in the URI, it must be replaced by * clients with the actual token type ID. */ function uri(uint256 id) external view returns (string memory); } // 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; // solhint-disable-next-line no-inline-assembly assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain`call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: value }(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.staticcall(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @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) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } // 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/token/ERC1155/ERC1155.sol pragma solidity ^0.8.0; /** * @dev Implementation of the basic standard multi-token. * See https://eips.ethereum.org/EIPS/eip-1155 * Originally based on code by Enjin: https://github.com/enjin/erc-1155 * * _Available since v3.1._ */ contract ERC1155 is Context, ERC165, IERC1155, IERC1155MetadataURI { using Address for address; // Mapping from token ID to account balances mapping (uint256 => mapping(address => uint256)) private _balances; // Mapping from account to operator approvals mapping (address => mapping(address => bool)) private _operatorApprovals; // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json string private _uri; /** * @dev See {_setURI}. */ constructor (string memory uri_) { _setURI(uri_); } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC1155).interfaceId || interfaceId == type(IERC1155MetadataURI).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC1155MetadataURI-uri}. * * This implementation returns the same URI for *all* token types. It relies * on the token type ID substitution mechanism * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP]. * * Clients calling this function must replace the `\{id\}` substring with the * actual token type ID. */ function uri(uint256) public view virtual override returns (string memory) { return _uri; } /** * @dev See {IERC1155-balanceOf}. * * Requirements: * * - `account` cannot be the zero address. */ function balanceOf(address account, uint256 id) public view virtual override returns (uint256) { require(account != address(0), "ERC1155: balance query for the zero address"); return _balances[id][account]; } /** * @dev See {IERC1155-balanceOfBatch}. * * Requirements: * * - `accounts` and `ids` must have the same length. */ function balanceOfBatch( address[] memory accounts, uint256[] memory ids ) public view virtual override returns (uint256[] memory) { require(accounts.length == ids.length, "ERC1155: accounts and ids length mismatch"); uint256[] memory batchBalances = new uint256[](accounts.length); for (uint256 i = 0; i < accounts.length; ++i) { batchBalances[i] = balanceOf(accounts[i], ids[i]); } return batchBalances; } /** * @dev See {IERC1155-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { require(_msgSender() != operator, "ERC1155: setting approval status for self"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC1155-isApprovedForAll}. */ function isApprovedForAll(address account, address operator) public view virtual override returns (bool) { return _operatorApprovals[account][operator]; } /** * @dev See {IERC1155-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes memory data ) public virtual override { require(to != address(0), "ERC1155: transfer to the zero address"); require( from == _msgSender() || isApprovedForAll(from, _msgSender()), "ERC1155: caller is not owner nor approved" ); address operator = _msgSender(); _beforeTokenTransfer(operator, from, to, _asSingletonArray(id), _asSingletonArray(amount), data); uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: insufficient balance for transfer"); _balances[id][from] = fromBalance - amount; _balances[id][to] += amount; emit TransferSingle(operator, from, to, id, amount); _doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data); } /** * @dev See {IERC1155-safeBatchTransferFrom}. */ function safeBatchTransferFrom( address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) public virtual override { require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); require(to != address(0), "ERC1155: transfer to the zero address"); require( from == _msgSender() || isApprovedForAll(from, _msgSender()), "ERC1155: transfer caller is not owner nor approved" ); address operator = _msgSender(); _beforeTokenTransfer(operator, from, to, ids, amounts, data); for (uint256 i = 0; i < ids.length; ++i) { uint256 id = ids[i]; uint256 amount = amounts[i]; uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: insufficient balance for transfer"); _balances[id][from] = fromBalance - amount; _balances[id][to] += amount; } emit TransferBatch(operator, from, to, ids, amounts); _doSafeBatchTransferAcceptanceCheck(operator, from, to, ids, amounts, data); } /** * @dev Sets a new URI for all token types, by relying on the token type ID * substitution mechanism * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP]. * * By this mechanism, any occurrence of the `\{id\}` substring in either the * URI or any of the amounts in the JSON file at said URI will be replaced by * clients with the token type ID. * * For example, the `https://token-cdn-domain/\{id\}.json` URI would be * interpreted by clients as * `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json` * for token type ID 0x4cce0. * * See {uri}. * * Because these URIs cannot be meaningfully represented by the {URI} event, * this function emits no events. */ function _setURI(string memory newuri) internal virtual { _uri = newuri; } /** * @dev Creates `amount` tokens of token type `id`, and assigns them to `account`. * * Emits a {TransferSingle} event. * * Requirements: * * - `account` cannot be the zero address. * - If `account` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function _mint(address account, uint256 id, uint256 amount, bytes memory data) internal virtual { require(account != address(0), "ERC1155: mint to the zero address"); address operator = _msgSender(); _beforeTokenTransfer(operator, address(0), account, _asSingletonArray(id), _asSingletonArray(amount), data); _balances[id][account] += amount; emit TransferSingle(operator, address(0), account, id, amount); _doSafeTransferAcceptanceCheck(operator, address(0), account, id, amount, data); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}. * * Requirements: * * - `ids` and `amounts` must have the same length. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function _mintBatch(address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data) internal virtual { require(to != address(0), "ERC1155: mint to the zero address"); require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); address operator = _msgSender(); _beforeTokenTransfer(operator, address(0), to, ids, amounts, data); for (uint i = 0; i < ids.length; i++) { _balances[ids[i]][to] += amounts[i]; } emit TransferBatch(operator, address(0), to, ids, amounts); _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data); } /** * @dev Destroys `amount` tokens of token type `id` from `account` * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens of token type `id`. */ function _burn(address account, uint256 id, uint256 amount) internal virtual { require(account != address(0), "ERC1155: burn from the zero address"); address operator = _msgSender(); _beforeTokenTransfer(operator, account, address(0), _asSingletonArray(id), _asSingletonArray(amount), ""); uint256 accountBalance = _balances[id][account]; require(accountBalance >= amount, "ERC1155: burn amount exceeds balance"); _balances[id][account] = accountBalance - amount; emit TransferSingle(operator, account, address(0), id, amount); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}. * * Requirements: * * - `ids` and `amounts` must have the same length. */ function _burnBatch(address account, uint256[] memory ids, uint256[] memory amounts) internal virtual { require(account != address(0), "ERC1155: burn from the zero address"); require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); address operator = _msgSender(); _beforeTokenTransfer(operator, account, address(0), ids, amounts, ""); for (uint i = 0; i < ids.length; i++) { uint256 id = ids[i]; uint256 amount = amounts[i]; uint256 accountBalance = _balances[id][account]; require(accountBalance >= amount, "ERC1155: burn amount exceeds balance"); _balances[id][account] = accountBalance - amount; } emit TransferBatch(operator, account, address(0), ids, amounts); } /** * @dev Hook that is called before any token transfer. This includes minting * and burning, as well as batched variants. * * The same hook is called on both single and batched variants. For single * transfers, the length of the `id` and `amount` arrays will be 1. * * Calling conditions (for each `id` and `amount` pair): * * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens * of token type `id` will be transferred to `to`. * - When `from` is zero, `amount` tokens of token type `id` will be minted * for `to`. * - when `to` is zero, `amount` of ``from``'s tokens of token type `id` * will be burned. * - `from` and `to` are never both zero. * - `ids` and `amounts` have the same, non-zero length. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual { } function _doSafeTransferAcceptanceCheck( address operator, address from, address to, uint256 id, uint256 amount, bytes memory data ) private { if (to.isContract()) { try IERC1155Receiver(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) { if (response != IERC1155Receiver(to).onERC1155Received.selector) { revert("ERC1155: ERC1155Receiver rejected tokens"); } } catch Error(string memory reason) { revert(reason); } catch { revert("ERC1155: transfer to non ERC1155Receiver implementer"); } } } function _doSafeBatchTransferAcceptanceCheck( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) private { if (to.isContract()) { try IERC1155Receiver(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns (bytes4 response) { if (response != IERC1155Receiver(to).onERC1155BatchReceived.selector) { revert("ERC1155: ERC1155Receiver rejected tokens"); } } catch Error(string memory reason) { revert(reason); } catch { revert("ERC1155: transfer to non ERC1155Receiver implementer"); } } } function _asSingletonArray(uint256 element) private pure returns (uint256[] memory) { uint256[] memory array = new uint256[](1); array[0] = element; return array; } } // File: @openzeppelin/contracts/token/ERC1155/extensions/ERC1155Burnable.sol pragma solidity ^0.8.0; /** * @dev Extension of {ERC1155} that allows token holders to destroy both their * own tokens and those that they have been approved to use. * * _Available since v3.1._ */ abstract contract ERC1155Burnable is ERC1155 { function burn(address account, uint256 id, uint256 value) public virtual { require( account == _msgSender() || isApprovedForAll(account, _msgSender()), "ERC1155: caller is not owner nor approved" ); _burn(account, id, value); } function burnBatch(address account, uint256[] memory ids, uint256[] memory values) public virtual { require( account == _msgSender() || isApprovedForAll(account, _msgSender()), "ERC1155: caller is not owner nor approved" ); _burnBatch(account, ids, values); } } // 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 () { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } // File: @openzeppelin/contracts/utils/Strings.sol pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant alphabet = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = alphabet[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: contracts/OwnixNFT/IOwnixERC1155.sol pragma solidity =0.8.7; /** * @title Interface for contracts conforming to Ownix ERC155 */ interface IOwnixERC1155 is IERC1155 { function getFirstTimeOwner(uint256 _tokenId) external view returns (address); } // File: contracts/OwnixNFT/OwnixNFT.sol pragma solidity =0.8.7; pragma abicoder v2; contract OwnixNFT is IOwnixERC1155, ERC1155Burnable, Ownable { uint256 private nextTokenId = 1; mapping(string => uint256) private ipfsHashToTokenId; mapping(uint256 => string) private tokenIdToIpfsHash; mapping(uint256 => address) private firstTimeOwner; address public marketAddress; event MarketAddressChanged(address marketAddress); event UriChanged(string uri); constructor() ERC1155("") { } /** * @dev mint0 new nft and approve to market * * @param _ipfsHash The IPFS hash * @param _amount the nft amount to mint */ function mintAndApproveMarket(string memory _ipfsHash, uint256 _amount) external returns (uint256) { require(_amount > 0, "Amount must be greater then zero"); require(ipfsHashToTokenId[_ipfsHash] == 0, "IPFS Hash already exists"); uint256 tokenId = nextTokenId++; if (!isApprovedForAll(msg.sender, marketAddress)) { setApprovalForAll(marketAddress, true); } ipfsHashToTokenId[_ipfsHash] = tokenId; tokenIdToIpfsHash[tokenId] = _ipfsHash; firstTimeOwner[tokenId] = msg.sender; _mint(msg.sender, tokenId, _amount, ""); return tokenId; } /** * @dev admin function to set new market address. * * @param _marketAddress address the new market to assign */ function changeMarketAddress(address _marketAddress) external onlyOwner { require( _marketAddress != address(0), "address can't be the zero address" ); marketAddress = _marketAddress; emit MarketAddressChanged(_marketAddress); } /** * @dev admin function to set new uri. * * @param _newUri the new uri */ function setURI(string memory _newUri) external onlyOwner { _setURI(_newUri); emit UriChanged(_newUri); } /** * Read APIs */ function uri(uint256 _id) public view virtual override(ERC1155) returns (string memory) { return string(abi.encodePacked(ERC1155.uri(_id), tokenIdToIpfsHash[_id], "/metadata.json")); } /** * @dev Get first time owner * @param _tokenId - uint256 of the token id * @return owner address */ function getFirstTimeOwner(uint256 _tokenId) override external view returns (address) { return firstTimeOwner[_tokenId]; } /** * @dev Get the next token Id * @return The next token id */ function getNextTokenId() external view returns (uint256) { return nextTokenId; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"marketAddress","type":"address"}],"name":"MarketAddressChanged","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":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"uri","type":"string"}],"name":"UriChanged","type":"event"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"burnBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketAddress","type":"address"}],"name":"changeMarketAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"getFirstTimeOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNextTokenId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"_ipfsHash","type":"string"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mintAndApproveMarket","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","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":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","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":"_newUri","type":"string"}],"name":"setURI","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":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
608060405260016004553480156200001657600080fd5b5060408051602081019091526000815262000031816200007b565b50600380546001600160a01b0319163390811790915560405181906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35062000177565b80516200009090600290602084019062000094565b5050565b828054620000a2906200013a565b90600052602060002090601f016020900481019282620000c6576000855562000111565b82601f10620000e157805160ff191683800117855562000111565b8280016001018555821562000111579182015b8281111562000111578251825591602001919060010190620000f4565b506200011f92915062000123565b5090565b5b808211156200011f576000815560010162000124565b600181811c908216806200014f57607f821691505b602082108114156200017157634e487b7160e01b600052602260045260246000fd5b50919050565b61256780620001876000396000f3fe608060405234801561001057600080fd5b50600436106101505760003560e01c8063715018a6116100cd578063e985e9c511610081578063f2fde38b11610066578063f2fde38b14610303578063f5298aca14610316578063fb1973521461032957600080fd5b8063e985e9c5146102b4578063f242432a146102f057600080fd5b806395623641116100b25780639562364114610286578063a22cb46514610299578063caa0f92a146102ac57600080fd5b8063715018a61461026d5780638da5cb5b1461027557600080fd5b80632eb2c2d6116101245780634e1273f4116101095780634e1273f4146101f95780636216ebf0146102195780636b20c4541461025a57600080fd5b80632eb2c2d6146101d357806335aed778146101e657600080fd5b8062fdd58e1461015557806301ffc9a71461017b57806302fe53051461019e5780630e89341c146101b3575b600080fd5b610168610163366004611edc565b61033c565b6040519081526020015b60405180910390f35b61018e61018936600461200a565b6103e5565b6040519015158152602001610172565b6101b16101ac366004612044565b610482565b005b6101c66101c13660046120c6565b61051f565b6040516101729190612317565b6101b16101e1366004611d1d565b610560565b6101b16101f4366004611ccf565b610897565b61020c610207366004611f39565b6109ac565b60405161017291906122d6565b6102426102273660046120c6565b6000908152600760205260409020546001600160a01b031690565b6040516001600160a01b039091168152602001610172565b6101b1610268366004611e2c565b610aea565b6101b1610b74565b6003546001600160a01b0316610242565b600854610242906001600160a01b031681565b6101b16102a7366004611ea0565b610c25565b600454610168565b61018e6102c2366004611cea565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205460ff1690565b6101b16102fe366004611dc7565b610d10565b6101b1610311366004611ccf565b610f41565b6101b1610324366004611f06565b611080565b610168610337366004612081565b611105565b60006001600160a01b0383166103bf5760405162461bcd60e51b815260206004820152602b60248201527f455243313135353a2062616c616e636520717565727920666f7220746865207a60448201527f65726f206164647265737300000000000000000000000000000000000000000060648201526084015b60405180910390fd5b506000908152602081815260408083206001600160a01b03949094168352929052205490565b60006001600160e01b031982167fd9b67a2600000000000000000000000000000000000000000000000000000000148061044857506001600160e01b031982167f0e89341c00000000000000000000000000000000000000000000000000000000145b8061047c57507f01ffc9a7000000000000000000000000000000000000000000000000000000006001600160e01b03198316145b92915050565b6003546001600160a01b031633146104dc5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103b6565b6104e5816112b4565b7fb1bf12e17db588c31e8fb2afdd2b3bc1ed822d68c560856fcbc75ae303fc5d14816040516105149190612317565b60405180910390a150565b606061052a826112cb565b600083815260066020908152604091829020915161054a93929101612162565b6040516020818303038152906040529050919050565b81518351146105c25760405162461bcd60e51b815260206004820152602860248201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206044820152670dad2e6dac2e8c6d60c31b60648201526084016103b6565b6001600160a01b0384166106265760405162461bcd60e51b815260206004820152602560248201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604482015264647265737360d81b60648201526084016103b6565b6001600160a01b038516331480610642575061064285336102c2565b6106b45760405162461bcd60e51b815260206004820152603260248201527f455243313135353a207472616e736665722063616c6c6572206973206e6f742060448201527f6f776e6572206e6f7220617070726f766564000000000000000000000000000060648201526084016103b6565b3360005b84518110156108295760008582815181106106d5576106d5612446565b6020026020010151905060008583815181106106f3576106f3612446565b602090810291909101810151600084815280835260408082206001600160a01b038e1683529093529190912054909150818110156107865760405162461bcd60e51b815260206004820152602a60248201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60448201526939103a3930b739b332b960b11b60648201526084016103b6565b6107908282612366565b60008085815260200190815260200160002060008c6001600160a01b03166001600160a01b03168152602001908152602001600020819055508160008085815260200190815260200160002060008b6001600160a01b03166001600160a01b03168152602001908152602001600020600082825461080e919061234e565b925050819055505050508061082290612415565b90506106b8565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516108799291906122e9565b60405180910390a461088f81878787878761135f565b505050505050565b6003546001600160a01b031633146108f15760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103b6565b6001600160a01b0381166109515760405162461bcd60e51b815260206004820152602160248201527f616464726573732063616e277420626520746865207a65726f206164647265736044820152607360f81b60648201526084016103b6565b6008805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081179091556040519081527fc314981bb8f7d3acb65f27b2fdcdc41fbfb406162a5eda08f4b11948025bb5c590602001610514565b60608151835114610a255760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e67746860448201527f206d69736d61746368000000000000000000000000000000000000000000000060648201526084016103b6565b6000835167ffffffffffffffff811115610a4157610a4161245c565b604051908082528060200260200182016040528015610a6a578160200160208202803683370190505b50905060005b8451811015610ae257610ab5858281518110610a8e57610a8e612446565b6020026020010151858381518110610aa857610aa8612446565b602002602001015161033c565b828281518110610ac757610ac7612446565b6020908102919091010152610adb81612415565b9050610a70565b509392505050565b6001600160a01b038316331480610b065750610b0683336102c2565b610b645760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260448201526808185c1c1c9bdd995960ba1b60648201526084016103b6565b610b6f838383611514565b505050565b6003546001600160a01b03163314610bce5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103b6565b6003546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a36003805473ffffffffffffffffffffffffffffffffffffffff19169055565b336001600160a01b0383161415610ca45760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c2073746174757360448201527f20666f722073656c66000000000000000000000000000000000000000000000060648201526084016103b6565b3360008181526001602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6001600160a01b038416610d745760405162461bcd60e51b815260206004820152602560248201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604482015264647265737360d81b60648201526084016103b6565b6001600160a01b038516331480610d905750610d9085336102c2565b610dee5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260448201526808185c1c1c9bdd995960ba1b60648201526084016103b6565b33610e0e818787610dfe88611756565b610e0788611756565b5050505050565b6000848152602081815260408083206001600160a01b038a16845290915290205483811015610e925760405162461bcd60e51b815260206004820152602a60248201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60448201526939103a3930b739b332b960b11b60648201526084016103b6565b610e9c8482612366565b6000868152602081815260408083206001600160a01b038c81168552925280832093909355881681529081208054869290610ed890849061234e565b909155505060408051868152602081018690526001600160a01b03808916928a821692918616917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4610f388288888888886117a1565b50505050505050565b6003546001600160a01b03163314610f9b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103b6565b6001600160a01b0381166110175760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016103b6565b6003546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a36003805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6001600160a01b03831633148061109c575061109c83336102c2565b6110fa5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260448201526808185c1c1c9bdd995960ba1b60648201526084016103b6565b610b6f8383836118ac565b60008082116111565760405162461bcd60e51b815260206004820181905260248201527f416d6f756e74206d7573742062652067726561746572207468656e207a65726f60448201526064016103b6565b6005836040516111669190612146565b9081526020016040518091039020546000146111c45760405162461bcd60e51b815260206004820152601860248201527f49504653204861736820616c726561647920657869737473000000000000000060448201526064016103b6565b60048054600091826111d583612415565b909155506008543360009081526001602090815260408083206001600160a01b039094168352929052205490915060ff1661122157600854611221906001600160a01b03166001610c25565b806005856040516112329190612146565b90815260408051602092819003830190209290925560008381526006825291909120855161126292870190611b2f565b506000818152600760209081526040808320805473ffffffffffffffffffffffffffffffffffffffff19163390811790915581519283019091529181526112ad919083908690611a2e565b9392505050565b80516112c7906002906020840190611b2f565b5050565b6060600280546112da906123ad565b80601f0160208091040260200160405190810160405280929190818152602001828054611306906123ad565b80156113535780601f1061132857610100808354040283529160200191611353565b820191906000526020600020905b81548152906001019060200180831161133657829003601f168201915b50505050509050919050565b6001600160a01b0384163b1561088f5760405163bc197c8160e01b81526001600160a01b0385169063bc197c81906113a39089908990889088908890600401612240565b602060405180830381600087803b1580156113bd57600080fd5b505af19250505080156113ed575060408051601f3d908101601f191682019092526113ea91810190612027565b60015b6114a3576113f9612472565b806308c379a01415611433575061140e61248e565b806114195750611435565b8060405162461bcd60e51b81526004016103b69190612317565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e204552433131353560448201527f526563656976657220696d706c656d656e74657200000000000000000000000060648201526084016103b6565b6001600160e01b0319811663bc197c8160e01b14610f385760405162461bcd60e51b815260206004820152602860248201527f455243313135353a204552433131353552656365697665722072656a656374656044820152676420746f6b656e7360c01b60648201526084016103b6565b6001600160a01b0383166115765760405162461bcd60e51b815260206004820152602360248201527f455243313135353a206275726e2066726f6d20746865207a65726f206164647260448201526265737360e81b60648201526084016103b6565b80518251146115d85760405162461bcd60e51b815260206004820152602860248201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206044820152670dad2e6dac2e8c6d60c31b60648201526084016103b6565b604080516020810190915260009081905233905b83518110156116f757600084828151811061160957611609612446565b60200260200101519050600084838151811061162757611627612446565b602090810291909101810151600084815280835260408082206001600160a01b038c1683529093529190912054909150818110156116b35760405162461bcd60e51b8152602060048201526024808201527f455243313135353a206275726e20616d6f756e7420657863656564732062616c604482015263616e636560e01b60648201526084016103b6565b6116bd8282612366565b6000938452602084815260408086206001600160a01b038c16875290915290932092909255508190506116ef81612415565b9150506115ec565b5060006001600160a01b0316846001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb86866040516117489291906122e9565b60405180910390a450505050565b6040805160018082528183019092526060916000919060208083019080368337019050509050828160008151811061179057611790612446565b602090810291909101015292915050565b6001600160a01b0384163b1561088f5760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e61906117e5908990899088908890889060040161229e565b602060405180830381600087803b1580156117ff57600080fd5b505af192505050801561182f575060408051601f3d908101601f1916820190925261182c91810190612027565b60015b61183b576113f9612472565b6001600160e01b0319811663f23a6e6160e01b14610f385760405162461bcd60e51b815260206004820152602860248201527f455243313135353a204552433131353552656365697665722072656a656374656044820152676420746f6b656e7360c01b60648201526084016103b6565b6001600160a01b03831661190e5760405162461bcd60e51b815260206004820152602360248201527f455243313135353a206275726e2066726f6d20746865207a65726f206164647260448201526265737360e81b60648201526084016103b6565b3361193e8185600061191f87611756565b61192887611756565b5050604080516020810190915260009052505050565b6000838152602081815260408083206001600160a01b0388168452909152902054828110156119bb5760405162461bcd60e51b8152602060048201526024808201527f455243313135353a206275726e20616d6f756e7420657863656564732062616c604482015263616e636560e01b60648201526084016103b6565b6119c58382612366565b6000858152602081815260408083206001600160a01b038a811680865291845282852095909555815189815292830188905292938616917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a45050505050565b6001600160a01b038416611a8e5760405162461bcd60e51b815260206004820152602160248201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b60648201526084016103b6565b33611a9f81600087610dfe88611756565b6000848152602081815260408083206001600160a01b038916845290915281208054859290611acf90849061234e565b909155505060408051858152602081018590526001600160a01b0380881692600092918516917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4610e07816000878787876117a1565b828054611b3b906123ad565b90600052602060002090601f016020900481019282611b5d5760008555611ba3565b82601f10611b7657805160ff1916838001178555611ba3565b82800160010185558215611ba3579182015b82811115611ba3578251825591602001919060010190611b88565b50611baf929150611bb3565b5090565b5b80821115611baf5760008155600101611bb4565b80356001600160a01b0381168114611bdf57600080fd5b919050565b600082601f830112611bf557600080fd5b81356020611c028261232a565b604051611c0f82826123e8565b8381528281019150858301600585901b87018401881015611c2f57600080fd5b60005b85811015611c4e57813584529284019290840190600101611c32565b5090979650505050505050565b600082601f830112611c6c57600080fd5b813567ffffffffffffffff811115611c8657611c8661245c565b604051611c9d601f8301601f1916602001826123e8565b818152846020838601011115611cb257600080fd5b816020850160208301376000918101602001919091529392505050565b600060208284031215611ce157600080fd5b6112ad82611bc8565b60008060408385031215611cfd57600080fd5b611d0683611bc8565b9150611d1460208401611bc8565b90509250929050565b600080600080600060a08688031215611d3557600080fd5b611d3e86611bc8565b9450611d4c60208701611bc8565b9350604086013567ffffffffffffffff80821115611d6957600080fd5b611d7589838a01611be4565b94506060880135915080821115611d8b57600080fd5b611d9789838a01611be4565b93506080880135915080821115611dad57600080fd5b50611dba88828901611c5b565b9150509295509295909350565b600080600080600060a08688031215611ddf57600080fd5b611de886611bc8565b9450611df660208701611bc8565b93506040860135925060608601359150608086013567ffffffffffffffff811115611e2057600080fd5b611dba88828901611c5b565b600080600060608486031215611e4157600080fd5b611e4a84611bc8565b9250602084013567ffffffffffffffff80821115611e6757600080fd5b611e7387838801611be4565b93506040860135915080821115611e8957600080fd5b50611e9686828701611be4565b9150509250925092565b60008060408385031215611eb357600080fd5b611ebc83611bc8565b915060208301358015158114611ed157600080fd5b809150509250929050565b60008060408385031215611eef57600080fd5b611ef883611bc8565b946020939093013593505050565b600080600060608486031215611f1b57600080fd5b611f2484611bc8565b95602085013595506040909401359392505050565b60008060408385031215611f4c57600080fd5b823567ffffffffffffffff80821115611f6457600080fd5b818501915085601f830112611f7857600080fd5b81356020611f858261232a565b604051611f9282826123e8565b8381528281019150858301600585901b870184018b1015611fb257600080fd5b600096505b84871015611fdc57611fc881611bc8565b835260019690960195918301918301611fb7565b5096505086013592505080821115611ff357600080fd5b5061200085828601611be4565b9150509250929050565b60006020828403121561201c57600080fd5b81356112ad81612518565b60006020828403121561203957600080fd5b81516112ad81612518565b60006020828403121561205657600080fd5b813567ffffffffffffffff81111561206d57600080fd5b61207984828501611c5b565b949350505050565b6000806040838503121561209457600080fd5b823567ffffffffffffffff8111156120ab57600080fd5b6120b785828601611c5b565b95602094909401359450505050565b6000602082840312156120d857600080fd5b5035919050565b600081518084526020808501945080840160005b8381101561210f578151875295820195908201906001016120f3565b509495945050505050565b6000815180845261213281602086016020860161237d565b601f01601f19169290920160200192915050565b6000825161215881846020870161237d565b9190910192915050565b600083516020612175828583890161237d565b845491840191600090600181811c908083168061219357607f831692505b8583108114156121b157634e487b7160e01b85526022600452602485fd5b8080156121c557600181146121d657612203565b60ff19851688528388019550612203565b60008b81526020902060005b858110156121fb5781548a8201529084019088016121e2565b505083880195505b5050505050612235817f2f6d657461646174612e6a736f6e0000000000000000000000000000000000008152600e0190565b979650505050505050565b60006001600160a01b03808816835280871660208401525060a0604083015261226c60a08301866120df565b828103606084015261227e81866120df565b90508281036080840152612292818561211a565b98975050505050505050565b60006001600160a01b03808816835280871660208401525084604083015283606083015260a0608083015261223560a083018461211a565b6020815260006112ad60208301846120df565b6040815260006122fc60408301856120df565b828103602084015261230e81856120df565b95945050505050565b6020815260006112ad602083018461211a565b600067ffffffffffffffff8211156123445761234461245c565b5060051b60200190565b6000821982111561236157612361612430565b500190565b60008282101561237857612378612430565b500390565b60005b83811015612398578181015183820152602001612380565b838111156123a7576000848401525b50505050565b600181811c908216806123c157607f821691505b602082108114156123e257634e487b7160e01b600052602260045260246000fd5b50919050565b601f8201601f1916810167ffffffffffffffff8111828210171561240e5761240e61245c565b6040525050565b600060001982141561242957612429612430565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b600060033d111561248b5760046000803e5060005160e01c5b90565b600060443d101561249c5790565b6040516003193d81016004833e81513d67ffffffffffffffff81602484011181841117156124cc57505050505090565b82850191508151818111156124e45750505050505090565b843d87010160208285010111156124fe5750505050505090565b61250d602082860101876123e8565b509095945050505050565b6001600160e01b03198116811461252e57600080fd5b5056fea2646970667358221220089aa604fe2ff407bbddb955f62e40bd21fed80cdf6ab6c3358575b444bc2dc364736f6c63430008070033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101505760003560e01c8063715018a6116100cd578063e985e9c511610081578063f2fde38b11610066578063f2fde38b14610303578063f5298aca14610316578063fb1973521461032957600080fd5b8063e985e9c5146102b4578063f242432a146102f057600080fd5b806395623641116100b25780639562364114610286578063a22cb46514610299578063caa0f92a146102ac57600080fd5b8063715018a61461026d5780638da5cb5b1461027557600080fd5b80632eb2c2d6116101245780634e1273f4116101095780634e1273f4146101f95780636216ebf0146102195780636b20c4541461025a57600080fd5b80632eb2c2d6146101d357806335aed778146101e657600080fd5b8062fdd58e1461015557806301ffc9a71461017b57806302fe53051461019e5780630e89341c146101b3575b600080fd5b610168610163366004611edc565b61033c565b6040519081526020015b60405180910390f35b61018e61018936600461200a565b6103e5565b6040519015158152602001610172565b6101b16101ac366004612044565b610482565b005b6101c66101c13660046120c6565b61051f565b6040516101729190612317565b6101b16101e1366004611d1d565b610560565b6101b16101f4366004611ccf565b610897565b61020c610207366004611f39565b6109ac565b60405161017291906122d6565b6102426102273660046120c6565b6000908152600760205260409020546001600160a01b031690565b6040516001600160a01b039091168152602001610172565b6101b1610268366004611e2c565b610aea565b6101b1610b74565b6003546001600160a01b0316610242565b600854610242906001600160a01b031681565b6101b16102a7366004611ea0565b610c25565b600454610168565b61018e6102c2366004611cea565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205460ff1690565b6101b16102fe366004611dc7565b610d10565b6101b1610311366004611ccf565b610f41565b6101b1610324366004611f06565b611080565b610168610337366004612081565b611105565b60006001600160a01b0383166103bf5760405162461bcd60e51b815260206004820152602b60248201527f455243313135353a2062616c616e636520717565727920666f7220746865207a60448201527f65726f206164647265737300000000000000000000000000000000000000000060648201526084015b60405180910390fd5b506000908152602081815260408083206001600160a01b03949094168352929052205490565b60006001600160e01b031982167fd9b67a2600000000000000000000000000000000000000000000000000000000148061044857506001600160e01b031982167f0e89341c00000000000000000000000000000000000000000000000000000000145b8061047c57507f01ffc9a7000000000000000000000000000000000000000000000000000000006001600160e01b03198316145b92915050565b6003546001600160a01b031633146104dc5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103b6565b6104e5816112b4565b7fb1bf12e17db588c31e8fb2afdd2b3bc1ed822d68c560856fcbc75ae303fc5d14816040516105149190612317565b60405180910390a150565b606061052a826112cb565b600083815260066020908152604091829020915161054a93929101612162565b6040516020818303038152906040529050919050565b81518351146105c25760405162461bcd60e51b815260206004820152602860248201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206044820152670dad2e6dac2e8c6d60c31b60648201526084016103b6565b6001600160a01b0384166106265760405162461bcd60e51b815260206004820152602560248201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604482015264647265737360d81b60648201526084016103b6565b6001600160a01b038516331480610642575061064285336102c2565b6106b45760405162461bcd60e51b815260206004820152603260248201527f455243313135353a207472616e736665722063616c6c6572206973206e6f742060448201527f6f776e6572206e6f7220617070726f766564000000000000000000000000000060648201526084016103b6565b3360005b84518110156108295760008582815181106106d5576106d5612446565b6020026020010151905060008583815181106106f3576106f3612446565b602090810291909101810151600084815280835260408082206001600160a01b038e1683529093529190912054909150818110156107865760405162461bcd60e51b815260206004820152602a60248201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60448201526939103a3930b739b332b960b11b60648201526084016103b6565b6107908282612366565b60008085815260200190815260200160002060008c6001600160a01b03166001600160a01b03168152602001908152602001600020819055508160008085815260200190815260200160002060008b6001600160a01b03166001600160a01b03168152602001908152602001600020600082825461080e919061234e565b925050819055505050508061082290612415565b90506106b8565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516108799291906122e9565b60405180910390a461088f81878787878761135f565b505050505050565b6003546001600160a01b031633146108f15760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103b6565b6001600160a01b0381166109515760405162461bcd60e51b815260206004820152602160248201527f616464726573732063616e277420626520746865207a65726f206164647265736044820152607360f81b60648201526084016103b6565b6008805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081179091556040519081527fc314981bb8f7d3acb65f27b2fdcdc41fbfb406162a5eda08f4b11948025bb5c590602001610514565b60608151835114610a255760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e67746860448201527f206d69736d61746368000000000000000000000000000000000000000000000060648201526084016103b6565b6000835167ffffffffffffffff811115610a4157610a4161245c565b604051908082528060200260200182016040528015610a6a578160200160208202803683370190505b50905060005b8451811015610ae257610ab5858281518110610a8e57610a8e612446565b6020026020010151858381518110610aa857610aa8612446565b602002602001015161033c565b828281518110610ac757610ac7612446565b6020908102919091010152610adb81612415565b9050610a70565b509392505050565b6001600160a01b038316331480610b065750610b0683336102c2565b610b645760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260448201526808185c1c1c9bdd995960ba1b60648201526084016103b6565b610b6f838383611514565b505050565b6003546001600160a01b03163314610bce5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103b6565b6003546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a36003805473ffffffffffffffffffffffffffffffffffffffff19169055565b336001600160a01b0383161415610ca45760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c2073746174757360448201527f20666f722073656c66000000000000000000000000000000000000000000000060648201526084016103b6565b3360008181526001602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6001600160a01b038416610d745760405162461bcd60e51b815260206004820152602560248201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604482015264647265737360d81b60648201526084016103b6565b6001600160a01b038516331480610d905750610d9085336102c2565b610dee5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260448201526808185c1c1c9bdd995960ba1b60648201526084016103b6565b33610e0e818787610dfe88611756565b610e0788611756565b5050505050565b6000848152602081815260408083206001600160a01b038a16845290915290205483811015610e925760405162461bcd60e51b815260206004820152602a60248201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60448201526939103a3930b739b332b960b11b60648201526084016103b6565b610e9c8482612366565b6000868152602081815260408083206001600160a01b038c81168552925280832093909355881681529081208054869290610ed890849061234e565b909155505060408051868152602081018690526001600160a01b03808916928a821692918616917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4610f388288888888886117a1565b50505050505050565b6003546001600160a01b03163314610f9b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103b6565b6001600160a01b0381166110175760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016103b6565b6003546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a36003805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6001600160a01b03831633148061109c575061109c83336102c2565b6110fa5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260448201526808185c1c1c9bdd995960ba1b60648201526084016103b6565b610b6f8383836118ac565b60008082116111565760405162461bcd60e51b815260206004820181905260248201527f416d6f756e74206d7573742062652067726561746572207468656e207a65726f60448201526064016103b6565b6005836040516111669190612146565b9081526020016040518091039020546000146111c45760405162461bcd60e51b815260206004820152601860248201527f49504653204861736820616c726561647920657869737473000000000000000060448201526064016103b6565b60048054600091826111d583612415565b909155506008543360009081526001602090815260408083206001600160a01b039094168352929052205490915060ff1661122157600854611221906001600160a01b03166001610c25565b806005856040516112329190612146565b90815260408051602092819003830190209290925560008381526006825291909120855161126292870190611b2f565b506000818152600760209081526040808320805473ffffffffffffffffffffffffffffffffffffffff19163390811790915581519283019091529181526112ad919083908690611a2e565b9392505050565b80516112c7906002906020840190611b2f565b5050565b6060600280546112da906123ad565b80601f0160208091040260200160405190810160405280929190818152602001828054611306906123ad565b80156113535780601f1061132857610100808354040283529160200191611353565b820191906000526020600020905b81548152906001019060200180831161133657829003601f168201915b50505050509050919050565b6001600160a01b0384163b1561088f5760405163bc197c8160e01b81526001600160a01b0385169063bc197c81906113a39089908990889088908890600401612240565b602060405180830381600087803b1580156113bd57600080fd5b505af19250505080156113ed575060408051601f3d908101601f191682019092526113ea91810190612027565b60015b6114a3576113f9612472565b806308c379a01415611433575061140e61248e565b806114195750611435565b8060405162461bcd60e51b81526004016103b69190612317565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e204552433131353560448201527f526563656976657220696d706c656d656e74657200000000000000000000000060648201526084016103b6565b6001600160e01b0319811663bc197c8160e01b14610f385760405162461bcd60e51b815260206004820152602860248201527f455243313135353a204552433131353552656365697665722072656a656374656044820152676420746f6b656e7360c01b60648201526084016103b6565b6001600160a01b0383166115765760405162461bcd60e51b815260206004820152602360248201527f455243313135353a206275726e2066726f6d20746865207a65726f206164647260448201526265737360e81b60648201526084016103b6565b80518251146115d85760405162461bcd60e51b815260206004820152602860248201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206044820152670dad2e6dac2e8c6d60c31b60648201526084016103b6565b604080516020810190915260009081905233905b83518110156116f757600084828151811061160957611609612446565b60200260200101519050600084838151811061162757611627612446565b602090810291909101810151600084815280835260408082206001600160a01b038c1683529093529190912054909150818110156116b35760405162461bcd60e51b8152602060048201526024808201527f455243313135353a206275726e20616d6f756e7420657863656564732062616c604482015263616e636560e01b60648201526084016103b6565b6116bd8282612366565b6000938452602084815260408086206001600160a01b038c16875290915290932092909255508190506116ef81612415565b9150506115ec565b5060006001600160a01b0316846001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb86866040516117489291906122e9565b60405180910390a450505050565b6040805160018082528183019092526060916000919060208083019080368337019050509050828160008151811061179057611790612446565b602090810291909101015292915050565b6001600160a01b0384163b1561088f5760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e61906117e5908990899088908890889060040161229e565b602060405180830381600087803b1580156117ff57600080fd5b505af192505050801561182f575060408051601f3d908101601f1916820190925261182c91810190612027565b60015b61183b576113f9612472565b6001600160e01b0319811663f23a6e6160e01b14610f385760405162461bcd60e51b815260206004820152602860248201527f455243313135353a204552433131353552656365697665722072656a656374656044820152676420746f6b656e7360c01b60648201526084016103b6565b6001600160a01b03831661190e5760405162461bcd60e51b815260206004820152602360248201527f455243313135353a206275726e2066726f6d20746865207a65726f206164647260448201526265737360e81b60648201526084016103b6565b3361193e8185600061191f87611756565b61192887611756565b5050604080516020810190915260009052505050565b6000838152602081815260408083206001600160a01b0388168452909152902054828110156119bb5760405162461bcd60e51b8152602060048201526024808201527f455243313135353a206275726e20616d6f756e7420657863656564732062616c604482015263616e636560e01b60648201526084016103b6565b6119c58382612366565b6000858152602081815260408083206001600160a01b038a811680865291845282852095909555815189815292830188905292938616917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a45050505050565b6001600160a01b038416611a8e5760405162461bcd60e51b815260206004820152602160248201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b60648201526084016103b6565b33611a9f81600087610dfe88611756565b6000848152602081815260408083206001600160a01b038916845290915281208054859290611acf90849061234e565b909155505060408051858152602081018590526001600160a01b0380881692600092918516917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4610e07816000878787876117a1565b828054611b3b906123ad565b90600052602060002090601f016020900481019282611b5d5760008555611ba3565b82601f10611b7657805160ff1916838001178555611ba3565b82800160010185558215611ba3579182015b82811115611ba3578251825591602001919060010190611b88565b50611baf929150611bb3565b5090565b5b80821115611baf5760008155600101611bb4565b80356001600160a01b0381168114611bdf57600080fd5b919050565b600082601f830112611bf557600080fd5b81356020611c028261232a565b604051611c0f82826123e8565b8381528281019150858301600585901b87018401881015611c2f57600080fd5b60005b85811015611c4e57813584529284019290840190600101611c32565b5090979650505050505050565b600082601f830112611c6c57600080fd5b813567ffffffffffffffff811115611c8657611c8661245c565b604051611c9d601f8301601f1916602001826123e8565b818152846020838601011115611cb257600080fd5b816020850160208301376000918101602001919091529392505050565b600060208284031215611ce157600080fd5b6112ad82611bc8565b60008060408385031215611cfd57600080fd5b611d0683611bc8565b9150611d1460208401611bc8565b90509250929050565b600080600080600060a08688031215611d3557600080fd5b611d3e86611bc8565b9450611d4c60208701611bc8565b9350604086013567ffffffffffffffff80821115611d6957600080fd5b611d7589838a01611be4565b94506060880135915080821115611d8b57600080fd5b611d9789838a01611be4565b93506080880135915080821115611dad57600080fd5b50611dba88828901611c5b565b9150509295509295909350565b600080600080600060a08688031215611ddf57600080fd5b611de886611bc8565b9450611df660208701611bc8565b93506040860135925060608601359150608086013567ffffffffffffffff811115611e2057600080fd5b611dba88828901611c5b565b600080600060608486031215611e4157600080fd5b611e4a84611bc8565b9250602084013567ffffffffffffffff80821115611e6757600080fd5b611e7387838801611be4565b93506040860135915080821115611e8957600080fd5b50611e9686828701611be4565b9150509250925092565b60008060408385031215611eb357600080fd5b611ebc83611bc8565b915060208301358015158114611ed157600080fd5b809150509250929050565b60008060408385031215611eef57600080fd5b611ef883611bc8565b946020939093013593505050565b600080600060608486031215611f1b57600080fd5b611f2484611bc8565b95602085013595506040909401359392505050565b60008060408385031215611f4c57600080fd5b823567ffffffffffffffff80821115611f6457600080fd5b818501915085601f830112611f7857600080fd5b81356020611f858261232a565b604051611f9282826123e8565b8381528281019150858301600585901b870184018b1015611fb257600080fd5b600096505b84871015611fdc57611fc881611bc8565b835260019690960195918301918301611fb7565b5096505086013592505080821115611ff357600080fd5b5061200085828601611be4565b9150509250929050565b60006020828403121561201c57600080fd5b81356112ad81612518565b60006020828403121561203957600080fd5b81516112ad81612518565b60006020828403121561205657600080fd5b813567ffffffffffffffff81111561206d57600080fd5b61207984828501611c5b565b949350505050565b6000806040838503121561209457600080fd5b823567ffffffffffffffff8111156120ab57600080fd5b6120b785828601611c5b565b95602094909401359450505050565b6000602082840312156120d857600080fd5b5035919050565b600081518084526020808501945080840160005b8381101561210f578151875295820195908201906001016120f3565b509495945050505050565b6000815180845261213281602086016020860161237d565b601f01601f19169290920160200192915050565b6000825161215881846020870161237d565b9190910192915050565b600083516020612175828583890161237d565b845491840191600090600181811c908083168061219357607f831692505b8583108114156121b157634e487b7160e01b85526022600452602485fd5b8080156121c557600181146121d657612203565b60ff19851688528388019550612203565b60008b81526020902060005b858110156121fb5781548a8201529084019088016121e2565b505083880195505b5050505050612235817f2f6d657461646174612e6a736f6e0000000000000000000000000000000000008152600e0190565b979650505050505050565b60006001600160a01b03808816835280871660208401525060a0604083015261226c60a08301866120df565b828103606084015261227e81866120df565b90508281036080840152612292818561211a565b98975050505050505050565b60006001600160a01b03808816835280871660208401525084604083015283606083015260a0608083015261223560a083018461211a565b6020815260006112ad60208301846120df565b6040815260006122fc60408301856120df565b828103602084015261230e81856120df565b95945050505050565b6020815260006112ad602083018461211a565b600067ffffffffffffffff8211156123445761234461245c565b5060051b60200190565b6000821982111561236157612361612430565b500190565b60008282101561237857612378612430565b500390565b60005b83811015612398578181015183820152602001612380565b838111156123a7576000848401525b50505050565b600181811c908216806123c157607f821691505b602082108114156123e257634e487b7160e01b600052602260045260246000fd5b50919050565b601f8201601f1916810167ffffffffffffffff8111828210171561240e5761240e61245c565b6040525050565b600060001982141561242957612429612430565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b600060033d111561248b5760046000803e5060005160e01c5b90565b600060443d101561249c5790565b6040516003193d81016004833e81513d67ffffffffffffffff81602484011181841117156124cc57505050505090565b82850191508151818111156124e45750505050505090565b843d87010160208285010111156124fe5750505050505090565b61250d602082860101876123e8565b509095945050505050565b6001600160e01b03198116811461252e57600080fd5b5056fea2646970667358221220089aa604fe2ff407bbddb955f62e40bd21fed80cdf6ab6c3358575b444bc2dc364736f6c63430008070033
Deployed Bytecode Sourcemap
37347:2541:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19859:231;;;;;;:::i;:::-;;:::i;:::-;;;20593:25:1;;;20581:2;20566:18;19859:231:0;;;;;;;;18895:297;;;;;;:::i;:::-;;:::i;:::-;;;12984:14:1;;12977:22;12959:41;;12947:2;12932:18;18895:297:0;12819:187:1;39071:118:0;;;;;;:::i;:::-;;:::i;:::-;;39227:220;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;22562:1239::-;;;;;;:::i;:::-;;:::i;38690:280::-;;;;;;:::i;:::-;;:::i;20256:549::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;39576:131::-;;;;;;:::i;:::-;39653:7;39677:24;;;:14;:24;;;;;;-1:-1:-1;;;;;39677:24:0;;39576:131;;;;-1:-1:-1;;;;;10574:55:1;;;10556:74;;10544:2;10529:18;39576:131:0;10410:226:1;32275:319:0;;;;;;:::i;:::-;;:::i;34346:148::-;;;:::i;33695:87::-;33768:6;;-1:-1:-1;;;;;33768:6:0;33695:87;;37620:28;;;;;-1:-1:-1;;;;;37620:28:0;;;20878:311;;;;;;:::i;:::-;;:::i;39794:91::-;39868:11;;39794:91;;21261:168;;;;;;:::i;:::-;-1:-1:-1;;;;;21384:27:0;;;21360:4;21384:27;;;:18;:27;;;;;;;;:37;;;;;;;;;;;;;;;21261:168;21501:984;;;;;;:::i;:::-;;:::i;34649:244::-;;;;;;:::i;:::-;;:::i;31980:287::-;;;;;;:::i;:::-;;:::i;37930:620::-;;;;;;:::i;:::-;;:::i;19859:231::-;19945:7;-1:-1:-1;;;;;19973:21:0;;19965:77;;;;-1:-1:-1;;;19965:77:0;;14669:2:1;19965:77:0;;;14651:21:1;14708:2;14688:18;;;14681:30;14747:34;14727:18;;;14720:62;14818:13;14798:18;;;14791:41;14849:19;;19965:77:0;;;;;;;;;-1:-1:-1;20060:9:0;:13;;;;;;;;;;;-1:-1:-1;;;;;20060:22:0;;;;;;;;;;;;19859:231::o;18895:297::-;18997:4;-1:-1:-1;;;;;;19021:41:0;;19036:26;19021:41;;:110;;-1:-1:-1;;;;;;;19079:52:0;;19094:37;19079:52;19021:110;:163;;;-1:-1:-1;17837:25:0;-1:-1:-1;;;;;;17822:40:0;;;19148:36;19014:170;18895:297;-1:-1:-1;;18895:297:0:o;39071:118::-;33768:6;;-1:-1:-1;;;;;33768:6:0;16647:10;33915:23;33907:68;;;;-1:-1:-1;;;33907:68:0;;18296:2:1;33907:68:0;;;18278:21:1;;;18315:18;;;18308:30;18374:34;18354:18;;;18347:62;18426:18;;33907:68:0;18094:356:1;33907:68:0;39136:16:::1;39144:7;39136;:16::i;:::-;39164:19;39175:7;39164:19;;;;;;:::i;:::-;;;;;;;;39071:118:::0;:::o;39227:220::-;39325:13;39381:16;39393:3;39381:11;:16::i;:::-;39399:22;;;;:17;:22;;;;;;;;;39364:76;;;;;39399:22;39364:76;;:::i;:::-;;;;;;;;;;;;;39350:91;;39227:220;;;:::o;22562:1239::-;22827:7;:14;22813:3;:10;:28;22805:81;;;;-1:-1:-1;;;22805:81:0;;19838:2:1;22805:81:0;;;19820:21:1;19877:2;19857:18;;;19850:30;19916:34;19896:18;;;19889:62;-1:-1:-1;;;19967:18:1;;;19960:38;20015:19;;22805:81:0;19636:404:1;22805:81:0;-1:-1:-1;;;;;22905:16:0;;22897:66;;;;-1:-1:-1;;;22897:66:0;;16303:2:1;22897:66:0;;;16285:21:1;16342:2;16322:18;;;16315:30;16381:34;16361:18;;;16354:62;-1:-1:-1;;;16432:18:1;;;16425:35;16477:19;;22897:66:0;16101:401:1;22897:66:0;-1:-1:-1;;;;;22996:20:0;;16647:10;22996:20;;:60;;-1:-1:-1;23020:36:0;23037:4;16647:10;21261:168;:::i;23020:36::-;22974:160;;;;-1:-1:-1;;;22974:160:0;;16709:2:1;22974:160:0;;;16691:21:1;16748:2;16728:18;;;16721:30;16787:34;16767:18;;;16760:62;16858:20;16838:18;;;16831:48;16896:19;;22974:160:0;16507:414:1;22974:160:0;16647:10;23147:16;23264:377;23288:3;:10;23284:1;:14;23264:377;;;23320:10;23333:3;23337:1;23333:6;;;;;;;;:::i;:::-;;;;;;;23320:19;;23354:14;23371:7;23379:1;23371:10;;;;;;;;:::i;:::-;;;;;;;;;;;;23398:19;23420:13;;;;;;;;;;-1:-1:-1;;;;;23420:19:0;;;;;;;;;;;;23371:10;;-1:-1:-1;23462:21:0;;;;23454:76;;;;-1:-1:-1;;;23454:76:0;;17885:2:1;23454:76:0;;;17867:21:1;17924:2;17904:18;;;17897:30;17963:34;17943:18;;;17936:62;-1:-1:-1;;;18014:18:1;;;18007:40;18064:19;;23454:76:0;17683:406:1;23454:76:0;23567:20;23581:6;23567:11;:20;:::i;:::-;23545:9;:13;23555:2;23545:13;;;;;;;;;;;:19;23559:4;-1:-1:-1;;;;;23545:19:0;-1:-1:-1;;;;;23545:19:0;;;;;;;;;;;;:42;;;;23623:6;23602:9;:13;23612:2;23602:13;;;;;;;;;;;:17;23616:2;-1:-1:-1;;;;;23602:17:0;-1:-1:-1;;;;;23602:17:0;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;23305:336;;;23300:3;;;;:::i;:::-;;;23264:377;;;;23688:2;-1:-1:-1;;;;;23658:47:0;23682:4;-1:-1:-1;;;;;23658:47:0;23672:8;-1:-1:-1;;;;;23658:47:0;;23692:3;23697:7;23658:47;;;;;;;:::i;:::-;;;;;;;;23718:75;23754:8;23764:4;23770:2;23774:3;23779:7;23788:4;23718:35;:75::i;:::-;22794:1007;22562:1239;;;;;:::o;38690:280::-;33768:6;;-1:-1:-1;;;;;33768:6:0;16647:10;33915:23;33907:68;;;;-1:-1:-1;;;33907:68:0;;18296:2:1;33907:68:0;;;18278:21:1;;;18315:18;;;18308:30;18374:34;18354:18;;;18347:62;18426:18;;33907:68:0;18094:356:1;33907:68:0;-1:-1:-1;;;;;38798:28:0;::::1;38782:95;;;::::0;-1:-1:-1;;;38782:95:0;;14267:2:1;38782:95:0::1;::::0;::::1;14249:21:1::0;14306:2;14286:18;;;14279:30;14345:34;14325:18;;;14318:62;-1:-1:-1;;;14396:18:1;;;14389:31;14437:19;;38782:95:0::1;14065:397:1::0;38782:95:0::1;38886:13;:30:::0;;-1:-1:-1;;38886:30:0::1;-1:-1:-1::0;;;;;38886:30:0;::::1;::::0;;::::1;::::0;;;38928:36:::1;::::0;10556:74:1;;;38928:36:0::1;::::0;10544:2:1;10529:18;38928:36:0::1;10410:226:1::0;20256:549:0;20437:16;20498:3;:10;20479:8;:15;:29;20471:83;;;;-1:-1:-1;;;20471:83:0;;19428:2:1;20471:83:0;;;19410:21:1;19467:2;19447:18;;;19440:30;19506:34;19486:18;;;19479:62;19577:11;19557:18;;;19550:39;19606:19;;20471:83:0;19226:405:1;20471:83:0;20567:30;20614:8;:15;20600:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20600:30:0;;20567:63;;20648:9;20643:122;20667:8;:15;20663:1;:19;20643:122;;;20723:30;20733:8;20742:1;20733:11;;;;;;;;:::i;:::-;;;;;;;20746:3;20750:1;20746:6;;;;;;;;:::i;:::-;;;;;;;20723:9;:30::i;:::-;20704:13;20718:1;20704:16;;;;;;;;:::i;:::-;;;;;;;;;;:49;20684:3;;;:::i;:::-;;;20643:122;;;-1:-1:-1;20784:13:0;20256:549;-1:-1:-1;;;20256:549:0:o;32275:319::-;-1:-1:-1;;;;;32406:23:0;;16647:10;32406:23;;:66;;-1:-1:-1;32433:39:0;32450:7;16647:10;21261:168;:::i;32433:39::-;32384:157;;;;-1:-1:-1;;;32384:157:0;;15893:2:1;32384:157:0;;;15875:21:1;15932:2;15912:18;;;15905:30;15971:34;15951:18;;;15944:62;-1:-1:-1;;;16022:18:1;;;16015:39;16071:19;;32384:157:0;15691:405:1;32384:157:0;32554:32;32565:7;32574:3;32579:6;32554:10;:32::i;:::-;32275:319;;;:::o;34346:148::-;33768:6;;-1:-1:-1;;;;;33768:6:0;16647:10;33915:23;33907:68;;;;-1:-1:-1;;;33907:68:0;;18296:2:1;33907:68:0;;;18278:21:1;;;18315:18;;;18308:30;18374:34;18354:18;;;18347:62;18426:18;;33907:68:0;18094:356:1;33907:68:0;34437:6:::1;::::0;34416:40:::1;::::0;34453:1:::1;::::0;-1:-1:-1;;;;;34437:6:0::1;::::0;34416:40:::1;::::0;34453:1;;34416:40:::1;34467:6;:19:::0;;-1:-1:-1;;34467:19:0::1;::::0;;34346:148::o;20878:311::-;16647:10;-1:-1:-1;;;;;20981:24:0;;;;20973:78;;;;-1:-1:-1;;;20973:78:0;;19018:2:1;20973:78:0;;;19000:21:1;19057:2;19037:18;;;19030:30;19096:34;19076:18;;;19069:62;19167:11;19147:18;;;19140:39;19196:19;;20973:78:0;18816:405:1;20973:78:0;16647:10;21064:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;21064:42:0;;;;;;;;;;;;:53;;-1:-1:-1;;21064:53:0;;;;;;;;;;21133:48;;12959:41:1;;;21064:42:0;;16647:10;21133:48;;12932:18:1;21133:48:0;;;;;;;20878:311;;:::o;21501:984::-;-1:-1:-1;;;;;21727:16:0;;21719:66;;;;-1:-1:-1;;;21719:66:0;;16303:2:1;21719:66:0;;;16285:21:1;16342:2;16322:18;;;16315:30;16381:34;16361:18;;;16354:62;-1:-1:-1;;;16432:18:1;;;16425:35;16477:19;;21719:66:0;16101:401:1;21719:66:0;-1:-1:-1;;;;;21818:20:0;;16647:10;21818:20;;:60;;-1:-1:-1;21842:36:0;21859:4;16647:10;21261:168;:::i;21842:36::-;21796:151;;;;-1:-1:-1;;;21796:151:0;;15893:2:1;21796:151:0;;;15875:21:1;15932:2;15912:18;;;15905:30;15971:34;15951:18;;;15944:62;-1:-1:-1;;;16022:18:1;;;16015:39;16071:19;;21796:151:0;15691:405:1;21796:151:0;16647:10;22004:96;16647:10;22035:4;22041:2;22045:21;22063:2;22045:17;:21::i;:::-;22068:25;22086:6;22068:17;:25::i;:::-;22562:1239;;;;;;22004:96;22113:19;22135:13;;;;;;;;;;;-1:-1:-1;;;;;22135:19:0;;;;;;;;;;22173:21;;;;22165:76;;;;-1:-1:-1;;;22165:76:0;;17885:2:1;22165:76:0;;;17867:21:1;17924:2;17904:18;;;17897:30;17963:34;17943:18;;;17936:62;-1:-1:-1;;;18014:18:1;;;18007:40;18064:19;;22165:76:0;17683:406:1;22165:76:0;22274:20;22288:6;22274:11;:20;:::i;:::-;22252:9;:13;;;;;;;;;;;-1:-1:-1;;;;;22252:19:0;;;;;;;;;;:42;;;;22305:17;;;;;;;:27;;22326:6;;22252:9;22305:27;;22326:6;;22305:27;:::i;:::-;;;;-1:-1:-1;;22350:46:0;;;20803:25:1;;;20859:2;20844:18;;20837:34;;;-1:-1:-1;;;;;22350:46:0;;;;;;;;;;;;;;20776:18:1;22350:46:0;;;;;;;22409:68;22440:8;22450:4;22456:2;22460;22464:6;22472:4;22409:30;:68::i;:::-;21708:777;;21501:984;;;;;:::o;34649:244::-;33768:6;;-1:-1:-1;;;;;33768:6:0;16647:10;33915:23;33907:68;;;;-1:-1:-1;;;33907:68:0;;18296:2:1;33907:68:0;;;18278:21:1;;;18315:18;;;18308:30;18374:34;18354:18;;;18347:62;18426:18;;33907:68:0;18094:356:1;33907:68:0;-1:-1:-1;;;;;34738:22:0;::::1;34730:73;;;::::0;-1:-1:-1;;;34730:73:0;;15081:2:1;34730:73:0::1;::::0;::::1;15063:21:1::0;15120:2;15100:18;;;15093:30;15159:34;15139:18;;;15132:62;15230:8;15210:18;;;15203:36;15256:19;;34730:73:0::1;14879:402:1::0;34730:73:0::1;34840:6;::::0;34819:38:::1;::::0;-1:-1:-1;;;;;34819:38:0;;::::1;::::0;34840:6:::1;::::0;34819:38:::1;::::0;34840:6:::1;::::0;34819:38:::1;34868:6;:17:::0;;-1:-1:-1;;34868:17:0::1;-1:-1:-1::0;;;;;34868:17:0;;;::::1;::::0;;;::::1;::::0;;34649:244::o;31980:287::-;-1:-1:-1;;;;;32086:23:0;;16647:10;32086:23;;:66;;-1:-1:-1;32113:39:0;32130:7;16647:10;21261:168;:::i;32113:39::-;32064:157;;;;-1:-1:-1;;;32064:157:0;;15893:2:1;32064:157:0;;;15875:21:1;15932:2;15912:18;;;15905:30;15971:34;15951:18;;;15944:62;-1:-1:-1;;;16022:18:1;;;16015:39;16071:19;;32064:157:0;15691:405:1;32064:157:0;32234:25;32240:7;32249:2;32253:5;32234;:25::i;37930:620::-;38030:7;38067:1;38057:7;:11;38049:56;;;;-1:-1:-1;;;38049:56:0;;18657:2:1;38049:56:0;;;18639:21:1;;;18676:18;;;18669:30;18735:34;18715:18;;;18708:62;18787:18;;38049:56:0;18455:356:1;38049:56:0;38120:17;38138:9;38120:28;;;;;;:::i;:::-;;;;;;;;;;;;;;38152:1;38120:33;38112:70;;;;-1:-1:-1;;;38112:70:0;;17532:2:1;38112:70:0;;;17514:21:1;17571:2;17551:18;;;17544:30;17610:26;17590:18;;;17583:54;17654:18;;38112:70:0;17330:348:1;38112:70:0;38210:11;:13;;38192:15;;;38210:13;;;:::i;:::-;;;;-1:-1:-1;38266:13:0;;38254:10;21360:4;21384:27;;;:18;:27;;;;;;;;-1:-1:-1;;;;;38266:13:0;;;21384:37;;;;;;;38192:31;;-1:-1:-1;21384:37:0;;38232:105;;38309:13;;38291:38;;-1:-1:-1;;;;;38309:13:0;;38291:17;:38::i;:::-;38376:7;38345:17;38363:9;38345:28;;;;;;:::i;:::-;;;;;;;;;;;;;;;;:38;;;;38390:26;;;;:17;:26;;;;;;:38;;;;;;;;:::i;:::-;-1:-1:-1;38437:23:0;;;;:14;:23;;;;;;;;:36;;-1:-1:-1;;38437:36:0;38463:10;38437:36;;;;;;38482:39;;;;;;;;;;;;;38463:10;38452:7;;38509;;38482:5;:39::i;:::-;38537:7;37930:620;-1:-1:-1;;;37930:620:0:o;24645:88::-;24712:13;;;;:4;;:13;;;;;:::i;:::-;;24645:88;:::o;19603:105::-;19663:13;19696:4;19689:11;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19603:105;;;:::o;30618:799::-;-1:-1:-1;;;;;30872:13:0;;9051:20;9090:8;30868:542;;30908:79;;-1:-1:-1;;;30908:79:0;;-1:-1:-1;;;;;30908:43:0;;;;;:79;;30952:8;;30962:4;;30968:3;;30973:7;;30982:4;;30908:79;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30908:79:0;;;;;;;;-1:-1:-1;;30908:79:0;;;;;;;;;;;;:::i;:::-;;;30904:495;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;31272:6;31265:14;;-1:-1:-1;;;31265:14:0;;;;;;;;:::i;30904:495::-;;;31321:62;;-1:-1:-1;;;31321:62:0;;13437:2:1;31321:62:0;;;13419:21:1;13476:2;13456:18;;;13449:30;13515:34;13495:18;;;13488:62;13586:22;13566:18;;;13559:50;13626:19;;31321:62:0;13235:416:1;30904:495:0;-1:-1:-1;;;;;;31037:64:0;;-1:-1:-1;;;31037:64:0;31033:163;;31126:50;;-1:-1:-1;;;31126:50:0;;13858:2:1;31126:50:0;;;13840:21:1;13897:2;13877:18;;;13870:30;13936:34;13916:18;;;13909:62;-1:-1:-1;;;13987:18:1;;;13980:38;14035:19;;31126:50:0;13656:404:1;27802:837:0;-1:-1:-1;;;;;27923:21:0;;27915:69;;;;-1:-1:-1;;;27915:69:0;;17128:2:1;27915:69:0;;;17110:21:1;17167:2;17147:18;;;17140:30;17206:34;17186:18;;;17179:62;-1:-1:-1;;;17257:18:1;;;17250:33;17300:19;;27915:69:0;16926:399:1;27915:69:0;28017:7;:14;28003:3;:10;:28;27995:81;;;;-1:-1:-1;;;27995:81:0;;19838:2:1;27995:81:0;;;19820:21:1;19877:2;19857:18;;;19850:30;19916:34;19896:18;;;19889:62;-1:-1:-1;;;19967:18:1;;;19960:38;20015:19;;27995:81:0;19636:404:1;27995:81:0;28133:69;;;;;;;;;28089:16;28133:69;;;;16647:10;;28215:341;28236:3;:10;28232:1;:14;28215:341;;;28268:10;28281:3;28285:1;28281:6;;;;;;;;:::i;:::-;;;;;;;28268:19;;28302:14;28319:7;28327:1;28319:10;;;;;;;;:::i;:::-;;;;;;;;;;;;28346:22;28371:13;;;;;;;;;;-1:-1:-1;;;;;28371:22:0;;;;;;;;;;;;28319:10;;-1:-1:-1;28416:24:0;;;;28408:73;;;;-1:-1:-1;;;28408:73:0;;15488:2:1;28408:73:0;;;15470:21:1;15527:2;15507:18;;;15500:30;15566:34;15546:18;;;15539:62;-1:-1:-1;;;15617:18:1;;;15610:34;15661:19;;28408:73:0;15286:400:1;28408:73:0;28521:23;28538:6;28521:14;:23;:::i;:::-;28496:9;:13;;;;;;;;;;;-1:-1:-1;;;;;28496:22:0;;;;;;;;;;:48;;;;-1:-1:-1;28248:3:0;;-1:-1:-1;28248:3:0;;;:::i;:::-;;;;28215:341;;;;28614:1;-1:-1:-1;;;;;28573:58:0;28597:7;-1:-1:-1;;;;;28573:58:0;28587:8;-1:-1:-1;;;;;28573:58:0;;28618:3;28623:7;28573:58;;;;;;;:::i;:::-;;;;;;;;27904:735;27802:837;;;:::o;31425:198::-;31545:16;;;31559:1;31545:16;;;;;;;;;31491;;31520:22;;31545:16;;;;;;;;;;;;-1:-1:-1;31545:16:0;31520:41;;31583:7;31572:5;31578:1;31572:8;;;;;;;;:::i;:::-;;;;;;;;;;:18;31610:5;31425:198;-1:-1:-1;;31425:198:0:o;29848:762::-;-1:-1:-1;;;;;30077:13:0;;9051:20;9090:8;30073:530;;30113:72;;-1:-1:-1;;;30113:72:0;;-1:-1:-1;;;;;30113:38:0;;;;;:72;;30152:8;;30162:4;;30168:2;;30172:6;;30180:4;;30113:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30113:72:0;;;;;;;;-1:-1:-1;;30113:72:0;;;;;;;;;;;;:::i;:::-;;;30109:483;;;;:::i;:::-;-1:-1:-1;;;;;;30235:59:0;;-1:-1:-1;;;30235:59:0;30231:158;;30319:50;;-1:-1:-1;;;30319:50:0;;13858:2:1;30319:50:0;;;13840:21:1;13897:2;13877:18;;;13870:30;13936:34;13916:18;;;13909:62;-1:-1:-1;;;13987:18:1;;;13980:38;14035:19;;30319:50:0;13656:404:1;26994:605:0;-1:-1:-1;;;;;27090:21:0;;27082:69;;;;-1:-1:-1;;;27082:69:0;;17128:2:1;27082:69:0;;;17110:21:1;17167:2;17147:18;;;17140:30;17206:34;17186:18;;;17179:62;-1:-1:-1;;;17257:18:1;;;17250:33;17300:19;;27082:69:0;16926:399:1;27082:69:0;16647:10;27208:105;16647:10;27239:7;27164:16;27260:21;27278:2;27260:17;:21::i;:::-;27283:25;27301:6;27283:17;:25::i;:::-;-1:-1:-1;;27208:105:0;;;;;;;;;-1:-1:-1;27208:105:0;;-1:-1:-1;;;22562:1239:0;27208:105;27326:22;27351:13;;;;;;;;;;;-1:-1:-1;;;;;27351:22:0;;;;;;;;;;27392:24;;;;27384:73;;;;-1:-1:-1;;;27384:73:0;;15488:2:1;27384:73:0;;;15470:21:1;15527:2;15507:18;;;15500:30;15566:34;15546:18;;;15539:62;-1:-1:-1;;;15617:18:1;;;15610:34;15661:19;;27384:73:0;15286:400:1;27384:73:0;27493:23;27510:6;27493:14;:23;:::i;:::-;27468:9;:13;;;;;;;;;;;-1:-1:-1;;;;;27468:22:0;;;;;;;;;;;;:48;;;;27534:57;;20803:25:1;;;20844:18;;;20837:34;;;27468:9:0;;27534:57;;;;;20776:18:1;27534:57:0;;;;;;;27071:528;;26994:605;;;:::o;25134:556::-;-1:-1:-1;;;;;25249:21:0;;25241:67;;;;-1:-1:-1;;;25241:67:0;;20247:2:1;25241:67:0;;;20229:21:1;20286:2;20266:18;;;20259:30;20325:34;20305:18;;;20298:62;-1:-1:-1;;;20376:18:1;;;20369:31;20417:19;;25241:67:0;20045:397:1;25241:67:0;16647:10;25365:107;16647:10;25321:16;25408:7;25417:21;25435:2;25417:17;:21::i;25365:107::-;25485:9;:13;;;;;;;;;;;-1:-1:-1;;;;;25485:22:0;;;;;;;;;:32;;25511:6;;25485:9;:32;;25511:6;;25485:32;:::i;:::-;;;;-1:-1:-1;;25533:57:0;;;20803:25:1;;;20859:2;20844:18;;20837:34;;;-1:-1:-1;;;;;25533:57:0;;;;25566:1;;25533:57;;;;;;20776:18:1;25533:57:0;;;;;;;25603:79;25634:8;25652:1;25656:7;25665:2;25669:6;25677:4;25603:30;:79::i;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:196:1;82:20;;-1:-1:-1;;;;;131:54:1;;121:65;;111:93;;200:1;197;190:12;111:93;14:196;;;:::o;215:735::-;269:5;322:3;315:4;307:6;303:17;299:27;289:55;;340:1;337;330:12;289:55;376:6;363:20;402:4;425:43;465:2;425:43;:::i;:::-;497:2;491:9;509:31;537:2;529:6;509:31;:::i;:::-;575:18;;;609:15;;;;-1:-1:-1;644:15:1;;;694:1;690:10;;;678:23;;674:32;;671:41;-1:-1:-1;668:61:1;;;725:1;722;715:12;668:61;747:1;757:163;771:2;768:1;765:9;757:163;;;828:17;;816:30;;866:12;;;;898;;;;789:1;782:9;757:163;;;-1:-1:-1;938:6:1;;215:735;-1:-1:-1;;;;;;;215:735:1:o;955:555::-;997:5;1050:3;1043:4;1035:6;1031:17;1027:27;1017:55;;1068:1;1065;1058:12;1017:55;1104:6;1091:20;1130:18;1126:2;1123:26;1120:52;;;1152:18;;:::i;:::-;1201:2;1195:9;1213:67;1268:2;1249:13;;-1:-1:-1;;1245:27:1;1274:4;1241:38;1195:9;1213:67;:::i;:::-;1304:2;1296:6;1289:18;1350:3;1343:4;1338:2;1330:6;1326:15;1322:26;1319:35;1316:55;;;1367:1;1364;1357:12;1316:55;1431:2;1424:4;1416:6;1412:17;1405:4;1397:6;1393:17;1380:54;1478:1;1454:15;;;1471:4;1450:26;1443:37;;;;1458:6;955:555;-1:-1:-1;;;955:555:1:o;1515:186::-;1574:6;1627:2;1615:9;1606:7;1602:23;1598:32;1595:52;;;1643:1;1640;1633:12;1595:52;1666:29;1685:9;1666:29;:::i;1706:260::-;1774:6;1782;1835:2;1823:9;1814:7;1810:23;1806:32;1803:52;;;1851:1;1848;1841:12;1803:52;1874:29;1893:9;1874:29;:::i;:::-;1864:39;;1922:38;1956:2;1945:9;1941:18;1922:38;:::i;:::-;1912:48;;1706:260;;;;;:::o;1971:943::-;2125:6;2133;2141;2149;2157;2210:3;2198:9;2189:7;2185:23;2181:33;2178:53;;;2227:1;2224;2217:12;2178:53;2250:29;2269:9;2250:29;:::i;:::-;2240:39;;2298:38;2332:2;2321:9;2317:18;2298:38;:::i;:::-;2288:48;;2387:2;2376:9;2372:18;2359:32;2410:18;2451:2;2443:6;2440:14;2437:34;;;2467:1;2464;2457:12;2437:34;2490:61;2543:7;2534:6;2523:9;2519:22;2490:61;:::i;:::-;2480:71;;2604:2;2593:9;2589:18;2576:32;2560:48;;2633:2;2623:8;2620:16;2617:36;;;2649:1;2646;2639:12;2617:36;2672:63;2727:7;2716:8;2705:9;2701:24;2672:63;:::i;:::-;2662:73;;2788:3;2777:9;2773:19;2760:33;2744:49;;2818:2;2808:8;2805:16;2802:36;;;2834:1;2831;2824:12;2802:36;;2857:51;2900:7;2889:8;2878:9;2874:24;2857:51;:::i;:::-;2847:61;;;1971:943;;;;;;;;:::o;2919:606::-;3023:6;3031;3039;3047;3055;3108:3;3096:9;3087:7;3083:23;3079:33;3076:53;;;3125:1;3122;3115:12;3076:53;3148:29;3167:9;3148:29;:::i;:::-;3138:39;;3196:38;3230:2;3219:9;3215:18;3196:38;:::i;:::-;3186:48;;3281:2;3270:9;3266:18;3253:32;3243:42;;3332:2;3321:9;3317:18;3304:32;3294:42;;3387:3;3376:9;3372:19;3359:33;3415:18;3407:6;3404:30;3401:50;;;3447:1;3444;3437:12;3401:50;3470:49;3511:7;3502:6;3491:9;3487:22;3470:49;:::i;3530:669::-;3657:6;3665;3673;3726:2;3714:9;3705:7;3701:23;3697:32;3694:52;;;3742:1;3739;3732:12;3694:52;3765:29;3784:9;3765:29;:::i;:::-;3755:39;;3845:2;3834:9;3830:18;3817:32;3868:18;3909:2;3901:6;3898:14;3895:34;;;3925:1;3922;3915:12;3895:34;3948:61;4001:7;3992:6;3981:9;3977:22;3948:61;:::i;:::-;3938:71;;4062:2;4051:9;4047:18;4034:32;4018:48;;4091:2;4081:8;4078:16;4075:36;;;4107:1;4104;4097:12;4075:36;;4130:63;4185:7;4174:8;4163:9;4159:24;4130:63;:::i;:::-;4120:73;;;3530:669;;;;;:::o;4204:347::-;4269:6;4277;4330:2;4318:9;4309:7;4305:23;4301:32;4298:52;;;4346:1;4343;4336:12;4298:52;4369:29;4388:9;4369:29;:::i;:::-;4359:39;;4448:2;4437:9;4433:18;4420:32;4495:5;4488:13;4481:21;4474:5;4471:32;4461:60;;4517:1;4514;4507:12;4461:60;4540:5;4530:15;;;4204:347;;;;;:::o;4556:254::-;4624:6;4632;4685:2;4673:9;4664:7;4660:23;4656:32;4653:52;;;4701:1;4698;4691:12;4653:52;4724:29;4743:9;4724:29;:::i;:::-;4714:39;4800:2;4785:18;;;;4772:32;;-1:-1:-1;;;4556:254:1:o;4815:322::-;4892:6;4900;4908;4961:2;4949:9;4940:7;4936:23;4932:32;4929:52;;;4977:1;4974;4967:12;4929:52;5000:29;5019:9;5000:29;:::i;:::-;4990:39;5076:2;5061:18;;5048:32;;-1:-1:-1;5127:2:1;5112:18;;;5099:32;;4815:322;-1:-1:-1;;;4815:322:1:o;5142:1219::-;5260:6;5268;5321:2;5309:9;5300:7;5296:23;5292:32;5289:52;;;5337:1;5334;5327:12;5289:52;5377:9;5364:23;5406:18;5447:2;5439:6;5436:14;5433:34;;;5463:1;5460;5453:12;5433:34;5501:6;5490:9;5486:22;5476:32;;5546:7;5539:4;5535:2;5531:13;5527:27;5517:55;;5568:1;5565;5558:12;5517:55;5604:2;5591:16;5626:4;5649:43;5689:2;5649:43;:::i;:::-;5721:2;5715:9;5733:31;5761:2;5753:6;5733:31;:::i;:::-;5799:18;;;5833:15;;;;-1:-1:-1;5868:11:1;;;5910:1;5906:10;;;5898:19;;5894:28;;5891:41;-1:-1:-1;5888:61:1;;;5945:1;5942;5935:12;5888:61;5967:1;5958:10;;5977:169;5991:2;5988:1;5985:9;5977:169;;;6048:23;6067:3;6048:23;:::i;:::-;6036:36;;6009:1;6002:9;;;;;6092:12;;;;6124;;5977:169;;;-1:-1:-1;6165:6:1;-1:-1:-1;;6209:18:1;;6196:32;;-1:-1:-1;;6240:16:1;;;6237:36;;;6269:1;6266;6259:12;6237:36;;6292:63;6347:7;6336:8;6325:9;6321:24;6292:63;:::i;:::-;6282:73;;;5142:1219;;;;;:::o;6366:245::-;6424:6;6477:2;6465:9;6456:7;6452:23;6448:32;6445:52;;;6493:1;6490;6483:12;6445:52;6532:9;6519:23;6551:30;6575:5;6551:30;:::i;6616:249::-;6685:6;6738:2;6726:9;6717:7;6713:23;6709:32;6706:52;;;6754:1;6751;6744:12;6706:52;6786:9;6780:16;6805:30;6829:5;6805:30;:::i;6870:321::-;6939:6;6992:2;6980:9;6971:7;6967:23;6963:32;6960:52;;;7008:1;7005;6998:12;6960:52;7048:9;7035:23;7081:18;7073:6;7070:30;7067:50;;;7113:1;7110;7103:12;7067:50;7136:49;7177:7;7168:6;7157:9;7153:22;7136:49;:::i;:::-;7126:59;6870:321;-1:-1:-1;;;;6870:321:1:o;7196:389::-;7274:6;7282;7335:2;7323:9;7314:7;7310:23;7306:32;7303:52;;;7351:1;7348;7341:12;7303:52;7391:9;7378:23;7424:18;7416:6;7413:30;7410:50;;;7456:1;7453;7446:12;7410:50;7479:49;7520:7;7511:6;7500:9;7496:22;7479:49;:::i;:::-;7469:59;7575:2;7560:18;;;;7547:32;;-1:-1:-1;;;;7196:389:1:o;7590:180::-;7649:6;7702:2;7690:9;7681:7;7677:23;7673:32;7670:52;;;7718:1;7715;7708:12;7670:52;-1:-1:-1;7741:23:1;;7590:180;-1:-1:-1;7590:180:1:o;7775:435::-;7828:3;7866:5;7860:12;7893:6;7888:3;7881:19;7919:4;7948:2;7943:3;7939:12;7932:19;;7985:2;7978:5;7974:14;8006:1;8016:169;8030:6;8027:1;8024:13;8016:169;;;8091:13;;8079:26;;8125:12;;;;8160:15;;;;8052:1;8045:9;8016:169;;;-1:-1:-1;8201:3:1;;7775:435;-1:-1:-1;;;;;7775:435:1:o;8215:257::-;8256:3;8294:5;8288:12;8321:6;8316:3;8309:19;8337:63;8393:6;8386:4;8381:3;8377:14;8370:4;8363:5;8359:16;8337:63;:::i;:::-;8454:2;8433:15;-1:-1:-1;;8429:29:1;8420:39;;;;8461:4;8416:50;;8215:257;-1:-1:-1;;8215:257:1:o;8605:276::-;8736:3;8774:6;8768:13;8790:53;8836:6;8831:3;8824:4;8816:6;8812:17;8790:53;:::i;:::-;8859:16;;;;;8605:276;-1:-1:-1;;8605:276:1:o;8886:1519::-;9163:3;9201:6;9195:13;9227:4;9240:51;9284:6;9279:3;9274:2;9266:6;9262:15;9240:51;:::i;:::-;9376:13;;9313:16;;;;9349:1;;9436;9458:18;;;;9511;;;;9538:93;;9616:4;9606:8;9602:19;9590:31;;9538:93;9679:2;9669:8;9666:16;9646:18;9643:40;9640:224;;;-1:-1:-1;;;9713:3:1;9706:90;9819:4;9816:1;9809:15;9849:4;9844:3;9837:17;9640:224;9880:18;9907:110;;;;10031:1;10026:328;;;;9873:481;;9907:110;-1:-1:-1;;9942:24:1;;9928:39;;9987:20;;;;-1:-1:-1;9907:110:1;;10026:328;21143:1;21136:14;;;21180:4;21167:18;;10121:1;10135:169;10149:8;10146:1;10143:15;10135:169;;;10231:14;;10216:13;;;10209:37;10274:16;;;;10166:10;;10135:169;;;10139:3;;10335:8;10328:5;10324:20;10317:27;;9873:481;;;;;;10370:29;10395:3;8549:16;8537:29;;8591:2;8582:12;;8477:123;10370:29;10363:36;8886:1519;-1:-1:-1;;;;;;;8886:1519:1:o;10641:849::-;10963:4;-1:-1:-1;;;;;11073:2:1;11065:6;11061:15;11050:9;11043:34;11125:2;11117:6;11113:15;11108:2;11097:9;11093:18;11086:43;;11165:3;11160:2;11149:9;11145:18;11138:31;11192:57;11244:3;11233:9;11229:19;11221:6;11192:57;:::i;:::-;11297:9;11289:6;11285:22;11280:2;11269:9;11265:18;11258:50;11331:44;11368:6;11360;11331:44;:::i;:::-;11317:58;;11424:9;11416:6;11412:22;11406:3;11395:9;11391:19;11384:51;11452:32;11477:6;11469;11452:32;:::i;:::-;11444:40;10641:849;-1:-1:-1;;;;;;;;10641:849:1:o;11495:583::-;11717:4;-1:-1:-1;;;;;11827:2:1;11819:6;11815:15;11804:9;11797:34;11879:2;11871:6;11867:15;11862:2;11851:9;11847:18;11840:43;;11919:6;11914:2;11903:9;11899:18;11892:34;11962:6;11957:2;11946:9;11942:18;11935:34;12006:3;12000;11989:9;11985:19;11978:32;12027:45;12067:3;12056:9;12052:19;12044:6;12027:45;:::i;12083:261::-;12262:2;12251:9;12244:21;12225:4;12282:56;12334:2;12323:9;12319:18;12311:6;12282:56;:::i;12349:465::-;12606:2;12595:9;12588:21;12569:4;12632:56;12684:2;12673:9;12669:18;12661:6;12632:56;:::i;:::-;12736:9;12728:6;12724:22;12719:2;12708:9;12704:18;12697:50;12764:44;12801:6;12793;12764:44;:::i;:::-;12756:52;12349:465;-1:-1:-1;;;;;12349:465:1:o;13011:219::-;13160:2;13149:9;13142:21;13123:4;13180:44;13220:2;13209:9;13205:18;13197:6;13180:44;:::i;20882:183::-;20942:4;20975:18;20967:6;20964:30;20961:56;;;20997:18;;:::i;:::-;-1:-1:-1;21042:1:1;21038:14;21054:4;21034:25;;20882:183::o;21196:128::-;21236:3;21267:1;21263:6;21260:1;21257:13;21254:39;;;21273:18;;:::i;:::-;-1:-1:-1;21309:9:1;;21196:128::o;21329:125::-;21369:4;21397:1;21394;21391:8;21388:34;;;21402:18;;:::i;:::-;-1:-1:-1;21439:9:1;;21329:125::o;21459:258::-;21531:1;21541:113;21555:6;21552:1;21549:13;21541:113;;;21631:11;;;21625:18;21612:11;;;21605:39;21577:2;21570:10;21541:113;;;21672:6;21669:1;21666:13;21663:48;;;21707:1;21698:6;21693:3;21689:16;21682:27;21663:48;;21459:258;;;:::o;21722:437::-;21801:1;21797:12;;;;21844;;;21865:61;;21919:4;21911:6;21907:17;21897:27;;21865:61;21972:2;21964:6;21961:14;21941:18;21938:38;21935:218;;;-1:-1:-1;;;22006:1:1;21999:88;22110:4;22107:1;22100:15;22138:4;22135:1;22128:15;21935:218;;21722:437;;;:::o;22164:249::-;22274:2;22255:13;;-1:-1:-1;;22251:27:1;22239:40;;22309:18;22294:34;;22330:22;;;22291:62;22288:88;;;22356:18;;:::i;:::-;22392:2;22385:22;-1:-1:-1;;22164:249:1:o;22418:135::-;22457:3;-1:-1:-1;;22478:17:1;;22475:43;;;22498:18;;:::i;:::-;-1:-1:-1;22545:1:1;22534:13;;22418:135::o;22558:184::-;-1:-1:-1;;;22607:1:1;22600:88;22707:4;22704:1;22697:15;22731:4;22728:1;22721:15;22747:184;-1:-1:-1;;;22796:1:1;22789:88;22896:4;22893:1;22886:15;22920:4;22917:1;22910:15;22936:184;-1:-1:-1;;;22985:1:1;22978:88;23085:4;23082:1;23075:15;23109:4;23106:1;23099:15;23125:179;23160:3;23202:1;23184:16;23181:23;23178:120;;;23248:1;23245;23242;23227:23;-1:-1:-1;23285:1:1;23279:8;23274:3;23270:18;23178:120;23125:179;:::o;23309:671::-;23348:3;23390:4;23372:16;23369:26;23366:39;;;23309:671;:::o;23366:39::-;23432:2;23426:9;-1:-1:-1;;23497:16:1;23493:25;;23490:1;23426:9;23469:50;23548:4;23542:11;23572:16;23607:18;23678:2;23671:4;23663:6;23659:17;23656:25;23651:2;23643:6;23640:14;23637:45;23634:58;;;23685:5;;;;;23309:671;:::o;23634:58::-;23722:6;23716:4;23712:17;23701:28;;23758:3;23752:10;23785:2;23777:6;23774:14;23771:27;;;23791:5;;;;;;23309:671;:::o;23771:27::-;23875:2;23856:16;23850:4;23846:27;23842:36;23835:4;23826:6;23821:3;23817:16;23813:27;23810:69;23807:82;;;23882:5;;;;;;23309:671;:::o;23807:82::-;23898:57;23949:4;23940:6;23932;23928:19;23924:30;23918:4;23898:57;:::i;:::-;-1:-1:-1;23971:3:1;;23309:671;-1:-1:-1;;;;;23309:671:1:o;23985:177::-;-1:-1:-1;;;;;;24063:5:1;24059:78;24052:5;24049:89;24039:117;;24152:1;24149;24142:12;24039:117;23985:177;:::o
Swarm Source
ipfs://089aa604fe2ff407bbddb955f62e40bd21fed80cdf6ab6c3358575b444bc2dc3
Loading...
Loading
Loading...
Loading
OVERVIEW
A digital auction house for exclusive NFT's.new dimension of moments in history and art at all forms.Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.