ETH Price: $2,400.67 (-1.72%)

Token

 

Overview

Max Total Supply

57

Holders

55

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
fwaygo.eth
0xaf7fd4f7df6692856f17f0fb0d2ba9ec1375eea5
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
HappyGoatFundraising

Compiler Version
v0.8.0+commit.c7dfd78e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

// Sources flattened with hardhat v2.8.3 https://hardhat.org

// File @openzeppelin/contracts/utils/introspection/[email protected]

// SPDX-License-Identifier: MIT
// 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/token/ERC1155/[email protected]


// 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/[email protected]


// 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/extensions/[email protected]


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

pragma solidity ^0.8.0;

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


// File @openzeppelin/contracts/utils/[email protected]


// 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/[email protected]


// 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/utils/introspection/[email protected]


// 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/[email protected]


// 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 @openzeppelin/contracts/access/[email protected]


// 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 contracts/HGFundRaising.sol



pragma solidity ^0.8.0;


contract HappyGoatFundraising is ERC1155, Ownable {

    string private contractMetadataURI;
    mapping(uint256 => string) public fundraiseURI;
    mapping(uint256 => uint256) public fundraiseMinCosts;

    mapping(uint256 => uint256) public fundraiseMaxSupply;
    mapping(uint256 => uint256) public fundraiseTotalSupply;
    mapping(uint256 => uint256) public fundraiseMaxPerWallet;
    mapping(uint256 => bool) public fundraiseIsActive;
    mapping(uint256 => mapping(address => uint256) ) public fundraiseTally;

    address hg_wallet = 0x46Ad3F990c37E68E0C0fA22706fd1e0f7Fd2339C;

    modifier fundraiserTypeExists(uint256 typeId) {
        require(bytes(fundraiseURI[typeId]).length != 0, "Treasure type not exists.");
        
        _;
    }


    constructor() ERC1155("") {
    }

    function airdrop(address to, uint256 typeId, uint256 amount) 
        external
        onlyOwner 
    {
        _mint(to, typeId, amount, "");
    }

    function mint(uint256 numberOfMints, uint256 typeId) fundraiserTypeExists(typeId) public payable {
        address _to = msg.sender;
        uint256 minted = (fundraiseTally[typeId])[msg.sender];
        uint256 minMintPrice = fundraiseMinCosts[typeId];
        uint256 allowedMintsPerWallet = fundraiseMaxPerWallet[typeId];
        uint256 maxSupply = fundraiseMaxSupply[typeId];
        uint256 totalSupply = fundraiseTotalSupply[typeId];

        require(fundraiseIsActive[typeId],                                         "Sale must be active to mint");
        require(msg.value >= minMintPrice * numberOfMints, "insufficient funds");
        require(minted + numberOfMints < allowedMintsPerWallet + 1, "mint over max");
        require(totalSupply + numberOfMints < maxSupply + 1,         "Purchase would exceed max supply of tokens");
        require(msg.sender == tx.origin,"message being sent doesn't not match origin");
        (fundraiseTally[typeId])[msg.sender] = minted + numberOfMints;

        
        _mint(_to,typeId, numberOfMints,"");
    }

    function airdropMultiAddress(address[] memory receivers, uint256 typeId, uint256 amount) 
        external 
        onlyOwner 
    {
        for (uint256 i = 0; i < receivers.length; i++) {
            _mint(receivers[i], typeId, amount, "");
        }
    }


    function setContractURI(string memory _uri) external onlyOwner {
        contractMetadataURI = _uri;
    }

    function toggleFundraiserActive(uint256 typeId) external onlyOwner {
        fundraiseIsActive[typeId] = !fundraiseIsActive[typeId];
    }
    
    function contractURI() 
        public 
        view 
        returns (string memory)
    {
        return contractMetadataURI;
    }

    function setFundraiseInformation(uint256 typeId, string memory _uri, uint256 minMintPrice,uint256 maxSupply, uint256 maxPerWallet) external onlyOwner{
        fundraiseURI[typeId] = _uri;
        fundraiseMinCosts[typeId] = minMintPrice;
        fundraiseMaxSupply[typeId] = maxSupply;
        fundraiseMaxPerWallet[typeId] = maxPerWallet;
    }

    function setFundraiseURI(uint256 typeId, string memory _uri) 
        external
        onlyOwner 
    {
        fundraiseURI[typeId] = _uri;
    }

    function setMintPrice(uint256 typeId, uint256 price) 
        external
        onlyOwner 
    {
        fundraiseMinCosts[typeId] = price;
    }


    function uri(uint256 typeId)
        public
        view                
        override
        returns (string memory){
        return fundraiseURI[typeId];
    }
    

        //lfgoat
    function withdraw() public onlyOwner {
        uint balance = address(this).balance;
        payable(hg_wallet).transfer(balance);
    } 
    function setPayoutAddress(address _newPayout) external onlyOwner {
        hg_wallet = _newPayout;
    }    
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":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":"address","name":"to","type":"address"},{"internalType":"uint256","name":"typeId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"receivers","type":"address[]"},{"internalType":"uint256","name":"typeId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"airdropMultiAddress","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":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"fundraiseIsActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"fundraiseMaxPerWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"fundraiseMaxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"fundraiseMinCosts","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"fundraiseTally","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"fundraiseTotalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"fundraiseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"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":"numberOfMints","type":"uint256"},{"internalType":"uint256","name":"typeId","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uri","type":"string"}],"name":"setContractURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"typeId","type":"uint256"},{"internalType":"string","name":"_uri","type":"string"},{"internalType":"uint256","name":"minMintPrice","type":"uint256"},{"internalType":"uint256","name":"maxSupply","type":"uint256"},{"internalType":"uint256","name":"maxPerWallet","type":"uint256"}],"name":"setFundraiseInformation","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"typeId","type":"uint256"},{"internalType":"string","name":"_uri","type":"string"}],"name":"setFundraiseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"typeId","type":"uint256"},{"internalType":"uint256","name":"price","type":"uint256"}],"name":"setMintPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newPayout","type":"address"}],"name":"setPayoutAddress","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":"typeId","type":"uint256"}],"name":"toggleFundraiserActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"typeId","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040527346ad3f990c37e68e0c0fa22706fd1e0f7fd2339c600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156200006657600080fd5b50604051806020016040528060008152506200008881620000af60201b60201c565b50620000a96200009d620000cb60201b60201c565b620000d360201b60201c565b620002ae565b8060029080519060200190620000c792919062000199565b5050565b600033905090565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620001a79062000249565b90600052602060002090601f016020900481019282620001cb576000855562000217565b82601f10620001e657805160ff191683800117855562000217565b8280016001018555821562000217579182015b8281111562000216578251825591602001919060010190620001f9565b5b5090506200022691906200022a565b5090565b5b80821115620002455760008160009055506001016200022b565b5090565b600060028204905060018216806200026257607f821691505b602082108114156200027957620002786200027f565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b61432e80620002be6000396000f3fe6080604052600436106101c15760003560e01c80638da5cb5b116100f7578063bc5dd03711610095578063e985e9c511610064578063e985e9c514610662578063f242432a1461069f578063f2fde38b146106c8578063f994064a146106f1576101c1565b8063bc5dd03714610594578063cdf45369146105d1578063e1bc29671461060e578063e8a3d48514610637576101c1565b8063af8244e1116100d1578063af8244e1146104c8578063b0100778146104f1578063b7088fac1461051a578063b80086cf14610557576101c1565b80638da5cb5b1461044b578063938e3d7b14610476578063a22cb4651461049f576101c1565b80632eb2c2d6116101645780634290cc471161013e5780634290cc47146103915780634e1273f4146103ba57806357b13e42146103f7578063715018a614610434576101c1565b80632eb2c2d61461032857806333ea51a8146103515780633ccfd60b1461037a576101c1565b80630e89341c116101a05780630e89341c146102695780630f350c46146102a65780631b2ef1ca146102cf5780632bae1a36146102eb576101c1565b8062fdd58e146101c657806301ffc9a7146102035780630442bfa814610240575b600080fd5b3480156101d257600080fd5b506101ed60048036038101906101e89190612e7c565b61072e565b6040516101fa9190613dbc565b60405180910390f35b34801561020f57600080fd5b5061022a60048036038101906102259190612fda565b6107f7565b6040516102379190613b1f565b60405180910390f35b34801561024c57600080fd5b50610267600480360381019061026291906131b5565b6108d9565b005b34801561027557600080fd5b50610290600480360381019061028b919061306d565b610971565b60405161029d9190613b3a565b60405180910390f35b3480156102b257600080fd5b506102cd60048036038101906102c89190613126565b610a16565b005b6102e960048036038101906102e491906131b5565b610b09565b005b3480156102f757600080fd5b50610312600480360381019061030d919061306d565b610e7b565b60405161031f9190613dbc565b60405180910390f35b34801561033457600080fd5b5061034f600480360381019061034a9190612cf2565b610e93565b005b34801561035d57600080fd5b5061037860048036038101906103739190612c8d565b610f34565b005b34801561038657600080fd5b5061038f610ff4565b005b34801561039d57600080fd5b506103b860048036038101906103b39190612f73565b6110e1565b005b3480156103c657600080fd5b506103e160048036038101906103dc9190612f07565b6111dd565b6040516103ee9190613ac6565b60405180910390f35b34801561040357600080fd5b5061041e60048036038101906104199190613096565b61138e565b60405161042b9190613dbc565b60405180910390f35b34801561044057600080fd5b506104496113b3565b005b34801561045757600080fd5b5061046061143b565b60405161046d91906139e9565b60405180910390f35b34801561048257600080fd5b5061049d6004803603810190610498919061302c565b611465565b005b3480156104ab57600080fd5b506104c660048036038101906104c19190612e40565b6114fb565b005b3480156104d457600080fd5b506104ef60048036038101906104ea91906130d2565b611511565b005b3480156104fd57600080fd5b506105186004803603810190610513919061306d565b6115b9565b005b34801561052657600080fd5b50610541600480360381019061053c919061306d565b611684565b60405161054e9190613dbc565b60405180910390f35b34801561056357600080fd5b5061057e6004803603810190610579919061306d565b61169c565b60405161058b9190613dbc565b60405180910390f35b3480156105a057600080fd5b506105bb60048036038101906105b6919061306d565b6116b4565b6040516105c89190613b1f565b60405180910390f35b3480156105dd57600080fd5b506105f860048036038101906105f3919061306d565b6116d4565b6040516106059190613b3a565b60405180910390f35b34801561061a57600080fd5b5061063560048036038101906106309190612eb8565b611774565b005b34801561064357600080fd5b5061064c611810565b6040516106599190613b3a565b60405180910390f35b34801561066e57600080fd5b5061068960048036038101906106849190612cb6565b6118a2565b6040516106969190613b1f565b60405180910390f35b3480156106ab57600080fd5b506106c660048036038101906106c19190612db1565b611936565b005b3480156106d457600080fd5b506106ef60048036038101906106ea9190612c8d565b6119d7565b005b3480156106fd57600080fd5b506107186004803603810190610713919061306d565b611acf565b6040516107259190613dbc565b60405180910390f35b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561079f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161079690613bbc565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108c257507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806108d257506108d182611ae7565b5b9050919050565b6108e1611b51565b73ffffffffffffffffffffffffffffffffffffffff166108ff61143b565b73ffffffffffffffffffffffffffffffffffffffff1614610955576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094c90613cdc565b60405180910390fd5b8060066000848152602001908152602001600020819055505050565b6060600560008381526020019081526020016000208054610991906140c0565b80601f01602080910402602001604051908101604052809291908181526020018280546109bd906140c0565b8015610a0a5780601f106109df57610100808354040283529160200191610a0a565b820191906000526020600020905b8154815290600101906020018083116109ed57829003601f168201915b50505050509050919050565b610a1e611b51565b73ffffffffffffffffffffffffffffffffffffffff16610a3c61143b565b73ffffffffffffffffffffffffffffffffffffffff1614610a92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8990613cdc565b60405180910390fd5b83600560008781526020019081526020016000209080519060200190610ab9929190612985565b508260066000878152602001908152602001600020819055508160076000878152602001908152602001600020819055508060096000878152602001908152602001600020819055505050505050565b806000600560008381526020019081526020016000208054610b2a906140c0565b90501415610b6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6490613cbc565b60405180910390fd5b60003390506000600b600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600060066000868152602001908152602001600020549050600060096000878152602001908152602001600020549050600060076000888152602001908152602001600020549050600060086000898152602001908152602001600020549050600a600089815260200190815260200160002060009054906101000a900460ff16610c87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7e90613c1c565b60405180910390fd5b8884610c939190613fb0565b341015610cd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ccc90613d1c565b60405180910390fd5b600183610ce29190613f5a565b8986610cee9190613f5a565b10610d2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2590613cfc565b60405180910390fd5b600182610d3b9190613f5a565b8982610d479190613f5a565b10610d87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7e90613c7c565b60405180910390fd5b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610df5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dec90613b9c565b60405180910390fd5b8885610e019190613f5a565b600b60008a815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610e7086898b60405180602001604052806000815250611b59565b505050505050505050565b60066020528060005260406000206000915090505481565b610e9b611b51565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610ee15750610ee085610edb611b51565b6118a2565b5b610f20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1790613c5c565b60405180910390fd5b610f2d8585858585611cef565b5050505050565b610f3c611b51565b73ffffffffffffffffffffffffffffffffffffffff16610f5a61143b565b73ffffffffffffffffffffffffffffffffffffffff1614610fb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa790613cdc565b60405180910390fd5b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610ffc611b51565b73ffffffffffffffffffffffffffffffffffffffff1661101a61143b565b73ffffffffffffffffffffffffffffffffffffffff1614611070576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106790613cdc565b60405180910390fd5b6000479050600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156110dd573d6000803e3d6000fd5b5050565b6110e9611b51565b73ffffffffffffffffffffffffffffffffffffffff1661110761143b565b73ffffffffffffffffffffffffffffffffffffffff161461115d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115490613cdc565b60405180910390fd5b60005b83518110156111d7576111c48482815181106111a5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151848460405180602001604052806000815250611b59565b80806111cf906140f2565b915050611160565b50505050565b60608151835114611223576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121a90613d5c565b60405180910390fd5b6000835167ffffffffffffffff811115611266577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156112945781602001602082028036833780820191505090505b50905060005b84518110156113835761132d8582815181106112df577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151858381518110611320577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015161072e565b828281518110611366577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010181815250508061137c906140f2565b905061129a565b508091505092915050565b600b602052816000526040600020602052806000526040600020600091509150505481565b6113bb611b51565b73ffffffffffffffffffffffffffffffffffffffff166113d961143b565b73ffffffffffffffffffffffffffffffffffffffff161461142f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142690613cdc565b60405180910390fd5b611439600061204f565b565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61146d611b51565b73ffffffffffffffffffffffffffffffffffffffff1661148b61143b565b73ffffffffffffffffffffffffffffffffffffffff16146114e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d890613cdc565b60405180910390fd5b80600490805190602001906114f7929190612985565b5050565b61150d611506611b51565b8383612115565b5050565b611519611b51565b73ffffffffffffffffffffffffffffffffffffffff1661153761143b565b73ffffffffffffffffffffffffffffffffffffffff161461158d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158490613cdc565b60405180910390fd5b806005600084815260200190815260200160002090805190602001906115b4929190612985565b505050565b6115c1611b51565b73ffffffffffffffffffffffffffffffffffffffff166115df61143b565b73ffffffffffffffffffffffffffffffffffffffff1614611635576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162c90613cdc565b60405180910390fd5b600a600082815260200190815260200160002060009054906101000a900460ff1615600a600083815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60086020528060005260406000206000915090505481565b60076020528060005260406000206000915090505481565b600a6020528060005260406000206000915054906101000a900460ff1681565b600560205280600052604060002060009150905080546116f3906140c0565b80601f016020809104026020016040519081016040528092919081815260200182805461171f906140c0565b801561176c5780601f106117415761010080835404028352916020019161176c565b820191906000526020600020905b81548152906001019060200180831161174f57829003601f168201915b505050505081565b61177c611b51565b73ffffffffffffffffffffffffffffffffffffffff1661179a61143b565b73ffffffffffffffffffffffffffffffffffffffff16146117f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e790613cdc565b60405180910390fd5b61180b83838360405180602001604052806000815250611b59565b505050565b60606004805461181f906140c0565b80601f016020809104026020016040519081016040528092919081815260200182805461184b906140c0565b80156118985780601f1061186d57610100808354040283529160200191611898565b820191906000526020600020905b81548152906001019060200180831161187b57829003601f168201915b5050505050905090565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61193e611b51565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061198457506119838561197e611b51565b6118a2565b5b6119c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ba90613bfc565b60405180910390fd5b6119d08585858585612282565b5050505050565b6119df611b51565b73ffffffffffffffffffffffffffffffffffffffff166119fd61143b565b73ffffffffffffffffffffffffffffffffffffffff1614611a53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4a90613cdc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611ac3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aba90613bdc565b60405180910390fd5b611acc8161204f565b50565b60096020528060005260406000206000915090505481565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611bc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc090613d9c565b60405180910390fd5b6000611bd3611b51565b9050611bf481600087611be588612504565b611bee88612504565b876125ca565b8260008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611c539190613f5a565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051611cd1929190613dd7565b60405180910390a4611ce8816000878787876125d2565b5050505050565b8151835114611d33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2a90613d7c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611da3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9a90613c3c565b60405180910390fd5b6000611dad611b51565b9050611dbd8187878787876125ca565b60005b8451811015611fba576000858281518110611e04577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015190506000858381518110611e49577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611eea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee190613c9c565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611f9f9190613f5a565b9250508190555050505080611fb3906140f2565b9050611dc0565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051612031929190613ae8565b60405180910390a46120478187878787876127a2565b505050505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612184576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217b90613d3c565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516122759190613b1f565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156122f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122e990613c3c565b60405180910390fd5b60006122fc611b51565b905061231c81878761230d88612504565b61231688612504565b876125ca565b600080600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050838110156123b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123aa90613c9c565b60405180910390fd5b83810360008087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508360008087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124689190613f5a565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6288886040516124e5929190613dd7565b60405180910390a46124fb8288888888886125d2565b50505050505050565b60606000600167ffffffffffffffff811115612549577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156125775781602001602082028036833780820191505090505b50905082816000815181106125b5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101818152505080915050919050565b505050505050565b6125f18473ffffffffffffffffffffffffffffffffffffffff16612972565b1561279a578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401612637959493929190613a6c565b602060405180830381600087803b15801561265157600080fd5b505af192505050801561268257506040513d601f19601f8201168201806040525081019061267f9190613003565b60015b6127115761268e6141e6565b8061269957506126d6565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126cd9190613b3a565b60405180910390fd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161270890613b5c565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612798576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161278f90613b7c565b60405180910390fd5b505b505050505050565b6127c18473ffffffffffffffffffffffffffffffffffffffff16612972565b1561296a578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401612807959493929190613a04565b602060405180830381600087803b15801561282157600080fd5b505af192505050801561285257506040513d601f19601f8201168201806040525081019061284f9190613003565b60015b6128e15761285e6141e6565b8061286957506128a6565b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289d9190613b3a565b60405180910390fd5b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128d890613b5c565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612968576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161295f90613b7c565b60405180910390fd5b505b505050505050565b600080823b905060008111915050919050565b828054612991906140c0565b90600052602060002090601f0160209004810192826129b357600085556129fa565b82601f106129cc57805160ff19168380011785556129fa565b828001600101855582156129fa579182015b828111156129f95782518255916020019190600101906129de565b5b509050612a079190612a0b565b5090565b5b80821115612a24576000816000905550600101612a0c565b5090565b6000612a3b612a3684613e31565b613e00565b90508083825260208201905082856020860282011115612a5a57600080fd5b60005b85811015612a8a5781612a708882612b7c565b845260208401935060208301925050600181019050612a5d565b5050509392505050565b6000612aa7612aa284613e5d565b613e00565b90508083825260208201905082856020860282011115612ac657600080fd5b60005b85811015612af65781612adc8882612c78565b845260208401935060208301925050600181019050612ac9565b5050509392505050565b6000612b13612b0e84613e89565b613e00565b905082815260208101848484011115612b2b57600080fd5b612b3684828561407e565b509392505050565b6000612b51612b4c84613eb9565b613e00565b905082815260208101848484011115612b6957600080fd5b612b7484828561407e565b509392505050565b600081359050612b8b8161429c565b92915050565b600082601f830112612ba257600080fd5b8135612bb2848260208601612a28565b91505092915050565b600082601f830112612bcc57600080fd5b8135612bdc848260208601612a94565b91505092915050565b600081359050612bf4816142b3565b92915050565b600081359050612c09816142ca565b92915050565b600081519050612c1e816142ca565b92915050565b600082601f830112612c3557600080fd5b8135612c45848260208601612b00565b91505092915050565b600082601f830112612c5f57600080fd5b8135612c6f848260208601612b3e565b91505092915050565b600081359050612c87816142e1565b92915050565b600060208284031215612c9f57600080fd5b6000612cad84828501612b7c565b91505092915050565b60008060408385031215612cc957600080fd5b6000612cd785828601612b7c565b9250506020612ce885828601612b7c565b9150509250929050565b600080600080600060a08688031215612d0a57600080fd5b6000612d1888828901612b7c565b9550506020612d2988828901612b7c565b945050604086013567ffffffffffffffff811115612d4657600080fd5b612d5288828901612bbb565b935050606086013567ffffffffffffffff811115612d6f57600080fd5b612d7b88828901612bbb565b925050608086013567ffffffffffffffff811115612d9857600080fd5b612da488828901612c24565b9150509295509295909350565b600080600080600060a08688031215612dc957600080fd5b6000612dd788828901612b7c565b9550506020612de888828901612b7c565b9450506040612df988828901612c78565b9350506060612e0a88828901612c78565b925050608086013567ffffffffffffffff811115612e2757600080fd5b612e3388828901612c24565b9150509295509295909350565b60008060408385031215612e5357600080fd5b6000612e6185828601612b7c565b9250506020612e7285828601612be5565b9150509250929050565b60008060408385031215612e8f57600080fd5b6000612e9d85828601612b7c565b9250506020612eae85828601612c78565b9150509250929050565b600080600060608486031215612ecd57600080fd5b6000612edb86828701612b7c565b9350506020612eec86828701612c78565b9250506040612efd86828701612c78565b9150509250925092565b60008060408385031215612f1a57600080fd5b600083013567ffffffffffffffff811115612f3457600080fd5b612f4085828601612b91565b925050602083013567ffffffffffffffff811115612f5d57600080fd5b612f6985828601612bbb565b9150509250929050565b600080600060608486031215612f8857600080fd5b600084013567ffffffffffffffff811115612fa257600080fd5b612fae86828701612b91565b9350506020612fbf86828701612c78565b9250506040612fd086828701612c78565b9150509250925092565b600060208284031215612fec57600080fd5b6000612ffa84828501612bfa565b91505092915050565b60006020828403121561301557600080fd5b600061302384828501612c0f565b91505092915050565b60006020828403121561303e57600080fd5b600082013567ffffffffffffffff81111561305857600080fd5b61306484828501612c4e565b91505092915050565b60006020828403121561307f57600080fd5b600061308d84828501612c78565b91505092915050565b600080604083850312156130a957600080fd5b60006130b785828601612c78565b92505060206130c885828601612b7c565b9150509250929050565b600080604083850312156130e557600080fd5b60006130f385828601612c78565b925050602083013567ffffffffffffffff81111561311057600080fd5b61311c85828601612c4e565b9150509250929050565b600080600080600060a0868803121561313e57600080fd5b600061314c88828901612c78565b955050602086013567ffffffffffffffff81111561316957600080fd5b61317588828901612c4e565b945050604061318688828901612c78565b935050606061319788828901612c78565b92505060806131a888828901612c78565b9150509295509295909350565b600080604083850312156131c857600080fd5b60006131d685828601612c78565b92505060206131e785828601612c78565b9150509250929050565b60006131fd83836139cb565b60208301905092915050565b6132128161400a565b82525050565b600061322382613ef9565b61322d8185613f27565b935061323883613ee9565b8060005b8381101561326957815161325088826131f1565b975061325b83613f1a565b92505060018101905061323c565b5085935050505092915050565b61327f8161401c565b82525050565b600061329082613f04565b61329a8185613f38565b93506132aa81856020860161408d565b6132b3816141c8565b840191505092915050565b60006132c982613f0f565b6132d38185613f49565b93506132e381856020860161408d565b6132ec816141c8565b840191505092915050565b6000613304603483613f49565b91507f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008301527f526563656976657220696d706c656d656e7465720000000000000000000000006020830152604082019050919050565b600061336a602883613f49565b91507f455243313135353a204552433131353552656365697665722072656a6563746560008301527f6420746f6b656e730000000000000000000000000000000000000000000000006020830152604082019050919050565b60006133d0602b83613f49565b91507f6d657373616765206265696e672073656e7420646f65736e2774206e6f74206d60008301527f61746368206f726967696e0000000000000000000000000000000000000000006020830152604082019050919050565b6000613436602b83613f49565b91507f455243313135353a2062616c616e636520717565727920666f7220746865207a60008301527f65726f20616464726573730000000000000000000000000000000000000000006020830152604082019050919050565b600061349c602683613f49565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613502602983613f49565b91507f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008301527f20617070726f76656400000000000000000000000000000000000000000000006020830152604082019050919050565b6000613568601b83613f49565b91507f53616c65206d7573742062652061637469766520746f206d696e7400000000006000830152602082019050919050565b60006135a8602583613f49565b91507f455243313135353a207472616e7366657220746f20746865207a65726f20616460008301527f64726573730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061360e603283613f49565b91507f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008301527f6f776e6572206e6f7220617070726f76656400000000000000000000000000006020830152604082019050919050565b6000613674602a83613f49565b91507f507572636861736520776f756c6420657863656564206d617820737570706c7960008301527f206f6620746f6b656e73000000000000000000000000000000000000000000006020830152604082019050919050565b60006136da602a83613f49565b91507f455243313135353a20696e73756666696369656e742062616c616e636520666f60008301527f72207472616e73666572000000000000000000000000000000000000000000006020830152604082019050919050565b6000613740601983613f49565b91507f54726561737572652074797065206e6f74206578697374732e000000000000006000830152602082019050919050565b6000613780602083613f49565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b60006137c0600d83613f49565b91507f6d696e74206f766572206d6178000000000000000000000000000000000000006000830152602082019050919050565b6000613800601283613f49565b91507f696e73756666696369656e742066756e647300000000000000000000000000006000830152602082019050919050565b6000613840602983613f49565b91507f455243313135353a2073657474696e6720617070726f76616c2073746174757360008301527f20666f722073656c6600000000000000000000000000000000000000000000006020830152604082019050919050565b60006138a6602983613f49565b91507f455243313135353a206163636f756e747320616e6420696473206c656e67746860008301527f206d69736d6174636800000000000000000000000000000000000000000000006020830152604082019050919050565b600061390c602883613f49565b91507f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008301527f6d69736d617463680000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613972602183613f49565b91507f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008301527f73000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6139d481614074565b82525050565b6139e381614074565b82525050565b60006020820190506139fe6000830184613209565b92915050565b600060a082019050613a196000830188613209565b613a266020830187613209565b8181036040830152613a388186613218565b90508181036060830152613a4c8185613218565b90508181036080830152613a608184613285565b90509695505050505050565b600060a082019050613a816000830188613209565b613a8e6020830187613209565b613a9b60408301866139da565b613aa860608301856139da565b8181036080830152613aba8184613285565b90509695505050505050565b60006020820190508181036000830152613ae08184613218565b905092915050565b60006040820190508181036000830152613b028185613218565b90508181036020830152613b168184613218565b90509392505050565b6000602082019050613b346000830184613276565b92915050565b60006020820190508181036000830152613b5481846132be565b905092915050565b60006020820190508181036000830152613b75816132f7565b9050919050565b60006020820190508181036000830152613b958161335d565b9050919050565b60006020820190508181036000830152613bb5816133c3565b9050919050565b60006020820190508181036000830152613bd581613429565b9050919050565b60006020820190508181036000830152613bf58161348f565b9050919050565b60006020820190508181036000830152613c15816134f5565b9050919050565b60006020820190508181036000830152613c358161355b565b9050919050565b60006020820190508181036000830152613c558161359b565b9050919050565b60006020820190508181036000830152613c7581613601565b9050919050565b60006020820190508181036000830152613c9581613667565b9050919050565b60006020820190508181036000830152613cb5816136cd565b9050919050565b60006020820190508181036000830152613cd581613733565b9050919050565b60006020820190508181036000830152613cf581613773565b9050919050565b60006020820190508181036000830152613d15816137b3565b9050919050565b60006020820190508181036000830152613d35816137f3565b9050919050565b60006020820190508181036000830152613d5581613833565b9050919050565b60006020820190508181036000830152613d7581613899565b9050919050565b60006020820190508181036000830152613d95816138ff565b9050919050565b60006020820190508181036000830152613db581613965565b9050919050565b6000602082019050613dd160008301846139da565b92915050565b6000604082019050613dec60008301856139da565b613df960208301846139da565b9392505050565b6000604051905081810181811067ffffffffffffffff82111715613e2757613e26614199565b5b8060405250919050565b600067ffffffffffffffff821115613e4c57613e4b614199565b5b602082029050602081019050919050565b600067ffffffffffffffff821115613e7857613e77614199565b5b602082029050602081019050919050565b600067ffffffffffffffff821115613ea457613ea3614199565b5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff821115613ed457613ed3614199565b5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b6000613f6582614074565b9150613f7083614074565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613fa557613fa461413b565b5b828201905092915050565b6000613fbb82614074565b9150613fc683614074565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613fff57613ffe61413b565b5b828202905092915050565b600061401582614054565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156140ab578082015181840152602081019050614090565b838111156140ba576000848401525b50505050565b600060028204905060018216806140d857607f821691505b602082108114156140ec576140eb61416a565b5b50919050565b60006140fd82614074565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156141305761412f61413b565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b60008160e01c9050919050565b600060443d10156141f657614299565b60046000803e6142076000516141d9565b6308c379a081146142185750614299565b60405160043d036004823e80513d602482011167ffffffffffffffff8211171561424457505050614299565b808201805167ffffffffffffffff811115614263575050505050614299565b8060208301013d850181111561427e57505050505050614299565b614287826141c8565b60208401016040528296505050505050505b90565b6142a58161400a565b81146142b057600080fd5b50565b6142bc8161401c565b81146142c757600080fd5b50565b6142d381614028565b81146142de57600080fd5b50565b6142ea81614074565b81146142f557600080fd5b5056fea26469706673582212202f7cf2fb3b61ce09f7fb9aa8dd99874d7b67ce2a8bc06ceb1bdecb9094df86fc64736f6c63430008000033

