Token

 

Overview ERC-1155

Total Supply:
0 N/A

Holders:
112 addresses

Transfers:
-

Loading
[ Download CSV Export  ] 
Loading
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
Operatives

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-02-01
*/

// SPDX-License-Identifier: Unlicensed
pragma solidity 0.8.17;


//  __   __    _                  ___ __ ________
//  \ \ / /_ _| |___  _ _____ _  |_  )  \__ /__ /
//   \ V / _` | / / || |_ / _` |  / / () |_ \|_ \
//    |_|\__,_|_\_\\_,_/__\__,_| /___\__/___/___/


//  / __| |_  ___  __ _ _  _ _ _                 
//  \__ \ ' \/ _ \/ _` | || | ' \                
//  |___/_||_\___/\__, |\_,_|_||_|               
//                |___/                          


// (•_•)
// ( •_•)>⌐■-■
// (⌐■_■)


// File @openzeppelin/contracts/utils/[email protected]
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)
/**
 * @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/access/[email protected]
// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)
/**
 * @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 @openzeppelin/contracts/utils/introspection/[email protected]
// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)
/**
 * @dev Interface of the ERC165 standard, as defined in the
 * https://eips.ethereum.org/EIPS/eip-165[EIP].
 *
 * Implementers can declare support of contract interfaces, which can then be
 * queried by others ({ERC165Checker}).
 *
 * For an implementation, see {ERC165}.
 */
interface IERC165 {
    /**
     * @dev Returns true if this contract implements the interface defined by
     * `interfaceId`. See the corresponding
     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
     * to learn more about how these ids are created.
     *
     * This function call must use less than 30 000 gas.
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}


// File @openzeppelin/contracts/token/ERC1155/[email protected]
// OpenZeppelin Contracts (last updated v4.7.0) (token/ERC1155/IERC1155.sol)
/**
 * @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/[email protected]
// OpenZeppelin Contracts v4.4.1 (token/ERC1155/extensions/IERC1155MetadataURI.sol)
/**
 * @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/token/ERC1155/[email protected]
// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC1155/IERC1155Receiver.sol)
/**
 * @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/utils/[email protected]
// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)
/**
 * @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 functionCallWithValue(target, data, 0, "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");
        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResultFromTarget(target, 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) {
        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResultFromTarget(target, 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) {
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }

    /**
     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling
     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.
     *
     * _Available since v4.8._
     */
    function verifyCallResultFromTarget(
        address target,
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        if (success) {
            if (returndata.length == 0) {
                // only check isContract if the call was successful and the return data is empty
                // otherwise we already know that it was a contract
                require(isContract(target), "Address: call to non-contract");
            }
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }

    /**
     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason or 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 {
            _revert(returndata, errorMessage);
        }
    }

    function _revert(bytes memory returndata, string memory errorMessage) private pure {
        // 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/[email protected]
// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)
/**
 * @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/[email protected]
// OpenZeppelin Contracts (last updated v4.8.0) (token/ERC1155/ERC1155.sol)
/**
 * @dev Implementation of the basic standard multi-token.
 * See https://eips.ethereum.org/EIPS/eip-1155
 * Originally based on code by Enjin: https://github.com/enjin/erc-1155
 *
 * _Available since v3.1._
 */
contract ERC1155 is Context, ERC165, IERC1155, IERC1155MetadataURI {
    using Address for address;

    // Mapping from token ID to account balances
    mapping(uint256 => mapping(address => uint256)) private _balances;

    // Mapping from account to operator approvals
    mapping(address => mapping(address => bool)) private _operatorApprovals;

    // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json
    string private _uri;

    /**
     * @dev See {_setURI}.
     */
    constructor(string memory uri_) {
        _setURI(uri_);
    }

    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {
        return
            interfaceId == type(IERC1155).interfaceId ||
            interfaceId == type(IERC1155MetadataURI).interfaceId ||
            super.supportsInterface(interfaceId);
    }

    /**
     * @dev See {IERC1155MetadataURI-uri}.
     *
     * This implementation returns the same URI for *all* token types. It relies
     * on the token type ID substitution mechanism
     * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].
     *
     * Clients calling this function must replace the `\{id\}` substring with the
     * actual token type ID.
     */
    function uri(uint256) public view virtual override returns (string memory) {
        return _uri;
    }

    /**
     * @dev See {IERC1155-balanceOf}.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function balanceOf(address account, uint256 id) public view virtual override returns (uint256) {
        require(account != address(0), "ERC1155: 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 or 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 or 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/token/ERC20/[email protected]
// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)
/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);

    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `to`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address to, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `from` to `to` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) external returns (bool);
}


// File @openzeppelin/contracts/utils/[email protected]
// OpenZeppelin Contracts v4.4.1 (utils/Counters.sol)
/**
 * @title Counters
 * @author Matt Condon (@shrugs)
 * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number
 * of elements in a mapping, issuing ERC721 ids, or counting request ids.
 *
 * Include with `using Counters for Counters.Counter;`
 */
library Counters {
    struct Counter {
        // This variable should never be directly accessed by users of the library: interactions must be restricted to
        // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add
        // this feature: see https://github.com/ethereum/solidity/issues/4637
        uint256 _value; // default: 0
    }

    function current(Counter storage counter) internal view returns (uint256) {
        return counter._value;
    }

    function increment(Counter storage counter) internal {
        unchecked {
            counter._value += 1;
        }
    }

    function decrement(Counter storage counter) internal {
        uint256 value = counter._value;
        require(value > 0, "Counter: decrement overflow");
        unchecked {
            counter._value = value - 1;
        }
    }

    function reset(Counter storage counter) internal {
        counter._value = 0;
    }
}


// File @openzeppelin/contracts/security/[email protected]
// OpenZeppelin Contracts (last updated v4.8.0) (security/ReentrancyGuard.sol)
/**
 * @dev Contract module that helps prevent reentrant calls to a function.
 *
 * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
 * available, which can be applied to functions to make sure there are no nested
 * (reentrant) calls to them.
 *
 * Note that because there is a single `nonReentrant` guard, functions marked as
 * `nonReentrant` may not call one another. This can be worked around by making
 * those functions `private`, and then adding `external` `nonReentrant` entry
 * points to them.
 *
 * TIP: If you would like to learn more about reentrancy and alternative ways
 * to protect against it, check out our blog post
 * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
 */
abstract contract ReentrancyGuard {
    // Booleans are more expensive than uint256 or any type that takes up a full
    // word because each write operation emits an extra SLOAD to first read the
    // slot's contents, replace the bits taken up by the boolean, and then write
    // back. This is the compiler's defense against contract upgrades and
    // pointer aliasing, and it cannot be disabled.

    // The values being non-zero value makes deployment a bit more expensive,
    // but in exchange the refund on every call to nonReentrant will be lower in
    // amount. Since refunds are capped to a percentage of the total
    // transaction's gas, it is best to keep them low in cases like this one, to
    // increase the likelihood of the full refund coming into effect.
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and making it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        _nonReentrantBefore();
        _;
        _nonReentrantAfter();
    }

    function _nonReentrantBefore() private {
        // On the first call to nonReentrant, _status will be _NOT_ENTERED
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        // Any calls to nonReentrant after this point will fail
        _status = _ENTERED;
    }

    function _nonReentrantAfter() private {
        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = _NOT_ENTERED;
    }
}


// File contracts/utility/Permissions.sol
/**
 * @title A generic permissions-management contract for Yakuza 2033.
 *
 * @notice Yakuza 2033
 *             Telegram: t.me/yakuza2033
 *             Twitter:  yakuza2033
 *             App:      yakuza2033.com
 *
 * @author Shogun
 *             Telegram: zeroXshogun
 *             Web:      coinlord.finance
 *
 * @custom:security-contact Telegram: zeroXshogun
 */
contract Permissions is Context, Ownable {
    /// Accounts permitted to modify rules.
    mapping(address => bool) public appAddresses;

    modifier onlyApp() {
        require(appAddresses[_msgSender()] == true, "Caller is not admin");
        _;
    }

    constructor() {}

    function setPermission(address account, bool permitted)
        external
        onlyOwner
    {
        appAddresses[account] = permitted;
    }
}


// File contracts/operations/operatives/Operatives.sol
/**
 * @title An ERC-1155 NFT contract for Yakuza 2033.
 *
 * @notice Yakuza 2033
 *             Telegram: t.me/yakuza2033
 *             Twitter:  yakuza2033
 *             App:      yakuza2033.com
 *
 * @author Shogun
 *             Telegram: zeroXshogun
 *             Web:      coinlord.finance
 *
 * @custom:security-contact Telegram: zeroXshogun
 */
contract Operatives is ERC1155,
                       Permissions
{
    using Counters for Counters.Counter;

    ////
    //// ADDRESSES
    ////

    IERC20 private bugs;
    address private dead = 0x000000000000000000000000000000000000dEaD;

    ////
    //// OPERATIVES
    ////

    // Standardized decimals variable for App's yielding contracts.
    uint8 public decimals = 0;

    struct Operative {
        uint256 id;
        string name;
        uint256 cost; // Bugs, in Wei.
        string uri;
    }

    /// Operatives ID counter.
    Counters.Counter private _currentId;

    /// Mapping of all operatives.
    /// @dev id => Operative
    mapping(uint256 => Operative) public operatives;

    ////
    //// INIT
    ////

    /**
     * Deploy contract.
     *
     * @param _bugs as address of Bugs contract.
     */
    constructor(address payable _bugs) ERC1155("") {
        bugs = IERC20(_bugs);
    }

    ////
    //// OPERATIVES
    ////

    /**
     * Get number of token types in this collection.
     *
     * @return uint256 of current counter value.
     */
    function typesCount() external view returns(uint256) {
        return _currentId.current();
    }

    /**
     * Add new token to this collection.
     *
     * @param name as string name for this token.
     * @param cost as uint256 cost in Bugs in Wei for this token.
     * @param uri as string location of this token's metadata.
     */
    function addNewOperative(string calldata name, uint256 cost, string calldata uri)
        public
        onlyOwner
    {
        uint256 id = _currentId.current();
        operatives[id] = Operative(id, name, cost, uri);
        _currentId.increment();
    }

    /**
     * Mint a token.
     *
     * @dev Caller must have approved Operatives to transfer Bugs.
     *
     * @param to as address of recipient.
     * @param id as uint256 ID of the token to mint.
     * @param amount as uint256 amount of the token to mint.
     */
    function mint(address to, uint256 id, uint256 amount) external {
        uint256 totalBugsCost = operatives[id].cost * amount;
        uint256 allowance = bugs.allowance(_msgSender(), address(this));
        require(allowance >= totalBugsCost, "Spend not approved");
        bugs.transferFrom(_msgSender(), dead, totalBugsCost);
        _mint(to, id, amount, "");
    }

    /**
     * Update the metadata URI for a token in this collection.
     *
     * @param id as uint256 ID of the token to update.
     * @param _cost as uint256 cost in Bugs in Wei for this token.
     */
    function setOperativeCost(uint256 id, uint256 _cost) external onlyOwner {
        operatives[id].cost = _cost;
    }

    /**
     * Update the metadata URI for a token in this collection.
     *
     * @param id as uint256 ID of the token to update.
     * @param _uri as string of metadata location.
     */
    function setOperativeURI(uint256 id, string calldata _uri) external onlyOwner {
        operatives[id].uri = _uri;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address payable","name":"_bugs","type":"address"}],"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"},{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"uint256","name":"cost","type":"uint256"},{"internalType":"string","name":"uri","type":"string"}],"name":"addNewOperative","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"appAddresses","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"operatives","outputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"string","name":"name","type":"string"},{"internalType":"uint256","name":"cost","type":"uint256"},{"internalType":"string","name":"uri","type":"string"}],"stateMutability":"view","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":"id","type":"uint256"},{"internalType":"uint256","name":"_cost","type":"uint256"}],"name":"setOperativeCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"string","name":"_uri","type":"string"}],"name":"setOperativeURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"permitted","type":"bool"}],"name":"setPermission","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":[],"name":"typesCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]

