ETH Price: $2,147.05 (+0.92%)

Token

 

Overview

Max Total Supply

202

Holders

49

Total Transfers

-

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
Music

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-10-28
*/

/**
 *Submitted for verification at Etherscan.io on 2022-08-20
*/

/**
 *Submitted for verification at Etherscan.io on 2022-08-19
*/

/**
 *Submitted for verification at Etherscan.io on 2022-08-18
*/

/**
 *Submitted for verification at Etherscan.io on 2022-08-05
*/

// File: @openzeppelin/contracts/utils/Strings.sol


// OpenZeppelin Contracts (last updated v4.7.0) (utils/Strings.sol)

pragma solidity ^0.8.0;

/**
 * @dev String operations.
 */
library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";
    uint8 private constant _ADDRESS_LENGTH = 20;

    /**
     * @dev Converts a `uint256` to its ASCII `string` decimal representation.
     */
    function toString(uint256 value) internal pure returns (string memory) {
        // Inspired by OraclizeAPI's implementation - MIT licence
        // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol

        if (value == 0) {
            return "0";
        }
        uint256 temp = value;
        uint256 digits;
        while (temp != 0) {
            digits++;
            temp /= 10;
        }
        bytes memory buffer = new bytes(digits);
        while (value != 0) {
            digits -= 1;
            buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
            value /= 10;
        }
        return string(buffer);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
     */
    function toHexString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0x00";
        }
        uint256 temp = value;
        uint256 length = 0;
        while (temp != 0) {
            length++;
            temp >>= 8;
        }
        return toHexString(value, length);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.
     */
    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
        bytes memory buffer = new bytes(2 * length + 2);
        buffer[0] = "0";
        buffer[1] = "x";
        for (uint256 i = 2 * length + 1; i > 1; --i) {
            buffer[i] = _HEX_SYMBOLS[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }

    /**
     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.
     */
    function toHexString(address addr) internal pure returns (string memory) {
        return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);
    }
}

// File: @openzeppelin/contracts/utils/Address.sol


// OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol)

pragma solidity ^0.8.1;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     *
     * [IMPORTANT]
     * ====
     * You shouldn't rely on `isContract` to protect against flash loan attacks!
     *
     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
     * constructor.
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        return account.code.length > 0;
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain `call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly
                /// @solidity memory-safe-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

// File: @openzeppelin/contracts/utils/introspection/IERC165.sol


// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC165 standard, as defined in the
 * https://eips.ethereum.org/EIPS/eip-165[EIP].
 *
 * Implementers can declare support of contract interfaces, which can then be
 * queried by others ({ERC165Checker}).
 *
 * For an implementation, see {ERC165}.
 */
interface IERC165 {
    /**
     * @dev Returns true if this contract implements the interface defined by
     * `interfaceId`. See the corresponding
     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
     * to learn more about how these ids are created.
     *
     * This function call must use less than 30 000 gas.
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

// File: @openzeppelin/contracts/utils/introspection/ERC165.sol


// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)

pragma solidity ^0.8.0;


/**
 * @dev Implementation of the {IERC165} interface.
 *
 * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check
 * for the additional interface id that will be supported. For example:
 *
 * ```solidity
 * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
 *     return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);
 * }
 * ```
 *
 * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.
 */
abstract contract ERC165 is IERC165 {
    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}

// File: @openzeppelin/contracts/token/ERC1155/IERC1155Receiver.sol


// OpenZeppelin Contracts (last updated v4.5.0) (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.
     *
     * NOTE: 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.
     *
     * NOTE: 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/IERC1155.sol


// OpenZeppelin Contracts (last updated v4.7.0) (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 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/extensions/IERC1155MetadataURI.sol


// OpenZeppelin Contracts v4.4.1 (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/Context.sol


// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

// File: @openzeppelin/contracts/token/ERC1155/ERC1155.sol


// OpenZeppelin Contracts (last updated v4.7.0) (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 public _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: address zero is not a valid owner");
        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 {
        _setApprovalForAll(_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(
            from == _msgSender() || isApprovedForAll(from, _msgSender()),
            "ERC1155: caller is not token owner nor approved"
        );
        _safeTransferFrom(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(
            from == _msgSender() || isApprovedForAll(from, _msgSender()),
            "ERC1155: caller is not token owner nor approved"
        );
        _safeBatchTransferFrom(from, to, ids, amounts, data);
    }

    /**
     * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `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 memory data
    ) internal virtual {
        require(to != address(0), "ERC1155: transfer to the zero address");

        address operator = _msgSender();
        uint256[] memory ids = _asSingletonArray(id);
        uint256[] memory amounts = _asSingletonArray(amount);

        _beforeTokenTransfer(operator, from, to, ids, amounts, data);

        uint256 fromBalance = _balances[id][from];
        require(fromBalance >= amount, "ERC1155: insufficient balance for transfer");
        unchecked {
            _balances[id][from] = fromBalance - amount;
        }
        _balances[id][to] += amount;

        emit TransferSingle(operator, from, to, id, amount);

        _afterTokenTransfer(operator, from, to, ids, amounts, data);

        _doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data);
    }

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_safeTransferFrom}.
     *
     * Emits a {TransferBatch} event.
     *
     * Requirements:
     *
     * - 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[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {
        require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");
        require(to != address(0), "ERC1155: transfer to the zero address");

        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");
            unchecked {
                _balances[id][from] = fromBalance - amount;
            }
            _balances[id][to] += amount;
        }

        emit TransferBatch(operator, from, to, ids, amounts);

        _afterTokenTransfer(operator, from, to, ids, amounts, data);

        _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 `to`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function _mint(
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) internal virtual {
        require(to != address(0), "ERC1155: mint to the zero address");

        address operator = _msgSender();
        uint256[] memory ids = _asSingletonArray(id);
        uint256[] memory amounts = _asSingletonArray(amount);

        _beforeTokenTransfer(operator, address(0), to, ids, amounts, data);

        _balances[id][to] += amount;
        emit TransferSingle(operator, address(0), to, id, amount);

        _afterTokenTransfer(operator, address(0), to, ids, amounts, data);

        _doSafeTransferAcceptanceCheck(operator, address(0), to, id, amount, data);
    }

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}.
     *
     * 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 _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 (uint256 i = 0; i < ids.length; i++) {
            _balances[ids[i]][to] += amounts[i];
        }

        emit TransferBatch(operator, address(0), to, ids, amounts);

        _afterTokenTransfer(operator, address(0), to, ids, amounts, data);

        _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data);
    }

    /**
     * @dev Destroys `amount` tokens of token type `id` from `from`
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `from` must have at least `amount` tokens of token type `id`.
     */
    function _burn(
        address from,
        uint256 id,
        uint256 amount
    ) internal virtual {
        require(from != address(0), "ERC1155: burn from the zero address");

        address operator = _msgSender();
        uint256[] memory ids = _asSingletonArray(id);
        uint256[] memory amounts = _asSingletonArray(amount);

        _beforeTokenTransfer(operator, from, address(0), ids, amounts, "");

        uint256 fromBalance = _balances[id][from];
        require(fromBalance >= amount, "ERC1155: burn amount exceeds balance");
        unchecked {
            _balances[id][from] = fromBalance - amount;
        }

        emit TransferSingle(operator, from, address(0), id, amount);

        _afterTokenTransfer(operator, from, address(0), ids, amounts, "");
    }

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}.
     *
     * Emits a {TransferBatch} event.
     *
     * Requirements:
     *
     * - `ids` and `amounts` must have the same length.
     */
    function _burnBatch(
        address from,
        uint256[] memory ids,
        uint256[] memory amounts
    ) internal virtual {
        require(from != address(0), "ERC1155: burn from the zero address");
        require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, from, address(0), ids, amounts, "");

        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: burn amount exceeds balance");
            unchecked {
                _balances[id][from] = fromBalance - amount;
            }
        }

        emit TransferBatch(operator, from, address(0), ids, amounts);

        _afterTokenTransfer(operator, from, address(0), ids, amounts, "");
    }

    /**
     * @dev Approve `operator` to operate on all of `owner` tokens
     *
     * Emits an {ApprovalForAll} event.
     */
    function _setApprovalForAll(
        address owner,
        address operator,
        bool approved
    ) internal virtual {
        require(owner != operator, "ERC1155: setting approval status for self");
        _operatorApprovals[owner][operator] = approved;
        emit ApprovalForAll(owner, operator, approved);
    }

    /**
     * @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 `ids` and `amounts` 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 {}

    /**
     * @dev Hook that is called after 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 _afterTokenTransfer(
        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.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.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/access/Ownable.sol


// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)

pragma solidity ^0.8.0;


/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

// File: music.sol


pragma solidity ^0.8.0;



contract Music is ERC1155,Ownable{
    using Strings for uint256;
    uint256 max_num;
    uint256 _total;
    uint256 _ask_total;
    uint256 public _brokerage;
    uint256 public _royalty;
	
    mapping(uint256 => Musics) public _token2create;
    mapping(uint256 => Ask) public _id2ask;

    mapping(string =>  uint256) public user_sell;
	mapping(address => uint256) public user_balance;

    struct Ask {
        uint256 id;
        uint256 token_id;
        uint256 num;
        uint256 price;
        uint256 end_time;
        bool is_set; 
        address seller;
    }


    struct Musics {
        address  creater;
        string   name;  
        string   author;
    }


   
    event createAsks(
        uint256 indexed id,
        uint256 indexed token_id,
        uint256 num,
        uint256 price,
        address seller,
		uint256 end_time
    );


   
    event upAsks(
        uint256 indexed id,
        uint256 price
    );
  
    event upAsksTime(
        uint256 indexed id,
        uint256 end_time
    );

    event orderAsks(
        uint256 indexed id,
        uint256 indexed token_id,
        uint256 price,
        uint256 num,
        address buyer
    );

 
    event canceleAsks(
        uint256 indexed id,
        address indexed seller
    );


    constructor() ERC1155("https://muverse.info/game/") {
        _brokerage = 2; 
        _royalty = 8;   
        max_num = 100;   
        _ask_total = 0; 
    }
	
    function mint(
        uint256 amount,
        string memory _name,
        string memory _author
    ) external {
        require(
                amount <= max_num,
                " num must < max_num"
        );



        _token2create[_total] =  Musics({
            creater:msg.sender,
            name:_name,
            author:_author
        });
        _mint(msg.sender, _total, amount, '');
        _total++;
    }

    function setURI(string memory newuri) public onlyOwner {
        _setURI(newuri);
    }

   
    function createUserOf(uint256 id) public view  returns (address) {
        return _token2create[id].creater;
    }

   
     function userWithdraw() external {
	 
        require(user_balance[msg.sender] > 0 ,"your balance must > 0");
        require( address(this).balance >= user_balance[msg.sender] , "Balance must be positive");
        (bool success, ) = msg.sender.call{value: user_balance[msg.sender]}("");
        require(success == true);
		user_balance[msg.sender] = 0;
    }


    
    function setMaxNum(uint256 _num) public onlyOwner {
        max_num = _num;
    }

   
    function setBrokerage(uint256 _num) public onlyOwner {
        require(_num <100,"_num must < 100");
        require( (_num + _royalty) < 100 , "");
        _brokerage = _num;
    }

   
    function setRoyalty(uint256 _num) public onlyOwner {
        require(_num <100,"_num must < 100");
        require(_num+_brokerage <100,"");
        _royalty = _num;
    }

   
    function withdraw(uint256 _balance) external onlyOwner {
        require(_balance <= address(this).balance,"_balance must < owners");
        address payable _owner = payable(owner());
        _owner.transfer(_balance);
    }

  



   
   function createAsk(
        uint256 token_id,
        uint256 price,
        uint256 num,
    
        uint256 end_time
    ) external {
        require(
                num > 0,
                " num must > 0"
            );

        require(
            balanceOf(msg.sender,token_id) >= (num+user_sell[string(abi.encodePacked(msg.sender, token_id.toString()))]),
            "token_id num is engouh"
        );

        require(price > 1000, "price too low");
        if(end_time > 0){
            require(end_time > block.timestamp, "end_time is must > now");
        }else{
            end_time = 0;
        }


        _id2ask[_ask_total] = Ask({
                id: _ask_total,
                token_id: token_id,
                num: num,
                price: price,
         
                end_time: end_time,
                seller: msg.sender,
                is_set : true
            });
        
        user_sell[string(abi.encodePacked(msg.sender, token_id.toString()))] =   user_sell[string(abi.encodePacked(msg.sender, token_id.toString()))] +num;


        emit createAsks({
            id : _ask_total,
            token_id: token_id,
            num: num,
            price: price,
            seller: msg.sender,
			end_time:end_time
        });
        _ask_total ++;
    }


   
    function cancelAsk(uint256 sell_id)
        external
    {
        require(_id2ask[sell_id].seller == msg.sender, "is not you");
        require(_id2ask[sell_id].is_set == true, "is used");
        user_sell[string(abi.encodePacked(msg.sender, _id2ask[sell_id].token_id.toString()))]  =   user_sell[string(abi.encodePacked(msg.sender, _id2ask[sell_id].token_id.toString()))] - _id2ask[sell_id].num;
        delete _id2ask[sell_id];

        emit canceleAsks({id: sell_id, seller: msg.sender});
    }



  
    function upAsk(uint256 sell_id,uint256 price)
        external
    {
        require(_id2ask[sell_id].seller == msg.sender, "is not you");
        require(_id2ask[sell_id].is_set == true, "is used");

        require(
            balanceOf(msg.sender,_id2ask[sell_id].token_id) >= _id2ask[sell_id].num,
            "token_id num is engouh"
        );

        require(price > 1000, "price too low");

        _id2ask[sell_id].price = price;

        emit upAsks({id: sell_id,price :price});
    }

    

    function upAskTime(uint256 sell_id,uint256 end_time)
        external
    {
        require(_id2ask[sell_id].seller == msg.sender, "is not you");
        require(_id2ask[sell_id].is_set == true, "is used");

        require(
            balanceOf(msg.sender,_id2ask[sell_id].token_id) >= _id2ask[sell_id].num,
            "token_id num is not engouh"
        );
        if(end_time > 0){
            require(end_time > block.timestamp, "end_time is must > now");
        }else{
            end_time = 0;
        }
       

        _id2ask[sell_id].end_time = end_time;

        emit upAsksTime({id: sell_id,end_time :end_time});
    }


   
    function orderAsk(uint256 sell_id,uint256 buy_num)
        external
        payable
    
    {
        require(_id2ask[sell_id].is_set, "is selled");
        require(
            buy_num <= _id2ask[sell_id].num,
            "token_id num is not engouh"
        );
        require(
            balanceOf(_id2ask[sell_id].seller,_id2ask[sell_id].token_id) >= buy_num,
            "token_id num is not engouh"
        );
        uint256 sell_price = _id2ask[sell_id].price * buy_num;
     
        require( msg.value >= sell_price, "price not enghou");

        if(_id2ask[sell_id].end_time  > 0){
            require(_id2ask[sell_id].end_time >= block.timestamp, "order is over ");
        }

        _id2ask[sell_id].num = _id2ask[sell_id].num - buy_num;
        if(_id2ask[sell_id].num < 1){
            _id2ask[sell_id].is_set = false;
        }

        _safeTransferFrom(_id2ask[sell_id].seller,msg.sender,_id2ask[sell_id].token_id,buy_num,'');
        user_sell[string(abi.encodePacked(_id2ask[sell_id].seller,_id2ask[sell_id].token_id.toString()))] =  user_sell[string(abi.encodePacked(_id2ask[sell_id].seller,_id2ask[sell_id].token_id.toString()))]  - buy_num;

        uint256 owner_price = sell_price*(100 - _brokerage - _royalty)/100;
        uint256 create_price = sell_price*_royalty/100;


        address seller = payable(_id2ask[sell_id].seller);
  
        (bool sel_is, ) = seller.call{value: owner_price}("");
        require(sel_is, "failed");
/*
        address creater = payable( _token2create[_id2ask[sell_id].token_id].creater);
        (bool cre_is, ) = creater.call{value: create_price}("");
		require(cre_is, "failed");
*/

		user_balance[_token2create[_id2ask[sell_id].token_id].creater] = user_balance[_token2create[_id2ask[sell_id].token_id].creater]+create_price;
       

        emit orderAsks({id: sell_id,token_id :_id2ask[sell_id].token_id,price:sell_price,num:buy_num,buyer:msg.sender});

        

    } 
   
    function getUserNft(address _adr) public  view returns (uint256[] memory, uint256[] memory) {
        uint256 j = 0;
        uint256 l = 0;

        uint256 is_num = 0;
        for(uint256 i=0;i<_total;i++){
            if(balanceOf(_adr,i)>0){
                j++;   
            }
        }
        if(j > 0){
            uint256[] memory tokenIds =  new uint256[](j);
            uint256[] memory nums =  new uint256[](j);

            for(uint256 t=0;t<_total;t++){
                is_num = balanceOf(_adr,t);
                if(is_num>0){
                    tokenIds[l] =  t;
                    nums[l] = is_num;
                    l++;
                }
                if(l == j){
                    break;
                }
            }

            return (tokenIds,nums);
        }else{
            return (new uint256[](0),new uint256[](0));
        }


    }


 
    function getOrderList() public view returns (uint256[] memory, uint256[] memory,uint256[] memory,uint256[] memory,uint256[] memory,address[] memory) {
        uint256 j = 0;
        uint256 l = 0;
        for(uint256 i=0;i<=_ask_total;i++){
            if(_id2ask[i].is_set){
                j++;   
            }
        }
        if(j > 0){
            uint256[] memory order_id =  new uint256[](j);
            uint256[] memory token_id =  new uint256[](j);
            uint256[] memory nums =  new uint256[](j);
            uint256[] memory price =  new uint256[](j);
            uint256[] memory times =  new uint256[](j);
            address[] memory sellers =  new address[](j);

            for(uint256 t=0;t<_total;t++){
                if(_id2ask[t].is_set){
                    order_id[l] = t;
                    token_id[l] = _id2ask[t].token_id;
                    nums[l] = _id2ask[t].num;
                    price[l] =_id2ask[t].price;
                    times[l] = _id2ask[t].end_time;
                    sellers[l] = _id2ask[t].seller;
                }
                if(l == j){
                    break;
                }
            }
            return (order_id,token_id,nums,price,times,sellers);
        }else{
            return (new uint256[](0),new uint256[](0),new uint256[](0),new uint256[](0),new uint256[](0),new address[](0));
        }
    }

    
    function gift(uint256 my_token_id,uint256 num,address friend) public{
        require(
                num > 0,
                " num must > 0"
            );
        require(
            balanceOf(msg.sender,my_token_id) >= num,
            "token_id num is not engouh"
        );

        _safeTransferFrom(msg.sender,friend,my_token_id,num,'');
    }


    function uri(uint256 tokenId) public view virtual override returns (string memory) {
        return
        string(
            abi.encodePacked(_uri, tokenId.toString())
        );
    }


}

