Token Vibes

Overview ERC1155

Total Supply:
0 Vibes

Holders:
17 addresses

Transfers:
-

Loading
[ Download CSV Export  ] 
Loading
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
Vibes

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// 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/access/Ownable.sol


// OpenZeppelin Contracts v4.4.1 (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 Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _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 v4.4.1 (utils/Address.sol)

pragma solidity ^0.8.0;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

// File: @openzeppelin/contracts/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 v4.4.1 (token/ERC1155/IERC1155Receiver.sol)

pragma solidity ^0.8.0;


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

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

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


// OpenZeppelin Contracts v4.4.1 (token/ERC1155/IERC1155.sol)

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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

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

// File: @openzeppelin/contracts/token/ERC1155/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 v4.4.1 (token/ERC1155/ERC1155.sol)

pragma solidity ^0.8.0;







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

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

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

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

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

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

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

    /**
     * @dev See {IERC1155-balanceOf}.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function balanceOf(address account, uint256 id) public view virtual override returns (uint256) {
        require(account != address(0), "ERC1155: balance query for the zero address");
        return _balances[id][account];
    }

    /**
     * @dev See {IERC1155-balanceOfBatch}.
     *
     * Requirements:
     *
     * - `accounts` and `ids` must have the same length.
     */
    function balanceOfBatch(address[] memory accounts, uint256[] memory ids)
        public
        view
        virtual
        override
        returns (uint256[] memory)
    {
        require(accounts.length == ids.length, "ERC1155: accounts and ids length mismatch");

        uint256[] memory batchBalances = new uint256[](accounts.length);

        for (uint256 i = 0; i < accounts.length; ++i) {
            batchBalances[i] = balanceOf(accounts[i], ids[i]);
        }

        return batchBalances;
    }

    /**
     * @dev See {IERC1155-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        _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 owner nor approved"
        );
        _safeTransferFrom(from, to, id, amount, data);
    }

    /**
     * @dev See {IERC1155-safeBatchTransferFrom}.
     */
    function safeBatchTransferFrom(
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) public virtual override {
        require(
            from == _msgSender() || isApprovedForAll(from, _msgSender()),
            "ERC1155: transfer caller is not owner nor approved"
        );
        _safeBatchTransferFrom(from, to, ids, amounts, data);
    }

    /**
     * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `from` must have a balance of tokens of type `id` of at least `amount`.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function _safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) internal virtual {
        require(to != address(0), "ERC1155: transfer to the zero address");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, from, to, _asSingletonArray(id), _asSingletonArray(amount), 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);

        _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);

        _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();

        _beforeTokenTransfer(operator, address(0), to, _asSingletonArray(id), _asSingletonArray(amount), data);

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

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

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}.
     *
     * Requirements:
     *
     * - `ids` and `amounts` must have the same length.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
     * acceptance magic value.
     */
    function _mintBatch(
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {
        require(to != address(0), "ERC1155: mint to the zero address");
        require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");

        address operator = _msgSender();

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

        for (uint256 i = 0; i < ids.length; i++) {
            _balances[ids[i]][to] += amounts[i];
        }

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

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

    /**
     * @dev Destroys `amount` tokens of token type `id` from `from`
     *
     * 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();

        _beforeTokenTransfer(operator, from, address(0), _asSingletonArray(id), _asSingletonArray(amount), "");

        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);
    }

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}.
     *
     * 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);
    }

    /**
     * @dev Approve `operator` to operate on all of `owner` tokens
     *
     * Emits a {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 `id` and `amount` arrays will be 1.
     *
     * Calling conditions (for each `id` and `amount` pair):
     *
     * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * of token type `id` will be  transferred to `to`.
     * - When `from` is zero, `amount` tokens of token type `id` will be minted
     * for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens of token type `id`
     * will be burned.
     * - `from` and `to` are never both zero.
     * - `ids` and `amounts` have the same, non-zero length.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {}

    function _doSafeTransferAcceptanceCheck(
        address operator,
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) private {
        if (to.isContract()) {
            try IERC1155Receiver(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) {
                if (response != IERC1155Receiver.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: vibes.sol


// gudVibes by The Spot Underground. Spreading gudVibes to the avax community. Find out more and use your gudVibes at thespot.art

pragma solidity ^0.8.11;



contract Vibes is ERC1155, Ownable {
    address private _feeWallet;
    mapping (uint256 => uint256) private _totalSupply;
    uint256 public _mintFee = 1 ether;
    mapping (uint256 => bool) private _tokenExists;
    string private _baseURI;
    string public name = "Vibes";
   
    mapping (uint256 => address[]) private _tokenOwners;
    mapping (uint256 => bool) private _addToGudVibes;

    constructor(address feeWallet, string memory baseURI) ERC1155("Vibes") {
        _feeWallet = feeWallet;
        _baseURI = baseURI;
    }

    function addToGudVibes(uint256 tokenId, bool value) public onlyOwner {
        _addToGudVibes[tokenId] = value;
    }

    function getGudVibes(uint256 tokenId) public view returns (bool) {
        return _addToGudVibes[tokenId];
    }

    function addToTokenOwners(uint256 id, address to) internal {
        if (_tokenOwners[id].length == 0) {
            
            _tokenOwners[id].push(to);
        } else {
            bool ownerExists = false;
            for (uint256 i = 0; i < _tokenOwners[id].length; i++) {
                if (_tokenOwners[id][i] == to) {
                    
                    ownerExists = true;
                    break;
                }
            }
            if (!ownerExists) {
        
                _tokenOwners[id].push(to);
            }
        }
    }

    function mint(address to, uint256 id, uint256 amount) external payable {
        require(_exists(id), "ERC1155: Cannot Mint a Token Id that doesn't exist");
        require(to != address(msg.sender), "Invalid recipient address");
        require(msg.value == _mintFee * amount, "Insufficient mint fee");

        _mint(to, id, amount, "[]");
        _totalSupply[id] += amount;
        
        addToTokenOwners(id, to);

        if (_addToGudVibes[id] == true) {
            payable(to).transfer(msg.value / 2);
            payable(_feeWallet).transfer(msg.value / 2);
        } else if (_addToGudVibes[id] == false) {
            //Select a random wallet that has been sent gudVibes and send them 50% of the badVibes minting fee
            uint256 numTokenHolders = _tokenOwners[1].length;
            if (numTokenHolders > 0) {
                uint256 randomIndex = uint256(keccak256(abi.encodePacked(block.timestamp, msg.sender, id, amount))) % numTokenHolders;
                address randomHolder = _tokenOwners[1][randomIndex];
                payable(randomHolder).transfer(msg.value / 2);
            }
            payable(_feeWallet).transfer(msg.value / 2);
        } else {
            payable(_feeWallet).transfer(msg.value);
        }
    }

    function mintToOwner(uint256 id, uint256 amount, bytes memory data) external onlyOwner {
        _mint(msg.sender, id, amount, data);
        _totalSupply[id] += amount;
        if (!_tokenExists[id]) {
            _tokenExists[id] = true;
        }
    }

    function isTokenOwner(uint256 id, address owner) public view returns (bool) {
        for (uint256 i = 0; i < _tokenOwners[id].length; i++) {
            if (_tokenOwners[id][i] == owner) {
                return true;
            }
        }
        return false;
    }

    function totalSupply(uint256 id) public view returns (uint256) {
        return _totalSupply[id];
    }

    function setMintFee(uint256 mintFee) public onlyOwner {
        _mintFee = mintFee;
    }

    function _exists(uint256 tokenId) public view returns (bool) {
        return _tokenExists[tokenId];
    }

    function uint2str(uint256 _i) internal pure returns (string memory str) {
        if (_i == 0) {
            return "0";
        }
        uint256 j = _i;
        uint256 length;
        while (j != 0) {
            length++;
            j /= 10;
        }
        bytes memory bstr = new bytes(length);
        uint256 k = length;
        while (_i != 0) {
            k = k-1;
            uint8 temp = (48 + uint8(_i - _i / 10 * 10));
            bytes1 b1 = bytes1(temp);
            bstr[k] = b1;
            _i /= 10;
        }
        str = string(bstr);
    }

    function setBaseURI(string memory baseURI_) external onlyOwner {
        _baseURI = baseURI_;
    }

    function _internalBaseURI() internal view returns (string memory) {
        return _baseURI;
    }
    function uri(uint256 tokenId) public view override returns (string memory) {
        require(_exists(tokenId), "ERC1155Metadata: URI query for nonexistent token");

        string memory baseURI_ = _internalBaseURI();

        return bytes(baseURI_).length > 0 ? string(abi.encodePacked(baseURI_, uint2str(tokenId), ".json")) : "";
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"feeWallet","type":"address"},{"internalType":"string","name":"baseURI","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"_exists","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_mintFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bool","name":"value","type":"bool"}],"name":"addToGudVibes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getGudVibes","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"uint256","name":"id","type":"uint256"},{"internalType":"address","name":"owner","type":"address"}],"name":"isTokenOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"mintToOwner","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":"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":"baseURI_","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"mintFee","type":"uint256"}],"name":"setMintFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]

6080604052670de0b6b3a76400006006556040518060400160405280600581526020017f566962657300000000000000000000000000000000000000000000000000000081525060099081620000569190620004aa565b503480156200006457600080fd5b5060405162004d1938038062004d1983398181016040528101906200008a91906200075a565b6040518060400160405280600581526020017f5669626573000000000000000000000000000000000000000000000000000000815250620000d1816200014d60201b60201c565b50620000f2620000e66200016260201b60201c565b6200016a60201b60201c565b81600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060089081620001449190620004aa565b505050620007c0565b80600290816200015e9190620004aa565b5050565b600033905090565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620002b257607f821691505b602082108103620002c857620002c76200026a565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620003327fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620002f3565b6200033e8683620002f3565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b60006200038b620003856200037f8462000356565b62000360565b62000356565b9050919050565b6000819050919050565b620003a7836200036a565b620003bf620003b68262000392565b84845462000300565b825550505050565b600090565b620003d6620003c7565b620003e38184846200039c565b505050565b5b818110156200040b57620003ff600082620003cc565b600181019050620003e9565b5050565b601f8211156200045a576200042481620002ce565b6200042f84620002e3565b810160208510156200043f578190505b620004576200044e85620002e3565b830182620003e8565b50505b505050565b600082821c905092915050565b60006200047f600019846008026200045f565b1980831691505092915050565b60006200049a83836200046c565b9150826002028217905092915050565b620004b58262000230565b67ffffffffffffffff811115620004d157620004d06200023b565b5b620004dd825462000299565b620004ea8282856200040f565b600060209050601f8311600181146200052257600084156200050d578287015190505b6200051985826200048c565b86555062000589565b601f1984166200053286620002ce565b60005b828110156200055c5784890151825560018201915060208501945060208101905062000535565b868310156200057c578489015162000578601f8916826200046c565b8355505b6001600288020188555050505b505050505050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620005d282620005a5565b9050919050565b620005e481620005c5565b8114620005f057600080fd5b50565b6000815190506200060481620005d9565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b620006308262000614565b810181811067ffffffffffffffff821117156200065257620006516200023b565b5b80604052505050565b60006200066762000591565b905062000675828262000625565b919050565b600067ffffffffffffffff8211156200069857620006976200023b565b5b620006a38262000614565b9050602081019050919050565b60005b83811015620006d0578082015181840152602081019050620006b3565b60008484015250505050565b6000620006f3620006ed846200067a565b6200065b565b9050828152602081018484840111156200071257620007116200060f565b5b6200071f848285620006b0565b509392505050565b600082601f8301126200073f576200073e6200060a565b5b815162000751848260208601620006dc565b91505092915050565b600080604083850312156200077457620007736200059b565b5b60006200078485828601620005f3565b925050602083015167ffffffffffffffff811115620007a857620007a7620005a0565b5b620007b68582860162000727565b9150509250929050565b61454980620007d06000396000f3fe6080604052600436106101345760003560e01c80638da5cb5b116100ab578063eddd0d9c1161006f578063eddd0d9c1461044e578063f242432a14610477578063f24b4a48146104a0578063f2a08abb146104c9578063f2fde38b146104f4578063f8e76cc01461051d57610134565b80638da5cb5b14610343578063a22cb4651461036e578063bd85b03914610397578063d59f2827146103d4578063e985e9c51461041157610134565b80631699eba3116100fd5780631699eba3146102375780632403cad1146102745780632eb2c2d61461029d5780634e1273f4146102c657806355f804b314610303578063715018a61461032c57610134565b8062fdd58e1461013957806301ffc9a71461017657806306fdde03146101b35780630e89341c146101de578063156e29f61461021b575b600080fd5b34801561014557600080fd5b50610160600480360381019061015b919061283b565b61055a565b60405161016d919061288a565b60405180910390f35b34801561018257600080fd5b5061019d600480360381019061019891906128fd565b610622565b6040516101aa9190612945565b60405180910390f35b3480156101bf57600080fd5b506101c8610704565b6040516101d591906129f0565b60405180910390f35b3480156101ea57600080fd5b5061020560048036038101906102009190612a12565b610792565b60405161021291906129f0565b60405180910390f35b61023560048036038101906102309190612a3f565b610839565b005b34801561024357600080fd5b5061025e60048036038101906102599190612a12565b610cd2565b60405161026b9190612945565b60405180910390f35b34801561028057600080fd5b5061029b60048036038101906102969190612bc7565b610cfc565b005b3480156102a957600080fd5b506102c460048036038101906102bf9190612cfe565b610e05565b005b3480156102d257600080fd5b506102ed60048036038101906102e89190612e90565b610ea6565b6040516102fa9190612fc6565b60405180910390f35b34801561030f57600080fd5b5061032a60048036038101906103259190613089565b610fbf565b005b34801561033857600080fd5b5061034161104e565b005b34801561034f57600080fd5b506103586110d6565b60405161036591906130e1565b60405180910390f35b34801561037a57600080fd5b5061039560048036038101906103909190613128565b611100565b005b3480156103a357600080fd5b506103be60048036038101906103b99190612a12565b611116565b6040516103cb919061288a565b60405180910390f35b3480156103e057600080fd5b506103fb60048036038101906103f69190613168565b611133565b6040516104089190612945565b60405180910390f35b34801561041d57600080fd5b50610438600480360381019061043391906131a8565b611204565b6040516104459190612945565b60405180910390f35b34801561045a57600080fd5b5061047560048036038101906104709190612a12565b611298565b005b34801561048357600080fd5b5061049e600480360381019061049991906131e8565b61131e565b005b3480156104ac57600080fd5b506104c760048036038101906104c2919061327f565b6113bf565b005b3480156104d557600080fd5b506104de61146a565b6040516104eb919061288a565b60405180910390f35b34801561050057600080fd5b5061051b600480360381019061051691906132bf565b611470565b005b34801561052957600080fd5b50610544600480360381019061053f9190612a12565b611567565b6040516105519190612945565b60405180910390f35b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036105ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105c19061335e565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806106ed57507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806106fd57506106fc82611591565b5b9050919050565b60098054610711906133ad565b80601f016020809104026020016040519081016040528092919081815260200182805461073d906133ad565b801561078a5780601f1061075f5761010080835404028352916020019161078a565b820191906000526020600020905b81548152906001019060200180831161076d57829003601f168201915b505050505081565b606061079d82611567565b6107dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107d390613450565b60405180910390fd5b60006107e66115fb565b905060008151116108065760405180602001604052806000815250610831565b806108108461168d565b6040516020016108219291906134f8565b6040516020818303038152906040525b915050919050565b61084282611567565b610881576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087890613599565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036108ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108e690613605565b60405180910390fd5b806006546108fd9190613654565b341461093e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610935906136e2565b60405180910390fd5b61097f8383836040518060400160405280600281526020017f5b5d000000000000000000000000000000000000000000000000000000000000815250611815565b806005600084815260200190815260200160002060008282546109a29190613702565b925050819055506109b382846119aa565b60011515600b600084815260200190815260200160002060009054906101000a900460ff16151503610aac578273ffffffffffffffffffffffffffffffffffffffff166108fc600234610a069190613765565b9081150290604051600060405180830381858888f19350505050158015610a31573d6000803e3d6000fd5b50600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc600234610a7b9190613765565b9081150290604051600060405180830381858888f19350505050158015610aa6573d6000803e3d6000fd5b50610ccd565b60001515600b600084815260200190815260200160002060009054906101000a900460ff16151503610c62576000600a6000600181526020019081526020016000208054905090506000811115610be75760008142338686604051602001610b1794939291906137ff565b6040516020818303038152906040528051906020012060001c610b3a919061384d565b90506000600a6000600181526020019081526020016000208281548110610b6457610b6361387e565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff166108fc600234610bb89190613765565b9081150290604051600060405180830381858888f19350505050158015610be3573d6000803e3d6000fd5b5050505b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc600234610c309190613765565b9081150290604051600060405180830381858888f19350505050158015610c5b573d6000803e3d6000fd5b5050610ccc565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f19350505050158015610cca573d6000803e3d6000fd5b505b5b505050565b6000600b600083815260200190815260200160002060009054906101000a900460ff169050919050565b610d04611b82565b73ffffffffffffffffffffffffffffffffffffffff16610d226110d6565b73ffffffffffffffffffffffffffffffffffffffff1614610d78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6f906138f9565b60405180910390fd5b610d8433848484611815565b81600560008581526020019081526020016000206000828254610da79190613702565b925050819055506007600084815260200190815260200160002060009054906101000a900460ff16610e005760016007600085815260200190815260200160002060006101000a81548160ff0219169083151502179055505b505050565b610e0d611b82565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610e535750610e5285610e4d611b82565b611204565b5b610e92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e899061398b565b60405180910390fd5b610e9f8585858585611b8a565b5050505050565b60608151835114610eec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee390613a1d565b60405180910390fd5b6000835167ffffffffffffffff811115610f0957610f08612a9c565b5b604051908082528060200260200182016040528015610f375781602001602082028036833780820191505090505b50905060005b8451811015610fb457610f84858281518110610f5c57610f5b61387e565b5b6020026020010151858381518110610f7757610f7661387e565b5b602002602001015161055a565b828281518110610f9757610f9661387e565b5b60200260200101818152505080610fad90613a3d565b9050610f3d565b508091505092915050565b610fc7611b82565b73ffffffffffffffffffffffffffffffffffffffff16610fe56110d6565b73ffffffffffffffffffffffffffffffffffffffff161461103b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611032906138f9565b60405180910390fd5b806008908161104a9190613c31565b5050565b611056611b82565b73ffffffffffffffffffffffffffffffffffffffff166110746110d6565b73ffffffffffffffffffffffffffffffffffffffff16146110ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c1906138f9565b60405180910390fd5b6110d46000611e9d565b565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61111261110b611b82565b8383611f63565b5050565b600060056000838152602001908152602001600020549050919050565b600080600090505b600a6000858152602001908152602001600020805490508110156111f8578273ffffffffffffffffffffffffffffffffffffffff16600a600086815260200190815260200160002082815481106111955761119461387e565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036111e55760019150506111fe565b80806111f090613a3d565b91505061113b565b50600090505b92915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6112a0611b82565b73ffffffffffffffffffffffffffffffffffffffff166112be6110d6565b73ffffffffffffffffffffffffffffffffffffffff1614611314576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130b906138f9565b60405180910390fd5b8060068190555050565b611326611b82565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061136c575061136b85611366611b82565b611204565b5b6113ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a290613d75565b60405180910390fd5b6113b885858585856120cf565b5050505050565b6113c7611b82565b73ffffffffffffffffffffffffffffffffffffffff166113e56110d6565b73ffffffffffffffffffffffffffffffffffffffff161461143b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611432906138f9565b60405180910390fd5b80600b600084815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60065481565b611478611b82565b73ffffffffffffffffffffffffffffffffffffffff166114966110d6565b73ffffffffffffffffffffffffffffffffffffffff16146114ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e3906138f9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361155b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155290613e07565b60405180910390fd5b61156481611e9d565b50565b60006007600083815260200190815260200160002060009054906101000a900460ff169050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60606008805461160a906133ad565b80601f0160208091040260200160405190810160405280929190818152602001828054611636906133ad565b80156116835780601f1061165857610100808354040283529160200191611683565b820191906000526020600020905b81548152906001019060200180831161166657829003601f168201915b5050505050905090565b6060600082036116d4576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611810565b600082905060005b600082146117065780806116ef90613a3d565b915050600a826116ff9190613765565b91506116dc565b60008167ffffffffffffffff81111561172257611721612a9c565b5b6040519080825280601f01601f1916602001820160405280156117545781602001600182028036833780820191505090505b50905060008290505b60008614611808576001816117729190613e27565b90506000600a80886117849190613765565b61178e9190613654565b876117999190613e27565b60306117a59190613e68565b905060008160f81b9050808484815181106117c3576117c261387e565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a886117ff9190613765565b9750505061175d565b819450505050505b919050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611884576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187b90613f0f565b60405180910390fd5b600061188e611b82565b90506118af816000876118a088612350565b6118a988612350565b876123ca565b8260008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461190e9190613702565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62878760405161198c929190613f2f565b60405180910390a46119a3816000878787876123d2565b5050505050565b6000600a60008481526020019081526020016000208054905003611a4157600a6000838152602001908152602001600020819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611b7e565b6000805b600a600085815260200190815260200160002080549050811015611b01578273ffffffffffffffffffffffffffffffffffffffff16600a60008681526020019081526020016000208281548110611a9f57611a9e61387e565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603611aee5760019150611b01565b8080611af990613a3d565b915050611a45565b5080611b7c57600a6000848152602001908152602001600020829080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b505b5050565b600033905090565b8151835114611bce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc590613fca565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611c3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c349061405c565b60405180910390fd5b6000611c47611b82565b9050611c578187878787876123ca565b60005b8451811015611e08576000858281518110611c7857611c7761387e565b5b602002602001015190506000858381518110611c9757611c9661387e565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611d38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2f906140ee565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611ded9190613702565b9250508190555050505080611e0190613a3d565b9050611c5a565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611e7f92919061410e565b60405180910390a4611e958187878787876125a9565b505050505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611fd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fc8906141b7565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516120c29190612945565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361213e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121359061405c565b60405180910390fd5b6000612148611b82565b905061216881878761215988612350565b61216288612350565b876123ca565b600080600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050838110156121ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f6906140ee565b60405180910390fd5b83810360008087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508360008087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546122b49190613702565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628888604051612331929190613f2f565b60405180910390a46123478288888888886123d2565b50505050505050565b60606000600167ffffffffffffffff81111561236f5761236e612a9c565b5b60405190808252806020026020018201604052801561239d5781602001602082028036833780820191505090505b50905082816000815181106123b5576123b461387e565b5b60200260200101818152505080915050919050565b505050505050565b6123f18473ffffffffffffffffffffffffffffffffffffffff16612780565b156125a1578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b815260040161243795949392919061422c565b6020604051808303816000875af192505050801561247357506040513d601f19601f82011682018060405250810190612470919061429b565b60015b6125185761247f6142d5565b806308c379a0036124db57506124936142f7565b8061249e57506124dd565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d291906129f0565b60405180910390fd5b505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161250f906143f9565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461259f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125969061448b565b60405180910390fd5b505b505050505050565b6125c88473ffffffffffffffffffffffffffffffffffffffff16612780565b15612778578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b815260040161260e9594939291906144ab565b6020604051808303816000875af192505050801561264a57506040513d601f19601f82011682018060405250810190612647919061429b565b60015b6126ef576126566142d5565b806308c379a0036126b2575061266a6142f7565b8061267557506126b4565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126a991906129f0565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126e6906143f9565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612776576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161276d9061448b565b60405180910390fd5b505b505050505050565b600080823b905060008111915050919050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006127d2826127a7565b9050919050565b6127e2816127c7565b81146127ed57600080fd5b50565b6000813590506127ff816127d9565b92915050565b6000819050919050565b61281881612805565b811461282357600080fd5b50565b6000813590506128358161280f565b92915050565b600080604083850312156128525761285161279d565b5b6000612860858286016127f0565b925050602061287185828601612826565b9150509250929050565b61288481612805565b82525050565b600060208201905061289f600083018461287b565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6128da816128a5565b81146128e557600080fd5b50565b6000813590506128f7816128d1565b92915050565b6000602082840312156129135761291261279d565b5b6000612921848285016128e8565b91505092915050565b60008115159050919050565b61293f8161292a565b82525050565b600060208201905061295a6000830184612936565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561299a57808201518184015260208101905061297f565b60008484015250505050565b6000601f19601f8301169050919050565b60006129c282612960565b6129cc818561296b565b93506129dc81856020860161297c565b6129e5816129a6565b840191505092915050565b60006020820190508181036000830152612a0a81846129b7565b905092915050565b600060208284031215612a2857612a2761279d565b5b6000612a3684828501612826565b91505092915050565b600080600060608486031215612a5857612a5761279d565b5b6000612a66868287016127f0565b9350506020612a7786828701612826565b9250506040612a8886828701612826565b9150509250925092565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612ad4826129a6565b810181811067ffffffffffffffff82111715612af357612af2612a9c565b5b80604052505050565b6000612b06612793565b9050612b128282612acb565b919050565b600067ffffffffffffffff821115612b3257612b31612a9c565b5b612b3b826129a6565b9050602081019050919050565b82818337600083830152505050565b6000612b6a612b6584612b17565b612afc565b905082815260208101848484011115612b8657612b85612a97565b5b612b91848285612b48565b509392505050565b600082601f830112612bae57612bad612a92565b5b8135612bbe848260208601612b57565b91505092915050565b600080600060608486031215612be057612bdf61279d565b5b6000612bee86828701612826565b9350506020612bff86828701612826565b925050604084013567ffffffffffffffff811115612c2057612c1f6127a2565b5b612c2c86828701612b99565b9150509250925092565b600067ffffffffffffffff821115612c5157612c50612a9c565b5b602082029050602081019050919050565b600080fd5b6000612c7a612c7584612c36565b612afc565b90508083825260208201905060208402830185811115612c9d57612c9c612c62565b5b835b81811015612cc65780612cb28882612826565b845260208401935050602081019050612c9f565b5050509392505050565b600082601f830112612ce557612ce4612a92565b5b8135612cf5848260208601612c67565b91505092915050565b600080600080600060a08688031215612d1a57612d1961279d565b5b6000612d28888289016127f0565b9550506020612d39888289016127f0565b945050604086013567ffffffffffffffff811115612d5a57612d596127a2565b5b612d6688828901612cd0565b935050606086013567ffffffffffffffff811115612d8757612d866127a2565b5b612d9388828901612cd0565b925050608086013567ffffffffffffffff811115612db457612db36127a2565b5b612dc088828901612b99565b9150509295509295909350565b600067ffffffffffffffff821115612de857612de7612a9c565b5b602082029050602081019050919050565b6000612e0c612e0784612dcd565b612afc565b90508083825260208201905060208402830185811115612e2f57612e2e612c62565b5b835b81811015612e585780612e4488826127f0565b845260208401935050602081019050612e31565b5050509392505050565b600082601f830112612e7757612e76612a92565b5b8135612e87848260208601612df9565b91505092915050565b60008060408385031215612ea757612ea661279d565b5b600083013567ffffffffffffffff811115612ec557612ec46127a2565b5b612ed185828601612e62565b925050602083013567ffffffffffffffff811115612ef257612ef16127a2565b5b612efe85828601612cd0565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b612f3d81612805565b82525050565b6000612f4f8383612f34565b60208301905092915050565b6000602082019050919050565b6000612f7382612f08565b612f7d8185612f13565b9350612f8883612f24565b8060005b83811015612fb9578151612fa08882612f43565b9750612fab83612f5b565b925050600181019050612f8c565b5085935050505092915050565b60006020820190508181036000830152612fe08184612f68565b905092915050565b600067ffffffffffffffff82111561300357613002612a9c565b5b61300c826129a6565b9050602081019050919050565b600061302c61302784612fe8565b612afc565b90508281526020810184848401111561304857613047612a97565b5b613053848285612b48565b509392505050565b600082601f8301126130705761306f612a92565b5b8135613080848260208601613019565b91505092915050565b60006020828403121561309f5761309e61279d565b5b600082013567ffffffffffffffff8111156130bd576130bc6127a2565b5b6130c98482850161305b565b91505092915050565b6130db816127c7565b82525050565b60006020820190506130f660008301846130d2565b92915050565b6131058161292a565b811461311057600080fd5b50565b600081359050613122816130fc565b92915050565b6000806040838503121561313f5761313e61279d565b5b600061314d858286016127f0565b925050602061315e85828601613113565b9150509250929050565b6000806040838503121561317f5761317e61279d565b5b600061318d85828601612826565b925050602061319e858286016127f0565b9150509250929050565b600080604083850312156131bf576131be61279d565b5b60006131cd858286016127f0565b92505060206131de858286016127f0565b9150509250929050565b600080600080600060a086880312156132045761320361279d565b5b6000613212888289016127f0565b9550506020613223888289016127f0565b945050604061323488828901612826565b935050606061324588828901612826565b925050608086013567ffffffffffffffff811115613266576132656127a2565b5b61327288828901612b99565b9150509295509295909350565b600080604083850312156132965761329561279d565b5b60006132a485828601612826565b92505060206132b585828601613113565b9150509250929050565b6000602082840312156132d5576132d461279d565b5b60006132e3848285016127f0565b91505092915050565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b6000613348602b8361296b565b9150613353826132ec565b604082019050919050565b600060208201905081810360008301526133778161333b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806133c557607f821691505b6020821081036133d8576133d761337e565b5b50919050565b7f455243313135354d657461646174613a2055524920717565727920666f72206e60008201527f6f6e6578697374656e7420746f6b656e00000000000000000000000000000000602082015250565b600061343a60308361296b565b9150613445826133de565b604082019050919050565b600060208201905081810360008301526134698161342d565b9050919050565b600081905092915050565b600061348682612960565b6134908185613470565b93506134a081856020860161297c565b80840191505092915050565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b60006134e2600583613470565b91506134ed826134ac565b600582019050919050565b6000613504828561347b565b9150613510828461347b565b915061351b826134d5565b91508190509392505050565b7f455243313135353a2043616e6e6f74204d696e74206120546f6b656e2049642060008201527f7468617420646f65736e27742065786973740000000000000000000000000000602082015250565b600061358360328361296b565b915061358e82613527565b604082019050919050565b600060208201905081810360008301526135b281613576565b9050919050565b7f496e76616c696420726563697069656e74206164647265737300000000000000600082015250565b60006135ef60198361296b565b91506135fa826135b9565b602082019050919050565b6000602082019050818103600083015261361e816135e2565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061365f82612805565b915061366a83612805565b925082820261367881612805565b9150828204841483151761368f5761368e613625565b5b5092915050565b7f496e73756666696369656e74206d696e74206665650000000000000000000000600082015250565b60006136cc60158361296b565b91506136d782613696565b602082019050919050565b600060208201905081810360008301526136fb816136bf565b9050919050565b600061370d82612805565b915061371883612805565b92508282019050808211156137305761372f613625565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061377082612805565b915061377b83612805565b92508261378b5761378a613736565b5b828204905092915050565b6000819050919050565b6137b16137ac82612805565b613796565b82525050565b60008160601b9050919050565b60006137cf826137b7565b9050919050565b60006137e1826137c4565b9050919050565b6137f96137f4826127c7565b6137d6565b82525050565b600061380b82876137a0565b60208201915061381b82866137e8565b60148201915061382b82856137a0565b60208201915061383b82846137a0565b60208201915081905095945050505050565b600061385882612805565b915061386383612805565b92508261387357613872613736565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006138e360208361296b565b91506138ee826138ad565b602082019050919050565b60006020820190508181036000830152613912816138d6565b9050919050565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b600061397560328361296b565b915061398082613919565b604082019050919050565b600060208201905081810360008301526139a481613968565b9050919050565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b6000613a0760298361296b565b9150613a12826139ab565b604082019050919050565b60006020820190508181036000830152613a36816139fa565b9050919050565b6000613a4882612805565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613a7a57613a79613625565b5b600182019050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302613ae77fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613aaa565b613af18683613aaa565b95508019841693508086168417925050509392505050565b6000819050919050565b6000613b2e613b29613b2484612805565b613b09565b612805565b9050919050565b6000819050919050565b613b4883613b13565b613b5c613b5482613b35565b848454613ab7565b825550505050565b600090565b613b71613b64565b613b7c818484613b3f565b505050565b5b81811015613ba057613b95600082613b69565b600181019050613b82565b5050565b601f821115613be557613bb681613a85565b613bbf84613a9a565b81016020851015613bce578190505b613be2613bda85613a9a565b830182613b81565b50505b505050565b600082821c905092915050565b6000613c0860001984600802613bea565b1980831691505092915050565b6000613c218383613bf7565b9150826002028217905092915050565b613c3a82612960565b67ffffffffffffffff811115613c5357613c52612a9c565b5b613c5d82546133ad565b613c68828285613ba4565b600060209050601f831160018114613c9b5760008415613c89578287015190505b613c938582613c15565b865550613cfb565b601f198416613ca986613a85565b60005b82811015613cd157848901518255600182019150602085019450602081019050613cac565b86831015613cee5784890151613cea601f891682613bf7565b8355505b6001600288020188555050505b505050505050565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b6000613d5f60298361296b565b9150613d6a82613d03565b604082019050919050565b60006020820190508181036000830152613d8e81613d52565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613df160268361296b565b9150613dfc82613d95565b604082019050919050565b60006020820190508181036000830152613e2081613de4565b9050919050565b6000613e3282612805565b9150613e3d83612805565b9250828203905081811115613e5557613e54613625565b5b92915050565b600060ff82169050919050565b6000613e7382613e5b565b9150613e7e83613e5b565b9250828201905060ff811115613e9757613e96613625565b5b92915050565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000613ef960218361296b565b9150613f0482613e9d565b604082019050919050565b60006020820190508181036000830152613f2881613eec565b9050919050565b6000604082019050613f44600083018561287b565b613f51602083018461287b565b9392505050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b6000613fb460288361296b565b9150613fbf82613f58565b604082019050919050565b60006020820190508181036000830152613fe381613fa7565b9050919050565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061404660258361296b565b915061405182613fea565b604082019050919050565b6000602082019050818103600083015261407581614039565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b60006140d8602a8361296b565b91506140e38261407c565b604082019050919050565b60006020820190508181036000830152614107816140cb565b9050919050565b600060408201905081810360008301526141288185612f68565b9050818103602083015261413c8184612f68565b90509392505050565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b60006141a160298361296b565b91506141ac82614145565b604082019050919050565b600060208201905081810360008301526141d081614194565b9050919050565b600081519050919050565b600082825260208201905092915050565b60006141fe826141d7565b61420881856141e2565b935061421881856020860161297c565b614221816129a6565b840191505092915050565b600060a08201905061424160008301886130d2565b61424e60208301876130d2565b61425b604083018661287b565b614268606083018561287b565b818103608083015261427a81846141f3565b90509695505050505050565b600081519050614295816128d1565b92915050565b6000602082840312156142b1576142b061279d565b5b60006142bf84828501614286565b91505092915050565b60008160e01c9050919050565b600060033d11156142f45760046000803e6142f16000516142c8565b90505b90565b600060443d1061438457614309612793565b60043d036004823e80513d602482011167ffffffffffffffff82111715614331575050614384565b808201805167ffffffffffffffff81111561434f5750505050614384565b80602083010160043d03850181111561436c575050505050614384565b61437b82602001850186612acb565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b60006143e360348361296b565b91506143ee82614387565b604082019050919050565b60006020820190508181036000830152614412816143d6565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b600061447560288361296b565b915061448082614419565b604082019050919050565b600060208201905081810360008301526144a481614468565b9050919050565b600060a0820190506144c060008301886130d2565b6144cd60208301876130d2565b81810360408301526144df8186612f68565b905081810360608301526144f38185612f68565b9050818103608083015261450781846141f3565b9050969550505050505056fea26469706673582212208012e1d572c62a81054a9456fe0af9f448d6c7b5101d2d1877d41f656410556464736f6c6343000812003300000000000000000000000032bd2811fb91bc46756232a0b8c6b2902d7d876300000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d51483569505579666339615a705965553768416f715338734658565361594d4a39775864643854724b5a32712f00000000000000000000

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

00000000000000000000000032bd2811fb91bc46756232a0b8c6b2902d7d876300000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d51483569505579666339615a705965553768416f715338734658565361594d4a39775864643854724b5a32712f00000000000000000000

-----Decoded View---------------
Arg [0] : feeWallet (address): 0x32bd2811fb91bc46756232a0b8c6b2902d7d8763
Arg [1] : baseURI (string): ipfs://QmQH5iPUyfc9aZpYeU7hAoqS8sFXVSaYMJ9wXdd8TrKZ2q/

-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 00000000000000000000000032bd2811fb91bc46756232a0b8c6b2902d7d8763
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [3] : 697066733a2f2f516d51483569505579666339615a705965553768416f715338
Arg [4] : 734658565361594d4a39775864643854724b5a32712f00000000000000000000


Deployed ByteCode Sourcemap

36670:4720:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22978:231;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22001:310;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36924:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41044:343;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38065:1280;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37355:114;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39353:261;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24917:442;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23375:524;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40829:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2606:103;;;;;;;;;;;;;:::i;:::-;;1955:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23972:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39907:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39622:277;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24199:168;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40020:91;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24439:401;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37228:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36801:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2864:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40119:108;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22978:231;23064:7;23111:1;23092:21;;:7;:21;;;23084:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;23179:9;:13;23189:2;23179:13;;;;;;;;;;;:22;23193:7;23179:22;;;;;;;;;;;;;;;;23172:29;;22978:231;;;;:::o;22001:310::-;22103:4;22155:26;22140:41;;;:11;:41;;;;:110;;;;22213:37;22198:52;;;:11;:52;;;;22140:110;:163;;;;22267:36;22291:11;22267:23;:36::i;:::-;22140:163;22120:183;;22001:310;;;:::o;36924:28::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;41044:343::-;41104:13;41138:16;41146:7;41138;:16::i;:::-;41130:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;41220:22;41245:18;:16;:18::i;:::-;41220:43;;41308:1;41289:8;41283:22;:26;:96;;;;;;;;;;;;;;;;;41336:8;41346:17;41355:7;41346:8;:17::i;:::-;41319:54;;;;;;;;;:::i;:::-;;;;;;;;;;;;;41283:96;41276:103;;;41044:343;;;:::o;38065:1280::-;38155:11;38163:2;38155:7;:11::i;:::-;38147:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;38254:10;38240:25;;:2;:25;;;38232:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;38338:6;38327:8;;:17;;;;:::i;:::-;38314:9;:30;38306:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;38383:27;38389:2;38393;38397:6;38383:27;;;;;;;;;;;;;;;;;:5;:27::i;:::-;38441:6;38421:12;:16;38434:2;38421:16;;;;;;;;;;;;:26;;;;;;;:::i;:::-;;;;;;;;38468:24;38485:2;38489;38468:16;:24::i;:::-;38531:4;38509:26;;:14;:18;38524:2;38509:18;;;;;;;;;;;;;;;;;;;;;:26;;;38505:833;;38560:2;38552:20;;:35;38585:1;38573:9;:13;;;;:::i;:::-;38552:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38610:10;;;;;;;;;;;38602:28;;:43;38643:1;38631:9;:13;;;;:::i;:::-;38602:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38505:833;;;38689:5;38667:27;;:14;:18;38682:2;38667:18;;;;;;;;;;;;;;;;;;;;;:27;;;38663:675;;38823:23;38849:12;:15;38862:1;38849:15;;;;;;;;;;;:22;;;;38823:48;;38908:1;38890:15;:19;38886:311;;;38930:19;39032:15;38987;39004:10;39016:2;39020:6;38970:57;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;38960:68;;;;;;38952:77;;:95;;;;:::i;:::-;38930:117;;39066:20;39089:12;:15;39102:1;39089:15;;;;;;;;;;;39105:11;39089:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;39066:51;;39144:12;39136:30;;:45;39179:1;39167:9;:13;;;;:::i;:::-;39136:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38911:286;;38886:311;39219:10;;;;;;;;;;;39211:28;;:43;39252:1;39240:9;:13;;;;:::i;:::-;39211:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38696:570;38663:675;;;39295:10;;;;;;;;;;;39287:28;;:39;39316:9;39287:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38663:675;38505:833;38065:1280;;;:::o;37355:114::-;37414:4;37438:14;:23;37453:7;37438:23;;;;;;;;;;;;;;;;;;;;;37431:30;;37355:114;;;:::o;39353:261::-;2186:12;:10;:12::i;:::-;2175:23;;:7;:5;:7::i;:::-;:23;;;2167:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39451:35:::1;39457:10;39469:2;39473:6;39481:4;39451:5;:35::i;:::-;39517:6;39497:12;:16;39510:2;39497:16;;;;;;;;;;;;:26;;;;;;;:::i;:::-;;;;;;;;39539:12;:16;39552:2;39539:16;;;;;;;;;;;;;;;;;;;;;39534:73;;39591:4;39572:12;:16;39585:2;39572:16;;;;;;;;;;;;:23;;;;;;;;;;;;;;;;;;39534:73;39353:261:::0;;;:::o;24917:442::-;25158:12;:10;:12::i;:::-;25150:20;;:4;:20;;;:60;;;;25174:36;25191:4;25197:12;:10;:12::i;:::-;25174:16;:36::i;:::-;25150:60;25128:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;25299:52;25322:4;25328:2;25332:3;25337:7;25346:4;25299:22;:52::i;:::-;24917:442;;;;;:::o;23375:524::-;23531:16;23592:3;:10;23573:8;:15;:29;23565:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;23661:30;23708:8;:15;23694:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23661:63;;23742:9;23737:122;23761:8;:15;23757:1;:19;23737:122;;;23817:30;23827:8;23836:1;23827:11;;;;;;;;:::i;:::-;;;;;;;;23840:3;23844:1;23840:6;;;;;;;;:::i;:::-;;;;;;;;23817:9;:30::i;:::-;23798:13;23812:1;23798:16;;;;;;;;:::i;:::-;;;;;;;:49;;;;;23778:3;;;;:::i;:::-;;;23737:122;;;;23878:13;23871:20;;;23375:524;;;;:::o;40829:101::-;2186:12;:10;:12::i;:::-;2175:23;;:7;:5;:7::i;:::-;:23;;;2167:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40914:8:::1;40903;:19;;;;;;:::i;:::-;;40829:101:::0;:::o;2606:103::-;2186:12;:10;:12::i;:::-;2175:23;;:7;:5;:7::i;:::-;:23;;;2167:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2671:30:::1;2698:1;2671:18;:30::i;:::-;2606:103::o:0;1955:87::-;2001:7;2028:6;;;;;;;;;;;2021:13;;1955:87;:::o;23972:155::-;24067:52;24086:12;:10;:12::i;:::-;24100:8;24110;24067:18;:52::i;:::-;23972:155;;:::o;39907:105::-;39961:7;39988:12;:16;40001:2;39988:16;;;;;;;;;;;;39981:23;;39907:105;;;:::o;39622:277::-;39692:4;39714:9;39726:1;39714:13;;39709:160;39733:12;:16;39746:2;39733:16;;;;;;;;;;;:23;;;;39729:1;:27;39709:160;;;39805:5;39782:28;;:12;:16;39795:2;39782:16;;;;;;;;;;;39799:1;39782:19;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:28;;;39778:80;;39838:4;39831:11;;;;;39778:80;39758:3;;;;;:::i;:::-;;;;39709:160;;;;39886:5;39879:12;;39622:277;;;;;:::o;24199:168::-;24298:4;24322:18;:27;24341:7;24322:27;;;;;;;;;;;;;;;:37;24350:8;24322:37;;;;;;;;;;;;;;;;;;;;;;;;;24315:44;;24199:168;;;;:::o;40020:91::-;2186:12;:10;:12::i;:::-;2175:23;;:7;:5;:7::i;:::-;:23;;;2167:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40096:7:::1;40085:8;:18;;;;40020:91:::0;:::o;24439:401::-;24655:12;:10;:12::i;:::-;24647:20;;:4;:20;;;:60;;;;24671:36;24688:4;24694:12;:10;:12::i;:::-;24671:16;:36::i;:::-;24647:60;24625:151;;;;;;;;;;;;:::i;:::-;;;;;;;;;24787:45;24805:4;24811:2;24815;24819:6;24827:4;24787:17;:45::i;:::-;24439:401;;;;;:::o;37228:119::-;2186:12;:10;:12::i;:::-;2175:23;;:7;:5;:7::i;:::-;:23;;;2167:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37334:5:::1;37308:14;:23;37323:7;37308:23;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;37228:119:::0;;:::o;36801:33::-;;;;:::o;2864:201::-;2186:12;:10;:12::i;:::-;2175:23;;:7;:5;:7::i;:::-;:23;;;2167:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2973:1:::1;2953:22;;:8;:22;;::::0;2945:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;3029:28;3048:8;3029:18;:28::i;:::-;2864:201:::0;:::o;40119:108::-;40174:4;40198:12;:21;40211:7;40198:21;;;;;;;;;;;;;;;;;;;;;40191:28;;40119:108;;;:::o;13356:157::-;13441:4;13480:25;13465:40;;;:11;:40;;;;13458:47;;13356:157;;;:::o;40938:100::-;40989:13;41022:8;41015:15;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40938:100;:::o;40235:586::-;40288:17;40328:1;40322:2;:7;40318:50;;40346:10;;;;;;;;;;;;;;;;;;;;;40318:50;40378:9;40390:2;40378:14;;40403;40428:72;40440:1;40435;:6;40428:72;;40458:8;;;;;:::i;:::-;;;;40486:2;40481:7;;;;;:::i;:::-;;;40428:72;;;40510:17;40540:6;40530:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40510:37;;40558:9;40570:6;40558:18;;40587:198;40600:1;40594:2;:7;40587:198;;40624:1;40622;:3;;;;:::i;:::-;40618:7;;40640:10;40680:2;40675;40670;:7;;;;:::i;:::-;:12;;;;:::i;:::-;40665:2;:17;;;;:::i;:::-;40654:2;:29;;;;:::i;:::-;40640:44;;40699:9;40718:4;40711:12;;40699:24;;40748:2;40738:4;40743:1;40738:7;;;;;;;;:::i;:::-;;;;;:12;;;;;;;;;;;40771:2;40765:8;;;;;:::i;:::-;;;40603:182;;40587:198;;;40808:4;40795:18;;40307:514;;;;40235:586;;;;:::o;29393:569::-;29560:1;29546:16;;:2;:16;;;29538:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;29613:16;29632:12;:10;:12::i;:::-;29613:31;;29657:102;29678:8;29696:1;29700:2;29704:21;29722:2;29704:17;:21::i;:::-;29727:25;29745:6;29727:17;:25::i;:::-;29754:4;29657:20;:102::i;:::-;29793:6;29772:9;:13;29782:2;29772:13;;;;;;;;;;;:17;29786:2;29772:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;29852:2;29815:52;;29848:1;29815:52;;29830:8;29815:52;;;29856:2;29860:6;29815:52;;;;;;;:::i;:::-;;;;;;;;29880:74;29911:8;29929:1;29933:2;29937;29941:6;29949:4;29880:30;:74::i;:::-;29527:435;29393:569;;;;:::o;37477:580::-;37578:1;37551:12;:16;37564:2;37551:16;;;;;;;;;;;:23;;;;:28;37547:503;;37610:12;:16;37623:2;37610:16;;;;;;;;;;;37632:2;37610:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37547:503;;;37668:16;37712:9;37707:230;37731:12;:16;37744:2;37731:16;;;;;;;;;;;:23;;;;37727:1;:27;37707:230;;;37807:2;37784:25;;:12;:16;37797:2;37784:16;;;;;;;;;;;37801:1;37784:19;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:25;;;37780:142;;37870:4;37856:18;;37897:5;;37780:142;37756:3;;;;;:::i;:::-;;;;37707:230;;;;37956:11;37951:88;;37998:12;:16;38011:2;37998:16;;;;;;;;;;;38020:2;37998:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37951:88;37653:397;37547:503;37477:580;;:::o;679:98::-;732:7;759:10;752:17;;679:98;:::o;27001:1074::-;27228:7;:14;27214:3;:10;:28;27206:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;27320:1;27306:16;;:2;:16;;;27298:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;27377:16;27396:12;:10;:12::i;:::-;27377:31;;27421:60;27442:8;27452:4;27458:2;27462:3;27467:7;27476:4;27421:20;:60::i;:::-;27499:9;27494:421;27518:3;:10;27514:1;:14;27494:421;;;27550:10;27563:3;27567:1;27563:6;;;;;;;;:::i;:::-;;;;;;;;27550:19;;27584:14;27601:7;27609:1;27601:10;;;;;;;;:::i;:::-;;;;;;;;27584:27;;27628:19;27650:9;:13;27660:2;27650:13;;;;;;;;;;;:19;27664:4;27650:19;;;;;;;;;;;;;;;;27628:41;;27707:6;27692:11;:21;;27684:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;27840:6;27826:11;:20;27804:9;:13;27814:2;27804:13;;;;;;;;;;;:19;27818:4;27804:19;;;;;;;;;;;;;;;:42;;;;27897:6;27876:9;:13;27886:2;27876:13;;;;;;;;;;;:17;27890:2;27876:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;27535:380;;;27530:3;;;;:::i;:::-;;;27494:421;;;;27962:2;27932:47;;27956:4;27932:47;;27946:8;27932:47;;;27966:3;27971:7;27932:47;;;;;;;:::i;:::-;;;;;;;;27992:75;28028:8;28038:4;28044:2;28048:3;28053:7;28062:4;27992:35;:75::i;:::-;27195:880;27001:1074;;;;;:::o;3225:191::-;3299:16;3318:6;;;;;;;;;;;3299:25;;3344:8;3335:6;;:17;;;;;;;;;;;;;;;;;;3399:8;3368:40;;3389:8;3368:40;;;;;;;;;;;;3288:128;3225:191;:::o;33187:331::-;33342:8;33333:17;;:5;:17;;;33325:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;33445:8;33407:18;:25;33426:5;33407:25;;;;;;;;;;;;;;;:35;33433:8;33407:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;33491:8;33469:41;;33484:5;33469:41;;;33501:8;33469:41;;;;;;:::i;:::-;;;;;;;;33187:331;;;:::o;25823:820::-;26025:1;26011:16;;:2;:16;;;26003:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;26082:16;26101:12;:10;:12::i;:::-;26082:31;;26126:96;26147:8;26157:4;26163:2;26167:21;26185:2;26167:17;:21::i;:::-;26190:25;26208:6;26190:17;:25::i;:::-;26217:4;26126:20;:96::i;:::-;26235:19;26257:9;:13;26267:2;26257:13;;;;;;;;;;;:19;26271:4;26257:19;;;;;;;;;;;;;;;;26235:41;;26310:6;26295:11;:21;;26287:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;26435:6;26421:11;:20;26399:9;:13;26409:2;26399:13;;;;;;;;;;;:19;26413:4;26399:19;;;;;;;;;;;;;;;:42;;;;26484:6;26463:9;:13;26473:2;26463:13;;;;;;;;;;;:17;26477:2;26463:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;26539:2;26508:46;;26533:4;26508:46;;26523:8;26508:46;;;26543:2;26547:6;26508:46;;;;;;;:::i;:::-;;;;;;;;26567:68;26598:8;26608:4;26614:2;26618;26622:6;26630:4;26567:30;:68::i;:::-;25992:651;;25823:820;;;;;:::o;36276:198::-;36342:16;36371:22;36410:1;36396:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36371:41;;36434:7;36423:5;36429:1;36423:8;;;;;;;;:::i;:::-;;;;;;;:18;;;;;36461:5;36454:12;;;36276:198;;;:::o;34474:221::-;;;;;;;:::o;34703:744::-;34918:15;:2;:13;;;:15::i;:::-;34914:526;;;34971:2;34954:38;;;34993:8;35003:4;35009:2;35013:6;35021:4;34954:72;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;34950:479;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;35302:6;35295:14;;;;;;;;;;;:::i;:::-;;;;;;;;34950:479;;;35351:62;;;;;;;;;;:::i;:::-;;;;;;;;34950:479;35088:43;;;35076:55;;;:8;:55;;;;35072:154;;35156:50;;;;;;;;;;:::i;:::-;;;;;;;;35072:154;35027:214;34914:526;34703:744;;;;;;:::o;35455:813::-;35695:15;:2;:13;;;:15::i;:::-;35691:570;;;35748:2;35731:43;;;35775:8;35785:4;35791:3;35796:7;35805:4;35731:79;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;35727:523;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;36123:6;36116:14;;;;;;;;;;;:::i;:::-;;;;;;;;35727:523;;;36172:62;;;;;;;;;;:::i;:::-;;;;;;;;35727:523;35904:48;;;35892:60;;;:8;:60;;;;35888:159;;35977:50;;;;;;;;;;:::i;:::-;;;;;;;;35888:159;35811:251;35691:570;35455:813;;;;;;:::o;4243:387::-;4303:4;4511:12;4578:7;4566:20;4558:28;;4621:1;4614:4;:8;4607:15;;;4243:387;;;:::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:99::-;3265:6;3299:5;3293:12;3283:22;;3213:99;;;:::o;3318:169::-;3402:11;3436:6;3431:3;3424:19;3476:4;3471:3;3467:14;3452:29;;3318:169;;;;:::o;3493:246::-;3574:1;3584:113;3598:6;3595:1;3592:13;3584:113;;;3683:1;3678:3;3674:11;3668:18;3664:1;3659:3;3655:11;3648:39;3620:2;3617:1;3613:10;3608:15;;3584:113;;;3731:1;3722:6;3717:3;3713:16;3706:27;3555:184;3493:246;;;:::o;3745:102::-;3786:6;3837:2;3833:7;3828:2;3821:5;3817:14;3813:28;3803:38;;3745:102;;;:::o;3853:377::-;3941:3;3969:39;4002:5;3969:39;:::i;:::-;4024:71;4088:6;4083:3;4024:71;:::i;:::-;4017:78;;4104:65;4162:6;4157:3;4150:4;4143:5;4139:16;4104:65;:::i;:::-;4194:29;4216:6;4194:29;:::i;:::-;4189:3;4185:39;4178:46;;3945:285;3853:377;;;;:::o;4236:313::-;4349:4;4387:2;4376:9;4372:18;4364:26;;4436:9;4430:4;4426:20;4422:1;4411:9;4407:17;4400:47;4464:78;4537:4;4528:6;4464:78;:::i;:::-;4456:86;;4236:313;;;;:::o;4555:329::-;4614:6;4663:2;4651:9;4642:7;4638:23;4634:32;4631:119;;;4669:79;;:::i;:::-;4631:119;4789:1;4814:53;4859:7;4850:6;4839:9;4835:22;4814:53;:::i;:::-;4804:63;;4760:117;4555:329;;;;:::o;4890:619::-;4967:6;4975;4983;5032:2;5020:9;5011:7;5007:23;5003:32;5000:119;;;5038:79;;:::i;:::-;5000:119;5158:1;5183:53;5228:7;5219:6;5208:9;5204:22;5183:53;:::i;:::-;5173:63;;5129:117;5285:2;5311:53;5356:7;5347:6;5336:9;5332:22;5311:53;:::i;:::-;5301:63;;5256:118;5413:2;5439:53;5484:7;5475:6;5464:9;5460:22;5439:53;:::i;:::-;5429:63;;5384:118;4890:619;;;;;:::o;5515:117::-;5624:1;5621;5614:12;5638:117;5747:1;5744;5737:12;5761:180;5809:77;5806:1;5799:88;5906:4;5903:1;5896:15;5930:4;5927:1;5920:15;5947:281;6030:27;6052:4;6030:27;:::i;:::-;6022:6;6018:40;6160:6;6148:10;6145:22;6124:18;6112:10;6109:34;6106:62;6103:88;;;6171:18;;:::i;:::-;6103:88;6211:10;6207:2;6200:22;5990:238;5947:281;;:::o;6234:129::-;6268:6;6295:20;;:::i;:::-;6285:30;;6324:33;6352:4;6344:6;6324:33;:::i;:::-;6234:129;;;:::o;6369:307::-;6430:4;6520:18;6512:6;6509:30;6506:56;;;6542:18;;:::i;:::-;6506:56;6580:29;6602:6;6580:29;:::i;:::-;6572:37;;6664:4;6658;6654:15;6646:23;;6369:307;;;:::o;6682:146::-;6779:6;6774:3;6769;6756:30;6820:1;6811:6;6806:3;6802:16;6795:27;6682:146;;;:::o;6834:423::-;6911:5;6936:65;6952:48;6993:6;6952:48;:::i;:::-;6936:65;:::i;:::-;6927:74;;7024:6;7017:5;7010:21;7062:4;7055:5;7051:16;7100:3;7091:6;7086:3;7082:16;7079:25;7076:112;;;7107:79;;:::i;:::-;7076:112;7197:54;7244:6;7239:3;7234;7197:54;:::i;:::-;6917:340;6834:423;;;;;:::o;7276:338::-;7331:5;7380:3;7373:4;7365:6;7361:17;7357:27;7347:122;;7388:79;;:::i;:::-;7347:122;7505:6;7492:20;7530:78;7604:3;7596:6;7589:4;7581:6;7577:17;7530:78;:::i;:::-;7521:87;;7337:277;7276:338;;;;:::o;7620:797::-;7706:6;7714;7722;7771:2;7759:9;7750:7;7746:23;7742:32;7739:119;;;7777:79;;:::i;:::-;7739:119;7897:1;7922:53;7967:7;7958:6;7947:9;7943:22;7922:53;:::i;:::-;7912:63;;7868:117;8024:2;8050:53;8095:7;8086:6;8075:9;8071:22;8050:53;:::i;:::-;8040:63;;7995:118;8180:2;8169:9;8165:18;8152:32;8211:18;8203:6;8200:30;8197:117;;;8233:79;;:::i;:::-;8197:117;8338:62;8392:7;8383:6;8372:9;8368:22;8338:62;:::i;:::-;8328:72;;8123:287;7620:797;;;;;:::o;8423:311::-;8500:4;8590:18;8582:6;8579:30;8576:56;;;8612:18;;:::i;:::-;8576:56;8662:4;8654:6;8650:17;8642:25;;8722:4;8716;8712:15;8704:23;;8423:311;;;:::o;8740:117::-;8849:1;8846;8839:12;8880:710;8976:5;9001:81;9017:64;9074:6;9017:64;:::i;:::-;9001:81;:::i;:::-;8992:90;;9102:5;9131:6;9124:5;9117:21;9165:4;9158:5;9154:16;9147:23;;9218:4;9210:6;9206:17;9198:6;9194:30;9247:3;9239:6;9236:15;9233:122;;;9266:79;;:::i;:::-;9233:122;9381:6;9364:220;9398:6;9393:3;9390:15;9364:220;;;9473:3;9502:37;9535:3;9523:10;9502:37;:::i;:::-;9497:3;9490:50;9569:4;9564:3;9560:14;9553:21;;9440:144;9424:4;9419:3;9415:14;9408:21;;9364:220;;;9368:21;8982:608;;8880:710;;;;;:::o;9613:370::-;9684:5;9733:3;9726:4;9718:6;9714:17;9710:27;9700:122;;9741:79;;:::i;:::-;9700:122;9858:6;9845:20;9883:94;9973:3;9965:6;9958:4;9950:6;9946:17;9883:94;:::i;:::-;9874:103;;9690:293;9613:370;;;;:::o;9989:1509::-;10143:6;10151;10159;10167;10175;10224:3;10212:9;10203:7;10199:23;10195:33;10192:120;;;10231:79;;:::i;:::-;10192:120;10351:1;10376:53;10421:7;10412:6;10401:9;10397:22;10376:53;:::i;:::-;10366:63;;10322:117;10478:2;10504:53;10549:7;10540:6;10529:9;10525:22;10504:53;:::i;:::-;10494:63;;10449:118;10634:2;10623:9;10619:18;10606:32;10665:18;10657:6;10654:30;10651:117;;;10687:79;;:::i;:::-;10651:117;10792:78;10862:7;10853:6;10842:9;10838:22;10792:78;:::i;:::-;10782:88;;10577:303;10947:2;10936:9;10932:18;10919:32;10978:18;10970:6;10967:30;10964:117;;;11000:79;;:::i;:::-;10964:117;11105:78;11175:7;11166:6;11155:9;11151:22;11105:78;:::i;:::-;11095:88;;10890:303;11260:3;11249:9;11245:19;11232:33;11292:18;11284:6;11281:30;11278:117;;;11314:79;;:::i;:::-;11278:117;11419:62;11473:7;11464:6;11453:9;11449:22;11419:62;:::i;:::-;11409:72;;11203:288;9989:1509;;;;;;;;:::o;11504:311::-;11581:4;11671:18;11663:6;11660:30;11657:56;;;11693:18;;:::i;:::-;11657:56;11743:4;11735:6;11731:17;11723:25;;11803:4;11797;11793:15;11785:23;;11504:311;;;:::o;11838:710::-;11934:5;11959:81;11975:64;12032:6;11975:64;:::i;:::-;11959:81;:::i;:::-;11950:90;;12060:5;12089:6;12082:5;12075:21;12123:4;12116:5;12112:16;12105:23;;12176:4;12168:6;12164:17;12156:6;12152:30;12205:3;12197:6;12194:15;12191:122;;;12224:79;;:::i;:::-;12191:122;12339:6;12322:220;12356:6;12351:3;12348:15;12322:220;;;12431:3;12460:37;12493:3;12481:10;12460:37;:::i;:::-;12455:3;12448:50;12527:4;12522:3;12518:14;12511:21;;12398:144;12382:4;12377:3;12373:14;12366:21;;12322:220;;;12326:21;11940:608;;11838:710;;;;;:::o;12571:370::-;12642:5;12691:3;12684:4;12676:6;12672:17;12668:27;12658:122;;12699:79;;:::i;:::-;12658:122;12816:6;12803:20;12841:94;12931:3;12923:6;12916:4;12908:6;12904:17;12841:94;:::i;:::-;12832:103;;12648:293;12571:370;;;;:::o;12947:894::-;13065:6;13073;13122:2;13110:9;13101:7;13097:23;13093:32;13090:119;;;13128:79;;:::i;:::-;13090:119;13276:1;13265:9;13261:17;13248:31;13306:18;13298:6;13295:30;13292:117;;;13328:79;;:::i;:::-;13292:117;13433:78;13503:7;13494:6;13483:9;13479:22;13433:78;:::i;:::-;13423:88;;13219:302;13588:2;13577:9;13573:18;13560:32;13619:18;13611:6;13608:30;13605:117;;;13641:79;;:::i;:::-;13605:117;13746:78;13816:7;13807:6;13796:9;13792:22;13746:78;:::i;:::-;13736:88;;13531:303;12947:894;;;;;:::o;13847:114::-;13914:6;13948:5;13942:12;13932:22;;13847:114;;;:::o;13967:184::-;14066:11;14100:6;14095:3;14088:19;14140:4;14135:3;14131:14;14116:29;;13967:184;;;;:::o;14157:132::-;14224:4;14247:3;14239:11;;14277:4;14272:3;14268:14;14260:22;;14157:132;;;:::o;14295:108::-;14372:24;14390:5;14372:24;:::i;:::-;14367:3;14360:37;14295:108;;:::o;14409:179::-;14478:10;14499:46;14541:3;14533:6;14499:46;:::i;:::-;14577:4;14572:3;14568:14;14554:28;;14409:179;;;;:::o;14594:113::-;14664:4;14696;14691:3;14687:14;14679:22;;14594:113;;;:::o;14743:732::-;14862:3;14891:54;14939:5;14891:54;:::i;:::-;14961:86;15040:6;15035:3;14961:86;:::i;:::-;14954:93;;15071:56;15121:5;15071:56;:::i;:::-;15150:7;15181:1;15166:284;15191:6;15188:1;15185:13;15166:284;;;15267:6;15261:13;15294:63;15353:3;15338:13;15294:63;:::i;:::-;15287:70;;15380:60;15433:6;15380:60;:::i;:::-;15370:70;;15226:224;15213:1;15210;15206:9;15201:14;;15166:284;;;15170:14;15466:3;15459:10;;14867:608;;;14743:732;;;;:::o;15481:373::-;15624:4;15662:2;15651:9;15647:18;15639:26;;15711:9;15705:4;15701:20;15697:1;15686:9;15682:17;15675:47;15739:108;15842:4;15833:6;15739:108;:::i;:::-;15731:116;;15481:373;;;;:::o;15860:308::-;15922:4;16012:18;16004:6;16001:30;15998:56;;;16034:18;;:::i;:::-;15998:56;16072:29;16094:6;16072:29;:::i;:::-;16064:37;;16156:4;16150;16146:15;16138:23;;15860:308;;;:::o;16174:425::-;16252:5;16277:66;16293:49;16335:6;16293:49;:::i;:::-;16277:66;:::i;:::-;16268:75;;16366:6;16359:5;16352:21;16404:4;16397:5;16393:16;16442:3;16433:6;16428:3;16424:16;16421:25;16418:112;;;16449:79;;:::i;:::-;16418:112;16539:54;16586:6;16581:3;16576;16539:54;:::i;:::-;16258:341;16174:425;;;;;:::o;16619:340::-;16675:5;16724:3;16717:4;16709:6;16705:17;16701:27;16691:122;;16732:79;;:::i;:::-;16691:122;16849:6;16836:20;16874:79;16949:3;16941:6;16934:4;16926:6;16922:17;16874:79;:::i;:::-;16865:88;;16681:278;16619:340;;;;:::o;16965:509::-;17034:6;17083:2;17071:9;17062:7;17058:23;17054:32;17051:119;;;17089:79;;:::i;:::-;17051:119;17237:1;17226:9;17222:17;17209:31;17267:18;17259:6;17256:30;17253:117;;;17289:79;;:::i;:::-;17253:117;17394:63;17449:7;17440:6;17429:9;17425:22;17394:63;:::i;:::-;17384:73;;17180:287;16965:509;;;;:::o;17480:118::-;17567:24;17585:5;17567:24;:::i;:::-;17562:3;17555:37;17480:118;;:::o;17604:222::-;17697:4;17735:2;17724:9;17720:18;17712:26;;17748:71;17816:1;17805:9;17801:17;17792:6;17748:71;:::i;:::-;17604:222;;;;:::o;17832:116::-;17902:21;17917:5;17902:21;:::i;:::-;17895:5;17892:32;17882:60;;17938:1;17935;17928:12;17882:60;17832:116;:::o;17954:133::-;17997:5;18035:6;18022:20;18013:29;;18051:30;18075:5;18051:30;:::i;:::-;17954:133;;;;:::o;18093:468::-;18158:6;18166;18215:2;18203:9;18194:7;18190:23;18186:32;18183:119;;;18221:79;;:::i;:::-;18183:119;18341:1;18366:53;18411:7;18402:6;18391:9;18387:22;18366:53;:::i;:::-;18356:63;;18312:117;18468:2;18494:50;18536:7;18527:6;18516:9;18512:22;18494:50;:::i;:::-;18484:60;;18439:115;18093:468;;;;;:::o;18567:474::-;18635:6;18643;18692:2;18680:9;18671:7;18667:23;18663:32;18660:119;;;18698:79;;:::i;:::-;18660:119;18818:1;18843:53;18888:7;18879:6;18868:9;18864:22;18843:53;:::i;:::-;18833:63;;18789:117;18945:2;18971:53;19016:7;19007:6;18996:9;18992:22;18971:53;:::i;:::-;18961:63;;18916:118;18567:474;;;;;:::o;19047:::-;19115:6;19123;19172:2;19160:9;19151:7;19147:23;19143:32;19140:119;;;19178:79;;:::i;:::-;19140:119;19298:1;19323:53;19368:7;19359:6;19348:9;19344:22;19323:53;:::i;:::-;19313:63;;19269:117;19425:2;19451:53;19496:7;19487:6;19476:9;19472:22;19451:53;:::i;:::-;19441:63;;19396:118;19047:474;;;;;:::o;19527:1089::-;19631:6;19639;19647;19655;19663;19712:3;19700:9;19691:7;19687:23;19683:33;19680:120;;;19719:79;;:::i;:::-;19680:120;19839:1;19864:53;19909:7;19900:6;19889:9;19885:22;19864:53;:::i;:::-;19854:63;;19810:117;19966:2;19992:53;20037:7;20028:6;20017:9;20013:22;19992:53;:::i;:::-;19982:63;;19937:118;20094:2;20120:53;20165:7;20156:6;20145:9;20141:22;20120:53;:::i;:::-;20110:63;;20065:118;20222:2;20248:53;20293:7;20284:6;20273:9;20269:22;20248:53;:::i;:::-;20238:63;;20193:118;20378:3;20367:9;20363:19;20350:33;20410:18;20402:6;20399:30;20396:117;;;20432:79;;:::i;:::-;20396:117;20537:62;20591:7;20582:6;20571:9;20567:22;20537:62;:::i;:::-;20527:72;;20321:288;19527:1089;;;;;;;;:::o;20622:468::-;20687:6;20695;20744:2;20732:9;20723:7;20719:23;20715:32;20712:119;;;20750:79;;:::i;:::-;20712:119;20870:1;20895:53;20940:7;20931:6;20920:9;20916:22;20895:53;:::i;:::-;20885:63;;20841:117;20997:2;21023:50;21065:7;21056:6;21045:9;21041:22;21023:50;:::i;:::-;21013:60;;20968:115;20622:468;;;;;:::o;21096:329::-;21155:6;21204:2;21192:9;21183:7;21179:23;21175:32;21172:119;;;21210:79;;:::i;:::-;21172:119;21330:1;21355:53;21400:7;21391:6;21380:9;21376:22;21355:53;:::i;:::-;21345:63;;21301:117;21096:329;;;;:::o;21431:230::-;21571:34;21567:1;21559:6;21555:14;21548:58;21640:13;21635:2;21627:6;21623:15;21616:38;21431:230;:::o;21667:366::-;21809:3;21830:67;21894:2;21889:3;21830:67;:::i;:::-;21823:74;;21906:93;21995:3;21906:93;:::i;:::-;22024:2;22019:3;22015:12;22008:19;;21667:366;;;:::o;22039:419::-;22205:4;22243:2;22232:9;22228:18;22220:26;;22292:9;22286:4;22282:20;22278:1;22267:9;22263:17;22256:47;22320:131;22446:4;22320:131;:::i;:::-;22312:139;;22039:419;;;:::o;22464:180::-;22512:77;22509:1;22502:88;22609:4;22606:1;22599:15;22633:4;22630:1;22623:15;22650:320;22694:6;22731:1;22725:4;22721:12;22711:22;;22778:1;22772:4;22768:12;22799:18;22789:81;;22855:4;22847:6;22843:17;22833:27;;22789:81;22917:2;22909:6;22906:14;22886:18;22883:38;22880:84;;22936:18;;:::i;:::-;22880:84;22701:269;22650:320;;;:::o;22976:235::-;23116:34;23112:1;23104:6;23100:14;23093:58;23185:18;23180:2;23172:6;23168:15;23161:43;22976:235;:::o;23217:366::-;23359:3;23380:67;23444:2;23439:3;23380:67;:::i;:::-;23373:74;;23456:93;23545:3;23456:93;:::i;:::-;23574:2;23569:3;23565:12;23558:19;;23217:366;;;:::o;23589:419::-;23755:4;23793:2;23782:9;23778:18;23770:26;;23842:9;23836:4;23832:20;23828:1;23817:9;23813:17;23806:47;23870:131;23996:4;23870:131;:::i;:::-;23862:139;;23589:419;;;:::o;24014:148::-;24116:11;24153:3;24138:18;;24014:148;;;;:::o;24168:390::-;24274:3;24302:39;24335:5;24302:39;:::i;:::-;24357:89;24439:6;24434:3;24357:89;:::i;:::-;24350:96;;24455:65;24513:6;24508:3;24501:4;24494:5;24490:16;24455:65;:::i;:::-;24545:6;24540:3;24536:16;24529:23;;24278:280;24168:390;;;;:::o;24564:155::-;24704:7;24700:1;24692:6;24688:14;24681:31;24564:155;:::o;24725:400::-;24885:3;24906:84;24988:1;24983:3;24906:84;:::i;:::-;24899:91;;24999:93;25088:3;24999:93;:::i;:::-;25117:1;25112:3;25108:11;25101:18;;24725:400;;;:::o;25131:701::-;25412:3;25434:95;25525:3;25516:6;25434:95;:::i;:::-;25427:102;;25546:95;25637:3;25628:6;25546:95;:::i;:::-;25539:102;;25658:148;25802:3;25658:148;:::i;:::-;25651:155;;25823:3;25816:10;;25131:701;;;;;:::o;25838:237::-;25978:34;25974:1;25966:6;25962:14;25955:58;26047:20;26042:2;26034:6;26030:15;26023:45;25838:237;:::o;26081:366::-;26223:3;26244:67;26308:2;26303:3;26244:67;:::i;:::-;26237:74;;26320:93;26409:3;26320:93;:::i;:::-;26438:2;26433:3;26429:12;26422:19;;26081:366;;;:::o;26453:419::-;26619:4;26657:2;26646:9;26642:18;26634:26;;26706:9;26700:4;26696:20;26692:1;26681:9;26677:17;26670:47;26734:131;26860:4;26734:131;:::i;:::-;26726:139;;26453:419;;;:::o;26878:175::-;27018:27;27014:1;27006:6;27002:14;26995:51;26878:175;:::o;27059:366::-;27201:3;27222:67;27286:2;27281:3;27222:67;:::i;:::-;27215:74;;27298:93;27387:3;27298:93;:::i;:::-;27416:2;27411:3;27407:12;27400:19;;27059:366;;;:::o;27431:419::-;27597:4;27635:2;27624:9;27620:18;27612:26;;27684:9;27678:4;27674:20;27670:1;27659:9;27655:17;27648:47;27712:131;27838:4;27712:131;:::i;:::-;27704:139;;27431:419;;;:::o;27856:180::-;27904:77;27901:1;27894:88;28001:4;27998:1;27991:15;28025:4;28022:1;28015:15;28042:410;28082:7;28105:20;28123:1;28105:20;:::i;:::-;28100:25;;28139:20;28157:1;28139:20;:::i;:::-;28134:25;;28194:1;28191;28187:9;28216:30;28234:11;28216:30;:::i;:::-;28205:41;;28395:1;28386:7;28382:15;28379:1;28376:22;28356:1;28349:9;28329:83;28306:139;;28425:18;;:::i;:::-;28306:139;28090:362;28042:410;;;;:::o;28458:171::-;28598:23;28594:1;28586:6;28582:14;28575:47;28458:171;:::o;28635:366::-;28777:3;28798:67;28862:2;28857:3;28798:67;:::i;:::-;28791:74;;28874:93;28963:3;28874:93;:::i;:::-;28992:2;28987:3;28983:12;28976:19;;28635:366;;;:::o;29007:419::-;29173:4;29211:2;29200:9;29196:18;29188:26;;29260:9;29254:4;29250:20;29246:1;29235:9;29231:17;29224:47;29288:131;29414:4;29288:131;:::i;:::-;29280:139;;29007:419;;;:::o;29432:191::-;29472:3;29491:20;29509:1;29491:20;:::i;:::-;29486:25;;29525:20;29543:1;29525:20;:::i;:::-;29520:25;;29568:1;29565;29561:9;29554:16;;29589:3;29586:1;29583:10;29580:36;;;29596:18;;:::i;:::-;29580:36;29432:191;;;;:::o;29629:180::-;29677:77;29674:1;29667:88;29774:4;29771:1;29764:15;29798:4;29795:1;29788:15;29815:185;29855:1;29872:20;29890:1;29872:20;:::i;:::-;29867:25;;29906:20;29924:1;29906:20;:::i;:::-;29901:25;;29945:1;29935:35;;29950:18;;:::i;:::-;29935:35;29992:1;29989;29985:9;29980:14;;29815:185;;;;:::o;30006:79::-;30045:7;30074:5;30063:16;;30006:79;;;:::o;30091:157::-;30196:45;30216:24;30234:5;30216:24;:::i;:::-;30196:45;:::i;:::-;30191:3;30184:58;30091:157;;:::o;30254:94::-;30287:8;30335:5;30331:2;30327:14;30306:35;;30254:94;;;:::o;30354:::-;30393:7;30422:20;30436:5;30422:20;:::i;:::-;30411:31;;30354:94;;;:::o;30454:100::-;30493:7;30522:26;30542:5;30522:26;:::i;:::-;30511:37;;30454:100;;;:::o;30560:157::-;30665:45;30685:24;30703:5;30685:24;:::i;:::-;30665:45;:::i;:::-;30660:3;30653:58;30560:157;;:::o;30723:679::-;30919:3;30934:75;31005:3;30996:6;30934:75;:::i;:::-;31034:2;31029:3;31025:12;31018:19;;31047:75;31118:3;31109:6;31047:75;:::i;:::-;31147:2;31142:3;31138:12;31131:19;;31160:75;31231:3;31222:6;31160:75;:::i;:::-;31260:2;31255:3;31251:12;31244:19;;31273:75;31344:3;31335:6;31273:75;:::i;:::-;31373:2;31368:3;31364:12;31357:19;;31393:3;31386:10;;30723:679;;;;;;;:::o;31408:176::-;31440:1;31457:20;31475:1;31457:20;:::i;:::-;31452:25;;31491:20;31509:1;31491:20;:::i;:::-;31486:25;;31530:1;31520:35;;31535:18;;:::i;:::-;31520:35;31576:1;31573;31569:9;31564:14;;31408:176;;;;:::o;31590:180::-;31638:77;31635:1;31628:88;31735:4;31732:1;31725:15;31759:4;31756:1;31749:15;31776:182;31916:34;31912:1;31904:6;31900:14;31893:58;31776:182;:::o;31964:366::-;32106:3;32127:67;32191:2;32186:3;32127:67;:::i;:::-;32120:74;;32203:93;32292:3;32203:93;:::i;:::-;32321:2;32316:3;32312:12;32305:19;;31964:366;;;:::o;32336:419::-;32502:4;32540:2;32529:9;32525:18;32517:26;;32589:9;32583:4;32579:20;32575:1;32564:9;32560:17;32553:47;32617:131;32743:4;32617:131;:::i;:::-;32609:139;;32336:419;;;:::o;32761:237::-;32901:34;32897:1;32889:6;32885:14;32878:58;32970:20;32965:2;32957:6;32953:15;32946:45;32761:237;:::o;33004:366::-;33146:3;33167:67;33231:2;33226:3;33167:67;:::i;:::-;33160:74;;33243:93;33332:3;33243:93;:::i;:::-;33361:2;33356:3;33352:12;33345:19;;33004:366;;;:::o;33376:419::-;33542:4;33580:2;33569:9;33565:18;33557:26;;33629:9;33623:4;33619:20;33615:1;33604:9;33600:17;33593:47;33657:131;33783:4;33657:131;:::i;:::-;33649:139;;33376:419;;;:::o;33801:228::-;33941:34;33937:1;33929:6;33925:14;33918:58;34010:11;34005:2;33997:6;33993:15;33986:36;33801:228;:::o;34035:366::-;34177:3;34198:67;34262:2;34257:3;34198:67;:::i;:::-;34191:74;;34274:93;34363:3;34274:93;:::i;:::-;34392:2;34387:3;34383:12;34376:19;;34035:366;;;:::o;34407:419::-;34573:4;34611:2;34600:9;34596:18;34588:26;;34660:9;34654:4;34650:20;34646:1;34635:9;34631:17;34624:47;34688:131;34814:4;34688:131;:::i;:::-;34680:139;;34407:419;;;:::o;34832:233::-;34871:3;34894:24;34912:5;34894:24;:::i;:::-;34885:33;;34940:66;34933:5;34930:77;34927:103;;35010:18;;:::i;:::-;34927:103;35057:1;35050:5;35046:13;35039:20;;34832:233;;;:::o;35071:141::-;35120:4;35143:3;35135:11;;35166:3;35163:1;35156:14;35200:4;35197:1;35187:18;35179:26;;35071:141;;;:::o;35218:93::-;35255:6;35302:2;35297;35290:5;35286:14;35282:23;35272:33;;35218:93;;;:::o;35317:107::-;35361:8;35411:5;35405:4;35401:16;35380:37;;35317:107;;;;:::o;35430:393::-;35499:6;35549:1;35537:10;35533:18;35572:97;35602:66;35591:9;35572:97;:::i;:::-;35690:39;35720:8;35709:9;35690:39;:::i;:::-;35678:51;;35762:4;35758:9;35751:5;35747:21;35738:30;;35811:4;35801:8;35797:19;35790:5;35787:30;35777:40;;35506:317;;35430:393;;;;;:::o;35829:60::-;35857:3;35878:5;35871:12;;35829:60;;;:::o;35895:142::-;35945:9;35978:53;35996:34;36005:24;36023:5;36005:24;:::i;:::-;35996:34;:::i;:::-;35978:53;:::i;:::-;35965:66;;35895:142;;;:::o;36043:75::-;36086:3;36107:5;36100:12;;36043:75;;;:::o;36124:269::-;36234:39;36265:7;36234:39;:::i;:::-;36295:91;36344:41;36368:16;36344:41;:::i;:::-;36336:6;36329:4;36323:11;36295:91;:::i;:::-;36289:4;36282:105;36200:193;36124:269;;;:::o;36399:73::-;36444:3;36399:73;:::o;36478:189::-;36555:32;;:::i;:::-;36596:65;36654:6;36646;36640:4;36596:65;:::i;:::-;36531:136;36478:189;;:::o;36673:186::-;36733:120;36750:3;36743:5;36740:14;36733:120;;;36804:39;36841:1;36834:5;36804:39;:::i;:::-;36777:1;36770:5;36766:13;36757:22;;36733:120;;;36673:186;;:::o;36865:543::-;36966:2;36961:3;36958:11;36955:446;;;37000:38;37032:5;37000:38;:::i;:::-;37084:29;37102:10;37084:29;:::i;:::-;37074:8;37070:44;37267:2;37255:10;37252:18;37249:49;;;37288:8;37273:23;;37249:49;37311:80;37367:22;37385:3;37367:22;:::i;:::-;37357:8;37353:37;37340:11;37311:80;:::i;:::-;36970:431;;36955:446;36865:543;;;:::o;37414:117::-;37468:8;37518:5;37512:4;37508:16;37487:37;;37414:117;;;;:::o;37537:169::-;37581:6;37614:51;37662:1;37658:6;37650:5;37647:1;37643:13;37614:51;:::i;:::-;37610:56;37695:4;37689;37685:15;37675:25;;37588:118;37537:169;;;;:::o;37711:295::-;37787:4;37933:29;37958:3;37952:4;37933:29;:::i;:::-;37925:37;;37995:3;37992:1;37988:11;37982:4;37979:21;37971:29;;37711:295;;;;:::o;38011:1395::-;38128:37;38161:3;38128:37;:::i;:::-;38230:18;38222:6;38219:30;38216:56;;;38252:18;;:::i;:::-;38216:56;38296:38;38328:4;38322:11;38296:38;:::i;:::-;38381:67;38441:6;38433;38427:4;38381:67;:::i;:::-;38475:1;38499:4;38486:17;;38531:2;38523:6;38520:14;38548:1;38543:618;;;;39205:1;39222:6;39219:77;;;39271:9;39266:3;39262:19;39256:26;39247:35;;39219:77;39322:67;39382:6;39375:5;39322:67;:::i;:::-;39316:4;39309:81;39178:222;38513:887;;38543:618;38595:4;38591:9;38583:6;38579:22;38629:37;38661:4;38629:37;:::i;:::-;38688:1;38702:208;38716:7;38713:1;38710:14;38702:208;;;38795:9;38790:3;38786:19;38780:26;38772:6;38765:42;38846:1;38838:6;38834:14;38824:24;;38893:2;38882:9;38878:18;38865:31;;38739:4;38736:1;38732:12;38727:17;;38702:208;;;38938:6;38929:7;38926:19;38923:179;;;38996:9;38991:3;38987:19;38981:26;39039:48;39081:4;39073:6;39069:17;39058:9;39039:48;:::i;:::-;39031:6;39024:64;38946:156;38923:179;39148:1;39144;39136:6;39132:14;39128:22;39122:4;39115:36;38550:611;;;38513:887;;38103:1303;;;38011:1395;;:::o;39412:228::-;39552:34;39548:1;39540:6;39536:14;39529:58;39621:11;39616:2;39608:6;39604:15;39597:36;39412:228;:::o;39646:366::-;39788:3;39809:67;39873:2;39868:3;39809:67;:::i;:::-;39802:74;;39885:93;39974:3;39885:93;:::i;:::-;40003:2;39998:3;39994:12;39987:19;;39646:366;;;:::o;40018:419::-;40184:4;40222:2;40211:9;40207:18;40199:26;;40271:9;40265:4;40261:20;40257:1;40246:9;40242:17;40235:47;40299:131;40425:4;40299:131;:::i;:::-;40291:139;;40018:419;;;:::o;40443:225::-;40583:34;40579:1;40571:6;40567:14;40560:58;40652:8;40647:2;40639:6;40635:15;40628:33;40443:225;:::o;40674:366::-;40816:3;40837:67;40901:2;40896:3;40837:67;:::i;:::-;40830:74;;40913:93;41002:3;40913:93;:::i;:::-;41031:2;41026:3;41022:12;41015:19;;40674:366;;;:::o;41046:419::-;41212:4;41250:2;41239:9;41235:18;41227:26;;41299:9;41293:4;41289:20;41285:1;41274:9;41270:17;41263:47;41327:131;41453:4;41327:131;:::i;:::-;41319:139;;41046:419;;;:::o;41471:194::-;41511:4;41531:20;41549:1;41531:20;:::i;:::-;41526:25;;41565:20;41583:1;41565:20;:::i;:::-;41560:25;;41609:1;41606;41602:9;41594:17;;41633:1;41627:4;41624:11;41621:37;;;41638:18;;:::i;:::-;41621:37;41471:194;;;;:::o;41671:86::-;41706:7;41746:4;41739:5;41735:16;41724:27;;41671:86;;;:::o;41763:188::-;41801:3;41820:18;41836:1;41820:18;:::i;:::-;41815:23;;41852:18;41868:1;41852:18;:::i;:::-;41847:23;;41893:1;41890;41886:9;41879:16;;41916:4;41911:3;41908:13;41905:39;;;41924:18;;:::i;:::-;41905:39;41763:188;;;;:::o;41957:220::-;42097:34;42093:1;42085:6;42081:14;42074:58;42166:3;42161:2;42153:6;42149:15;42142:28;41957:220;:::o;42183:366::-;42325:3;42346:67;42410:2;42405:3;42346:67;:::i;:::-;42339:74;;42422:93;42511:3;42422:93;:::i;:::-;42540:2;42535:3;42531:12;42524:19;;42183:366;;;:::o;42555:419::-;42721:4;42759:2;42748:9;42744:18;42736:26;;42808:9;42802:4;42798:20;42794:1;42783:9;42779:17;42772:47;42836:131;42962:4;42836:131;:::i;:::-;42828:139;;42555:419;;;:::o;42980:332::-;43101:4;43139:2;43128:9;43124:18;43116:26;;43152:71;43220:1;43209:9;43205:17;43196:6;43152:71;:::i;:::-;43233:72;43301:2;43290:9;43286:18;43277:6;43233:72;:::i;:::-;42980:332;;;;;:::o;43318:227::-;43458:34;43454:1;43446:6;43442:14;43435:58;43527:10;43522:2;43514:6;43510:15;43503:35;43318:227;:::o;43551:366::-;43693:3;43714:67;43778:2;43773:3;43714:67;:::i;:::-;43707:74;;43790:93;43879:3;43790:93;:::i;:::-;43908:2;43903:3;43899:12;43892:19;;43551:366;;;:::o;43923:419::-;44089:4;44127:2;44116:9;44112:18;44104:26;;44176:9;44170:4;44166:20;44162:1;44151:9;44147:17;44140:47;44204:131;44330:4;44204:131;:::i;:::-;44196:139;;43923:419;;;:::o;44348:224::-;44488:34;44484:1;44476:6;44472:14;44465:58;44557:7;44552:2;44544:6;44540:15;44533:32;44348:224;:::o;44578:366::-;44720:3;44741:67;44805:2;44800:3;44741:67;:::i;:::-;44734:74;;44817:93;44906:3;44817:93;:::i;:::-;44935:2;44930:3;44926:12;44919:19;;44578:366;;;:::o;44950:419::-;45116:4;45154:2;45143:9;45139:18;45131:26;;45203:9;45197:4;45193:20;45189:1;45178:9;45174:17;45167:47;45231:131;45357:4;45231:131;:::i;:::-;45223:139;;44950:419;;;:::o;45375:229::-;45515:34;45511:1;45503:6;45499:14;45492:58;45584:12;45579:2;45571:6;45567:15;45560:37;45375:229;:::o;45610:366::-;45752:3;45773:67;45837:2;45832:3;45773:67;:::i;:::-;45766:74;;45849:93;45938:3;45849:93;:::i;:::-;45967:2;45962:3;45958:12;45951:19;;45610:366;;;:::o;45982:419::-;46148:4;46186:2;46175:9;46171:18;46163:26;;46235:9;46229:4;46225:20;46221:1;46210:9;46206:17;46199:47;46263:131;46389:4;46263:131;:::i;:::-;46255:139;;45982:419;;;:::o;46407:634::-;46628:4;46666:2;46655:9;46651:18;46643:26;;46715:9;46709:4;46705:20;46701:1;46690:9;46686:17;46679:47;46743:108;46846:4;46837:6;46743:108;:::i;:::-;46735:116;;46898:9;46892:4;46888:20;46883:2;46872:9;46868:18;46861:48;46926:108;47029:4;47020:6;46926:108;:::i;:::-;46918:116;;46407:634;;;;;:::o;47047:228::-;47187:34;47183:1;47175:6;47171:14;47164:58;47256:11;47251:2;47243:6;47239:15;47232:36;47047:228;:::o;47281:366::-;47423:3;47444:67;47508:2;47503:3;47444:67;:::i;:::-;47437:74;;47520:93;47609:3;47520:93;:::i;:::-;47638:2;47633:3;47629:12;47622:19;;47281:366;;;:::o;47653:419::-;47819:4;47857:2;47846:9;47842:18;47834:26;;47906:9;47900:4;47896:20;47892:1;47881:9;47877:17;47870:47;47934:131;48060:4;47934:131;:::i;:::-;47926:139;;47653:419;;;:::o;48078:98::-;48129:6;48163:5;48157:12;48147:22;;48078:98;;;:::o;48182:168::-;48265:11;48299:6;48294:3;48287:19;48339:4;48334:3;48330:14;48315:29;;48182:168;;;;:::o;48356:373::-;48442:3;48470:38;48502:5;48470:38;:::i;:::-;48524:70;48587:6;48582:3;48524:70;:::i;:::-;48517:77;;48603:65;48661:6;48656:3;48649:4;48642:5;48638:16;48603:65;:::i;:::-;48693:29;48715:6;48693:29;:::i;:::-;48688:3;48684:39;48677:46;;48446:283;48356:373;;;;:::o;48735:751::-;48958:4;48996:3;48985:9;48981:19;48973:27;;49010:71;49078:1;49067:9;49063:17;49054:6;49010:71;:::i;:::-;49091:72;49159:2;49148:9;49144:18;49135:6;49091:72;:::i;:::-;49173;49241:2;49230:9;49226:18;49217:6;49173:72;:::i;:::-;49255;49323:2;49312:9;49308:18;49299:6;49255:72;:::i;:::-;49375:9;49369:4;49365:20;49359:3;49348:9;49344:19;49337:49;49403:76;49474:4;49465:6;49403:76;:::i;:::-;49395:84;;48735:751;;;;;;;;:::o;49492:141::-;49548:5;49579:6;49573:13;49564:22;;49595:32;49621:5;49595:32;:::i;:::-;49492:141;;;;:::o;49639:349::-;49708:6;49757:2;49745:9;49736:7;49732:23;49728:32;49725:119;;;49763:79;;:::i;:::-;49725:119;49883:1;49908:63;49963:7;49954:6;49943:9;49939:22;49908:63;:::i;:::-;49898:73;;49854:127;49639:349;;;;:::o;49994:106::-;50038:8;50087:5;50082:3;50078:15;50057:36;;49994:106;;;:::o;50106:183::-;50141:3;50179:1;50161:16;50158:23;50155:128;;;50217:1;50214;50211;50196:23;50239:34;50270:1;50264:8;50239:34;:::i;:::-;50232:41;;50155:128;50106:183;:::o;50295:711::-;50334:3;50372:4;50354:16;50351:26;50380:5;50348:39;50409:20;;:::i;:::-;50484:1;50466:16;50462:24;50459:1;50453:4;50438:49;50517:4;50511:11;50616:16;50609:4;50601:6;50597:17;50594:39;50561:18;50553:6;50550:30;50534:113;50531:146;;;50662:5;;;;50531:146;50708:6;50702:4;50698:17;50744:3;50738:10;50771:18;50763:6;50760:30;50757:43;;;50793:5;;;;;;50757:43;50841:6;50834:4;50829:3;50825:14;50821:27;50900:1;50882:16;50878:24;50872:4;50868:35;50863:3;50860:44;50857:57;;;50907:5;;;;;;;50857:57;50924;50972:6;50966:4;50962:17;50954:6;50950:30;50944:4;50924:57;:::i;:::-;50997:3;50990:10;;50338:668;;;;;50295:711;;:::o;51012:239::-;51152:34;51148:1;51140:6;51136:14;51129:58;51221:22;51216:2;51208:6;51204:15;51197:47;51012:239;:::o;51257:366::-;51399:3;51420:67;51484:2;51479:3;51420:67;:::i;:::-;51413:74;;51496:93;51585:3;51496:93;:::i;:::-;51614:2;51609:3;51605:12;51598:19;;51257:366;;;:::o;51629:419::-;51795:4;51833:2;51822:9;51818:18;51810:26;;51882:9;51876:4;51872:20;51868:1;51857:9;51853:17;51846:47;51910:131;52036:4;51910:131;:::i;:::-;51902:139;;51629:419;;;:::o;52054:227::-;52194:34;52190:1;52182:6;52178:14;52171:58;52263:10;52258:2;52250:6;52246:15;52239:35;52054:227;:::o;52287:366::-;52429:3;52450:67;52514:2;52509:3;52450:67;:::i;:::-;52443:74;;52526:93;52615:3;52526:93;:::i;:::-;52644:2;52639:3;52635:12;52628:19;;52287:366;;;:::o;52659:419::-;52825:4;52863:2;52852:9;52848:18;52840:26;;52912:9;52906:4;52902:20;52898:1;52887:9;52883:17;52876:47;52940:131;53066:4;52940:131;:::i;:::-;52932:139;;52659:419;;;:::o;53084:1053::-;53407:4;53445:3;53434:9;53430:19;53422:27;;53459:71;53527:1;53516:9;53512:17;53503:6;53459:71;:::i;:::-;53540:72;53608:2;53597:9;53593:18;53584:6;53540:72;:::i;:::-;53659:9;53653:4;53649:20;53644:2;53633:9;53629:18;53622:48;53687:108;53790:4;53781:6;53687:108;:::i;:::-;53679:116;;53842:9;53836:4;53832:20;53827:2;53816:9;53812:18;53805:48;53870:108;53973:4;53964:6;53870:108;:::i;:::-;53862:116;;54026:9;54020:4;54016:20;54010:3;53999:9;53995:19;53988:49;54054:76;54125:4;54116:6;54054:76;:::i;:::-;54046:84;;53084:1053;;;;;;;;:::o

Swarm Source

ipfs://8012e1d572c62a81054a9456fe0af9f448d6c7b5101d2d1877d41f6564105564
Loading