ETH Price: $2,396.54 (-0.37%)

Token

Fairytales & Conspiracies (F&C)
 

Overview

Max Total Supply

30 F&C

Holders

22

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

0xfd7e83e256c36b631ac3d57efa09c3e02cc89a6b
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:
FairytalesAndConspiracies

Compiler Version
v0.8.13+commit.abaa5c0e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT
// File: @openzeppelin/contracts/utils/Strings.sol


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

pragma solidity ^0.8.0;

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

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

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

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

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

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


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

pragma solidity ^0.8.0;

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

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

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


// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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


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

pragma solidity ^0.8.1;

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

        return account.code.length > 0;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

pragma solidity ^0.8.0;

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

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


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

pragma solidity ^0.8.0;


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

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


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

pragma solidity ^0.8.0;


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

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

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


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

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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

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

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


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

pragma solidity ^0.8.0;


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

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


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

pragma solidity ^0.8.0;







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

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

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

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

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

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

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

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

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

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

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

        return batchBalances;
    }

    /**
     * @dev See {IERC1155-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        _setApprovalForAll(_msgSender(), operator, approved);
    }

    /**
     * @dev See {IERC1155-isApprovedForAll}.
     */
    function isApprovedForAll(address account, address operator) public view virtual override returns (bool) {
        return _operatorApprovals[account][operator];
    }

    /**
     * @dev See {IERC1155-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) public virtual override {
        require(
            from == _msgSender() || isApprovedForAll(from, _msgSender()),
            "ERC1155: caller is not owner nor approved"
        );
        _safeTransferFrom(from, to, id, amount, data);
    }

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

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

        address operator = _msgSender();

        _beforeTokenTransfer(operator, from, to, _asSingletonArray(id), _asSingletonArray(amount), data);

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

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

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

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

        address operator = _msgSender();

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

        for (uint256 i = 0; i < ids.length; ++i) {
            uint256 id = ids[i];
            uint256 amount = amounts[i];

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

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

        _doSafeBatchTransferAcceptanceCheck(operator, from, to, ids, amounts, data);
    }

    /**
     * @dev Sets a new URI for all token types, by relying on the token type ID
     * substitution mechanism
     * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].
     *
     * By this mechanism, any occurrence of the `\{id\}` substring in either the
     * URI or any of the amounts in the JSON file at said URI will be replaced by
     * clients with the token type ID.
     *
     * For example, the `https://token-cdn-domain/\{id\}.json` URI would be
     * interpreted by clients as
     * `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json`
     * for token type ID 0x4cce0.
     *
     * See {uri}.
     *
     * Because these URIs cannot be meaningfully represented by the {URI} event,
     * this function emits no events.
     */
    function _setURI(string memory newuri) internal virtual {
        _uri = newuri;
    }

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

        address operator = _msgSender();

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

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

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

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

        address operator = _msgSender();

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

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

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

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

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

        address operator = _msgSender();

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

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

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

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

        address operator = _msgSender();

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

        for (uint256 i = 0; i < ids.length; i++) {
            uint256 id = ids[i];
            uint256 amount = amounts[i];

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

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

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

    /**
     * @dev Hook that is called before any token transfer. This includes minting
     * and burning, as well as batched variants.
     *
     * The same hook is called on both single and batched variants. For single
     * transfers, the length of the `id` and `amount` arrays will be 1.
     *
     * Calling conditions (for each `id` and `amount` pair):
     *
     * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * of token type `id` will be  transferred to `to`.
     * - When `from` is zero, `amount` tokens of token type `id` will be minted
     * for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens of token type `id`
     * will be burned.
     * - `from` and `to` are never both zero.
     * - `ids` and `amounts` have the same, non-zero length.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {}

    function _doSafeTransferAcceptanceCheck(
        address operator,
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) private {
        if (to.isContract()) {
            try IERC1155Receiver(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) {
                if (response != IERC1155Receiver.onERC1155Received.selector) {
                    revert("ERC1155: ERC1155Receiver rejected tokens");
                }
            } catch Error(string memory reason) {
                revert(reason);
            } catch {
                revert("ERC1155: transfer to non ERC1155Receiver implementer");
            }
        }
    }

    function _doSafeBatchTransferAcceptanceCheck(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) private {
        if (to.isContract()) {
            try IERC1155Receiver(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns (
                bytes4 response
            ) {
                if (response != IERC1155Receiver.onERC1155BatchReceived.selector) {
                    revert("ERC1155: ERC1155Receiver rejected tokens");
                }
            } catch Error(string memory reason) {
                revert(reason);
            } catch {
                revert("ERC1155: transfer to non ERC1155Receiver implementer");
            }
        }
    }

    function _asSingletonArray(uint256 element) private pure returns (uint256[] memory) {
        uint256[] memory array = new uint256[](1);
        array[0] = element;

        return array;
    }
}

// File: contracts/Example.sol


pragma solidity ^0.8.0;




contract FairytalesAndConspiracies is ERC1155, Ownable {
    string public name = "Fairytales & Conspiracies";
    string public symbol = "F&C";
    address payable private contractOwner;
	uint public nftPrice = 0.404 ether;
    bool[3780] public tokensMinted;
    bool[3780] public tokensLocked;
    uint raffleToken1 = 468;
    uint raffleToken2 = 1492;
    uint raffleToken3 = 1817;
    uint raffleToken4 = 2611;
    uint raffleToken5 = 3334;
    event returnTokens(uint16[] tokens);

    constructor() ERC1155("ipfs://QmSPanAWoBXX4cZeVPi2yTrqfcydYLgNGGhaeMhj7xThdd/{id}.json") {
        contractOwner = payable(msg.sender);
        tokensLocked[raffleToken1 - 1] = true;
        tokensLocked[raffleToken2 - 1] = true;
        tokensLocked[raffleToken3 - 1] = true;
        tokensLocked[raffleToken4 - 1] = true;
        tokensLocked[raffleToken5 - 1] = true;
    }

    function uri(uint256 tokenId) override public pure returns (string memory) {
        return (
            string(abi.encodePacked(
                "ipfs://QmSPanAWoBXX4cZeVPi2yTrqfcydYLgNGGhaeMhj7xThdd/",
                Strings.toString(tokenId),
                ".json"
            ))
        );
    }

    function mintNFTs(address payable buyer, uint16[] memory ids) external payable returns (uint16[] memory) {
        for (uint16 i = 0; i < ids.length; i++) { 
            for (uint16 j = i + 1; j < ids.length; j++) {
                if (ids[i] == ids[j]) {
                    ids[i] = 0;
                }
            }
        }

        uint16[] memory tokensToMint = new uint16[](ids.length);
        uint price = 0;
        uint16 counter = 0;
        for (uint16 i = 0; i < ids.length; i++) {
            if (
                ids[i] >= 1 &&
                ids[i] <= 3780 &&
                tokensMinted[ids[i] - 1] != true &&
                tokensLocked[ids[i] - 1] != true
            ) {
                tokensToMint[counter] = ids[i];
                price += nftPrice;
                counter++;
            }
        }

        require(msg.value >= price, "Not enough funds provided");

        if (price == 0) {
            revert("Cannot mint taken tokens");
        }

        for (uint16 i = 0; i < counter; i++) {
            if (tokensToMint[i] > 0) {
                _mint(buyer, tokensToMint[i], 1, "");
                tokensMinted[tokensToMint[i] - 1] = true;
            }
        }

        contractOwner.transfer(price);
        payable(msg.sender).transfer(msg.value - price);

        emit returnTokens(tokensToMint);
        return tokensToMint;
    }

	function claimNFTs(address claimer, uint16[] memory ids) external onlyOwner returns (uint16[] memory) {
		require(msg.sender == contractOwner);

        for (uint16 i = 0; i < ids.length; i++) { 
            for (uint16 j = i + 1; j < ids.length; j++) {
                if (ids[i] == ids[j]) {
                    ids[i] = 0;
                }
            }
        }

        uint16[] memory tokensToClaim = new uint16[](ids.length);
        uint16 counter = 0;
        for (uint16 i = 0; i < ids.length; i++) {
            if (
                ids[i] >= 1 &&
                ids[i] <= 3780 &&
                tokensMinted[ids[i] - 1] != true
            ) {
                tokensToClaim[counter] = ids[i];
                counter++;
            }
        }

        for (uint16 i = 0; i < counter; i++) {
            if (tokensToClaim[i] > 0) {
                _mint(claimer, tokensToClaim[i], 1, "");
                tokensMinted[tokensToClaim[i] - 1] = true;
                tokensLocked[tokensToClaim[i] - 1] = false;
            }
        }
        
        emit returnTokens(tokensToClaim);
        return tokensToClaim;
	}

    function lockNFTs(uint16[] memory ids) external returns (uint16[] memory) {
		require(msg.sender == contractOwner);

        for (uint16 i = 0; i < ids.length; i++) { 
            for (uint16 j = i + 1; j < ids.length; j++) {
                if (ids[i] == ids[j]) {
                    ids[i] = 0;
                }
            }
        }

        uint16[] memory tokensToLock = new uint16[](ids.length);
        uint16 counter = 0;
        for (uint16 i = 0; i < ids.length; i++) {
            if (
                ids[i] >= 1 &&
                ids[i] <= 3780 &&
                tokensMinted[ids[i] - 1] != true &&
                tokensLocked[ids[i] - 1] != true
            ) {
                tokensToLock[counter] = ids[i];
                tokensLocked[ids[i] - 1] = true;
                counter++;
            }
        }
        
        emit returnTokens(tokensToLock);
        return tokensToLock;
    }

    function checkAvailability(uint16[] memory ids) external view returns (uint16[] memory) {
        uint16[] memory availableTokens = new uint16[](ids.length);
        uint16 counter = 0;
        for (uint16 i = 0; i < ids.length; i++) {
            if (tokensMinted[ids[i] - 1] != true && tokensLocked[ids[i] - 1] != true) {
                availableTokens[counter] = ids[i];
                counter++;
            }
        }
        return availableTokens;
    }

	function setNFTPriceInWei(uint priceInWei) external onlyOwner {
		require(msg.sender == contractOwner);
		nftPrice = priceInWei;
	}

	function setNFTPriceInFinney(uint priceInFinney) external onlyOwner {
		require(msg.sender == contractOwner);
		nftPrice = priceInFinney * 0.001 ether;
	}
}

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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint16[]","name":"tokens","type":"uint16[]"}],"name":"returnTokens","type":"event"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16[]","name":"ids","type":"uint16[]"}],"name":"checkAvailability","outputs":[{"internalType":"uint16[]","name":"","type":"uint16[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"claimer","type":"address"},{"internalType":"uint16[]","name":"ids","type":"uint16[]"}],"name":"claimNFTs","outputs":[{"internalType":"uint16[]","name":"","type":"uint16[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16[]","name":"ids","type":"uint16[]"}],"name":"lockNFTs","outputs":[{"internalType":"uint16[]","name":"","type":"uint16[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"buyer","type":"address"},{"internalType":"uint16[]","name":"ids","type":"uint16[]"}],"name":"mintNFTs","outputs":[{"internalType":"uint16[]","name":"","type":"uint16[]"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nftPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"priceInFinney","type":"uint256"}],"name":"setNFTPriceInFinney","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"priceInWei","type":"uint256"}],"name":"setNFTPriceInWei","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokensLocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokensMinted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"}]

60806040526040518060400160405280601981526020017f466169727974616c6573202620436f6e737069726163696573000000000000008152506004908051906020019062000051929190620003c2565b506040518060400160405280600381526020017f4626430000000000000000000000000000000000000000000000000000000000815250600590805190602001906200009f929190620003c2565b5067059b4bdc094200006007556101d460f6556105d460f75561071960f855610a3360f955610d0660fa55348015620000d757600080fd5b506040518060600160405280603f815260200162004f5f603f91396200010381620002d860201b60201c565b506200012462000118620002f460201b60201c565b620002fc60201b60201c565b33600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001607f600160f6546200017a9190620004ab565b610ec481106200018f576200018e620004e6565b5b602091828204019190066101000a81548160ff0219169083151502179055506001607f600160f754620001c39190620004ab565b610ec48110620001d857620001d7620004e6565b5b602091828204019190066101000a81548160ff0219169083151502179055506001607f600160f8546200020c9190620004ab565b610ec48110620002215762000220620004e6565b5b602091828204019190066101000a81548160ff0219169083151502179055506001607f600160f954620002559190620004ab565b610ec481106200026a5762000269620004e6565b5b602091828204019190066101000a81548160ff0219169083151502179055506001607f600160fa546200029e9190620004ab565b610ec48110620002b357620002b2620004e6565b5b602091828204019190066101000a81548160ff02191690831515021790555062000579565b8060029080519060200190620002f0929190620003c2565b5050565b600033905090565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620003d09062000544565b90600052602060002090601f016020900481019282620003f4576000855562000440565b82601f106200040f57805160ff191683800117855562000440565b8280016001018555821562000440579182015b828111156200043f57825182559160200191906001019062000422565b5b5090506200044f919062000453565b5090565b5b808211156200046e57600081600090555060010162000454565b5090565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620004b88262000472565b9150620004c58362000472565b925082821015620004db57620004da6200047c565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200055d57607f821691505b60208210810362000573576200057262000515565b5b50919050565b6149d680620005896000396000f3fe6080604052600436106101345760003560e01c80637e4cb56e116100ab578063be8cfede1161006f578063be8cfede1461044b578063c85fa73114610488578063e985e9c5146104c5578063f242432a14610502578063f2fde38b1461052b578063f8f845fc1461055457610134565b80637e4cb56e146103665780637f74cde21461038f5780638da5cb5b146103cc57806395d89b41146103f7578063a22cb4651461042257610134565b80631ddb1d34116100fd5780631ddb1d34146102465780632eb2c2d614610283578063483e88b6146102ac5780634e1273f4146102e95780634fc924f014610326578063715018a61461034f57610134565b8062fdd58e1461013957806301ffc9a71461017657806306fdde03146101b35780630d39fc81146101de5780630e89341c14610209575b600080fd5b34801561014557600080fd5b50610160600480360381019061015b9190612f2a565b610584565b60405161016d9190612f79565b60405180910390f35b34801561018257600080fd5b5061019d60048036038101906101989190612fec565b61064c565b6040516101aa9190613034565b60405180910390f35b3480156101bf57600080fd5b506101c861072e565b6040516101d591906130e8565b60405180910390f35b3480156101ea57600080fd5b506101f36107bc565b6040516102009190612f79565b60405180910390f35b34801561021557600080fd5b50610230600480360381019061022b919061310a565b6107c2565b60405161023d91906130e8565b60405180910390f35b34801561025257600080fd5b5061026d6004803603810190610268919061310a565b6107f3565b60405161027a9190613034565b60405180910390f35b34801561028f57600080fd5b506102aa60048036038101906102a59190613334565b61081e565b005b3480156102b857600080fd5b506102d360048036038101906102ce9190613500565b6108bf565b6040516102e09190613607565b60405180910390f35b3480156102f557600080fd5b50610310600480360381019061030b91906136ec565b610a68565b60405161031d9190613822565b60405180910390f35b34801561033257600080fd5b5061034d6004803603810190610348919061310a565b610b81565b005b34801561035b57600080fd5b50610364610c61565b005b34801561037257600080fd5b5061038d6004803603810190610388919061310a565b610ce9565b005b34801561039b57600080fd5b506103b660048036038101906103b1919061310a565b610ddb565b6040516103c39190613034565b60405180910390f35b3480156103d857600080fd5b506103e1610e06565b6040516103ee9190613853565b60405180910390f35b34801561040357600080fd5b5061040c610e30565b60405161041991906130e8565b60405180910390f35b34801561042e57600080fd5b506104496004803603810190610444919061389a565b610ebe565b005b34801561045757600080fd5b50610472600480360381019061046d91906138da565b610ed4565b60405161047f9190613607565b60405180910390f35b34801561049457600080fd5b506104af60048036038101906104aa9190613500565b6113ac565b6040516104bc9190613607565b60405180910390f35b3480156104d157600080fd5b506104ec60048036038101906104e79190613936565b61177b565b6040516104f99190613034565b60405180910390f35b34801561050e57600080fd5b5061052960048036038101906105249190613976565b61180f565b005b34801561053757600080fd5b50610552600480360381019061054d9190613a0d565b6118b0565b005b61056e60048036038101906105699190613a78565b6119a7565b60405161057b9190613607565b60405180910390f35b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036105f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105eb90613b46565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061071757507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610727575061072682611f02565b5b9050919050565b6004805461073b90613b95565b80601f016020809104026020016040519081016040528092919081815260200182805461076790613b95565b80156107b45780601f10610789576101008083540402835291602001916107b4565b820191906000526020600020905b81548152906001019060200180831161079757829003601f168201915b505050505081565b60075481565b60606107cd82611f6c565b6040516020016107dd9190613cc0565b6040516020818303038152906040529050919050565b607f81610ec4811061080457600080fd5b60209182820401919006915054906101000a900460ff1681565b6108266120cc565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061086c575061086b856108666120cc565b61177b565b5b6108ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108a290613d5f565b60405180910390fd5b6108b885858585856120d4565b5050505050565b60606000825167ffffffffffffffff8111156108de576108dd61313c565b5b60405190808252806020026020018201604052801561090c5781602001602082028036833780820191505090505b5090506000805b84518161ffff161015610a5d576001151560086001878461ffff168151811061093f5761093e613d7f565b5b60200260200101516109519190613ddd565b61ffff16610ec4811061096757610966613d7f565b5b602091828204019190069054906101000a900460ff161515141580156109ea575060011515607f6001878461ffff16815181106109a7576109a6613d7f565b5b60200260200101516109b99190613ddd565b61ffff16610ec481106109cf576109ce613d7f565b5b602091828204019190069054906101000a900460ff16151514155b15610a4a57848161ffff1681518110610a0657610a05613d7f565b5b6020026020010151838361ffff1681518110610a2557610a24613d7f565b5b602002602001019061ffff16908161ffff16815250508180610a4690613e11565b9250505b8080610a5590613e11565b915050610913565b508192505050919050565b60608151835114610aae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa590613ead565b60405180910390fd5b6000835167ffffffffffffffff811115610acb57610aca61313c565b5b604051908082528060200260200182016040528015610af95781602001602082028036833780820191505090505b50905060005b8451811015610b7657610b46858281518110610b1e57610b1d613d7f565b5b6020026020010151858381518110610b3957610b38613d7f565b5b6020026020010151610584565b828281518110610b5957610b58613d7f565b5b60200260200101818152505080610b6f90613ecd565b9050610aff565b508091505092915050565b610b896120cc565b73ffffffffffffffffffffffffffffffffffffffff16610ba7610e06565b73ffffffffffffffffffffffffffffffffffffffff1614610bfd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf490613f61565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610c5757600080fd5b8060078190555050565b610c696120cc565b73ffffffffffffffffffffffffffffffffffffffff16610c87610e06565b73ffffffffffffffffffffffffffffffffffffffff1614610cdd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd490613f61565b60405180910390fd5b610ce760006123e7565b565b610cf16120cc565b73ffffffffffffffffffffffffffffffffffffffff16610d0f610e06565b73ffffffffffffffffffffffffffffffffffffffff1614610d65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5c90613f61565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610dbf57600080fd5b66038d7ea4c6800081610dd29190613f81565b60078190555050565b600881610ec48110610dec57600080fd5b60209182820401919006915054906101000a900460ff1681565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60058054610e3d90613b95565b80601f0160208091040260200160405190810160405280929190818152602001828054610e6990613b95565b8015610eb65780601f10610e8b57610100808354040283529160200191610eb6565b820191906000526020600020905b815481529060010190602001808311610e9957829003601f168201915b505050505081565b610ed0610ec96120cc565b83836124ad565b5050565b6060610ede6120cc565b73ffffffffffffffffffffffffffffffffffffffff16610efc610e06565b73ffffffffffffffffffffffffffffffffffffffff1614610f52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4990613f61565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610fac57600080fd5b60005b82518161ffff16101561107d576000600182610fcb9190613fdb565b90505b83518161ffff16101561106957838161ffff1681518110610ff257610ff1613d7f565b5b602002602001015161ffff16848361ffff168151811061101557611014613d7f565b5b602002602001015161ffff1603611056576000848361ffff168151811061103f5761103e613d7f565b5b602002602001019061ffff16908161ffff16815250505b808061106190613e11565b915050610fce565b50808061107590613e11565b915050610faf565b506000825167ffffffffffffffff81111561109b5761109a61313c565b5b6040519080825280602002602001820160405280156110c95781602001602082028036833780820191505090505b5090506000805b84518161ffff161015611210576001858261ffff16815181106110f6576110f5613d7f565b5b602002602001015161ffff16101580156111345750610ec4858261ffff168151811061112557611124613d7f565b5b602002602001015161ffff1611155b801561119d57506001151560086001878461ffff168151811061115a57611159613d7f565b5b602002602001015161116c9190613ddd565b61ffff16610ec4811061118257611181613d7f565b5b602091828204019190069054906101000a900460ff16151514155b156111fd57848161ffff16815181106111b9576111b8613d7f565b5b6020026020010151838361ffff16815181106111d8576111d7613d7f565b5b602002602001019061ffff16908161ffff168152505081806111f990613e11565b9250505b808061120890613e11565b9150506110d0565b5060005b8161ffff168161ffff161015611369576000838261ffff168151811061123d5761123c613d7f565b5b602002602001015161ffff1611156113565761128d86848361ffff168151811061126a57611269613d7f565b5b602002602001015161ffff16600160405180602001604052806000815250612619565b600160086001858461ffff16815181106112aa576112a9613d7f565b5b60200260200101516112bc9190613ddd565b61ffff16610ec481106112d2576112d1613d7f565b5b602091828204019190066101000a81548160ff0219169083151502179055506000607f6001858461ffff168151811061130e5761130d613d7f565b5b60200260200101516113209190613ddd565b61ffff16610ec4811061133657611335613d7f565b5b602091828204019190066101000a81548160ff0219169083151502179055505b808061136190613e11565b915050611214565b507f3a7a32b1af4e84f0ede84d23f3211728a61d199c24844967b9e9fdc5fcfbd9f1826040516113999190613607565b60405180910390a1819250505092915050565b6060600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461140857600080fd5b60005b82518161ffff1610156114d95760006001826114279190613fdb565b90505b83518161ffff1610156114c557838161ffff168151811061144e5761144d613d7f565b5b602002602001015161ffff16848361ffff168151811061147157611470613d7f565b5b602002602001015161ffff16036114b2576000848361ffff168151811061149b5761149a613d7f565b5b602002602001019061ffff16908161ffff16815250505b80806114bd90613e11565b91505061142a565b5080806114d190613e11565b91505061140b565b506000825167ffffffffffffffff8111156114f7576114f661313c565b5b6040519080825280602002602001820160405280156115255781602001602082028036833780820191505090505b5090506000805b84518161ffff161015611739576001858261ffff168151811061155257611551613d7f565b5b602002602001015161ffff16101580156115905750610ec4858261ffff168151811061158157611580613d7f565b5b602002602001015161ffff1611155b80156115f957506001151560086001878461ffff16815181106115b6576115b5613d7f565b5b60200260200101516115c89190613ddd565b61ffff16610ec481106115de576115dd613d7f565b5b602091828204019190069054906101000a900460ff16151514155b8015611662575060011515607f6001878461ffff168151811061161f5761161e613d7f565b5b60200260200101516116319190613ddd565b61ffff16610ec4811061164757611646613d7f565b5b602091828204019190069054906101000a900460ff16151514155b1561172657848161ffff168151811061167e5761167d613d7f565b5b6020026020010151838361ffff168151811061169d5761169c613d7f565b5b602002602001019061ffff16908161ffff16815250506001607f6001878461ffff16815181106116d0576116cf613d7f565b5b60200260200101516116e29190613ddd565b61ffff16610ec481106116f8576116f7613d7f565b5b602091828204019190066101000a81548160ff021916908315150217905550818061172290613e11565b9250505b808061173190613e11565b91505061152c565b507f3a7a32b1af4e84f0ede84d23f3211728a61d199c24844967b9e9fdc5fcfbd9f1826040516117699190613607565b60405180910390a18192505050919050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6118176120cc565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061185d575061185c856118576120cc565b61177b565b5b61189c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189390614085565b60405180910390fd5b6118a985858585856127ae565b5050505050565b6118b86120cc565b73ffffffffffffffffffffffffffffffffffffffff166118d6610e06565b73ffffffffffffffffffffffffffffffffffffffff161461192c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192390613f61565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361199b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199290614117565b60405180910390fd5b6119a4816123e7565b50565b606060005b82518161ffff161015611a7a5760006001826119c89190613fdb565b90505b83518161ffff161015611a6657838161ffff16815181106119ef576119ee613d7f565b5b602002602001015161ffff16848361ffff1681518110611a1257611a11613d7f565b5b602002602001015161ffff1603611a53576000848361ffff1681518110611a3c57611a3b613d7f565b5b602002602001019061ffff16908161ffff16815250505b8080611a5e90613e11565b9150506119cb565b508080611a7290613e11565b9150506119ac565b506000825167ffffffffffffffff811115611a9857611a9761313c565b5b604051908082528060200260200182016040528015611ac65781602001602082028036833780820191505090505b50905060008060005b85518161ffff161015611c88576001868261ffff1681518110611af557611af4613d7f565b5b602002602001015161ffff1610158015611b335750610ec4868261ffff1681518110611b2457611b23613d7f565b5b602002602001015161ffff1611155b8015611b9c57506001151560086001888461ffff1681518110611b5957611b58613d7f565b5b6020026020010151611b6b9190613ddd565b61ffff16610ec48110611b8157611b80613d7f565b5b602091828204019190069054906101000a900460ff16151514155b8015611c05575060011515607f6001888461ffff1681518110611bc257611bc1613d7f565b5b6020026020010151611bd49190613ddd565b61ffff16610ec48110611bea57611be9613d7f565b5b602091828204019190069054906101000a900460ff16151514155b15611c7557858161ffff1681518110611c2157611c20613d7f565b5b6020026020010151848361ffff1681518110611c4057611c3f613d7f565b5b602002602001019061ffff16908161ffff168152505060075483611c649190614137565b92508180611c7190613e11565b9250505b8080611c8090613e11565b915050611acf565b5081341015611ccc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc3906141d9565b60405180910390fd5b60008203611d0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0690614245565b60405180910390fd5b60005b8161ffff168161ffff161015611e03576000848261ffff1681518110611d3b57611d3a613d7f565b5b602002602001015161ffff161115611df057611d8b87858361ffff1681518110611d6857611d67613d7f565b5b602002602001015161ffff16600160405180602001604052806000815250612619565b600160086001868461ffff1681518110611da857611da7613d7f565b5b6020026020010151611dba9190613ddd565b61ffff16610ec48110611dd057611dcf613d7f565b5b602091828204019190066101000a81548160ff0219169083151502179055505b8080611dfb90613e11565b915050611d12565b50600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015611e6c573d6000803e3d6000fd5b503373ffffffffffffffffffffffffffffffffffffffff166108fc8334611e939190614265565b9081150290604051600060405180830381858888f19350505050158015611ebe573d6000803e3d6000fd5b507f3a7a32b1af4e84f0ede84d23f3211728a61d199c24844967b9e9fdc5fcfbd9f183604051611eee9190613607565b60405180910390a182935050505092915050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b606060008203611fb3576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506120c7565b600082905060005b60008214611fe5578080611fce90613ecd565b915050600a82611fde91906142c8565b9150611fbb565b60008167ffffffffffffffff8111156120015761200061313c565b5b6040519080825280601f01601f1916602001820160405280156120335781602001600182028036833780820191505090505b5090505b600085146120c05760018261204c9190614265565b9150600a8561205b91906142f9565b60306120679190614137565b60f81b81838151811061207d5761207c613d7f565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856120b991906142c8565b9450612037565b8093505050505b919050565b600033905090565b8151835114612118576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210f9061439c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612187576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217e9061442e565b60405180910390fd5b60006121916120cc565b90506121a1818787878787612a2f565b60005b84518110156123525760008582815181106121c2576121c1613d7f565b5b6020026020010151905060008583815181106121e1576121e0613d7f565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612282576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612279906144c0565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546123379190614137565b925050819055505050508061234b90613ecd565b90506121a4565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516123c99291906144e0565b60405180910390a46123df818787878787612a37565b505050505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361251b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251290614589565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161260c9190613034565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612688576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161267f9061461b565b60405180910390fd5b60006126926120cc565b90506126b3816000876126a488612c0e565b6126ad88612c0e565b87612a2f565b8260008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546127129190614137565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62878760405161279092919061463b565b60405180910390a46127a781600087878787612c88565b5050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361281d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128149061442e565b60405180910390fd5b60006128276120cc565b905061284781878761283888612c0e565b61284188612c0e565b87612a2f565b600080600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050838110156128de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128d5906144c0565b60405180910390fd5b83810360008087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508360008087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546129939190614137565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628888604051612a1092919061463b565b60405180910390a4612a26828888888888612c88565b50505050505050565b505050505050565b612a568473ffffffffffffffffffffffffffffffffffffffff16612e5f565b15612c06578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401612a9c9594939291906146b9565b6020604051808303816000875af1925050508015612ad857506040513d601f19601f82011682018060405250810190612ad59190614736565b60015b612b7d57612ae4614770565b806308c379a003612b405750612af8614792565b80612b035750612b42565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b3791906130e8565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b7490614894565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612c04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bfb90614926565b60405180910390fd5b505b505050505050565b60606000600167ffffffffffffffff811115612c2d57612c2c61313c565b5b604051908082528060200260200182016040528015612c5b5781602001602082028036833780820191505090505b5090508281600081518110612c7357612c72613d7f565b5b60200260200101818152505080915050919050565b612ca78473ffffffffffffffffffffffffffffffffffffffff16612e5f565b15612e57578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401612ced959493929190614946565b6020604051808303816000875af1925050508015612d2957506040513d601f19601f82011682018060405250810190612d269190614736565b60015b612dce57612d35614770565b806308c379a003612d915750612d49614792565b80612d545750612d93565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d8891906130e8565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dc590614894565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612e55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e4c90614926565b60405180910390fd5b505b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612ec182612e96565b9050919050565b612ed181612eb6565b8114612edc57600080fd5b50565b600081359050612eee81612ec8565b92915050565b6000819050919050565b612f0781612ef4565b8114612f1257600080fd5b50565b600081359050612f2481612efe565b92915050565b60008060408385031215612f4157612f40612e8c565b5b6000612f4f85828601612edf565b9250506020612f6085828601612f15565b9150509250929050565b612f7381612ef4565b82525050565b6000602082019050612f8e6000830184612f6a565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612fc981612f94565b8114612fd457600080fd5b50565b600081359050612fe681612fc0565b92915050565b60006020828403121561300257613001612e8c565b5b600061301084828501612fd7565b91505092915050565b60008115159050919050565b61302e81613019565b82525050565b60006020820190506130496000830184613025565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561308957808201518184015260208101905061306e565b83811115613098576000848401525b50505050565b6000601f19601f8301169050919050565b60006130ba8261304f565b6130c4818561305a565b93506130d481856020860161306b565b6130dd8161309e565b840191505092915050565b6000602082019050818103600083015261310281846130af565b905092915050565b6000602082840312156131205761311f612e8c565b5b600061312e84828501612f15565b91505092915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6131748261309e565b810181811067ffffffffffffffff821117156131935761319261313c565b5b80604052505050565b60006131a6612e82565b90506131b2828261316b565b919050565b600067ffffffffffffffff8211156131d2576131d161313c565b5b602082029050602081019050919050565b600080fd5b60006131fb6131f6846131b7565b61319c565b9050808382526020820190506020840283018581111561321e5761321d6131e3565b5b835b8181101561324757806132338882612f15565b845260208401935050602081019050613220565b5050509392505050565b600082601f83011261326657613265613137565b5b81356132768482602086016131e8565b91505092915050565b600080fd5b600067ffffffffffffffff82111561329f5761329e61313c565b5b6132a88261309e565b9050602081019050919050565b82818337600083830152505050565b60006132d76132d284613284565b61319c565b9050828152602081018484840111156132f3576132f261327f565b5b6132fe8482856132b5565b509392505050565b600082601f83011261331b5761331a613137565b5b813561332b8482602086016132c4565b91505092915050565b600080600080600060a086880312156133505761334f612e8c565b5b600061335e88828901612edf565b955050602061336f88828901612edf565b945050604086013567ffffffffffffffff8111156133905761338f612e91565b5b61339c88828901613251565b935050606086013567ffffffffffffffff8111156133bd576133bc612e91565b5b6133c988828901613251565b925050608086013567ffffffffffffffff8111156133ea576133e9612e91565b5b6133f688828901613306565b9150509295509295909350565b600067ffffffffffffffff82111561341e5761341d61313c565b5b602082029050602081019050919050565b600061ffff82169050919050565b6134468161342f565b811461345157600080fd5b50565b6000813590506134638161343d565b92915050565b600061347c61347784613403565b61319c565b9050808382526020820190506020840283018581111561349f5761349e6131e3565b5b835b818110156134c857806134b48882613454565b8452602084019350506020810190506134a1565b5050509392505050565b600082601f8301126134e7576134e6613137565b5b81356134f7848260208601613469565b91505092915050565b60006020828403121561351657613515612e8c565b5b600082013567ffffffffffffffff81111561353457613533612e91565b5b613540848285016134d2565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61357e8161342f565b82525050565b60006135908383613575565b60208301905092915050565b6000602082019050919050565b60006135b482613549565b6135be8185613554565b93506135c983613565565b8060005b838110156135fa5781516135e18882613584565b97506135ec8361359c565b9250506001810190506135cd565b5085935050505092915050565b6000602082019050818103600083015261362181846135a9565b905092915050565b600067ffffffffffffffff8211156136445761364361313c565b5b602082029050602081019050919050565b600061366861366384613629565b61319c565b9050808382526020820190506020840283018581111561368b5761368a6131e3565b5b835b818110156136b457806136a08882612edf565b84526020840193505060208101905061368d565b5050509392505050565b600082601f8301126136d3576136d2613137565b5b81356136e3848260208601613655565b91505092915050565b6000806040838503121561370357613702612e8c565b5b600083013567ffffffffffffffff81111561372157613720612e91565b5b61372d858286016136be565b925050602083013567ffffffffffffffff81111561374e5761374d612e91565b5b61375a85828601613251565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61379981612ef4565b82525050565b60006137ab8383613790565b60208301905092915050565b6000602082019050919050565b60006137cf82613764565b6137d9818561376f565b93506137e483613780565b8060005b838110156138155781516137fc888261379f565b9750613807836137b7565b9250506001810190506137e8565b5085935050505092915050565b6000602082019050818103600083015261383c81846137c4565b905092915050565b61384d81612eb6565b82525050565b60006020820190506138686000830184613844565b92915050565b61387781613019565b811461388257600080fd5b50565b6000813590506138948161386e565b92915050565b600080604083850312156138b1576138b0612e8c565b5b60006138bf85828601612edf565b92505060206138d085828601613885565b9150509250929050565b600080604083850312156138f1576138f0612e8c565b5b60006138ff85828601612edf565b925050602083013567ffffffffffffffff8111156139205761391f612e91565b5b61392c858286016134d2565b9150509250929050565b6000806040838503121561394d5761394c612e8c565b5b600061395b85828601612edf565b925050602061396c85828601612edf565b9150509250929050565b600080600080600060a0868803121561399257613991612e8c565b5b60006139a088828901612edf565b95505060206139b188828901612edf565b94505060406139c288828901612f15565b93505060606139d388828901612f15565b925050608086013567ffffffffffffffff8111156139f4576139f3612e91565b5b613a0088828901613306565b9150509295509295909350565b600060208284031215613a2357613a22612e8c565b5b6000613a3184828501612edf565b91505092915050565b6000613a4582612e96565b9050919050565b613a5581613a3a565b8114613a6057600080fd5b50565b600081359050613a7281613a4c565b92915050565b60008060408385031215613a8f57613a8e612e8c565b5b6000613a9d85828601613a63565b925050602083013567ffffffffffffffff811115613abe57613abd612e91565b5b613aca858286016134d2565b9150509250929050565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b6000613b30602b8361305a565b9150613b3b82613ad4565b604082019050919050565b60006020820190508181036000830152613b5f81613b23565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613bad57607f821691505b602082108103613bc057613bbf613b66565b5b50919050565b600081905092915050565b7f697066733a2f2f516d5350616e41576f42585834635a6556506932795472716660008201527f637964594c674e47476861654d686a3778546864642f00000000000000000000602082015250565b6000613c2d603683613bc6565b9150613c3882613bd1565b603682019050919050565b6000613c4e8261304f565b613c588185613bc6565b9350613c6881856020860161306b565b80840191505092915050565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b6000613caa600583613bc6565b9150613cb582613c74565b600582019050919050565b6000613ccb82613c20565b9150613cd78284613c43565b9150613ce282613c9d565b915081905092915050565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b6000613d4960328361305a565b9150613d5482613ced565b604082019050919050565b60006020820190508181036000830152613d7881613d3c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613de88261342f565b9150613df38361342f565b925082821015613e0657613e05613dae565b5b828203905092915050565b6000613e1c8261342f565b915061ffff8203613e3057613e2f613dae565b5b600182019050919050565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b6000613e9760298361305a565b9150613ea282613e3b565b604082019050919050565b60006020820190508181036000830152613ec681613e8a565b9050919050565b6000613ed882612ef4565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613f0a57613f09613dae565b5b600182019050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613f4b60208361305a565b9150613f5682613f15565b602082019050919050565b60006020820190508181036000830152613f7a81613f3e565b9050919050565b6000613f8c82612ef4565b9150613f9783612ef4565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613fd057613fcf613dae565b5b828202905092915050565b6000613fe68261342f565b9150613ff18361342f565b92508261ffff0382111561400857614007613dae565b5b828201905092915050565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b600061406f60298361305a565b915061407a82614013565b604082019050919050565b6000602082019050818103600083015261409e81614062565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061410160268361305a565b915061410c826140a5565b604082019050919050565b60006020820190508181036000830152614130816140f4565b9050919050565b600061414282612ef4565b915061414d83612ef4565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561418257614181613dae565b5b828201905092915050565b7f4e6f7420656e6f7567682066756e64732070726f766964656400000000000000600082015250565b60006141c360198361305a565b91506141ce8261418d565b602082019050919050565b600060208201905081810360008301526141f2816141b6565b9050919050565b7f43616e6e6f74206d696e742074616b656e20746f6b656e730000000000000000600082015250565b600061422f60188361305a565b915061423a826141f9565b602082019050919050565b6000602082019050818103600083015261425e81614222565b9050919050565b600061427082612ef4565b915061427b83612ef4565b92508282101561428e5761428d613dae565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006142d382612ef4565b91506142de83612ef4565b9250826142ee576142ed614299565b5b828204905092915050565b600061430482612ef4565b915061430f83612ef4565b92508261431f5761431e614299565b5b828206905092915050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b600061438660288361305a565b91506143918261432a565b604082019050919050565b600060208201905081810360008301526143b581614379565b9050919050565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061441860258361305a565b9150614423826143bc565b604082019050919050565b600060208201905081810360008301526144478161440b565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b60006144aa602a8361305a565b91506144b58261444e565b604082019050919050565b600060208201905081810360008301526144d98161449d565b9050919050565b600060408201905081810360008301526144fa81856137c4565b9050818103602083015261450e81846137c4565b90509392505050565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b600061457360298361305a565b915061457e82614517565b604082019050919050565b600060208201905081810360008301526145a281614566565b9050919050565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600061460560218361305a565b9150614610826145a9565b604082019050919050565b60006020820190508181036000830152614634816145f8565b9050919050565b60006040820190506146506000830185612f6a565b61465d6020830184612f6a565b9392505050565b600081519050919050565b600082825260208201905092915050565b600061468b82614664565b614695818561466f565b93506146a581856020860161306b565b6146ae8161309e565b840191505092915050565b600060a0820190506146ce6000830188613844565b6146db6020830187613844565b81810360408301526146ed81866137c4565b9050818103606083015261470181856137c4565b905081810360808301526147158184614680565b90509695505050505050565b60008151905061473081612fc0565b92915050565b60006020828403121561474c5761474b612e8c565b5b600061475a84828501614721565b91505092915050565b60008160e01c9050919050565b600060033d111561478f5760046000803e61478c600051614763565b90505b90565b600060443d1061481f576147a4612e82565b60043d036004823e80513d602482011167ffffffffffffffff821117156147cc57505061481f565b808201805167ffffffffffffffff8111156147ea575050505061481f565b80602083010160043d03850181111561480757505050505061481f565b6148168260200185018661316b565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b600061487e60348361305a565b915061488982614822565b604082019050919050565b600060208201905081810360008301526148ad81614871565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b600061491060288361305a565b915061491b826148b4565b604082019050919050565b6000602082019050818103600083015261493f81614903565b9050919050565b600060a08201905061495b6000830188613844565b6149686020830187613844565b6149756040830186612f6a565b6149826060830185612f6a565b81810360808301526149948184614680565b9050969550505050505056fea2646970667358221220f4ab7815c5e70d7d14792a69b2793293ed98c653348e4ee817a79d2b543a890064736f6c634300080d0033697066733a2f2f516d5350616e41576f42585834635a65565069327954727166637964594c674e47476861654d686a3778546864642f7b69647d2e6a736f6e

Deployed Bytecode

0x6080604052600436106101345760003560e01c80637e4cb56e116100ab578063be8cfede1161006f578063be8cfede1461044b578063c85fa73114610488578063e985e9c5146104c5578063f242432a14610502578063f2fde38b1461052b578063f8f845fc1461055457610134565b80637e4cb56e146103665780637f74cde21461038f5780638da5cb5b146103cc57806395d89b41146103f7578063a22cb4651461042257610134565b80631ddb1d34116100fd5780631ddb1d34146102465780632eb2c2d614610283578063483e88b6146102ac5780634e1273f4146102e95780634fc924f014610326578063715018a61461034f57610134565b8062fdd58e1461013957806301ffc9a71461017657806306fdde03146101b35780630d39fc81146101de5780630e89341c14610209575b600080fd5b34801561014557600080fd5b50610160600480360381019061015b9190612f2a565b610584565b60405161016d9190612f79565b60405180910390f35b34801561018257600080fd5b5061019d60048036038101906101989190612fec565b61064c565b6040516101aa9190613034565b60405180910390f35b3480156101bf57600080fd5b506101c861072e565b6040516101d591906130e8565b60405180910390f35b3480156101ea57600080fd5b506101f36107bc565b6040516102009190612f79565b60405180910390f35b34801561021557600080fd5b50610230600480360381019061022b919061310a565b6107c2565b60405161023d91906130e8565b60405180910390f35b34801561025257600080fd5b5061026d6004803603810190610268919061310a565b6107f3565b60405161027a9190613034565b60405180910390f35b34801561028f57600080fd5b506102aa60048036038101906102a59190613334565b61081e565b005b3480156102b857600080fd5b506102d360048036038101906102ce9190613500565b6108bf565b6040516102e09190613607565b60405180910390f35b3480156102f557600080fd5b50610310600480360381019061030b91906136ec565b610a68565b60405161031d9190613822565b60405180910390f35b34801561033257600080fd5b5061034d6004803603810190610348919061310a565b610b81565b005b34801561035b57600080fd5b50610364610c61565b005b34801561037257600080fd5b5061038d6004803603810190610388919061310a565b610ce9565b005b34801561039b57600080fd5b506103b660048036038101906103b1919061310a565b610ddb565b6040516103c39190613034565b60405180910390f35b3480156103d857600080fd5b506103e1610e06565b6040516103ee9190613853565b60405180910390f35b34801561040357600080fd5b5061040c610e30565b60405161041991906130e8565b60405180910390f35b34801561042e57600080fd5b506104496004803603810190610444919061389a565b610ebe565b005b34801561045757600080fd5b50610472600480360381019061046d91906138da565b610ed4565b60405161047f9190613607565b60405180910390f35b34801561049457600080fd5b506104af60048036038101906104aa9190613500565b6113ac565b6040516104bc9190613607565b60405180910390f35b3480156104d157600080fd5b506104ec60048036038101906104e79190613936565b61177b565b6040516104f99190613034565b60405180910390f35b34801561050e57600080fd5b5061052960048036038101906105249190613976565b61180f565b005b34801561053757600080fd5b50610552600480360381019061054d9190613a0d565b6118b0565b005b61056e60048036038101906105699190613a78565b6119a7565b60405161057b9190613607565b60405180910390f35b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036105f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105eb90613b46565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061071757507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610727575061072682611f02565b5b9050919050565b6004805461073b90613b95565b80601f016020809104026020016040519081016040528092919081815260200182805461076790613b95565b80156107b45780601f10610789576101008083540402835291602001916107b4565b820191906000526020600020905b81548152906001019060200180831161079757829003601f168201915b505050505081565b60075481565b60606107cd82611f6c565b6040516020016107dd9190613cc0565b6040516020818303038152906040529050919050565b607f81610ec4811061080457600080fd5b60209182820401919006915054906101000a900460ff1681565b6108266120cc565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061086c575061086b856108666120cc565b61177b565b5b6108ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108a290613d5f565b60405180910390fd5b6108b885858585856120d4565b5050505050565b60606000825167ffffffffffffffff8111156108de576108dd61313c565b5b60405190808252806020026020018201604052801561090c5781602001602082028036833780820191505090505b5090506000805b84518161ffff161015610a5d576001151560086001878461ffff168151811061093f5761093e613d7f565b5b60200260200101516109519190613ddd565b61ffff16610ec4811061096757610966613d7f565b5b602091828204019190069054906101000a900460ff161515141580156109ea575060011515607f6001878461ffff16815181106109a7576109a6613d7f565b5b60200260200101516109b99190613ddd565b61ffff16610ec481106109cf576109ce613d7f565b5b602091828204019190069054906101000a900460ff16151514155b15610a4a57848161ffff1681518110610a0657610a05613d7f565b5b6020026020010151838361ffff1681518110610a2557610a24613d7f565b5b602002602001019061ffff16908161ffff16815250508180610a4690613e11565b9250505b8080610a5590613e11565b915050610913565b508192505050919050565b60608151835114610aae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa590613ead565b60405180910390fd5b6000835167ffffffffffffffff811115610acb57610aca61313c565b5b604051908082528060200260200182016040528015610af95781602001602082028036833780820191505090505b50905060005b8451811015610b7657610b46858281518110610b1e57610b1d613d7f565b5b6020026020010151858381518110610b3957610b38613d7f565b5b6020026020010151610584565b828281518110610b5957610b58613d7f565b5b60200260200101818152505080610b6f90613ecd565b9050610aff565b508091505092915050565b610b896120cc565b73ffffffffffffffffffffffffffffffffffffffff16610ba7610e06565b73ffffffffffffffffffffffffffffffffffffffff1614610bfd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf490613f61565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610c5757600080fd5b8060078190555050565b610c696120cc565b73ffffffffffffffffffffffffffffffffffffffff16610c87610e06565b73ffffffffffffffffffffffffffffffffffffffff1614610cdd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd490613f61565b60405180910390fd5b610ce760006123e7565b565b610cf16120cc565b73ffffffffffffffffffffffffffffffffffffffff16610d0f610e06565b73ffffffffffffffffffffffffffffffffffffffff1614610d65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5c90613f61565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610dbf57600080fd5b66038d7ea4c6800081610dd29190613f81565b60078190555050565b600881610ec48110610dec57600080fd5b60209182820401919006915054906101000a900460ff1681565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60058054610e3d90613b95565b80601f0160208091040260200160405190810160405280929190818152602001828054610e6990613b95565b8015610eb65780601f10610e8b57610100808354040283529160200191610eb6565b820191906000526020600020905b815481529060010190602001808311610e9957829003601f168201915b505050505081565b610ed0610ec96120cc565b83836124ad565b5050565b6060610ede6120cc565b73ffffffffffffffffffffffffffffffffffffffff16610efc610e06565b73ffffffffffffffffffffffffffffffffffffffff1614610f52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4990613f61565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610fac57600080fd5b60005b82518161ffff16101561107d576000600182610fcb9190613fdb565b90505b83518161ffff16101561106957838161ffff1681518110610ff257610ff1613d7f565b5b602002602001015161ffff16848361ffff168151811061101557611014613d7f565b5b602002602001015161ffff1603611056576000848361ffff168151811061103f5761103e613d7f565b5b602002602001019061ffff16908161ffff16815250505b808061106190613e11565b915050610fce565b50808061107590613e11565b915050610faf565b506000825167ffffffffffffffff81111561109b5761109a61313c565b5b6040519080825280602002602001820160405280156110c95781602001602082028036833780820191505090505b5090506000805b84518161ffff161015611210576001858261ffff16815181106110f6576110f5613d7f565b5b602002602001015161ffff16101580156111345750610ec4858261ffff168151811061112557611124613d7f565b5b602002602001015161ffff1611155b801561119d57506001151560086001878461ffff168151811061115a57611159613d7f565b5b602002602001015161116c9190613ddd565b61ffff16610ec4811061118257611181613d7f565b5b602091828204019190069054906101000a900460ff16151514155b156111fd57848161ffff16815181106111b9576111b8613d7f565b5b6020026020010151838361ffff16815181106111d8576111d7613d7f565b5b602002602001019061ffff16908161ffff168152505081806111f990613e11565b9250505b808061120890613e11565b9150506110d0565b5060005b8161ffff168161ffff161015611369576000838261ffff168151811061123d5761123c613d7f565b5b602002602001015161ffff1611156113565761128d86848361ffff168151811061126a57611269613d7f565b5b602002602001015161ffff16600160405180602001604052806000815250612619565b600160086001858461ffff16815181106112aa576112a9613d7f565b5b60200260200101516112bc9190613ddd565b61ffff16610ec481106112d2576112d1613d7f565b5b602091828204019190066101000a81548160ff0219169083151502179055506000607f6001858461ffff168151811061130e5761130d613d7f565b5b60200260200101516113209190613ddd565b61ffff16610ec4811061133657611335613d7f565b5b602091828204019190066101000a81548160ff0219169083151502179055505b808061136190613e11565b915050611214565b507f3a7a32b1af4e84f0ede84d23f3211728a61d199c24844967b9e9fdc5fcfbd9f1826040516113999190613607565b60405180910390a1819250505092915050565b6060600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461140857600080fd5b60005b82518161ffff1610156114d95760006001826114279190613fdb565b90505b83518161ffff1610156114c557838161ffff168151811061144e5761144d613d7f565b5b602002602001015161ffff16848361ffff168151811061147157611470613d7f565b5b602002602001015161ffff16036114b2576000848361ffff168151811061149b5761149a613d7f565b5b602002602001019061ffff16908161ffff16815250505b80806114bd90613e11565b91505061142a565b5080806114d190613e11565b91505061140b565b506000825167ffffffffffffffff8111156114f7576114f661313c565b5b6040519080825280602002602001820160405280156115255781602001602082028036833780820191505090505b5090506000805b84518161ffff161015611739576001858261ffff168151811061155257611551613d7f565b5b602002602001015161ffff16101580156115905750610ec4858261ffff168151811061158157611580613d7f565b5b602002602001015161ffff1611155b80156115f957506001151560086001878461ffff16815181106115b6576115b5613d7f565b5b60200260200101516115c89190613ddd565b61ffff16610ec481106115de576115dd613d7f565b5b602091828204019190069054906101000a900460ff16151514155b8015611662575060011515607f6001878461ffff168151811061161f5761161e613d7f565b5b60200260200101516116319190613ddd565b61ffff16610ec4811061164757611646613d7f565b5b602091828204019190069054906101000a900460ff16151514155b1561172657848161ffff168151811061167e5761167d613d7f565b5b6020026020010151838361ffff168151811061169d5761169c613d7f565b5b602002602001019061ffff16908161ffff16815250506001607f6001878461ffff16815181106116d0576116cf613d7f565b5b60200260200101516116e29190613ddd565b61ffff16610ec481106116f8576116f7613d7f565b5b602091828204019190066101000a81548160ff021916908315150217905550818061172290613e11565b9250505b808061173190613e11565b91505061152c565b507f3a7a32b1af4e84f0ede84d23f3211728a61d199c24844967b9e9fdc5fcfbd9f1826040516117699190613607565b60405180910390a18192505050919050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6118176120cc565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061185d575061185c856118576120cc565b61177b565b5b61189c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189390614085565b60405180910390fd5b6118a985858585856127ae565b5050505050565b6118b86120cc565b73ffffffffffffffffffffffffffffffffffffffff166118d6610e06565b73ffffffffffffffffffffffffffffffffffffffff161461192c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192390613f61565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361199b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199290614117565b60405180910390fd5b6119a4816123e7565b50565b606060005b82518161ffff161015611a7a5760006001826119c89190613fdb565b90505b83518161ffff161015611a6657838161ffff16815181106119ef576119ee613d7f565b5b602002602001015161ffff16848361ffff1681518110611a1257611a11613d7f565b5b602002602001015161ffff1603611a53576000848361ffff1681518110611a3c57611a3b613d7f565b5b602002602001019061ffff16908161ffff16815250505b8080611a5e90613e11565b9150506119cb565b508080611a7290613e11565b9150506119ac565b506000825167ffffffffffffffff811115611a9857611a9761313c565b5b604051908082528060200260200182016040528015611ac65781602001602082028036833780820191505090505b50905060008060005b85518161ffff161015611c88576001868261ffff1681518110611af557611af4613d7f565b5b602002602001015161ffff1610158015611b335750610ec4868261ffff1681518110611b2457611b23613d7f565b5b602002602001015161ffff1611155b8015611b9c57506001151560086001888461ffff1681518110611b5957611b58613d7f565b5b6020026020010151611b6b9190613ddd565b61ffff16610ec48110611b8157611b80613d7f565b5b602091828204019190069054906101000a900460ff16151514155b8015611c05575060011515607f6001888461ffff1681518110611bc257611bc1613d7f565b5b6020026020010151611bd49190613ddd565b61ffff16610ec48110611bea57611be9613d7f565b5b602091828204019190069054906101000a900460ff16151514155b15611c7557858161ffff1681518110611c2157611c20613d7f565b5b6020026020010151848361ffff1681518110611c4057611c3f613d7f565b5b602002602001019061ffff16908161ffff168152505060075483611c649190614137565b92508180611c7190613e11565b9250505b8080611c8090613e11565b915050611acf565b5081341015611ccc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc3906141d9565b60405180910390fd5b60008203611d0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0690614245565b60405180910390fd5b60005b8161ffff168161ffff161015611e03576000848261ffff1681518110611d3b57611d3a613d7f565b5b602002602001015161ffff161115611df057611d8b87858361ffff1681518110611d6857611d67613d7f565b5b602002602001015161ffff16600160405180602001604052806000815250612619565b600160086001868461ffff1681518110611da857611da7613d7f565b5b6020026020010151611dba9190613ddd565b61ffff16610ec48110611dd057611dcf613d7f565b5b602091828204019190066101000a81548160ff0219169083151502179055505b8080611dfb90613e11565b915050611d12565b50600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015611e6c573d6000803e3d6000fd5b503373ffffffffffffffffffffffffffffffffffffffff166108fc8334611e939190614265565b9081150290604051600060405180830381858888f19350505050158015611ebe573d6000803e3d6000fd5b507f3a7a32b1af4e84f0ede84d23f3211728a61d199c24844967b9e9fdc5fcfbd9f183604051611eee9190613607565b60405180910390a182935050505092915050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b606060008203611fb3576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506120c7565b600082905060005b60008214611fe5578080611fce90613ecd565b915050600a82611fde91906142c8565b9150611fbb565b60008167ffffffffffffffff8111156120015761200061313c565b5b6040519080825280601f01601f1916602001820160405280156120335781602001600182028036833780820191505090505b5090505b600085146120c05760018261204c9190614265565b9150600a8561205b91906142f9565b60306120679190614137565b60f81b81838151811061207d5761207c613d7f565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856120b991906142c8565b9450612037565b8093505050505b919050565b600033905090565b8151835114612118576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210f9061439c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612187576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217e9061442e565b60405180910390fd5b60006121916120cc565b90506121a1818787878787612a2f565b60005b84518110156123525760008582815181106121c2576121c1613d7f565b5b6020026020010151905060008583815181106121e1576121e0613d7f565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612282576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612279906144c0565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546123379190614137565b925050819055505050508061234b90613ecd565b90506121a4565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516123c99291906144e0565b60405180910390a46123df818787878787612a37565b505050505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361251b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251290614589565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161260c9190613034565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612688576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161267f9061461b565b60405180910390fd5b60006126926120cc565b90506126b3816000876126a488612c0e565b6126ad88612c0e565b87612a2f565b8260008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546127129190614137565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62878760405161279092919061463b565b60405180910390a46127a781600087878787612c88565b5050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361281d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128149061442e565b60405180910390fd5b60006128276120cc565b905061284781878761283888612c0e565b61284188612c0e565b87612a2f565b600080600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050838110156128de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128d5906144c0565b60405180910390fd5b83810360008087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508360008087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546129939190614137565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628888604051612a1092919061463b565b60405180910390a4612a26828888888888612c88565b50505050505050565b505050505050565b612a568473ffffffffffffffffffffffffffffffffffffffff16612e5f565b15612c06578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401612a9c9594939291906146b9565b6020604051808303816000875af1925050508015612ad857506040513d601f19601f82011682018060405250810190612ad59190614736565b60015b612b7d57612ae4614770565b806308c379a003612b405750612af8614792565b80612b035750612b42565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b3791906130e8565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b7490614894565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612c04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bfb90614926565b60405180910390fd5b505b505050505050565b60606000600167ffffffffffffffff811115612c2d57612c2c61313c565b5b604051908082528060200260200182016040528015612c5b5781602001602082028036833780820191505090505b5090508281600081518110612c7357612c72613d7f565b5b60200260200101818152505080915050919050565b612ca78473ffffffffffffffffffffffffffffffffffffffff16612e5f565b15612e57578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401612ced959493929190614946565b6020604051808303816000875af1925050508015612d2957506040513d601f19601f82011682018060405250810190612d269190614736565b60015b612dce57612d35614770565b806308c379a003612d915750612d49614792565b80612d545750612d93565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d8891906130e8565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dc590614894565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612e55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e4c90614926565b60405180910390fd5b505b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612ec182612e96565b9050919050565b612ed181612eb6565b8114612edc57600080fd5b50565b600081359050612eee81612ec8565b92915050565b6000819050919050565b612f0781612ef4565b8114612f1257600080fd5b50565b600081359050612f2481612efe565b92915050565b60008060408385031215612f4157612f40612e8c565b5b6000612f4f85828601612edf565b9250506020612f6085828601612f15565b9150509250929050565b612f7381612ef4565b82525050565b6000602082019050612f8e6000830184612f6a565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612fc981612f94565b8114612fd457600080fd5b50565b600081359050612fe681612fc0565b92915050565b60006020828403121561300257613001612e8c565b5b600061301084828501612fd7565b91505092915050565b60008115159050919050565b61302e81613019565b82525050565b60006020820190506130496000830184613025565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561308957808201518184015260208101905061306e565b83811115613098576000848401525b50505050565b6000601f19601f8301169050919050565b60006130ba8261304f565b6130c4818561305a565b93506130d481856020860161306b565b6130dd8161309e565b840191505092915050565b6000602082019050818103600083015261310281846130af565b905092915050565b6000602082840312156131205761311f612e8c565b5b600061312e84828501612f15565b91505092915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6131748261309e565b810181811067ffffffffffffffff821117156131935761319261313c565b5b80604052505050565b60006131a6612e82565b90506131b2828261316b565b919050565b600067ffffffffffffffff8211156131d2576131d161313c565b5b602082029050602081019050919050565b600080fd5b60006131fb6131f6846131b7565b61319c565b9050808382526020820190506020840283018581111561321e5761321d6131e3565b5b835b8181101561324757806132338882612f15565b845260208401935050602081019050613220565b5050509392505050565b600082601f83011261326657613265613137565b5b81356132768482602086016131e8565b91505092915050565b600080fd5b600067ffffffffffffffff82111561329f5761329e61313c565b5b6132a88261309e565b9050602081019050919050565b82818337600083830152505050565b60006132d76132d284613284565b61319c565b9050828152602081018484840111156132f3576132f261327f565b5b6132fe8482856132b5565b509392505050565b600082601f83011261331b5761331a613137565b5b813561332b8482602086016132c4565b91505092915050565b600080600080600060a086880312156133505761334f612e8c565b5b600061335e88828901612edf565b955050602061336f88828901612edf565b945050604086013567ffffffffffffffff8111156133905761338f612e91565b5b61339c88828901613251565b935050606086013567ffffffffffffffff8111156133bd576133bc612e91565b5b6133c988828901613251565b925050608086013567ffffffffffffffff8111156133ea576133e9612e91565b5b6133f688828901613306565b9150509295509295909350565b600067ffffffffffffffff82111561341e5761341d61313c565b5b602082029050602081019050919050565b600061ffff82169050919050565b6134468161342f565b811461345157600080fd5b50565b6000813590506134638161343d565b92915050565b600061347c61347784613403565b61319c565b9050808382526020820190506020840283018581111561349f5761349e6131e3565b5b835b818110156134c857806134b48882613454565b8452602084019350506020810190506134a1565b5050509392505050565b600082601f8301126134e7576134e6613137565b5b81356134f7848260208601613469565b91505092915050565b60006020828403121561351657613515612e8c565b5b600082013567ffffffffffffffff81111561353457613533612e91565b5b613540848285016134d2565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61357e8161342f565b82525050565b60006135908383613575565b60208301905092915050565b6000602082019050919050565b60006135b482613549565b6135be8185613554565b93506135c983613565565b8060005b838110156135fa5781516135e18882613584565b97506135ec8361359c565b9250506001810190506135cd565b5085935050505092915050565b6000602082019050818103600083015261362181846135a9565b905092915050565b600067ffffffffffffffff8211156136445761364361313c565b5b602082029050602081019050919050565b600061366861366384613629565b61319c565b9050808382526020820190506020840283018581111561368b5761368a6131e3565b5b835b818110156136b457806136a08882612edf565b84526020840193505060208101905061368d565b5050509392505050565b600082601f8301126136d3576136d2613137565b5b81356136e3848260208601613655565b91505092915050565b6000806040838503121561370357613702612e8c565b5b600083013567ffffffffffffffff81111561372157613720612e91565b5b61372d858286016136be565b925050602083013567ffffffffffffffff81111561374e5761374d612e91565b5b61375a85828601613251565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61379981612ef4565b82525050565b60006137ab8383613790565b60208301905092915050565b6000602082019050919050565b60006137cf82613764565b6137d9818561376f565b93506137e483613780565b8060005b838110156138155781516137fc888261379f565b9750613807836137b7565b9250506001810190506137e8565b5085935050505092915050565b6000602082019050818103600083015261383c81846137c4565b905092915050565b61384d81612eb6565b82525050565b60006020820190506138686000830184613844565b92915050565b61387781613019565b811461388257600080fd5b50565b6000813590506138948161386e565b92915050565b600080604083850312156138b1576138b0612e8c565b5b60006138bf85828601612edf565b92505060206138d085828601613885565b9150509250929050565b600080604083850312156138f1576138f0612e8c565b5b60006138ff85828601612edf565b925050602083013567ffffffffffffffff8111156139205761391f612e91565b5b61392c858286016134d2565b9150509250929050565b6000806040838503121561394d5761394c612e8c565b5b600061395b85828601612edf565b925050602061396c85828601612edf565b9150509250929050565b600080600080600060a0868803121561399257613991612e8c565b5b60006139a088828901612edf565b95505060206139b188828901612edf565b94505060406139c288828901612f15565b93505060606139d388828901612f15565b925050608086013567ffffffffffffffff8111156139f4576139f3612e91565b5b613a0088828901613306565b9150509295509295909350565b600060208284031215613a2357613a22612e8c565b5b6000613a3184828501612edf565b91505092915050565b6000613a4582612e96565b9050919050565b613a5581613a3a565b8114613a6057600080fd5b50565b600081359050613a7281613a4c565b92915050565b60008060408385031215613a8f57613a8e612e8c565b5b6000613a9d85828601613a63565b925050602083013567ffffffffffffffff811115613abe57613abd612e91565b5b613aca858286016134d2565b9150509250929050565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b6000613b30602b8361305a565b9150613b3b82613ad4565b604082019050919050565b60006020820190508181036000830152613b5f81613b23565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613bad57607f821691505b602082108103613bc057613bbf613b66565b5b50919050565b600081905092915050565b7f697066733a2f2f516d5350616e41576f42585834635a6556506932795472716660008201527f637964594c674e47476861654d686a3778546864642f00000000000000000000602082015250565b6000613c2d603683613bc6565b9150613c3882613bd1565b603682019050919050565b6000613c4e8261304f565b613c588185613bc6565b9350613c6881856020860161306b565b80840191505092915050565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b6000613caa600583613bc6565b9150613cb582613c74565b600582019050919050565b6000613ccb82613c20565b9150613cd78284613c43565b9150613ce282613c9d565b915081905092915050565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b6000613d4960328361305a565b9150613d5482613ced565b604082019050919050565b60006020820190508181036000830152613d7881613d3c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613de88261342f565b9150613df38361342f565b925082821015613e0657613e05613dae565b5b828203905092915050565b6000613e1c8261342f565b915061ffff8203613e3057613e2f613dae565b5b600182019050919050565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b6000613e9760298361305a565b9150613ea282613e3b565b604082019050919050565b60006020820190508181036000830152613ec681613e8a565b9050919050565b6000613ed882612ef4565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613f0a57613f09613dae565b5b600182019050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613f4b60208361305a565b9150613f5682613f15565b602082019050919050565b60006020820190508181036000830152613f7a81613f3e565b9050919050565b6000613f8c82612ef4565b9150613f9783612ef4565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613fd057613fcf613dae565b5b828202905092915050565b6000613fe68261342f565b9150613ff18361342f565b92508261ffff0382111561400857614007613dae565b5b828201905092915050565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b600061406f60298361305a565b915061407a82614013565b604082019050919050565b6000602082019050818103600083015261409e81614062565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061410160268361305a565b915061410c826140a5565b604082019050919050565b60006020820190508181036000830152614130816140f4565b9050919050565b600061414282612ef4565b915061414d83612ef4565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561418257614181613dae565b5b828201905092915050565b7f4e6f7420656e6f7567682066756e64732070726f766964656400000000000000600082015250565b60006141c360198361305a565b91506141ce8261418d565b602082019050919050565b600060208201905081810360008301526141f2816141b6565b9050919050565b7f43616e6e6f74206d696e742074616b656e20746f6b656e730000000000000000600082015250565b600061422f60188361305a565b915061423a826141f9565b602082019050919050565b6000602082019050818103600083015261425e81614222565b9050919050565b600061427082612ef4565b915061427b83612ef4565b92508282101561428e5761428d613dae565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006142d382612ef4565b91506142de83612ef4565b9250826142ee576142ed614299565b5b828204905092915050565b600061430482612ef4565b915061430f83612ef4565b92508261431f5761431e614299565b5b828206905092915050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b600061438660288361305a565b91506143918261432a565b604082019050919050565b600060208201905081810360008301526143b581614379565b9050919050565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061441860258361305a565b9150614423826143bc565b604082019050919050565b600060208201905081810360008301526144478161440b565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b60006144aa602a8361305a565b91506144b58261444e565b604082019050919050565b600060208201905081810360008301526144d98161449d565b9050919050565b600060408201905081810360008301526144fa81856137c4565b9050818103602083015261450e81846137c4565b90509392505050565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b600061457360298361305a565b915061457e82614517565b604082019050919050565b600060208201905081810360008301526145a281614566565b9050919050565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600061460560218361305a565b9150614610826145a9565b604082019050919050565b60006020820190508181036000830152614634816145f8565b9050919050565b60006040820190506146506000830185612f6a565b61465d6020830184612f6a565b9392505050565b600081519050919050565b600082825260208201905092915050565b600061468b82614664565b614695818561466f565b93506146a581856020860161306b565b6146ae8161309e565b840191505092915050565b600060a0820190506146ce6000830188613844565b6146db6020830187613844565b81810360408301526146ed81866137c4565b9050818103606083015261470181856137c4565b905081810360808301526147158184614680565b90509695505050505050565b60008151905061473081612fc0565b92915050565b60006020828403121561474c5761474b612e8c565b5b600061475a84828501614721565b91505092915050565b60008160e01c9050919050565b600060033d111561478f5760046000803e61478c600051614763565b90505b90565b600060443d1061481f576147a4612e82565b60043d036004823e80513d602482011167ffffffffffffffff821117156147cc57505061481f565b808201805167ffffffffffffffff8111156147ea575050505061481f565b80602083010160043d03850181111561480757505050505061481f565b6148168260200185018661316b565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b600061487e60348361305a565b915061488982614822565b604082019050919050565b600060208201905081810360008301526148ad81614871565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b600061491060288361305a565b915061491b826148b4565b604082019050919050565b6000602082019050818103600083015261493f81614903565b9050919050565b600060a08201905061495b6000830188613844565b6149686020830187613844565b6149756040830186612f6a565b6149826060830185612f6a565b81810360808301526149948184614680565b9050969550505050505056fea2646970667358221220f4ab7815c5e70d7d14792a69b2793293ed98c653348e4ee817a79d2b543a890064736f6c634300080d0033

Deployed Bytecode Sourcemap

39106:5544:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25534:231;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24557:310;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39168:48;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39299:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40003:311;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39377:30;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27473:442;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43873:473;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25931:524;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44351:134;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4763:103;;;;;;;;;;;;;:::i;:::-;;44490:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39340:30;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4112:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39223:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26528:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41749:1165;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42922:943;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26755:168;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26995:401;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5021:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40322:1422;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25534:231;25620:7;25667:1;25648:21;;:7;:21;;;25640:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;25735:9;:13;25745:2;25735:13;;;;;;;;;;;:22;25749:7;25735:22;;;;;;;;;;;;;;;;25728:29;;25534:231;;;;:::o;24557:310::-;24659:4;24711:26;24696:41;;;:11;:41;;;;:110;;;;24769:37;24754:52;;;:11;:52;;;;24696:110;:163;;;;24823:36;24847:11;24823:23;:36::i;:::-;24696:163;24676:183;;24557:310;;;:::o;39168:48::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;39299:34::-;;;;:::o;40003:311::-;40063:13;40228:25;40245:7;40228:16;:25::i;:::-;40118:176;;;;;;;;:::i;:::-;;;;;;;;;;;;;40089:217;;40003:311;;;:::o;39377:30::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;27473:442::-;27714:12;:10;:12::i;:::-;27706:20;;:4;:20;;;:60;;;;27730:36;27747:4;27753:12;:10;:12::i;:::-;27730:16;:36::i;:::-;27706:60;27684:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;27855:52;27878:4;27884:2;27888:3;27893:7;27902:4;27855:22;:52::i;:::-;27473:442;;;;;:::o;43873:473::-;43944:15;43972:31;44019:3;:10;44006:24;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43972:58;;44041:14;44075:8;44070:236;44093:3;:10;44089:1;:14;;;44070:236;;;44157:4;44129:32;;:12;44151:1;44142:3;44146:1;44142:6;;;;;;;;;;:::i;:::-;;;;;;;;:10;;;;:::i;:::-;44129:24;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;:32;;;;:68;;;;;44193:4;44165:32;;:12;44187:1;44178:3;44182:1;44178:6;;;;;;;;;;:::i;:::-;;;;;;;;:10;;;;:::i;:::-;44165:24;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;:32;;;;44129:68;44125:170;;;44245:3;44249:1;44245:6;;;;;;;;;;:::i;:::-;;;;;;;;44218:15;44234:7;44218:24;;;;;;;;;;:::i;:::-;;;;;;;:33;;;;;;;;;;;44270:9;;;;;:::i;:::-;;;;44125:170;44105:3;;;;;:::i;:::-;;;;44070:236;;;;44323:15;44316:22;;;;43873:473;;;:::o;25931:524::-;26087:16;26148:3;:10;26129:8;:15;:29;26121:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;26217:30;26264:8;:15;26250:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26217:63;;26298:9;26293:122;26317:8;:15;26313:1;:19;26293:122;;;26373:30;26383:8;26392:1;26383:11;;;;;;;;:::i;:::-;;;;;;;;26396:3;26400:1;26396:6;;;;;;;;:::i;:::-;;;;;;;;26373:9;:30::i;:::-;26354:13;26368:1;26354:16;;;;;;;;:::i;:::-;;;;;;;:49;;;;;26334:3;;;;:::i;:::-;;;26293:122;;;;26434:13;26427:20;;;25931:524;;;;:::o;44351:134::-;4343:12;:10;:12::i;:::-;4332:23;;:7;:5;:7::i;:::-;:23;;;4324:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44440:13:::1;;;;;;;;;;;44426:27;;:10;:27;;;44418:36;;;::::0;::::1;;44470:10;44459:8;:21;;;;44351:134:::0;:::o;4763:103::-;4343:12;:10;:12::i;:::-;4332:23;;:7;:5;:7::i;:::-;:23;;;4324:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4828:30:::1;4855:1;4828:18;:30::i;:::-;4763:103::o:0;44490:157::-;4343:12;:10;:12::i;:::-;4332:23;;:7;:5;:7::i;:::-;:23;;;4324:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44585:13:::1;;;;;;;;;;;44571:27;;:10;:27;;;44563:36;;;::::0;::::1;;44631:11;44615:13;:27;;;;:::i;:::-;44604:8;:38;;;;44490:157:::0;:::o;39340:30::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;4112:87::-;4158:7;4185:6;;;;;;;;;;;4178:13;;4112:87;:::o;39223:28::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;26528:155::-;26623:52;26642:12;:10;:12::i;:::-;26656:8;26666;26623:18;:52::i;:::-;26528:155;;:::o;41749:1165::-;41834:15;4343:12;:10;:12::i;:::-;4332:23;;:7;:5;:7::i;:::-;:23;;;4324:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41878:13:::1;;;;;;;;;;;41864:27;;:10;:27;;;41856:36;;;::::0;::::1;;41910:8;41905:220;41928:3;:10;41924:1;:14;;;41905:220;;;41966:8;41981:1;41977;:5;;;;:::i;:::-;41966:16;;41961:153;41988:3;:10;41984:1;:14;;;41961:153;;;42038:3;42042:1;42038:6;;;;;;;;;;:::i;:::-;;;;;;;;42028:16;;:3;42032:1;42028:6;;;;;;;;;;:::i;:::-;;;;;;;;:16;;::::0;42024:75:::1;;42078:1;42069:3;42073:1;42069:6;;;;;;;;;;:::i;:::-;;;;;;;:10;;;;;;;;;::::0;::::1;42024:75;42000:3;;;;;:::i;:::-;;;;41961:153;;;;41940:3;;;;;:::i;:::-;;;;41905:220;;;;42137:29;42182:3;:10;42169:24;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42137:56;;42204:14;42238:8:::0;42233:297:::1;42256:3;:10;42252:1;:14;;;42233:297;;;42320:1;42310:3;42314:1;42310:6;;;;;;;;;;:::i;:::-;;;;;;;;:11;;;;:46;;;;;42352:4;42342:3;42346:1;42342:6;;;;;;;;;;:::i;:::-;;;;;;;;:14;;;;42310:46;:99;;;;;42405:4;42377:32;;:12;42399:1;42390:3;42394:1;42390:6;;;;;;;;;;:::i;:::-;;;;;;;;:10;;;;:::i;:::-;42377:24;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;:32;;;;42310:99;42288:231;;;42469:3;42473:1;42469:6;;;;;;;;;;:::i;:::-;;;;;;;;42444:13;42458:7;42444:22;;;;;;;;;;:::i;:::-;;;;;;;:31;;;;;;;;;::::0;::::1;42494:9;;;;;:::i;:::-;;;;42288:231;42268:3;;;;;:::i;:::-;;;;42233:297;;;;42547:8;42542:284;42565:7;42561:11;;:1;:11;;;42542:284;;;42617:1;42598:13;42612:1;42598:16;;;;;;;;;;:::i;:::-;;;;;;;;:20;;;42594:221;;;42639:39;42645:7;42654:13;42668:1;42654:16;;;;;;;;;;:::i;:::-;;;;;;;;42639:39;;42672:1;42639:39;;;;;;;;;;;::::0;:5:::1;:39::i;:::-;42734:4;42697:12;42729:1;42710:13;42724:1;42710:16;;;;;;;;;;:::i;:::-;;;;;;;;:20;;;;:::i;:::-;42697:34;;;;;;;;;:::i;:::-;;;;;;;;;;;:41;;;;;;;;;;;;;;;;;;42794:5;42757:12;42789:1;42770:13;42784:1;42770:16;;;;;;;;;;:::i;:::-;;;;;;;;:20;;;;:::i;:::-;42757:34;;;;;;;;;:::i;:::-;;;;;;;;;;;:42;;;;;;;;;;;;;;;;;;42594:221;42574:3;;;;;:::i;:::-;;;;42542:284;;;;42851:27;42864:13;42851:27;;;;;;:::i;:::-;;;;;;;;42896:13;42889:20;;;;41749:1165:::0;;;;:::o;42922:943::-;42979:15;43023:13;;;;;;;;;;;43009:27;;:10;:27;;;43001:36;;;;;;43055:8;43050:220;43073:3;:10;43069:1;:14;;;43050:220;;;43111:8;43126:1;43122;:5;;;;:::i;:::-;43111:16;;43106:153;43133:3;:10;43129:1;:14;;;43106:153;;;43183:3;43187:1;43183:6;;;;;;;;;;:::i;:::-;;;;;;;;43173:16;;:3;43177:1;43173:6;;;;;;;;;;:::i;:::-;;;;;;;;:16;;;43169:75;;43223:1;43214:3;43218:1;43214:6;;;;;;;;;;:::i;:::-;;;;;;;:10;;;;;;;;;;;43169:75;43145:3;;;;;:::i;:::-;;;;43106:153;;;;43085:3;;;;;:::i;:::-;;;;43050:220;;;;43282:28;43326:3;:10;43313:24;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43282:55;;43348:14;43382:8;43377:399;43400:3;:10;43396:1;:14;;;43377:399;;;43464:1;43454:3;43458:1;43454:6;;;;;;;;;;:::i;:::-;;;;;;;;:11;;;;:46;;;;;43496:4;43486:3;43490:1;43486:6;;;;;;;;;;:::i;:::-;;;;;;;;:14;;;;43454:46;:99;;;;;43549:4;43521:32;;:12;43543:1;43534:3;43538:1;43534:6;;;;;;;;;;:::i;:::-;;;;;;;;:10;;;;:::i;:::-;43521:24;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;:32;;;;43454:99;:152;;;;;43602:4;43574:32;;:12;43596:1;43587:3;43591:1;43587:6;;;;;;;;;;:::i;:::-;;;;;;;;:10;;;;:::i;:::-;43574:24;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;:32;;;;43454:152;43432:333;;;43665:3;43669:1;43665:6;;;;;;;;;;:::i;:::-;;;;;;;;43641:12;43654:7;43641:21;;;;;;;;;;:::i;:::-;;;;;;;:30;;;;;;;;;;;43717:4;43690:12;43712:1;43703:3;43707:1;43703:6;;;;;;;;;;:::i;:::-;;;;;;;;:10;;;;:::i;:::-;43690:24;;;;;;;;;:::i;:::-;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;43740:9;;;;;:::i;:::-;;;;43432:333;43412:3;;;;;:::i;:::-;;;;43377:399;;;;43801:26;43814:12;43801:26;;;;;;:::i;:::-;;;;;;;;43845:12;43838:19;;;;42922:943;;;:::o;26755:168::-;26854:4;26878:18;:27;26897:7;26878:27;;;;;;;;;;;;;;;:37;26906:8;26878:37;;;;;;;;;;;;;;;;;;;;;;;;;26871:44;;26755:168;;;;:::o;26995:401::-;27211:12;:10;:12::i;:::-;27203:20;;:4;:20;;;:60;;;;27227:36;27244:4;27250:12;:10;:12::i;:::-;27227:16;:36::i;:::-;27203:60;27181:151;;;;;;;;;;;;:::i;:::-;;;;;;;;;27343:45;27361:4;27367:2;27371;27375:6;27383:4;27343:17;:45::i;:::-;26995:401;;;;;:::o;5021:201::-;4343:12;:10;:12::i;:::-;4332:23;;:7;:5;:7::i;:::-;:23;;;4324:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5130:1:::1;5110:22;;:8;:22;;::::0;5102:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;5186:28;5205:8;5186:18;:28::i;:::-;5021:201:::0;:::o;40322:1422::-;40410:15;40443:8;40438:220;40461:3;:10;40457:1;:14;;;40438:220;;;40499:8;40514:1;40510;:5;;;;:::i;:::-;40499:16;;40494:153;40521:3;:10;40517:1;:14;;;40494:153;;;40571:3;40575:1;40571:6;;;;;;;;;;:::i;:::-;;;;;;;;40561:16;;:3;40565:1;40561:6;;;;;;;;;;:::i;:::-;;;;;;;;:16;;;40557:75;;40611:1;40602:3;40606:1;40602:6;;;;;;;;;;:::i;:::-;;;;;;;:10;;;;;;;;;;;40557:75;40533:3;;;;;:::i;:::-;;;;40494:153;;;;40473:3;;;;;:::i;:::-;;;;40438:220;;;;40670:28;40714:3;:10;40701:24;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40670:55;;40736:10;40761:14;40795:8;40790:385;40813:3;:10;40809:1;:14;;;40790:385;;;40877:1;40867:3;40871:1;40867:6;;;;;;;;;;:::i;:::-;;;;;;;;:11;;;;:46;;;;;40909:4;40899:3;40903:1;40899:6;;;;;;;;;;:::i;:::-;;;;;;;;:14;;;;40867:46;:99;;;;;40962:4;40934:32;;:12;40956:1;40947:3;40951:1;40947:6;;;;;;;;;;:::i;:::-;;;;;;;;:10;;;;:::i;:::-;40934:24;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;:32;;;;40867:99;:152;;;;;41015:4;40987:32;;:12;41009:1;41000:3;41004:1;41000:6;;;;;;;;;;:::i;:::-;;;;;;;;:10;;;;:::i;:::-;40987:24;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;:32;;;;40867:152;40845:319;;;41078:3;41082:1;41078:6;;;;;;;;;;:::i;:::-;;;;;;;;41054:12;41067:7;41054:21;;;;;;;;;;:::i;:::-;;;;;;;:30;;;;;;;;;;;41112:8;;41103:17;;;;;:::i;:::-;;;41139:9;;;;;:::i;:::-;;;;40845:319;40825:3;;;;;:::i;:::-;;;;40790:385;;;;41208:5;41195:9;:18;;41187:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;41269:1;41260:5;:10;41256:77;;41287:34;;;;;;;;;;:::i;:::-;;;;;;;;41256:77;41350:8;41345:218;41368:7;41364:11;;:1;:11;;;41345:218;;;41419:1;41401:12;41414:1;41401:15;;;;;;;;;;:::i;:::-;;;;;;;;:19;;;41397:155;;;41441:36;41447:5;41454:12;41467:1;41454:15;;;;;;;;;;:::i;:::-;;;;;;;;41441:36;;41471:1;41441:36;;;;;;;;;;;;:5;:36::i;:::-;41532:4;41496:12;41527:1;41509:12;41522:1;41509:15;;;;;;;;;;:::i;:::-;;;;;;;;:19;;;;:::i;:::-;41496:33;;;;;;;;;:::i;:::-;;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;41397:155;41377:3;;;;;:::i;:::-;;;;41345:218;;;;41575:13;;;;;;;;;;;:22;;:29;41598:5;41575:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41623:10;41615:28;;:47;41656:5;41644:9;:17;;;;:::i;:::-;41615:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41680:26;41693:12;41680:26;;;;;;:::i;:::-;;;;;;;;41724:12;41717:19;;;;;40322:1422;;;;:::o;15865:157::-;15950:4;15989:25;15974:40;;;:11;:40;;;;15967:47;;15865:157;;;:::o;398:723::-;454:13;684:1;675:5;:10;671:53;;702:10;;;;;;;;;;;;;;;;;;;;;671:53;734:12;749:5;734:20;;765:14;790:78;805:1;797:4;:9;790:78;;823:8;;;;;:::i;:::-;;;;854:2;846:10;;;;;:::i;:::-;;;790:78;;;878:19;910:6;900:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;878:39;;928:154;944:1;935:5;:10;928:154;;972:1;962:11;;;;;:::i;:::-;;;1039:2;1031:5;:10;;;;:::i;:::-;1018:2;:24;;;;:::i;:::-;1005:39;;988:6;995;988:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;1068:2;1059:11;;;;;:::i;:::-;;;928:154;;;1106:6;1092:21;;;;;398:723;;;;:::o;2836:98::-;2889:7;2916:10;2909:17;;2836:98;:::o;29557:1074::-;29784:7;:14;29770:3;:10;:28;29762:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;29876:1;29862:16;;:2;:16;;;29854:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;29933:16;29952:12;:10;:12::i;:::-;29933:31;;29977:60;29998:8;30008:4;30014:2;30018:3;30023:7;30032:4;29977:20;:60::i;:::-;30055:9;30050:421;30074:3;:10;30070:1;:14;30050:421;;;30106:10;30119:3;30123:1;30119:6;;;;;;;;:::i;:::-;;;;;;;;30106:19;;30140:14;30157:7;30165:1;30157:10;;;;;;;;:::i;:::-;;;;;;;;30140:27;;30184:19;30206:9;:13;30216:2;30206:13;;;;;;;;;;;:19;30220:4;30206:19;;;;;;;;;;;;;;;;30184:41;;30263:6;30248:11;:21;;30240:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;30396:6;30382:11;:20;30360:9;:13;30370:2;30360:13;;;;;;;;;;;:19;30374:4;30360:19;;;;;;;;;;;;;;;:42;;;;30453:6;30432:9;:13;30442:2;30432:13;;;;;;;;;;;:17;30446:2;30432:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;30091:380;;;30086:3;;;;:::i;:::-;;;30050:421;;;;30518:2;30488:47;;30512:4;30488:47;;30502:8;30488:47;;;30522:3;30527:7;30488:47;;;;;;;:::i;:::-;;;;;;;;30548:75;30584:8;30594:4;30600:2;30604:3;30609:7;30618:4;30548:35;:75::i;:::-;29751:880;29557:1074;;;;;:::o;5382:191::-;5456:16;5475:6;;;;;;;;;;;5456:25;;5501:8;5492:6;;:17;;;;;;;;;;;;;;;;;;5556:8;5525:40;;5546:8;5525:40;;;;;;;;;;;;5445:128;5382:191;:::o;35743:331::-;35898:8;35889:17;;:5;:17;;;35881:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;36001:8;35963:18;:25;35982:5;35963:25;;;;;;;;;;;;;;;:35;35989:8;35963:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;36047:8;36025:41;;36040:5;36025:41;;;36057:8;36025:41;;;;;;:::i;:::-;;;;;;;;35743:331;;;:::o;31949:569::-;32116:1;32102:16;;:2;:16;;;32094:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;32169:16;32188:12;:10;:12::i;:::-;32169:31;;32213:102;32234:8;32252:1;32256:2;32260:21;32278:2;32260:17;:21::i;:::-;32283:25;32301:6;32283:17;:25::i;:::-;32310:4;32213:20;:102::i;:::-;32349:6;32328:9;:13;32338:2;32328:13;;;;;;;;;;;:17;32342:2;32328:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;32408:2;32371:52;;32404:1;32371:52;;32386:8;32371:52;;;32412:2;32416:6;32371:52;;;;;;;:::i;:::-;;;;;;;;32436:74;32467:8;32485:1;32489:2;32493;32497:6;32505:4;32436:30;:74::i;:::-;32083:435;31949:569;;;;:::o;28379:820::-;28581:1;28567:16;;:2;:16;;;28559:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;28638:16;28657:12;:10;:12::i;:::-;28638:31;;28682:96;28703:8;28713:4;28719:2;28723:21;28741:2;28723:17;:21::i;:::-;28746:25;28764:6;28746:17;:25::i;:::-;28773:4;28682:20;:96::i;:::-;28791:19;28813:9;:13;28823:2;28813:13;;;;;;;;;;;:19;28827:4;28813:19;;;;;;;;;;;;;;;;28791:41;;28866:6;28851:11;:21;;28843:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;28991:6;28977:11;:20;28955:9;:13;28965:2;28955:13;;;;;;;;;;;:19;28969:4;28955:19;;;;;;;;;;;;;;;:42;;;;29040:6;29019:9;:13;29029:2;29019:13;;;;;;;;;;;:17;29033:2;29019:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;29095:2;29064:46;;29089:4;29064:46;;29079:8;29064:46;;;29099:2;29103:6;29064:46;;;;;;;:::i;:::-;;;;;;;;29123:68;29154:8;29164:4;29170:2;29174;29178:6;29186:4;29123:30;:68::i;:::-;28548:651;;28379:820;;;;;:::o;37030:221::-;;;;;;;:::o;38011:813::-;38251:15;:2;:13;;;:15::i;:::-;38247:570;;;38304:2;38287:43;;;38331:8;38341:4;38347:3;38352:7;38361:4;38287:79;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;38283:523;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;38679:6;38672:14;;;;;;;;;;;:::i;:::-;;;;;;;;38283:523;;;38728:62;;;;;;;;;;:::i;:::-;;;;;;;;38283:523;38460:48;;;38448:60;;;:8;:60;;;;38444:159;;38533:50;;;;;;;;;;:::i;:::-;;;;;;;;38444:159;38367:251;38247:570;38011:813;;;;;;:::o;38832:198::-;38898:16;38927:22;38966:1;38952:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38927:41;;38990:7;38979:5;38985:1;38979:8;;;;;;;;:::i;:::-;;;;;;;:18;;;;;39017:5;39010:12;;;38832:198;;;:::o;37259:744::-;37474:15;:2;:13;;;:15::i;:::-;37470:526;;;37527:2;37510:38;;;37549:8;37559:4;37565:2;37569:6;37577:4;37510:72;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;37506:479;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;37858:6;37851:14;;;;;;;;;;;:::i;:::-;;;;;;;;37506:479;;;37907:62;;;;;;;;;;:::i;:::-;;;;;;;;37506:479;37644:43;;;37632:55;;;:8;:55;;;;37628:154;;37712:50;;;;;;;;;;:::i;:::-;;;;;;;;37628:154;37583:214;37470:526;37259:744;;;;;;:::o;6813:326::-;6873:4;7130:1;7108:7;:19;;;:23;7101:30;;6813:326;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:77::-;878:7;907:5;896:16;;841:77;;;:::o;924:122::-;997:24;1015:5;997:24;:::i;:::-;990:5;987:35;977:63;;1036:1;1033;1026:12;977:63;924:122;:::o;1052:139::-;1098:5;1136:6;1123:20;1114:29;;1152:33;1179:5;1152:33;:::i;:::-;1052:139;;;;:::o;1197:474::-;1265:6;1273;1322:2;1310:9;1301:7;1297:23;1293:32;1290:119;;;1328:79;;:::i;:::-;1290:119;1448:1;1473:53;1518:7;1509:6;1498:9;1494:22;1473:53;:::i;:::-;1463:63;;1419:117;1575:2;1601:53;1646:7;1637:6;1626:9;1622:22;1601:53;:::i;:::-;1591:63;;1546:118;1197:474;;;;;:::o;1677:118::-;1764:24;1782:5;1764:24;:::i;:::-;1759:3;1752:37;1677:118;;:::o;1801:222::-;1894:4;1932:2;1921:9;1917:18;1909:26;;1945:71;2013:1;2002:9;1998:17;1989:6;1945:71;:::i;:::-;1801:222;;;;:::o;2029:149::-;2065:7;2105:66;2098:5;2094:78;2083:89;;2029:149;;;:::o;2184:120::-;2256:23;2273:5;2256:23;:::i;:::-;2249:5;2246:34;2236:62;;2294:1;2291;2284:12;2236:62;2184:120;:::o;2310:137::-;2355:5;2393:6;2380:20;2371:29;;2409:32;2435:5;2409:32;:::i;:::-;2310:137;;;;:::o;2453:327::-;2511:6;2560:2;2548:9;2539:7;2535:23;2531:32;2528:119;;;2566:79;;:::i;:::-;2528:119;2686:1;2711:52;2755:7;2746:6;2735:9;2731:22;2711:52;:::i;:::-;2701:62;;2657:116;2453:327;;;;:::o;2786:90::-;2820:7;2863:5;2856:13;2849:21;2838:32;;2786:90;;;:::o;2882:109::-;2963:21;2978:5;2963:21;:::i;:::-;2958:3;2951:34;2882:109;;:::o;2997:210::-;3084:4;3122:2;3111:9;3107:18;3099:26;;3135:65;3197:1;3186:9;3182:17;3173:6;3135:65;:::i;:::-;2997:210;;;;:::o;3213:99::-;3265:6;3299:5;3293:12;3283:22;;3213:99;;;:::o;3318:169::-;3402:11;3436:6;3431:3;3424:19;3476:4;3471:3;3467:14;3452:29;;3318:169;;;;:::o;3493:307::-;3561:1;3571:113;3585:6;3582:1;3579:13;3571:113;;;3670:1;3665:3;3661:11;3655:18;3651:1;3646:3;3642:11;3635:39;3607:2;3604:1;3600:10;3595:15;;3571:113;;;3702:6;3699:1;3696:13;3693:101;;;3782:1;3773:6;3768:3;3764:16;3757:27;3693:101;3542:258;3493:307;;;:::o;3806:102::-;3847:6;3898:2;3894:7;3889:2;3882:5;3878:14;3874:28;3864:38;;3806:102;;;:::o;3914:364::-;4002:3;4030:39;4063:5;4030:39;:::i;:::-;4085:71;4149:6;4144:3;4085:71;:::i;:::-;4078:78;;4165:52;4210:6;4205:3;4198:4;4191:5;4187:16;4165:52;:::i;:::-;4242:29;4264:6;4242:29;:::i;:::-;4237:3;4233:39;4226:46;;4006:272;3914:364;;;;:::o;4284:313::-;4397:4;4435:2;4424:9;4420:18;4412:26;;4484:9;4478:4;4474:20;4470:1;4459:9;4455:17;4448:47;4512:78;4585:4;4576:6;4512:78;:::i;:::-;4504:86;;4284:313;;;;:::o;4603:329::-;4662:6;4711:2;4699:9;4690:7;4686:23;4682:32;4679:119;;;4717:79;;:::i;:::-;4679:119;4837:1;4862:53;4907:7;4898:6;4887:9;4883:22;4862:53;:::i;:::-;4852:63;;4808:117;4603:329;;;;:::o;4938:117::-;5047:1;5044;5037:12;5061:180;5109:77;5106:1;5099:88;5206:4;5203:1;5196:15;5230:4;5227:1;5220:15;5247:281;5330:27;5352:4;5330:27;:::i;:::-;5322:6;5318:40;5460:6;5448:10;5445:22;5424:18;5412:10;5409:34;5406:62;5403:88;;;5471:18;;:::i;:::-;5403:88;5511:10;5507:2;5500:22;5290:238;5247:281;;:::o;5534:129::-;5568:6;5595:20;;:::i;:::-;5585:30;;5624:33;5652:4;5644:6;5624:33;:::i;:::-;5534:129;;;:::o;5669:311::-;5746:4;5836:18;5828:6;5825:30;5822:56;;;5858:18;;:::i;:::-;5822:56;5908:4;5900:6;5896:17;5888:25;;5968:4;5962;5958:15;5950:23;;5669:311;;;:::o;5986:117::-;6095:1;6092;6085:12;6126:710;6222:5;6247:81;6263:64;6320:6;6263:64;:::i;:::-;6247:81;:::i;:::-;6238:90;;6348:5;6377:6;6370:5;6363:21;6411:4;6404:5;6400:16;6393:23;;6464:4;6456:6;6452:17;6444:6;6440:30;6493:3;6485:6;6482:15;6479:122;;;6512:79;;:::i;:::-;6479:122;6627:6;6610:220;6644:6;6639:3;6636:15;6610:220;;;6719:3;6748:37;6781:3;6769:10;6748:37;:::i;:::-;6743:3;6736:50;6815:4;6810:3;6806:14;6799:21;;6686:144;6670:4;6665:3;6661:14;6654:21;;6610:220;;;6614:21;6228:608;;6126:710;;;;;:::o;6859:370::-;6930:5;6979:3;6972:4;6964:6;6960:17;6956:27;6946:122;;6987:79;;:::i;:::-;6946:122;7104:6;7091:20;7129:94;7219:3;7211:6;7204:4;7196:6;7192:17;7129:94;:::i;:::-;7120:103;;6936:293;6859:370;;;;:::o;7235:117::-;7344:1;7341;7334:12;7358:307;7419:4;7509:18;7501:6;7498:30;7495:56;;;7531:18;;:::i;:::-;7495:56;7569:29;7591:6;7569:29;:::i;:::-;7561:37;;7653:4;7647;7643:15;7635:23;;7358:307;;;:::o;7671:154::-;7755:6;7750:3;7745;7732:30;7817:1;7808:6;7803:3;7799:16;7792:27;7671:154;;;:::o;7831:410::-;7908:5;7933:65;7949:48;7990:6;7949:48;:::i;:::-;7933:65;:::i;:::-;7924:74;;8021:6;8014:5;8007:21;8059:4;8052:5;8048:16;8097:3;8088:6;8083:3;8079:16;8076:25;8073:112;;;8104:79;;:::i;:::-;8073:112;8194:41;8228:6;8223:3;8218;8194:41;:::i;:::-;7914:327;7831:410;;;;;:::o;8260:338::-;8315:5;8364:3;8357:4;8349:6;8345:17;8341:27;8331:122;;8372:79;;:::i;:::-;8331:122;8489:6;8476:20;8514:78;8588:3;8580:6;8573:4;8565:6;8561:17;8514:78;:::i;:::-;8505:87;;8321:277;8260:338;;;;:::o;8604:1509::-;8758:6;8766;8774;8782;8790;8839:3;8827:9;8818:7;8814:23;8810:33;8807:120;;;8846:79;;:::i;:::-;8807:120;8966:1;8991:53;9036:7;9027:6;9016:9;9012:22;8991:53;:::i;:::-;8981:63;;8937:117;9093:2;9119:53;9164:7;9155:6;9144:9;9140:22;9119:53;:::i;:::-;9109:63;;9064:118;9249:2;9238:9;9234:18;9221:32;9280:18;9272:6;9269:30;9266:117;;;9302:79;;:::i;:::-;9266:117;9407:78;9477:7;9468:6;9457:9;9453:22;9407:78;:::i;:::-;9397:88;;9192:303;9562:2;9551:9;9547:18;9534:32;9593:18;9585:6;9582:30;9579:117;;;9615:79;;:::i;:::-;9579:117;9720:78;9790:7;9781:6;9770:9;9766:22;9720:78;:::i;:::-;9710:88;;9505:303;9875:3;9864:9;9860:19;9847:33;9907:18;9899:6;9896:30;9893:117;;;9929:79;;:::i;:::-;9893:117;10034:62;10088:7;10079:6;10068:9;10064:22;10034:62;:::i;:::-;10024:72;;9818:288;8604:1509;;;;;;;;:::o;10119:310::-;10195:4;10285:18;10277:6;10274:30;10271:56;;;10307:18;;:::i;:::-;10271:56;10357:4;10349:6;10345:17;10337:25;;10417:4;10411;10407:15;10399:23;;10119:310;;;:::o;10435:89::-;10471:7;10511:6;10504:5;10500:18;10489:29;;10435:89;;;:::o;10530:120::-;10602:23;10619:5;10602:23;:::i;:::-;10595:5;10592:34;10582:62;;10640:1;10637;10630:12;10582:62;10530:120;:::o;10656:137::-;10701:5;10739:6;10726:20;10717:29;;10755:32;10781:5;10755:32;:::i;:::-;10656:137;;;;:::o;10815:707::-;10910:5;10935:80;10951:63;11007:6;10951:63;:::i;:::-;10935:80;:::i;:::-;10926:89;;11035:5;11064:6;11057:5;11050:21;11098:4;11091:5;11087:16;11080:23;;11151:4;11143:6;11139:17;11131:6;11127:30;11180:3;11172:6;11169:15;11166:122;;;11199:79;;:::i;:::-;11166:122;11314:6;11297:219;11331:6;11326:3;11323:15;11297:219;;;11406:3;11435:36;11467:3;11455:10;11435:36;:::i;:::-;11430:3;11423:49;11501:4;11496:3;11492:14;11485:21;;11373:143;11357:4;11352:3;11348:14;11341:21;;11297:219;;;11301:21;10916:606;;10815:707;;;;;:::o;11544:368::-;11614:5;11663:3;11656:4;11648:6;11644:17;11640:27;11630:122;;11671:79;;:::i;:::-;11630:122;11788:6;11775:20;11813:93;11902:3;11894:6;11887:4;11879:6;11875:17;11813:93;:::i;:::-;11804:102;;11620:292;11544:368;;;;:::o;11918:537::-;12001:6;12050:2;12038:9;12029:7;12025:23;12021:32;12018:119;;;12056:79;;:::i;:::-;12018:119;12204:1;12193:9;12189:17;12176:31;12234:18;12226:6;12223:30;12220:117;;;12256:79;;:::i;:::-;12220:117;12361:77;12430:7;12421:6;12410:9;12406:22;12361:77;:::i;:::-;12351:87;;12147:301;11918:537;;;;:::o;12461:113::-;12527:6;12561:5;12555:12;12545:22;;12461:113;;;:::o;12580:183::-;12678:11;12712:6;12707:3;12700:19;12752:4;12747:3;12743:14;12728:29;;12580:183;;;;:::o;12769:131::-;12835:4;12858:3;12850:11;;12888:4;12883:3;12879:14;12871:22;;12769:131;;;:::o;12906:105::-;12981:23;12998:5;12981:23;:::i;:::-;12976:3;12969:36;12906:105;;:::o;13017:175::-;13084:10;13105:44;13145:3;13137:6;13105:44;:::i;:::-;13181:4;13176:3;13172:14;13158:28;;13017:175;;;;:::o;13198:112::-;13267:4;13299;13294:3;13290:14;13282:22;;13198:112;;;:::o;13344:724::-;13461:3;13490:53;13537:5;13490:53;:::i;:::-;13559:85;13637:6;13632:3;13559:85;:::i;:::-;13552:92;;13668:55;13717:5;13668:55;:::i;:::-;13746:7;13777:1;13762:281;13787:6;13784:1;13781:13;13762:281;;;13863:6;13857:13;13890:61;13947:3;13932:13;13890:61;:::i;:::-;13883:68;;13974:59;14026:6;13974:59;:::i;:::-;13964:69;;13822:221;13809:1;13806;13802:9;13797:14;;13762:281;;;13766:14;14059:3;14052:10;;13466:602;;;13344:724;;;;:::o;14074:369::-;14215:4;14253:2;14242:9;14238:18;14230:26;;14302:9;14296:4;14292:20;14288:1;14277:9;14273:17;14266:47;14330:106;14431:4;14422:6;14330:106;:::i;:::-;14322:114;;14074:369;;;;:::o;14449:311::-;14526:4;14616:18;14608:6;14605:30;14602:56;;;14638:18;;:::i;:::-;14602:56;14688:4;14680:6;14676:17;14668:25;;14748:4;14742;14738:15;14730:23;;14449:311;;;:::o;14783:710::-;14879:5;14904:81;14920:64;14977:6;14920:64;:::i;:::-;14904:81;:::i;:::-;14895:90;;15005:5;15034:6;15027:5;15020:21;15068:4;15061:5;15057:16;15050:23;;15121:4;15113:6;15109:17;15101:6;15097:30;15150:3;15142:6;15139:15;15136:122;;;15169:79;;:::i;:::-;15136:122;15284:6;15267:220;15301:6;15296:3;15293:15;15267:220;;;15376:3;15405:37;15438:3;15426:10;15405:37;:::i;:::-;15400:3;15393:50;15472:4;15467:3;15463:14;15456:21;;15343:144;15327:4;15322:3;15318:14;15311:21;;15267:220;;;15271:21;14885:608;;14783:710;;;;;:::o;15516:370::-;15587:5;15636:3;15629:4;15621:6;15617:17;15613:27;15603:122;;15644:79;;:::i;:::-;15603:122;15761:6;15748:20;15786:94;15876:3;15868:6;15861:4;15853:6;15849:17;15786:94;:::i;:::-;15777:103;;15593:293;15516:370;;;;:::o;15892:894::-;16010:6;16018;16067:2;16055:9;16046:7;16042:23;16038:32;16035:119;;;16073:79;;:::i;:::-;16035:119;16221:1;16210:9;16206:17;16193:31;16251:18;16243:6;16240:30;16237:117;;;16273:79;;:::i;:::-;16237:117;16378:78;16448:7;16439:6;16428:9;16424:22;16378:78;:::i;:::-;16368:88;;16164:302;16533:2;16522:9;16518:18;16505:32;16564:18;16556:6;16553:30;16550:117;;;16586:79;;:::i;:::-;16550:117;16691:78;16761:7;16752:6;16741:9;16737:22;16691:78;:::i;:::-;16681:88;;16476:303;15892:894;;;;;:::o;16792:114::-;16859:6;16893:5;16887:12;16877:22;;16792:114;;;:::o;16912:184::-;17011:11;17045:6;17040:3;17033:19;17085:4;17080:3;17076:14;17061:29;;16912:184;;;;:::o;17102:132::-;17169:4;17192:3;17184:11;;17222:4;17217:3;17213:14;17205:22;;17102:132;;;:::o;17240:108::-;17317:24;17335:5;17317:24;:::i;:::-;17312:3;17305:37;17240:108;;:::o;17354:179::-;17423:10;17444:46;17486:3;17478:6;17444:46;:::i;:::-;17522:4;17517:3;17513:14;17499:28;;17354:179;;;;:::o;17539:113::-;17609:4;17641;17636:3;17632:14;17624:22;;17539:113;;;:::o;17688:732::-;17807:3;17836:54;17884:5;17836:54;:::i;:::-;17906:86;17985:6;17980:3;17906:86;:::i;:::-;17899:93;;18016:56;18066:5;18016:56;:::i;:::-;18095:7;18126:1;18111:284;18136:6;18133:1;18130:13;18111:284;;;18212:6;18206:13;18239:63;18298:3;18283:13;18239:63;:::i;:::-;18232:70;;18325:60;18378:6;18325:60;:::i;:::-;18315:70;;18171:224;18158:1;18155;18151:9;18146:14;;18111:284;;;18115:14;18411:3;18404:10;;17812:608;;;17688:732;;;;:::o;18426:373::-;18569:4;18607:2;18596:9;18592:18;18584:26;;18656:9;18650:4;18646:20;18642:1;18631:9;18627:17;18620:47;18684:108;18787:4;18778:6;18684:108;:::i;:::-;18676:116;;18426:373;;;;:::o;18805:118::-;18892:24;18910:5;18892:24;:::i;:::-;18887:3;18880:37;18805:118;;:::o;18929:222::-;19022:4;19060:2;19049:9;19045:18;19037:26;;19073:71;19141:1;19130:9;19126:17;19117:6;19073:71;:::i;:::-;18929:222;;;;:::o;19157:116::-;19227:21;19242:5;19227:21;:::i;:::-;19220:5;19217:32;19207:60;;19263:1;19260;19253:12;19207:60;19157:116;:::o;19279:133::-;19322:5;19360:6;19347:20;19338:29;;19376:30;19400:5;19376:30;:::i;:::-;19279:133;;;;:::o;19418:468::-;19483:6;19491;19540:2;19528:9;19519:7;19515:23;19511:32;19508:119;;;19546:79;;:::i;:::-;19508:119;19666:1;19691:53;19736:7;19727:6;19716:9;19712:22;19691:53;:::i;:::-;19681:63;;19637:117;19793:2;19819:50;19861:7;19852:6;19841:9;19837:22;19819:50;:::i;:::-;19809:60;;19764:115;19418:468;;;;;:::o;19892:682::-;19984:6;19992;20041:2;20029:9;20020:7;20016:23;20012:32;20009:119;;;20047:79;;:::i;:::-;20009:119;20167:1;20192:53;20237:7;20228:6;20217:9;20213:22;20192:53;:::i;:::-;20182:63;;20138:117;20322:2;20311:9;20307:18;20294:32;20353:18;20345:6;20342:30;20339:117;;;20375:79;;:::i;:::-;20339:117;20480:77;20549:7;20540:6;20529:9;20525:22;20480:77;:::i;:::-;20470:87;;20265:302;19892:682;;;;;:::o;20580:474::-;20648:6;20656;20705:2;20693:9;20684:7;20680:23;20676:32;20673:119;;;20711:79;;:::i;:::-;20673:119;20831:1;20856:53;20901:7;20892:6;20881:9;20877:22;20856:53;:::i;:::-;20846:63;;20802:117;20958:2;20984:53;21029:7;21020:6;21009:9;21005:22;20984:53;:::i;:::-;20974:63;;20929:118;20580:474;;;;;:::o;21060:1089::-;21164:6;21172;21180;21188;21196;21245:3;21233:9;21224:7;21220:23;21216:33;21213:120;;;21252:79;;:::i;:::-;21213:120;21372:1;21397:53;21442:7;21433:6;21422:9;21418:22;21397:53;:::i;:::-;21387:63;;21343:117;21499:2;21525:53;21570:7;21561:6;21550:9;21546:22;21525:53;:::i;:::-;21515:63;;21470:118;21627:2;21653:53;21698:7;21689:6;21678:9;21674:22;21653:53;:::i;:::-;21643:63;;21598:118;21755:2;21781:53;21826:7;21817:6;21806:9;21802:22;21781:53;:::i;:::-;21771:63;;21726:118;21911:3;21900:9;21896:19;21883:33;21943:18;21935:6;21932:30;21929:117;;;21965:79;;:::i;:::-;21929:117;22070:62;22124:7;22115:6;22104:9;22100:22;22070:62;:::i;:::-;22060:72;;21854:288;21060:1089;;;;;;;;:::o;22155:329::-;22214:6;22263:2;22251:9;22242:7;22238:23;22234:32;22231:119;;;22269:79;;:::i;:::-;22231:119;22389:1;22414:53;22459:7;22450:6;22439:9;22435:22;22414:53;:::i;:::-;22404:63;;22360:117;22155:329;;;;:::o;22490:104::-;22535:7;22564:24;22582:5;22564:24;:::i;:::-;22553:35;;22490:104;;;:::o;22600:138::-;22681:32;22707:5;22681:32;:::i;:::-;22674:5;22671:43;22661:71;;22728:1;22725;22718:12;22661:71;22600:138;:::o;22744:155::-;22798:5;22836:6;22823:20;22814:29;;22852:41;22887:5;22852:41;:::i;:::-;22744:155;;;;:::o;22905:698::-;23005:6;23013;23062:2;23050:9;23041:7;23037:23;23033:32;23030:119;;;23068:79;;:::i;:::-;23030:119;23188:1;23213:61;23266:7;23257:6;23246:9;23242:22;23213:61;:::i;:::-;23203:71;;23159:125;23351:2;23340:9;23336:18;23323:32;23382:18;23374:6;23371:30;23368:117;;;23404:79;;:::i;:::-;23368:117;23509:77;23578:7;23569:6;23558:9;23554:22;23509:77;:::i;:::-;23499:87;;23294:302;22905:698;;;;;:::o;23609:230::-;23749:34;23745:1;23737:6;23733:14;23726:58;23818:13;23813:2;23805:6;23801:15;23794:38;23609:230;:::o;23845:366::-;23987:3;24008:67;24072:2;24067:3;24008:67;:::i;:::-;24001:74;;24084:93;24173:3;24084:93;:::i;:::-;24202:2;24197:3;24193:12;24186:19;;23845:366;;;:::o;24217:419::-;24383:4;24421:2;24410:9;24406:18;24398:26;;24470:9;24464:4;24460:20;24456:1;24445:9;24441:17;24434:47;24498:131;24624:4;24498:131;:::i;:::-;24490:139;;24217:419;;;:::o;24642:180::-;24690:77;24687:1;24680:88;24787:4;24784:1;24777:15;24811:4;24808:1;24801:15;24828:320;24872:6;24909:1;24903:4;24899:12;24889:22;;24956:1;24950:4;24946:12;24977:18;24967:81;;25033:4;25025:6;25021:17;25011:27;;24967:81;25095:2;25087:6;25084:14;25064:18;25061:38;25058:84;;25114:18;;:::i;:::-;25058:84;24879:269;24828:320;;;:::o;25154:148::-;25256:11;25293:3;25278:18;;25154:148;;;;:::o;25308:249::-;25448:34;25444:1;25436:6;25432:14;25425:58;25521:24;25516:2;25508:6;25504:15;25497:49;25308:249;:::o;25567:418::-;25727:3;25752:85;25834:2;25829:3;25752:85;:::i;:::-;25745:92;;25850:93;25939:3;25850:93;:::i;:::-;25972:2;25967:3;25963:12;25956:19;;25567:418;;;:::o;25995:397::-;26101:3;26133:39;26166:5;26133:39;:::i;:::-;26192:89;26274:6;26269:3;26192:89;:::i;:::-;26185:96;;26294:52;26339:6;26334:3;26327:4;26320:5;26316:16;26294:52;:::i;:::-;26375:6;26370:3;26366:16;26359:23;;26105:287;25995:397;;;;:::o;26402:163::-;26546:7;26542:1;26534:6;26530:14;26523:31;26402:163;:::o;26575:416::-;26735:3;26760:84;26842:1;26837:3;26760:84;:::i;:::-;26753:91;;26857:93;26946:3;26857:93;:::i;:::-;26979:1;26974:3;26970:11;26963:18;;26575:416;;;:::o;27001:827::-;27335:3;27361:148;27505:3;27361:148;:::i;:::-;27354:155;;27530:95;27621:3;27612:6;27530:95;:::i;:::-;27523:102;;27646:148;27790:3;27646:148;:::i;:::-;27639:155;;27815:3;27808:10;;27001:827;;;;:::o;27838:249::-;27982:34;27978:1;27970:6;27966:14;27959:58;28055:20;28050:2;28042:6;28038:15;28031:45;27838:249;:::o;28097:382::-;28239:3;28264:67;28328:2;28323:3;28264:67;:::i;:::-;28257:74;;28344:93;28433:3;28344:93;:::i;:::-;28466:2;28461:3;28457:12;28450:19;;28097:382;;;:::o;28489:435::-;28655:4;28697:2;28686:9;28682:18;28674:26;;28750:9;28744:4;28740:20;28736:1;28725:9;28721:17;28714:47;28782:131;28908:4;28782:131;:::i;:::-;28774:139;;28489:435;;;:::o;28934:196::-;28986:77;28983:1;28976:88;29087:4;29084:1;29077:15;29115:4;29112:1;29105:15;29140:196;29192:77;29189:1;29182:88;29293:4;29290:1;29283:15;29321:4;29318:1;29311:15;29346:208;29385:4;29409:19;29426:1;29409:19;:::i;:::-;29404:24;;29446:19;29463:1;29446:19;:::i;:::-;29441:24;;29488:1;29485;29482:8;29479:34;;;29493:18;;:::i;:::-;29479:34;29542:1;29539;29535:9;29527:17;;29346:208;;;;:::o;29564:187::-;29602:3;29629:23;29646:5;29629:23;:::i;:::-;29620:32;;29678:6;29671:5;29668:17;29665:43;;29688:18;;:::i;:::-;29665:43;29739:1;29732:5;29728:13;29721:20;;29564:187;;;:::o;29761:240::-;29905:34;29901:1;29893:6;29889:14;29882:58;29978:11;29973:2;29965:6;29961:15;29954:36;29761:240;:::o;30011:382::-;30153:3;30178:67;30242:2;30237:3;30178:67;:::i;:::-;30171:74;;30258:93;30347:3;30258:93;:::i;:::-;30380:2;30375:3;30371:12;30364:19;;30011:382;;;:::o;30403:435::-;30569:4;30611:2;30600:9;30596:18;30588:26;;30664:9;30658:4;30654:20;30650:1;30639:9;30635:17;30628:47;30696:131;30822:4;30696:131;:::i;:::-;30688:139;;30403:435;;;:::o;30848:249::-;30887:3;30914:24;30932:5;30914:24;:::i;:::-;30905:33;;30964:66;30957:5;30954:77;30951:103;;31034:18;;:::i;:::-;30951:103;31085:1;31078:5;31074:13;31067:20;;30848:249;;;:::o;31107:190::-;31251:34;31247:1;31239:6;31235:14;31228:58;31107:190;:::o;31307:382::-;31449:3;31474:67;31538:2;31533:3;31474:67;:::i;:::-;31467:74;;31554:93;31643:3;31554:93;:::i;:::-;31676:2;31671:3;31667:12;31660:19;;31307:382;;;:::o;31699:435::-;31865:4;31907:2;31896:9;31892:18;31884:26;;31960:9;31954:4;31950:20;31946:1;31935:9;31931:17;31924:47;31992:131;32118:4;31992:131;:::i;:::-;31984:139;;31699:435;;;:::o;32144:372::-;32184:7;32211:20;32229:1;32211:20;:::i;:::-;32206:25;;32249:20;32267:1;32249:20;:::i;:::-;32244:25;;32445:1;32377:66;32373:74;32370:1;32367:81;32362:1;32355:9;32348:17;32344:105;32341:131;;;32452:18;;:::i;:::-;32341:131;32504:1;32501;32497:9;32486:20;;32144:372;;;;:::o;32526:266::-;32565:3;32588:19;32605:1;32588:19;:::i;:::-;32583:24;;32625:19;32642:1;32625:19;:::i;:::-;32620:24;;32726:1;32718:6;32714:14;32711:1;32708:21;32705:47;;;32732:18;;:::i;:::-;32705:47;32780:1;32777;32773:9;32766:16;;32526:266;;;;:::o;32802:240::-;32946:34;32942:1;32934:6;32930:14;32923:58;33019:11;33014:2;33006:6;33002:15;32995:36;32802:240;:::o;33052:382::-;33194:3;33219:67;33283:2;33278:3;33219:67;:::i;:::-;33212:74;;33299:93;33388:3;33299:93;:::i;:::-;33421:2;33416:3;33412:12;33405:19;;33052:382;;;:::o;33444:435::-;33610:4;33652:2;33641:9;33637:18;33629:26;;33705:9;33699:4;33695:20;33691:1;33680:9;33676:17;33669:47;33737:131;33863:4;33737:131;:::i;:::-;33729:139;;33444:435;;;:::o;33889:237::-;34033:34;34029:1;34021:6;34017:14;34010:58;34106:8;34101:2;34093:6;34089:15;34082:33;33889:237;:::o;34136:382::-;34278:3;34303:67;34367:2;34362:3;34303:67;:::i;:::-;34296:74;;34383:93;34472:3;34383:93;:::i;:::-;34505:2;34500:3;34496:12;34489:19;;34136:382;;;:::o;34528:435::-;34694:4;34736:2;34725:9;34721:18;34713:26;;34789:9;34783:4;34779:20;34775:1;34764:9;34760:17;34753:47;34821:131;34947:4;34821:131;:::i;:::-;34813:139;;34528:435;;;:::o;34973:329::-;35013:3;35036:20;35054:1;35036:20;:::i;:::-;35031:25;;35074:20;35092:1;35074:20;:::i;:::-;35069:25;;35236:1;35168:66;35164:74;35161:1;35158:81;35155:107;;;35242:18;;:::i;:::-;35155:107;35290:1;35287;35283:9;35276:16;;34973:329;;;;:::o;35312:183::-;35456:27;35452:1;35444:6;35440:14;35433:51;35312:183;:::o;35505:382::-;35647:3;35672:67;35736:2;35731:3;35672:67;:::i;:::-;35665:74;;35752:93;35841:3;35752:93;:::i;:::-;35874:2;35869:3;35865:12;35858:19;;35505:382;;;:::o;35897:435::-;36063:4;36105:2;36094:9;36090:18;36082:26;;36158:9;36152:4;36148:20;36144:1;36133:9;36129:17;36122:47;36190:131;36316:4;36190:131;:::i;:::-;36182:139;;35897:435;;;:::o;36342:182::-;36486:26;36482:1;36474:6;36470:14;36463:50;36342:182;:::o;36534:382::-;36676:3;36701:67;36765:2;36760:3;36701:67;:::i;:::-;36694:74;;36781:93;36870:3;36781:93;:::i;:::-;36903:2;36898:3;36894:12;36887:19;;36534:382;;;:::o;36926:435::-;37092:4;37134:2;37123:9;37119:18;37111:26;;37187:9;37181:4;37177:20;37173:1;37162:9;37158:17;37151:47;37219:131;37345:4;37219:131;:::i;:::-;37211:139;;36926:435;;;:::o;37371:211::-;37411:4;37435:20;37453:1;37435:20;:::i;:::-;37430:25;;37473:20;37491:1;37473:20;:::i;:::-;37468:25;;37516:1;37513;37510:8;37507:34;;;37521:18;;:::i;:::-;37507:34;37570:1;37567;37563:9;37555:17;;37371:211;;;;:::o;37592:196::-;37644:77;37641:1;37634:88;37745:4;37742:1;37735:15;37773:4;37770:1;37763:15;37798:205;37838:1;37859:20;37877:1;37859:20;:::i;:::-;37854:25;;37897:20;37915:1;37897:20;:::i;:::-;37892:25;;37940:1;37930:35;;37945:18;;:::i;:::-;37930:35;37991:1;37988;37984:9;37979:14;;37798:205;;;;:::o;38013:196::-;38045:1;38066:20;38084:1;38066:20;:::i;:::-;38061:25;;38104:20;38122:1;38104:20;:::i;:::-;38099:25;;38147:1;38137:35;;38152:18;;:::i;:::-;38137:35;38197:1;38194;38190:9;38185:14;;38013:196;;;;:::o;38219:239::-;38363:34;38359:1;38351:6;38347:14;38340:58;38436:10;38431:2;38423:6;38419:15;38412:35;38219:239;:::o;38468:382::-;38610:3;38635:67;38699:2;38694:3;38635:67;:::i;:::-;38628:74;;38715:93;38804:3;38715:93;:::i;:::-;38837:2;38832:3;38828:12;38821:19;;38468:382;;;:::o;38860:435::-;39026:4;39068:2;39057:9;39053:18;39045:26;;39121:9;39115:4;39111:20;39107:1;39096:9;39092:17;39085:47;39153:131;39279:4;39153:131;:::i;:::-;39145:139;;38860:435;;;:::o;39305:236::-;39449:34;39445:1;39437:6;39433:14;39426:58;39522:7;39517:2;39509:6;39505:15;39498:32;39305:236;:::o;39551:382::-;39693:3;39718:67;39782:2;39777:3;39718:67;:::i;:::-;39711:74;;39798:93;39887:3;39798:93;:::i;:::-;39920:2;39915:3;39911:12;39904:19;;39551:382;;;:::o;39943:435::-;40109:4;40151:2;40140:9;40136:18;40128:26;;40204:9;40198:4;40194:20;40190:1;40179:9;40175:17;40168:47;40236:131;40362:4;40236:131;:::i;:::-;40228:139;;39943:435;;;:::o;40388:241::-;40532:34;40528:1;40520:6;40516:14;40509:58;40605:12;40600:2;40592:6;40588:15;40581:37;40388:241;:::o;40639:382::-;40781:3;40806:67;40870:2;40865:3;40806:67;:::i;:::-;40799:74;;40886:93;40975:3;40886:93;:::i;:::-;41008:2;41003:3;40999:12;40992:19;;40639:382;;;:::o;41031:435::-;41197:4;41239:2;41228:9;41224:18;41216:26;;41292:9;41286:4;41282:20;41278:1;41267:9;41263:17;41256:47;41324:131;41450:4;41324:131;:::i;:::-;41316:139;;41031:435;;;:::o;41476:658::-;41697:4;41739:2;41728:9;41724:18;41716:26;;41792:9;41786:4;41782:20;41778:1;41767:9;41763:17;41756:47;41824:108;41927:4;41918:6;41824:108;:::i;:::-;41816:116;;41983:9;41977:4;41973:20;41968:2;41957:9;41953:18;41946:48;42015:108;42118:4;42109:6;42015:108;:::i;:::-;42007:116;;41476:658;;;;;:::o;42144:240::-;42288:34;42284:1;42276:6;42272:14;42265:58;42361:11;42356:2;42348:6;42344:15;42337:36;42144:240;:::o;42394:382::-;42536:3;42561:67;42625:2;42620:3;42561:67;:::i;:::-;42554:74;;42641:93;42730:3;42641:93;:::i;:::-;42763:2;42758:3;42754:12;42747:19;;42394:382;;;:::o;42786:435::-;42952:4;42994:2;42983:9;42979:18;42971:26;;43047:9;43041:4;43037:20;43033:1;43022:9;43018:17;43011:47;43079:131;43205:4;43079:131;:::i;:::-;43071:139;;42786:435;;;:::o;43231:232::-;43375:34;43371:1;43363:6;43359:14;43352:58;43448:3;43443:2;43435:6;43431:15;43424:28;43231:232;:::o;43473:382::-;43615:3;43640:67;43704:2;43699:3;43640:67;:::i;:::-;43633:74;;43720:93;43809:3;43720:93;:::i;:::-;43842:2;43837:3;43833:12;43826:19;;43473:382;;;:::o;43865:435::-;44031:4;44073:2;44062:9;44058:18;44050:26;;44126:9;44120:4;44116:20;44112:1;44101:9;44097:17;44090:47;44158:131;44284:4;44158:131;:::i;:::-;44150:139;;43865:435;;;:::o;44310:348::-;44431:4;44473:2;44462:9;44458:18;44450:26;;44490:71;44558:1;44547:9;44543:17;44534:6;44490:71;:::i;:::-;44575:72;44643:2;44632:9;44628:18;44619:6;44575:72;:::i;:::-;44310:348;;;;;:::o;44668:106::-;44719:6;44757:5;44751:12;44741:22;;44668:106;;;:::o;44784:180::-;44867:11;44905:6;44900:3;44893:19;44949:4;44944:3;44940:14;44925:29;;44784:180;;;;:::o;44974:380::-;45060:3;45092:38;45124:5;45092:38;:::i;:::-;45150:70;45213:6;45208:3;45150:70;:::i;:::-;45143:77;;45233:52;45278:6;45273:3;45266:4;45259:5;45255:16;45233:52;:::i;:::-;45314:29;45336:6;45314:29;:::i;:::-;45309:3;45305:39;45298:46;;45064:290;44974:380;;;;:::o;45364:1093::-;45687:4;45729:3;45718:9;45714:19;45706:27;;45747:71;45815:1;45804:9;45800:17;45791:6;45747:71;:::i;:::-;45832:72;45900:2;45889:9;45885:18;45876:6;45832:72;:::i;:::-;45955:9;45949:4;45945:20;45940:2;45929:9;45925:18;45918:48;45987:108;46090:4;46081:6;45987:108;:::i;:::-;45979:116;;46146:9;46140:4;46136:20;46131:2;46120:9;46116:18;46109:48;46178:108;46281:4;46272:6;46178:108;:::i;:::-;46170:116;;46338:9;46332:4;46328:20;46322:3;46311:9;46307:19;46300:49;46370:76;46441:4;46432:6;46370:76;:::i;:::-;46362:84;;45364:1093;;;;;;;;:::o;46467:153::-;46523:5;46558:6;46552:13;46543:22;;46578:32;46604:5;46578:32;:::i;:::-;46467:153;;;;:::o;46630:373::-;46699:6;46752:2;46740:9;46731:7;46727:23;46723:32;46720:119;;;46758:79;;:::i;:::-;46720:119;46886:1;46915:63;46970:7;46961:6;46950:9;46946:22;46915:63;:::i;:::-;46905:73;;46853:139;46630:373;;;;:::o;47013:118::-;47057:8;47114:5;47109:3;47105:15;47080:40;;47013:118;;;:::o;47141:203::-;47176:3;47218:1;47200:16;47197:23;47194:140;;;47260:1;47257;47254;47239:23;47286:34;47317:1;47311:8;47286:34;:::i;:::-;47279:41;;47194:140;47141:203;:::o;47354:783::-;47393:3;47435:4;47417:16;47414:26;47443:5;47411:39;47476:20;;:::i;:::-;47555:1;47537:16;47533:24;47530:1;47524:4;47509:49;47592:4;47586:11;47703:16;47696:4;47688:6;47684:17;47681:39;47644:18;47636:6;47633:30;47613:125;47610:166;;;47757:5;;;;47610:166;47811:6;47805:4;47801:17;47851:3;47845:10;47882:18;47874:6;47871:30;47868:43;;;47904:5;;;;;;47868:43;47956:6;47949:4;47944:3;47940:14;47936:27;48019:1;48001:16;47997:24;47991:4;47987:35;47982:3;47979:44;47976:57;;;48026:5;;;;;;;47976:57;48047;48095:6;48089:4;48085:17;48077:6;48073:30;48067:4;48047:57;:::i;:::-;48124:3;48117:10;;47397:740;;;;;47354:783;;:::o;48147:251::-;48291:34;48287:1;48279:6;48275:14;48268:58;48364:22;48359:2;48351:6;48347:15;48340:47;48147:251;:::o;48408:382::-;48550:3;48575:67;48639:2;48634:3;48575:67;:::i;:::-;48568:74;;48655:93;48744:3;48655:93;:::i;:::-;48777:2;48772:3;48768:12;48761:19;;48408:382;;;:::o;48800:435::-;48966:4;49008:2;48997:9;48993:18;48985:26;;49061:9;49055:4;49051:20;49047:1;49036:9;49032:17;49025:47;49093:131;49219:4;49093:131;:::i;:::-;49085:139;;48800:435;;;:::o;49245:239::-;49389:34;49385:1;49377:6;49373:14;49366:58;49462:10;49457:2;49449:6;49445:15;49438:35;49245:239;:::o;49494:382::-;49636:3;49661:67;49725:2;49720:3;49661:67;:::i;:::-;49654:74;;49741:93;49830:3;49741:93;:::i;:::-;49863:2;49858:3;49854:12;49847:19;;49494:382;;;:::o;49886:435::-;50052:4;50094:2;50083:9;50079:18;50071:26;;50147:9;50141:4;50137:20;50133:1;50122:9;50118:17;50111:47;50179:131;50305:4;50179:131;:::i;:::-;50171:139;;49886:435;;;:::o;50331:783::-;50554:4;50596:3;50585:9;50581:19;50573:27;;50614:71;50682:1;50671:9;50667:17;50658:6;50614:71;:::i;:::-;50699:72;50767:2;50756:9;50752:18;50743:6;50699:72;:::i;:::-;50785;50853:2;50842:9;50838:18;50829:6;50785:72;:::i;:::-;50871;50939:2;50928:9;50924:18;50915:6;50871:72;:::i;:::-;50995:9;50989:4;50985:20;50979:3;50968:9;50964:19;50957:49;51027:76;51098:4;51089:6;51027:76;:::i;:::-;51019:84;;50331:783;;;;;;;;:::o

Swarm Source

ipfs://f4ab7815c5e70d7d14792a69b2793293ed98c653348e4ee817a79d2b543a8900
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.