Contract Security Audit

Contract ABI

API
[{"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":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":true,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":true,"internalType":"address","name":"seller","type":"address"}],"name":"canceleAsks","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"token_id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"num","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"},{"indexed":false,"internalType":"address","name":"seller","type":"address"},{"indexed":false,"internalType":"uint256","name":"end_time","type":"uint256"}],"name":"createAsks","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"token_id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"num","type":"uint256"},{"indexed":false,"internalType":"address","name":"buyer","type":"address"}],"name":"orderAsks","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"}],"name":"upAsks","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"end_time","type":"uint256"}],"name":"upAsksTime","type":"event"},{"inputs":[],"name":"_brokerage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"_id2ask","outputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"token_id","type":"uint256"},{"internalType":"uint256","name":"num","type":"uint256"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"uint256","name":"end_time","type":"uint256"},{"internalType":"bool","name":"is_set","type":"bool"},{"internalType":"address","name":"seller","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_royalty","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"_token2create","outputs":[{"internalType":"address","name":"creater","type":"address"},{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"author","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"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":"uint256","name":"sell_id","type":"uint256"}],"name":"cancelAsk","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"token_id","type":"uint256"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"uint256","name":"num","type":"uint256"},{"internalType":"uint256","name":"end_time","type":"uint256"}],"name":"createAsk","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"createUserOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOrderList","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_adr","type":"address"}],"name":"getUserNft","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"my_token_id","type":"uint256"},{"internalType":"uint256","name":"num","type":"uint256"},{"internalType":"address","name":"friend","type":"address"}],"name":"gift","outputs":[],"stateMutability":"nonpayable","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":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_author","type":"string"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"sell_id","type":"uint256"},{"internalType":"uint256","name":"buy_num","type":"uint256"}],"name":"orderAsk","outputs":[],"stateMutability":"payable","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":"uint256","name":"_num","type":"uint256"}],"name":"setBrokerage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_num","type":"uint256"}],"name":"setMaxNum","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_num","type":"uint256"}],"name":"setRoyalty","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":"sell_id","type":"uint256"},{"internalType":"uint256","name":"price","type":"uint256"}],"name":"upAsk","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"sell_id","type":"uint256"},{"internalType":"uint256","name":"end_time","type":"uint256"}],"name":"upAskTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"userWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"user_balance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"","type":"string"}],"name":"user_sell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_balance","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040523480156200001157600080fd5b5060408051808201909152601a81527f68747470733a2f2f6d7576657273652e696e666f2f67616d652f0000000000006020820152620000518162000076565b506200005d336200008f565b60026007556008805560646004556000600655620001c4565b80516200008b906002906020840190620000e1565b5050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b828054620000ef9062000187565b90600052602060002090601f0160209004810192826200011357600085556200015e565b82601f106200012e57805160ff19168380011785556200015e565b828001600101855582156200015e579182015b828111156200015e57825182559160200191906001019062000141565b506200016c92915062000170565b5090565b5b808211156200016c576000815560010162000171565b600181811c908216806200019c57607f821691505b60208210811415620001be57634e487b7160e01b600052602260045260246000fd5b50919050565b61398680620001d46000396000f3fe6080604052600436106101f85760003560e01c806362624ae91161010d578063c260804c116100a0578063d0fe19bf1161006f578063d0fe19bf14610669578063e985e9c51461069f578063f242432a146106e8578063f2fde38b14610708578063ffeb1c631461072857600080fd5b8063c260804c14610600578063c3de3b1214610620578063cb4c32d814610633578063cc1284231461064957600080fd5b80638da5cb5b116100dc5780638da5cb5b1461056c5780639c8a9d301461059e578063a22cb465146105cb578063a646f9ad146105eb57600080fd5b806362624ae91461044e578063715018a614610486578063837c18eb1461049b5780638a580378146104c957600080fd5b8063163dd8bb116101905780632eb2c2d61161015f5780632eb2c2d6146103ab5780633b66b00a146103cb5780634209a2e1146103e15780634e1273f4146104015780635198cf861461042e57600080fd5b8063163dd8bb14610324578063187958331461034b5780632825df7b1461036b5780632e1a7d4d1461038b57600080fd5b80630dccc9ad116101cc5780630dccc9ad146102a25780630e89341c146102c4578063131e5046146102e45780631628e0f51461030457600080fd5b8062fdd58e146101fd57806301ffc9a71461023057806302e5329e1461026057806302fe530514610282575b600080fd5b34801561020957600080fd5b5061021d610218366004612f7d565b610757565b6040519081526020015b60405180910390f35b34801561023c57600080fd5b5061025061024b366004613077565b6107ed565b6040519015158152602001610227565b34801561026c57600080fd5b5061028061027b3660046130e5565b61083f565b005b34801561028e57600080fd5b5061028061029d3660046130b1565b61084c565b3480156102ae57600080fd5b506102b7610860565b604051610227919061353d565b3480156102d057600080fd5b506102b76102df3660046130e5565b6108ee565b3480156102f057600080fd5b506102806102ff3660046130e5565b610922565b34801561031057600080fd5b5061028061031f3660046130e5565b6109a8565b34801561033057600080fd5b50610339610b4d565b6040516102279695949392919061348c565b34801561035757600080fd5b506102806103663660046131c1565b610f45565b34801561037757600080fd5b506102806103863660046130fe565b611268565b34801561039757600080fd5b506102806103a63660046130e5565b611365565b3480156103b757600080fd5b506102806103c6366004612e34565b611408565b3480156103d757600080fd5b5061021d60085481565b3480156103ed57600080fd5b506102806103fc3660046130e5565b611454565b34801561040d57600080fd5b5061042161041c366004612fa7565b6114da565b6040516102279190613454565b34801561043a57600080fd5b5061028061044936600461316a565b611603565b34801561045a57600080fd5b5061021d6104693660046130b1565b8051602081830181018051600b8252928201919093012091525481565b34801561049257600080fd5b50610280611777565b3480156104a757600080fd5b506104bb6104b6366004612ddf565b61178b565b604051610227929190613467565b3480156104d557600080fd5b5061052c6104e43660046130e5565b600a60205260009081526040902080546001820154600283015460038401546004850154600590950154939492939192909160ff81169061010090046001600160a01b031687565b6040805197885260208801969096529486019390935260608501919091526080840152151560a08301526001600160a01b031660c082015260e001610227565b34801561057857600080fd5b506003546001600160a01b03165b6040516001600160a01b039091168152602001610227565b3480156105aa57600080fd5b5061021d6105b9366004612ddf565b600c6020526000908152604090205481565b3480156105d757600080fd5b506102806105e6366004612f41565b61191d565b3480156105f757600080fd5b5061028061192c565b34801561060c57600080fd5b5061028061061b36600461318c565b611a59565b61028061062e36600461316a565b611ade565b34801561063f57600080fd5b5061021d60075481565b34801561065557600080fd5b5061028061066436600461316a565b611fb3565b34801561067557600080fd5b506105866106843660046130e5565b6000908152600960205260409020546001600160a01b031690565b3480156106ab57600080fd5b506102506106ba366004612e01565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205460ff1690565b3480156106f457600080fd5b50610280610703366004612edd565b612108565b34801561071457600080fd5b50610280610723366004612ddf565b61214d565b34801561073457600080fd5b506107486107433660046130e5565b6121c3565b60405161022793929190613414565b60006001600160a01b0383166107c75760405162461bcd60e51b815260206004820152602a60248201527f455243313135353a2061646472657373207a65726f206973206e6f742061207660448201526930b634b21037bbb732b960b11b60648201526084015b60405180910390fd5b506000908152602081815260408083206001600160a01b03949094168352929052205490565b60006001600160e01b03198216636cdb3d1360e11b148061081e57506001600160e01b031982166303a24d0760e21b145b8061083957506301ffc9a760e01b6001600160e01b03198316145b92915050565b610847612300565b600455565b610854612300565b61085d8161235a565b50565b6002805461086d906137a7565b80601f0160208091040260200160405190810160405280929190818152602001828054610899906137a7565b80156108e65780601f106108bb576101008083540402835291602001916108e6565b820191906000526020600020905b8154815290600101906020018083116108c957829003601f168201915b505050505081565b606060026108fb8361236d565b60405160200161090c9291906132ca565b6040516020818303038152906040529050919050565b61092a612300565b6064811061096c5760405162461bcd60e51b815260206004820152600f60248201526e05f6e756d206d757374203c2031303608c1b60448201526064016107be565b60646008548261097c9190613715565b106109a35760405162461bcd60e51b815260206004820152600060248201526044016107be565b600755565b6000818152600a602052604090206005015461010090046001600160a01b031633146109e65760405162461bcd60e51b81526004016107be906136ce565b6000818152600a602052604090206005015460ff161515600114610a1c5760405162461bcd60e51b81526004016107be906136ad565b6000818152600a602052604090206002810154600190910154600b903390610a439061236d565b604051602001610a54929190613276565b60408051601f1981840301815290829052610a6e916132ae565b908152602001604051809103902054610a879190613760565b6000828152600a6020526040902060010154600b903390610aa79061236d565b604051602001610ab8929190613276565b60408051601f1981840301815290829052610ad2916132ae565b9081526040805160209281900383018120939093556000848152600a90925281208181556001810182905560028101829055600381018290556004810182905560050180546001600160a81b0319169055339183917f1218f3cb1d0d9f0fa16edd3d92a08e141c46d98b93fced41a8a97479a5a6663c91a350565b60608060608060608060008060005b6006548111610b9f576000818152600a602052604090206005015460ff1615610b8d5782610b898161380e565b9350505b80610b978161380e565b915050610b5c565b508115610ef8576000826001600160401b03811115610bc057610bc061387f565b604051908082528060200260200182016040528015610be9578160200160208202803683370190505b5090506000836001600160401b03811115610c0657610c0661387f565b604051908082528060200260200182016040528015610c2f578160200160208202803683370190505b5090506000846001600160401b03811115610c4c57610c4c61387f565b604051908082528060200260200182016040528015610c75578160200160208202803683370190505b5090506000856001600160401b03811115610c9257610c9261387f565b604051908082528060200260200182016040528015610cbb578160200160208202803683370190505b5090506000866001600160401b03811115610cd857610cd861387f565b604051908082528060200260200182016040528015610d01578160200160208202803683370190505b5090506000876001600160401b03811115610d1e57610d1e61387f565b604051908082528060200260200182016040528015610d47578160200160208202803683370190505b50905060005b600554811015610ee0576000818152600a602052604090206005015460ff1615610ec15780878981518110610d8457610d84613869565b602002602001018181525050600a600082815260200190815260200160002060010154868981518110610db957610db9613869565b602002602001018181525050600a600082815260200190815260200160002060020154858981518110610dee57610dee613869565b602002602001018181525050600a600082815260200190815260200160002060030154848981518110610e2357610e23613869565b602002602001018181525050600a600082815260200190815260200160002060040154838981518110610e5857610e58613869565b602002602001018181525050600a600082815260200190815260200160002060050160019054906101000a90046001600160a01b0316828981518110610ea057610ea0613869565b60200260200101906001600160a01b031690816001600160a01b0316815250505b88881415610ece57610ee0565b80610ed88161380e565b915050610d4d565b50949c50929a50909850965094509250610f3d915050565b505060408051600080825260208201818152828401828152606084018381526080850184815260a0860194855260c08601909652939a50909850965090945090925090505b909192939495565b60008211610f855760405162461bcd60e51b815260206004820152600d60248201526c0206e756d206d757374203e203609c1b60448201526064016107be565b600b33610f918661236d565b604051602001610fa2929190613276565b60408051601f1981840301815290829052610fbc916132ae565b90815260200160405180910390205482610fd69190613715565b610fe03386610757565b10156110275760405162461bcd60e51b81526020600482015260166024820152750e8ded6cadcbed2c840dceada40d2e640cadccedeead60531b60448201526064016107be565b6103e883116110685760405162461bcd60e51b815260206004820152600d60248201526c707269636520746f6f206c6f7760981b60448201526064016107be565b80156110bb574281116110b65760405162461bcd60e51b8152602060048201526016602482015275656e645f74696d65206973206d757374203e206e6f7760501b60448201526064016107be565b6110bf565b5060005b6040805160e08101825260065480825260208083018881528385018781526060850189815260808601888152600160a088018181523360c08a018181526000998a52600a90985299909720975188559351938701939093559051600286015551600385015551600484015590516005909201805491516001600160a81b0319909216921515610100600160a81b031916929092176101006001600160a01b03909216919091021790558290600b906111768761236d565b604051602001611187929190613276565b60408051601f19818403018152908290526111a1916132ae565b9081526020016040518091039020546111ba9190613715565b600b336111c68761236d565b6040516020016111d7929190613276565b60408051601f19818403018152908290526111f1916132ae565b90815260408051602092819003830181209390935560065485845291830186905233908301526060820183905285917ff7b1e6c167a9bc203409829ddbbc2f2b9919d565436a63e79c08e817a9816f209060800160405180910390a36006805490600061125d8361380e565b919050555050505050565b6004548311156112b05760405162461bcd60e51b8152602060048201526013602482015272206e756d206d757374203c206d61785f6e756d60681b60448201526064016107be565b60408051606081018252338152602080820185815282840185905260055460009081526009835293909320825181546001600160a01b0319166001600160a01b039091161781559251805192939261130e9260018501920190612c40565b506040820151805161132a916002840191602090910190612c40565b5090505061134b336005548560405180602001604052806000815250612472565b6005805490600061135b8361380e565b9190505550505050565b61136d612300565b478111156113b65760405162461bcd60e51b81526020600482015260166024820152755f62616c616e6365206d757374203c206f776e65727360501b60448201526064016107be565b60006113ca6003546001600160a01b031690565b6040519091506001600160a01b0382169083156108fc029084906000818181858888f19350505050158015611403573d6000803e3d6000fd5b505050565b6001600160a01b038516331480611424575061142485336106ba565b6114405760405162461bcd60e51b81526004016107be90613550565b61144d8585858585612586565b5050505050565b61145c612300565b6064811061149e5760405162461bcd60e51b815260206004820152600f60248201526e05f6e756d206d757374203c2031303608c1b60448201526064016107be565b6064600754826114ae9190613715565b106114d55760405162461bcd60e51b815260206004820152600060248201526044016107be565b600855565b6060815183511461153f5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b60648201526084016107be565b600083516001600160401b0381111561155a5761155a61387f565b604051908082528060200260200182016040528015611583578160200160208202803683370190505b50905060005b84518110156115fb576115ce8582815181106115a7576115a7613869565b60200260200101518583815181106115c1576115c1613869565b6020026020010151610757565b8282815181106115e0576115e0613869565b60209081029190910101526115f48161380e565b9050611589565b509392505050565b6000828152600a602052604090206005015461010090046001600160a01b031633146116415760405162461bcd60e51b81526004016107be906136ce565b6000828152600a602052604090206005015460ff1615156001146116775760405162461bcd60e51b81526004016107be906136ad565b6000828152600a60205260409020600281015460019091015461169b903390610757565b10156116e25760405162461bcd60e51b81526020600482015260166024820152750e8ded6cadcbed2c840dceada40d2e640cadccedeead60531b60448201526064016107be565b6103e881116117235760405162461bcd60e51b815260206004820152600d60248201526c707269636520746f6f206c6f7760981b60448201526064016107be565b6000828152600a6020526040908190206003018290555182907f56d448a31039ed8b2c91a20a29c04350e1dd7918b0e0f1da02fb9c8c20f3123d9061176b9084815260200190565b60405180910390a25050565b61177f612300565b6117896000612763565b565b6060806000806000805b6005548110156117d15760006117ab8883610757565b11156117bf57836117bb8161380e565b9450505b806117c98161380e565b915050611795565b5082156118fb576000836001600160401b038111156117f2576117f261387f565b60405190808252806020026020018201604052801561181b578160200160208202803683370190505b5090506000846001600160401b038111156118385761183861387f565b604051908082528060200260200182016040528015611861578160200160208202803683370190505b50905060005b6005548110156118ed5761187b8982610757565b935083156118ce578083868151811061189657611896613869565b602002602001018181525050838286815181106118b5576118b5613869565b6020908102919091010152846118ca8161380e565b9550505b858514156118db576118ed565b806118e58161380e565b915050611867565b509097909650945050505050565b5050604080516000808252602082019081528183019092529590945092505050565b6119283383836127b5565b5050565b336000908152600c60205260409020546119805760405162461bcd60e51b81526020600482015260156024820152740796f75722062616c616e6365206d757374203e203605c1b60448201526064016107be565b336000908152600c60205260409020544710156119df5760405162461bcd60e51b815260206004820152601860248201527f42616c616e6365206d75737420626520706f736974697665000000000000000060448201526064016107be565b336000818152600c60205260408082205490519192918381818185875af1925050503d8060008114611a2d576040519150601f19603f3d011682016040523d82523d6000602084013e611a32565b606091505b5090915050600181151514611a4657600080fd5b50336000908152600c6020526040812055565b60008211611a995760405162461bcd60e51b815260206004820152600d60248201526c0206e756d206d757374203e203609c1b60448201526064016107be565b81611aa43385610757565b1015611ac25760405162461bcd60e51b81526004016107be9061362c565b6114033382858560405180602001604052806000815250612896565b6000828152600a602052604090206005015460ff16611b2b5760405162461bcd60e51b81526020600482015260096024820152681a5cc81cd95b1b195960ba1b60448201526064016107be565b6000828152600a6020526040902060020154811115611b5c5760405162461bcd60e51b81526004016107be9061362c565b6000828152600a6020526040902060058101546001909101548291611b90916101009091046001600160a01b031690610757565b1015611bae5760405162461bcd60e51b81526004016107be9061362c565b6000828152600a6020526040812060030154611bcb908390613741565b905080341015611c105760405162461bcd60e51b815260206004820152601060248201526f7072696365206e6f7420656e67686f7560801b60448201526064016107be565b6000838152600a602052604090206004015415611c79576000838152600a6020526040902060040154421115611c795760405162461bcd60e51b815260206004820152600e60248201526d037b93232b91034b99037bb32b9160951b60448201526064016107be565b6000838152600a6020526040902060020154611c96908390613760565b6000848152600a6020526040902060020181905560011115611ccc576000838152600a60205260409020600501805460ff191690555b6000838152600a6020908152604080832060058101546001909101548251938401909252928252611d109261010090046001600160a01b0316913391908690612896565b6000838152600a6020526040902060058101546001909101548391600b916101009091046001600160a01b031690611d479061236d565b604051602001611d58929190613276565b60408051601f1981840301815290829052611d72916132ae565b908152602001604051809103902054611d8b9190613760565b6000848152600a602052604090206005810154600190910154600b9161010090046001600160a01b031690611dbf9061236d565b604051602001611dd0929190613276565b60408051601f1981840301815290829052611dea916132ae565b90815260405190819003602001902055600854600754600091606491611e109083613760565b611e1a9190613760565b611e249084613741565b611e2e919061372d565b90506000606460085484611e429190613741565b611e4c919061372d565b6000868152600a602052604080822060050154905192935061010090046001600160a01b031691829085908381818185875af1925050503d8060008114611eaf576040519150601f19603f3d011682016040523d82523d6000602084013e611eb4565b606091505b5050905080611eee5760405162461bcd60e51b815260206004820152600660248201526519985a5b195960d21b60448201526064016107be565b6000878152600a6020908152604080832060010154835260098252808320546001600160a01b03168352600c909152902054611f2b908490613715565b6000888152600a602081815260408084206001018054855260098352818520546001600160a01b03168552600c835281852095909555928b90529081529154815188815292830189905233838301529051909189917f03ead356efd518f25112a94d2a0d02c45de70c0b95afdaa699c4d8af718949e49181900360600190a350505050505050565b6000828152600a602052604090206005015461010090046001600160a01b03163314611ff15760405162461bcd60e51b81526004016107be906136ce565b6000828152600a602052604090206005015460ff1615156001146120275760405162461bcd60e51b81526004016107be906136ad565b6000828152600a60205260409020600281015460019091015461204b903390610757565b10156120695760405162461bcd60e51b81526004016107be9061362c565b80156120bc574281116120b75760405162461bcd60e51b8152602060048201526016602482015275656e645f74696d65206973206d757374203e206e6f7760501b60448201526064016107be565b6120c0565b5060005b6000828152600a6020526040908190206004018290555182907f3b2834667af080bc1c4dd58d902bb87b7f5b272f4a4c020a54308fed50a3dadb9061176b9084815260200190565b6001600160a01b038516331480612124575061212485336106ba565b6121405760405162461bcd60e51b81526004016107be90613550565b61144d8585858585612896565b612155612300565b6001600160a01b0381166121ba5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016107be565b61085d81612763565b600960205260009081526040902080546001820180546001600160a01b0390921692916121ef906137a7565b80601f016020809104026020016040519081016040528092919081815260200182805461221b906137a7565b80156122685780601f1061223d57610100808354040283529160200191612268565b820191906000526020600020905b81548152906001019060200180831161224b57829003601f168201915b50505050509080600201805461227d906137a7565b80601f01602080910402602001604051908101604052809291908181526020018280546122a9906137a7565b80156122f65780601f106122cb576101008083540402835291602001916122f6565b820191906000526020600020905b8154815290600101906020018083116122d957829003601f168201915b5050505050905083565b6003546001600160a01b031633146117895760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107be565b8051611928906002906020840190612c40565b6060816123915750506040805180820190915260018152600360fc1b602082015290565b8160005b81156123bb57806123a58161380e565b91506123b49050600a8361372d565b9150612395565b6000816001600160401b038111156123d5576123d561387f565b6040519080825280601f01601f1916602001820160405280156123ff576020820181803683370190505b5090505b841561246a57612414600183613760565b9150612421600a86613829565b61242c906030613715565b60f81b81838151811061244157612441613869565b60200101906001600160f81b031916908160001a905350612463600a8661372d565b9450612403565b949350505050565b6001600160a01b0384166124d25760405162461bcd60e51b815260206004820152602160248201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b60648201526084016107be565b3360006124de856129c0565b905060006124eb856129c0565b90506000868152602081815260408083206001600160a01b038b1684529091528120805487929061251d908490613715565b909155505060408051878152602081018790526001600160a01b03808a1692600092918716917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a461257d83600089898989612a0b565b50505050505050565b81518351146125e85760405162461bcd60e51b815260206004820152602860248201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206044820152670dad2e6dac2e8c6d60c31b60648201526084016107be565b6001600160a01b03841661260e5760405162461bcd60e51b81526004016107be906135e7565b3360005b84518110156126f557600085828151811061262f5761262f613869565b60200260200101519050600085838151811061264d5761264d613869565b602090810291909101810151600084815280835260408082206001600160a01b038e16835290935291909120549091508181101561269d5760405162461bcd60e51b81526004016107be90613663565b6000838152602081815260408083206001600160a01b038e8116855292528083208585039055908b168252812080548492906126da908490613715565b92505081905550505050806126ee9061380e565b9050612612565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051612745929190613467565b60405180910390a461275b818787878787612b76565b505050505050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b816001600160a01b0316836001600160a01b031614156128295760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b60648201526084016107be565b6001600160a01b03838116600081815260016020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b0384166128bc5760405162461bcd60e51b81526004016107be906135e7565b3360006128c8856129c0565b905060006128d5856129c0565b90506000868152602081815260408083206001600160a01b038c168452909152902054858110156129185760405162461bcd60e51b81526004016107be90613663565b6000878152602081815260408083206001600160a01b038d8116855292528083208985039055908a16825281208054889290612955908490613715565b909155505060408051888152602081018890526001600160a01b03808b16928c821692918816917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a46129b5848a8a8a8a8a612a0b565b505050505050505050565b604080516001808252818301909252606091600091906020808301908036833701905050905082816000815181106129fa576129fa613869565b602090810291909101015292915050565b6001600160a01b0384163b1561275b5760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e6190612a4f90899089908890889088906004016133cf565b602060405180830381600087803b158015612a6957600080fd5b505af1925050508015612a99575060408051601f3d908101601f19168201909252612a9691810190613094565b60015b612b4657612aa5613895565b806308c379a01415612adf5750612aba6138b1565b80612ac55750612ae1565b8060405162461bcd60e51b81526004016107be919061353d565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e20455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b60648201526084016107be565b6001600160e01b0319811663f23a6e6160e01b1461257d5760405162461bcd60e51b81526004016107be9061359f565b6001600160a01b0384163b1561275b5760405163bc197c8160e01b81526001600160a01b0385169063bc197c8190612bba9089908990889088908890600401613371565b602060405180830381600087803b158015612bd457600080fd5b505af1925050508015612c04575060408051601f3d908101601f19168201909252612c0191810190613094565b60015b612c1057612aa5613895565b6001600160e01b0319811663bc197c8160e01b1461257d5760405162461bcd60e51b81526004016107be9061359f565b828054612c4c906137a7565b90600052602060002090601f016020900481019282612c6e5760008555612cb4565b82601f10612c8757805160ff1916838001178555612cb4565b82800160010185558215612cb4579182015b82811115612cb4578251825591602001919060010190612c99565b50612cc0929150612cc4565b5090565b5b80821115612cc05760008155600101612cc5565b80356001600160a01b0381168114612cf057600080fd5b919050565b600082601f830112612d0657600080fd5b81356020612d13826136f2565b604051612d2082826137e2565b8381528281019150858301600585901b87018401881015612d4057600080fd5b60005b85811015612d5f57813584529284019290840190600101612d43565b5090979650505050505050565b600082601f830112612d7d57600080fd5b81356001600160401b03811115612d9657612d9661387f565b604051612dad601f8301601f1916602001826137e2565b818152846020838601011115612dc257600080fd5b816020850160208301376000918101602001919091529392505050565b600060208284031215612df157600080fd5b612dfa82612cd9565b9392505050565b60008060408385031215612e1457600080fd5b612e1d83612cd9565b9150612e2b60208401612cd9565b90509250929050565b600080600080600060a08688031215612e4c57600080fd5b612e5586612cd9565b9450612e6360208701612cd9565b935060408601356001600160401b0380821115612e7f57600080fd5b612e8b89838a01612cf5565b94506060880135915080821115612ea157600080fd5b612ead89838a01612cf5565b93506080880135915080821115612ec357600080fd5b50612ed088828901612d6c565b9150509295509295909350565b600080600080600060a08688031215612ef557600080fd5b612efe86612cd9565b9450612f0c60208701612cd9565b9350604086013592506060860135915060808601356001600160401b03811115612f3557600080fd5b612ed088828901612d6c565b60008060408385031215612f5457600080fd5b612f5d83612cd9565b915060208301358015158114612f7257600080fd5b809150509250929050565b60008060408385031215612f9057600080fd5b612f9983612cd9565b946020939093013593505050565b60008060408385031215612fba57600080fd5b82356001600160401b0380821115612fd157600080fd5b818501915085601f830112612fe557600080fd5b81356020612ff2826136f2565b604051612fff82826137e2565b8381528281019150858301600585901b870184018b101561301f57600080fd5b600096505b848710156130495761303581612cd9565b835260019690960195918301918301613024565b509650508601359250508082111561306057600080fd5b5061306d85828601612cf5565b9150509250929050565b60006020828403121561308957600080fd5b8135612dfa8161393a565b6000602082840312156130a657600080fd5b8151612dfa8161393a565b6000602082840312156130c357600080fd5b81356001600160401b038111156130d957600080fd5b61246a84828501612d6c565b6000602082840312156130f757600080fd5b5035919050565b60008060006060848603121561311357600080fd5b8335925060208401356001600160401b038082111561313157600080fd5b61313d87838801612d6c565b9350604086013591508082111561315357600080fd5b5061316086828701612d6c565b9150509250925092565b6000806040838503121561317d57600080fd5b50508035926020909101359150565b6000806000606084860312156131a157600080fd5b83359250602084013591506131b860408501612cd9565b90509250925092565b600080600080608085870312156131d757600080fd5b5050823594602084013594506040840135936060013592509050565b600081518084526020808501945080840160005b8381101561322357815187529582019590820190600101613207565b509495945050505050565b60008151808452613246816020860160208601613777565b601f01601f19169290920160200192915050565b6000815161326c818560208601613777565b9290920192915050565b6bffffffffffffffffffffffff198360601b168152600082516132a0816014850160208701613777565b919091016014019392505050565b600082516132c0818460208701613777565b9190910192915050565b600080845481600182811c9150808316806132e657607f831692505b602080841082141561330657634e487b7160e01b86526022600452602486fd5b81801561331a576001811461332b57613358565b60ff19861689528489019650613358565b60008b81526020902060005b868110156133505781548b820152908501908301613337565b505084890196505b505050505050613368818561325a565b95945050505050565b6001600160a01b0386811682528516602082015260a06040820181905260009061339d908301866131f3565b82810360608401526133af81866131f3565b905082810360808401526133c3818561322e565b98975050505050505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a0608082018190526000906134099083018461322e565b979650505050505050565b6001600160a01b03841681526060602082018190526000906134389083018561322e565b828103604084015261344a818561322e565b9695505050505050565b602081526000612dfa60208301846131f3565b60408152600061347a60408301856131f3565b828103602084015261336881856131f3565b60c08152600061349f60c08301896131f3565b6020838203818501526134b2828a6131f3565b915083820360408501526134c682896131f3565b915083820360608501526134da82886131f3565b915083820360808501526134ee82876131f3565b84810360a0860152855180825282870193509082019060005b8181101561352c5784516001600160a01b031683529383019391830191600101613507565b50909b9a5050505050505050505050565b602081526000612dfa602083018461322e565b6020808252602f908201527f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60408201526e195c881b9bdc88185c1c1c9bdd9959608a1b606082015260800190565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252601a908201527f746f6b656e5f6964206e756d206973206e6f7420656e676f7568000000000000604082015260600190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b6020808252600790820152661a5cc81d5cd95960ca1b604082015260600190565b6020808252600a90820152696973206e6f7420796f7560b01b604082015260600190565b60006001600160401b0382111561370b5761370b61387f565b5060051b60200190565b600082198211156137285761372861383d565b500190565b60008261373c5761373c613853565b500490565b600081600019048311821515161561375b5761375b61383d565b500290565b6000828210156137725761377261383d565b500390565b60005b8381101561379257818101518382015260200161377a565b838111156137a1576000848401525b50505050565b600181811c908216806137bb57607f821691505b602082108114156137dc57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8201601f191681016001600160401b03811182821017156138075761380761387f565b6040525050565b60006000198214156138225761382261383d565b5060010190565b60008261383857613838613853565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b600060033d11156138ae5760046000803e5060005160e01c5b90565b600060443d10156138bf5790565b6040516003193d81016004833e81513d6001600160401b0381602484011181841117156138ee57505050505090565b82850191508151818111156139065750505050505090565b843d87010160208285010111156139205750505050505090565b61392f602082860101876137e2565b509095945050505050565b6001600160e01b03198116811461085d57600080fdfea264697066735822122013bf77ad8651898dee97b9a01e4756823714f1b9fd71a937b9c9ea510d97f09f64736f6c63430008070033

