Token SamEnrico Ebooks

 

Overview ERC-1155

Total Supply:
0 SEWE

Holders:
1 addresses

Transfers:
-

 
Loading
[ Download CSV Export  ] 
Loading
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
SamEnricoEbooks

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-11-25
*/

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


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

pragma solidity ^0.8.0;

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

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

// File: @openzeppelin/contracts/security/Pausable.sol


// OpenZeppelin Contracts (last updated v4.7.0) (security/Pausable.sol)

pragma solidity ^0.8.0;


/**
 * @dev Contract module which allows children to implement an emergency stop
 * mechanism that can be triggered by an authorized account.
 *
 * This module is used through inheritance. It will make available the
 * modifiers `whenNotPaused` and `whenPaused`, which can be applied to
 * the functions of your contract. Note that they will not be pausable by
 * simply including this module, only once the modifiers are put in place.
 */
abstract contract Pausable is Context {
    /**
     * @dev Emitted when the pause is triggered by `account`.
     */
    event Paused(address account);

    /**
     * @dev Emitted when the pause is lifted by `account`.
     */
    event Unpaused(address account);

    bool private _paused;

    /**
     * @dev Initializes the contract in unpaused state.
     */
    constructor() {
        _paused = false;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is not paused.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    modifier whenNotPaused() {
        _requireNotPaused();
        _;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is paused.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    modifier whenPaused() {
        _requirePaused();
        _;
    }

    /**
     * @dev Returns true if the contract is paused, and false otherwise.
     */
    function paused() public view virtual returns (bool) {
        return _paused;
    }

    /**
     * @dev Throws if the contract is paused.
     */
    function _requireNotPaused() internal view virtual {
        require(!paused(), "Pausable: paused");
    }

    /**
     * @dev Throws if the contract is not paused.
     */
    function _requirePaused() internal view virtual {
        require(paused(), "Pausable: not paused");
    }

    /**
     * @dev Triggers stopped state.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    function _pause() internal virtual whenNotPaused {
        _paused = true;
        emit Paused(_msgSender());
    }

    /**
     * @dev Returns to normal state.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    function _unpause() internal virtual whenPaused {
        _paused = false;
        emit Unpaused(_msgSender());
    }
}

// File: @openzeppelin/contracts/access/Ownable.sol


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

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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

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


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

pragma solidity ^0.8.1;

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

        return account.code.length > 0;
    }

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

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

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


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

pragma solidity ^0.8.0;

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

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


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

pragma solidity ^0.8.0;


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

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


// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC1155/IERC1155Receiver.sol)

pragma solidity ^0.8.0;


/**
 * @dev _Available since v3.1._
 */
interface IERC1155Receiver is IERC165 {
    /**
     * @dev Handles the receipt of a single ERC1155 token type. This function is
     * called at the end of a `safeTransferFrom` after the balance has been updated.
     *
     * NOTE: To accept the transfer, this must return
     * `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))`
     * (i.e. 0xf23a6e61, or its own function selector).
     *
     * @param operator The address which initiated the transfer (i.e. msg.sender)
     * @param from The address which previously owned the token
     * @param id The ID of the token being transferred
     * @param value The amount of tokens being transferred
     * @param data Additional data with no specified format
     * @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed
     */
    function onERC1155Received(
        address operator,
        address from,
        uint256 id,
        uint256 value,
        bytes calldata data
    ) external returns (bytes4);

    /**
     * @dev Handles the receipt of a multiple ERC1155 token types. This function
     * is called at the end of a `safeBatchTransferFrom` after the balances have
     * been updated.
     *
     * NOTE: To accept the transfer(s), this must return
     * `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))`
     * (i.e. 0xbc197c81, or its own function selector).
     *
     * @param operator The address which initiated the batch transfer (i.e. msg.sender)
     * @param from The address which previously owned the token
     * @param ids An array containing ids of each token being transferred (order and length must match values array)
     * @param values An array containing amounts of each token being transferred (order and length must match ids array)
     * @param data Additional data with no specified format
     * @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed
     */
    function onERC1155BatchReceived(
        address operator,
        address from,
        uint256[] calldata ids,
        uint256[] calldata values,
        bytes calldata data
    ) external returns (bytes4);
}

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


// OpenZeppelin Contracts (last updated v4.7.0) (token/ERC1155/IERC1155.sol)

pragma solidity ^0.8.0;


/**
 * @dev Required interface of an ERC1155 compliant contract, as defined in the
 * https://eips.ethereum.org/EIPS/eip-1155[EIP].
 *
 * _Available since v3.1._
 */
interface IERC1155 is IERC165 {
    /**
     * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`.
     */
    event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);

    /**
     * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all
     * transfers.
     */
    event TransferBatch(
        address indexed operator,
        address indexed from,
        address indexed to,
        uint256[] ids,
        uint256[] values
    );

    /**
     * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to
     * `approved`.
     */
    event ApprovalForAll(address indexed account, address indexed operator, bool approved);

    /**
     * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI.
     *
     * If an {URI} event was emitted for `id`, the standard
     * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value
     * returned by {IERC1155MetadataURI-uri}.
     */
    event URI(string value, uint256 indexed id);

    /**
     * @dev Returns the amount of tokens of token type `id` owned by `account`.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function balanceOf(address account, uint256 id) external view returns (uint256);

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}.
     *
     * Requirements:
     *
     * - `accounts` and `ids` must have the same length.
     */
    function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids)
        external
        view
        returns (uint256[] memory);

    /**
     * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`,
     *
     * Emits an {ApprovalForAll} event.
     *
     * Requirements:
     *
     * - `operator` cannot be the caller.
     */
    function setApprovalForAll(address operator, bool approved) external;

    /**
     * @dev Returns true if `operator` is approved to transfer ``account``'s tokens.
     *
     * See {setApprovalForAll}.
     */
    function isApprovedForAll(address account, address operator) external view returns (bool);

    /**
     * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - If the caller is not `from`, it must have been approved to spend ``from``'s tokens via {setApprovalForAll}.
     * - `from` must have a balance of tokens of type `id` of at least `amount`.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes calldata data
    ) external;

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}.
     *
     * Emits a {TransferBatch} event.
     *
     * Requirements:
     *
     * - `ids` and `amounts` must have the same length.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
     * acceptance magic value.
     */
    function safeBatchTransferFrom(
        address from,
        address to,
        uint256[] calldata ids,
        uint256[] calldata amounts,
        bytes calldata data
    ) external;
}

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


// OpenZeppelin Contracts v4.4.1 (token/ERC1155/extensions/IERC1155MetadataURI.sol)

pragma solidity ^0.8.0;


/**
 * @dev Interface of the optional ERC1155MetadataExtension interface, as defined
 * in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[EIP].
 *
 * _Available since v3.1._
 */
interface IERC1155MetadataURI is IERC1155 {
    /**
     * @dev Returns the URI for token type `id`.
     *
     * If the `\{id\}` substring is present in the URI, it must be replaced by
     * clients with the actual token type ID.
     */
    function uri(uint256 id) external view returns (string memory);
}

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


// OpenZeppelin Contracts (last updated v4.8.0) (token/ERC1155/ERC1155.sol)

pragma solidity ^0.8.0;







/**
 * @dev Implementation of the basic standard multi-token.
 * See https://eips.ethereum.org/EIPS/eip-1155
 * Originally based on code by Enjin: https://github.com/enjin/erc-1155
 *
 * _Available since v3.1._
 */
contract ERC1155 is Context, ERC165, IERC1155, IERC1155MetadataURI {
    using Address for address;

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

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

    // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json
    string 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: SamEnrioEbooks.sol


pragma solidity ^0.8.9;




contract SamEnricoEbooks is ERC1155, Ownable, Pausable {
    constructor() ERC1155("") {}

    uint8 public constant decimals  = 0;
    string public name    = 'SamEnrico Ebooks';
    string public symbol  = 'SEWE';

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

    function pause() public onlyOwner {
        _pause();
    }

    function unpause() public onlyOwner {
        _unpause();
    }

    function mint(address account, uint256 id, uint256 amount, bytes memory data)
        public
        onlyOwner
    {
        _mint(account, id, amount, data);
    }

    function mintBatch(address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data)
        public
        onlyOwner
    {
        _mintBatch(to, ids, amounts, data);
    }

    function _beforeTokenTransfer(address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data)
        internal
        whenNotPaused
        override
    {
        super._beforeTokenTransfer(operator, from, to, ids, amounts, data);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"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":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"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":"mintBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newuri","type":"string"}],"name":"setURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]

60806040526040518060400160405280601081526020017f53616d456e7269636f2045626f6f6b7300000000000000000000000000000000815250600490816200004a919062000460565b506040518060400160405280600481526020017f53455745000000000000000000000000000000000000000000000000000000008152506005908162000091919062000460565b503480156200009f57600080fd5b5060405180602001604052806000815250620000c1816200010360201b60201c565b50620000e2620000d66200011860201b60201c565b6200012060201b60201c565b6000600360146101000a81548160ff02191690831515021790555062000547565b806002908162000114919062000460565b5050565b600033905090565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200026857607f821691505b6020821081036200027e576200027d62000220565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620002e87fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620002a9565b620002f48683620002a9565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620003416200033b62000335846200030c565b62000316565b6200030c565b9050919050565b6000819050919050565b6200035d8362000320565b620003756200036c8262000348565b848454620002b6565b825550505050565b600090565b6200038c6200037d565b6200039981848462000352565b505050565b5b81811015620003c157620003b560008262000382565b6001810190506200039f565b5050565b601f8211156200041057620003da8162000284565b620003e58462000299565b81016020851015620003f5578190505b6200040d620004048562000299565b8301826200039e565b50505b505050565b600082821c905092915050565b6000620004356000198460080262000415565b1980831691505092915050565b600062000450838362000422565b9150826002028217905092915050565b6200046b82620001e6565b67ffffffffffffffff811115620004875762000486620001f1565b5b6200049382546200024f565b620004a0828285620003c5565b600060209050601f831160018114620004d85760008415620004c3578287015190505b620004cf858262000442565b8655506200053f565b601f198416620004e88662000284565b60005b828110156200051257848901518255600182019150602085019450602081019050620004eb565b868310156200053257848901516200052e601f89168262000422565b8355505b6001600288020188555050505b505050505050565b61375b80620005576000396000f3fe608060405234801561001057600080fd5b506004361061012b5760003560e01c80635c975abb116100ad57806395d89b411161007157806395d89b41146102f6578063a22cb46514610314578063e985e9c514610330578063f242432a14610360578063f2fde38b1461037c5761012b565b80635c975abb1461028a578063715018a6146102a8578063731133e9146102b25780638456cb59146102ce5780638da5cb5b146102d85761012b565b80631f7fdffa116100f45780631f7fdffa146101fa5780632eb2c2d614610216578063313ce567146102325780633f4ba83a146102505780634e1273f41461025a5761012b565b8062fdd58e1461013057806301ffc9a71461016057806302fe53051461019057806306fdde03146101ac5780630e89341c146101ca575b600080fd5b61014a60048036038101906101459190611e87565b610398565b6040516101579190611ed6565b60405180910390f35b61017a60048036038101906101759190611f49565b610460565b6040516101879190611f91565b60405180910390f35b6101aa60048036038101906101a591906120f2565b610542565b005b6101b4610556565b6040516101c191906121ba565b60405180910390f35b6101e460048036038101906101df91906121dc565b6105e4565b6040516101f191906121ba565b60405180910390f35b610214600480360381019061020f9190612372565b610678565b005b610230600480360381019061022b919061242d565b610692565b005b61023a610733565b6040516102479190612518565b60405180910390f35b610258610738565b005b610274600480360381019061026f91906125f6565b61074a565b604051610281919061272c565b60405180910390f35b610292610863565b60405161029f9190611f91565b60405180910390f35b6102b061087a565b005b6102cc60048036038101906102c7919061274e565b61088e565b005b6102d66108a8565b005b6102e06108ba565b6040516102ed91906127e0565b60405180910390f35b6102fe6108e4565b60405161030b91906121ba565b60405180910390f35b61032e60048036038101906103299190612827565b610972565b005b61034a60048036038101906103459190612867565b610988565b6040516103579190611f91565b60405180910390f35b61037a600480360381019061037591906128a7565b610a1c565b005b6103966004803603810190610391919061293e565b610abd565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610408576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103ff906129dd565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061052b57507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061053b575061053a82610b40565b5b9050919050565b61054a610baa565b61055381610c28565b50565b6004805461056390612a2c565b80601f016020809104026020016040519081016040528092919081815260200182805461058f90612a2c565b80156105dc5780601f106105b1576101008083540402835291602001916105dc565b820191906000526020600020905b8154815290600101906020018083116105bf57829003601f168201915b505050505081565b6060600280546105f390612a2c565b80601f016020809104026020016040519081016040528092919081815260200182805461061f90612a2c565b801561066c5780601f106106415761010080835404028352916020019161066c565b820191906000526020600020905b81548152906001019060200180831161064f57829003601f168201915b50505050509050919050565b610680610baa565b61068c84848484610c3b565b50505050565b61069a610e67565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806106e057506106df856106da610e67565b610988565b5b61071f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161071690612acf565b60405180910390fd5b61072c8585858585610e6f565b5050505050565b600081565b610740610baa565b610748611190565b565b60608151835114610790576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078790612b61565b60405180910390fd5b6000835167ffffffffffffffff8111156107ad576107ac611fc7565b5b6040519080825280602002602001820160405280156107db5781602001602082028036833780820191505090505b50905060005b845181101561085857610828858281518110610800576107ff612b81565b5b602002602001015185838151811061081b5761081a612b81565b5b6020026020010151610398565b82828151811061083b5761083a612b81565b5b6020026020010181815250508061085190612bdf565b90506107e1565b508091505092915050565b6000600360149054906101000a900460ff16905090565b610882610baa565b61088c60006111f3565b565b610896610baa565b6108a2848484846112b9565b50505050565b6108b0610baa565b6108b8611469565b565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600580546108f190612a2c565b80601f016020809104026020016040519081016040528092919081815260200182805461091d90612a2c565b801561096a5780601f1061093f5761010080835404028352916020019161096a565b820191906000526020600020905b81548152906001019060200180831161094d57829003601f168201915b505050505081565b61098461097d610e67565b83836114cc565b5050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610a24610e67565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610a6a5750610a6985610a64610e67565b610988565b5b610aa9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa090612acf565b60405180910390fd5b610ab68585858585611638565b5050505050565b610ac5610baa565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610b34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2b90612c99565b60405180910390fd5b610b3d816111f3565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b610bb2610e67565b73ffffffffffffffffffffffffffffffffffffffff16610bd06108ba565b73ffffffffffffffffffffffffffffffffffffffff1614610c26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1d90612d05565b60405180910390fd5b565b8060029081610c379190612ed1565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610caa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca190613015565b60405180910390fd5b8151835114610cee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce5906130a7565b60405180910390fd5b6000610cf8610e67565b9050610d09816000878787876118d3565b60005b8451811015610dc257838181518110610d2857610d27612b81565b5b6020026020010151600080878481518110610d4657610d45612b81565b5b6020026020010151815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610da891906130c7565b925050819055508080610dba90612bdf565b915050610d0c565b508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051610e3a9291906130fb565b60405180910390a4610e51816000878787876118f1565b610e60816000878787876118f9565b5050505050565b600033905090565b8151835114610eb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eaa906130a7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610f22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f19906131a4565b60405180910390fd5b6000610f2c610e67565b9050610f3c8187878787876118d3565b60005b84518110156110ed576000858281518110610f5d57610f5c612b81565b5b602002602001015190506000858381518110610f7c57610f7b612b81565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561101d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101490613236565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546110d291906130c7565b92505081905550505050806110e690612bdf565b9050610f3f565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516111649291906130fb565b60405180910390a461117a8187878787876118f1565b6111888187878787876118f9565b505050505050565b611198611ad0565b6000600360146101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6111dc610e67565b6040516111e991906127e0565b60405180910390a1565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611328576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131f90613015565b60405180910390fd5b6000611332610e67565b9050600061133f85611b19565b9050600061134c85611b19565b905061135d836000898585896118d3565b8460008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546113bc91906130c7565b925050819055508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62898960405161143a929190613256565b60405180910390a4611451836000898585896118f1565b61146083600089898989611b93565b50505050505050565b611471611d6a565b6001600360146101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586114b5610e67565b6040516114c291906127e0565b60405180910390a1565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361153a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611531906132f1565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161162b9190611f91565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036116a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169e906131a4565b60405180910390fd5b60006116b1610e67565b905060006116be85611b19565b905060006116cb85611b19565b90506116db8389898585896118d3565b600080600088815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905085811015611772576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176990613236565b60405180910390fd5b85810360008089815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508560008089815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461182791906130c7565b925050819055508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628a8a6040516118a4929190613256565b60405180910390a46118ba848a8a86868a6118f1565b6118c8848a8a8a8a8a611b93565b505050505050505050565b6118db611d6a565b6118e9868686868686611db4565b505050505050565b505050505050565b6119188473ffffffffffffffffffffffffffffffffffffffff16611dbc565b15611ac8578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b815260040161195e959493929190613366565b6020604051808303816000875af192505050801561199a57506040513d601f19601f8201168201806040525081019061199791906133e3565b60015b611a3f576119a661341d565b806308c379a003611a0257506119ba61343f565b806119c55750611a04565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f991906121ba565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3690613541565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611ac6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611abd906135d3565b60405180910390fd5b505b505050505050565b611ad8610863565b611b17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0e9061363f565b60405180910390fd5b565b60606000600167ffffffffffffffff811115611b3857611b37611fc7565b5b604051908082528060200260200182016040528015611b665781602001602082028036833780820191505090505b5090508281600081518110611b7e57611b7d612b81565b5b60200260200101818152505080915050919050565b611bb28473ffffffffffffffffffffffffffffffffffffffff16611dbc565b15611d62578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401611bf895949392919061365f565b6020604051808303816000875af1925050508015611c3457506040513d601f19601f82011682018060405250810190611c3191906133e3565b60015b611cd957611c4061341d565b806308c379a003611c9c5750611c5461343f565b80611c5f5750611c9e565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9391906121ba565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd090613541565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611d60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d57906135d3565b60405180910390fd5b505b505050505050565b611d72610863565b15611db2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da990613705565b60405180910390fd5b565b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611e1e82611df3565b9050919050565b611e2e81611e13565b8114611e3957600080fd5b50565b600081359050611e4b81611e25565b92915050565b6000819050919050565b611e6481611e51565b8114611e6f57600080fd5b50565b600081359050611e8181611e5b565b92915050565b60008060408385031215611e9e57611e9d611de9565b5b6000611eac85828601611e3c565b9250506020611ebd85828601611e72565b9150509250929050565b611ed081611e51565b82525050565b6000602082019050611eeb6000830184611ec7565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b611f2681611ef1565b8114611f3157600080fd5b50565b600081359050611f4381611f1d565b92915050565b600060208284031215611f5f57611f5e611de9565b5b6000611f6d84828501611f34565b91505092915050565b60008115159050919050565b611f8b81611f76565b82525050565b6000602082019050611fa66000830184611f82565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611fff82611fb6565b810181811067ffffffffffffffff8211171561201e5761201d611fc7565b5b80604052505050565b6000612031611ddf565b905061203d8282611ff6565b919050565b600067ffffffffffffffff82111561205d5761205c611fc7565b5b61206682611fb6565b9050602081019050919050565b82818337600083830152505050565b600061209561209084612042565b612027565b9050828152602081018484840111156120b1576120b0611fb1565b5b6120bc848285612073565b509392505050565b600082601f8301126120d9576120d8611fac565b5b81356120e9848260208601612082565b91505092915050565b60006020828403121561210857612107611de9565b5b600082013567ffffffffffffffff81111561212657612125611dee565b5b612132848285016120c4565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561217557808201518184015260208101905061215a565b60008484015250505050565b600061218c8261213b565b6121968185612146565b93506121a6818560208601612157565b6121af81611fb6565b840191505092915050565b600060208201905081810360008301526121d48184612181565b905092915050565b6000602082840312156121f2576121f1611de9565b5b600061220084828501611e72565b91505092915050565b600067ffffffffffffffff82111561222457612223611fc7565b5b602082029050602081019050919050565b600080fd5b600061224d61224884612209565b612027565b905080838252602082019050602084028301858111156122705761226f612235565b5b835b8181101561229957806122858882611e72565b845260208401935050602081019050612272565b5050509392505050565b600082601f8301126122b8576122b7611fac565b5b81356122c884826020860161223a565b91505092915050565b600067ffffffffffffffff8211156122ec576122eb611fc7565b5b6122f582611fb6565b9050602081019050919050565b6000612315612310846122d1565b612027565b90508281526020810184848401111561233157612330611fb1565b5b61233c848285612073565b509392505050565b600082601f83011261235957612358611fac565b5b8135612369848260208601612302565b91505092915050565b6000806000806080858703121561238c5761238b611de9565b5b600061239a87828801611e3c565b945050602085013567ffffffffffffffff8111156123bb576123ba611dee565b5b6123c7878288016122a3565b935050604085013567ffffffffffffffff8111156123e8576123e7611dee565b5b6123f4878288016122a3565b925050606085013567ffffffffffffffff81111561241557612414611dee565b5b61242187828801612344565b91505092959194509250565b600080600080600060a0868803121561244957612448611de9565b5b600061245788828901611e3c565b955050602061246888828901611e3c565b945050604086013567ffffffffffffffff81111561248957612488611dee565b5b612495888289016122a3565b935050606086013567ffffffffffffffff8111156124b6576124b5611dee565b5b6124c2888289016122a3565b925050608086013567ffffffffffffffff8111156124e3576124e2611dee565b5b6124ef88828901612344565b9150509295509295909350565b600060ff82169050919050565b612512816124fc565b82525050565b600060208201905061252d6000830184612509565b92915050565b600067ffffffffffffffff82111561254e5761254d611fc7565b5b602082029050602081019050919050565b600061257261256d84612533565b612027565b9050808382526020820190506020840283018581111561259557612594612235565b5b835b818110156125be57806125aa8882611e3c565b845260208401935050602081019050612597565b5050509392505050565b600082601f8301126125dd576125dc611fac565b5b81356125ed84826020860161255f565b91505092915050565b6000806040838503121561260d5761260c611de9565b5b600083013567ffffffffffffffff81111561262b5761262a611dee565b5b612637858286016125c8565b925050602083013567ffffffffffffffff81111561265857612657611dee565b5b612664858286016122a3565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6126a381611e51565b82525050565b60006126b5838361269a565b60208301905092915050565b6000602082019050919050565b60006126d98261266e565b6126e38185612679565b93506126ee8361268a565b8060005b8381101561271f57815161270688826126a9565b9750612711836126c1565b9250506001810190506126f2565b5085935050505092915050565b6000602082019050818103600083015261274681846126ce565b905092915050565b6000806000806080858703121561276857612767611de9565b5b600061277687828801611e3c565b945050602061278787828801611e72565b935050604061279887828801611e72565b925050606085013567ffffffffffffffff8111156127b9576127b8611dee565b5b6127c587828801612344565b91505092959194509250565b6127da81611e13565b82525050565b60006020820190506127f560008301846127d1565b92915050565b61280481611f76565b811461280f57600080fd5b50565b600081359050612821816127fb565b92915050565b6000806040838503121561283e5761283d611de9565b5b600061284c85828601611e3c565b925050602061285d85828601612812565b9150509250929050565b6000806040838503121561287e5761287d611de9565b5b600061288c85828601611e3c565b925050602061289d85828601611e3c565b9150509250929050565b600080600080600060a086880312156128c3576128c2611de9565b5b60006128d188828901611e3c565b95505060206128e288828901611e3c565b94505060406128f388828901611e72565b935050606061290488828901611e72565b925050608086013567ffffffffffffffff81111561292557612924611dee565b5b61293188828901612344565b9150509295509295909350565b60006020828403121561295457612953611de9565b5b600061296284828501611e3c565b91505092915050565b7f455243313135353a2061646472657373207a65726f206973206e6f742061207660008201527f616c6964206f776e657200000000000000000000000000000000000000000000602082015250565b60006129c7602a83612146565b91506129d28261296b565b604082019050919050565b600060208201905081810360008301526129f6816129ba565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612a4457607f821691505b602082108103612a5757612a566129fd565b5b50919050565b7f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60008201527f6572206f7220617070726f766564000000000000000000000000000000000000602082015250565b6000612ab9602e83612146565b9150612ac482612a5d565b604082019050919050565b60006020820190508181036000830152612ae881612aac565b9050919050565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b6000612b4b602983612146565b9150612b5682612aef565b604082019050919050565b60006020820190508181036000830152612b7a81612b3e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612bea82611e51565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612c1c57612c1b612bb0565b5b600182019050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612c83602683612146565b9150612c8e82612c27565b604082019050919050565b60006020820190508181036000830152612cb281612c76565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612cef602083612146565b9150612cfa82612cb9565b602082019050919050565b60006020820190508181036000830152612d1e81612ce2565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302612d877fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82612d4a565b612d918683612d4a565b95508019841693508086168417925050509392505050565b6000819050919050565b6000612dce612dc9612dc484611e51565b612da9565b611e51565b9050919050565b6000819050919050565b612de883612db3565b612dfc612df482612dd5565b848454612d57565b825550505050565b600090565b612e11612e04565b612e1c818484612ddf565b505050565b5b81811015612e4057612e35600082612e09565b600181019050612e22565b5050565b601f821115612e8557612e5681612d25565b612e5f84612d3a565b81016020851015612e6e578190505b612e82612e7a85612d3a565b830182612e21565b50505b505050565b600082821c905092915050565b6000612ea860001984600802612e8a565b1980831691505092915050565b6000612ec18383612e97565b9150826002028217905092915050565b612eda8261213b565b67ffffffffffffffff811115612ef357612ef2611fc7565b5b612efd8254612a2c565b612f08828285612e44565b600060209050601f831160018114612f3b5760008415612f29578287015190505b612f338582612eb5565b865550612f9b565b601f198416612f4986612d25565b60005b82811015612f7157848901518255600182019150602085019450602081019050612f4c565b86831015612f8e5784890151612f8a601f891682612e97565b8355505b6001600288020188555050505b505050505050565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000612fff602183612146565b915061300a82612fa3565b604082019050919050565b6000602082019050818103600083015261302e81612ff2565b9050919050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b6000613091602883612146565b915061309c82613035565b604082019050919050565b600060208201905081810360008301526130c081613084565b9050919050565b60006130d282611e51565b91506130dd83611e51565b92508282019050808211156130f5576130f4612bb0565b5b92915050565b6000604082019050818103600083015261311581856126ce565b9050818103602083015261312981846126ce565b90509392505050565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061318e602583612146565b915061319982613132565b604082019050919050565b600060208201905081810360008301526131bd81613181565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b6000613220602a83612146565b915061322b826131c4565b604082019050919050565b6000602082019050818103600083015261324f81613213565b9050919050565b600060408201905061326b6000830185611ec7565b6132786020830184611ec7565b9392505050565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b60006132db602983612146565b91506132e68261327f565b604082019050919050565b6000602082019050818103600083015261330a816132ce565b9050919050565b600081519050919050565b600082825260208201905092915050565b600061333882613311565b613342818561331c565b9350613352818560208601612157565b61335b81611fb6565b840191505092915050565b600060a08201905061337b60008301886127d1565b61338860208301876127d1565b818103604083015261339a81866126ce565b905081810360608301526133ae81856126ce565b905081810360808301526133c2818461332d565b90509695505050505050565b6000815190506133dd81611f1d565b92915050565b6000602082840312156133f9576133f8611de9565b5b6000613407848285016133ce565b91505092915050565b60008160e01c9050919050565b600060033d111561343c5760046000803e613439600051613410565b90505b90565b600060443d106134cc57613451611ddf565b60043d036004823e80513d602482011167ffffffffffffffff821117156134795750506134cc565b808201805167ffffffffffffffff81111561349757505050506134cc565b80602083010160043d0385018111156134b45750505050506134cc565b6134c382602001850186611ff6565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e2d4552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b600061352b603483612146565b9150613536826134cf565b604082019050919050565b6000602082019050818103600083015261355a8161351e565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b60006135bd602883612146565b91506135c882613561565b604082019050919050565b600060208201905081810360008301526135ec816135b0565b9050919050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b6000613629601483612146565b9150613634826135f3565b602082019050919050565b600060208201905081810360008301526136588161361c565b9050919050565b600060a08201905061367460008301886127d1565b61368160208301876127d1565b61368e6040830186611ec7565b61369b6060830185611ec7565b81810360808301526136ad818461332d565b90509695505050505050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b60006136ef601083612146565b91506136fa826136b9565b602082019050919050565b6000602082019050818103600083015261371e816136e2565b905091905056fea2646970667358221220bce116882f9ac7c7b7e91c43fe2bfaa6ff2c7aba5726a333099f47ee7f33617464736f6c63430008110033

Deployed ByteCode Sourcemap

42745:1136:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27154:230;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26177:310;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42973:89;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42885:42;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26898:105;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43389:191;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29097:438;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42843:35;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43139:65;;;:::i;:::-;;27550:524;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2566:86;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5431:103;;;:::i;:::-;;43212:169;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43070:61;;;:::i;:::-;;4783:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42934:30;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28147:155;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28374:168;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28614:406;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5689:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27154:230;27240:7;27287:1;27268:21;;:7;:21;;;27260:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;27354:9;:13;27364:2;27354:13;;;;;;;;;;;:22;27368:7;27354:22;;;;;;;;;;;;;;;;27347:29;;27154:230;;;;:::o;26177:310::-;26279:4;26331:26;26316:41;;;:11;:41;;;;:110;;;;26389:37;26374:52;;;:11;:52;;;;26316:110;:163;;;;26443:36;26467:11;26443:23;:36::i;:::-;26316:163;26296:183;;26177:310;;;:::o;42973:89::-;4669:13;:11;:13::i;:::-;43039:15:::1;43047:6;43039:7;:15::i;:::-;42973:89:::0;:::o;42885:42::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;26898:105::-;26958:13;26991:4;26984:11;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26898:105;;;:::o;43389:191::-;4669:13;:11;:13::i;:::-;43538:34:::1;43549:2;43553:3;43558:7;43567:4;43538:10;:34::i;:::-;43389:191:::0;;;;:::o;29097:438::-;29338:12;:10;:12::i;:::-;29330:20;;:4;:20;;;:60;;;;29354:36;29371:4;29377:12;:10;:12::i;:::-;29354:16;:36::i;:::-;29330:60;29308:156;;;;;;;;;;;;:::i;:::-;;;;;;;;;29475:52;29498:4;29504:2;29508:3;29513:7;29522:4;29475:22;:52::i;:::-;29097:438;;;;;:::o;42843:35::-;42877:1;42843:35;:::o;43139:65::-;4669:13;:11;:13::i;:::-;43186:10:::1;:8;:10::i;:::-;43139:65::o:0;27550:524::-;27706:16;27767:3;:10;27748:8;:15;:29;27740:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;27836:30;27883:8;:15;27869:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27836:63;;27917:9;27912:122;27936:8;:15;27932:1;:19;27912:122;;;27992:30;28002:8;28011:1;28002:11;;;;;;;;:::i;:::-;;;;;;;;28015:3;28019:1;28015:6;;;;;;;;:::i;:::-;;;;;;;;27992:9;:30::i;:::-;27973:13;27987:1;27973:16;;;;;;;;:::i;:::-;;;;;;;:49;;;;;27953:3;;;;:::i;:::-;;;27912:122;;;;28053:13;28046:20;;;27550:524;;;;:::o;2566:86::-;2613:4;2637:7;;;;;;;;;;;2630:14;;2566:86;:::o;5431:103::-;4669:13;:11;:13::i;:::-;5496:30:::1;5523:1;5496:18;:30::i;:::-;5431:103::o:0;43212:169::-;4669:13;:11;:13::i;:::-;43341:32:::1;43347:7;43356:2;43360:6;43368:4;43341:5;:32::i;:::-;43212:169:::0;;;;:::o;43070:61::-;4669:13;:11;:13::i;:::-;43115:8:::1;:6;:8::i;:::-;43070:61::o:0;4783:87::-;4829:7;4856:6;;;;;;;;;;;4849:13;;4783:87;:::o;42934:30::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;28147:155::-;28242:52;28261:12;:10;:12::i;:::-;28275:8;28285;28242:18;:52::i;:::-;28147:155;;:::o;28374:168::-;28473:4;28497:18;:27;28516:7;28497:27;;;;;;;;;;;;;;;:37;28525:8;28497:37;;;;;;;;;;;;;;;;;;;;;;;;;28490:44;;28374:168;;;;:::o;28614:406::-;28830:12;:10;:12::i;:::-;28822:20;;:4;:20;;;:60;;;;28846:36;28863:4;28869:12;:10;:12::i;:::-;28846:16;:36::i;:::-;28822:60;28800:156;;;;;;;;;;;;:::i;:::-;;;;;;;;;28967:45;28985:4;28991:2;28995;28999:6;29007:4;28967:17;:45::i;:::-;28614:406;;;;;:::o;5689:201::-;4669:13;:11;:13::i;:::-;5798:1:::1;5778:22;;:8;:22;;::::0;5770:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;5854:28;5873:8;5854:18;:28::i;:::-;5689:201:::0;:::o;17458:157::-;17543:4;17582:25;17567:40;;;:11;:40;;;;17560:47;;17458:157;;;:::o;4948:132::-;5023:12;:10;:12::i;:::-;5012:23;;:7;:5;:7::i;:::-;:23;;;5004:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4948:132::o;33321:88::-;33395:6;33388:4;:13;;;;;;:::i;:::-;;33321:88;:::o;34927:813::-;35119:1;35105:16;;:2;:16;;;35097:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;35192:7;:14;35178:3;:10;:28;35170:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;35264:16;35283:12;:10;:12::i;:::-;35264:31;;35308:66;35329:8;35347:1;35351:2;35355:3;35360:7;35369:4;35308:20;:66::i;:::-;35392:9;35387:103;35411:3;:10;35407:1;:14;35387:103;;;35468:7;35476:1;35468:10;;;;;;;;:::i;:::-;;;;;;;;35443:9;:17;35453:3;35457:1;35453:6;;;;;;;;:::i;:::-;;;;;;;;35443:17;;;;;;;;;;;:21;35461:2;35443:21;;;;;;;;;;;;;;;;:35;;;;;;;:::i;:::-;;;;;;;;35423:3;;;;;:::i;:::-;;;;35387:103;;;;35543:2;35507:53;;35539:1;35507:53;;35521:8;35507:53;;;35547:3;35552:7;35507:53;;;;;;;:::i;:::-;;;;;;;;35573:65;35593:8;35611:1;35615:2;35619:3;35624:7;35633:4;35573:19;:65::i;:::-;35651:81;35687:8;35705:1;35709:2;35713:3;35718:7;35727:4;35651:35;:81::i;:::-;35086:654;34927:813;;;;:::o;679:98::-;732:7;759:10;752:17;;679:98;:::o;31331:1146::-;31558:7;:14;31544:3;:10;:28;31536:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;31650:1;31636:16;;:2;:16;;;31628:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;31707:16;31726:12;:10;:12::i;:::-;31707:31;;31751:60;31772:8;31782:4;31788:2;31792:3;31797:7;31806:4;31751:20;:60::i;:::-;31829:9;31824:421;31848:3;:10;31844:1;:14;31824:421;;;31880:10;31893:3;31897:1;31893:6;;;;;;;;:::i;:::-;;;;;;;;31880:19;;31914:14;31931:7;31939:1;31931:10;;;;;;;;:::i;:::-;;;;;;;;31914:27;;31958:19;31980:9;:13;31990:2;31980:13;;;;;;;;;;;:19;31994:4;31980:19;;;;;;;;;;;;;;;;31958:41;;32037:6;32022:11;:21;;32014:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;32170:6;32156:11;:20;32134:9;:13;32144:2;32134:13;;;;;;;;;;;:19;32148:4;32134:19;;;;;;;;;;;;;;;:42;;;;32227:6;32206:9;:13;32216:2;32206:13;;;;;;;;;;;:17;32220:2;32206:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;31865:380;;;31860:3;;;;:::i;:::-;;;31824:421;;;;32292:2;32262:47;;32286:4;32262:47;;32276:8;32262:47;;;32296:3;32301:7;32262:47;;;;;;;:::i;:::-;;;;;;;;32322:59;32342:8;32352:4;32358:2;32362:3;32367:7;32376:4;32322:19;:59::i;:::-;32394:75;32430:8;32440:4;32446:2;32450:3;32455:7;32464:4;32394:35;:75::i;:::-;31525:952;31331:1146;;;;;:::o;3421:120::-;2430:16;:14;:16::i;:::-;3490:5:::1;3480:7;;:15;;;;;;;;;;;;;;;;;;3511:22;3520:12;:10;:12::i;:::-;3511:22;;;;;;:::i;:::-;;;;;;;;3421:120::o:0;6050:191::-;6124:16;6143:6;;;;;;;;;;;6124:25;;6169:8;6160:6;;:17;;;;;;;;;;;;;;;;;;6224:8;6193:40;;6214:8;6193:40;;;;;;;;;;;;6113:128;6050:191;:::o;33795:729::-;33962:1;33948:16;;:2;:16;;;33940:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;34015:16;34034:12;:10;:12::i;:::-;34015:31;;34057:20;34080:21;34098:2;34080:17;:21::i;:::-;34057:44;;34112:24;34139:25;34157:6;34139:17;:25::i;:::-;34112:52;;34177:66;34198:8;34216:1;34220:2;34224:3;34229:7;34238:4;34177:20;:66::i;:::-;34277:6;34256:9;:13;34266:2;34256:13;;;;;;;;;;;:17;34270:2;34256:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;34336:2;34299:52;;34332:1;34299:52;;34314:8;34299:52;;;34340:2;34344:6;34299:52;;;;;;;:::i;:::-;;;;;;;;34364:65;34384:8;34402:1;34406:2;34410:3;34415:7;34424:4;34364:19;:65::i;:::-;34442:74;34473:8;34491:1;34495:2;34499;34503:6;34511:4;34442:30;:74::i;:::-;33929:595;;;33795:729;;;;:::o;3162:118::-;2171:19;:17;:19::i;:::-;3232:4:::1;3222:7;;:14;;;;;;;;;;;;;;;;;;3252:20;3259:12;:10;:12::i;:::-;3252:20;;;;;;:::i;:::-;;;;;;;;3162:118::o:0;38208:331::-;38363:8;38354:17;;:5;:17;;;38346:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;38466:8;38428:18;:25;38447:5;38428:25;;;;;;;;;;;;;;;:35;38454:8;38428:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;38512:8;38490:41;;38505:5;38490:41;;;38522:8;38490:41;;;;;;:::i;:::-;;;;;;;;38208:331;;;:::o;29999:974::-;30201:1;30187:16;;:2;:16;;;30179:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;30258:16;30277:12;:10;:12::i;:::-;30258:31;;30300:20;30323:21;30341:2;30323:17;:21::i;:::-;30300:44;;30355:24;30382:25;30400:6;30382:17;:25::i;:::-;30355:52;;30420:60;30441:8;30451:4;30457:2;30461:3;30466:7;30475:4;30420:20;:60::i;:::-;30493:19;30515:9;:13;30525:2;30515:13;;;;;;;;;;;:19;30529:4;30515:19;;;;;;;;;;;;;;;;30493:41;;30568:6;30553:11;:21;;30545:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;30693:6;30679:11;:20;30657:9;:13;30667:2;30657:13;;;;;;;;;;;:19;30671:4;30657:19;;;;;;;;;;;;;;;:42;;;;30742:6;30721:9;:13;30731:2;30721:13;;;;;;;;;;;:17;30735:2;30721:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;30797:2;30766:46;;30791:4;30766:46;;30781:8;30766:46;;;30801:2;30805:6;30766:46;;;;;;;:::i;:::-;;;;;;;;30825:59;30845:8;30855:4;30861:2;30865:3;30870:7;30879:4;30825:19;:59::i;:::-;30897:68;30928:8;30938:4;30944:2;30948;30952:6;30960:4;30897:30;:68::i;:::-;30168:805;;;;29999:974;;;;;:::o;43588:290::-;2171:19;:17;:19::i;:::-;43804:66:::1;43831:8;43841:4;43847:2;43851:3;43856:7;43865:4;43804:26;:66::i;:::-;43588:290:::0;;;;;;:::o;40673:220::-;;;;;;;:::o;41653:813::-;41893:15;:2;:13;;;:15::i;:::-;41889:570;;;41946:2;41929:43;;;41973:8;41983:4;41989:3;41994:7;42003:4;41929:79;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;41925:523;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;42321:6;42314:14;;;;;;;;;;;:::i;:::-;;;;;;;;41925:523;;;42370:62;;;;;;;;;;:::i;:::-;;;;;;;;41925:523;42102:48;;;42090:60;;;:8;:60;;;;42086:159;;42175:50;;;;;;;;;;:::i;:::-;;;;;;;;42086:159;42009:251;41889:570;41653:813;;;;;;:::o;2910:108::-;2977:8;:6;:8::i;:::-;2969:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;2910:108::o;42474:198::-;42540:16;42569:22;42608:1;42594:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42569:41;;42632:7;42621:5;42627:1;42621:8;;;;;;;;:::i;:::-;;;;;;;:18;;;;;42659:5;42652:12;;;42474:198;;;:::o;40901:744::-;41116:15;:2;:13;;;:15::i;:::-;41112:526;;;41169:2;41152:38;;;41191:8;41201:4;41207:2;41211:6;41219:4;41152:72;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;41148:479;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;41500:6;41493:14;;;;;;;;;;;:::i;:::-;;;;;;;;41148:479;;;41549:62;;;;;;;;;;:::i;:::-;;;;;;;;41148:479;41286:43;;;41274:55;;;:8;:55;;;;41270:154;;41354:50;;;;;;;;;;:::i;:::-;;;;;;;;41270:154;41225:214;41112:526;40901:744;;;;;;:::o;2725:108::-;2796:8;:6;:8::i;:::-;2795:9;2787:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;2725:108::o;39497:221::-;;;;;;;:::o;7481:326::-;7541:4;7798:1;7776:7;:19;;;:23;7769:30;;7481:326;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:77::-;878:7;907:5;896:16;;841:77;;;:::o;924:122::-;997:24;1015:5;997:24;:::i;:::-;990:5;987:35;977:63;;1036:1;1033;1026:12;977:63;924:122;:::o;1052:139::-;1098:5;1136:6;1123:20;1114:29;;1152:33;1179:5;1152:33;:::i;:::-;1052:139;;;;:::o;1197:474::-;1265:6;1273;1322:2;1310:9;1301:7;1297:23;1293:32;1290:119;;;1328:79;;:::i;:::-;1290:119;1448:1;1473:53;1518:7;1509:6;1498:9;1494:22;1473:53;:::i;:::-;1463:63;;1419:117;1575:2;1601:53;1646:7;1637:6;1626:9;1622:22;1601:53;:::i;:::-;1591:63;;1546:118;1197:474;;;;;:::o;1677:118::-;1764:24;1782:5;1764:24;:::i;:::-;1759:3;1752:37;1677:118;;:::o;1801:222::-;1894:4;1932:2;1921:9;1917:18;1909:26;;1945:71;2013:1;2002:9;1998:17;1989:6;1945:71;:::i;:::-;1801:222;;;;:::o;2029:149::-;2065:7;2105:66;2098:5;2094:78;2083:89;;2029:149;;;:::o;2184:120::-;2256:23;2273:5;2256:23;:::i;:::-;2249:5;2246:34;2236:62;;2294:1;2291;2284:12;2236:62;2184:120;:::o;2310:137::-;2355:5;2393:6;2380:20;2371:29;;2409:32;2435:5;2409:32;:::i;:::-;2310:137;;;;:::o;2453:327::-;2511:6;2560:2;2548:9;2539:7;2535:23;2531:32;2528:119;;;2566:79;;:::i;:::-;2528:119;2686:1;2711:52;2755:7;2746:6;2735:9;2731:22;2711:52;:::i;:::-;2701:62;;2657:116;2453:327;;;;:::o;2786:90::-;2820:7;2863:5;2856:13;2849:21;2838:32;;2786:90;;;:::o;2882:109::-;2963:21;2978:5;2963:21;:::i;:::-;2958:3;2951:34;2882:109;;:::o;2997:210::-;3084:4;3122:2;3111:9;3107:18;3099:26;;3135:65;3197:1;3186:9;3182:17;3173:6;3135:65;:::i;:::-;2997:210;;;;:::o;3213:117::-;3322:1;3319;3312:12;3336:117;3445:1;3442;3435:12;3459:102;3500:6;3551:2;3547:7;3542:2;3535:5;3531:14;3527:28;3517:38;;3459:102;;;:::o;3567:180::-;3615:77;3612:1;3605:88;3712:4;3709:1;3702:15;3736:4;3733:1;3726:15;3753:281;3836:27;3858:4;3836:27;:::i;:::-;3828:6;3824:40;3966:6;3954:10;3951:22;3930:18;3918:10;3915:34;3912:62;3909:88;;;3977:18;;:::i;:::-;3909:88;4017:10;4013:2;4006:22;3796:238;3753:281;;:::o;4040:129::-;4074:6;4101:20;;:::i;:::-;4091:30;;4130:33;4158:4;4150:6;4130:33;:::i;:::-;4040:129;;;:::o;4175:308::-;4237:4;4327:18;4319:6;4316:30;4313:56;;;4349:18;;:::i;:::-;4313:56;4387:29;4409:6;4387:29;:::i;:::-;4379:37;;4471:4;4465;4461:15;4453:23;;4175:308;;;:::o;4489:146::-;4586:6;4581:3;4576;4563:30;4627:1;4618:6;4613:3;4609:16;4602:27;4489:146;;;:::o;4641:425::-;4719:5;4744:66;4760:49;4802:6;4760:49;:::i;:::-;4744:66;:::i;:::-;4735:75;;4833:6;4826:5;4819:21;4871:4;4864:5;4860:16;4909:3;4900:6;4895:3;4891:16;4888:25;4885:112;;;4916:79;;:::i;:::-;4885:112;5006:54;5053:6;5048:3;5043;5006:54;:::i;:::-;4725:341;4641:425;;;;;:::o;5086:340::-;5142:5;5191:3;5184:4;5176:6;5172:17;5168:27;5158:122;;5199:79;;:::i;:::-;5158:122;5316:6;5303:20;5341:79;5416:3;5408:6;5401:4;5393:6;5389:17;5341:79;:::i;:::-;5332:88;;5148:278;5086:340;;;;:::o;5432:509::-;5501:6;5550:2;5538:9;5529:7;5525:23;5521:32;5518:119;;;5556:79;;:::i;:::-;5518:119;5704:1;5693:9;5689:17;5676:31;5734:18;5726:6;5723:30;5720:117;;;5756:79;;:::i;:::-;5720:117;5861:63;5916:7;5907:6;5896:9;5892:22;5861:63;:::i;:::-;5851:73;;5647:287;5432:509;;;;:::o;5947:99::-;5999:6;6033:5;6027:12;6017:22;;5947:99;;;:::o;6052:169::-;6136:11;6170:6;6165:3;6158:19;6210:4;6205:3;6201:14;6186:29;;6052:169;;;;:::o;6227:246::-;6308:1;6318:113;6332:6;6329:1;6326:13;6318:113;;;6417:1;6412:3;6408:11;6402:18;6398:1;6393:3;6389:11;6382:39;6354:2;6351:1;6347:10;6342:15;;6318:113;;;6465:1;6456:6;6451:3;6447:16;6440:27;6289:184;6227:246;;;:::o;6479:377::-;6567:3;6595:39;6628:5;6595:39;:::i;:::-;6650:71;6714:6;6709:3;6650:71;:::i;:::-;6643:78;;6730:65;6788:6;6783:3;6776:4;6769:5;6765:16;6730:65;:::i;:::-;6820:29;6842:6;6820:29;:::i;:::-;6815:3;6811:39;6804:46;;6571:285;6479:377;;;;:::o;6862:313::-;6975:4;7013:2;7002:9;6998:18;6990:26;;7062:9;7056:4;7052:20;7048:1;7037:9;7033:17;7026:47;7090:78;7163:4;7154:6;7090:78;:::i;:::-;7082:86;;6862:313;;;;:::o;7181:329::-;7240:6;7289:2;7277:9;7268:7;7264:23;7260:32;7257:119;;;7295:79;;:::i;:::-;7257:119;7415:1;7440:53;7485:7;7476:6;7465:9;7461:22;7440:53;:::i;:::-;7430:63;;7386:117;7181:329;;;;:::o;7516:311::-;7593:4;7683:18;7675:6;7672:30;7669:56;;;7705:18;;:::i;:::-;7669:56;7755:4;7747:6;7743:17;7735:25;;7815:4;7809;7805:15;7797:23;;7516:311;;;:::o;7833:117::-;7942:1;7939;7932:12;7973:710;8069:5;8094:81;8110:64;8167:6;8110:64;:::i;:::-;8094:81;:::i;:::-;8085:90;;8195:5;8224:6;8217:5;8210:21;8258:4;8251:5;8247:16;8240:23;;8311:4;8303:6;8299:17;8291:6;8287:30;8340:3;8332:6;8329:15;8326:122;;;8359:79;;:::i;:::-;8326:122;8474:6;8457:220;8491:6;8486:3;8483:15;8457:220;;;8566:3;8595:37;8628:3;8616:10;8595:37;:::i;:::-;8590:3;8583:50;8662:4;8657:3;8653:14;8646:21;;8533:144;8517:4;8512:3;8508:14;8501:21;;8457:220;;;8461:21;8075:608;;7973:710;;;;;:::o;8706:370::-;8777:5;8826:3;8819:4;8811:6;8807:17;8803:27;8793:122;;8834:79;;:::i;:::-;8793:122;8951:6;8938:20;8976:94;9066:3;9058:6;9051:4;9043:6;9039:17;8976:94;:::i;:::-;8967:103;;8783:293;8706:370;;;;:::o;9082:307::-;9143:4;9233:18;9225:6;9222:30;9219:56;;;9255:18;;:::i;:::-;9219:56;9293:29;9315:6;9293:29;:::i;:::-;9285:37;;9377:4;9371;9367:15;9359:23;;9082:307;;;:::o;9395:423::-;9472:5;9497:65;9513:48;9554:6;9513:48;:::i;:::-;9497:65;:::i;:::-;9488:74;;9585:6;9578:5;9571:21;9623:4;9616:5;9612:16;9661:3;9652:6;9647:3;9643:16;9640:25;9637:112;;;9668:79;;:::i;:::-;9637:112;9758:54;9805:6;9800:3;9795;9758:54;:::i;:::-;9478:340;9395:423;;;;;:::o;9837:338::-;9892:5;9941:3;9934:4;9926:6;9922:17;9918:27;9908:122;;9949:79;;:::i;:::-;9908:122;10066:6;10053:20;10091:78;10165:3;10157:6;10150:4;10142:6;10138:17;10091:78;:::i;:::-;10082:87;;9898:277;9837:338;;;;:::o;10181:1363::-;10326:6;10334;10342;10350;10399:3;10387:9;10378:7;10374:23;10370:33;10367:120;;;10406:79;;:::i;:::-;10367:120;10526:1;10551:53;10596:7;10587:6;10576:9;10572:22;10551:53;:::i;:::-;10541:63;;10497:117;10681:2;10670:9;10666:18;10653:32;10712:18;10704:6;10701:30;10698:117;;;10734:79;;:::i;:::-;10698:117;10839:78;10909:7;10900:6;10889:9;10885:22;10839:78;:::i;:::-;10829:88;;10624:303;10994:2;10983:9;10979:18;10966:32;11025:18;11017:6;11014:30;11011:117;;;11047:79;;:::i;:::-;11011:117;11152:78;11222:7;11213:6;11202:9;11198:22;11152:78;:::i;:::-;11142:88;;10937:303;11307:2;11296:9;11292:18;11279:32;11338:18;11330:6;11327:30;11324:117;;;11360:79;;:::i;:::-;11324:117;11465:62;11519:7;11510:6;11499:9;11495:22;11465:62;:::i;:::-;11455:72;;11250:287;10181:1363;;;;;;;:::o;11550:1509::-;11704:6;11712;11720;11728;11736;11785:3;11773:9;11764:7;11760:23;11756:33;11753:120;;;11792:79;;:::i;:::-;11753:120;11912:1;11937:53;11982:7;11973:6;11962:9;11958:22;11937:53;:::i;:::-;11927:63;;11883:117;12039:2;12065:53;12110:7;12101:6;12090:9;12086:22;12065:53;:::i;:::-;12055:63;;12010:118;12195:2;12184:9;12180:18;12167:32;12226:18;12218:6;12215:30;12212:117;;;12248:79;;:::i;:::-;12212:117;12353:78;12423:7;12414:6;12403:9;12399:22;12353:78;:::i;:::-;12343:88;;12138:303;12508:2;12497:9;12493:18;12480:32;12539:18;12531:6;12528:30;12525:117;;;12561:79;;:::i;:::-;12525:117;12666:78;12736:7;12727:6;12716:9;12712:22;12666:78;:::i;:::-;12656:88;;12451:303;12821:3;12810:9;12806:19;12793:33;12853:18;12845:6;12842:30;12839:117;;;12875:79;;:::i;:::-;12839:117;12980:62;13034:7;13025:6;13014:9;13010:22;12980:62;:::i;:::-;12970:72;;12764:288;11550:1509;;;;;;;;:::o;13065:86::-;13100:7;13140:4;13133:5;13129:16;13118:27;;13065:86;;;:::o;13157:112::-;13240:22;13256:5;13240:22;:::i;:::-;13235:3;13228:35;13157:112;;:::o;13275:214::-;13364:4;13402:2;13391:9;13387:18;13379:26;;13415:67;13479:1;13468:9;13464:17;13455:6;13415:67;:::i;:::-;13275:214;;;;:::o;13495:311::-;13572:4;13662:18;13654:6;13651:30;13648:56;;;13684:18;;:::i;:::-;13648:56;13734:4;13726:6;13722:17;13714:25;;13794:4;13788;13784:15;13776:23;;13495:311;;;:::o;13829:710::-;13925:5;13950:81;13966:64;14023:6;13966:64;:::i;:::-;13950:81;:::i;:::-;13941:90;;14051:5;14080:6;14073:5;14066:21;14114:4;14107:5;14103:16;14096:23;;14167:4;14159:6;14155:17;14147:6;14143:30;14196:3;14188:6;14185:15;14182:122;;;14215:79;;:::i;:::-;14182:122;14330:6;14313:220;14347:6;14342:3;14339:15;14313:220;;;14422:3;14451:37;14484:3;14472:10;14451:37;:::i;:::-;14446:3;14439:50;14518:4;14513:3;14509:14;14502:21;;14389:144;14373:4;14368:3;14364:14;14357:21;;14313:220;;;14317:21;13931:608;;13829:710;;;;;:::o;14562:370::-;14633:5;14682:3;14675:4;14667:6;14663:17;14659:27;14649:122;;14690:79;;:::i;:::-;14649:122;14807:6;14794:20;14832:94;14922:3;14914:6;14907:4;14899:6;14895:17;14832:94;:::i;:::-;14823:103;;14639:293;14562:370;;;;:::o;14938:894::-;15056:6;15064;15113:2;15101:9;15092:7;15088:23;15084:32;15081:119;;;15119:79;;:::i;:::-;15081:119;15267:1;15256:9;15252:17;15239:31;15297:18;15289:6;15286:30;15283:117;;;15319:79;;:::i;:::-;15283:117;15424:78;15494:7;15485:6;15474:9;15470:22;15424:78;:::i;:::-;15414:88;;15210:302;15579:2;15568:9;15564:18;15551:32;15610:18;15602:6;15599:30;15596:117;;;15632:79;;:::i;:::-;15596:117;15737:78;15807:7;15798:6;15787:9;15783:22;15737:78;:::i;:::-;15727:88;;15522:303;14938:894;;;;;:::o;15838:114::-;15905:6;15939:5;15933:12;15923:22;;15838:114;;;:::o;15958:184::-;16057:11;16091:6;16086:3;16079:19;16131:4;16126:3;16122:14;16107:29;;15958:184;;;;:::o;16148:132::-;16215:4;16238:3;16230:11;;16268:4;16263:3;16259:14;16251:22;;16148:132;;;:::o;16286:108::-;16363:24;16381:5;16363:24;:::i;:::-;16358:3;16351:37;16286:108;;:::o;16400:179::-;16469:10;16490:46;16532:3;16524:6;16490:46;:::i;:::-;16568:4;16563:3;16559:14;16545:28;;16400:179;;;;:::o;16585:113::-;16655:4;16687;16682:3;16678:14;16670:22;;16585:113;;;:::o;16734:732::-;16853:3;16882:54;16930:5;16882:54;:::i;:::-;16952:86;17031:6;17026:3;16952:86;:::i;:::-;16945:93;;17062:56;17112:5;17062:56;:::i;:::-;17141:7;17172:1;17157:284;17182:6;17179:1;17176:13;17157:284;;;17258:6;17252:13;17285:63;17344:3;17329:13;17285:63;:::i;:::-;17278:70;;17371:60;17424:6;17371:60;:::i;:::-;17361:70;;17217:224;17204:1;17201;17197:9;17192:14;;17157:284;;;17161:14;17457:3;17450:10;;16858:608;;;16734:732;;;;:::o;17472:373::-;17615:4;17653:2;17642:9;17638:18;17630:26;;17702:9;17696:4;17692:20;17688:1;17677:9;17673:17;17666:47;17730:108;17833:4;17824:6;17730:108;:::i;:::-;17722:116;;17472:373;;;;:::o;17851:943::-;17946:6;17954;17962;17970;18019:3;18007:9;17998:7;17994:23;17990:33;17987:120;;;18026:79;;:::i;:::-;17987:120;18146:1;18171:53;18216:7;18207:6;18196:9;18192:22;18171:53;:::i;:::-;18161:63;;18117:117;18273:2;18299:53;18344:7;18335:6;18324:9;18320:22;18299:53;:::i;:::-;18289:63;;18244:118;18401:2;18427:53;18472:7;18463:6;18452:9;18448:22;18427:53;:::i;:::-;18417:63;;18372:118;18557:2;18546:9;18542:18;18529:32;18588:18;18580:6;18577:30;18574:117;;;18610:79;;:::i;:::-;18574:117;18715:62;18769:7;18760:6;18749:9;18745:22;18715:62;:::i;:::-;18705:72;;18500:287;17851:943;;;;;;;:::o;18800:118::-;18887:24;18905:5;18887:24;:::i;:::-;18882:3;18875:37;18800:118;;:::o;18924:222::-;19017:4;19055:2;19044:9;19040:18;19032:26;;19068:71;19136:1;19125:9;19121:17;19112:6;19068:71;:::i;:::-;18924:222;;;;:::o;19152:116::-;19222:21;19237:5;19222:21;:::i;:::-;19215:5;19212:32;19202:60;;19258:1;19255;19248:12;19202:60;19152:116;:::o;19274:133::-;19317:5;19355:6;19342:20;19333:29;;19371:30;19395:5;19371:30;:::i;:::-;19274:133;;;;:::o;19413:468::-;19478:6;19486;19535:2;19523:9;19514:7;19510:23;19506:32;19503:119;;;19541:79;;:::i;:::-;19503:119;19661:1;19686:53;19731:7;19722:6;19711:9;19707:22;19686:53;:::i;:::-;19676:63;;19632:117;19788:2;19814:50;19856:7;19847:6;19836:9;19832:22;19814:50;:::i;:::-;19804:60;;19759:115;19413:468;;;;;:::o;19887:474::-;19955:6;19963;20012:2;20000:9;19991:7;19987:23;19983:32;19980:119;;;20018:79;;:::i;:::-;19980:119;20138:1;20163:53;20208:7;20199:6;20188:9;20184:22;20163:53;:::i;:::-;20153:63;;20109:117;20265:2;20291:53;20336:7;20327:6;20316:9;20312:22;20291:53;:::i;:::-;20281:63;;20236:118;19887:474;;;;;:::o;20367:1089::-;20471:6;20479;20487;20495;20503;20552:3;20540:9;20531:7;20527:23;20523:33;20520:120;;;20559:79;;:::i;:::-;20520:120;20679:1;20704:53;20749:7;20740:6;20729:9;20725:22;20704:53;:::i;:::-;20694:63;;20650:117;20806:2;20832:53;20877:7;20868:6;20857:9;20853:22;20832:53;:::i;:::-;20822:63;;20777:118;20934:2;20960:53;21005:7;20996:6;20985:9;20981:22;20960:53;:::i;:::-;20950:63;;20905:118;21062:2;21088:53;21133:7;21124:6;21113:9;21109:22;21088:53;:::i;:::-;21078:63;;21033:118;21218:3;21207:9;21203:19;21190:33;21250:18;21242:6;21239:30;21236:117;;;21272:79;;:::i;:::-;21236:117;21377:62;21431:7;21422:6;21411:9;21407:22;21377:62;:::i;:::-;21367:72;;21161:288;20367:1089;;;;;;;;:::o;21462:329::-;21521:6;21570:2;21558:9;21549:7;21545:23;21541:32;21538:119;;;21576:79;;:::i;:::-;21538:119;21696:1;21721:53;21766:7;21757:6;21746:9;21742:22;21721:53;:::i;:::-;21711:63;;21667:117;21462:329;;;;:::o;21797:229::-;21937:34;21933:1;21925:6;21921:14;21914:58;22006:12;22001:2;21993:6;21989:15;21982:37;21797:229;:::o;22032:366::-;22174:3;22195:67;22259:2;22254:3;22195:67;:::i;:::-;22188:74;;22271:93;22360:3;22271:93;:::i;:::-;22389:2;22384:3;22380:12;22373:19;;22032:366;;;:::o;22404:419::-;22570:4;22608:2;22597:9;22593:18;22585:26;;22657:9;22651:4;22647:20;22643:1;22632:9;22628:17;22621:47;22685:131;22811:4;22685:131;:::i;:::-;22677:139;;22404:419;;;:::o;22829:180::-;22877:77;22874:1;22867:88;22974:4;22971:1;22964:15;22998:4;22995:1;22988:15;23015:320;23059:6;23096:1;23090:4;23086:12;23076:22;;23143:1;23137:4;23133:12;23164:18;23154:81;;23220:4;23212:6;23208:17;23198:27;;23154:81;23282:2;23274:6;23271:14;23251:18;23248:38;23245:84;;23301:18;;:::i;:::-;23245:84;23066:269;23015:320;;;:::o;23341:233::-;23481:34;23477:1;23469:6;23465:14;23458:58;23550:16;23545:2;23537:6;23533:15;23526:41;23341:233;:::o;23580:366::-;23722:3;23743:67;23807:2;23802:3;23743:67;:::i;:::-;23736:74;;23819:93;23908:3;23819:93;:::i;:::-;23937:2;23932:3;23928:12;23921:19;;23580:366;;;:::o;23952:419::-;24118:4;24156:2;24145:9;24141:18;24133:26;;24205:9;24199:4;24195:20;24191:1;24180:9;24176:17;24169:47;24233:131;24359:4;24233:131;:::i;:::-;24225:139;;23952:419;;;:::o;24377:228::-;24517:34;24513:1;24505:6;24501:14;24494:58;24586:11;24581:2;24573:6;24569:15;24562:36;24377:228;:::o;24611:366::-;24753:3;24774:67;24838:2;24833:3;24774:67;:::i;:::-;24767:74;;24850:93;24939:3;24850:93;:::i;:::-;24968:2;24963:3;24959:12;24952:19;;24611:366;;;:::o;24983:419::-;25149:4;25187:2;25176:9;25172:18;25164:26;;25236:9;25230:4;25226:20;25222:1;25211:9;25207:17;25200:47;25264:131;25390:4;25264:131;:::i;:::-;25256:139;;24983:419;;;:::o;25408:180::-;25456:77;25453:1;25446:88;25553:4;25550:1;25543:15;25577:4;25574:1;25567:15;25594:180;25642:77;25639:1;25632:88;25739:4;25736:1;25729:15;25763:4;25760:1;25753:15;25780:233;25819:3;25842:24;25860:5;25842:24;:::i;:::-;25833:33;;25888:66;25881:5;25878:77;25875:103;;25958:18;;:::i;:::-;25875:103;26005:1;25998:5;25994:13;25987:20;;25780:233;;;:::o;26019:225::-;26159:34;26155:1;26147:6;26143:14;26136:58;26228:8;26223:2;26215:6;26211:15;26204:33;26019:225;:::o;26250:366::-;26392:3;26413:67;26477:2;26472:3;26413:67;:::i;:::-;26406:74;;26489:93;26578:3;26489:93;:::i;:::-;26607:2;26602:3;26598:12;26591:19;;26250:366;;;:::o;26622:419::-;26788:4;26826:2;26815:9;26811:18;26803:26;;26875:9;26869:4;26865:20;26861:1;26850:9;26846:17;26839:47;26903:131;27029:4;26903:131;:::i;:::-;26895:139;;26622:419;;;:::o;27047:182::-;27187:34;27183:1;27175:6;27171:14;27164:58;27047:182;:::o;27235:366::-;27377:3;27398:67;27462:2;27457:3;27398:67;:::i;:::-;27391:74;;27474:93;27563:3;27474:93;:::i;:::-;27592:2;27587:3;27583:12;27576:19;;27235:366;;;:::o;27607:419::-;27773:4;27811:2;27800:9;27796:18;27788:26;;27860:9;27854:4;27850:20;27846:1;27835:9;27831:17;27824:47;27888:131;28014:4;27888:131;:::i;:::-;27880:139;;27607:419;;;:::o;28032:141::-;28081:4;28104:3;28096:11;;28127:3;28124:1;28117:14;28161:4;28158:1;28148:18;28140:26;;28032:141;;;:::o;28179:93::-;28216:6;28263:2;28258;28251:5;28247:14;28243:23;28233:33;;28179:93;;;:::o;28278:107::-;28322:8;28372:5;28366:4;28362:16;28341:37;;28278:107;;;;:::o;28391:393::-;28460:6;28510:1;28498:10;28494:18;28533:97;28563:66;28552:9;28533:97;:::i;:::-;28651:39;28681:8;28670:9;28651:39;:::i;:::-;28639:51;;28723:4;28719:9;28712:5;28708:21;28699:30;;28772:4;28762:8;28758:19;28751:5;28748:30;28738:40;;28467:317;;28391:393;;;;;:::o;28790:60::-;28818:3;28839:5;28832:12;;28790:60;;;:::o;28856:142::-;28906:9;28939:53;28957:34;28966:24;28984:5;28966:24;:::i;:::-;28957:34;:::i;:::-;28939:53;:::i;:::-;28926:66;;28856:142;;;:::o;29004:75::-;29047:3;29068:5;29061:12;;29004:75;;;:::o;29085:269::-;29195:39;29226:7;29195:39;:::i;:::-;29256:91;29305:41;29329:16;29305:41;:::i;:::-;29297:6;29290:4;29284:11;29256:91;:::i;:::-;29250:4;29243:105;29161:193;29085:269;;;:::o;29360:73::-;29405:3;29360:73;:::o;29439:189::-;29516:32;;:::i;:::-;29557:65;29615:6;29607;29601:4;29557:65;:::i;:::-;29492:136;29439:189;;:::o;29634:186::-;29694:120;29711:3;29704:5;29701:14;29694:120;;;29765:39;29802:1;29795:5;29765:39;:::i;:::-;29738:1;29731:5;29727:13;29718:22;;29694:120;;;29634:186;;:::o;29826:543::-;29927:2;29922:3;29919:11;29916:446;;;29961:38;29993:5;29961:38;:::i;:::-;30045:29;30063:10;30045:29;:::i;:::-;30035:8;30031:44;30228:2;30216:10;30213:18;30210:49;;;30249:8;30234:23;;30210:49;30272:80;30328:22;30346:3;30328:22;:::i;:::-;30318:8;30314:37;30301:11;30272:80;:::i;:::-;29931:431;;29916:446;29826:543;;;:::o;30375:117::-;30429:8;30479:5;30473:4;30469:16;30448:37;;30375:117;;;;:::o;30498:169::-;30542:6;30575:51;30623:1;30619:6;30611:5;30608:1;30604:13;30575:51;:::i;:::-;30571:56;30656:4;30650;30646:15;30636:25;;30549:118;30498:169;;;;:::o;30672:295::-;30748:4;30894:29;30919:3;30913:4;30894:29;:::i;:::-;30886:37;;30956:3;30953:1;30949:11;30943:4;30940:21;30932:29;;30672:295;;;;:::o;30972:1395::-;31089:37;31122:3;31089:37;:::i;:::-;31191:18;31183:6;31180:30;31177:56;;;31213:18;;:::i;:::-;31177:56;31257:38;31289:4;31283:11;31257:38;:::i;:::-;31342:67;31402:6;31394;31388:4;31342:67;:::i;:::-;31436:1;31460:4;31447:17;;31492:2;31484:6;31481:14;31509:1;31504:618;;;;32166:1;32183:6;32180:77;;;32232:9;32227:3;32223:19;32217:26;32208:35;;32180:77;32283:67;32343:6;32336:5;32283:67;:::i;:::-;32277:4;32270:81;32139:222;31474:887;;31504:618;31556:4;31552:9;31544:6;31540:22;31590:37;31622:4;31590:37;:::i;:::-;31649:1;31663:208;31677:7;31674:1;31671:14;31663:208;;;31756:9;31751:3;31747:19;31741:26;31733:6;31726:42;31807:1;31799:6;31795:14;31785:24;;31854:2;31843:9;31839:18;31826:31;;31700:4;31697:1;31693:12;31688:17;;31663:208;;;31899:6;31890:7;31887:19;31884:179;;;31957:9;31952:3;31948:19;31942:26;32000:48;32042:4;32034:6;32030:17;32019:9;32000:48;:::i;:::-;31992:6;31985:64;31907:156;31884:179;32109:1;32105;32097:6;32093:14;32089:22;32083:4;32076:36;31511:611;;;31474:887;;31064:1303;;;30972:1395;;:::o;32373:220::-;32513:34;32509:1;32501:6;32497:14;32490:58;32582:3;32577:2;32569:6;32565:15;32558:28;32373:220;:::o;32599:366::-;32741:3;32762:67;32826:2;32821:3;32762:67;:::i;:::-;32755:74;;32838:93;32927:3;32838:93;:::i;:::-;32956:2;32951:3;32947:12;32940:19;;32599:366;;;:::o;32971:419::-;33137:4;33175:2;33164:9;33160:18;33152:26;;33224:9;33218:4;33214:20;33210:1;33199:9;33195:17;33188:47;33252:131;33378:4;33252:131;:::i;:::-;33244:139;;32971:419;;;:::o;33396:227::-;33536:34;33532:1;33524:6;33520:14;33513:58;33605:10;33600:2;33592:6;33588:15;33581:35;33396:227;:::o;33629:366::-;33771:3;33792:67;33856:2;33851:3;33792:67;:::i;:::-;33785:74;;33868:93;33957:3;33868:93;:::i;:::-;33986:2;33981:3;33977:12;33970:19;;33629:366;;;:::o;34001:419::-;34167:4;34205:2;34194:9;34190:18;34182:26;;34254:9;34248:4;34244:20;34240:1;34229:9;34225:17;34218:47;34282:131;34408:4;34282:131;:::i;:::-;34274:139;;34001:419;;;:::o;34426:191::-;34466:3;34485:20;34503:1;34485:20;:::i;:::-;34480:25;;34519:20;34537:1;34519:20;:::i;:::-;34514:25;;34562:1;34559;34555:9;34548:16;;34583:3;34580:1;34577:10;34574:36;;;34590:18;;:::i;:::-;34574:36;34426:191;;;;:::o;34623:634::-;34844:4;34882:2;34871:9;34867:18;34859:26;;34931:9;34925:4;34921:20;34917:1;34906:9;34902:17;34895:47;34959:108;35062:4;35053:6;34959:108;:::i;:::-;34951:116;;35114:9;35108:4;35104:20;35099:2;35088:9;35084:18;35077:48;35142:108;35245:4;35236:6;35142:108;:::i;:::-;35134:116;;34623:634;;;;;:::o;35263:224::-;35403:34;35399:1;35391:6;35387:14;35380:58;35472:7;35467:2;35459:6;35455:15;35448:32;35263:224;:::o;35493:366::-;35635:3;35656:67;35720:2;35715:3;35656:67;:::i;:::-;35649:74;;35732:93;35821:3;35732:93;:::i;:::-;35850:2;35845:3;35841:12;35834:19;;35493:366;;;:::o;35865:419::-;36031:4;36069:2;36058:9;36054:18;36046:26;;36118:9;36112:4;36108:20;36104:1;36093:9;36089:17;36082:47;36146:131;36272:4;36146:131;:::i;:::-;36138:139;;35865:419;;;:::o;36290:229::-;36430:34;36426:1;36418:6;36414:14;36407:58;36499:12;36494:2;36486:6;36482:15;36475:37;36290:229;:::o;36525:366::-;36667:3;36688:67;36752:2;36747:3;36688:67;:::i;:::-;36681:74;;36764:93;36853:3;36764:93;:::i;:::-;36882:2;36877:3;36873:12;36866:19;;36525:366;;;:::o;36897:419::-;37063:4;37101:2;37090:9;37086:18;37078:26;;37150:9;37144:4;37140:20;37136:1;37125:9;37121:17;37114:47;37178:131;37304:4;37178:131;:::i;:::-;37170:139;;36897:419;;;:::o;37322:332::-;37443:4;37481:2;37470:9;37466:18;37458:26;;37494:71;37562:1;37551:9;37547:17;37538:6;37494:71;:::i;:::-;37575:72;37643:2;37632:9;37628:18;37619:6;37575:72;:::i;:::-;37322:332;;;;;:::o;37660:228::-;37800:34;37796:1;37788:6;37784:14;37777:58;37869:11;37864:2;37856:6;37852:15;37845:36;37660:228;:::o;37894:366::-;38036:3;38057:67;38121:2;38116:3;38057:67;:::i;:::-;38050:74;;38133:93;38222:3;38133:93;:::i;:::-;38251:2;38246:3;38242:12;38235:19;;37894:366;;;:::o;38266:419::-;38432:4;38470:2;38459:9;38455:18;38447:26;;38519:9;38513:4;38509:20;38505:1;38494:9;38490:17;38483:47;38547:131;38673:4;38547:131;:::i;:::-;38539:139;;38266:419;;;:::o;38691:98::-;38742:6;38776:5;38770:12;38760:22;;38691:98;;;:::o;38795:168::-;38878:11;38912:6;38907:3;38900:19;38952:4;38947:3;38943:14;38928:29;;38795:168;;;;:::o;38969:373::-;39055:3;39083:38;39115:5;39083:38;:::i;:::-;39137:70;39200:6;39195:3;39137:70;:::i;:::-;39130:77;;39216:65;39274:6;39269:3;39262:4;39255:5;39251:16;39216:65;:::i;:::-;39306:29;39328:6;39306:29;:::i;:::-;39301:3;39297:39;39290:46;;39059:283;38969:373;;;;:::o;39348:1053::-;39671:4;39709:3;39698:9;39694:19;39686:27;;39723:71;39791:1;39780:9;39776:17;39767:6;39723:71;:::i;:::-;39804:72;39872:2;39861:9;39857:18;39848:6;39804:72;:::i;:::-;39923:9;39917:4;39913:20;39908:2;39897:9;39893:18;39886:48;39951:108;40054:4;40045:6;39951:108;:::i;:::-;39943:116;;40106:9;40100:4;40096:20;40091:2;40080:9;40076:18;40069:48;40134:108;40237:4;40228:6;40134:108;:::i;:::-;40126:116;;40290:9;40284:4;40280:20;40274:3;40263:9;40259:19;40252:49;40318:76;40389:4;40380:6;40318:76;:::i;:::-;40310:84;;39348:1053;;;;;;;;:::o;40407:141::-;40463:5;40494:6;40488:13;40479:22;;40510:32;40536:5;40510:32;:::i;:::-;40407:141;;;;:::o;40554:349::-;40623:6;40672:2;40660:9;40651:7;40647:23;40643:32;40640:119;;;40678:79;;:::i;:::-;40640:119;40798:1;40823:63;40878:7;40869:6;40858:9;40854:22;40823:63;:::i;:::-;40813:73;;40769:127;40554:349;;;;:::o;40909:106::-;40953:8;41002:5;40997:3;40993:15;40972:36;;40909:106;;;:::o;41021:183::-;41056:3;41094:1;41076:16;41073:23;41070:128;;;41132:1;41129;41126;41111:23;41154:34;41185:1;41179:8;41154:34;:::i;:::-;41147:41;;41070:128;41021:183;:::o;41210:711::-;41249:3;41287:4;41269:16;41266:26;41295:5;41263:39;41324:20;;:::i;:::-;41399:1;41381:16;41377:24;41374:1;41368:4;41353:49;41432:4;41426:11;41531:16;41524:4;41516:6;41512:17;41509:39;41476:18;41468:6;41465:30;41449:113;41446:146;;;41577:5;;;;41446:146;41623:6;41617:4;41613:17;41659:3;41653:10;41686:18;41678:6;41675:30;41672:43;;;41708:5;;;;;;41672:43;41756:6;41749:4;41744:3;41740:14;41736:27;41815:1;41797:16;41793:24;41787:4;41783:35;41778:3;41775:44;41772:57;;;41822:5;;;;;;;41772:57;41839;41887:6;41881:4;41877:17;41869:6;41865:30;41859:4;41839:57;:::i;:::-;41912:3;41905:10;;41253:668;;;;;41210:711;;:::o;41927:239::-;42067:34;42063:1;42055:6;42051:14;42044:58;42136:22;42131:2;42123:6;42119:15;42112:47;41927:239;:::o;42172:366::-;42314:3;42335:67;42399:2;42394:3;42335:67;:::i;:::-;42328:74;;42411:93;42500:3;42411:93;:::i;:::-;42529:2;42524:3;42520:12;42513:19;;42172:366;;;:::o;42544:419::-;42710:4;42748:2;42737:9;42733:18;42725:26;;42797:9;42791:4;42787:20;42783:1;42772:9;42768:17;42761:47;42825:131;42951:4;42825:131;:::i;:::-;42817:139;;42544:419;;;:::o;42969:227::-;43109:34;43105:1;43097:6;43093:14;43086:58;43178:10;43173:2;43165:6;43161:15;43154:35;42969:227;:::o;43202:366::-;43344:3;43365:67;43429:2;43424:3;43365:67;:::i;:::-;43358:74;;43441:93;43530:3;43441:93;:::i;:::-;43559:2;43554:3;43550:12;43543:19;;43202:366;;;:::o;43574:419::-;43740:4;43778:2;43767:9;43763:18;43755:26;;43827:9;43821:4;43817:20;43813:1;43802:9;43798:17;43791:47;43855:131;43981:4;43855:131;:::i;:::-;43847:139;;43574:419;;;:::o;43999:170::-;44139:22;44135:1;44127:6;44123:14;44116:46;43999:170;:::o;44175:366::-;44317:3;44338:67;44402:2;44397:3;44338:67;:::i;:::-;44331:74;;44414:93;44503:3;44414:93;:::i;:::-;44532:2;44527:3;44523:12;44516:19;;44175:366;;;:::o;44547:419::-;44713:4;44751:2;44740:9;44736:18;44728:26;;44800:9;44794:4;44790:20;44786:1;44775:9;44771:17;44764:47;44828:131;44954:4;44828:131;:::i;:::-;44820:139;;44547:419;;;:::o;44972:751::-;45195:4;45233:3;45222:9;45218:19;45210:27;;45247:71;45315:1;45304:9;45300:17;45291:6;45247:71;:::i;:::-;45328:72;45396:2;45385:9;45381:18;45372:6;45328:72;:::i;:::-;45410;45478:2;45467:9;45463:18;45454:6;45410:72;:::i;:::-;45492;45560:2;45549:9;45545:18;45536:6;45492:72;:::i;:::-;45612:9;45606:4;45602:20;45596:3;45585:9;45581:19;45574:49;45640:76;45711:4;45702:6;45640:76;:::i;:::-;45632:84;;44972:751;;;;;;;;:::o;45729:166::-;45869:18;45865:1;45857:6;45853:14;45846:42;45729:166;:::o;45901:366::-;46043:3;46064:67;46128:2;46123:3;46064:67;:::i;:::-;46057:74;;46140:93;46229:3;46140:93;:::i;:::-;46258:2;46253:3;46249:12;46242:19;;45901:366;;;:::o;46273:419::-;46439:4;46477:2;46466:9;46462:18;46454:26;;46526:9;46520:4;46516:20;46512:1;46501:9;46497:17;46490:47;46554:131;46680:4;46554:131;:::i;:::-;46546:139;;46273:419;;;:::o

Swarm Source

ipfs://bce116882f9ac7c7b7e91c43fe2bfaa6ff2c7aba5726a333099f47ee7f336174
Loading