6080604052600680546001600160a81b03191661dead1790553480156200002557600080fd5b5060405162002222380380620022228339810160408190526200004891620000f8565b604080516020810190915260008152620000628162000094565b506200006e33620000a6565b600580546001600160a01b0319166001600160a01b03929092169190911790556200029b565b6002620000a28282620001cf565b5050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000602082840312156200010b57600080fd5b81516001600160a01b03811681146200012357600080fd5b9392505050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200015557607f821691505b6020821081036200017657634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620001ca57600081815260208120601f850160051c81016020861015620001a55750805b601f850160051c820191505b81811015620001c657828155600101620001b1565b5050505b505050565b81516001600160401b03811115620001eb57620001eb6200012a565b6200020381620001fc845462000140565b846200017c565b602080601f8311600181146200023b5760008415620002225750858301515b600019600386901b1c1916600185901b178555620001c6565b600085815260208120601f198616915b828110156200026c578886015182559484019460019091019084016200024b565b50858210156200028b5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b611f7780620002ab6000396000f3fe608060405234801561001057600080fd5b506004361061012b5760003560e01c8063715018a6116100ad578063ec6263c011610071578063ec6263c0146102ca578063f242432a146102dd578063f2fde38b146102f0578063f3c16c2114610303578063fba095a61461031657600080fd5b8063715018a6146102355780638da5cb5b1461023d57806390de210414610258578063a22cb4651461027b578063e985e9c51461028e57600080fd5b8063313ce567116100f4578063313ce567146101c15780634e1273f4146101e75780634edf6fe0146102075780634f709ea51461020f578063590b3bd41461022257600080fd5b8062fdd58e1461013057806301ffc9a7146101565780630e89341c14610179578063156e29f6146101995780632eb2c2d6146101ae575b600080fd5b61014361013e366004611378565b610339565b6040519081526020015b60405180910390f35b6101696101643660046113b8565b6103d2565b604051901515815260200161014d565b61018c6101873660046113dc565b610422565b60405161014d919061143b565b6101ac6101a736600461144e565b6104b6565b005b6101ac6101bc3660046115ca565b610650565b6006546101d590600160a01b900460ff1681565b60405160ff909116815260200161014d565b6101fa6101f5366004611673565b610695565b60405161014d9190611778565b6101436107be565b6101ac61021d3660046117d3565b6107ce565b6101ac61023036600461184c565b6108c8565b6101ac6108f2565b6003546040516001600160a01b03909116815260200161014d565b610169610266366004611897565b60046020526000908152604090205460ff1681565b6101ac6102893660046118c0565b610906565b61016961029c3660046118f7565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205460ff1690565b6101ac6102d83660046118c0565b610915565b6101ac6102eb36600461192a565b610948565b6101ac6102fe366004611897565b61098d565b6101ac61031136600461198e565b610a06565b6103296103243660046113dc565b610a23565b60405161014d94939291906119b0565b60006001600160a01b0383166103a95760405162461bcd60e51b815260206004820152602a60248201527f455243313135353a2061646472657373207a65726f206973206e6f742061207660448201526930b634b21037bbb732b960b11b60648201526084015b60405180910390fd5b506000818152602081815260408083206001600160a01b03861684529091529020545b92915050565b60006001600160e01b03198216636cdb3d1360e11b148061040357506001600160e01b031982166303a24d0760e21b145b806103cc57506301ffc9a760e01b6001600160e01b03198316146103cc565b606060028054610431906119ec565b80601f016020809104026020016040519081016040528092919081815260200182805461045d906119ec565b80156104aa5780601f1061047f576101008083540402835291602001916104aa565b820191906000526020600020905b81548152906001019060200180831161048d57829003601f168201915b50505050509050919050565b6000828152600860205260408120600201546104d3908390611a3c565b6005549091506000906001600160a01b031663dd62ed3e336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152306024820152604401602060405180830381865afa158015610535573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105599190611a53565b9050818110156105a05760405162461bcd60e51b815260206004820152601260248201527114dc195b99081b9bdd08185c1c1c9bdd995960721b60448201526064016103a0565b6005546001600160a01b03166323b872dd3360065460405160e084901b6001600160e01b03191681526001600160a01b03928316600482015291166024820152604481018590526064016020604051808303816000875af1158015610609573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061062d9190611a6c565b5061064985858560405180602001604052806000815250610b5c565b5050505050565b6001600160a01b03851633148061066c575061066c853361029c565b6106885760405162461bcd60e51b81526004016103a090611a89565b6106498585858585610c70565b606081518351146106fa5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b60648201526084016103a0565b600083516001600160401b0381111561071557610715611481565b60405190808252806020026020018201604052801561073e578160200160208202803683370190505b50905060005b84518110156107b65761078985828151811061076257610762611ad7565b602002602001015185838151811061077c5761077c611ad7565b6020026020010151610339565b82828151811061079b5761079b611ad7565b60209081029190910101526107af81611aed565b9050610744565b509392505050565b60006107c960075490565b905090565b6107d6610e45565b60006107e160075490565b9050604051806080016040528082815260200187878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505090825250602080820187905260408051601f870183900483028101830182528681529201919086908690819084018382808284376000920182905250939094525050838152600860209081526040909120835181559083015190915060018201906108949082611b51565b5060408201516002820155606082015160038201906108b39082611b51565b5050600780546001019055505b505050505050565b6108d0610e45565b60008381526008602052604090206003016108ec828483611c10565b50505050565b6108fa610e45565b6109046000610e9f565b565b610911338383610ef1565b5050565b61091d610e45565b6001600160a01b03919091166000908152600460205260409020805460ff1916911515919091179055565b6001600160a01b0385163314806109645750610964853361029c565b6109805760405162461bcd60e51b81526004016103a090611a89565b6106498585858585610fd1565b610995610e45565b6001600160a01b0381166109fa5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016103a0565b610a0381610e9f565b50565b610a0e610e45565b60009182526008602052604090912060020155565b60086020526000908152604090208054600182018054919291610a45906119ec565b80601f0160208091040260200160405190810160405280929190818152602001828054610a71906119ec565b8015610abe5780601f10610a9357610100808354040283529160200191610abe565b820191906000526020600020905b815481529060010190602001808311610aa157829003601f168201915b505050505090806002015490806003018054610ad9906119ec565b80601f0160208091040260200160405190810160405280929190818152602001828054610b05906119ec565b8015610b525780601f10610b2757610100808354040283529160200191610b52565b820191906000526020600020905b815481529060010190602001808311610b3557829003601f168201915b5050505050905084565b6001600160a01b038416610bbc5760405162461bcd60e51b815260206004820152602160248201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b60648201526084016103a0565b336000610bc8856110fb565b90506000610bd5856110fb565b90506000868152602081815260408083206001600160a01b038b16845290915281208054879290610c07908490611ccf565b909155505060408051878152602081018790526001600160a01b03808a1692600092918716917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4610c6783600089898989611146565b50505050505050565b8151835114610cd25760405162461bcd60e51b815260206004820152602860248201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206044820152670dad2e6dac2e8c6d60c31b60648201526084016103a0565b6001600160a01b038416610cf85760405162461bcd60e51b81526004016103a090611ce2565b3360005b8451811015610ddf576000858281518110610d1957610d19611ad7565b602002602001015190506000858381518110610d3757610d37611ad7565b602090810291909101810151600084815280835260408082206001600160a01b038e168352909352919091205490915081811015610d875760405162461bcd60e51b81526004016103a090611d27565b6000838152602081815260408083206001600160a01b038e8116855292528083208585039055908b16825281208054849290610dc4908490611ccf565b9250508190555050505080610dd890611aed565b9050610cfc565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051610e2f929190611d71565b60405180910390a46108c08187878787876112a1565b6003546001600160a01b031633146109045760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103a0565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b816001600160a01b0316836001600160a01b031603610f645760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b60648201526084016103a0565b6001600160a01b03838116600081815260016020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b038416610ff75760405162461bcd60e51b81526004016103a090611ce2565b336000611003856110fb565b90506000611010856110fb565b90506000868152602081815260408083206001600160a01b038c168452909152902054858110156110535760405162461bcd60e51b81526004016103a090611d27565b6000878152602081815260408083206001600160a01b038d8116855292528083208985039055908a16825281208054889290611090908490611ccf565b909155505060408051888152602081018890526001600160a01b03808b16928c821692918816917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a46110f0848a8a8a8a8a611146565b505050505050505050565b6040805160018082528183019092526060916000919060208083019080368337019050509050828160008151811061113557611135611ad7565b602090810291909101015292915050565b6001600160a01b0384163b156108c05760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e619061118a9089908990889088908890600401611d9f565b6020604051808303816000875af19250505080156111c5575060408051601f3d908101601f191682019092526111c291810190611dd9565b60015b611271576111d1611df6565b806308c379a00361120a57506111e5611e12565b806111f0575061120c565b8060405162461bcd60e51b81526004016103a0919061143b565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e2d455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b60648201526084016103a0565b6001600160e01b0319811663f23a6e6160e01b14610c675760405162461bcd60e51b81526004016103a090611e9b565b6001600160a01b0384163b156108c05760405163bc197c8160e01b81526001600160a01b0385169063bc197c81906112e59089908990889088908890600401611ee3565b6020604051808303816000875af1925050508015611320575060408051601f3d908101601f1916820190925261131d91810190611dd9565b60015b61132c576111d1611df6565b6001600160e01b0319811663bc197c8160e01b14610c675760405162461bcd60e51b81526004016103a090611e9b565b80356001600160a01b038116811461137357600080fd5b919050565b6000806040838503121561138b57600080fd5b6113948361135c565b946020939093013593505050565b6001600160e01b031981168114610a0357600080fd5b6000602082840312156113ca57600080fd5b81356113d5816113a2565b9392505050565b6000602082840312156113ee57600080fd5b5035919050565b6000815180845260005b8181101561141b576020818501810151868301820152016113ff565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006113d560208301846113f5565b60008060006060848603121561146357600080fd5b61146c8461135c565b95602085013595506040909401359392505050565b634e487b7160e01b600052604160045260246000fd5b601f8201601f191681016001600160401b03811182821017156114bc576114bc611481565b6040525050565b60006001600160401b038211156114dc576114dc611481565b5060051b60200190565b600082601f8301126114f757600080fd5b81356020611504826114c3565b6040516115118282611497565b83815260059390931b850182019282810191508684111561153157600080fd5b8286015b8481101561154c5780358352918301918301611535565b509695505050505050565b600082601f83011261156857600080fd5b81356001600160401b0381111561158157611581611481565b604051611598601f8301601f191660200182611497565b8181528460208386010111156115ad57600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080600060a086880312156115e257600080fd5b6115eb8661135c565b94506115f96020870161135c565b935060408601356001600160401b038082111561161557600080fd5b61162189838a016114e6565b9450606088013591508082111561163757600080fd5b61164389838a016114e6565b9350608088013591508082111561165957600080fd5b5061166688828901611557565b9150509295509295909350565b6000806040838503121561168657600080fd5b82356001600160401b038082111561169d57600080fd5b818501915085601f8301126116b157600080fd5b813560206116be826114c3565b6040516116cb8282611497565b83815260059390931b85018201928281019150898411156116eb57600080fd5b948201945b83861015611710576117018661135c565b825294820194908201906116f0565b9650508601359250508082111561172657600080fd5b50611733858286016114e6565b9150509250929050565b600081518084526020808501945080840160005b8381101561176d57815187529582019590820190600101611751565b509495945050505050565b6020815260006113d5602083018461173d565b60008083601f84011261179d57600080fd5b5081356001600160401b038111156117b457600080fd5b6020830191508360208285010111156117cc57600080fd5b9250929050565b6000806000806000606086880312156117eb57600080fd5b85356001600160401b038082111561180257600080fd5b61180e89838a0161178b565b909750955060208801359450604088013591508082111561182e57600080fd5b5061183b8882890161178b565b969995985093965092949392505050565b60008060006040848603121561186157600080fd5b8335925060208401356001600160401b0381111561187e57600080fd5b61188a8682870161178b565b9497909650939450505050565b6000602082840312156118a957600080fd5b6113d58261135c565b8015158114610a0357600080fd5b600080604083850312156118d357600080fd5b6118dc8361135c565b915060208301356118ec816118b2565b809150509250929050565b6000806040838503121561190a57600080fd5b6119138361135c565b91506119216020840161135c565b90509250929050565b600080600080600060a0868803121561194257600080fd5b61194b8661135c565b94506119596020870161135c565b9350604086013592506060860135915060808601356001600160401b0381111561198257600080fd5b61166688828901611557565b600080604083850312156119a157600080fd5b50508035926020909101359150565b8481526080602082015260006119c960808301866113f5565b84604084015282810360608401526119e181856113f5565b979650505050505050565b600181811c90821680611a0057607f821691505b602082108103611a2057634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b80820281158282048414176103cc576103cc611a26565b600060208284031215611a6557600080fd5b5051919050565b600060208284031215611a7e57600080fd5b81516113d5816118b2565b6020808252602e908201527f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60408201526d195c881bdc88185c1c1c9bdd995960921b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b600060018201611aff57611aff611a26565b5060010190565b601f821115611b4c57600081815260208120601f850160051c81016020861015611b2d5750805b601f850160051c820191505b818110156108c057828155600101611b39565b505050565b81516001600160401b03811115611b6a57611b6a611481565b611b7e81611b7884546119ec565b84611b06565b602080601f831160018114611bb35760008415611b9b5750858301515b600019600386901b1c1916600185901b1785556108c0565b600085815260208120601f198616915b82811015611be257888601518255948401946001909101908401611bc3565b5085821015611c005787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6001600160401b03831115611c2757611c27611481565b611c3b83611c3583546119ec565b83611b06565b6000601f841160018114611c6f5760008515611c575750838201355b600019600387901b1c1916600186901b178355610649565b600083815260209020601f19861690835b82811015611ca05786850135825560209485019460019092019101611c80565b5086821015611cbd5760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b808201808211156103cc576103cc611a26565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b604081526000611d84604083018561173d565b8281036020840152611d96818561173d565b95945050505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a0608082018190526000906119e1908301846113f5565b600060208284031215611deb57600080fd5b81516113d5816113a2565b600060033d1115611e0f5760046000803e5060005160e01c5b90565b600060443d1015611e205790565b6040516003193d81016004833e81513d6001600160401b038160248401118184111715611e4f57505050505090565b8285019150815181811115611e675750505050505090565b843d8701016020828501011115611e815750505050505090565b611e9060208286010187611497565b509095945050505050565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b6001600160a01b0386811682528516602082015260a060408201819052600090611f0f9083018661173d565b8281036060840152611f21818661173d565b90508281036080840152611f3581856113f5565b9897505050505050505056fea26469706673582212204a28950735485319e62140303a865f7b05e8806c2883928000df63f8fbb72ebe64736f6c634300081100330000000000000000000000003350748459411d148e9c9e2cb3dcb3b4bdc509cb

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