Deployed Bytecode

0x6080604052600436106101f85760003560e01c806362624ae91161010d578063c260804c116100a0578063d0fe19bf1161006f578063d0fe19bf14610669578063e985e9c51461069f578063f242432a146106e8578063f2fde38b14610708578063ffeb1c631461072857600080fd5b8063c260804c14610600578063c3de3b1214610620578063cb4c32d814610633578063cc1284231461064957600080fd5b80638da5cb5b116100dc5780638da5cb5b1461056c5780639c8a9d301461059e578063a22cb465146105cb578063a646f9ad146105eb57600080fd5b806362624ae91461044e578063715018a614610486578063837c18eb1461049b5780638a580378146104c957600080fd5b8063163dd8bb116101905780632eb2c2d61161015f5780632eb2c2d6146103ab5780633b66b00a146103cb5780634209a2e1146103e15780634e1273f4146104015780635198cf861461042e57600080fd5b8063163dd8bb14610324578063187958331461034b5780632825df7b1461036b5780632e1a7d4d1461038b57600080fd5b80630dccc9ad116101cc5780630dccc9ad146102a25780630e89341c146102c4578063131e5046146102e45780631628e0f51461030457600080fd5b8062fdd58e146101fd57806301ffc9a71461023057806302e5329e1461026057806302fe530514610282575b600080fd5b34801561020957600080fd5b5061021d610218366004612f7d565b610757565b6040519081526020015b60405180910390f35b34801561023c57600080fd5b5061025061024b366004613077565b6107ed565b6040519015158152602001610227565b34801561026c57600080fd5b5061028061027b3660046130e5565b61083f565b005b34801561028e57600080fd5b5061028061029d3660046130b1565b61084c565b3480156102ae57600080fd5b506102b7610860565b604051610227919061353d565b3480156102d057600080fd5b506102b76102df3660046130e5565b6108ee565b3480156102f057600080fd5b506102806102ff3660046130e5565b610922565b34801561031057600080fd5b5061028061031f3660046130e5565b6109a8565b34801561033057600080fd5b50610339610b4d565b6040516102279695949392919061348c565b34801561035757600080fd5b506102806103663660046131c1565b610f45565b34801561037757600080fd5b506102806103863660046130fe565b611268565b34801561039757600080fd5b506102806103a63660046130e5565b611365565b3480156103b757600080fd5b506102806103c6366004612e34565b611408565b3480156103d757600080fd5b5061021d60085481565b3480156103ed57600080fd5b506102806103fc3660046130e5565b611454565b34801561040d57600080fd5b5061042161041c366004612fa7565b6114da565b6040516102279190613454565b34801561043a57600080fd5b5061028061044936600461316a565b611603565b34801561045a57600080fd5b5061021d6104693660046130b1565b8051602081830181018051600b8252928201919093012091525481565b34801561049257600080fd5b50610280611777565b3480156104a757600080fd5b506104bb6104b6366004612ddf565b61178b565b604051610227929190613467565b3480156104d557600080fd5b5061052c6104e43660046130e5565b600a60205260009081526040902080546001820154600283015460038401546004850154600590950154939492939192909160ff81169061010090046001600160a01b031687565b6040805197885260208801969096529486019390935260608501919091526080840152151560a08301526001600160a01b031660c082015260e001610227565b34801561057857600080fd5b506003546001600160a01b03165b6040516001600160a01b039091168152602001610227565b3480156105aa57600080fd5b5061021d6105b9366004612ddf565b600c6020526000908152604090205481565b3480156105d757600080fd5b506102806105e6366004612f41565b61191d565b3480156105f757600080fd5b5061028061192c565b34801561060c57600080fd5b5061028061061b36600461318c565b611a59565b61028061062e36600461316a565b611ade565b34801561063f57600080fd5b5061021d60075481565b34801561065557600080fd5b5061028061066436600461316a565b611fb3565b34801561067557600080fd5b506105866106843660046130e5565b6000908152600960205260409020546001600160a01b031690565b3480156106ab57600080fd5b506102506106ba366004612e01565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205460ff1690565b3480156106f457600080fd5b50610280610703366004612edd565b612108565b34801561071457600080fd5b50610280610723366004612ddf565b61214d565b34801561073457600080fd5b506107486107433660046130e5565b6121c3565b60405161022793929190613414565b60006001600160a01b0383166107c75760405162461bcd60e51b815260206004820152602a60248201527f455243313135353a2061646472657373207a65726f206973206e6f742061207660448201526930b634b21037bbb732b960b11b60648201526084015b60405180910390fd5b506000908152602081815260408083206001600160a01b03949094168352929052205490565b60006001600160e01b03198216636cdb3d1360e11b148061081e57506001600160e01b031982166303a24d0760e21b145b8061083957506301ffc9a760e01b6001600160e01b03198316145b92915050565b610847612300565b600455565b610854612300565b61085d8161235a565b50565b6002805461086d906137a7565b80601f0160208091040260200160405190810160405280929190818152602001828054610899906137a7565b80156108e65780601f106108bb576101008083540402835291602001916108e6565b820191906000526020600020905b8154815290600101906020018083116108c957829003601f168201915b505050505081565b606060026108fb8361236d565b60405160200161090c9291906132ca565b6040516020818303038152906040529050919050565b61092a612300565b6064811061096c5760405162461bcd60e51b815260206004820152600f60248201526e05f6e756d206d757374203c2031303608c1b60448201526064016107be565b60646008548261097c9190613715565b106109a35760405162461bcd60e51b815260206004820152600060248201526044016107be565b600755565b6000818152600a602052604090206005015461010090046001600160a01b031633146109e65760405162461bcd60e51b81526004016107be906136ce565b6000818152600a602052604090206005015460ff161515600114610a1c5760405162461bcd60e51b81526004016107be906136ad565b6000818152600a602052604090206002810154600190910154600b903390610a439061236d565b604051602001610a54929190613276565b60408051601f1981840301815290829052610a6e916132ae565b908152602001604051809103902054610a879190613760565b6000828152600a6020526040902060010154600b903390610aa79061236d565b604051602001610ab8929190613276565b60408051601f1981840301815290829052610ad2916132ae565b9081526040805160209281900383018120939093556000848152600a90925281208181556001810182905560028101829055600381018290556004810182905560050180546001600160a81b0319169055339183917f1218f3cb1d0d9f0fa16edd3d92a08e141c46d98b93fced41a8a97479a5a6663c91a350565b60608060608060608060008060005b6006548111610b9f576000818152600a602052604090206005015460ff1615610b8d5782610b898161380e565b9350505b80610b978161380e565b915050610b5c565b508115610ef8576000826001600160401b03811115610bc057610bc061387f565b604051908082528060200260200182016040528015610be9578160200160208202803683370190505b5090506000836001600160401b03811115610c0657610c0661387f565b604051908082528060200260200182016040528015610c2f578160200160208202803683370190505b5090506000846001600160401b03811115610c4c57610c4c61387f565b604051908082528060200260200182016040528015610c75578160200160208202803683370190505b5090506000856001600160401b03811115610c9257610c9261387f565b604051908082528060200260200182016040528015610cbb578160200160208202803683370190505b5090506000866001600160401b03811115610cd857610cd861387f565b604051908082528060200260200182016040528015610d01578160200160208202803683370190505b5090506000876001600160401b03811115610d1e57610d1e61387f565b604051908082528060200260200182016040528015610d47578160200160208202803683370190505b50905060005b600554811015610ee0576000818152600a602052604090206005015460ff1615610ec15780878981518110610d8457610d84613869565b602002602001018181525050600a600082815260200190815260200160002060010154868981518110610db957610db9613869565b602002602001018181525050600a600082815260200190815260200160002060020154858981518110610dee57610dee613869565b602002602001018181525050600a600082815260200190815260200160002060030154848981518110610e2357610e23613869565b602002602001018181525050600a600082815260200190815260200160002060040154838981518110610e5857610e58613869565b602002602001018181525050600a600082815260200190815260200160002060050160019054906101000a90046001600160a01b0316828981518110610ea057610ea0613869565b60200260200101906001600160a01b031690816001600160a01b0316815250505b88881415610ece57610ee0565b80610ed88161380e565b915050610d4d565b50949c50929a50909850965094509250610f3d915050565b505060408051600080825260208201818152828401828152606084018381526080850184815260a0860194855260c08601909652939a50909850965090945090925090505b909192939495565b60008211610f855760405162461bcd60e51b815260206004820152600d60248201526c0206e756d206d757374203e203609c1b60448201526064016107be565b600b33610f918661236d565b604051602001610fa2929190613276565b60408051601f1981840301815290829052610fbc916132ae565b90815260200160405180910390205482610fd69190613715565b610fe03386610757565b10156110275760405162461bcd60e51b81526020600482015260166024820152750e8ded6cadcbed2c840dceada40d2e640cadccedeead60531b60448201526064016107be565b6103e883116110685760405162461bcd60e51b815260206004820152600d60248201526c707269636520746f6f206c6f7760981b60448201526064016107be565b80156110bb574281116110b65760405162461bcd60e51b8152602060048201526016602482015275656e645f74696d65206973206d757374203e206e6f7760501b60448201526064016107be565b6110bf565b5060005b6040805160e08101825260065480825260208083018881528385018781526060850189815260808601888152600160a088018181523360c08a018181526000998a52600a90985299909720975188559351938701939093559051600286015551600385015551600484015590516005909201805491516001600160a81b0319909216921515610100600160a81b031916929092176101006001600160a01b03909216919091021790558290600b906111768761236d565b604051602001611187929190613276565b60408051601f19818403018152908290526111a1916132ae565b9081526020016040518091039020546111ba9190613715565b600b336111c68761236d565b6040516020016111d7929190613276565b60408051601f19818403018152908290526111f1916132ae565b90815260408051602092819003830181209390935560065485845291830186905233908301526060820183905285917ff7b1e6c167a9bc203409829ddbbc2f2b9919d565436a63e79c08e817a9816f209060800160405180910390a36006805490600061125d8361380e565b919050555050505050565b6004548311156112b05760405162461bcd60e51b8152602060048201526013602482015272206e756d206d757374203c206d61785f6e756d60681b60448201526064016107be565b60408051606081018252338152602080820185815282840185905260055460009081526009835293909320825181546001600160a01b0319166001600160a01b039091161781559251805192939261130e9260018501920190612c40565b506040820151805161132a916002840191602090910190612c40565b5090505061134b336005548560405180602001604052806000815250612472565b6005805490600061135b8361380e565b9190505550505050565b61136d612300565b478111156113b65760405162461bcd60e51b81526020600482015260166024820152755f62616c616e6365206d757374203c206f776e65727360501b60448201526064016107be565b60006113ca6003546001600160a01b031690565b6040519091506001600160a01b0382169083156108fc029084906000818181858888f19350505050158015611403573d6000803e3d6000fd5b505050565b6001600160a01b038516331480611424575061142485336106ba565b6114405760405162461bcd60e51b81526004016107be90613550565b61144d8585858585612586565b5050505050565b61145c612300565b6064811061149e5760405162461bcd60e51b815260206004820152600f60248201526e05f6e756d206d757374203c2031303608c1b60448201526064016107be565b6064600754826114ae9190613715565b106114d55760405162461bcd60e51b815260206004820152600060248201526044016107be565b600855565b6060815183511461153f5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b60648201526084016107be565b600083516001600160401b0381111561155a5761155a61387f565b604051908082528060200260200182016040528015611583578160200160208202803683370190505b50905060005b84518110156115fb576115ce8582815181106115a7576115a7613869565b60200260200101518583815181106115c1576115c1613869565b6020026020010151610757565b8282815181106115e0576115e0613869565b60209081029190910101526115f48161380e565b9050611589565b509392505050565b6000828152600a602052604090206005015461010090046001600160a01b031633146116415760405162461bcd60e51b81526004016107be906136ce565b6000828152600a602052604090206005015460ff1615156001146116775760405162461bcd60e51b81526004016107be906136ad565b6000828152600a60205260409020600281015460019091015461169b903390610757565b10156116e25760405162461bcd60e51b81526020600482015260166024820152750e8ded6cadcbed2c840dceada40d2e640cadccedeead60531b60448201526064016107be565b6103e881116117235760405162461bcd60e51b815260206004820152600d60248201526c707269636520746f6f206c6f7760981b60448201526064016107be565b6000828152600a6020526040908190206003018290555182907f56d448a31039ed8b2c91a20a29c04350e1dd7918b0e0f1da02fb9c8c20f3123d9061176b9084815260200190565b60405180910390a25050565b61177f612300565b6117896000612763565b565b6060806000806000805b6005548110156117d15760006117ab8883610757565b11156117bf57836117bb8161380e565b9450505b806117c98161380e565b915050611795565b5082156118fb576000836001600160401b038111156117f2576117f261387f565b60405190808252806020026020018201604052801561181b578160200160208202803683370190505b5090506000846001600160401b038111156118385761183861387f565b604051908082528060200260200182016040528015611861578160200160208202803683370190505b50905060005b6005548110156118ed5761187b8982610757565b935083156118ce578083868151811061189657611896613869565b602002602001018181525050838286815181106118b5576118b5613869565b6020908102919091010152846118ca8161380e565b9550505b858514156118db576118ed565b806118e58161380e565b915050611867565b509097909650945050505050565b5050604080516000808252602082019081528183019092529590945092505050565b6119283383836127b5565b5050565b336000908152600c60205260409020546119805760405162461bcd60e51b81526020600482015260156024820152740796f75722062616c616e6365206d757374203e203605c1b60448201526064016107be565b336000908152600c60205260409020544710156119df5760405162461bcd60e51b815260206004820152601860248201527f42616c616e6365206d75737420626520706f736974697665000000000000000060448201526064016107be565b336000818152600c60205260408082205490519192918381818185875af1925050503d8060008114611a2d576040519150601f19603f3d011682016040523d82523d6000602084013e611a32565b606091505b5090915050600181151514611a4657600080fd5b50336000908152600c6020526040812055565b60008211611a995760405162461bcd60e51b815260206004820152600d60248201526c0206e756d206d757374203e203609c1b60448201526064016107be565b81611aa43385610757565b1015611ac25760405162461bcd60e51b81526004016107be9061362c565b6114033382858560405180602001604052806000815250612896565b6000828152600a602052604090206005015460ff16611b2b5760405162461bcd60e51b81526020600482015260096024820152681a5cc81cd95b1b195960ba1b60448201526064016107be565b6000828152600a6020526040902060020154811115611b5c5760405162461bcd60e51b81526004016107be9061362c565b6000828152600a6020526040902060058101546001909101548291611b90916101009091046001600160a01b031690610757565b1015611bae5760405162461bcd60e51b81526004016107be9061362c565b6000828152600a6020526040812060030154611bcb908390613741565b905080341015611c105760405162461bcd60e51b815260206004820152601060248201526f7072696365206e6f7420656e67686f7560801b60448201526064016107be565b6000838152600a602052604090206004015415611c79576000838152600a6020526040902060040154421115611c795760405162461bcd60e51b815260206004820152600e60248201526d037b93232b91034b99037bb32b9160951b60448201526064016107be565b6000838152600a6020526040902060020154611c96908390613760565b6000848152600a6020526040902060020181905560011115611ccc576000838152600a60205260409020600501805460ff191690555b6000838152600a6020908152604080832060058101546001909101548251938401909252928252611d109261010090046001600160a01b0316913391908690612896565b6000838152600a6020526040902060058101546001909101548391600b916101009091046001600160a01b031690611d479061236d565b604051602001611d58929190613276565b60408051601f1981840301815290829052611d72916132ae565b908152602001604051809103902054611d8b9190613760565b6000848152600a602052604090206005810154600190910154600b9161010090046001600160a01b031690611dbf9061236d565b604051602001611dd0929190613276565b60408051601f1981840301815290829052611dea916132ae565b90815260405190819003602001902055600854600754600091606491611e109083613760565b611e1a9190613760565b611e249084613741565b611e2e919061372d565b90506000606460085484611e429190613741565b611e4c919061372d565b6000868152600a602052604080822060050154905192935061010090046001600160a01b031691829085908381818185875af1925050503d8060008114611eaf576040519150601f19603f3d011682016040523d82523d6000602084013e611eb4565b606091505b5050905080611eee5760405162461bcd60e51b815260206004820152600660248201526519985a5b195960d21b60448201526064016107be565b6000878152600a6020908152604080832060010154835260098252808320546001600160a01b03168352600c909152902054611f2b908490613715565b6000888152600a602081815260408084206001018054855260098352818520546001600160a01b03168552600c835281852095909555928b90529081529154815188815292830189905233838301529051909189917f03ead356efd518f25112a94d2a0d02c45de70c0b95afdaa699c4d8af718949e49181900360600190a350505050505050565b6000828152600a602052604090206005015461010090046001600160a01b03163314611ff15760405162461bcd60e51b81526004016107be906136ce565b6000828152600a602052604090206005015460ff1615156001146120275760405162461bcd60e51b81526004016107be906136ad565b6000828152600a60205260409020600281015460019091015461204b903390610757565b10156120695760405162461bcd60e51b81526004016107be9061362c565b80156120bc574281116120b75760405162461bcd60e51b8152602060048201526016602482015275656e645f74696d65206973206d757374203e206e6f7760501b60448201526064016107be565b6120c0565b5060005b6000828152600a6020526040908190206004018290555182907f3b2834667af080bc1c4dd58d902bb87b7f5b272f4a4c020a54308fed50a3dadb9061176b9084815260200190565b6001600160a01b038516331480612124575061212485336106ba565b6121405760405162461bcd60e51b81526004016107be90613550565b61144d8585858585612896565b612155612300565b6001600160a01b0381166121ba5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016107be565b61085d81612763565b600960205260009081526040902080546001820180546001600160a01b0390921692916121ef906137a7565b80601f016020809104026020016040519081016040528092919081815260200182805461221b906137a7565b80156122685780601f1061223d57610100808354040283529160200191612268565b820191906000526020600020905b81548152906001019060200180831161224b57829003601f168201915b50505050509080600201805461227d906137a7565b80601f01602080910402602001604051908101604052809291908181526020018280546122a9906137a7565b80156122f65780601f106122cb576101008083540402835291602001916122f6565b820191906000526020600020905b8154815290600101906020018083116122d957829003601f168201915b5050505050905083565b6003546001600160a01b031633146117895760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107be565b8051611928906002906020840190612c40565b6060816123915750506040805180820190915260018152600360fc1b602082015290565b8160005b81156123bb57806123a58161380e565b91506123b49050600a8361372d565b9150612395565b6000816001600160401b038111156123d5576123d561387f565b6040519080825280601f01601f1916602001820160405280156123ff576020820181803683370190505b5090505b841561246a57612414600183613760565b9150612421600a86613829565b61242c906030613715565b60f81b81838151811061244157612441613869565b60200101906001600160f81b031916908160001a905350612463600a8661372d565b9450612403565b949350505050565b6001600160a01b0384166124d25760405162461bcd60e51b815260206004820152602160248201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b60648201526084016107be565b3360006124de856129c0565b905060006124eb856129c0565b90506000868152602081815260408083206001600160a01b038b1684529091528120805487929061251d908490613715565b909155505060408051878152602081018790526001600160a01b03808a1692600092918716917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a461257d83600089898989612a0b565b50505050505050565b81518351146125e85760405162461bcd60e51b815260206004820152602860248201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206044820152670dad2e6dac2e8c6d60c31b60648201526084016107be565b6001600160a01b03841661260e5760405162461bcd60e51b81526004016107be906135e7565b3360005b84518110156126f557600085828151811061262f5761262f613869565b60200260200101519050600085838151811061264d5761264d613869565b602090810291909101810151600084815280835260408082206001600160a01b038e16835290935291909120549091508181101561269d5760405162461bcd60e51b81526004016107be90613663565b6000838152602081815260408083206001600160a01b038e8116855292528083208585039055908b168252812080548492906126da908490613715565b92505081905550505050806126ee9061380e565b9050612612565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051612745929190613467565b60405180910390a461275b818787878787612b76565b505050505050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b816001600160a01b0316836001600160a01b031614156128295760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b60648201526084016107be565b6001600160a01b03838116600081815260016020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b0384166128bc5760405162461bcd60e51b81526004016107be906135e7565b3360006128c8856129c0565b905060006128d5856129c0565b90506000868152602081815260408083206001600160a01b038c168452909152902054858110156129185760405162461bcd60e51b81526004016107be90613663565b6000878152602081815260408083206001600160a01b038d8116855292528083208985039055908a16825281208054889290612955908490613715565b909155505060408051888152602081018890526001600160a01b03808b16928c821692918816917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a46129b5848a8a8a8a8a612a0b565b505050505050505050565b604080516001808252818301909252606091600091906020808301908036833701905050905082816000815181106129fa576129fa613869565b602090810291909101015292915050565b6001600160a01b0384163b1561275b5760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e6190612a4f90899089908890889088906004016133cf565b602060405180830381600087803b158015612a6957600080fd5b505af1925050508015612a99575060408051601f3d908101601f19168201909252612a9691810190613094565b60015b612b4657612aa5613895565b806308c379a01415612adf5750612aba6138b1565b80612ac55750612ae1565b8060405162461bcd60e51b81526004016107be919061353d565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e20455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b60648201526084016107be565b6001600160e01b0319811663f23a6e6160e01b1461257d5760405162461bcd60e51b81526004016107be9061359f565b6001600160a01b0384163b1561275b5760405163bc197c8160e01b81526001600160a01b0385169063bc197c8190612bba9089908990889088908890600401613371565b602060405180830381600087803b158015612bd457600080fd5b505af1925050508015612c04575060408051601f3d908101601f19168201909252612c0191810190613094565b60015b612c1057612aa5613895565b6001600160e01b0319811663bc197c8160e01b1461257d5760405162461bcd60e51b81526004016107be9061359f565b828054612c4c906137a7565b90600052602060002090601f016020900481019282612c6e5760008555612cb4565b82601f10612c8757805160ff1916838001178555612cb4565b82800160010185558215612cb4579182015b82811115612cb4578251825591602001919060010190612c99565b50612cc0929150612cc4565b5090565b5b80821115612cc05760008155600101612cc5565b80356001600160a01b0381168114612cf057600080fd5b919050565b600082601f830112612d0657600080fd5b81356020612d13826136f2565b604051612d2082826137e2565b8381528281019150858301600585901b87018401881015612d4057600080fd5b60005b85811015612d5f57813584529284019290840190600101612d43565b5090979650505050505050565b600082601f830112612d7d57600080fd5b81356001600160401b03811115612d9657612d9661387f565b604051612dad601f8301601f1916602001826137e2565b818152846020838601011115612dc257600080fd5b816020850160208301376000918101602001919091529392505050565b600060208284031215612df157600080fd5b612dfa82612cd9565b9392505050565b60008060408385031215612e1457600080fd5b612e1d83612cd9565b9150612e2b60208401612cd9565b90509250929050565b600080600080600060a08688031215612e4c57600080fd5b612e5586612cd9565b9450612e6360208701612cd9565b935060408601356001600160401b0380821115612e7f57600080fd5b612e8b89838a01612cf5565b94506060880135915080821115612ea157600080fd5b612ead89838a01612cf5565b93506080880135915080821115612ec357600080fd5b50612ed088828901612d6c565b9150509295509295909350565b600080600080600060a08688031215612ef557600080fd5b612efe86612cd9565b9450612f0c60208701612cd9565b9350604086013592506060860135915060808601356001600160401b03811115612f3557600080fd5b612ed088828901612d6c565b60008060408385031215612f5457600080fd5b612f5d83612cd9565b915060208301358015158114612f7257600080fd5b809150509250929050565b60008060408385031215612f9057600080fd5b612f9983612cd9565b946020939093013593505050565b60008060408385031215612fba57600080fd5b82356001600160401b0380821115612fd157600080fd5b818501915085601f830112612fe557600080fd5b81356020612ff2826136f2565b604051612fff82826137e2565b8381528281019150858301600585901b870184018b101561301f57600080fd5b600096505b848710156130495761303581612cd9565b835260019690960195918301918301613024565b509650508601359250508082111561306057600080fd5b5061306d85828601612cf5565b9150509250929050565b60006020828403121561308957600080fd5b8135612dfa8161393a565b6000602082840312156130a657600080fd5b8151612dfa8161393a565b6000602082840312156130c357600080fd5b81356001600160401b038111156130d957600080fd5b61246a84828501612d6c565b6000602082840312156130f757600080fd5b5035919050565b60008060006060848603121561311357600080fd5b8335925060208401356001600160401b038082111561313157600080fd5b61313d87838801612d6c565b9350604086013591508082111561315357600080fd5b5061316086828701612d6c565b9150509250925092565b6000806040838503121561317d57600080fd5b50508035926020909101359150565b6000806000606084860312156131a157600080fd5b83359250602084013591506131b860408501612cd9565b90509250925092565b600080600080608085870312156131d757600080fd5b5050823594602084013594506040840135936060013592509050565b600081518084526020808501945080840160005b8381101561322357815187529582019590820190600101613207565b509495945050505050565b60008151808452613246816020860160208601613777565b601f01601f19169290920160200192915050565b6000815161326c818560208601613777565b9290920192915050565b6bffffffffffffffffffffffff198360601b168152600082516132a0816014850160208701613777565b919091016014019392505050565b600082516132c0818460208701613777565b9190910192915050565b600080845481600182811c9150808316806132e657607f831692505b602080841082141561330657634e487b7160e01b86526022600452602486fd5b81801561331a576001811461332b57613358565b60ff19861689528489019650613358565b60008b81526020902060005b868110156133505781548b820152908501908301613337565b505084890196505b505050505050613368818561325a565b95945050505050565b6001600160a01b0386811682528516602082015260a06040820181905260009061339d908301866131f3565b82810360608401526133af81866131f3565b905082810360808401526133c3818561322e565b98975050505050505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a0608082018190526000906134099083018461322e565b979650505050505050565b6001600160a01b03841681526060602082018190526000906134389083018561322e565b828103604084015261344a818561322e565b9695505050505050565b602081526000612dfa60208301846131f3565b60408152600061347a60408301856131f3565b828103602084015261336881856131f3565b60c08152600061349f60c08301896131f3565b6020838203818501526134b2828a6131f3565b915083820360408501526134c682896131f3565b915083820360608501526134da82886131f3565b915083820360808501526134ee82876131f3565b84810360a0860152855180825282870193509082019060005b8181101561352c5784516001600160a01b031683529383019391830191600101613507565b50909b9a5050505050505050505050565b602081526000612dfa602083018461322e565b6020808252602f908201527f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60408201526e195c881b9bdc88185c1c1c9bdd9959608a1b606082015260800190565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252601a908201527f746f6b656e5f6964206e756d206973206e6f7420656e676f7568000000000000604082015260600190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b6020808252600790820152661a5cc81d5cd95960ca1b604082015260600190565b6020808252600a90820152696973206e6f7420796f7560b01b604082015260600190565b60006001600160401b0382111561370b5761370b61387f565b5060051b60200190565b600082198211156137285761372861383d565b500190565b60008261373c5761373c613853565b500490565b600081600019048311821515161561375b5761375b61383d565b500290565b6000828210156137725761377261383d565b500390565b60005b8381101561379257818101518382015260200161377a565b838111156137a1576000848401525b50505050565b600181811c908216806137bb57607f821691505b602082108114156137dc57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8201601f191681016001600160401b03811182821017156138075761380761387f565b6040525050565b60006000198214156138225761382261383d565b5060010190565b60008261383857613838613853565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b600060033d11156138ae5760046000803e5060005160e01c5b90565b600060443d10156138bf5790565b6040516003193d81016004833e81513d6001600160401b0381602484011181841117156138ee57505050505090565b82850191508151818111156139065750505050505090565b843d87010160208285010111156139205750505050505090565b61392f602082860101876137e2565b509095945050505050565b6001600160e01b03198116811461085d57600080fdfea264697066735822122013bf77ad8651898dee97b9a01e4756823714f1b9fd71a937b9c9ea510d97f09f64736f6c63430008070033