Deployed Bytecode

0x6080604052600436106101c15760003560e01c80638da5cb5b116100f7578063bc5dd03711610095578063e985e9c511610064578063e985e9c514610662578063f242432a1461069f578063f2fde38b146106c8578063f994064a146106f1576101c1565b8063bc5dd03714610594578063cdf45369146105d1578063e1bc29671461060e578063e8a3d48514610637576101c1565b8063af8244e1116100d1578063af8244e1146104c8578063b0100778146104f1578063b7088fac1461051a578063b80086cf14610557576101c1565b80638da5cb5b1461044b578063938e3d7b14610476578063a22cb4651461049f576101c1565b80632eb2c2d6116101645780634290cc471161013e5780634290cc47146103915780634e1273f4146103ba57806357b13e42146103f7578063715018a614610434576101c1565b80632eb2c2d61461032857806333ea51a8146103515780633ccfd60b1461037a576101c1565b80630e89341c116101a05780630e89341c146102695780630f350c46146102a65780631b2ef1ca146102cf5780632bae1a36146102eb576101c1565b8062fdd58e146101c657806301ffc9a7146102035780630442bfa814610240575b600080fd5b3480156101d257600080fd5b506101ed60048036038101906101e89190612e7c565b61072e565b6040516101fa9190613dbc565b60405180910390f35b34801561020f57600080fd5b5061022a60048036038101906102259190612fda565b6107f7565b6040516102379190613b1f565b60405180910390f35b34801561024c57600080fd5b50610267600480360381019061026291906131b5565b6108d9565b005b34801561027557600080fd5b50610290600480360381019061028b919061306d565b610971565b60405161029d9190613b3a565b60405180910390f35b3480156102b257600080fd5b506102cd60048036038101906102c89190613126565b610a16565b005b6102e960048036038101906102e491906131b5565b610b09565b005b3480156102f757600080fd5b50610312600480360381019061030d919061306d565b610e7b565b60405161031f9190613dbc565b60405180910390f35b34801561033457600080fd5b5061034f600480360381019061034a9190612cf2565b610e93565b005b34801561035d57600080fd5b5061037860048036038101906103739190612c8d565b610f34565b005b34801561038657600080fd5b5061038f610ff4565b005b34801561039d57600080fd5b506103b860048036038101906103b39190612f73565b6110e1565b005b3480156103c657600080fd5b506103e160048036038101906103dc9190612f07565b6111dd565b6040516103ee9190613ac6565b60405180910390f35b34801561040357600080fd5b5061041e60048036038101906104199190613096565b61138e565b60405161042b9190613dbc565b60405180910390f35b34801561044057600080fd5b506104496113b3565b005b34801561045757600080fd5b5061046061143b565b60405161046d91906139e9565b60405180910390f35b34801561048257600080fd5b5061049d6004803603810190610498919061302c565b611465565b005b3480156104ab57600080fd5b506104c660048036038101906104c19190612e40565b6114fb565b005b3480156104d457600080fd5b506104ef60048036038101906104ea91906130d2565b611511565b005b3480156104fd57600080fd5b506105186004803603810190610513919061306d565b6115b9565b005b34801561052657600080fd5b50610541600480360381019061053c919061306d565b611684565b60405161054e9190613dbc565b60405180910390f35b34801561056357600080fd5b5061057e6004803603810190610579919061306d565b61169c565b60405161058b9190613dbc565b60405180910390f35b3480156105a057600080fd5b506105bb60048036038101906105b6919061306d565b6116b4565b6040516105c89190613b1f565b60405180910390f35b3480156105dd57600080fd5b506105f860048036038101906105f3919061306d565b6116d4565b6040516106059190613b3a565b60405180910390f35b34801561061a57600080fd5b5061063560048036038101906106309190612eb8565b611774565b005b34801561064357600080fd5b5061064c611810565b6040516106599190613b3a565b60405180910390f35b34801561066e57600080fd5b5061068960048036038101906106849190612cb6565b6118a2565b6040516106969190613b1f565b60405180910390f35b3480156106ab57600080fd5b506106c660048036038101906106c19190612db1565b611936565b005b3480156106d457600080fd5b506106ef60048036038101906106ea9190612c8d565b6119d7565b005b3480156106fd57600080fd5b506107186004803603810190610713919061306d565b611acf565b6040516107259190613dbc565b60405180910390f35b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561079f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161079690613bbc565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108c257507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806108d257506108d182611ae7565b5b9050919050565b6108e1611b51565b73ffffffffffffffffffffffffffffffffffffffff166108ff61143b565b73ffffffffffffffffffffffffffffffffffffffff1614610955576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094c90613cdc565b60405180910390fd5b8060066000848152602001908152602001600020819055505050565b6060600560008381526020019081526020016000208054610991906140c0565b80601f01602080910402602001604051908101604052809291908181526020018280546109bd906140c0565b8015610a0a5780601f106109df57610100808354040283529160200191610a0a565b820191906000526020600020905b8154815290600101906020018083116109ed57829003601f168201915b50505050509050919050565b610a1e611b51565b73ffffffffffffffffffffffffffffffffffffffff16610a3c61143b565b73ffffffffffffffffffffffffffffffffffffffff1614610a92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8990613cdc565b60405180910390fd5b83600560008781526020019081526020016000209080519060200190610ab9929190612985565b508260066000878152602001908152602001600020819055508160076000878152602001908152602001600020819055508060096000878152602001908152602001600020819055505050505050565b806000600560008381526020019081526020016000208054610b2a906140c0565b90501415610b6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6490613cbc565b60405180910390fd5b60003390506000600b600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600060066000868152602001908152602001600020549050600060096000878152602001908152602001600020549050600060076000888152602001908152602001600020549050600060086000898152602001908152602001600020549050600a600089815260200190815260200160002060009054906101000a900460ff16610c87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7e90613c1c565b60405180910390fd5b8884610c939190613fb0565b341015610cd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ccc90613d1c565b60405180910390fd5b600183610ce29190613f5a565b8986610cee9190613f5a565b10610d2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2590613cfc565b60405180910390fd5b600182610d3b9190613f5a565b8982610d479190613f5a565b10610d87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7e90613c7c565b60405180910390fd5b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610df5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dec90613b9c565b60405180910390fd5b8885610e019190613f5a565b600b60008a815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610e7086898b60405180602001604052806000815250611b59565b505050505050505050565b60066020528060005260406000206000915090505481565b610e9b611b51565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610ee15750610ee085610edb611b51565b6118a2565b5b610f20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1790613c5c565b60405180910390fd5b610f2d8585858585611cef565b5050505050565b610f3c611b51565b73ffffffffffffffffffffffffffffffffffffffff16610f5a61143b565b73ffffffffffffffffffffffffffffffffffffffff1614610fb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa790613cdc565b60405180910390fd5b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610ffc611b51565b73ffffffffffffffffffffffffffffffffffffffff1661101a61143b565b73ffffffffffffffffffffffffffffffffffffffff1614611070576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106790613cdc565b60405180910390fd5b6000479050600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156110dd573d6000803e3d6000fd5b5050565b6110e9611b51565b73ffffffffffffffffffffffffffffffffffffffff1661110761143b565b73ffffffffffffffffffffffffffffffffffffffff161461115d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115490613cdc565b60405180910390fd5b60005b83518110156111d7576111c48482815181106111a5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151848460405180602001604052806000815250611b59565b80806111cf906140f2565b915050611160565b50505050565b60608151835114611223576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121a90613d5c565b60405180910390fd5b6000835167ffffffffffffffff811115611266577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156112945781602001602082028036833780820191505090505b50905060005b84518110156113835761132d8582815181106112df577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151858381518110611320577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015161072e565b828281518110611366577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010181815250508061137c906140f2565b905061129a565b508091505092915050565b600b602052816000526040600020602052806000526040600020600091509150505481565b6113bb611b51565b73ffffffffffffffffffffffffffffffffffffffff166113d961143b565b73ffffffffffffffffffffffffffffffffffffffff161461142f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142690613cdc565b60405180910390fd5b611439600061204f565b565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61146d611b51565b73ffffffffffffffffffffffffffffffffffffffff1661148b61143b565b73ffffffffffffffffffffffffffffffffffffffff16146114e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d890613cdc565b60405180910390fd5b80600490805190602001906114f7929190612985565b5050565b61150d611506611b51565b8383612115565b5050565b611519611b51565b73ffffffffffffffffffffffffffffffffffffffff1661153761143b565b73ffffffffffffffffffffffffffffffffffffffff161461158d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158490613cdc565b60405180910390fd5b806005600084815260200190815260200160002090805190602001906115b4929190612985565b505050565b6115c1611b51565b73ffffffffffffffffffffffffffffffffffffffff166115df61143b565b73ffffffffffffffffffffffffffffffffffffffff1614611635576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162c90613cdc565b60405180910390fd5b600a600082815260200190815260200160002060009054906101000a900460ff1615600a600083815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60086020528060005260406000206000915090505481565b60076020528060005260406000206000915090505481565b600a6020528060005260406000206000915054906101000a900460ff1681565b600560205280600052604060002060009150905080546116f3906140c0565b80601f016020809104026020016040519081016040528092919081815260200182805461171f906140c0565b801561176c5780601f106117415761010080835404028352916020019161176c565b820191906000526020600020905b81548152906001019060200180831161174f57829003601f168201915b505050505081565b61177c611b51565b73ffffffffffffffffffffffffffffffffffffffff1661179a61143b565b73ffffffffffffffffffffffffffffffffffffffff16146117f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e790613cdc565b60405180910390fd5b61180b83838360405180602001604052806000815250611b59565b505050565b60606004805461181f906140c0565b80601f016020809104026020016040519081016040528092919081815260200182805461184b906140c0565b80156118985780601f1061186d57610100808354040283529160200191611898565b820191906000526020600020905b81548152906001019060200180831161187b57829003601f168201915b5050505050905090565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61193e611b51565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061198457506119838561197e611b51565b6118a2565b5b6119c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ba90613bfc565b60405180910390fd5b6119d08585858585612282565b5050505050565b6119df611b51565b73ffffffffffffffffffffffffffffffffffffffff166119fd61143b565b73ffffffffffffffffffffffffffffffffffffffff1614611a53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4a90613cdc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611ac3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aba90613bdc565b60405180910390fd5b611acc8161204f565b50565b60096020528060005260406000206000915090505481565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611bc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc090613d9c565b60405180910390fd5b6000611bd3611b51565b9050611bf481600087611be588612504565b611bee88612504565b876125ca565b8260008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611c539190613f5a565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051611cd1929190613dd7565b60405180910390a4611ce8816000878787876125d2565b5050505050565b8151835114611d33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2a90613d7c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611da3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9a90613c3c565b60405180910390fd5b6000611dad611b51565b9050611dbd8187878787876125ca565b60005b8451811015611fba576000858281518110611e04577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015190506000858381518110611e49577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611eea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee190613c9c565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611f9f9190613f5a565b9250508190555050505080611fb3906140f2565b9050611dc0565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051612031929190613ae8565b60405180910390a46120478187878787876127a2565b505050505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612184576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217b90613d3c565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516122759190613b1f565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156122f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122e990613c3c565b60405180910390fd5b60006122fc611b51565b905061231c81878761230d88612504565b61231688612504565b876125ca565b600080600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050838110156123b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123aa90613c9c565b60405180910390fd5b83810360008087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508360008087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124689190613f5a565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6288886040516124e5929190613dd7565b60405180910390a46124fb8288888888886125d2565b50505050505050565b60606000600167ffffffffffffffff811115612549577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156125775781602001602082028036833780820191505090505b50905082816000815181106125b5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101818152505080915050919050565b505050505050565b6125f18473ffffffffffffffffffffffffffffffffffffffff16612972565b1561279a578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401612637959493929190613a6c565b602060405180830381600087803b15801561265157600080fd5b505af192505050801561268257506040513d601f19601f8201168201806040525081019061267f9190613003565b60015b6127115761268e6141e6565b8061269957506126d6565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126cd9190613b3a565b60405180910390fd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161270890613b5c565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612798576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161278f90613b7c565b60405180910390fd5b505b505050505050565b6127c18473ffffffffffffffffffffffffffffffffffffffff16612972565b1561296a578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401612807959493929190613a04565b602060405180830381600087803b15801561282157600080fd5b505af192505050801561285257506040513d601f19601f8201168201806040525081019061284f9190613003565b60015b6128e15761285e6141e6565b8061286957506128a6565b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289d9190613b3a565b60405180910390fd5b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128d890613b5c565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612968576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161295f90613b7c565b60405180910390fd5b505b505050505050565b600080823b905060008111915050919050565b828054612991906140c0565b90600052602060002090601f0160209004810192826129b357600085556129fa565b82601f106129cc57805160ff19168380011785556129fa565b828001600101855582156129fa579182015b828111156129f95782518255916020019190600101906129de565b5b509050612a079190612a0b565b5090565b5b80821115612a24576000816000905550600101612a0c565b5090565b6000612a3b612a3684613e31565b613e00565b90508083825260208201905082856020860282011115612a5a57600080fd5b60005b85811015612a8a5781612a708882612b7c565b845260208401935060208301925050600181019050612a5d565b5050509392505050565b6000612aa7612aa284613e5d565b613e00565b90508083825260208201905082856020860282011115612ac657600080fd5b60005b85811015612af65781612adc8882612c78565b845260208401935060208301925050600181019050612ac9565b5050509392505050565b6000612b13612b0e84613e89565b613e00565b905082815260208101848484011115612b2b57600080fd5b612b3684828561407e565b509392505050565b6000612b51612b4c84613eb9565b613e00565b905082815260208101848484011115612b6957600080fd5b612b7484828561407e565b509392505050565b600081359050612b8b8161429c565b92915050565b600082601f830112612ba257600080fd5b8135612bb2848260208601612a28565b91505092915050565b600082601f830112612bcc57600080fd5b8135612bdc848260208601612a94565b91505092915050565b600081359050612bf4816142b3565b92915050565b600081359050612c09816142ca565b92915050565b600081519050612c1e816142ca565b92915050565b600082601f830112612c3557600080fd5b8135612c45848260208601612b00565b91505092915050565b600082601f830112612c5f57600080fd5b8135612c6f848260208601612b3e565b91505092915050565b600081359050612c87816142e1565b92915050565b600060208284031215612c9f57600080fd5b6000612cad84828501612b7c565b91505092915050565b60008060408385031215612cc957600080fd5b6000612cd785828601612b7c565b9250506020612ce885828601612b7c565b9150509250929050565b600080600080600060a08688031215612d0a57600080fd5b6000612d1888828901612b7c565b9550506020612d2988828901612b7c565b945050604086013567ffffffffffffffff811115612d4657600080fd5b612d5288828901612bbb565b935050606086013567ffffffffffffffff811115612d6f57600080fd5b612d7b88828901612bbb565b925050608086013567ffffffffffffffff811115612d9857600080fd5b612da488828901612c24565b9150509295509295909350565b600080600080600060a08688031215612dc957600080fd5b6000612dd788828901612b7c565b9550506020612de888828901612b7c565b9450506040612df988828901612c78565b9350506060612e0a88828901612c78565b925050608086013567ffffffffffffffff811115612e2757600080fd5b612e3388828901612c24565b9150509295509295909350565b60008060408385031215612e5357600080fd5b6000612e6185828601612b7c565b9250506020612e7285828601612be5565b9150509250929050565b60008060408385031215612e8f57600080fd5b6000612e9d85828601612b7c565b9250506020612eae85828601612c78565b9150509250929050565b600080600060608486031215612ecd57600080fd5b6000612edb86828701612b7c565b9350506020612eec86828701612c78565b9250506040612efd86828701612c78565b9150509250925092565b60008060408385031215612f1a57600080fd5b600083013567ffffffffffffffff811115612f3457600080fd5b612f4085828601612b91565b925050602083013567ffffffffffffffff811115612f5d57600080fd5b612f6985828601612bbb565b9150509250929050565b600080600060608486031215612f8857600080fd5b600084013567ffffffffffffffff811115612fa257600080fd5b612fae86828701612b91565b9350506020612fbf86828701612c78565b9250506040612fd086828701612c78565b9150509250925092565b600060208284031215612fec57600080fd5b6000612ffa84828501612bfa565b91505092915050565b60006020828403121561301557600080fd5b600061302384828501612c0f565b91505092915050565b60006020828403121561303e57600080fd5b600082013567ffffffffffffffff81111561305857600080fd5b61306484828501612c4e565b91505092915050565b60006020828403121561307f57600080fd5b600061308d84828501612c78565b91505092915050565b600080604083850312156130a957600080fd5b60006130b785828601612c78565b92505060206130c885828601612b7c565b9150509250929050565b600080604083850312156130e557600080fd5b60006130f385828601612c78565b925050602083013567ffffffffffffffff81111561311057600080fd5b61311c85828601612c4e565b9150509250929050565b600080600080600060a0868803121561313e57600080fd5b600061314c88828901612c78565b955050602086013567ffffffffffffffff81111561316957600080fd5b61317588828901612c4e565b945050604061318688828901612c78565b935050606061319788828901612c78565b92505060806131a888828901612c78565b9150509295509295909350565b600080604083850312156131c857600080fd5b60006131d685828601612c78565b92505060206131e785828601612c78565b9150509250929050565b60006131fd83836139cb565b60208301905092915050565b6132128161400a565b82525050565b600061322382613ef9565b61322d8185613f27565b935061323883613ee9565b8060005b8381101561326957815161325088826131f1565b975061325b83613f1a565b92505060018101905061323c565b5085935050505092915050565b61327f8161401c565b82525050565b600061329082613f04565b61329a8185613f38565b93506132aa81856020860161408d565b6132b3816141c8565b840191505092915050565b60006132c982613f0f565b6132d38185613f49565b93506132e381856020860161408d565b6132ec816141c8565b840191505092915050565b6000613304603483613f49565b91507f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008301527f526563656976657220696d706c656d656e7465720000000000000000000000006020830152604082019050919050565b600061336a602883613f49565b91507f455243313135353a204552433131353552656365697665722072656a6563746560008301527f6420746f6b656e730000000000000000000000000000000000000000000000006020830152604082019050919050565b60006133d0602b83613f49565b91507f6d657373616765206265696e672073656e7420646f65736e2774206e6f74206d60008301527f61746368206f726967696e0000000000000000000000000000000000000000006020830152604082019050919050565b6000613436602b83613f49565b91507f455243313135353a2062616c616e636520717565727920666f7220746865207a60008301527f65726f20616464726573730000000000000000000000000000000000000000006020830152604082019050919050565b600061349c602683613f49565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613502602983613f49565b91507f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008301527f20617070726f76656400000000000000000000000000000000000000000000006020830152604082019050919050565b6000613568601b83613f49565b91507f53616c65206d7573742062652061637469766520746f206d696e7400000000006000830152602082019050919050565b60006135a8602583613f49565b91507f455243313135353a207472616e7366657220746f20746865207a65726f20616460008301527f64726573730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061360e603283613f49565b91507f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008301527f6f776e6572206e6f7220617070726f76656400000000000000000000000000006020830152604082019050919050565b6000613674602a83613f49565b91507f507572636861736520776f756c6420657863656564206d617820737570706c7960008301527f206f6620746f6b656e73000000000000000000000000000000000000000000006020830152604082019050919050565b60006136da602a83613f49565b91507f455243313135353a20696e73756666696369656e742062616c616e636520666f60008301527f72207472616e73666572000000000000000000000000000000000000000000006020830152604082019050919050565b6000613740601983613f49565b91507f54726561737572652074797065206e6f74206578697374732e000000000000006000830152602082019050919050565b6000613780602083613f49565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b60006137c0600d83613f49565b91507f6d696e74206f766572206d6178000000000000000000000000000000000000006000830152602082019050919050565b6000613800601283613f49565b91507f696e73756666696369656e742066756e647300000000000000000000000000006000830152602082019050919050565b6000613840602983613f49565b91507f455243313135353a2073657474696e6720617070726f76616c2073746174757360008301527f20666f722073656c6600000000000000000000000000000000000000000000006020830152604082019050919050565b60006138a6602983613f49565b91507f455243313135353a206163636f756e747320616e6420696473206c656e67746860008301527f206d69736d6174636800000000000000000000000000000000000000000000006020830152604082019050919050565b600061390c602883613f49565b91507f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008301527f6d69736d617463680000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613972602183613f49565b91507f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008301527f73000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6139d481614074565b82525050565b6139e381614074565b82525050565b60006020820190506139fe6000830184613209565b92915050565b600060a082019050613a196000830188613209565b613a266020830187613209565b8181036040830152613a388186613218565b90508181036060830152613a4c8185613218565b90508181036080830152613a608184613285565b90509695505050505050565b600060a082019050613a816000830188613209565b613a8e6020830187613209565b613a9b60408301866139da565b613aa860608301856139da565b8181036080830152613aba8184613285565b90509695505050505050565b60006020820190508181036000830152613ae08184613218565b905092915050565b60006040820190508181036000830152613b028185613218565b90508181036020830152613b168184613218565b90509392505050565b6000602082019050613b346000830184613276565b92915050565b60006020820190508181036000830152613b5481846132be565b905092915050565b60006020820190508181036000830152613b75816132f7565b9050919050565b60006020820190508181036000830152613b958161335d565b9050919050565b60006020820190508181036000830152613bb5816133c3565b9050919050565b60006020820190508181036000830152613bd581613429565b9050919050565b60006020820190508181036000830152613bf58161348f565b9050919050565b60006020820190508181036000830152613c15816134f5565b9050919050565b60006020820190508181036000830152613c358161355b565b9050919050565b60006020820190508181036000830152613c558161359b565b9050919050565b60006020820190508181036000830152613c7581613601565b9050919050565b60006020820190508181036000830152613c9581613667565b9050919050565b60006020820190508181036000830152613cb5816136cd565b9050919050565b60006020820190508181036000830152613cd581613733565b9050919050565b60006020820190508181036000830152613cf581613773565b9050919050565b60006020820190508181036000830152613d15816137b3565b9050919050565b60006020820190508181036000830152613d35816137f3565b9050919050565b60006020820190508181036000830152613d5581613833565b9050919050565b60006020820190508181036000830152613d7581613899565b9050919050565b60006020820190508181036000830152613d95816138ff565b9050919050565b60006020820190508181036000830152613db581613965565b9050919050565b6000602082019050613dd160008301846139da565b92915050565b6000604082019050613dec60008301856139da565b613df960208301846139da565b9392505050565b6000604051905081810181811067ffffffffffffffff82111715613e2757613e26614199565b5b8060405250919050565b600067ffffffffffffffff821115613e4c57613e4b614199565b5b602082029050602081019050919050565b600067ffffffffffffffff821115613e7857613e77614199565b5b602082029050602081019050919050565b600067ffffffffffffffff821115613ea457613ea3614199565b5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff821115613ed457613ed3614199565b5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b6000613f6582614074565b9150613f7083614074565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613fa557613fa461413b565b5b828201905092915050565b6000613fbb82614074565b9150613fc683614074565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613fff57613ffe61413b565b5b828202905092915050565b600061401582614054565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156140ab578082015181840152602081019050614090565b838111156140ba576000848401525b50505050565b600060028204905060018216806140d857607f821691505b602082108114156140ec576140eb61416a565b5b50919050565b60006140fd82614074565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156141305761412f61413b565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b60008160e01c9050919050565b600060443d10156141f657614299565b60046000803e6142076000516141d9565b6308c379a081146142185750614299565b60405160043d036004823e80513d602482011167ffffffffffffffff8211171561424457505050614299565b808201805167ffffffffffffffff811115614263575050505050614299565b8060208301013d850181111561427e57505050505050614299565b614287826141c8565b60208401016040528296505050505050505b90565b6142a58161400a565b81146142b057600080fd5b50565b6142bc8161401c565b81146142c757600080fd5b50565b6142d381614028565b81146142de57600080fd5b50565b6142ea81614074565b81146142f557600080fd5b5056fea26469706673582212202f7cf2fb3b61ce09f7fb9aa8dd99874d7b67ce2a8bc06ceb1bdecb9094df86fc64736f6c63430008000033