0000000000000000000000003350748459411d148e9c9e2cb3dcb3b4bdc509cb

-----Decoded View---------------
Arg [0] : _bugs (address): 0x3350748459411d148e9c9e2cb3dcb3b4bdc509cb

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000003350748459411d148e9c9e2cb3dcb3b4bdc509cb


Deployed ByteCode Sourcemap

48847:3107:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24796:230;;;;;;:::i;:::-;;:::i;:::-;;;597:25:1;;;585:2;570:18;24796:230:0;;;;;;;;23819:310;;;;;;:::i;:::-;;:::i;:::-;;;1184:14:1;;1177:22;1159:41;;1147:2;1132:18;23819:310:0;1019:187:1;24540:105:0;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;50908:375::-;;;;;;:::i;:::-;;:::i;:::-;;26739:438;;;;;;:::i;:::-;;:::i;49221:25::-;;;;;-1:-1:-1;;;49221:25:0;;;;;;;;;5359:4:1;5347:17;;;5329:36;;5317:2;5302:18;49221:25:0;5187:184:1;25192:524:0;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;49995:99::-;;;:::i;50352:265::-;;;;;;:::i;:::-;;:::i;51829:122::-;;;;;;:::i;:::-;;:::i;3268:103::-;;;:::i;2620:87::-;2693:6;;2620:87;;-1:-1:-1;;;;;2693:6:0;;;9072:51:1;;9060:2;9045:18;2620:87:0;8926:203:1;48061:44:0;;;;;;:::i;:::-;;;;;;;;;;;;;;;;25789:155;;;;;;:::i;:::-;;:::i;26016:168::-;;;;;;:::i;:::-;-1:-1:-1;;;;;26139:27:0;;;26115:4;26139:27;;;:18;:27;;;;;;;;:37;;;;;;;;;;;;;;;26016:168;48262:150;;;;;;:::i;:::-;;:::i;26256:406::-;;;;;;:::i;:::-;;:::i;3526:201::-;;;;;;:::i;:::-;;:::i;51505:118::-;;;;;;:::i;:::-;;:::i;49534:47::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;:::i;24796:230::-;24882:7;-1:-1:-1;;;;;24910:21:0;;24902:76;;;;-1:-1:-1;;;24902:76:0;;11631:2:1;24902:76:0;;;11613:21:1;11670:2;11650:18;;;11643:30;11709:34;11689:18;;;11682:62;-1:-1:-1;;;11760:18:1;;;11753:40;11810:19;;24902:76:0;;;;;;;;;-1:-1:-1;24996:9:0;:13;;;;;;;;;;;-1:-1:-1;;;;;24996:22:0;;;;;;;;;;24796:230;;;;;:::o;23819:310::-;23921:4;-1:-1:-1;;;;;;23958:41:0;;-1:-1:-1;;;23958:41:0;;:110;;-1:-1:-1;;;;;;;24016:52:0;;-1:-1:-1;;;24016:52:0;23958:110;:163;;;-1:-1:-1;;;;;;;;;;22709:40:0;;;24085:36;22600:157;24540:105;24600:13;24633:4;24626:11;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24540:105;;;:::o;50908:375::-;50982:21;51006:14;;;:10;:14;;;;;:19;;;:28;;51028:6;;51006:28;:::i;:::-;51065:4;;50982:52;;-1:-1:-1;51045:17:0;;-1:-1:-1;;;;;51065:4:0;:14;1278:10;51065:43;;-1:-1:-1;;;;;;51065:43:0;;;;;;;-1:-1:-1;;;;;12760:15:1;;;51065:43:0;;;12742:34:1;51102:4:0;12792:18:1;;;12785:43;12677:18;;51065:43:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;51045:63;;51140:13;51127:9;:26;;51119:57;;;;-1:-1:-1;;;51119:57:0;;13230:2:1;51119:57:0;;;13212:21:1;13269:2;13249:18;;;13242:30;-1:-1:-1;;;13288:18:1;;;13281:48;13346:18;;51119:57:0;13028:342:1;51119:57:0;51187:4;;-1:-1:-1;;;;;51187:4:0;:17;1278:10;51219:4;;51187:52;;;;;;-1:-1:-1;;;;;;51187:52:0;;;-1:-1:-1;;;;;13633:15:1;;;51187:52:0;;;13615:34:1;51219:4:0;;13665:18:1;;;13658:43;13717:18;;;13710:34;;;13550:18;;51187:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;51250:25;51256:2;51260;51264:6;51250:25;;;;;;;;;;;;:5;:25::i;:::-;50971:312;;50908:375;;;:::o;26739:438::-;-1:-1:-1;;;;;26972:20:0;;1278:10;26972:20;;:60;;-1:-1:-1;26996:36:0;27013:4;1278:10;26016:168;:::i;26996:36::-;26950:156;;;;-1:-1:-1;;;26950:156:0;;;;;;;:::i;:::-;27117:52;27140:4;27146:2;27150:3;27155:7;27164:4;27117:22;:52::i;25192:524::-;25348:16;25409:3;:10;25390:8;:15;:29;25382:83;;;;-1:-1:-1;;;25382:83:0;;14622:2:1;25382:83:0;;;14604:21:1;14661:2;14641:18;;;14634:30;14700:34;14680:18;;;14673:62;-1:-1:-1;;;14751:18:1;;;14744:39;14800:19;;25382:83:0;14420:405:1;25382:83:0;25478:30;25525:8;:15;-1:-1:-1;;;;;25511:30:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25511:30:0;;25478:63;;25559:9;25554:122;25578:8;:15;25574:1;:19;25554:122;;;25634:30;25644:8;25653:1;25644:11;;;;;;;;:::i;:::-;;;;;;;25657:3;25661:1;25657:6;;;;;;;;:::i;:::-;;;;;;;25634:9;:30::i;:::-;25615:13;25629:1;25615:16;;;;;;;;:::i;:::-;;;;;;;;;;:49;25595:3;;;:::i;:::-;;;25554:122;;;-1:-1:-1;25695:13:0;25192:524;-1:-1:-1;;;25192:524:0:o;49995:99::-;50039:7;50066:20;:10;44114:14;;44022:114;50066:20;50059:27;;49995:99;:::o;50352:265::-;2506:13;:11;:13::i;:::-;50485:10:::1;50498:20;:10;44114:14:::0;;44022:114;50498:20:::1;50485:33;;50546:30;;;;;;;;50556:2;50546:30;;;;50560:4;;50546:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;;;50546:30:0;;;-1:-1:-1;50546:30:0::1;::::0;;::::1;::::0;;;;;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;;;;;50572:3;;;;;;50546:30;::::1;50572:3:::0;;;;50546:30;::::1;;::::0;::::1;::::0;;;-1:-1:-1;50546:30:0;;;;-1:-1:-1;;50529:14:0;;;:10:::1;:14;::::0;;;;;;;:47;;;;;;::::1;::::0;:14;;-1:-1:-1;50529:47:0::1;::::0;::::1;::::0;::::1;::::0;;::::1;:::i;:::-;-1:-1:-1::0;50529:47:0::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;:::i;:::-;-1:-1:-1::0;;50587:10:0::1;44233:19:::0;;44251:1;44233:19;;;-1:-1:-1;50587:22:0::1;50474:143;50352:265:::0;;;;;:::o;51829:122::-;2506:13;:11;:13::i;:::-;51918:14:::1;::::0;;;:10:::1;:14;::::0;;;;:18:::1;;:25;51939:4:::0;;51918:18;:25:::1;:::i;:::-;;51829:122:::0;;;:::o;3268:103::-;2506:13;:11;:13::i;:::-;3333:30:::1;3360:1;3333:18;:30::i;:::-;3268:103::o:0;25789:155::-;25884:52;1278:10;25917:8;25927;25884:18;:52::i;:::-;25789:155;;:::o;48262:150::-;2506:13;:11;:13::i;:::-;-1:-1:-1;;;;;48371:21:0;;;::::1;;::::0;;;:12:::1;:21;::::0;;;;:33;;-1:-1:-1;;48371:33:0::1;::::0;::::1;;::::0;;;::::1;::::0;;48262:150::o;26256:406::-;-1:-1:-1;;;;;26464:20:0;;1278:10;26464:20;;:60;;-1:-1:-1;26488:36:0;26505:4;1278:10;26016:168;:::i;26488:36::-;26442:156;;;;-1:-1:-1;;;26442:156:0;;;;;;;:::i;:::-;26609:45;26627:4;26633:2;26637;26641:6;26649:4;26609:17;:45::i;3526:201::-;2506:13;:11;:13::i;:::-;-1:-1:-1;;;;;3615:22:0;::::1;3607:73;;;::::0;-1:-1:-1;;;3607:73:0;;18719:2:1;3607:73:0::1;::::0;::::1;18701:21:1::0;18758:2;18738:18;;;18731:30;18797:34;18777:18;;;18770:62;-1:-1:-1;;;18848:18:1;;;18841:36;18894:19;;3607:73:0::1;18517:402:1::0;3607:73:0::1;3691:28;3710:8;3691:18;:28::i;:::-;3526:201:::0;:::o;51505:118::-;2506:13;:11;:13::i;:::-;51588:14:::1;::::0;;;:10:::1;:14;::::0;;;;;:19:::1;;:27:::0;51505:118::o;49534:47::-;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;31437:729::-;-1:-1:-1;;;;;31590:16:0;;31582:62;;;;-1:-1:-1;;;31582:62:0;;19126:2:1;31582:62:0;;;19108:21:1;19165:2;19145:18;;;19138:30;19204:34;19184:18;;;19177:62;-1:-1:-1;;;19255:18:1;;;19248:31;19296:19;;31582:62:0;18924:397:1;31582:62:0;1278:10;31657:16;31722:21;31740:2;31722:17;:21::i;:::-;31699:44;;31754:24;31781:25;31799:6;31781:17;:25::i;:::-;31754:52;;31898:9;:13;;;;;;;;;;;-1:-1:-1;;;;;31898:17:0;;;;;;;;;:27;;31919:6;;31898:9;:27;;31919:6;;31898:27;:::i;:::-;;;;-1:-1:-1;;31941:52:0;;;19630:25:1;;;19686:2;19671:18;;19664:34;;;-1:-1:-1;;;;;31941:52:0;;;;31974:1;;31941:52;;;;;;19603:18:1;31941:52:0;;;;;;;32084:74;32115:8;32133:1;32137:2;32141;32145:6;32153:4;32084:30;:74::i;:::-;31571:595;;;31437:729;;;;:::o;28973:1146::-;29200:7;:14;29186:3;:10;:28;29178:81;;;;-1:-1:-1;;;29178:81:0;;19911:2:1;29178:81:0;;;19893:21:1;19950:2;19930:18;;;19923:30;19989:34;19969:18;;;19962:62;-1:-1:-1;;;20040:18:1;;;20033:38;20088:19;;29178:81:0;19709:404:1;29178:81:0;-1:-1:-1;;;;;29278:16:0;;29270:66;;;;-1:-1:-1;;;29270:66:0;;;;;;;:::i;:::-;1278:10;29349:16;29466:421;29490:3;:10;29486:1;:14;29466:421;;;29522:10;29535:3;29539:1;29535:6;;;;;;;;:::i;:::-;;;;;;;29522:19;;29556:14;29573:7;29581:1;29573:10;;;;;;;;:::i;:::-;;;;;;;;;;;;29600:19;29622:13;;;;;;;;;;-1:-1:-1;;;;;29622:19:0;;;;;;;;;;;;29573:10;;-1:-1:-1;29664:21:0;;;;29656:76;;;;-1:-1:-1;;;29656:76:0;;;;;;;:::i;:::-;29776:9;:13;;;;;;;;;;;-1:-1:-1;;;;;29776:19:0;;;;;;;;;;29798:20;;;29776:42;;29848:17;;;;;;;:27;;29798:20;;29776:9;29848:27;;29798:20;;29848:27;:::i;:::-;;;;;;;;29507:380;;;29502:3;;;;:::i;:::-;;;29466:421;;;;29934:2;-1:-1:-1;;;;;29904:47:0;29928:4;-1:-1:-1;;;;;29904:47:0;29918:8;-1:-1:-1;;;;;29904:47:0;;29938:3;29943:7;29904:47;;;;;;;:::i;:::-;;;;;;;;30036:75;30072:8;30082:4;30088:2;30092:3;30097:7;30106:4;30036:35;:75::i;2785:132::-;2693:6;;-1:-1:-1;;;;;2693:6:0;1278:10;2849:23;2841:68;;;;-1:-1:-1;;;2841:68:0;;21607:2:1;2841:68:0;;;21589:21:1;;;21626:18;;;21619:30;21685:34;21665:18;;;21658:62;21737:18;;2841:68:0;21405:356:1;3887:191:0;3980:6;;;-1:-1:-1;;;;;3997:17:0;;;-1:-1:-1;;;;;;3997:17:0;;;;;;;4030:40;;3980:6;;;3997:17;3980:6;;4030:40;;3961:16;;4030:40;3950:128;3887:191;:::o;35850:331::-;36005:8;-1:-1:-1;;;;;35996:17:0;:5;-1:-1:-1;;;;;35996:17:0;;35988:71;;;;-1:-1:-1;;;35988:71:0;;21968:2:1;35988:71:0;;;21950:21:1;22007:2;21987:18;;;21980:30;22046:34;22026:18;;;22019:62;-1:-1:-1;;;22097:18:1;;;22090:39;22146:19;;35988:71:0;21766:405:1;35988:71:0;-1:-1:-1;;;;;36070:25:0;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;:46;;-1:-1:-1;;36070:46:0;;;;;;;;;;36132:41;;1159::1;;;36132::0;;1132:18:1;36132:41:0;;;;;;;35850:331;;;:::o;27641:974::-;-1:-1:-1;;;;;27829:16:0;;27821:66;;;;-1:-1:-1;;;27821:66:0;;;;;;;:::i;:::-;1278:10;27900:16;27965:21;27983:2;27965:17;:21::i;:::-;27942:44;;27997:24;28024:25;28042:6;28024:17;:25::i;:::-;27997:52;;28135:19;28157:13;;;;;;;;;;;-1:-1:-1;;;;;28157:19:0;;;;;;;;;;28195:21;;;;28187:76;;;;-1:-1:-1;;;28187:76:0;;;;;;;:::i;:::-;28299:9;:13;;;;;;;;;;;-1:-1:-1;;;;;28299:19:0;;;;;;;;;;28321:20;;;28299:42;;28363:17;;;;;;;:27;;28321:20;;28299:9;28363:27;;28321:20;;28363:27;:::i;:::-;;;;-1:-1:-1;;28408:46:0;;;19630:25:1;;;19686:2;19671:18;;19664:34;;;-1:-1:-1;;;;;28408:46:0;;;;;;;;;;;;;;19603:18:1;28408:46:0;;;;;;;28539:68;28570:8;28580:4;28586:2;28590;28594:6;28602:4;28539:30;:68::i;:::-;27810:805;;;;27641:974;;;;;:::o;40116:198::-;40236:16;;;40250:1;40236:16;;;;;;;;;40182;;40211:22;;40236:16;;;;;;;;;;;;-1:-1:-1;40236:16:0;40211:41;;40274:7;40263:5;40269:1;40263:8;;;;;;;;:::i;:::-;;;;;;;;;;:18;40301:5;40116:198;-1:-1:-1;;40116:198:0:o;38543:744::-;-1:-1:-1;;;;;38758:13:0;;13862:19;:23;38754:526;;38794:72;;-1:-1:-1;;;38794:72:0;;-1:-1:-1;;;;;38794:38:0;;;;;:72;;38833:8;;38843:4;;38849:2;;38853:6;;38861:4;;38794:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38794:72:0;;;;;;;;-1:-1:-1;;38794:72:0;;;;;;;;;;;;:::i;:::-;;;38790:479;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;39142:6;39135:14;;-1:-1:-1;;;39135:14:0;;;;;;;;:::i;38790:479::-;;;39191:62;;-1:-1:-1;;;39191:62:0;;24058:2:1;39191:62:0;;;24040:21:1;24097:2;24077:18;;;24070:30;24136:34;24116:18;;;24109:62;-1:-1:-1;;;24187:18:1;;;24180:50;24247:19;;39191:62:0;23856:416:1;38790:479:0;-1:-1:-1;;;;;;38916:55:0;;-1:-1:-1;;;38916:55:0;38912:154;;38996:50;;-1:-1:-1;;;38996:50:0;;;;;;;:::i;39295:813::-;-1:-1:-1;;;;;39535:13:0;;13862:19;:23;39531:570;;39571:79;;-1:-1:-1;;;39571:79:0;;-1:-1:-1;;;;;39571:43:0;;;;;:79;;39615:8;;39625:4;;39631:3;;39636:7;;39645:4;;39571:79;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;39571:79:0;;;;;;;;-1:-1:-1;;39571:79:0;;;;;;;;;;;;:::i;:::-;;;39567:523;;;;:::i;:::-;-1:-1:-1;;;;;;39732:60:0;;-1:-1:-1;;;39732:60:0;39728:159;;39817:50;;-1:-1:-1;;;39817:50:0;;;;;;;:::i;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:254::-;260:6;268;321:2;309:9;300:7;296:23;292:32;289:52;;;337:1;334;327:12;289:52;360:29;379:9;360:29;:::i;:::-;350:39;436:2;421:18;;;;408:32;;-1:-1:-1;;;192:254:1:o;633:131::-;-1:-1:-1;;;;;;707:32:1;;697:43;;687:71;;754:1;751;744:12;769:245;827:6;880:2;868:9;859:7;855:23;851:32;848:52;;;896:1;893;886:12;848:52;935:9;922:23;954:30;978:5;954:30;:::i;:::-;1003:5;769:245;-1:-1:-1;;;769:245:1:o;1211:180::-;1270:6;1323:2;1311:9;1302:7;1298:23;1294:32;1291:52;;;1339:1;1336;1329:12;1291:52;-1:-1:-1;1362:23:1;;1211:180;-1:-1:-1;1211:180:1:o;1396:423::-;1438:3;1476:5;1470:12;1503:6;1498:3;1491:19;1528:1;1538:162;1552:6;1549:1;1546:13;1538:162;;;1614:4;1670:13;;;1666:22;;1660:29;1642:11;;;1638:20;;1631:59;1567:12;1538:162;;;1542:3;1745:1;1738:4;1729:6;1724:3;1720:16;1716:27;1709:38;1808:4;1801:2;1797:7;1792:2;1784:6;1780:15;1776:29;1771:3;1767:39;1763:50;1756:57;;;1396:423;;;;:::o;1824:220::-;1973:2;1962:9;1955:21;1936:4;1993:45;2034:2;2023:9;2019:18;2011:6;1993:45;:::i;2049:322::-;2126:6;2134;2142;2195:2;2183:9;2174:7;2170:23;2166:32;2163:52;;;2211:1;2208;2201:12;2163:52;2234:29;2253:9;2234:29;:::i;:::-;2224:39;2310:2;2295:18;;2282:32;;-1:-1:-1;2361:2:1;2346:18;;;2333:32;;2049:322;-1:-1:-1;;;2049:322:1:o;2376:127::-;2437:10;2432:3;2428:20;2425:1;2418:31;2468:4;2465:1;2458:15;2492:4;2489:1;2482:15;2508:249;2618:2;2599:13;;-1:-1:-1;;2595:27:1;2583:40;;-1:-1:-1;;;;;2638:34:1;;2674:22;;;2635:62;2632:88;;;2700:18;;:::i;:::-;2736:2;2729:22;-1:-1:-1;;2508:249:1:o;2762:183::-;2822:4;-1:-1:-1;;;;;2847:6:1;2844:30;2841:56;;;2877:18;;:::i;:::-;-1:-1:-1;2922:1:1;2918:14;2934:4;2914:25;;2762:183::o;2950:724::-;3004:5;3057:3;3050:4;3042:6;3038:17;3034:27;3024:55;;3075:1;3072;3065:12;3024:55;3111:6;3098:20;3137:4;3160:43;3200:2;3160:43;:::i;:::-;3232:2;3226:9;3244:31;3272:2;3264:6;3244:31;:::i;:::-;3310:18;;;3402:1;3398:10;;;;3386:23;;3382:32;;;3344:15;;;;-1:-1:-1;3426:15:1;;;3423:35;;;3454:1;3451;3444:12;3423:35;3490:2;3482:6;3478:15;3502:142;3518:6;3513:3;3510:15;3502:142;;;3584:17;;3572:30;;3622:12;;;;3535;;3502:142;;;-1:-1:-1;3662:6:1;2950:724;-1:-1:-1;;;;;;2950:724:1:o;3679:555::-;3721:5;3774:3;3767:4;3759:6;3755:17;3751:27;3741:55;;3792:1;3789;3782:12;3741:55;3828:6;3815:20;-1:-1:-1;;;;;3850:2:1;3847:26;3844:52;;;3876:18;;:::i;:::-;3925:2;3919:9;3937:67;3992:2;3973:13;;-1:-1:-1;;3969:27:1;3998:4;3965:38;3919:9;3937:67;:::i;:::-;4028:2;4020:6;4013:18;4074:3;4067:4;4062:2;4054:6;4050:15;4046:26;4043:35;4040:55;;;4091:1;4088;4081:12;4040:55;4155:2;4148:4;4140:6;4136:17;4129:4;4121:6;4117:17;4104:54;4202:1;4178:15;;;4195:4;4174:26;4167:37;;;;4182:6;3679:555;-1:-1:-1;;;3679:555:1:o;4239:943::-;4393:6;4401;4409;4417;4425;4478:3;4466:9;4457:7;4453:23;4449:33;4446:53;;;4495:1;4492;4485:12;4446:53;4518:29;4537:9;4518:29;:::i;:::-;4508:39;;4566:38;4600:2;4589:9;4585:18;4566:38;:::i;:::-;4556:48;;4655:2;4644:9;4640:18;4627:32;-1:-1:-1;;;;;4719:2:1;4711:6;4708:14;4705:34;;;4735:1;4732;4725:12;4705:34;4758:61;4811:7;4802:6;4791:9;4787:22;4758:61;:::i;:::-;4748:71;;4872:2;4861:9;4857:18;4844:32;4828:48;;4901:2;4891:8;4888:16;4885:36;;;4917:1;4914;4907:12;4885:36;4940:63;4995:7;4984:8;4973:9;4969:24;4940:63;:::i;:::-;4930:73;;5056:3;5045:9;5041:19;5028:33;5012:49;;5086:2;5076:8;5073:16;5070:36;;;5102:1;5099;5092:12;5070:36;;5125:51;5168:7;5157:8;5146:9;5142:24;5125:51;:::i;:::-;5115:61;;;4239:943;;;;;;;;:::o;5376:1208::-;5494:6;5502;5555:2;5543:9;5534:7;5530:23;5526:32;5523:52;;;5571:1;5568;5561:12;5523:52;5611:9;5598:23;-1:-1:-1;;;;;5681:2:1;5673:6;5670:14;5667:34;;;5697:1;5694;5687:12;5667:34;5735:6;5724:9;5720:22;5710:32;;5780:7;5773:4;5769:2;5765:13;5761:27;5751:55;;5802:1;5799;5792:12;5751:55;5838:2;5825:16;5860:4;5883:43;5923:2;5883:43;:::i;:::-;5955:2;5949:9;5967:31;5995:2;5987:6;5967:31;:::i;:::-;6033:18;;;6121:1;6117:10;;;;6109:19;;6105:28;;;6067:15;;;;-1:-1:-1;6145:19:1;;;6142:39;;;6177:1;6174;6167:12;6142:39;6201:11;;;;6221:148;6237:6;6232:3;6229:15;6221:148;;;6303:23;6322:3;6303:23;:::i;:::-;6291:36;;6254:12;;;;6347;;;;6221:148;;;6388:6;-1:-1:-1;;6432:18:1;;6419:32;;-1:-1:-1;;6463:16:1;;;6460:36;;;6492:1;6489;6482:12;6460:36;;6515:63;6570:7;6559:8;6548:9;6544:24;6515:63;:::i;:::-;6505:73;;;5376:1208;;;;;:::o;6589:435::-;6642:3;6680:5;6674:12;6707:6;6702:3;6695:19;6733:4;6762:2;6757:3;6753:12;6746:19;;6799:2;6792:5;6788:14;6820:1;6830:169;6844:6;6841:1;6838:13;6830:169;;;6905:13;;6893:26;;6939:12;;;;6974:15;;;;6866:1;6859:9;6830:169;;;-1:-1:-1;7015:3:1;;6589:435;-1:-1:-1;;;;;6589:435:1:o;7029:261::-;7208:2;7197:9;7190:21;7171:4;7228:56;7280:2;7269:9;7265:18;7257:6;7228:56;:::i;7295:348::-;7347:8;7357:6;7411:3;7404:4;7396:6;7392:17;7388:27;7378:55;;7429:1;7426;7419:12;7378:55;-1:-1:-1;7452:20:1;;-1:-1:-1;;;;;7484:30:1;;7481:50;;;7527:1;7524;7517:12;7481:50;7564:4;7556:6;7552:17;7540:29;;7616:3;7609:4;7600:6;7592;7588:19;7584:30;7581:39;7578:59;;;7633:1;7630;7623:12;7578:59;7295:348;;;;;:::o;7648:789::-;7749:6;7757;7765;7773;7781;7834:2;7822:9;7813:7;7809:23;7805:32;7802:52;;;7850:1;7847;7840:12;7802:52;7890:9;7877:23;-1:-1:-1;;;;;7960:2:1;7952:6;7949:14;7946:34;;;7976:1;7973;7966:12;7946:34;8015:59;8066:7;8057:6;8046:9;8042:22;8015:59;:::i;:::-;8093:8;;-1:-1:-1;7989:85:1;-1:-1:-1;8175:2:1;8160:18;;8147:32;;-1:-1:-1;8232:2:1;8217:18;;8204:32;;-1:-1:-1;8248:16:1;;;8245:36;;;8277:1;8274;8267:12;8245:36;;8316:61;8369:7;8358:8;8347:9;8343:24;8316:61;:::i;:::-;7648:789;;;;-1:-1:-1;7648:789:1;;-1:-1:-1;8396:8:1;;8290:87;7648:789;-1:-1:-1;;;7648:789:1:o;8442:479::-;8522:6;8530;8538;8591:2;8579:9;8570:7;8566:23;8562:32;8559:52;;;8607:1;8604;8597:12;8559:52;8643:9;8630:23;8620:33;;8704:2;8693:9;8689:18;8676:32;-1:-1:-1;;;;;8723:6:1;8720:30;8717:50;;;8763:1;8760;8753:12;8717:50;8802:59;8853:7;8844:6;8833:9;8829:22;8802:59;:::i;:::-;8442:479;;8880:8;;-1:-1:-1;8776:85:1;;-1:-1:-1;;;;8442:479:1:o;9134:186::-;9193:6;9246:2;9234:9;9225:7;9221:23;9217:32;9214:52;;;9262:1;9259;9252:12;9214:52;9285:29;9304:9;9285:29;:::i;9325:118::-;9411:5;9404:13;9397:21;9390:5;9387:32;9377:60;;9433:1;9430;9423:12;9448:315;9513:6;9521;9574:2;9562:9;9553:7;9549:23;9545:32;9542:52;;;9590:1;9587;9580:12;9542:52;9613:29;9632:9;9613:29;:::i;:::-;9603:39;;9692:2;9681:9;9677:18;9664:32;9705:28;9727:5;9705:28;:::i;:::-;9752:5;9742:15;;;9448:315;;;;;:::o;9768:260::-;9836:6;9844;9897:2;9885:9;9876:7;9872:23;9868:32;9865:52;;;9913:1;9910;9903:12;9865:52;9936:29;9955:9;9936:29;:::i;:::-;9926:39;;9984:38;10018:2;10007:9;10003:18;9984:38;:::i;:::-;9974:48;;9768:260;;;;;:::o;10033:606::-;10137:6;10145;10153;10161;10169;10222:3;10210:9;10201:7;10197:23;10193:33;10190:53;;;10239:1;10236;10229:12;10190:53;10262:29;10281:9;10262:29;:::i;:::-;10252:39;;10310:38;10344:2;10333:9;10329:18;10310:38;:::i;:::-;10300:48;;10395:2;10384:9;10380:18;10367:32;10357:42;;10446:2;10435:9;10431:18;10418:32;10408:42;;10501:3;10490:9;10486:19;10473:33;-1:-1:-1;;;;;10521:6:1;10518:30;10515:50;;;10561:1;10558;10551:12;10515:50;10584:49;10625:7;10616:6;10605:9;10601:22;10584:49;:::i;10644:248::-;10712:6;10720;10773:2;10761:9;10752:7;10748:23;10744:32;10741:52;;;10789:1;10786;10779:12;10741:52;-1:-1:-1;;10812:23:1;;;10882:2;10867:18;;;10854:32;;-1:-1:-1;10644:248:1:o;10897:527::-;11150:6;11139:9;11132:25;11193:3;11188:2;11177:9;11173:18;11166:31;11113:4;11220:46;11261:3;11250:9;11246:19;11238:6;11220:46;:::i;:::-;11302:6;11297:2;11286:9;11282:18;11275:34;11357:9;11349:6;11345:22;11340:2;11329:9;11325:18;11318:50;11385:33;11411:6;11403;11385:33;:::i;:::-;11377:41;10897:527;-1:-1:-1;;;;;;;10897:527:1:o;11840:380::-;11919:1;11915:12;;;;11962;;;11983:61;;12037:4;12029:6;12025:17;12015:27;;11983:61;12090:2;12082:6;12079:14;12059:18;12056:38;12053:161;;12136:10;12131:3;12127:20;12124:1;12117:31;12171:4;12168:1;12161:15;12199:4;12196:1;12189:15;12053:161;;11840:380;;;:::o;12225:127::-;12286:10;12281:3;12277:20;12274:1;12267:31;12317:4;12314:1;12307:15;12341:4;12338:1;12331:15;12357:168;12430:9;;;12461;;12478:15;;;12472:22;;12458:37;12448:71;;12499:18;;:::i;12839:184::-;12909:6;12962:2;12950:9;12941:7;12937:23;12933:32;12930:52;;;12978:1;12975;12968:12;12930:52;-1:-1:-1;13001:16:1;;12839:184;-1:-1:-1;12839:184:1:o;13755:245::-;13822:6;13875:2;13863:9;13854:7;13850:23;13846:32;13843:52;;;13891:1;13888;13881:12;13843:52;13923:9;13917:16;13942:28;13964:5;13942:28;:::i;14005:410::-;14207:2;14189:21;;;14246:2;14226:18;;;14219:30;14285:34;14280:2;14265:18;;14258:62;-1:-1:-1;;;14351:2:1;14336:18;;14329:44;14405:3;14390:19;;14005:410::o;14830:127::-;14891:10;14886:3;14882:20;14879:1;14872:31;14922:4;14919:1;14912:15;14946:4;14943:1;14936:15;14962:135;15001:3;15022:17;;;15019:43;;15042:18;;:::i;:::-;-1:-1:-1;15089:1:1;15078:13;;14962:135::o;15228:545::-;15330:2;15325:3;15322:11;15319:448;;;15366:1;15391:5;15387:2;15380:17;15436:4;15432:2;15422:19;15506:2;15494:10;15490:19;15487:1;15483:27;15477:4;15473:38;15542:4;15530:10;15527:20;15524:47;;;-1:-1:-1;15565:4:1;15524:47;15620:2;15615:3;15611:12;15608:1;15604:20;15598:4;15594:31;15584:41;;15675:82;15693:2;15686:5;15683:13;15675:82;;;15738:17;;;15719:1;15708:13;15675:82;;15319:448;15228:545;;;:::o;15949:1352::-;16075:3;16069:10;-1:-1:-1;;;;;16094:6:1;16091:30;16088:56;;;16124:18;;:::i;:::-;16153:97;16243:6;16203:38;16235:4;16229:11;16203:38;:::i;:::-;16197:4;16153:97;:::i;:::-;16305:4;;16369:2;16358:14;;16386:1;16381:663;;;;17088:1;17105:6;17102:89;;;-1:-1:-1;17157:19:1;;;17151:26;17102:89;-1:-1:-1;;15906:1:1;15902:11;;;15898:24;15894:29;15884:40;15930:1;15926:11;;;15881:57;17204:81;;16351:944;;16381:663;15175:1;15168:14;;;15212:4;15199:18;;-1:-1:-1;;16417:20:1;;;16535:236;16549:7;16546:1;16543:14;16535:236;;;16638:19;;;16632:26;16617:42;;16730:27;;;;16698:1;16686:14;;;;16565:19;;16535:236;;;16539:3;16799:6;16790:7;16787:19;16784:201;;;16860:19;;;16854:26;-1:-1:-1;;16943:1:1;16939:14;;;16955:3;16935:24;16931:37;16927:42;16912:58;16897:74;;16784:201;-1:-1:-1;;;;;17031:1:1;17015:14;;;17011:22;16998:36;;-1:-1:-1;15949:1352:1:o;17306:1206::-;-1:-1:-1;;;;;17425:3:1;17422:27;17419:53;;;17452:18;;:::i;:::-;17481:94;17571:3;17531:38;17563:4;17557:11;17531:38;:::i;:::-;17525:4;17481:94;:::i;:::-;17601:1;17626:2;17621:3;17618:11;17643:1;17638:616;;;;18298:1;18315:3;18312:93;;;-1:-1:-1;18371:19:1;;;18358:33;18312:93;-1:-1:-1;;15906:1:1;15902:11;;;15898:24;15894:29;15884:40;15930:1;15926:11;;;15881:57;18418:78;;17611:895;;17638:616;15175:1;15168:14;;;15212:4;15199:18;;-1:-1:-1;;17674:17:1;;;17775:9;17797:229;17811:7;17808:1;17805:14;17797:229;;;17900:19;;;17887:33;17872:49;;18007:4;17992:20;;;;17960:1;17948:14;;;;17827:12;17797:229;;;17801:3;18054;18045:7;18042:16;18039:159;;;18178:1;18174:6;18168:3;18162;18159:1;18155:11;18151:21;18147:34;18143:39;18130:9;18125:3;18121:19;18108:33;18104:79;18096:6;18089:95;18039:159;;;18241:1;18235:3;18232:1;18228:11;18224:19;18218:4;18211:33;17611:895;;17306:1206;;;:::o;19326:125::-;19391:9;;;19412:10;;;19409:36;;;19425:18;;:::i;20118:401::-;20320:2;20302:21;;;20359:2;20339:18;;;20332:30;20398:34;20393:2;20378:18;;20371:62;-1:-1:-1;;;20464:2:1;20449:18;;20442:35;20509:3;20494:19;;20118:401::o;20524:406::-;20726:2;20708:21;;;20765:2;20745:18;;;20738:30;20804:34;20799:2;20784:18;;20777:62;-1:-1:-1;;;20870:2:1;20855:18;;20848:40;20920:3;20905:19;;20524:406::o;20935:465::-;21192:2;21181:9;21174:21;21155:4;21218:56;21270:2;21259:9;21255:18;21247:6;21218:56;:::i;:::-;21322:9;21314:6;21310:22;21305:2;21294:9;21290:18;21283:50;21350:44;21387:6;21379;21350:44;:::i;:::-;21342:52;20935:465;-1:-1:-1;;;;;20935:465:1:o;22176:561::-;-1:-1:-1;;;;;22473:15:1;;;22455:34;;22525:15;;22520:2;22505:18;;22498:43;22572:2;22557:18;;22550:34;;;22615:2;22600:18;;22593:34;;;22435:3;22658;22643:19;;22636:32;;;22398:4;;22685:46;;22711:19;;22703:6;22685:46;:::i;22742:249::-;22811:6;22864:2;22852:9;22843:7;22839:23;22835:32;22832:52;;;22880:1;22877;22870:12;22832:52;22912:9;22906:16;22931:30;22955:5;22931:30;:::i;22996:179::-;23031:3;23073:1;23055:16;23052:23;23049:120;;;23119:1;23116;23113;23098:23;-1:-1:-1;23156:1:1;23150:8;23145:3;23141:18;23049:120;22996:179;:::o;23180:671::-;23219:3;23261:4;23243:16;23240:26;23237:39;;;23180:671;:::o;23237:39::-;23303:2;23297:9;-1:-1:-1;;23368:16:1;23364:25;;23361:1;23297:9;23340:50;23419:4;23413:11;23443:16;-1:-1:-1;;;;;23549:2:1;23542:4;23534:6;23530:17;23527:25;23522:2;23514:6;23511:14;23508:45;23505:58;;;23556:5;;;;;23180:671;:::o;23505:58::-;23593:6;23587:4;23583:17;23572:28;;23629:3;23623:10;23656:2;23648:6;23645:14;23642:27;;;23662:5;;;;;;23180:671;:::o;23642:27::-;23746:2;23727:16;23721:4;23717:27;23713:36;23706:4;23697:6;23692:3;23688:16;23684:27;23681:69;23678:82;;;23753:5;;;;;;23180:671;:::o;23678:82::-;23769:57;23820:4;23811:6;23803;23799:19;23795:30;23789:4;23769:57;:::i;:::-;-1:-1:-1;23842:3:1;;23180:671;-1:-1:-1;;;;;23180:671:1:o;24277:404::-;24479:2;24461:21;;;24518:2;24498:18;;;24491:30;24557:34;24552:2;24537:18;;24530:62;-1:-1:-1;;;24623:2:1;24608:18;;24601:38;24671:3;24656:19;;24277:404::o;24686:827::-;-1:-1:-1;;;;;25083:15:1;;;25065:34;;25135:15;;25130:2;25115:18;;25108:43;25045:3;25182:2;25167:18;;25160:31;;;25008:4;;25214:57;;25251:19;;25243:6;25214:57;:::i;:::-;25319:9;25311:6;25307:22;25302:2;25291:9;25287:18;25280:50;25353:44;25390:6;25382;25353:44;:::i;:::-;25339:58;;25446:9;25438:6;25434:22;25428:3;25417:9;25413:19;25406:51;25474:33;25500:6;25492;25474:33;:::i;:::-;25466:41;24686:827;-1:-1:-1;;;;;;;;24686:827:1:o

Metadata Hash

ipfs://4a28950735485319e62140303a865f7b05e8806c2883928000df63f8fbb72ebe
Loading