Deployed Bytecode Sourcemap

41986:11339:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23704:230;;;;;;;;;;-1:-1:-1;23704:230:0;;;;;:::i;:::-;;:::i;:::-;;;26627:25:1;;;26615:2;26600:18;23704:230:0;;;;;;;;22727:310;;;;;;;;;;-1:-1:-1;22727:310:0;;;;;:::i;:::-;;:::i;:::-;;;15548:14:1;;15541:22;15523:41;;15511:2;15496:18;22727:310:0;15383:187:1;44583:83:0;;;;;;;;;;-1:-1:-1;44583:83:0;;;;;:::i;:::-;;:::i;:::-;;43968:89;;;;;;;;;;-1:-1:-1;43968:89:0;;;;;:::i;:::-;;:::i;22518:18::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;53126:192::-;;;;;;;;;;-1:-1:-1;53126:192:0;;;;;:::i;:::-;;:::i;44679:185::-;;;;;;;;;;-1:-1:-1;44679:185:0;;;;;:::i;:::-;;:::i;46679:508::-;;;;;;;;;;-1:-1:-1;46679:508:0;;;;;:::i;:::-;;:::i;51322:1416::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;45316:1348::-;;;;;;;;;;-1:-1:-1;45316:1348:0;;;;;:::i;:::-;;:::i;43515:445::-;;;;;;;;;;-1:-1:-1;43515:445:0;;;;;:::i;:::-;;:::i;45065:229::-;;;;;;;;;;-1:-1:-1;45065:229:0;;;;;:::i;:::-;;:::i;25648:439::-;;;;;;;;;;-1:-1:-1;25648:439:0;;;;;:::i;:::-;;:::i;42158:23::-;;;;;;;;;;;;;;;;44877:175;;;;;;;;;;-1:-1:-1;44877:175:0;;;;;:::i;:::-;;:::i;24100:524::-;;;;;;;;;;-1:-1:-1;24100:524:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;47203:512::-;;;;;;;;;;-1:-1:-1;47203:512:0;;;;;:::i;:::-;;:::i;42292:44::-;;;;;;;;;;-1:-1:-1;42292:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;41114:103;;;;;;;;;;;;;:::i;50402:907::-;;;;;;;;;;-1:-1:-1;50402:907:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;42245:38::-;;;;;;;;;;-1:-1:-1;42245:38:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;42245:38:0;;;;;;;27997:25:1;;;28053:2;28038:18;;28031:34;;;;28081:18;;;28074:34;;;;28139:2;28124:18;;28117:34;;;;28182:3;28167:19;;28160:35;28239:14;28232:22;28226:3;28211:19;;28204:51;-1:-1:-1;;;;;28292:32:1;28286:3;28271:19;;28264:61;27984:3;27969:19;42245:38:0;27688:643:1;40466:87:0;;;;;;;;;;-1:-1:-1;40539:6:0;;-1:-1:-1;;;;;40539:6:0;40466:87;;;-1:-1:-1;;;;;11069:32:1;;;11051:51;;11039:2;11024:18;40466:87:0;10905:203:1;42340:47:0;;;;;;;;;;-1:-1:-1;42340:47:0;;;;;:::i;:::-;;;;;;;;;;;;;;24697:155;;;;;;;;;;-1:-1:-1;24697:155:0;;;;;:::i;:::-;;:::i;44200:367::-;;;;;;;;;;;;;:::i;52752:364::-;;;;;;;;;;-1:-1:-1;52752:364:0;;;;;:::i;:::-;;:::i;48400:1990::-;;;;;;:::i;:::-;;:::i;42126:25::-;;;;;;;;;;;;;;;;47731:654;;;;;;;;;;-1:-1:-1;47731:654:0;;;;;:::i;:::-;;:::i;44070:116::-;;;;;;;;;;-1:-1:-1;44070:116:0;;;;;:::i;:::-;44126:7;44153:17;;;:13;:17;;;;;:25;-1:-1:-1;;;;;44153:25:0;;44070:116;24924:168;;;;;;;;;;-1:-1:-1;24924:168:0;;;;;:::i;:::-;-1:-1:-1;;;;;25047:27:0;;;25023:4;25047:27;;;:18;:27;;;;;;;;:37;;;;;;;;;;;;;;;24924:168;25164:407;;;;;;;;;;-1:-1:-1;25164:407:0;;;;;:::i;:::-;;:::i;41372:201::-;;;;;;;;;;-1:-1:-1;41372:201:0;;;;;:::i;:::-;;:::i;42191:47::-;;;;;;;;;;-1:-1:-1;42191:47:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;23704:230::-;23790:7;-1:-1:-1;;;;;23818:21:0;;23810:76;;;;-1:-1:-1;;;23810:76:0;;19730:2:1;23810:76:0;;;19712:21:1;19769:2;19749:18;;;19742:30;19808:34;19788:18;;;19781:62;-1:-1:-1;;;19859:18:1;;;19852:40;19909:19;;23810:76:0;;;;;;;;;-1:-1:-1;23904:9:0;:13;;;;;;;;;;;-1:-1:-1;;;;;23904:22:0;;;;;;;;;;;;23704:230::o;22727:310::-;22829:4;-1:-1:-1;;;;;;22866:41:0;;-1:-1:-1;;;22866:41:0;;:110;;-1:-1:-1;;;;;;;22924:52:0;;-1:-1:-1;;;22924:52:0;22866:110;:163;;;-1:-1:-1;;;;;;;;;;13225:40:0;;;22993:36;22846:183;22727:310;-1:-1:-1;;22727:310:0:o;44583:83::-;40352:13;:11;:13::i;:::-;44644:7:::1;:14:::0;44583:83::o;43968:89::-;40352:13;:11;:13::i;:::-;44034:15:::1;44042:6;44034:7;:15::i;:::-;43968:89:::0;:::o;22518:18::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;53126:192::-;53194:13;53274:4;53280:18;:7;:16;:18::i;:::-;53257:42;;;;;;;;;:::i;:::-;;;;;;;;;;;;;53220:90;;53126:192;;;:::o;44679:185::-;40352:13;:11;:13::i;:::-;44757:3:::1;44751:4;:9;44743:36;;;::::0;-1:-1:-1;;;44743:36:0;;18691:2:1;44743:36:0::1;::::0;::::1;18673:21:1::0;18730:2;18710:18;;;18703:30;-1:-1:-1;;;18749:18:1;;;18742:45;18804:18;;44743:36:0::1;18489:339:1::0;44743:36:0::1;44819:3;44807:8;;44800:4;:15;;;;:::i;:::-;44799:23;44790:38;;;::::0;-1:-1:-1;;;44790:38:0;;23404:2:1;44790:38:0::1;::::0;::::1;23386:21:1::0;-1:-1:-1;23423:18:1;;;23416:29;23462:18;;44790:38:0::1;23202:284:1::0;44790:38:0::1;44839:10;:17:::0;44679:185::o;46679:508::-;46757:16;;;;:7;:16;;;;;:23;;;;;;-1:-1:-1;;;;;46757:23:0;46784:10;46757:37;46749:60;;;;-1:-1:-1;;;46749:60:0;;;;;;;:::i;:::-;46828:16;;;;:7;:16;;;;;:23;;;;;:31;;:23;:31;46820:51;;;;-1:-1:-1;;;46820:51:0;;;;;;;:::i;:::-;47061:16;;;;:7;:16;;;;;:20;;;;47019:25;;;;;46973:9;;47007:10;;47019:36;;:34;:36::i;:::-;46990:66;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;46990:66:0;;;;;;;;;;46973:85;;;:::i;:::-;;;;;;;;;;;;;;:108;;;;:::i;:::-;46928:16;;;;:7;:16;;;;;:25;;;46882:9;;46916:10;;46928:36;;:34;:36::i;:::-;46899:66;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;46899:66:0;;;;;;;;;;46882:85;;;:::i;:::-;;;;;;;;;;;;;;;;:199;;;;47099:16;;;;:7;:16;;;;;47092:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;47092:23:0;;;47167:10;;47099:16;;47133:46;;;46679:508;:::o;51322:1416::-;51367:16;51385;51402;51419;51436;51453;51482:9;51506;51534;51530:122;51549:10;;51546:1;:13;51530:122;;51582:10;;;;:7;:10;;;;;:17;;;;;51579:62;;;51619:3;;;;:::i;:::-;;;;51579:62;51560:3;;;;:::i;:::-;;;;51530:122;;;-1:-1:-1;51665:5:0;;51662:1069;;51686:25;51729:1;-1:-1:-1;;;;;51715:16:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;51715:16:0;;51686:45;;51746:25;51789:1;-1:-1:-1;;;;;51775:16:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;51775:16:0;;51746:45;;51806:21;51845:1;-1:-1:-1;;;;;51831:16:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;51831:16:0;;51806:41;;51862:22;51902:1;-1:-1:-1;;;;;51888:16:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;51888:16:0;;51862:42;;51919:22;51959:1;-1:-1:-1;;;;;51945:16:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;51945:16:0;;51919:42;;51976:24;52018:1;-1:-1:-1;;;;;52004:16:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;52004:16:0;;51976:44;;52041:9;52037:476;52055:6;;52053:1;:8;52037:476;;;52088:10;;;;:7;:10;;;;;:17;;;;;52085:337;;;52143:1;52129:8;52138:1;52129:11;;;;;;;;:::i;:::-;;;;;;:15;;;;;52181:7;:10;52189:1;52181:10;;;;;;;;;;;:19;;;52167:8;52176:1;52167:11;;;;;;;;:::i;:::-;;;;;;:33;;;;;52233:7;:10;52241:1;52233:10;;;;;;;;;;;:14;;;52223:4;52228:1;52223:7;;;;;;;;:::i;:::-;;;;;;:24;;;;;52280:7;:10;52288:1;52280:10;;;;;;;;;;;:16;;;52270:5;52276:1;52270:8;;;;;;;;:::i;:::-;;;;;;:26;;;;;52330:7;:10;52338:1;52330:10;;;;;;;;;;;:19;;;52319:5;52325:1;52319:8;;;;;;;;:::i;:::-;;;;;;:30;;;;;52385:7;:10;52393:1;52385:10;;;;;;;;;;;:17;;;;;;;;;;-1:-1:-1;;;;;52385:17:0;52372:7;52380:1;52372:10;;;;;;;;:::i;:::-;;;;;;:30;-1:-1:-1;;;;;52372:30:0;;;-1:-1:-1;;;;;52372:30:0;;;;;52085:337;52448:1;52443;:6;52440:58;;;52473:5;;52440:58;52062:3;;;;:::i;:::-;;;;52037:476;;;-1:-1:-1;52535:8:0;;-1:-1:-1;52544:8:0;;-1:-1:-1;52553:4:0;;-1:-1:-1;52558:5:0;-1:-1:-1;52564:5:0;-1:-1:-1;52570:7:0;-1:-1:-1;52527:51:0;;-1:-1:-1;;52527:51:0;51662:1069;-1:-1:-1;;52617:16:0;;;52631:1;52617:16;;;;;;52634;;;;;;52651;;;;;;52668;;;;;;52685;;;;;;52702;;;;;;;;;52617;;-1:-1:-1;52617:16:0;;-1:-1:-1;52634:16:0;-1:-1:-1;52651:16:0;;-1:-1:-1;52668:16:0;;-1:-1:-1;52685:16:0;-1:-1:-1;51322:1416:0;;;;;;;:::o;45316:1348::-;45500:1;45494:3;:7;45468:82;;;;-1:-1:-1;;;45468:82:0;;19388:2:1;45468:82:0;;;19370:21:1;19427:2;19407:18;;;19400:30;-1:-1:-1;;;19446:18:1;;;19439:43;19499:18;;45468:82:0;19186:337:1;45468:82:0;45624:9;45658:10;45670:19;:8;:17;:19::i;:::-;45641:49;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;45641:49:0;;;;;;;;;;45624:68;;;:::i;:::-;;;;;;;;;;;;;;45620:3;:72;;;;:::i;:::-;45585:30;45595:10;45606:8;45585:9;:30::i;:::-;:108;;45563:180;;;;-1:-1:-1;;;45563:180:0;;21596:2:1;45563:180:0;;;21578:21:1;21635:2;21615:18;;;21608:30;-1:-1:-1;;;21654:18:1;;;21647:52;21716:18;;45563:180:0;21394:346:1;45563:180:0;45772:4;45764:5;:12;45756:38;;;;-1:-1:-1;;;45756:38:0;;18349:2:1;45756:38:0;;;18331:21:1;18388:2;18368:18;;;18361:30;-1:-1:-1;;;18407:18:1;;;18400:43;18460:18;;45756:38:0;18147:337:1;45756:38:0;45808:12;;45805:147;;45855:15;45844:8;:26;45836:61;;;;-1:-1:-1;;;45836:61:0;;20141:2:1;45836:61:0;;;20123:21:1;20180:2;20160:18;;;20153:30;-1:-1:-1;;;20199:18:1;;;20192:52;20261:18;;45836:61:0;19939:346:1;45836:61:0;45805:147;;;-1:-1:-1;45939:1:0;45805:147;45988:265;;;;;;;;46015:10;;45988:265;;;;;;;;;;;;;;;;;;;;;;;;;;;;46233:4;45988:265;;;;;;46195:10;45988:265;;;;;;-1:-1:-1;45966:19:0;;;:7;:19;;;;;;;:287;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;45966:287:0;;;;;;-1:-1:-1;;;;;;45966:287:0;;;;;;-1:-1:-1;;;;;45966:287:0;;;;;;;;;;45988:265;;46347:9;;46393:19;45988:265;46393:17;:19::i;:::-;46364:49;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;46364:49:0;;;;;;;;;;46347:68;;;:::i;:::-;;;;;;;;;;;;;;:73;;;;:::i;:::-;46274:9;46308:10;46320:19;:8;:17;:19::i;:::-;46291:49;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;46291:49:0;;;;;;;;;;46274:68;;;:::i;:::-;;;;;;;;;;;;;;;;:146;;;;46471:10;;27497:25:1;;;27538:18;;;27531:34;;;46587:10:0;27581:18:1;;;27574:60;27665:2;27650:18;;27643:34;;;46506:8:0;;46440:192;;27484:3:1;27469:19;46440:192:0;;;;;;;46643:10;:13;;;:10;:13;;;:::i;:::-;;;;;;45316:1348;;;;:::o;43515:445::-;43679:7;;43669:6;:17;;43643:94;;;;-1:-1:-1;;;43643:94:0;;26335:2:1;43643:94:0;;;26317:21:1;26374:2;26354:18;;;26347:30;-1:-1:-1;;;26393:18:1;;;26386:49;26452:18;;43643:94:0;26133:343:1;43643:94:0;43779:106;;;;;;;;43809:10;43779:106;;;;;;;;;;;;;;;43768:6;;-1:-1:-1;43754:21:0;;;:13;:21;;;;;;:131;;;;-1:-1:-1;;;;;;43754:131:0;-1:-1:-1;;;;;43754:131:0;;;;;;;;;;43779:106;;43754:21;:131;;-1:-1:-1;43754:131:0;;;;;;:::i;:::-;-1:-1:-1;43754:131:0;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;43896:37;43902:10;43914:6;;43922;43896:37;;;;;;;;;;;;:5;:37::i;:::-;43944:6;:8;;;:6;:8;;;:::i;:::-;;;;;;43515:445;;;:::o;45065:229::-;40352:13;:11;:13::i;:::-;45151:21:::1;45139:8;:33;;45131:67;;;::::0;-1:-1:-1;;;45131:67:0;;21947:2:1;45131:67:0::1;::::0;::::1;21929:21:1::0;21986:2;21966:18;;;21959:30;-1:-1:-1;;;22005:18:1;;;21998:52;22067:18;;45131:67:0::1;21745:346:1::0;45131:67:0::1;45209:22;45242:7;40539:6:::0;;-1:-1:-1;;;;;40539:6:0;;40466:87;45242:7:::1;45261:25;::::0;45209:41;;-1:-1:-1;;;;;;45261:15:0;::::1;::::0;:25;::::1;;;::::0;45277:8;;45261:25:::1;::::0;;;45277:8;45261:15;:25;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;45120:174;45065:229:::0;:::o;25648:439::-;-1:-1:-1;;;;;25881:20:0;;21502:10;25881:20;;:60;;-1:-1:-1;25905:36:0;25922:4;21502:10;24924:168;:::i;25905:36::-;25859:157;;;;-1:-1:-1;;;25859:157:0;;;;;;;:::i;:::-;26027:52;26050:4;26056:2;26060:3;26065:7;26074:4;26027:22;:52::i;:::-;25648:439;;;;;:::o;44877:175::-;40352:13;:11;:13::i;:::-;44953:3:::1;44947:4;:9;44939:36;;;::::0;-1:-1:-1;;;44939:36:0;;18691:2:1;44939:36:0::1;::::0;::::1;18673:21:1::0;18730:2;18710:18;;;18703:30;-1:-1:-1;;;18749:18:1;;;18742:45;18804:18;;44939:36:0::1;18489:339:1::0;44939:36:0::1;45011:3;44999:10;;44994:4;:15;;;;:::i;:::-;:20;44986:32;;;::::0;-1:-1:-1;;;44986:32:0;;23404:2:1;44986:32:0::1;::::0;::::1;23386:21:1::0;-1:-1:-1;23423:18:1;;;23416:29;23462:18;;44986:32:0::1;23202:284:1::0;44986:32:0::1;45029:8;:15:::0;44877:175::o;24100:524::-;24256:16;24317:3;:10;24298:8;:15;:29;24290:83;;;;-1:-1:-1;;;24290:83:0;;24775:2:1;24290:83:0;;;24757:21:1;24814:2;24794:18;;;24787:30;24853:34;24833:18;;;24826:62;-1:-1:-1;;;24904:18:1;;;24897:39;24953:19;;24290:83:0;24573:405:1;24290:83:0;24386:30;24433:8;:15;-1:-1:-1;;;;;24419:30:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24419:30:0;;24386:63;;24467:9;24462:122;24486:8;:15;24482:1;:19;24462:122;;;24542:30;24552:8;24561:1;24552:11;;;;;;;;:::i;:::-;;;;;;;24565:3;24569:1;24565:6;;;;;;;;:::i;:::-;;;;;;;24542:9;:30::i;:::-;24523:13;24537:1;24523:16;;;;;;;;:::i;:::-;;;;;;;;;;:49;24503:3;;;:::i;:::-;;;24462:122;;;-1:-1:-1;24603:13:0;24100:524;-1:-1:-1;;;24100:524:0:o;47203:512::-;47291:16;;;;:7;:16;;;;;:23;;;;;;-1:-1:-1;;;;;47291:23:0;47318:10;47291:37;47283:60;;;;-1:-1:-1;;;47283:60:0;;;;;;;:::i;:::-;47362:16;;;;:7;:16;;;;;:23;;;;;:31;;:23;:31;47354:51;;;;-1:-1:-1;;;47354:51:0;;;;;;;:::i;:::-;47491:16;;;;:7;:16;;;;;:20;;;;47461:25;;;;;47440:47;;47450:10;;47440:9;:47::i;:::-;:71;;47418:143;;;;-1:-1:-1;;;47418:143:0;;21596:2:1;47418:143:0;;;21578:21:1;21635:2;21615:18;;;21608:30;-1:-1:-1;;;21654:18:1;;;21647:52;21716:18;;47418:143:0;21394:346:1;47418:143:0;47590:4;47582:5;:12;47574:38;;;;-1:-1:-1;;;47574:38:0;;18349:2:1;47574:38:0;;;18331:21:1;18388:2;18368:18;;;18361:30;-1:-1:-1;;;18407:18:1;;;18400:43;18460:18;;47574:38:0;18147:337:1;47574:38:0;47625:16;;;;:7;:16;;;;;;;:22;;:30;;;47673:34;47633:7;;47673:34;;;;47650:5;26627:25:1;;26615:2;26600:18;;26481:177;47673:34:0;;;;;;;;47203:512;;:::o;41114:103::-;40352:13;:11;:13::i;:::-;41179:30:::1;41206:1;41179:18;:30::i;:::-;41114:103::o:0;50402:907::-;50458:16;50476;50505:9;50529;50555:14;50588:9;50584:119;50602:6;;50600:1;:8;50584:119;;;50649:1;50631:17;50641:4;50646:1;50631:9;:17::i;:::-;:19;50628:64;;;50670:3;;;;:::i;:::-;;;;50628:64;50609:3;;;;:::i;:::-;;;;50584:119;;;-1:-1:-1;50716:5:0;;50713:585;;50737:25;50780:1;-1:-1:-1;;;;;50766:16:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;50766:16:0;;50737:45;;50797:21;50836:1;-1:-1:-1;;;;;50822:16:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;50822:16:0;;50797:41;;50859:9;50855:320;50873:6;;50871:1;:8;50855:320;;;50912:17;50922:4;50927:1;50912:9;:17::i;:::-;50903:26;-1:-1:-1;50951:8:0;;50948:136;;50998:1;50983:8;50992:1;50983:11;;;;;;;;:::i;:::-;;;;;;:16;;;;;51032:6;51022:4;51027:1;51022:7;;;;;;;;:::i;:::-;;;;;;;;;;:16;51061:3;;;;:::i;:::-;;;;50948:136;51110:1;51105;:6;51102:58;;;51135:5;;51102:58;50880:3;;;;:::i;:::-;;;;50855:320;;;-1:-1:-1;51199:8:0;;51208:4;;-1:-1:-1;50402:907:0;-1:-1:-1;;;;;50402:907:0:o;50713:585::-;-1:-1:-1;;51252:16:0;;;51266:1;51252:16;;;;;;51269;;;;;;;;;51252;;;-1:-1:-1;50402:907:0;-1:-1:-1;;;50402:907:0:o;24697:155::-;24792:52;21502:10;24825:8;24835;24792:18;:52::i;:::-;24697:155;;:::o;44200:367::-;44269:10;44283:1;44256:24;;;:12;:24;;;;;;44248:62;;;;-1:-1:-1;;;44248:62:0;;17247:2:1;44248:62:0;;;17229:21:1;17286:2;17266:18;;;17259:30;-1:-1:-1;;;17305:18:1;;;17298:51;17366:18;;44248:62:0;17045:345:1;44248:62:0;44368:10;44355:24;;;;:12;:24;;;;;;44330:21;:49;;44321:88;;;;-1:-1:-1;;;44321:88:0;;19035:2:1;44321:88:0;;;19017:21:1;19074:2;19054:18;;;19047:30;19113:26;19093:18;;;19086:54;19157:18;;44321:88:0;18833:348:1;44321:88:0;44439:10;44421:12;44462:24;;;:12;:24;;;;;;;44439:52;;44421:12;;44439:10;44421:12;44439:52;44421:12;44439:52;44462:24;44439:10;:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;44420:71:0;;-1:-1:-1;;44521:4:0;44510:15;;;;44502:24;;;;;;-1:-1:-1;44544:10:0;44558:1;44531:24;;;:12;:24;;;;;:28;44200:367::o;52752:364::-;52863:1;52857:3;:7;52831:82;;;;-1:-1:-1;;;52831:82:0;;19388:2:1;52831:82:0;;;19370:21:1;19427:2;19407:18;;;19400:30;-1:-1:-1;;;19446:18:1;;;19439:43;19499:18;;52831:82:0;19186:337:1;52831:82:0;52983:3;52946:33;52956:10;52967:11;52946:9;:33::i;:::-;:40;;52924:116;;;;-1:-1:-1;;;52924:116:0;;;;;;;:::i;:::-;53053:55;53071:10;53082:6;53089:11;53101:3;53053:55;;;;;;;;;;;;:17;:55::i;48400:1990::-;48516:16;;;;:7;:16;;;;;:23;;;;;48508:45;;;;-1:-1:-1;;;48508:45:0;;23693:2:1;48508:45:0;;;23675:21:1;23732:1;23712:18;;;23705:29;-1:-1:-1;;;23750:18:1;;;23743:39;23799:18;;48508:45:0;23491:332:1;48508:45:0;48597:16;;;;:7;:16;;;;;:20;;;48586:31;;;48564:107;;;;-1:-1:-1;;;48564:107:0;;;;;;;:::i;:::-;48714:16;;;;:7;:16;;;;;:23;;;;;48738:25;;;;48768:7;;48704:60;;48714:23;;;;-1:-1:-1;;;;;48714:23:0;;48704:9;:60::i;:::-;:71;;48682:147;;;;-1:-1:-1;;;48682:147:0;;;;;;;:::i;:::-;48840:18;48861:16;;;:7;:16;;;;;:22;;;:32;;48886:7;;48861:32;:::i;:::-;48840:53;;48933:10;48920:9;:23;;48911:53;;;;-1:-1:-1;;;48911:53:0;;17597:2:1;48911:53:0;;;17579:21:1;17636:2;17616:18;;;17609:30;-1:-1:-1;;;17655:18:1;;;17648:46;17711:18;;48911:53:0;17395:340:1;48911:53:0;49009:1;48980:16;;;:7;:16;;;;;:25;;;:30;48977:132;;49034:16;;;;:7;:16;;;;;:25;;;49063:15;-1:-1:-1;49034:44:0;49026:71;;;;-1:-1:-1;;;49026:71:0;;20492:2:1;49026:71:0;;;20474:21:1;20531:2;20511:18;;;20504:30;-1:-1:-1;;;20550:18:1;;;20543:44;20604:18;;49026:71:0;20290:338:1;49026:71:0;49144:16;;;;:7;:16;;;;;:20;;;:30;;49167:7;;49144:30;:::i;:::-;49121:16;;;;:7;:16;;;;;:20;;:53;;;49211:1;-1:-1:-1;49185:86:0;;;49254:5;49228:16;;;:7;:16;;;;;:23;;:31;;-1:-1:-1;;49228:31:0;;;49185:86;49301:16;;;;:7;:16;;;;;;;;:23;;;;;49336:25;;;;49283:90;;;;;;;;;;;;;49301:23;;;-1:-1:-1;;;;;49301:23:0;;49325:10;;49336:25;49362:7;;49283:17;:90::i;:::-;49519:16;;;;:7;:16;;;;;:23;;;;;49543:25;;;;49586:7;;49485:9;;49519:23;;;;-1:-1:-1;;;;;49519:23:0;;49543:36;;:34;:36::i;:::-;49502:78;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;49502:78:0;;;;;;;;;;49485:97;;;:::i;:::-;;;;;;;;;;;;;;:108;;;;:::i;:::-;49418:16;;;;:7;:16;;;;;:23;;;;;49442:25;;;;49384:9;;49418:23;;;-1:-1:-1;;;;;49418:23:0;;49442:36;;:34;:36::i;:::-;49401:78;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;49401:78:0;;;;;;;;;;49384:97;;;:::i;:::-;;;;;;;;;;;;;;:209;49659:8;;49646:10;;49606:19;;49669:3;;49640:16;;49669:3;49640:16;:::i;:::-;:27;;;;:::i;:::-;49628:40;;:10;:40;:::i;:::-;:44;;;;:::i;:::-;49606:66;;49683:20;49726:3;49717:8;;49706:10;:19;;;;:::i;:::-;:23;;;;:::i;:::-;49744:14;49769:16;;;:7;:16;;;;;;:23;;;49826:35;;49683:46;;-1:-1:-1;49769:23:0;;;-1:-1:-1;;;;;49769:23:0;;;;49845:11;;49744:14;49826:35;49744:14;49826:35;49845:11;49769:23;49826:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49808:53;;;49880:6;49872:25;;;;-1:-1:-1;;;49872:25:0;;22709:2:1;49872:25:0;;;22691:21:1;22748:1;22728:18;;;22721:29;-1:-1:-1;;;22766:18:1;;;22759:36;22812:18;;49872:25:0;22507:329:1;49872:25:0;50160:62;50187:16;;;:7;:16;;;;;;;;:25;;;50173:40;;:13;:40;;;;;:48;-1:-1:-1;;;;;50173:48:0;50160:62;;:12;:62;;;;;;:75;;50223:12;;50160:75;:::i;:::-;50095:62;50122:16;;;:7;:16;;;;;;;;:25;;;;50108:40;;:13;:40;;;;;:48;-1:-1:-1;;;;;50108:48:0;50095:62;;:12;:62;;;;;:140;;;;50295:16;;;;;;;:25;;50262:106;;27118:25:1;;;27159:18;;;27152:34;;;50356:10:0;27202:18:1;;;27195:60;50262:106:0;;50295:25;;50122:16;;50262:106;;;;;27106:2:1;50262:106:0;;;48497:1893;;;;;48400:1990;;:::o;47731:654::-;47826:16;;;;:7;:16;;;;;:23;;;;;;-1:-1:-1;;;;;47826:23:0;47853:10;47826:37;47818:60;;;;-1:-1:-1;;;47818:60:0;;;;;;;:::i;:::-;47897:16;;;;:7;:16;;;;;:23;;;;;:31;;:23;:31;47889:51;;;;-1:-1:-1;;;47889:51:0;;;;;;;:::i;:::-;48026:16;;;;:7;:16;;;;;:20;;;;47996:25;;;;;47975:47;;47985:10;;47975:9;:47::i;:::-;:71;;47953:147;;;;-1:-1:-1;;;47953:147:0;;;;;;;:::i;:::-;48114:12;;48111:147;;48161:15;48150:8;:26;48142:61;;;;-1:-1:-1;;;48142:61:0;;20141:2:1;48142:61:0;;;20123:21:1;20180:2;20160:18;;;20153:30;-1:-1:-1;;;20199:18:1;;;20192:52;20261:18;;48142:61:0;19939:346:1;48142:61:0;48111:147;;;-1:-1:-1;48245:1:0;48111:147;48279:16;;;;:7;:16;;;;;;;:25;;:36;;;48333:44;48287:7;;48333:44;;;;48307:8;26627:25:1;;26615:2;26600:18;;26481:177;25164:407:0;-1:-1:-1;;;;;25372:20:0;;21502:10;25372:20;;:60;;-1:-1:-1;25396:36:0;25413:4;21502:10;24924:168;:::i;25396:36::-;25350:157;;;;-1:-1:-1;;;25350:157:0;;;;;;;:::i;:::-;25518:45;25536:4;25542:2;25546;25550:6;25558:4;25518:17;:45::i;41372:201::-;40352:13;:11;:13::i;:::-;-1:-1:-1;;;;;41461:22:0;::::1;41453:73;;;::::0;-1:-1:-1;;;41453:73:0;;17942:2:1;41453:73:0::1;::::0;::::1;17924:21:1::0;17981:2;17961:18;;;17954:30;18020:34;18000:18;;;17993:62;-1:-1:-1;;;18071:18:1;;;18064:36;18117:19;;41453:73:0::1;17740:402:1::0;41453:73:0::1;41537:28;41556:8;41537:18;:28::i;42191:47::-:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;42191:47:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;40631:132::-;40539:6;;-1:-1:-1;;;;;40539:6:0;21502:10;40695:23;40687:68;;;;-1:-1:-1;;;40687:68:0;;23043:2:1;40687:68:0;;;23025:21:1;;;23062:18;;;23055:30;23121:34;23101:18;;;23094:62;23173:18;;40687:68:0;22841:356:1;29873:88:0;29940:13;;;;:4;;:13;;;;;:::i;714:723::-;770:13;991:10;987:53;;-1:-1:-1;;1018:10:0;;;;;;;;;;;;-1:-1:-1;;;1018:10:0;;;;;714:723::o;987:53::-;1065:5;1050:12;1106:78;1113:9;;1106:78;;1139:8;;;;:::i;:::-;;-1:-1:-1;1162:10:0;;-1:-1:-1;1170:2:0;1162:10;;:::i;:::-;;;1106:78;;;1194:19;1226:6;-1:-1:-1;;;;;1216:17:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1216:17:0;;1194:39;;1244:154;1251:10;;1244:154;;1278:11;1288:1;1278:11;;:::i;:::-;;-1:-1:-1;1347:10:0;1355:2;1347:5;:10;:::i;:::-;1334:24;;:2;:24;:::i;:::-;1321:39;;1304:6;1311;1304:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;1304:56:0;;;;;;;;-1:-1:-1;1375:11:0;1384:2;1375:11;;:::i;:::-;;;1244:154;;;1422:6;714:723;-1:-1:-1;;;;714:723:0:o;30347:729::-;-1:-1:-1;;;;;30500:16:0;;30492:62;;;;-1:-1:-1;;;30492:62:0;;25933:2:1;30492:62:0;;;25915:21:1;25972:2;25952:18;;;25945:30;26011:34;25991:18;;;25984:62;-1:-1:-1;;;26062:18:1;;;26055:31;26103:19;;30492:62:0;25731:397:1;30492:62:0;21502:10;30567:16;30632:21;30650:2;30632:17;:21::i;:::-;30609:44;;30664:24;30691:25;30709:6;30691:17;:25::i;:::-;30664:52;;30808:9;:13;;;;;;;;;;;-1:-1:-1;;;;;30808:17:0;;;;;;;;;:27;;30829:6;;30808:9;:27;;30829:6;;30808:27;:::i;:::-;;;;-1:-1:-1;;30851:52:0;;;26837:25:1;;;26893:2;26878:18;;26871:34;;;-1:-1:-1;;;;;30851:52:0;;;;30884:1;;30851:52;;;;;;26810:18:1;30851:52:0;;;;;;;30994:74;31025:8;31043:1;31047:2;31051;31055:6;31063:4;30994:30;:74::i;:::-;30481:595;;;30347:729;;;;:::o;27883:1146::-;28110:7;:14;28096:3;:10;:28;28088:81;;;;-1:-1:-1;;;28088:81:0;;25524:2:1;28088:81:0;;;25506:21:1;25563:2;25543:18;;;25536:30;25602:34;25582:18;;;25575:62;-1:-1:-1;;;25653:18:1;;;25646:38;25701:19;;28088:81:0;25322:404:1;28088:81:0;-1:-1:-1;;;;;28188:16:0;;28180:66;;;;-1:-1:-1;;;28180:66:0;;;;;;;:::i;:::-;21502:10;28259:16;28376:421;28400:3;:10;28396:1;:14;28376:421;;;28432:10;28445:3;28449:1;28445:6;;;;;;;;:::i;:::-;;;;;;;28432:19;;28466:14;28483:7;28491:1;28483:10;;;;;;;;:::i;:::-;;;;;;;;;;;;28510:19;28532:13;;;;;;;;;;-1:-1:-1;;;;;28532:19:0;;;;;;;;;;;;28483:10;;-1:-1:-1;28574:21:0;;;;28566:76;;;;-1:-1:-1;;;28566:76:0;;;;;;;:::i;:::-;28686:9;:13;;;;;;;;;;;-1:-1:-1;;;;;28686:19:0;;;;;;;;;;28708:20;;;28686:42;;28758:17;;;;;;;:27;;28708:20;;28686:9;28758:27;;28708:20;;28758:27;:::i;:::-;;;;;;;;28417:380;;;28412:3;;;;:::i;:::-;;;28376:421;;;;28844:2;-1:-1:-1;;;;;28814:47:0;28838:4;-1:-1:-1;;;;;28814:47:0;28828:8;-1:-1:-1;;;;;28814:47:0;;28848:3;28853:7;28814:47;;;;;;;:::i;:::-;;;;;;;;28946:75;28982:8;28992:4;28998:2;29002:3;29007:7;29016:4;28946:35;:75::i;:::-;28077:952;27883:1146;;;;;:::o;41733:191::-;41826:6;;;-1:-1:-1;;;;;41843:17:0;;;-1:-1:-1;;;;;;41843:17:0;;;;;;;41876:40;;41826:6;;;41843:17;41826:6;;41876:40;;41807:16;;41876:40;41796:128;41733:191;:::o;34760:331::-;34915:8;-1:-1:-1;;;;;34906:17:0;:5;-1:-1:-1;;;;;34906:17:0;;;34898:71;;;;-1:-1:-1;;;34898:71:0;;24030:2:1;34898:71:0;;;24012:21:1;24069:2;24049:18;;;24042:30;24108:34;24088:18;;;24081:62;-1:-1:-1;;;24159:18:1;;;24152:39;24208:19;;34898:71:0;23828:405:1;34898:71:0;-1:-1:-1;;;;;34980:25:0;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;:46;;-1:-1:-1;;34980:46:0;;;;;;;;;;35042:41;;15523::1;;;35042::0;;15496:18:1;35042:41:0;;;;;;;34760:331;;;:::o;26551:974::-;-1:-1:-1;;;;;26739:16:0;;26731:66;;;;-1:-1:-1;;;26731:66:0;;;;;;;:::i;:::-;21502:10;26810:16;26875:21;26893:2;26875:17;:21::i;:::-;26852:44;;26907:24;26934:25;26952:6;26934:17;:25::i;:::-;26907:52;;27045:19;27067:13;;;;;;;;;;;-1:-1:-1;;;;;27067:19:0;;;;;;;;;;27105:21;;;;27097:76;;;;-1:-1:-1;;;27097:76:0;;;;;;;:::i;:::-;27209:9;:13;;;;;;;;;;;-1:-1:-1;;;;;27209:19:0;;;;;;;;;;27231:20;;;27209:42;;27273:17;;;;;;;:27;;27231:20;;27209:9;27273:27;;27231:20;;27273:27;:::i;:::-;;;;-1:-1:-1;;27318:46:0;;;26837:25:1;;;26893:2;26878:18;;26871:34;;;-1:-1:-1;;;;;27318:46:0;;;;;;;;;;;;;;26810:18:1;27318:46:0;;;;;;;27449:68;27480:8;27490:4;27496:2;27500;27504:6;27512:4;27449:30;:68::i;:::-;26720:805;;;;26551:974;;;;;:::o;39026:198::-;39146:16;;;39160:1;39146:16;;;;;;;;;39092;;39121:22;;39146:16;;;;;;;;;;;;-1:-1:-1;39146:16:0;39121:41;;39184:7;39173:5;39179:1;39173:8;;;;;;;;:::i;:::-;;;;;;;;;;:18;39211:5;39026:198;-1:-1:-1;;39026:198:0:o;37453:744::-;-1:-1:-1;;;;;37668:13:0;;4309:19;:23;37664:526;;37704:72;;-1:-1:-1;;;37704:72:0;;-1:-1:-1;;;;;37704:38:0;;;;;:72;;37743:8;;37753:4;;37759:2;;37763:6;;37771:4;;37704:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;37704:72:0;;;;;;;;-1:-1:-1;;37704:72:0;;;;;;;;;;;;:::i;:::-;;;37700:479;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;38052:6;38045:14;;-1:-1:-1;;;38045:14:0;;;;;;;;:::i;37700:479::-;;;38101:62;;-1:-1:-1;;;38101:62:0;;16001:2:1;38101:62:0;;;15983:21:1;16040:2;16020:18;;;16013:30;16079:34;16059:18;;;16052:62;-1:-1:-1;;;16130:18:1;;;16123:50;16190:19;;38101:62:0;15799:416:1;37700:479:0;-1:-1:-1;;;;;;37826:55:0;;-1:-1:-1;;;37826:55:0;37822:154;;37906:50;;-1:-1:-1;;;37906:50:0;;;;;;;:::i;38205:813::-;-1:-1:-1;;;;;38445:13:0;;4309:19;:23;38441:570;;38481:79;;-1:-1:-1;;;38481:79:0;;-1:-1:-1;;;;;38481:43:0;;;;;:79;;38525:8;;38535:4;;38541:3;;38546:7;;38555:4;;38481:79;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38481:79:0;;;;;;;;-1:-1:-1;;38481:79:0;;;;;;;;;;;;:::i;:::-;;;38477:523;;;;:::i;:::-;-1:-1:-1;;;;;;38642:60:0;;-1:-1:-1;;;38642:60:0;38638:159;;38727:50;;-1:-1:-1;;;38727:50:0;;;;;;;:::i;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:173:1;82:20;;-1:-1:-1;;;;;131:31:1;;121:42;;111:70;;177:1;174;167:12;111:70;14:173;;;:::o;192:735::-;246:5;299:3;292:4;284:6;280:17;276:27;266:55;;317:1;314;307:12;266:55;353:6;340:20;379:4;402:43;442:2;402:43;:::i;:::-;474:2;468:9;486:31;514:2;506:6;486:31;:::i;:::-;552:18;;;586:15;;;;-1:-1:-1;621:15:1;;;671:1;667:10;;;655:23;;651:32;;648:41;-1:-1:-1;645:61:1;;;702:1;699;692:12;645:61;724:1;734:163;748:2;745:1;742:9;734:163;;;805:17;;793:30;;843:12;;;;875;;;;766:1;759:9;734:163;;;-1:-1:-1;915:6:1;;192:735;-1:-1:-1;;;;;;;192:735:1:o;932:555::-;974:5;1027:3;1020:4;1012:6;1008:17;1004:27;994:55;;1045:1;1042;1035:12;994:55;1081:6;1068:20;-1:-1:-1;;;;;1103:2:1;1100:26;1097:52;;;1129:18;;:::i;:::-;1178:2;1172:9;1190:67;1245:2;1226:13;;-1:-1:-1;;1222:27:1;1251:4;1218:38;1172:9;1190:67;:::i;:::-;1281:2;1273:6;1266:18;1327:3;1320:4;1315:2;1307:6;1303:15;1299:26;1296:35;1293:55;;;1344:1;1341;1334:12;1293:55;1408:2;1401:4;1393:6;1389:17;1382:4;1374:6;1370:17;1357:54;1455:1;1431:15;;;1448:4;1427:26;1420:37;;;;1435:6;932:555;-1:-1:-1;;;932:555:1:o;1492:186::-;1551:6;1604:2;1592:9;1583:7;1579:23;1575:32;1572:52;;;1620:1;1617;1610:12;1572:52;1643:29;1662:9;1643:29;:::i;:::-;1633:39;1492:186;-1:-1:-1;;;1492:186:1:o;1683:260::-;1751:6;1759;1812:2;1800:9;1791:7;1787:23;1783:32;1780:52;;;1828:1;1825;1818:12;1780:52;1851:29;1870:9;1851:29;:::i;:::-;1841:39;;1899:38;1933:2;1922:9;1918:18;1899:38;:::i;:::-;1889:48;;1683:260;;;;;:::o;1948:943::-;2102:6;2110;2118;2126;2134;2187:3;2175:9;2166:7;2162:23;2158:33;2155:53;;;2204:1;2201;2194:12;2155:53;2227:29;2246:9;2227:29;:::i;:::-;2217:39;;2275:38;2309:2;2298:9;2294:18;2275:38;:::i;:::-;2265:48;;2364:2;2353:9;2349:18;2336:32;-1:-1:-1;;;;;2428:2:1;2420:6;2417:14;2414:34;;;2444:1;2441;2434:12;2414:34;2467:61;2520:7;2511:6;2500:9;2496:22;2467:61;:::i;:::-;2457:71;;2581:2;2570:9;2566:18;2553:32;2537:48;;2610:2;2600:8;2597:16;2594:36;;;2626:1;2623;2616:12;2594:36;2649:63;2704:7;2693:8;2682:9;2678:24;2649:63;:::i;:::-;2639:73;;2765:3;2754:9;2750:19;2737:33;2721:49;;2795:2;2785:8;2782:16;2779:36;;;2811:1;2808;2801:12;2779:36;;2834:51;2877:7;2866:8;2855:9;2851:24;2834:51;:::i;:::-;2824:61;;;1948:943;;;;;;;;:::o;2896:606::-;3000:6;3008;3016;3024;3032;3085:3;3073:9;3064:7;3060:23;3056:33;3053:53;;;3102:1;3099;3092:12;3053:53;3125:29;3144:9;3125:29;:::i;:::-;3115:39;;3173:38;3207:2;3196:9;3192:18;3173:38;:::i;:::-;3163:48;;3258:2;3247:9;3243:18;3230:32;3220:42;;3309:2;3298:9;3294:18;3281:32;3271:42;;3364:3;3353:9;3349:19;3336:33;-1:-1:-1;;;;;3384:6:1;3381:30;3378:50;;;3424:1;3421;3414:12;3378:50;3447:49;3488:7;3479:6;3468:9;3464:22;3447:49;:::i;3507:347::-;3572:6;3580;3633:2;3621:9;3612:7;3608:23;3604:32;3601:52;;;3649:1;3646;3639:12;3601:52;3672:29;3691:9;3672:29;:::i;:::-;3662:39;;3751:2;3740:9;3736:18;3723:32;3798:5;3791:13;3784:21;3777:5;3774:32;3764:60;;3820:1;3817;3810:12;3764:60;3843:5;3833:15;;;3507:347;;;;;:::o;3859:254::-;3927:6;3935;3988:2;3976:9;3967:7;3963:23;3959:32;3956:52;;;4004:1;4001;3994:12;3956:52;4027:29;4046:9;4027:29;:::i;:::-;4017:39;4103:2;4088:18;;;;4075:32;;-1:-1:-1;;;3859:254:1:o;4118:1219::-;4236:6;4244;4297:2;4285:9;4276:7;4272:23;4268:32;4265:52;;;4313:1;4310;4303:12;4265:52;4353:9;4340:23;-1:-1:-1;;;;;4423:2:1;4415:6;4412:14;4409:34;;;4439:1;4436;4429:12;4409:34;4477:6;4466:9;4462:22;4452:32;;4522:7;4515:4;4511:2;4507:13;4503:27;4493:55;;4544:1;4541;4534:12;4493:55;4580:2;4567:16;4602:4;4625:43;4665:2;4625:43;:::i;:::-;4697:2;4691:9;4709:31;4737:2;4729:6;4709:31;:::i;:::-;4775:18;;;4809:15;;;;-1:-1:-1;4844:11:1;;;4886:1;4882:10;;;4874:19;;4870:28;;4867:41;-1:-1:-1;4864:61:1;;;4921:1;4918;4911:12;4864:61;4943:1;4934:10;;4953:169;4967:2;4964:1;4961:9;4953:169;;;5024:23;5043:3;5024:23;:::i;:::-;5012:36;;4985:1;4978:9;;;;;5068:12;;;;5100;;4953:169;;;-1:-1:-1;5141:6:1;-1:-1:-1;;5185:18:1;;5172:32;;-1:-1:-1;;5216:16:1;;;5213:36;;;5245:1;5242;5235:12;5213:36;;5268:63;5323:7;5312:8;5301:9;5297:24;5268:63;:::i;:::-;5258:73;;;4118:1219;;;;;:::o;5342:245::-;5400:6;5453:2;5441:9;5432:7;5428:23;5424:32;5421:52;;;5469:1;5466;5459:12;5421:52;5508:9;5495:23;5527:30;5551:5;5527:30;:::i;5592:249::-;5661:6;5714:2;5702:9;5693:7;5689:23;5685:32;5682:52;;;5730:1;5727;5720:12;5682:52;5762:9;5756:16;5781:30;5805:5;5781:30;:::i;5846:321::-;5915:6;5968:2;5956:9;5947:7;5943:23;5939:32;5936:52;;;5984:1;5981;5974:12;5936:52;6024:9;6011:23;-1:-1:-1;;;;;6049:6:1;6046:30;6043:50;;;6089:1;6086;6079:12;6043:50;6112:49;6153:7;6144:6;6133:9;6129:22;6112:49;:::i;6172:180::-;6231:6;6284:2;6272:9;6263:7;6259:23;6255:32;6252:52;;;6300:1;6297;6290:12;6252:52;-1:-1:-1;6323:23:1;;6172:180;-1:-1:-1;6172:180:1:o;6357:609::-;6454:6;6462;6470;6523:2;6511:9;6502:7;6498:23;6494:32;6491:52;;;6539:1;6536;6529:12;6491:52;6575:9;6562:23;6552:33;;6636:2;6625:9;6621:18;6608:32;-1:-1:-1;;;;;6700:2:1;6692:6;6689:14;6686:34;;;6716:1;6713;6706:12;6686:34;6739:49;6780:7;6771:6;6760:9;6756:22;6739:49;:::i;:::-;6729:59;;6841:2;6830:9;6826:18;6813:32;6797:48;;6870:2;6860:8;6857:16;6854:36;;;6886:1;6883;6876:12;6854:36;;6909:51;6952:7;6941:8;6930:9;6926:24;6909:51;:::i;:::-;6899:61;;;6357:609;;;;;:::o;6971:248::-;7039:6;7047;7100:2;7088:9;7079:7;7075:23;7071:32;7068:52;;;7116:1;7113;7106:12;7068:52;-1:-1:-1;;7139:23:1;;;7209:2;7194:18;;;7181:32;;-1:-1:-1;6971:248:1:o;7224:322::-;7301:6;7309;7317;7370:2;7358:9;7349:7;7345:23;7341:32;7338:52;;;7386:1;7383;7376:12;7338:52;7422:9;7409:23;7399:33;;7479:2;7468:9;7464:18;7451:32;7441:42;;7502:38;7536:2;7525:9;7521:18;7502:38;:::i;:::-;7492:48;;7224:322;;;;;:::o;7551:385::-;7637:6;7645;7653;7661;7714:3;7702:9;7693:7;7689:23;7685:33;7682:53;;;7731:1;7728;7721:12;7682:53;-1:-1:-1;;7754:23:1;;;7824:2;7809:18;;7796:32;;-1:-1:-1;7875:2:1;7860:18;;7847:32;;7926:2;7911:18;7898:32;;-1:-1:-1;7551:385:1;-1:-1:-1;7551:385:1:o;7941:435::-;7994:3;8032:5;8026:12;8059:6;8054:3;8047:19;8085:4;8114:2;8109:3;8105:12;8098:19;;8151:2;8144:5;8140:14;8172:1;8182:169;8196:6;8193:1;8190:13;8182:169;;;8257:13;;8245:26;;8291:12;;;;8326:15;;;;8218:1;8211:9;8182:169;;;-1:-1:-1;8367:3:1;;7941:435;-1:-1:-1;;;;;7941:435:1:o;8381:257::-;8422:3;8460:5;8454:12;8487:6;8482:3;8475:19;8503:63;8559:6;8552:4;8547:3;8543:14;8536:4;8529:5;8525:16;8503:63;:::i;:::-;8620:2;8599:15;-1:-1:-1;;8595:29:1;8586:39;;;;8627:4;8582:50;;8381:257;-1:-1:-1;;8381:257:1:o;8643:185::-;8685:3;8723:5;8717:12;8738:52;8783:6;8778:3;8771:4;8764:5;8760:16;8738:52;:::i;:::-;8806:16;;;;;8643:185;-1:-1:-1;;8643:185:1:o;8833:397::-;9047:26;9043:31;9034:6;9030:2;9026:15;9022:53;9017:3;9010:66;8992:3;9105:6;9099:13;9121:62;9176:6;9171:2;9166:3;9162:12;9155:4;9147:6;9143:17;9121:62;:::i;:::-;9203:16;;;;9221:2;9199:25;;8833:397;-1:-1:-1;;;8833:397:1:o;9235:276::-;9366:3;9404:6;9398:13;9420:53;9466:6;9461:3;9454:4;9446:6;9442:17;9420:53;:::i;:::-;9489:16;;;;;9235:276;-1:-1:-1;;9235:276:1:o;9516:1174::-;9692:3;9721:1;9754:6;9748:13;9784:3;9806:1;9834:9;9830:2;9826:18;9816:28;;9894:2;9883:9;9879:18;9916;9906:61;;9960:4;9952:6;9948:17;9938:27;;9906:61;9986:2;10034;10026:6;10023:14;10003:18;10000:38;9997:165;;;-1:-1:-1;;;10061:33:1;;10117:4;10114:1;10107:15;10147:4;10068:3;10135:17;9997:165;10178:18;10205:104;;;;10323:1;10318:320;;;;10171:467;;10205:104;-1:-1:-1;;10238:24:1;;10226:37;;10283:16;;;;-1:-1:-1;10205:104:1;;10318:320;28597:1;28590:14;;;28634:4;28621:18;;10413:1;10427:165;10441:6;10438:1;10435:13;10427:165;;;10519:14;;10506:11;;;10499:35;10562:16;;;;10456:10;;10427:165;;;10431:3;;10621:6;10616:3;10612:16;10605:23;;10171:467;;;;;;;10654:30;10680:3;10672:6;10654:30;:::i;:::-;10647:37;9516:1174;-1:-1:-1;;;;;9516:1174:1:o;11113:826::-;-1:-1:-1;;;;;11510:15:1;;;11492:34;;11562:15;;11557:2;11542:18;;11535:43;11472:3;11609:2;11594:18;;11587:31;;;11435:4;;11641:57;;11678:19;;11670:6;11641:57;:::i;:::-;11746:9;11738:6;11734:22;11729:2;11718:9;11714:18;11707:50;11780:44;11817:6;11809;11780:44;:::i;:::-;11766:58;;11873:9;11865:6;11861:22;11855:3;11844:9;11840:19;11833:51;11901:32;11926:6;11918;11901:32;:::i;:::-;11893:40;11113:826;-1:-1:-1;;;;;;;;11113:826:1:o;11944:560::-;-1:-1:-1;;;;;12241:15:1;;;12223:34;;12293:15;;12288:2;12273:18;;12266:43;12340:2;12325:18;;12318:34;;;12383:2;12368:18;;12361:34;;;12203:3;12426;12411:19;;12404:32;;;12166:4;;12453:45;;12478:19;;12470:6;12453:45;:::i;:::-;12445:53;11944:560;-1:-1:-1;;;;;;;11944:560:1:o;12509:478::-;-1:-1:-1;;;;;12734:32:1;;12716:51;;12803:2;12798;12783:18;;12776:30;;;-1:-1:-1;;12829:44:1;;12854:18;;12846:6;12829:44;:::i;:::-;12921:9;12913:6;12909:22;12904:2;12893:9;12889:18;12882:50;12949:32;12974:6;12966;12949:32;:::i;:::-;12941:40;12509:478;-1:-1:-1;;;;;;12509:478:1:o;12992:261::-;13171:2;13160:9;13153:21;13134:4;13191:56;13243:2;13232:9;13228:18;13220:6;13191:56;:::i;13258:465::-;13515:2;13504:9;13497:21;13478:4;13541:56;13593:2;13582:9;13578:18;13570:6;13541:56;:::i;:::-;13645:9;13637:6;13633:22;13628:2;13617:9;13613:18;13606:50;13673:44;13710:6;13702;13673:44;:::i;13728:1650::-;14297:3;14286:9;14279:22;14260:4;14324:57;14376:3;14365:9;14361:19;14353:6;14324:57;:::i;:::-;14400:2;14450:9;14442:6;14438:22;14433:2;14422:9;14418:18;14411:50;14484:44;14521:6;14513;14484:44;:::i;:::-;14470:58;;14576:9;14568:6;14564:22;14559:2;14548:9;14544:18;14537:50;14610:44;14647:6;14639;14610:44;:::i;:::-;14596:58;;14702:9;14694:6;14690:22;14685:2;14674:9;14670:18;14663:50;14736:44;14773:6;14765;14736:44;:::i;:::-;14722:58;;14829:9;14821:6;14817:22;14811:3;14800:9;14796:19;14789:51;14863:44;14900:6;14892;14863:44;:::i;:::-;14944:22;;;14938:3;14923:19;;14916:51;15016:13;;15038:22;;;15114:15;;;;-1:-1:-1;15076:15:1;;;;15147:1;15157:195;15171:6;15168:1;15165:13;15157:195;;;15236:13;;-1:-1:-1;;;;;15232:39:1;15220:52;;15327:15;;;;15292:12;;;;15268:1;15186:9;15157:195;;;-1:-1:-1;15369:3:1;;13728:1650;-1:-1:-1;;;;;;;;;;;13728:1650:1:o;15575:219::-;15724:2;15713:9;15706:21;15687:4;15744:44;15784:2;15773:9;15769:18;15761:6;15744:44;:::i;16220:411::-;16422:2;16404:21;;;16461:2;16441:18;;;16434:30;16500:34;16495:2;16480:18;;16473:62;-1:-1:-1;;;16566:2:1;16551:18;;16544:45;16621:3;16606:19;;16220:411::o;16636:404::-;16838:2;16820:21;;;16877:2;16857:18;;;16850:30;16916:34;16911:2;16896:18;;16889:62;-1:-1:-1;;;16982:2:1;16967:18;;16960:38;17030:3;17015:19;;16636:404::o;20633:401::-;20835:2;20817:21;;;20874:2;20854:18;;;20847:30;20913:34;20908:2;20893:18;;20886:62;-1:-1:-1;;;20979:2:1;20964:18;;20957:35;21024:3;21009:19;;20633:401::o;21039:350::-;21241:2;21223:21;;;21280:2;21260:18;;;21253:30;21319:28;21314:2;21299:18;;21292:56;21380:2;21365:18;;21039:350::o;22096:406::-;22298:2;22280:21;;;22337:2;22317:18;;;22310:30;22376:34;22371:2;22356:18;;22349:62;-1:-1:-1;;;22442:2:1;22427:18;;22420:40;22492:3;22477:19;;22096:406::o;24238:330::-;24440:2;24422:21;;;24479:1;24459:18;;;24452:29;-1:-1:-1;;;24512:2:1;24497:18;;24490:37;24559:2;24544:18;;24238:330::o;24983:334::-;25185:2;25167:21;;;25224:2;25204:18;;;25197:30;-1:-1:-1;;;25258:2:1;25243:18;;25236:40;25308:2;25293:18;;24983:334::o;28336:183::-;28396:4;-1:-1:-1;;;;;28421:6:1;28418:30;28415:56;;;28451:18;;:::i;:::-;-1:-1:-1;28496:1:1;28492:14;28508:4;28488:25;;28336:183::o;28650:128::-;28690:3;28721:1;28717:6;28714:1;28711:13;28708:39;;;28727:18;;:::i;:::-;-1:-1:-1;28763:9:1;;28650:128::o;28783:120::-;28823:1;28849;28839:35;;28854:18;;:::i;:::-;-1:-1:-1;28888:9:1;;28783:120::o;28908:168::-;28948:7;29014:1;29010;29006:6;29002:14;28999:1;28996:21;28991:1;28984:9;28977:17;28973:45;28970:71;;;29021:18;;:::i;:::-;-1:-1:-1;29061:9:1;;28908:168::o;29081:125::-;29121:4;29149:1;29146;29143:8;29140:34;;;29154:18;;:::i;:::-;-1:-1:-1;29191:9:1;;29081:125::o;29211:258::-;29283:1;29293:113;29307:6;29304:1;29301:13;29293:113;;;29383:11;;;29377:18;29364:11;;;29357:39;29329:2;29322:10;29293:113;;;29424:6;29421:1;29418:13;29415:48;;;29459:1;29450:6;29445:3;29441:16;29434:27;29415:48;;29211:258;;;:::o;29474:380::-;29553:1;29549:12;;;;29596;;;29617:61;;29671:4;29663:6;29659:17;29649:27;;29617:61;29724:2;29716:6;29713:14;29693:18;29690:38;29687:161;;;29770:10;29765:3;29761:20;29758:1;29751:31;29805:4;29802:1;29795:15;29833:4;29830:1;29823:15;29687:161;;29474:380;;;:::o;29859:249::-;29969:2;29950:13;;-1:-1:-1;;29946:27:1;29934:40;;-1:-1:-1;;;;;29989:34:1;;30025:22;;;29986:62;29983:88;;;30051:18;;:::i;:::-;30087:2;30080:22;-1:-1:-1;;29859:249:1:o;30113:135::-;30152:3;-1:-1:-1;;30173:17:1;;30170:43;;;30193:18;;:::i;:::-;-1:-1:-1;30240:1:1;30229:13;;30113:135::o;30253:112::-;30285:1;30311;30301:35;;30316:18;;:::i;:::-;-1:-1:-1;30350:9:1;;30253:112::o;30370:127::-;30431:10;30426:3;30422:20;30419:1;30412:31;30462:4;30459:1;30452:15;30486:4;30483:1;30476:15;30502:127;30563:10;30558:3;30554:20;30551:1;30544:31;30594:4;30591:1;30584:15;30618:4;30615:1;30608:15;30634:127;30695:10;30690:3;30686:20;30683:1;30676:31;30726:4;30723:1;30716:15;30750:4;30747:1;30740:15;30766:127;30827:10;30822:3;30818:20;30815:1;30808:31;30858:4;30855:1;30848:15;30882:4;30879:1;30872:15;30898:179;30933:3;30975:1;30957:16;30954:23;30951:120;;;31021:1;31018;31015;31000:23;-1:-1:-1;31058:1:1;31052:8;31047:3;31043:18;30951:120;30898:179;:::o;31082:671::-;31121:3;31163:4;31145:16;31142:26;31139:39;;;31082:671;:::o;31139:39::-;31205:2;31199:9;-1:-1:-1;;31270:16:1;31266:25;;31263:1;31199:9;31242:50;31321:4;31315:11;31345:16;-1:-1:-1;;;;;31451:2:1;31444:4;31436:6;31432:17;31429:25;31424:2;31416:6;31413:14;31410:45;31407:58;;;31458:5;;;;;31082:671;:::o;31407:58::-;31495:6;31489:4;31485:17;31474:28;;31531:3;31525:10;31558:2;31550:6;31547:14;31544:27;;;31564:5;;;;;;31082:671;:::o;31544:27::-;31648:2;31629:16;31623:4;31619:27;31615:36;31608:4;31599:6;31594:3;31590:16;31586:27;31583:69;31580:82;;;31655:5;;;;;;31082:671;:::o;31580:82::-;31671:57;31722:4;31713:6;31705;31701:19;31697:30;31691:4;31671:57;:::i;:::-;-1:-1:-1;31744:3:1;;31082:671;-1:-1:-1;;;;;31082:671:1:o;31758:131::-;-1:-1:-1;;;;;;31832:32:1;;31822:43;;31812:71;;31879:1;31876;31869:12

Swarm Source

ipfs://13bf77ad8651898dee97b9a01e4756823714f1b9fd71a937b9c9ea510d97f09f
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.