Deployed Bytecode Sourcemap

36708:3895:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20595:231;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19618:310;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39982:149;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40141:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39465:350;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37690:1077;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36861:52;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22534:442;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40490:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40344:139;;;;;;;;;;;;;:::i;:::-;;38775:265;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20992:524;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37163:70;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35817:103;;;;;;;;;;;;;:::i;:::-;;35166:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39050:108;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21589:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39823:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39166:140;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36982:55;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36922:53;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37107:49;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36808:46;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37529:153;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39318:139;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21816:168;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22056:401;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36075:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37044:56;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20595:231;20681:7;20728:1;20709:21;;:7;:21;;;;20701:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;20796:9;:13;20806:2;20796:13;;;;;;;;;;;:22;20810:7;20796:22;;;;;;;;;;;;;;;;20789:29;;20595:231;;;;:::o;19618:310::-;19720:4;19772:26;19757:41;;;:11;:41;;;;:110;;;;19830:37;19815:52;;;:11;:52;;;;19757:110;:163;;;;19884:36;19908:11;19884:23;:36::i;:::-;19757:163;19737:183;;19618:310;;;:::o;39982:149::-;35397:12;:10;:12::i;:::-;35386:23;;:7;:5;:7::i;:::-;:23;;;35378:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40118:5:::1;40090:17;:25;40108:6;40090:25;;;;;;;;;;;:33;;;;39982:149:::0;;:::o;40141:171::-;40252:13;40284:12;:20;40297:6;40284:20;;;;;;;;;;;40277:27;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40141:171;;;:::o;39465:350::-;35397:12;:10;:12::i;:::-;35386:23;;:7;:5;:7::i;:::-;:23;;;35378:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39648:4:::1;39625:12;:20;39638:6;39625:20;;;;;;;;;;;:27;;;;;;;;;;;;:::i;:::-;;39691:12;39663:17;:25;39681:6;39663:25;;;;;;;;;;;:40;;;;39743:9;39714:18;:26;39733:6;39714:26;;;;;;;;;;;:38;;;;39795:12;39763:21;:29;39785:6;39763:29;;;;;;;;;;;:44;;;;39465:350:::0;;;;;:::o;37690:1077::-;37764:6;37416:1;37384:12;:20;37397:6;37384:20;;;;;;;;;;;37378:34;;;;;:::i;:::-;;;:39;;37370:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;37798:11:::1;37812:10;37798:24;;37833:14;37851;:22;37866:6;37851:22;;;;;;;;;;;37850:36;37875:10;37850:36;;;;;;;;;;;;;;;;37833:53;;37897:20;37920:17;:25;37938:6;37920:25;;;;;;;;;;;;37897:48;;37956:29;37988:21;:29;38010:6;37988:29;;;;;;;;;;;;37956:61;;38028:17;38048:18;:26;38067:6;38048:26;;;;;;;;;;;;38028:46;;38085:19;38107:20;:28;38128:6;38107:28;;;;;;;;;;;;38085:50;;38156:17;:25;38174:6;38156:25;;;;;;;;;;;;;;;;;;;;;38148:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;38300:13;38285:12;:28;;;;:::i;:::-;38272:9;:41;;38264:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;38404:1;38380:21;:25;;;;:::i;:::-;38364:13;38355:6;:22;;;;:::i;:::-;:50;38347:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;38484:1;38472:9;:13;;;;:::i;:::-;38456;38442:11;:27;;;;:::i;:::-;:43;38434:106;;;;;;;;;;;;:::i;:::-;;;;;;;;;38573:9;38559:23;;:10;:23;;;38551:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;38688:13;38679:6;:22;;;;:::i;:::-;38641:14;:22;38656:6;38641:22;;;;;;;;;;;38640:36;38665:10;38640:36;;;;;;;;;;;;;;;:61;;;;38724:35;38730:3;38734:6;38742:13;38724:35;;;;;;;;;;;::::0;:5:::1;:35::i;:::-;37468:1;;;;;;37690:1077:::0;;;:::o;36861:52::-;;;;;;;;;;;;;;;;;:::o;22534:442::-;22775:12;:10;:12::i;:::-;22767:20;;:4;:20;;;:60;;;;22791:36;22808:4;22814:12;:10;:12::i;:::-;22791:16;:36::i;:::-;22767:60;22745:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;22916:52;22939:4;22945:2;22949:3;22954:7;22963:4;22916:22;:52::i;:::-;22534:442;;;;;:::o;40490:106::-;35397:12;:10;:12::i;:::-;35386:23;;:7;:5;:7::i;:::-;:23;;;35378:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40578:10:::1;40566:9;;:22;;;;;;;;;;;;;;;;;;40490:106:::0;:::o;40344:139::-;35397:12;:10;:12::i;:::-;35386:23;;:7;:5;:7::i;:::-;:23;;;35378:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40392:12:::1;40407:21;40392:36;;40447:9;;;;;;;;;;;40439:27;;:36;40467:7;40439:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;35457:1;40344:139::o:0;38775:265::-;35397:12;:10;:12::i;:::-;35386:23;;:7;:5;:7::i;:::-;:23;;;35378:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38925:9:::1;38920:113;38944:9;:16;38940:1;:20;38920:113;;;38982:39;38988:9;38998:1;38988:12;;;;;;;;;;;;;;;;;;;;;;39002:6;39010;38982:39;;;;;;;;;;;::::0;:5:::1;:39::i;:::-;38962:3;;;;;:::i;:::-;;;;38920:113;;;;38775:265:::0;;;:::o;20992:524::-;21148:16;21209:3;:10;21190:8;:15;:29;21182:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;21278:30;21325:8;:15;21311:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21278:63;;21359:9;21354:122;21378:8;:15;21374:1;:19;21354:122;;;21434:30;21444:8;21453:1;21444:11;;;;;;;;;;;;;;;;;;;;;;21457:3;21461:1;21457:6;;;;;;;;;;;;;;;;;;;;;;21434:9;:30::i;:::-;21415:13;21429:1;21415:16;;;;;;;;;;;;;;;;;;;;;:49;;;;;21395:3;;;;:::i;:::-;;;21354:122;;;;21495:13;21488:20;;;20992:524;;;;:::o;37163:70::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;35817:103::-;35397:12;:10;:12::i;:::-;35386:23;;:7;:5;:7::i;:::-;:23;;;35378:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35882:30:::1;35909:1;35882:18;:30::i;:::-;35817:103::o:0;35166:87::-;35212:7;35239:6;;;;;;;;;;;35232:13;;35166:87;:::o;39050:108::-;35397:12;:10;:12::i;:::-;35386:23;;:7;:5;:7::i;:::-;:23;;;35378:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39146:4:::1;39124:19;:26;;;;;;;;;;;;:::i;:::-;;39050:108:::0;:::o;21589:155::-;21684:52;21703:12;:10;:12::i;:::-;21717:8;21727;21684:18;:52::i;:::-;21589:155;;:::o;39823:151::-;35397:12;:10;:12::i;:::-;35386:23;;:7;:5;:7::i;:::-;:23;;;35378:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39962:4:::1;39939:12;:20;39952:6;39939:20;;;;;;;;;;;:27;;;;;;;;;;;;:::i;:::-;;39823:151:::0;;:::o;39166:140::-;35397:12;:10;:12::i;:::-;35386:23;;:7;:5;:7::i;:::-;:23;;;35378:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39273:17:::1;:25;39291:6;39273:25;;;;;;;;;;;;;;;;;;;;;39272:26;39244:17;:25;39262:6;39244:25;;;;;;;;;;;;:54;;;;;;;;;;;;;;;;;;39166:140:::0;:::o;36982:55::-;;;;;;;;;;;;;;;;;:::o;36922:53::-;;;;;;;;;;;;;;;;;:::o;37107:49::-;;;;;;;;;;;;;;;;;;;;;;:::o;36808:46::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;37529:153::-;35397:12;:10;:12::i;:::-;35386:23;;:7;:5;:7::i;:::-;:23;;;35378:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37645:29:::1;37651:2;37655:6;37663;37645:29;;;;;;;;;;;::::0;:5:::1;:29::i;:::-;37529:153:::0;;;:::o;39318:139::-;39392:13;39430:19;39423:26;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39318:139;:::o;21816:168::-;21915:4;21939:18;:27;21958:7;21939:27;;;;;;;;;;;;;;;:37;21967:8;21939:37;;;;;;;;;;;;;;;;;;;;;;;;;21932:44;;21816:168;;;;:::o;22056:401::-;22272:12;:10;:12::i;:::-;22264:20;;:4;:20;;;:60;;;;22288:36;22305:4;22311:12;:10;:12::i;:::-;22288:16;:36::i;:::-;22264:60;22242:151;;;;;;;;;;;;:::i;:::-;;;;;;;;;22404:45;22422:4;22428:2;22432;22436:6;22444:4;22404:17;:45::i;:::-;22056:401;;;;;:::o;36075:201::-;35397:12;:10;:12::i;:::-;35386:23;;:7;:5;:7::i;:::-;:23;;;35378:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36184:1:::1;36164:22;;:8;:22;;;;36156:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;36240:28;36259:8;36240:18;:28::i;:::-;36075:201:::0;:::o;37044:56::-;;;;;;;;;;;;;;;;;:::o;18371:157::-;18456:4;18495:25;18480:40;;;:11;:40;;;;18473:47;;18371:157;;;:::o;17286:98::-;17339:7;17366:10;17359:17;;17286:98;:::o;27010:569::-;27177:1;27163:16;;:2;:16;;;;27155:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;27230:16;27249:12;:10;:12::i;:::-;27230:31;;27274:102;27295:8;27313:1;27317:2;27321:21;27339:2;27321:17;:21::i;:::-;27344:25;27362:6;27344:17;:25::i;:::-;27371:4;27274:20;:102::i;:::-;27410:6;27389:9;:13;27399:2;27389:13;;;;;;;;;;;:17;27403:2;27389:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;27469:2;27432:52;;27465:1;27432:52;;27447:8;27432:52;;;27473:2;27477:6;27432:52;;;;;;;:::i;:::-;;;;;;;;27497:74;27528:8;27546:1;27550:2;27554;27558:6;27566:4;27497:30;:74::i;:::-;27010:569;;;;;:::o;24618:1074::-;24845:7;:14;24831:3;:10;:28;24823:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;24937:1;24923:16;;:2;:16;;;;24915:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;24994:16;25013:12;:10;:12::i;:::-;24994:31;;25038:60;25059:8;25069:4;25075:2;25079:3;25084:7;25093:4;25038:20;:60::i;:::-;25116:9;25111:421;25135:3;:10;25131:1;:14;25111:421;;;25167:10;25180:3;25184:1;25180:6;;;;;;;;;;;;;;;;;;;;;;25167:19;;25201:14;25218:7;25226:1;25218:10;;;;;;;;;;;;;;;;;;;;;;25201:27;;25245:19;25267:9;:13;25277:2;25267:13;;;;;;;;;;;:19;25281:4;25267:19;;;;;;;;;;;;;;;;25245:41;;25324:6;25309:11;:21;;25301:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;25457:6;25443:11;:20;25421:9;:13;25431:2;25421:13;;;;;;;;;;;:19;25435:4;25421:19;;;;;;;;;;;;;;;:42;;;;25514:6;25493:9;:13;25503:2;25493:13;;;;;;;;;;;:17;25507:2;25493:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;25111:421;;;25147:3;;;;:::i;:::-;;;25111:421;;;;25579:2;25549:47;;25573:4;25549:47;;25563:8;25549:47;;;25583:3;25588:7;25549:47;;;;;;;:::i;:::-;;;;;;;;25609:75;25645:8;25655:4;25661:2;25665:3;25670:7;25679:4;25609:35;:75::i;:::-;24618:1074;;;;;;:::o;36436:191::-;36510:16;36529:6;;;;;;;;;;;36510:25;;36555:8;36546:6;;:17;;;;;;;;;;;;;;;;;;36610:8;36579:40;;36600:8;36579:40;;;;;;;;;;;;36436:191;;:::o;30804:331::-;30959:8;30950:17;;:5;:17;;;;30942:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;31062:8;31024:18;:25;31043:5;31024:25;;;;;;;;;;;;;;;:35;31050:8;31024:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;31108:8;31086:41;;31101:5;31086:41;;;31118:8;31086:41;;;;;;:::i;:::-;;;;;;;;30804:331;;;:::o;23440:820::-;23642:1;23628:16;;:2;:16;;;;23620:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;23699:16;23718:12;:10;:12::i;:::-;23699:31;;23743:96;23764:8;23774:4;23780:2;23784:21;23802:2;23784:17;:21::i;:::-;23807:25;23825:6;23807:17;:25::i;:::-;23834:4;23743:20;:96::i;:::-;23852:19;23874:9;:13;23884:2;23874:13;;;;;;;;;;;:19;23888:4;23874:19;;;;;;;;;;;;;;;;23852:41;;23927:6;23912:11;:21;;23904:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;24052:6;24038:11;:20;24016:9;:13;24026:2;24016:13;;;;;;;;;;;:19;24030:4;24016:19;;;;;;;;;;;;;;;:42;;;;24101:6;24080:9;:13;24090:2;24080:13;;;;;;;;;;;:17;24094:2;24080:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;24156:2;24125:46;;24150:4;24125:46;;24140:8;24125:46;;;24160:2;24164:6;24125:46;;;;;;;:::i;:::-;;;;;;;;24184:68;24215:8;24225:4;24231:2;24235;24239:6;24247:4;24184:30;:68::i;:::-;23440:820;;;;;;;:::o;33893:198::-;33959:16;33988:22;34027:1;34013:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33988:41;;34051:7;34040:5;34046:1;34040:8;;;;;;;;;;;;;;;;;;;;;:18;;;;;34078:5;34071:12;;;33893:198;;;:::o;32091:221::-;;;;;;;:::o;32320:744::-;32535:15;:2;:13;;;:15::i;:::-;32531:526;;;32588:2;32571:38;;;32610:8;32620:4;32626:2;32630:6;32638:4;32571:72;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;32567:479;;;;:::i;:::-;;;;;;;;32919:6;32912:14;;;;;;;;;;;:::i;:::-;;;;;;;;32567:479;32968:62;;;;;;;;;;:::i;:::-;;;;;;;;32567:479;32705:43;;;32693:55;;;:8;:55;;;;32689:154;;32773:50;;;;;;;;;;:::i;:::-;;;;;;;;32689:154;32644:214;32531:526;32320:744;;;;;;:::o;33072:813::-;33312:15;:2;:13;;;:15::i;:::-;33308:570;;;33365:2;33348:43;;;33392:8;33402:4;33408:3;33413:7;33422:4;33348:79;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;33344:523;;;;:::i;:::-;;;;;;;;33740:6;33733:14;;;;;;;;;;;:::i;:::-;;;;;;;;33344:523;33789:62;;;;;;;;;;:::i;:::-;;;;;;;;33344:523;33521:48;;;33509:60;;;:8;:60;;;;33505:159;;33594:50;;;;;;;;;;:::i;:::-;;;;;;;;33505:159;33428:251;33308:570;33072:813;;;;;;:::o;9268:387::-;9328:4;9536:12;9603:7;9591:20;9583:28;;9646:1;9639:4;:8;9632:15;;;9268:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:622:1:-;;145:80;160:64;217:6;160:64;:::i;:::-;145:80;:::i;:::-;136:89;;245:5;273:6;266:5;259:21;299:4;292:5;288:16;281:23;;324:6;374:3;366:4;358:6;354:17;349:3;345:27;342:36;339:2;;;391:1;388;381:12;339:2;419:1;404:236;429:6;426:1;423:13;404:236;;;496:3;524:37;557:3;545:10;524:37;:::i;:::-;519:3;512:50;591:4;586:3;582:14;575:21;;625:4;620:3;616:14;609:21;;464:176;451:1;448;444:9;439:14;;404:236;;;408:14;126:520;;;;;;;:::o;669:622::-;;790:80;805:64;862:6;805:64;:::i;:::-;790:80;:::i;:::-;781:89;;890:5;918:6;911:5;904:21;944:4;937:5;933:16;926:23;;969:6;1019:3;1011:4;1003:6;999:17;994:3;990:27;987:36;984:2;;;1036:1;1033;1026:12;984:2;1064:1;1049:236;1074:6;1071:1;1068:13;1049:236;;;1141:3;1169:37;1202:3;1190:10;1169:37;:::i;:::-;1164:3;1157:50;1236:4;1231:3;1227:14;1220:21;;1270:4;1265:3;1261:14;1254:21;;1109:176;1096:1;1093;1089:9;1084:14;;1049:236;;;1053:14;771:520;;;;;;;:::o;1297:342::-;;1399:64;1414:48;1455:6;1414:48;:::i;:::-;1399:64;:::i;:::-;1390:73;;1486:6;1479:5;1472:21;1524:4;1517:5;1513:16;1562:3;1553:6;1548:3;1544:16;1541:25;1538:2;;;1579:1;1576;1569:12;1538:2;1592:41;1626:6;1621:3;1616;1592:41;:::i;:::-;1380:259;;;;;;:::o;1645:344::-;;1748:65;1763:49;1805:6;1763:49;:::i;:::-;1748:65;:::i;:::-;1739:74;;1836:6;1829:5;1822:21;1874:4;1867:5;1863:16;1912:3;1903:6;1898:3;1894:16;1891:25;1888:2;;;1929:1;1926;1919:12;1888:2;1942:41;1976:6;1971:3;1966;1942:41;:::i;:::-;1729:260;;;;;;:::o;1995:139::-;;2079:6;2066:20;2057:29;;2095:33;2122:5;2095:33;:::i;:::-;2047:87;;;;:::o;2157:303::-;;2277:3;2270:4;2262:6;2258:17;2254:27;2244:2;;2295:1;2292;2285:12;2244:2;2335:6;2322:20;2360:94;2450:3;2442:6;2435:4;2427:6;2423:17;2360:94;:::i;:::-;2351:103;;2234:226;;;;;:::o;2483:303::-;;2603:3;2596:4;2588:6;2584:17;2580:27;2570:2;;2621:1;2618;2611:12;2570:2;2661:6;2648:20;2686:94;2776:3;2768:6;2761:4;2753:6;2749:17;2686:94;:::i;:::-;2677:103;;2560:226;;;;;:::o;2792:133::-;;2873:6;2860:20;2851:29;;2889:30;2913:5;2889:30;:::i;:::-;2841:84;;;;:::o;2931:137::-;;3014:6;3001:20;2992:29;;3030:32;3056:5;3030:32;:::i;:::-;2982:86;;;;:::o;3074:141::-;;3161:6;3155:13;3146:22;;3177:32;3203:5;3177:32;:::i;:::-;3136:79;;;;:::o;3234:271::-;;3338:3;3331:4;3323:6;3319:17;3315:27;3305:2;;3356:1;3353;3346:12;3305:2;3396:6;3383:20;3421:78;3495:3;3487:6;3480:4;3472:6;3468:17;3421:78;:::i;:::-;3412:87;;3295:210;;;;;:::o;3525:273::-;;3630:3;3623:4;3615:6;3611:17;3607:27;3597:2;;3648:1;3645;3638:12;3597:2;3688:6;3675:20;3713:79;3788:3;3780:6;3773:4;3765:6;3761:17;3713:79;:::i;:::-;3704:88;;3587:211;;;;;:::o;3804:139::-;;3888:6;3875:20;3866:29;;3904:33;3931:5;3904:33;:::i;:::-;3856:87;;;;:::o;3949:262::-;;4057:2;4045:9;4036:7;4032:23;4028:32;4025:2;;;4073:1;4070;4063:12;4025:2;4116:1;4141:53;4186:7;4177:6;4166:9;4162:22;4141:53;:::i;:::-;4131:63;;4087:117;4015:196;;;;:::o;4217:407::-;;;4342:2;4330:9;4321:7;4317:23;4313:32;4310:2;;;4358:1;4355;4348:12;4310:2;4401:1;4426:53;4471:7;4462:6;4451:9;4447:22;4426:53;:::i;:::-;4416:63;;4372:117;4528:2;4554:53;4599:7;4590:6;4579:9;4575:22;4554:53;:::i;:::-;4544:63;;4499:118;4300:324;;;;;:::o;4630:1241::-;;;;;;4865:3;4853:9;4844:7;4840:23;4836:33;4833:2;;;4882:1;4879;4872:12;4833:2;4925:1;4950:53;4995:7;4986:6;4975:9;4971:22;4950:53;:::i;:::-;4940:63;;4896:117;5052:2;5078:53;5123:7;5114:6;5103:9;5099:22;5078:53;:::i;:::-;5068:63;;5023:118;5208:2;5197:9;5193:18;5180:32;5239:18;5231:6;5228:30;5225:2;;;5271:1;5268;5261:12;5225:2;5299:78;5369:7;5360:6;5349:9;5345:22;5299:78;:::i;:::-;5289:88;;5151:236;5454:2;5443:9;5439:18;5426:32;5485:18;5477:6;5474:30;5471:2;;;5517:1;5514;5507:12;5471:2;5545:78;5615:7;5606:6;5595:9;5591:22;5545:78;:::i;:::-;5535:88;;5397:236;5700:3;5689:9;5685:19;5672:33;5732:18;5724:6;5721:30;5718:2;;;5764:1;5761;5754:12;5718:2;5792:62;5846:7;5837:6;5826:9;5822:22;5792:62;:::i;:::-;5782:72;;5643:221;4823:1048;;;;;;;;:::o;5877:955::-;;;;;;6062:3;6050:9;6041:7;6037:23;6033:33;6030:2;;;6079:1;6076;6069:12;6030:2;6122:1;6147:53;6192:7;6183:6;6172:9;6168:22;6147:53;:::i;:::-;6137:63;;6093:117;6249:2;6275:53;6320:7;6311:6;6300:9;6296:22;6275:53;:::i;:::-;6265:63;;6220:118;6377:2;6403:53;6448:7;6439:6;6428:9;6424:22;6403:53;:::i;:::-;6393:63;;6348:118;6505:2;6531:53;6576:7;6567:6;6556:9;6552:22;6531:53;:::i;:::-;6521:63;;6476:118;6661:3;6650:9;6646:19;6633:33;6693:18;6685:6;6682:30;6679:2;;;6725:1;6722;6715:12;6679:2;6753:62;6807:7;6798:6;6787:9;6783:22;6753:62;:::i;:::-;6743:72;;6604:221;6020:812;;;;;;;;:::o;6838:401::-;;;6960:2;6948:9;6939:7;6935:23;6931:32;6928:2;;;6976:1;6973;6966:12;6928:2;7019:1;7044:53;7089:7;7080:6;7069:9;7065:22;7044:53;:::i;:::-;7034:63;;6990:117;7146:2;7172:50;7214:7;7205:6;7194:9;7190:22;7172:50;:::i;:::-;7162:60;;7117:115;6918:321;;;;;:::o;7245:407::-;;;7370:2;7358:9;7349:7;7345:23;7341:32;7338:2;;;7386:1;7383;7376:12;7338:2;7429:1;7454:53;7499:7;7490:6;7479:9;7475:22;7454:53;:::i;:::-;7444:63;;7400:117;7556:2;7582:53;7627:7;7618:6;7607:9;7603:22;7582:53;:::i;:::-;7572:63;;7527:118;7328:324;;;;;:::o;7658:552::-;;;;7800:2;7788:9;7779:7;7775:23;7771:32;7768:2;;;7816:1;7813;7806:12;7768:2;7859:1;7884:53;7929:7;7920:6;7909:9;7905:22;7884:53;:::i;:::-;7874:63;;7830:117;7986:2;8012:53;8057:7;8048:6;8037:9;8033:22;8012:53;:::i;:::-;8002:63;;7957:118;8114:2;8140:53;8185:7;8176:6;8165:9;8161:22;8140:53;:::i;:::-;8130:63;;8085:118;7758:452;;;;;:::o;8216:693::-;;;8391:2;8379:9;8370:7;8366:23;8362:32;8359:2;;;8407:1;8404;8397:12;8359:2;8478:1;8467:9;8463:17;8450:31;8508:18;8500:6;8497:30;8494:2;;;8540:1;8537;8530:12;8494:2;8568:78;8638:7;8629:6;8618:9;8614:22;8568:78;:::i;:::-;8558:88;;8421:235;8723:2;8712:9;8708:18;8695:32;8754:18;8746:6;8743:30;8740:2;;;8786:1;8783;8776:12;8740:2;8814:78;8884:7;8875:6;8864:9;8860:22;8814:78;:::i;:::-;8804:88;;8666:236;8349:560;;;;;:::o;8915:695::-;;;;9082:2;9070:9;9061:7;9057:23;9053:32;9050:2;;;9098:1;9095;9088:12;9050:2;9169:1;9158:9;9154:17;9141:31;9199:18;9191:6;9188:30;9185:2;;;9231:1;9228;9221:12;9185:2;9259:78;9329:7;9320:6;9309:9;9305:22;9259:78;:::i;:::-;9249:88;;9112:235;9386:2;9412:53;9457:7;9448:6;9437:9;9433:22;9412:53;:::i;:::-;9402:63;;9357:118;9514:2;9540:53;9585:7;9576:6;9565:9;9561:22;9540:53;:::i;:::-;9530:63;;9485:118;9040:570;;;;;:::o;9616:260::-;;9723:2;9711:9;9702:7;9698:23;9694:32;9691:2;;;9739:1;9736;9729:12;9691:2;9782:1;9807:52;9851:7;9842:6;9831:9;9827:22;9807:52;:::i;:::-;9797:62;;9753:116;9681:195;;;;:::o;9882:282::-;;10000:2;9988:9;9979:7;9975:23;9971:32;9968:2;;;10016:1;10013;10006:12;9968:2;10059:1;10084:63;10139:7;10130:6;10119:9;10115:22;10084:63;:::i;:::-;10074:73;;10030:127;9958:206;;;;:::o;10170:375::-;;10288:2;10276:9;10267:7;10263:23;10259:32;10256:2;;;10304:1;10301;10294:12;10256:2;10375:1;10364:9;10360:17;10347:31;10405:18;10397:6;10394:30;10391:2;;;10437:1;10434;10427:12;10391:2;10465:63;10520:7;10511:6;10500:9;10496:22;10465:63;:::i;:::-;10455:73;;10318:220;10246:299;;;;:::o;10551:262::-;;10659:2;10647:9;10638:7;10634:23;10630:32;10627:2;;;10675:1;10672;10665:12;10627:2;10718:1;10743:53;10788:7;10779:6;10768:9;10764:22;10743:53;:::i;:::-;10733:63;;10689:117;10617:196;;;;:::o;10819:407::-;;;10944:2;10932:9;10923:7;10919:23;10915:32;10912:2;;;10960:1;10957;10950:12;10912:2;11003:1;11028:53;11073:7;11064:6;11053:9;11049:22;11028:53;:::i;:::-;11018:63;;10974:117;11130:2;11156:53;11201:7;11192:6;11181:9;11177:22;11156:53;:::i;:::-;11146:63;;11101:118;10902:324;;;;;:::o;11232:520::-;;;11367:2;11355:9;11346:7;11342:23;11338:32;11335:2;;;11383:1;11380;11373:12;11335:2;11426:1;11451:53;11496:7;11487:6;11476:9;11472:22;11451:53;:::i;:::-;11441:63;;11397:117;11581:2;11570:9;11566:18;11553:32;11612:18;11604:6;11601:30;11598:2;;;11644:1;11641;11634:12;11598:2;11672:63;11727:7;11718:6;11707:9;11703:22;11672:63;:::i;:::-;11662:73;;11524:221;11325:427;;;;;:::o;11758:957::-;;;;;;11944:3;11932:9;11923:7;11919:23;11915:33;11912:2;;;11961:1;11958;11951:12;11912:2;12004:1;12029:53;12074:7;12065:6;12054:9;12050:22;12029:53;:::i;:::-;12019:63;;11975:117;12159:2;12148:9;12144:18;12131:32;12190:18;12182:6;12179:30;12176:2;;;12222:1;12219;12212:12;12176:2;12250:63;12305:7;12296:6;12285:9;12281:22;12250:63;:::i;:::-;12240:73;;12102:221;12362:2;12388:53;12433:7;12424:6;12413:9;12409:22;12388:53;:::i;:::-;12378:63;;12333:118;12490:2;12516:53;12561:7;12552:6;12541:9;12537:22;12516:53;:::i;:::-;12506:63;;12461:118;12618:3;12645:53;12690:7;12681:6;12670:9;12666:22;12645:53;:::i;:::-;12635:63;;12589:119;11902:813;;;;;;;;:::o;12721:407::-;;;12846:2;12834:9;12825:7;12821:23;12817:32;12814:2;;;12862:1;12859;12852:12;12814:2;12905:1;12930:53;12975:7;12966:6;12955:9;12951:22;12930:53;:::i;:::-;12920:63;;12876:117;13032:2;13058:53;13103:7;13094:6;13083:9;13079:22;13058:53;:::i;:::-;13048:63;;13003:118;12804:324;;;;;:::o;13134:179::-;;13224:46;13266:3;13258:6;13224:46;:::i;:::-;13302:4;13297:3;13293:14;13279:28;;13214:99;;;;:::o;13319:118::-;13406:24;13424:5;13406:24;:::i;:::-;13401:3;13394:37;13384:53;;:::o;13473:732::-;;13621:54;13669:5;13621:54;:::i;:::-;13691:86;13770:6;13765:3;13691:86;:::i;:::-;13684:93;;13801:56;13851:5;13801:56;:::i;:::-;13880:7;13911:1;13896:284;13921:6;13918:1;13915:13;13896:284;;;13997:6;13991:13;14024:63;14083:3;14068:13;14024:63;:::i;:::-;14017:70;;14110:60;14163:6;14110:60;:::i;:::-;14100:70;;13956:224;13943:1;13940;13936:9;13931:14;;13896:284;;;13900:14;14196:3;14189:10;;13597:608;;;;;;;:::o;14211:109::-;14292:21;14307:5;14292:21;:::i;:::-;14287:3;14280:34;14270:50;;:::o;14326:360::-;;14440:38;14472:5;14440:38;:::i;:::-;14494:70;14557:6;14552:3;14494:70;:::i;:::-;14487:77;;14573:52;14618:6;14613:3;14606:4;14599:5;14595:16;14573:52;:::i;:::-;14650:29;14672:6;14650:29;:::i;:::-;14645:3;14641:39;14634:46;;14416:270;;;;;:::o;14692:364::-;;14808:39;14841:5;14808:39;:::i;:::-;14863:71;14927:6;14922:3;14863:71;:::i;:::-;14856:78;;14943:52;14988:6;14983:3;14976:4;14969:5;14965:16;14943:52;:::i;:::-;15020:29;15042:6;15020:29;:::i;:::-;15015:3;15011:39;15004:46;;14784:272;;;;;:::o;15062:384::-;;15225:67;15289:2;15284:3;15225:67;:::i;:::-;15218:74;;15322:34;15318:1;15313:3;15309:11;15302:55;15388:22;15383:2;15378:3;15374:12;15367:44;15437:2;15432:3;15428:12;15421:19;;15208:238;;;:::o;15452:372::-;;15615:67;15679:2;15674:3;15615:67;:::i;:::-;15608:74;;15712:34;15708:1;15703:3;15699:11;15692:55;15778:10;15773:2;15768:3;15764:12;15757:32;15815:2;15810:3;15806:12;15799:19;;15598:226;;;:::o;15830:375::-;;15993:67;16057:2;16052:3;15993:67;:::i;:::-;15986:74;;16090:34;16086:1;16081:3;16077:11;16070:55;16156:13;16151:2;16146:3;16142:12;16135:35;16196:2;16191:3;16187:12;16180:19;;15976:229;;;:::o;16211:375::-;;16374:67;16438:2;16433:3;16374:67;:::i;:::-;16367:74;;16471:34;16467:1;16462:3;16458:11;16451:55;16537:13;16532:2;16527:3;16523:12;16516:35;16577:2;16572:3;16568:12;16561:19;;16357:229;;;:::o;16592:370::-;;16755:67;16819:2;16814:3;16755:67;:::i;:::-;16748:74;;16852:34;16848:1;16843:3;16839:11;16832:55;16918:8;16913:2;16908:3;16904:12;16897:30;16953:2;16948:3;16944:12;16937:19;;16738:224;;;:::o;16968:373::-;;17131:67;17195:2;17190:3;17131:67;:::i;:::-;17124:74;;17228:34;17224:1;17219:3;17215:11;17208:55;17294:11;17289:2;17284:3;17280:12;17273:33;17332:2;17327:3;17323:12;17316:19;;17114:227;;;:::o;17347:325::-;;17510:67;17574:2;17569:3;17510:67;:::i;:::-;17503:74;;17607:29;17603:1;17598:3;17594:11;17587:50;17663:2;17658:3;17654:12;17647:19;;17493:179;;;:::o;17678:369::-;;17841:67;17905:2;17900:3;17841:67;:::i;:::-;17834:74;;17938:34;17934:1;17929:3;17925:11;17918:55;18004:7;17999:2;17994:3;17990:12;17983:29;18038:2;18033:3;18029:12;18022:19;;17824:223;;;:::o;18053:382::-;;18216:67;18280:2;18275:3;18216:67;:::i;:::-;18209:74;;18313:34;18309:1;18304:3;18300:11;18293:55;18379:20;18374:2;18369:3;18365:12;18358:42;18426:2;18421:3;18417:12;18410:19;;18199:236;;;:::o;18441:374::-;;18604:67;18668:2;18663:3;18604:67;:::i;:::-;18597:74;;18701:34;18697:1;18692:3;18688:11;18681:55;18767:12;18762:2;18757:3;18753:12;18746:34;18806:2;18801:3;18797:12;18790:19;;18587:228;;;:::o;18821:374::-;;18984:67;19048:2;19043:3;18984:67;:::i;:::-;18977:74;;19081:34;19077:1;19072:3;19068:11;19061:55;19147:12;19142:2;19137:3;19133:12;19126:34;19186:2;19181:3;19177:12;19170:19;;18967:228;;;:::o;19201:323::-;;19364:67;19428:2;19423:3;19364:67;:::i;:::-;19357:74;;19461:27;19457:1;19452:3;19448:11;19441:48;19515:2;19510:3;19506:12;19499:19;;19347:177;;;:::o;19530:330::-;;19693:67;19757:2;19752:3;19693:67;:::i;:::-;19686:74;;19790:34;19786:1;19781:3;19777:11;19770:55;19851:2;19846:3;19842:12;19835:19;;19676:184;;;:::o;19866:311::-;;20029:67;20093:2;20088:3;20029:67;:::i;:::-;20022:74;;20126:15;20122:1;20117:3;20113:11;20106:36;20168:2;20163:3;20159:12;20152:19;;20012:165;;;:::o;20183:316::-;;20346:67;20410:2;20405:3;20346:67;:::i;:::-;20339:74;;20443:20;20439:1;20434:3;20430:11;20423:41;20490:2;20485:3;20481:12;20474:19;;20329:170;;;:::o;20505:373::-;;20668:67;20732:2;20727:3;20668:67;:::i;:::-;20661:74;;20765:34;20761:1;20756:3;20752:11;20745:55;20831:11;20826:2;20821:3;20817:12;20810:33;20869:2;20864:3;20860:12;20853:19;;20651:227;;;:::o;20884:373::-;;21047:67;21111:2;21106:3;21047:67;:::i;:::-;21040:74;;21144:34;21140:1;21135:3;21131:11;21124:55;21210:11;21205:2;21200:3;21196:12;21189:33;21248:2;21243:3;21239:12;21232:19;;21030:227;;;:::o;21263:372::-;;21426:67;21490:2;21485:3;21426:67;:::i;:::-;21419:74;;21523:34;21519:1;21514:3;21510:11;21503:55;21589:10;21584:2;21579:3;21575:12;21568:32;21626:2;21621:3;21617:12;21610:19;;21409:226;;;:::o;21641:365::-;;21804:67;21868:2;21863:3;21804:67;:::i;:::-;21797:74;;21901:34;21897:1;21892:3;21888:11;21881:55;21967:3;21962:2;21957:3;21953:12;21946:25;21997:2;21992:3;21988:12;21981:19;;21787:219;;;:::o;22012:108::-;22089:24;22107:5;22089:24;:::i;:::-;22084:3;22077:37;22067:53;;:::o;22126:118::-;22213:24;22231:5;22213:24;:::i;:::-;22208:3;22201:37;22191:53;;:::o;22250:222::-;;22381:2;22370:9;22366:18;22358:26;;22394:71;22462:1;22451:9;22447:17;22438:6;22394:71;:::i;:::-;22348:124;;;;:::o;22478:1053::-;;22839:3;22828:9;22824:19;22816:27;;22853:71;22921:1;22910:9;22906:17;22897:6;22853:71;:::i;:::-;22934:72;23002:2;22991:9;22987:18;22978:6;22934:72;:::i;:::-;23053:9;23047:4;23043:20;23038:2;23027:9;23023:18;23016:48;23081:108;23184:4;23175:6;23081:108;:::i;:::-;23073:116;;23236:9;23230:4;23226:20;23221:2;23210:9;23206:18;23199:48;23264:108;23367:4;23358:6;23264:108;:::i;:::-;23256:116;;23420:9;23414:4;23410:20;23404:3;23393:9;23389:19;23382:49;23448:76;23519:4;23510:6;23448:76;:::i;:::-;23440:84;;22806:725;;;;;;;;:::o;23537:751::-;;23798:3;23787:9;23783:19;23775:27;;23812:71;23880:1;23869:9;23865:17;23856:6;23812:71;:::i;:::-;23893:72;23961:2;23950:9;23946:18;23937:6;23893:72;:::i;:::-;23975;24043:2;24032:9;24028:18;24019:6;23975:72;:::i;:::-;24057;24125:2;24114:9;24110:18;24101:6;24057:72;:::i;:::-;24177:9;24171:4;24167:20;24161:3;24150:9;24146:19;24139:49;24205:76;24276:4;24267:6;24205:76;:::i;:::-;24197:84;;23765:523;;;;;;;;:::o;24294:373::-;;24475:2;24464:9;24460:18;24452:26;;24524:9;24518:4;24514:20;24510:1;24499:9;24495:17;24488:47;24552:108;24655:4;24646:6;24552:108;:::i;:::-;24544:116;;24442:225;;;;:::o;24673:634::-;;24932:2;24921:9;24917:18;24909:26;;24981:9;24975:4;24971:20;24967:1;24956:9;24952:17;24945:47;25009:108;25112:4;25103:6;25009:108;:::i;:::-;25001:116;;25164:9;25158:4;25154:20;25149:2;25138:9;25134:18;25127:48;25192:108;25295:4;25286:6;25192:108;:::i;:::-;25184:116;;24899:408;;;;;:::o;25313:210::-;;25438:2;25427:9;25423:18;25415:26;;25451:65;25513:1;25502:9;25498:17;25489:6;25451:65;:::i;:::-;25405:118;;;;:::o;25529:313::-;;25680:2;25669:9;25665:18;25657:26;;25729:9;25723:4;25719:20;25715:1;25704:9;25700:17;25693:47;25757:78;25830:4;25821:6;25757:78;:::i;:::-;25749:86;;25647:195;;;;:::o;25848:419::-;;26052:2;26041:9;26037:18;26029:26;;26101:9;26095:4;26091:20;26087:1;26076:9;26072:17;26065:47;26129:131;26255:4;26129:131;:::i;:::-;26121:139;;26019:248;;;:::o;26273:419::-;;26477:2;26466:9;26462:18;26454:26;;26526:9;26520:4;26516:20;26512:1;26501:9;26497:17;26490:47;26554:131;26680:4;26554:131;:::i;:::-;26546:139;;26444:248;;;:::o;26698:419::-;;26902:2;26891:9;26887:18;26879:26;;26951:9;26945:4;26941:20;26937:1;26926:9;26922:17;26915:47;26979:131;27105:4;26979:131;:::i;:::-;26971:139;;26869:248;;;:::o;27123:419::-;;27327:2;27316:9;27312:18;27304:26;;27376:9;27370:4;27366:20;27362:1;27351:9;27347:17;27340:47;27404:131;27530:4;27404:131;:::i;:::-;27396:139;;27294:248;;;:::o;27548:419::-;;27752:2;27741:9;27737:18;27729:26;;27801:9;27795:4;27791:20;27787:1;27776:9;27772:17;27765:47;27829:131;27955:4;27829:131;:::i;:::-;27821:139;;27719:248;;;:::o;27973:419::-;;28177:2;28166:9;28162:18;28154:26;;28226:9;28220:4;28216:20;28212:1;28201:9;28197:17;28190:47;28254:131;28380:4;28254:131;:::i;:::-;28246:139;;28144:248;;;:::o;28398:419::-;;28602:2;28591:9;28587:18;28579:26;;28651:9;28645:4;28641:20;28637:1;28626:9;28622:17;28615:47;28679:131;28805:4;28679:131;:::i;:::-;28671:139;;28569:248;;;:::o;28823:419::-;;29027:2;29016:9;29012:18;29004:26;;29076:9;29070:4;29066:20;29062:1;29051:9;29047:17;29040:47;29104:131;29230:4;29104:131;:::i;:::-;29096:139;;28994:248;;;:::o;29248:419::-;;29452:2;29441:9;29437:18;29429:26;;29501:9;29495:4;29491:20;29487:1;29476:9;29472:17;29465:47;29529:131;29655:4;29529:131;:::i;:::-;29521:139;;29419:248;;;:::o;29673:419::-;;29877:2;29866:9;29862:18;29854:26;;29926:9;29920:4;29916:20;29912:1;29901:9;29897:17;29890:47;29954:131;30080:4;29954:131;:::i;:::-;29946:139;;29844:248;;;:::o;30098:419::-;;30302:2;30291:9;30287:18;30279:26;;30351:9;30345:4;30341:20;30337:1;30326:9;30322:17;30315:47;30379:131;30505:4;30379:131;:::i;:::-;30371:139;;30269:248;;;:::o;30523:419::-;;30727:2;30716:9;30712:18;30704:26;;30776:9;30770:4;30766:20;30762:1;30751:9;30747:17;30740:47;30804:131;30930:4;30804:131;:::i;:::-;30796:139;;30694:248;;;:::o;30948:419::-;;31152:2;31141:9;31137:18;31129:26;;31201:9;31195:4;31191:20;31187:1;31176:9;31172:17;31165:47;31229:131;31355:4;31229:131;:::i;:::-;31221:139;;31119:248;;;:::o;31373:419::-;;31577:2;31566:9;31562:18;31554:26;;31626:9;31620:4;31616:20;31612:1;31601:9;31597:17;31590:47;31654:131;31780:4;31654:131;:::i;:::-;31646:139;;31544:248;;;:::o;31798:419::-;;32002:2;31991:9;31987:18;31979:26;;32051:9;32045:4;32041:20;32037:1;32026:9;32022:17;32015:47;32079:131;32205:4;32079:131;:::i;:::-;32071:139;;31969:248;;;:::o;32223:419::-;;32427:2;32416:9;32412:18;32404:26;;32476:9;32470:4;32466:20;32462:1;32451:9;32447:17;32440:47;32504:131;32630:4;32504:131;:::i;:::-;32496:139;;32394:248;;;:::o;32648:419::-;;32852:2;32841:9;32837:18;32829:26;;32901:9;32895:4;32891:20;32887:1;32876:9;32872:17;32865:47;32929:131;33055:4;32929:131;:::i;:::-;32921:139;;32819:248;;;:::o;33073:419::-;;33277:2;33266:9;33262:18;33254:26;;33326:9;33320:4;33316:20;33312:1;33301:9;33297:17;33290:47;33354:131;33480:4;33354:131;:::i;:::-;33346:139;;33244:248;;;:::o;33498:419::-;;33702:2;33691:9;33687:18;33679:26;;33751:9;33745:4;33741:20;33737:1;33726:9;33722:17;33715:47;33779:131;33905:4;33779:131;:::i;:::-;33771:139;;33669:248;;;:::o;33923:222::-;;34054:2;34043:9;34039:18;34031:26;;34067:71;34135:1;34124:9;34120:17;34111:6;34067:71;:::i;:::-;34021:124;;;;:::o;34151:332::-;;34310:2;34299:9;34295:18;34287:26;;34323:71;34391:1;34380:9;34376:17;34367:6;34323:71;:::i;:::-;34404:72;34472:2;34461:9;34457:18;34448:6;34404:72;:::i;:::-;34277:206;;;;;:::o;34489:283::-;;34555:2;34549:9;34539:19;;34597:4;34589:6;34585:17;34704:6;34692:10;34689:22;34668:18;34656:10;34653:34;34650:62;34647:2;;;34715:18;;:::i;:::-;34647:2;34755:10;34751:2;34744:22;34529:243;;;;:::o;34778:311::-;;34945:18;34937:6;34934:30;34931:2;;;34967:18;;:::i;:::-;34931:2;35017:4;35009:6;35005:17;34997:25;;35077:4;35071;35067:15;35059:23;;34860:229;;;:::o;35095:311::-;;35262:18;35254:6;35251:30;35248:2;;;35284:18;;:::i;:::-;35248:2;35334:4;35326:6;35322:17;35314:25;;35394:4;35388;35384:15;35376:23;;35177:229;;;:::o;35412:331::-;;35563:18;35555:6;35552:30;35549:2;;;35585:18;;:::i;:::-;35549:2;35670:4;35666:9;35659:4;35651:6;35647:17;35643:33;35635:41;;35731:4;35725;35721:15;35713:23;;35478:265;;;:::o;35749:332::-;;35901:18;35893:6;35890:30;35887:2;;;35923:18;;:::i;:::-;35887:2;36008:4;36004:9;35997:4;35989:6;35985:17;35981:33;35973:41;;36069:4;36063;36059:15;36051:23;;35816:265;;;:::o;36087:132::-;;36177:3;36169:11;;36207:4;36202:3;36198:14;36190:22;;36159:60;;;:::o;36225:114::-;;36326:5;36320:12;36310:22;;36299:40;;;:::o;36345:98::-;;36430:5;36424:12;36414:22;;36403:40;;;:::o;36449:99::-;;36535:5;36529:12;36519:22;;36508:40;;;:::o;36554:113::-;;36656:4;36651:3;36647:14;36639:22;;36629:38;;;:::o;36673:184::-;;36806:6;36801:3;36794:19;36846:4;36841:3;36837:14;36822:29;;36784:73;;;;:::o;36863:168::-;;36980:6;36975:3;36968:19;37020:4;37015:3;37011:14;36996:29;;36958:73;;;;:::o;37037:169::-;;37155:6;37150:3;37143:19;37195:4;37190:3;37186:14;37171:29;;37133:73;;;;:::o;37212:305::-;;37271:20;37289:1;37271:20;:::i;:::-;37266:25;;37305:20;37323:1;37305:20;:::i;:::-;37300:25;;37459:1;37391:66;37387:74;37384:1;37381:81;37378:2;;;37465:18;;:::i;:::-;37378:2;37509:1;37506;37502:9;37495:16;;37256:261;;;;:::o;37523:348::-;;37586:20;37604:1;37586:20;:::i;:::-;37581:25;;37620:20;37638:1;37620:20;:::i;:::-;37615:25;;37808:1;37740:66;37736:74;37733:1;37730:81;37725:1;37718:9;37711:17;37707:105;37704:2;;;37815:18;;:::i;:::-;37704:2;37863:1;37860;37856:9;37845:20;;37571:300;;;;:::o;37877:96::-;;37943:24;37961:5;37943:24;:::i;:::-;37932:35;;37922:51;;;:::o;37979:90::-;;38056:5;38049:13;38042:21;38031:32;;38021:48;;;:::o;38075:149::-;;38151:66;38144:5;38140:78;38129:89;;38119:105;;;:::o;38230:126::-;;38307:42;38300:5;38296:54;38285:65;;38275:81;;;:::o;38362:77::-;;38428:5;38417:16;;38407:32;;;:::o;38445:154::-;38529:6;38524:3;38519;38506:30;38591:1;38582:6;38577:3;38573:16;38566:27;38496:103;;;:::o;38605:307::-;38673:1;38683:113;38697:6;38694:1;38691:13;38683:113;;;38782:1;38777:3;38773:11;38767:18;38763:1;38758:3;38754:11;38747:39;38719:2;38716:1;38712:10;38707:15;;38683:113;;;38814:6;38811:1;38808:13;38805:2;;;38894:1;38885:6;38880:3;38876:16;38869:27;38805:2;38654:258;;;;:::o;38918:320::-;;38999:1;38993:4;38989:12;38979:22;;39046:1;39040:4;39036:12;39067:18;39057:2;;39123:4;39115:6;39111:17;39101:27;;39057:2;39185;39177:6;39174:14;39154:18;39151:38;39148:2;;;39204:18;;:::i;:::-;39148:2;38969:269;;;;:::o;39244:233::-;;39306:24;39324:5;39306:24;:::i;:::-;39297:33;;39352:66;39345:5;39342:77;39339:2;;;39422:18;;:::i;:::-;39339:2;39469:1;39462:5;39458:13;39451:20;;39287:190;;;:::o;39483:180::-;39531:77;39528:1;39521:88;39628:4;39625:1;39618:15;39652:4;39649:1;39642:15;39669:180;39717:77;39714:1;39707:88;39814:4;39811:1;39804:15;39838:4;39835:1;39828:15;39855:180;39903:77;39900:1;39893:88;40000:4;39997:1;39990:15;40024:4;40021:1;40014:15;40041:102;;40133:2;40129:7;40124:2;40117:5;40113:14;40109:28;40099:38;;40089:54;;;:::o;40149:106::-;;40242:5;40237:3;40233:15;40212:36;;40202:53;;;:::o;40261:833::-;;40338:4;40320:16;40317:26;40314:2;;;40346:5;;40314:2;40384:1;40381;40378;40363:23;40406:34;40437:1;40431:8;40406:34;:::i;:::-;40467:10;40462:3;40459:19;40449:2;;40482:5;;;40449:2;40517;40511:9;40575:1;40557:16;40553:24;40550:1;40544:4;40529:49;40608:4;40602:11;40707:16;40700:4;40692:6;40688:17;40685:39;40652:18;40644:6;40641:30;40625:113;40622:2;;;40753:5;;;;;40622:2;40799:6;40793:4;40789:17;40835:3;40829:10;40862:18;40854:6;40851:30;40848:2;;;40884:5;;;;;;;40848:2;40932:6;40925:4;40920:3;40916:14;40912:27;40969:16;40963:4;40959:27;40954:3;40951:36;40948:2;;;40990:5;;;;;;;;40948:2;41038:29;41060:6;41038:29;:::i;:::-;41031:4;41026:3;41022:14;41018:50;41014:2;41007:62;41085:3;41078:10;;40304:790;;;;;;;;:::o;41100:122::-;41173:24;41191:5;41173:24;:::i;:::-;41166:5;41163:35;41153:2;;41212:1;41209;41202:12;41153:2;41143:79;:::o;41228:116::-;41298:21;41313:5;41298:21;:::i;:::-;41291:5;41288:32;41278:2;;41334:1;41331;41324:12;41278:2;41268:76;:::o;41350:120::-;41422:23;41439:5;41422:23;:::i;:::-;41415:5;41412:34;41402:2;;41460:1;41457;41450:12;41402:2;41392:78;:::o;41476:122::-;41549:24;41567:5;41549:24;:::i;:::-;41542:5;41539:35;41529:2;;41588:1;41585;41578:12;41529:2;41519:79;:::o

Swarm Source

ipfs://2f7cf2fb3b61ce09f7fb9aa8dd99874d7b67ce2a8bc06ceb1bdecb9094df86fc
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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