ETH Price: $3,419.28 (-1.75%)
Gas: 8 Gwei

Token

 

Overview

Max Total Supply

335

Holders

254

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
0x2160926bfcfcf7f25bd62592fd60794720da86db
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:
AIDDROP

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

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


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

pragma solidity ^0.8.0;

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

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

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


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

pragma solidity ^0.8.0;


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

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

    bool private _paused;

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

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

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

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

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

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

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

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

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


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

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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

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


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

pragma solidity ^0.8.1;

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

        return account.code.length > 0;
    }

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

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

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

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

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

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

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

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }

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

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }

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

    /**
     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason or using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }

    function _revert(bytes memory returndata, string memory errorMessage) private pure {
        // Look for revert reason and bubble it up if present
        if (returndata.length > 0) {
            // The easiest way to bubble the revert reason is using memory via assembly
            /// @solidity memory-safe-assembly
            assembly {
                let returndata_size := mload(returndata)
                revert(add(32, returndata), returndata_size)
            }
        } else {
            revert(errorMessage);
        }
    }
}

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


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

pragma solidity ^0.8.0;

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

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


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

pragma solidity ^0.8.0;


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

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


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

pragma solidity ^0.8.0;


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

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

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


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

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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

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

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


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

pragma solidity ^0.8.0;


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

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


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

pragma solidity ^0.8.0;







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

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

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

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

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

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

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

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

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

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

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

        return batchBalances;
    }

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

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

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

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

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

        address operator = _msgSender();
        uint256[] memory ids = _asSingletonArray(id);
        uint256[] memory amounts = _asSingletonArray(amount);

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

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

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

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

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

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

        address operator = _msgSender();

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

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

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

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

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

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

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

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

        address operator = _msgSender();
        uint256[] memory ids = _asSingletonArray(id);
        uint256[] memory amounts = _asSingletonArray(amount);

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

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

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

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

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

        address operator = _msgSender();

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

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

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

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

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

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

        address operator = _msgSender();
        uint256[] memory ids = _asSingletonArray(id);
        uint256[] memory amounts = _asSingletonArray(amount);

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

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

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

        _afterTokenTransfer(operator, from, address(0), ids, amounts, "");
    }

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

        address operator = _msgSender();

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

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

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

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

        _afterTokenTransfer(operator, from, address(0), ids, amounts, "");
    }

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

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

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

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

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

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

        return array;
    }
}

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


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

pragma solidity ^0.8.0;


/**
 * @dev Extension of {ERC1155} that allows token holders to destroy both their
 * own tokens and those that they have been approved to use.
 *
 * _Available since v3.1._
 */
abstract contract ERC1155Burnable is ERC1155 {
    function burn(
        address account,
        uint256 id,
        uint256 value
    ) public virtual {
        require(
            account == _msgSender() || isApprovedForAll(account, _msgSender()),
            "ERC1155: caller is not token owner or approved"
        );

        _burn(account, id, value);
    }

    function burnBatch(
        address account,
        uint256[] memory ids,
        uint256[] memory values
    ) public virtual {
        require(
            account == _msgSender() || isApprovedForAll(account, _msgSender()),
            "ERC1155: caller is not token owner or approved"
        );

        _burnBatch(account, ids, values);
    }
}

// File: contracts/Aiddrop.sol


pragma solidity ^0.8.4;





contract AIDDROP is ERC1155, Ownable, Pausable, ERC1155Burnable {
    uint256[] prices = [
        0.05 * (10**18)
    ];

    event Attest(address indexed to, uint256 indexed tokenId);
    event Revoke(address indexed to, uint256 indexed tokenId);

    constructor() ERC1155("") {}

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

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

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

    function mint(
        address account,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) public payable {
        require(msg.value >= prices[id % prices.length], "Insufficient funds!");
        _mint(account, id, amount, data);
    }

    function _beforeTokenTransfer(address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data) internal pure override {
        require(
            from == address(0) || to == address(0),
            "Not allowed to transfer token"
        );
    }

    function _afterTokenTransfer(
        address from,
        address to,
        uint256 tokenId, uint256[] memory ids, uint256[] memory amounts, bytes memory data
    ) internal {
        if (from == address(0)) {
            emit Attest(to, tokenId);
        } else if (to == address(0)) {
            emit Revoke(to, tokenId);
        }
    }

    function mintBatch(
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) public payable {
        uint256 total = 0;
        for (uint256 i = 0; i < ids.length; i++) {
            total = total + prices[ids[i]] * amounts[i];
        }
        require(msg.value >= total, "Insufficient funds!");
        _mintBatch(to, ids, amounts, data);
    }

    function setPrices(uint256[] memory new_prices) public onlyOwner {
        prices = new_prices;
    }

    function getPrices() internal view returns (uint256[] storage) {
        return prices;
    }

    function withdraw() public onlyOwner {
        (bool os, ) = payable(owner()).call{value: address(this).balance}("");
        require(os);
        // =============================================================================
    }
}

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

6080604052604051806020016040528066b1a2bc2ec5000066ffffffffffffff168152506004906001620000359291906200018a565b503480156200004357600080fd5b50604051806020016040528060008152506200006581620000a760201b60201c565b50620000866200007a620000bc60201b60201c565b620000c460201b60201c565b6000600360146101000a81548160ff02191690831515021790555062000567565b8060029081620000b8919062000480565b5050565b600033905090565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054828255906000526020600020908101928215620001d4579160200282015b82811115620001d3578251829066ffffffffffffff16905591602001919060010190620001ab565b5b509050620001e39190620001e7565b5090565b5b8082111562000202576000816000905550600101620001e8565b5090565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200028857607f821691505b6020821081036200029e576200029d62000240565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620003087fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620002c9565b620003148683620002c9565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620003616200035b62000355846200032c565b62000336565b6200032c565b9050919050565b6000819050919050565b6200037d8362000340565b620003956200038c8262000368565b848454620002d6565b825550505050565b600090565b620003ac6200039d565b620003b981848462000372565b505050565b5b81811015620003e157620003d5600082620003a2565b600181019050620003bf565b5050565b601f8211156200043057620003fa81620002a4565b6200040584620002b9565b8101602085101562000415578190505b6200042d6200042485620002b9565b830182620003be565b50505b505050565b600082821c905092915050565b6000620004556000198460080262000435565b1980831691505092915050565b600062000470838362000442565b9150826002028217905092915050565b6200048b8262000206565b67ffffffffffffffff811115620004a757620004a662000211565b5b620004b382546200026f565b620004c0828285620003e5565b600060209050601f831160018114620004f85760008415620004e3578287015190505b620004ef858262000462565b8655506200055f565b601f1984166200050886620002a4565b60005b8281101562000532578489015182556001820191506020850194506020810190506200050b565b868310156200055257848901516200054e601f89168262000442565b8355505b6001600288020188555050505b505050505050565b61442180620005776000396000f3fe6080604052600436106101295760003560e01c80636b20c454116100ab5780638da5cb5b1161006f5780638da5cb5b14610385578063a22cb465146103b0578063e985e9c5146103d9578063f242432a14610416578063f2fde38b1461043f578063f5298aca1461046857610129565b80636b20c454146102e9578063715018a614610312578063731133e91461032957806379cf92d3146103455780638456cb591461036e57610129565b80632eb2c2d6116100f25780632eb2c2d61461022a5780633ccfd60b146102535780633f4ba83a1461026a5780634e1273f4146102815780635c975abb146102be57610129565b8062fdd58e1461012e57806301ffc9a71461016b57806302fe5305146101a85780630e89341c146101d15780631f7fdffa1461020e575b600080fd5b34801561013a57600080fd5b5061015560048036038101906101509190612779565b610491565b60405161016291906127c8565b60405180910390f35b34801561017757600080fd5b50610192600480360381019061018d919061283b565b610559565b60405161019f9190612883565b60405180910390f35b3480156101b457600080fd5b506101cf60048036038101906101ca91906129e4565b61063b565b005b3480156101dd57600080fd5b506101f860048036038101906101f39190612a2d565b61064f565b6040516102059190612ad9565b60405180910390f35b61022860048036038101906102239190612c64565b6106e3565b005b34801561023657600080fd5b50610251600480360381019061024c9190612d1f565b6107c5565b005b34801561025f57600080fd5b50610268610866565b005b34801561027657600080fd5b5061027f6108ee565b005b34801561028d57600080fd5b506102a860048036038101906102a39190612eb1565b610900565b6040516102b59190612fe7565b60405180910390f35b3480156102ca57600080fd5b506102d3610a19565b6040516102e09190612883565b60405180910390f35b3480156102f557600080fd5b50610310600480360381019061030b9190613009565b610a30565b005b34801561031e57600080fd5b50610327610acd565b005b610343600480360381019061033e9190613094565b610ae1565b005b34801561035157600080fd5b5061036c60048036038101906103679190613117565b610b63565b005b34801561037a57600080fd5b50610383610b85565b005b34801561039157600080fd5b5061039a610b97565b6040516103a7919061316f565b60405180910390f35b3480156103bc57600080fd5b506103d760048036038101906103d291906131b6565b610bc1565b005b3480156103e557600080fd5b5061040060048036038101906103fb91906131f6565b610bd7565b60405161040d9190612883565b60405180910390f35b34801561042257600080fd5b5061043d60048036038101906104389190613236565b610c6b565b005b34801561044b57600080fd5b50610466600480360381019061046191906132cd565b610d0c565b005b34801561047457600080fd5b5061048f600480360381019061048a91906132fa565b610d8f565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610501576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104f8906133bf565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061062457507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610634575061063382610e2c565b5b9050919050565b610643610e96565b61064c81610f14565b50565b60606002805461065e9061340e565b80601f016020809104026020016040519081016040528092919081815260200182805461068a9061340e565b80156106d75780601f106106ac576101008083540402835291602001916106d7565b820191906000526020600020905b8154815290600101906020018083116106ba57829003601f168201915b50505050509050919050565b6000805b845181101561076e578381815181106107035761070261343f565b5b602002602001015160048683815181106107205761071f61343f565b5b6020026020010151815481106107395761073861343f565b5b906000526020600020015461074e919061349d565b8261075991906134df565b9150808061076690613513565b9150506106e7565b50803410156107b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107a9906135a7565b60405180910390fd5b6107be85858585610f27565b5050505050565b6107cd611153565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061081357506108128561080d611153565b610bd7565b5b610852576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084990613639565b60405180910390fd5b61085f858585858561115b565b5050505050565b61086e610e96565b6000610878610b97565b73ffffffffffffffffffffffffffffffffffffffff164760405161089b9061368a565b60006040518083038185875af1925050503d80600081146108d8576040519150601f19603f3d011682016040523d82523d6000602084013e6108dd565b606091505b50509050806108eb57600080fd5b50565b6108f6610e96565b6108fe61147c565b565b60608151835114610946576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161093d90613711565b60405180910390fd5b6000835167ffffffffffffffff811115610963576109626128b9565b5b6040519080825280602002602001820160405280156109915781602001602082028036833780820191505090505b50905060005b8451811015610a0e576109de8582815181106109b6576109b561343f565b5b60200260200101518583815181106109d1576109d061343f565b5b6020026020010151610491565b8282815181106109f1576109f061343f565b5b60200260200101818152505080610a0790613513565b9050610997565b508091505092915050565b6000600360149054906101000a900460ff16905090565b610a38611153565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480610a7e5750610a7d83610a78611153565b610bd7565b5b610abd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab490613639565b60405180910390fd5b610ac88383836114df565b505050565b610ad5610e96565b610adf60006117ad565b565b6004808054905084610af39190613760565b81548110610b0457610b0361343f565b5b9060005260206000200154341015610b51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b48906135a7565b60405180910390fd5b610b5d84848484611873565b50505050565b610b6b610e96565b8060049080519060200190610b81929190612667565b5050565b610b8d610e96565b610b95611a23565b565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610bd3610bcc611153565b8383611a86565b5050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610c73611153565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610cb95750610cb885610cb3611153565b610bd7565b5b610cf8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cef90613639565b60405180910390fd5b610d058585858585611bf2565b5050505050565b610d14610e96565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610d83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7a90613803565b60405180910390fd5b610d8c816117ad565b50565b610d97611153565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480610ddd5750610ddc83610dd7611153565b610bd7565b5b610e1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1390613639565b60405180910390fd5b610e27838383611e8d565b505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b610e9e611153565b73ffffffffffffffffffffffffffffffffffffffff16610ebc610b97565b73ffffffffffffffffffffffffffffffffffffffff1614610f12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f099061386f565b60405180910390fd5b565b8060029081610f239190613a3b565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610f96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8d90613b7f565b60405180910390fd5b8151835114610fda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd190613c11565b60405180910390fd5b6000610fe4611153565b9050610ff5816000878787876120d3565b60005b84518110156110ae578381815181106110145761101361343f565b5b60200260200101516000808784815181106110325761103161343f565b5b6020026020010151815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461109491906134df565b9250508190555080806110a690613513565b915050610ff8565b508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611126929190613c31565b60405180910390a461113d81600087878787612181565b61114c81600087878787612189565b5050505050565b600033905090565b815183511461119f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119690613c11565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361120e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120590613cda565b60405180910390fd5b6000611218611153565b90506112288187878787876120d3565b60005b84518110156113d95760008582815181106112495761124861343f565b5b6020026020010151905060008583815181106112685761126761343f565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611309576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130090613d6c565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546113be91906134df565b92505081905550505050806113d290613513565b905061122b565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611450929190613c31565b60405180910390a4611466818787878787612181565b611474818787878787612189565b505050505050565b611484612360565b6000600360146101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6114c8611153565b6040516114d5919061316f565b60405180910390a1565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361154e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154590613dfe565b60405180910390fd5b8051825114611592576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158990613c11565b60405180910390fd5b600061159c611153565b90506115bc818560008686604051806020016040528060008152506120d3565b60005b83518110156117095760008482815181106115dd576115dc61343f565b5b6020026020010151905060008483815181106115fc576115fb61343f565b5b60200260200101519050600080600084815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561169d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169490613e90565b60405180910390fd5b81810360008085815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505050808061170190613513565b9150506115bf565b50600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051611781929190613c31565b60405180910390a46117a781856000868660405180602001604052806000815250612181565b50505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036118e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d990613b7f565b60405180910390fd5b60006118ec611153565b905060006118f9856123a9565b90506000611906856123a9565b9050611917836000898585896120d3565b8460008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461197691906134df565b925050819055508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6289896040516119f4929190613eb0565b60405180910390a4611a0b83600089858589612181565b611a1a83600089898989612423565b50505050505050565b611a2b6125fa565b6001600360146101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611a6f611153565b604051611a7c919061316f565b60405180910390a1565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611af4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aeb90613f4b565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611be59190612883565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611c61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5890613cda565b60405180910390fd5b6000611c6b611153565b90506000611c78856123a9565b90506000611c85856123a9565b9050611c958389898585896120d3565b600080600088815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905085811015611d2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2390613d6c565b60405180910390fd5b85810360008089815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508560008089815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611de191906134df565b925050819055508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628a8a604051611e5e929190613eb0565b60405180910390a4611e74848a8a86868a612181565b611e82848a8a8a8a8a612423565b505050505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611efc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef390613dfe565b60405180910390fd5b6000611f06611153565b90506000611f13846123a9565b90506000611f20846123a9565b9050611f40838760008585604051806020016040528060008152506120d3565b600080600087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905084811015611fd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fce90613e90565b60405180910390fd5b84810360008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6289896040516120a4929190613eb0565b60405180910390a46120ca84886000868660405180602001604052806000815250612181565b50505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061213a5750600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b612179576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217090613fb7565b60405180910390fd5b505050505050565b505050505050565b6121a88473ffffffffffffffffffffffffffffffffffffffff16612644565b15612358578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b81526004016121ee95949392919061402c565b6020604051808303816000875af192505050801561222a57506040513d601f19601f8201168201806040525081019061222791906140a9565b60015b6122cf576122366140e3565b806308c379a003612292575061224a614105565b806122555750612294565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122899190612ad9565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122c690614207565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612356576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234d90614299565b60405180910390fd5b505b505050505050565b612368610a19565b6123a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239e90614305565b60405180910390fd5b565b60606000600167ffffffffffffffff8111156123c8576123c76128b9565b5b6040519080825280602002602001820160405280156123f65781602001602082028036833780820191505090505b509050828160008151811061240e5761240d61343f565b5b60200260200101818152505080915050919050565b6124428473ffffffffffffffffffffffffffffffffffffffff16612644565b156125f2578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401612488959493929190614325565b6020604051808303816000875af19250505080156124c457506040513d601f19601f820116820180604052508101906124c191906140a9565b60015b612569576124d06140e3565b806308c379a00361252c57506124e4614105565b806124ef575061252e565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125239190612ad9565b60405180910390fd5b505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161256090614207565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146125f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e790614299565b60405180910390fd5b505b505050505050565b612602610a19565b15612642576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612639906143cb565b60405180910390fd5b565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b8280548282559060005260206000209081019282156126a3579160200282015b828111156126a2578251825591602001919060010190612687565b5b5090506126b091906126b4565b5090565b5b808211156126cd5760008160009055506001016126b5565b5090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612710826126e5565b9050919050565b61272081612705565b811461272b57600080fd5b50565b60008135905061273d81612717565b92915050565b6000819050919050565b61275681612743565b811461276157600080fd5b50565b6000813590506127738161274d565b92915050565b600080604083850312156127905761278f6126db565b5b600061279e8582860161272e565b92505060206127af85828601612764565b9150509250929050565b6127c281612743565b82525050565b60006020820190506127dd60008301846127b9565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612818816127e3565b811461282357600080fd5b50565b6000813590506128358161280f565b92915050565b600060208284031215612851576128506126db565b5b600061285f84828501612826565b91505092915050565b60008115159050919050565b61287d81612868565b82525050565b60006020820190506128986000830184612874565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6128f1826128a8565b810181811067ffffffffffffffff821117156129105761290f6128b9565b5b80604052505050565b60006129236126d1565b905061292f82826128e8565b919050565b600067ffffffffffffffff82111561294f5761294e6128b9565b5b612958826128a8565b9050602081019050919050565b82818337600083830152505050565b600061298761298284612934565b612919565b9050828152602081018484840111156129a3576129a26128a3565b5b6129ae848285612965565b509392505050565b600082601f8301126129cb576129ca61289e565b5b81356129db848260208601612974565b91505092915050565b6000602082840312156129fa576129f96126db565b5b600082013567ffffffffffffffff811115612a1857612a176126e0565b5b612a24848285016129b6565b91505092915050565b600060208284031215612a4357612a426126db565b5b6000612a5184828501612764565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612a94578082015181840152602081019050612a79565b60008484015250505050565b6000612aab82612a5a565b612ab58185612a65565b9350612ac5818560208601612a76565b612ace816128a8565b840191505092915050565b60006020820190508181036000830152612af38184612aa0565b905092915050565b600067ffffffffffffffff821115612b1657612b156128b9565b5b602082029050602081019050919050565b600080fd5b6000612b3f612b3a84612afb565b612919565b90508083825260208201905060208402830185811115612b6257612b61612b27565b5b835b81811015612b8b5780612b778882612764565b845260208401935050602081019050612b64565b5050509392505050565b600082601f830112612baa57612ba961289e565b5b8135612bba848260208601612b2c565b91505092915050565b600067ffffffffffffffff821115612bde57612bdd6128b9565b5b612be7826128a8565b9050602081019050919050565b6000612c07612c0284612bc3565b612919565b905082815260208101848484011115612c2357612c226128a3565b5b612c2e848285612965565b509392505050565b600082601f830112612c4b57612c4a61289e565b5b8135612c5b848260208601612bf4565b91505092915050565b60008060008060808587031215612c7e57612c7d6126db565b5b6000612c8c8782880161272e565b945050602085013567ffffffffffffffff811115612cad57612cac6126e0565b5b612cb987828801612b95565b935050604085013567ffffffffffffffff811115612cda57612cd96126e0565b5b612ce687828801612b95565b925050606085013567ffffffffffffffff811115612d0757612d066126e0565b5b612d1387828801612c36565b91505092959194509250565b600080600080600060a08688031215612d3b57612d3a6126db565b5b6000612d498882890161272e565b9550506020612d5a8882890161272e565b945050604086013567ffffffffffffffff811115612d7b57612d7a6126e0565b5b612d8788828901612b95565b935050606086013567ffffffffffffffff811115612da857612da76126e0565b5b612db488828901612b95565b925050608086013567ffffffffffffffff811115612dd557612dd46126e0565b5b612de188828901612c36565b9150509295509295909350565b600067ffffffffffffffff821115612e0957612e086128b9565b5b602082029050602081019050919050565b6000612e2d612e2884612dee565b612919565b90508083825260208201905060208402830185811115612e5057612e4f612b27565b5b835b81811015612e795780612e65888261272e565b845260208401935050602081019050612e52565b5050509392505050565b600082601f830112612e9857612e9761289e565b5b8135612ea8848260208601612e1a565b91505092915050565b60008060408385031215612ec857612ec76126db565b5b600083013567ffffffffffffffff811115612ee657612ee56126e0565b5b612ef285828601612e83565b925050602083013567ffffffffffffffff811115612f1357612f126126e0565b5b612f1f85828601612b95565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b612f5e81612743565b82525050565b6000612f708383612f55565b60208301905092915050565b6000602082019050919050565b6000612f9482612f29565b612f9e8185612f34565b9350612fa983612f45565b8060005b83811015612fda578151612fc18882612f64565b9750612fcc83612f7c565b925050600181019050612fad565b5085935050505092915050565b600060208201905081810360008301526130018184612f89565b905092915050565b600080600060608486031215613022576130216126db565b5b60006130308682870161272e565b935050602084013567ffffffffffffffff811115613051576130506126e0565b5b61305d86828701612b95565b925050604084013567ffffffffffffffff81111561307e5761307d6126e0565b5b61308a86828701612b95565b9150509250925092565b600080600080608085870312156130ae576130ad6126db565b5b60006130bc8782880161272e565b94505060206130cd87828801612764565b93505060406130de87828801612764565b925050606085013567ffffffffffffffff8111156130ff576130fe6126e0565b5b61310b87828801612c36565b91505092959194509250565b60006020828403121561312d5761312c6126db565b5b600082013567ffffffffffffffff81111561314b5761314a6126e0565b5b61315784828501612b95565b91505092915050565b61316981612705565b82525050565b60006020820190506131846000830184613160565b92915050565b61319381612868565b811461319e57600080fd5b50565b6000813590506131b08161318a565b92915050565b600080604083850312156131cd576131cc6126db565b5b60006131db8582860161272e565b92505060206131ec858286016131a1565b9150509250929050565b6000806040838503121561320d5761320c6126db565b5b600061321b8582860161272e565b925050602061322c8582860161272e565b9150509250929050565b600080600080600060a08688031215613252576132516126db565b5b60006132608882890161272e565b95505060206132718882890161272e565b945050604061328288828901612764565b935050606061329388828901612764565b925050608086013567ffffffffffffffff8111156132b4576132b36126e0565b5b6132c088828901612c36565b9150509295509295909350565b6000602082840312156132e3576132e26126db565b5b60006132f18482850161272e565b91505092915050565b600080600060608486031215613313576133126126db565b5b60006133218682870161272e565b935050602061333286828701612764565b925050604061334386828701612764565b9150509250925092565b7f455243313135353a2061646472657373207a65726f206973206e6f742061207660008201527f616c6964206f776e657200000000000000000000000000000000000000000000602082015250565b60006133a9602a83612a65565b91506133b48261334d565b604082019050919050565b600060208201905081810360008301526133d88161339c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061342657607f821691505b602082108103613439576134386133df565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006134a882612743565b91506134b383612743565b92508282026134c181612743565b915082820484148315176134d8576134d761346e565b5b5092915050565b60006134ea82612743565b91506134f583612743565b925082820190508082111561350d5761350c61346e565b5b92915050565b600061351e82612743565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036135505761354f61346e565b5b600182019050919050565b7f496e73756666696369656e742066756e64732100000000000000000000000000600082015250565b6000613591601383612a65565b915061359c8261355b565b602082019050919050565b600060208201905081810360008301526135c081613584565b9050919050565b7f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60008201527f6572206f7220617070726f766564000000000000000000000000000000000000602082015250565b6000613623602e83612a65565b915061362e826135c7565b604082019050919050565b6000602082019050818103600083015261365281613616565b9050919050565b600081905092915050565b50565b6000613674600083613659565b915061367f82613664565b600082019050919050565b600061369582613667565b9150819050919050565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b60006136fb602983612a65565b91506137068261369f565b604082019050919050565b6000602082019050818103600083015261372a816136ee565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061376b82612743565b915061377683612743565b92508261378657613785613731565b5b828206905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006137ed602683612a65565b91506137f882613791565b604082019050919050565b6000602082019050818103600083015261381c816137e0565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613859602083612a65565b915061386482613823565b602082019050919050565b600060208201905081810360008301526138888161384c565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026138f17fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826138b4565b6138fb86836138b4565b95508019841693508086168417925050509392505050565b6000819050919050565b600061393861393361392e84612743565b613913565b612743565b9050919050565b6000819050919050565b6139528361391d565b61396661395e8261393f565b8484546138c1565b825550505050565b600090565b61397b61396e565b613986818484613949565b505050565b5b818110156139aa5761399f600082613973565b60018101905061398c565b5050565b601f8211156139ef576139c08161388f565b6139c9846138a4565b810160208510156139d8578190505b6139ec6139e4856138a4565b83018261398b565b50505b505050565b600082821c905092915050565b6000613a12600019846008026139f4565b1980831691505092915050565b6000613a2b8383613a01565b9150826002028217905092915050565b613a4482612a5a565b67ffffffffffffffff811115613a5d57613a5c6128b9565b5b613a67825461340e565b613a728282856139ae565b600060209050601f831160018114613aa55760008415613a93578287015190505b613a9d8582613a1f565b865550613b05565b601f198416613ab38661388f565b60005b82811015613adb57848901518255600182019150602085019450602081019050613ab6565b86831015613af85784890151613af4601f891682613a01565b8355505b6001600288020188555050505b505050505050565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000613b69602183612a65565b9150613b7482613b0d565b604082019050919050565b60006020820190508181036000830152613b9881613b5c565b9050919050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b6000613bfb602883612a65565b9150613c0682613b9f565b604082019050919050565b60006020820190508181036000830152613c2a81613bee565b9050919050565b60006040820190508181036000830152613c4b8185612f89565b90508181036020830152613c5f8184612f89565b90509392505050565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613cc4602583612a65565b9150613ccf82613c68565b604082019050919050565b60006020820190508181036000830152613cf381613cb7565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b6000613d56602a83612a65565b9150613d6182613cfa565b604082019050919050565b60006020820190508181036000830152613d8581613d49565b9050919050565b7f455243313135353a206275726e2066726f6d20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613de8602383612a65565b9150613df382613d8c565b604082019050919050565b60006020820190508181036000830152613e1781613ddb565b9050919050565b7f455243313135353a206275726e20616d6f756e7420657863656564732062616c60008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b6000613e7a602483612a65565b9150613e8582613e1e565b604082019050919050565b60006020820190508181036000830152613ea981613e6d565b9050919050565b6000604082019050613ec560008301856127b9565b613ed260208301846127b9565b9392505050565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b6000613f35602983612a65565b9150613f4082613ed9565b604082019050919050565b60006020820190508181036000830152613f6481613f28565b9050919050565b7f4e6f7420616c6c6f77656420746f207472616e7366657220746f6b656e000000600082015250565b6000613fa1601d83612a65565b9150613fac82613f6b565b602082019050919050565b60006020820190508181036000830152613fd081613f94565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000613ffe82613fd7565b6140088185613fe2565b9350614018818560208601612a76565b614021816128a8565b840191505092915050565b600060a0820190506140416000830188613160565b61404e6020830187613160565b81810360408301526140608186612f89565b905081810360608301526140748185612f89565b905081810360808301526140888184613ff3565b90509695505050505050565b6000815190506140a38161280f565b92915050565b6000602082840312156140bf576140be6126db565b5b60006140cd84828501614094565b91505092915050565b60008160e01c9050919050565b600060033d11156141025760046000803e6140ff6000516140d6565b90505b90565b600060443d10614192576141176126d1565b60043d036004823e80513d602482011167ffffffffffffffff8211171561413f575050614192565b808201805167ffffffffffffffff81111561415d5750505050614192565b80602083010160043d03850181111561417a575050505050614192565b614189826020018501866128e8565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e2d4552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b60006141f1603483612a65565b91506141fc82614195565b604082019050919050565b60006020820190508181036000830152614220816141e4565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b6000614283602883612a65565b915061428e82614227565b604082019050919050565b600060208201905081810360008301526142b281614276565b9050919050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b60006142ef601483612a65565b91506142fa826142b9565b602082019050919050565b6000602082019050818103600083015261431e816142e2565b9050919050565b600060a08201905061433a6000830188613160565b6143476020830187613160565b61435460408301866127b9565b61436160608301856127b9565b81810360808301526143738184613ff3565b90509695505050505050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b60006143b5601083612a65565b91506143c08261437f565b602082019050919050565b600060208201905081810360008301526143e4816143a8565b905091905056fea26469706673582212200e3cd113f140c680ff2cb7ec17ed6b8087795e66d1c6f0839a2f2b42bc243bd764736f6c63430008110033

Deployed Bytecode

0x6080604052600436106101295760003560e01c80636b20c454116100ab5780638da5cb5b1161006f5780638da5cb5b14610385578063a22cb465146103b0578063e985e9c5146103d9578063f242432a14610416578063f2fde38b1461043f578063f5298aca1461046857610129565b80636b20c454146102e9578063715018a614610312578063731133e91461032957806379cf92d3146103455780638456cb591461036e57610129565b80632eb2c2d6116100f25780632eb2c2d61461022a5780633ccfd60b146102535780633f4ba83a1461026a5780634e1273f4146102815780635c975abb146102be57610129565b8062fdd58e1461012e57806301ffc9a71461016b57806302fe5305146101a85780630e89341c146101d15780631f7fdffa1461020e575b600080fd5b34801561013a57600080fd5b5061015560048036038101906101509190612779565b610491565b60405161016291906127c8565b60405180910390f35b34801561017757600080fd5b50610192600480360381019061018d919061283b565b610559565b60405161019f9190612883565b60405180910390f35b3480156101b457600080fd5b506101cf60048036038101906101ca91906129e4565b61063b565b005b3480156101dd57600080fd5b506101f860048036038101906101f39190612a2d565b61064f565b6040516102059190612ad9565b60405180910390f35b61022860048036038101906102239190612c64565b6106e3565b005b34801561023657600080fd5b50610251600480360381019061024c9190612d1f565b6107c5565b005b34801561025f57600080fd5b50610268610866565b005b34801561027657600080fd5b5061027f6108ee565b005b34801561028d57600080fd5b506102a860048036038101906102a39190612eb1565b610900565b6040516102b59190612fe7565b60405180910390f35b3480156102ca57600080fd5b506102d3610a19565b6040516102e09190612883565b60405180910390f35b3480156102f557600080fd5b50610310600480360381019061030b9190613009565b610a30565b005b34801561031e57600080fd5b50610327610acd565b005b610343600480360381019061033e9190613094565b610ae1565b005b34801561035157600080fd5b5061036c60048036038101906103679190613117565b610b63565b005b34801561037a57600080fd5b50610383610b85565b005b34801561039157600080fd5b5061039a610b97565b6040516103a7919061316f565b60405180910390f35b3480156103bc57600080fd5b506103d760048036038101906103d291906131b6565b610bc1565b005b3480156103e557600080fd5b5061040060048036038101906103fb91906131f6565b610bd7565b60405161040d9190612883565b60405180910390f35b34801561042257600080fd5b5061043d60048036038101906104389190613236565b610c6b565b005b34801561044b57600080fd5b50610466600480360381019061046191906132cd565b610d0c565b005b34801561047457600080fd5b5061048f600480360381019061048a91906132fa565b610d8f565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610501576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104f8906133bf565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061062457507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610634575061063382610e2c565b5b9050919050565b610643610e96565b61064c81610f14565b50565b60606002805461065e9061340e565b80601f016020809104026020016040519081016040528092919081815260200182805461068a9061340e565b80156106d75780601f106106ac576101008083540402835291602001916106d7565b820191906000526020600020905b8154815290600101906020018083116106ba57829003601f168201915b50505050509050919050565b6000805b845181101561076e578381815181106107035761070261343f565b5b602002602001015160048683815181106107205761071f61343f565b5b6020026020010151815481106107395761073861343f565b5b906000526020600020015461074e919061349d565b8261075991906134df565b9150808061076690613513565b9150506106e7565b50803410156107b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107a9906135a7565b60405180910390fd5b6107be85858585610f27565b5050505050565b6107cd611153565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061081357506108128561080d611153565b610bd7565b5b610852576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084990613639565b60405180910390fd5b61085f858585858561115b565b5050505050565b61086e610e96565b6000610878610b97565b73ffffffffffffffffffffffffffffffffffffffff164760405161089b9061368a565b60006040518083038185875af1925050503d80600081146108d8576040519150601f19603f3d011682016040523d82523d6000602084013e6108dd565b606091505b50509050806108eb57600080fd5b50565b6108f6610e96565b6108fe61147c565b565b60608151835114610946576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161093d90613711565b60405180910390fd5b6000835167ffffffffffffffff811115610963576109626128b9565b5b6040519080825280602002602001820160405280156109915781602001602082028036833780820191505090505b50905060005b8451811015610a0e576109de8582815181106109b6576109b561343f565b5b60200260200101518583815181106109d1576109d061343f565b5b6020026020010151610491565b8282815181106109f1576109f061343f565b5b60200260200101818152505080610a0790613513565b9050610997565b508091505092915050565b6000600360149054906101000a900460ff16905090565b610a38611153565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480610a7e5750610a7d83610a78611153565b610bd7565b5b610abd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab490613639565b60405180910390fd5b610ac88383836114df565b505050565b610ad5610e96565b610adf60006117ad565b565b6004808054905084610af39190613760565b81548110610b0457610b0361343f565b5b9060005260206000200154341015610b51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b48906135a7565b60405180910390fd5b610b5d84848484611873565b50505050565b610b6b610e96565b8060049080519060200190610b81929190612667565b5050565b610b8d610e96565b610b95611a23565b565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610bd3610bcc611153565b8383611a86565b5050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610c73611153565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610cb95750610cb885610cb3611153565b610bd7565b5b610cf8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cef90613639565b60405180910390fd5b610d058585858585611bf2565b5050505050565b610d14610e96565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610d83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7a90613803565b60405180910390fd5b610d8c816117ad565b50565b610d97611153565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480610ddd5750610ddc83610dd7611153565b610bd7565b5b610e1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1390613639565b60405180910390fd5b610e27838383611e8d565b505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b610e9e611153565b73ffffffffffffffffffffffffffffffffffffffff16610ebc610b97565b73ffffffffffffffffffffffffffffffffffffffff1614610f12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f099061386f565b60405180910390fd5b565b8060029081610f239190613a3b565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610f96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8d90613b7f565b60405180910390fd5b8151835114610fda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd190613c11565b60405180910390fd5b6000610fe4611153565b9050610ff5816000878787876120d3565b60005b84518110156110ae578381815181106110145761101361343f565b5b60200260200101516000808784815181106110325761103161343f565b5b6020026020010151815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461109491906134df565b9250508190555080806110a690613513565b915050610ff8565b508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611126929190613c31565b60405180910390a461113d81600087878787612181565b61114c81600087878787612189565b5050505050565b600033905090565b815183511461119f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119690613c11565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361120e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120590613cda565b60405180910390fd5b6000611218611153565b90506112288187878787876120d3565b60005b84518110156113d95760008582815181106112495761124861343f565b5b6020026020010151905060008583815181106112685761126761343f565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611309576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130090613d6c565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546113be91906134df565b92505081905550505050806113d290613513565b905061122b565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611450929190613c31565b60405180910390a4611466818787878787612181565b611474818787878787612189565b505050505050565b611484612360565b6000600360146101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6114c8611153565b6040516114d5919061316f565b60405180910390a1565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361154e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154590613dfe565b60405180910390fd5b8051825114611592576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158990613c11565b60405180910390fd5b600061159c611153565b90506115bc818560008686604051806020016040528060008152506120d3565b60005b83518110156117095760008482815181106115dd576115dc61343f565b5b6020026020010151905060008483815181106115fc576115fb61343f565b5b60200260200101519050600080600084815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561169d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169490613e90565b60405180910390fd5b81810360008085815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505050808061170190613513565b9150506115bf565b50600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051611781929190613c31565b60405180910390a46117a781856000868660405180602001604052806000815250612181565b50505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036118e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d990613b7f565b60405180910390fd5b60006118ec611153565b905060006118f9856123a9565b90506000611906856123a9565b9050611917836000898585896120d3565b8460008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461197691906134df565b925050819055508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6289896040516119f4929190613eb0565b60405180910390a4611a0b83600089858589612181565b611a1a83600089898989612423565b50505050505050565b611a2b6125fa565b6001600360146101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611a6f611153565b604051611a7c919061316f565b60405180910390a1565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611af4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aeb90613f4b565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611be59190612883565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611c61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5890613cda565b60405180910390fd5b6000611c6b611153565b90506000611c78856123a9565b90506000611c85856123a9565b9050611c958389898585896120d3565b600080600088815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905085811015611d2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2390613d6c565b60405180910390fd5b85810360008089815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508560008089815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611de191906134df565b925050819055508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628a8a604051611e5e929190613eb0565b60405180910390a4611e74848a8a86868a612181565b611e82848a8a8a8a8a612423565b505050505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611efc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef390613dfe565b60405180910390fd5b6000611f06611153565b90506000611f13846123a9565b90506000611f20846123a9565b9050611f40838760008585604051806020016040528060008152506120d3565b600080600087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905084811015611fd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fce90613e90565b60405180910390fd5b84810360008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6289896040516120a4929190613eb0565b60405180910390a46120ca84886000868660405180602001604052806000815250612181565b50505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061213a5750600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b612179576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217090613fb7565b60405180910390fd5b505050505050565b505050505050565b6121a88473ffffffffffffffffffffffffffffffffffffffff16612644565b15612358578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b81526004016121ee95949392919061402c565b6020604051808303816000875af192505050801561222a57506040513d601f19601f8201168201806040525081019061222791906140a9565b60015b6122cf576122366140e3565b806308c379a003612292575061224a614105565b806122555750612294565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122899190612ad9565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122c690614207565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612356576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234d90614299565b60405180910390fd5b505b505050505050565b612368610a19565b6123a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239e90614305565b60405180910390fd5b565b60606000600167ffffffffffffffff8111156123c8576123c76128b9565b5b6040519080825280602002602001820160405280156123f65781602001602082028036833780820191505090505b509050828160008151811061240e5761240d61343f565b5b60200260200101818152505080915050919050565b6124428473ffffffffffffffffffffffffffffffffffffffff16612644565b156125f2578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401612488959493929190614325565b6020604051808303816000875af19250505080156124c457506040513d601f19601f820116820180604052508101906124c191906140a9565b60015b612569576124d06140e3565b806308c379a00361252c57506124e4614105565b806124ef575061252e565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125239190612ad9565b60405180910390fd5b505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161256090614207565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146125f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e790614299565b60405180910390fd5b505b505050505050565b612602610a19565b15612642576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612639906143cb565b60405180910390fd5b565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b8280548282559060005260206000209081019282156126a3579160200282015b828111156126a2578251825591602001919060010190612687565b5b5090506126b091906126b4565b5090565b5b808211156126cd5760008160009055506001016126b5565b5090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612710826126e5565b9050919050565b61272081612705565b811461272b57600080fd5b50565b60008135905061273d81612717565b92915050565b6000819050919050565b61275681612743565b811461276157600080fd5b50565b6000813590506127738161274d565b92915050565b600080604083850312156127905761278f6126db565b5b600061279e8582860161272e565b92505060206127af85828601612764565b9150509250929050565b6127c281612743565b82525050565b60006020820190506127dd60008301846127b9565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612818816127e3565b811461282357600080fd5b50565b6000813590506128358161280f565b92915050565b600060208284031215612851576128506126db565b5b600061285f84828501612826565b91505092915050565b60008115159050919050565b61287d81612868565b82525050565b60006020820190506128986000830184612874565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6128f1826128a8565b810181811067ffffffffffffffff821117156129105761290f6128b9565b5b80604052505050565b60006129236126d1565b905061292f82826128e8565b919050565b600067ffffffffffffffff82111561294f5761294e6128b9565b5b612958826128a8565b9050602081019050919050565b82818337600083830152505050565b600061298761298284612934565b612919565b9050828152602081018484840111156129a3576129a26128a3565b5b6129ae848285612965565b509392505050565b600082601f8301126129cb576129ca61289e565b5b81356129db848260208601612974565b91505092915050565b6000602082840312156129fa576129f96126db565b5b600082013567ffffffffffffffff811115612a1857612a176126e0565b5b612a24848285016129b6565b91505092915050565b600060208284031215612a4357612a426126db565b5b6000612a5184828501612764565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612a94578082015181840152602081019050612a79565b60008484015250505050565b6000612aab82612a5a565b612ab58185612a65565b9350612ac5818560208601612a76565b612ace816128a8565b840191505092915050565b60006020820190508181036000830152612af38184612aa0565b905092915050565b600067ffffffffffffffff821115612b1657612b156128b9565b5b602082029050602081019050919050565b600080fd5b6000612b3f612b3a84612afb565b612919565b90508083825260208201905060208402830185811115612b6257612b61612b27565b5b835b81811015612b8b5780612b778882612764565b845260208401935050602081019050612b64565b5050509392505050565b600082601f830112612baa57612ba961289e565b5b8135612bba848260208601612b2c565b91505092915050565b600067ffffffffffffffff821115612bde57612bdd6128b9565b5b612be7826128a8565b9050602081019050919050565b6000612c07612c0284612bc3565b612919565b905082815260208101848484011115612c2357612c226128a3565b5b612c2e848285612965565b509392505050565b600082601f830112612c4b57612c4a61289e565b5b8135612c5b848260208601612bf4565b91505092915050565b60008060008060808587031215612c7e57612c7d6126db565b5b6000612c8c8782880161272e565b945050602085013567ffffffffffffffff811115612cad57612cac6126e0565b5b612cb987828801612b95565b935050604085013567ffffffffffffffff811115612cda57612cd96126e0565b5b612ce687828801612b95565b925050606085013567ffffffffffffffff811115612d0757612d066126e0565b5b612d1387828801612c36565b91505092959194509250565b600080600080600060a08688031215612d3b57612d3a6126db565b5b6000612d498882890161272e565b9550506020612d5a8882890161272e565b945050604086013567ffffffffffffffff811115612d7b57612d7a6126e0565b5b612d8788828901612b95565b935050606086013567ffffffffffffffff811115612da857612da76126e0565b5b612db488828901612b95565b925050608086013567ffffffffffffffff811115612dd557612dd46126e0565b5b612de188828901612c36565b9150509295509295909350565b600067ffffffffffffffff821115612e0957612e086128b9565b5b602082029050602081019050919050565b6000612e2d612e2884612dee565b612919565b90508083825260208201905060208402830185811115612e5057612e4f612b27565b5b835b81811015612e795780612e65888261272e565b845260208401935050602081019050612e52565b5050509392505050565b600082601f830112612e9857612e9761289e565b5b8135612ea8848260208601612e1a565b91505092915050565b60008060408385031215612ec857612ec76126db565b5b600083013567ffffffffffffffff811115612ee657612ee56126e0565b5b612ef285828601612e83565b925050602083013567ffffffffffffffff811115612f1357612f126126e0565b5b612f1f85828601612b95565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b612f5e81612743565b82525050565b6000612f708383612f55565b60208301905092915050565b6000602082019050919050565b6000612f9482612f29565b612f9e8185612f34565b9350612fa983612f45565b8060005b83811015612fda578151612fc18882612f64565b9750612fcc83612f7c565b925050600181019050612fad565b5085935050505092915050565b600060208201905081810360008301526130018184612f89565b905092915050565b600080600060608486031215613022576130216126db565b5b60006130308682870161272e565b935050602084013567ffffffffffffffff811115613051576130506126e0565b5b61305d86828701612b95565b925050604084013567ffffffffffffffff81111561307e5761307d6126e0565b5b61308a86828701612b95565b9150509250925092565b600080600080608085870312156130ae576130ad6126db565b5b60006130bc8782880161272e565b94505060206130cd87828801612764565b93505060406130de87828801612764565b925050606085013567ffffffffffffffff8111156130ff576130fe6126e0565b5b61310b87828801612c36565b91505092959194509250565b60006020828403121561312d5761312c6126db565b5b600082013567ffffffffffffffff81111561314b5761314a6126e0565b5b61315784828501612b95565b91505092915050565b61316981612705565b82525050565b60006020820190506131846000830184613160565b92915050565b61319381612868565b811461319e57600080fd5b50565b6000813590506131b08161318a565b92915050565b600080604083850312156131cd576131cc6126db565b5b60006131db8582860161272e565b92505060206131ec858286016131a1565b9150509250929050565b6000806040838503121561320d5761320c6126db565b5b600061321b8582860161272e565b925050602061322c8582860161272e565b9150509250929050565b600080600080600060a08688031215613252576132516126db565b5b60006132608882890161272e565b95505060206132718882890161272e565b945050604061328288828901612764565b935050606061329388828901612764565b925050608086013567ffffffffffffffff8111156132b4576132b36126e0565b5b6132c088828901612c36565b9150509295509295909350565b6000602082840312156132e3576132e26126db565b5b60006132f18482850161272e565b91505092915050565b600080600060608486031215613313576133126126db565b5b60006133218682870161272e565b935050602061333286828701612764565b925050604061334386828701612764565b9150509250925092565b7f455243313135353a2061646472657373207a65726f206973206e6f742061207660008201527f616c6964206f776e657200000000000000000000000000000000000000000000602082015250565b60006133a9602a83612a65565b91506133b48261334d565b604082019050919050565b600060208201905081810360008301526133d88161339c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061342657607f821691505b602082108103613439576134386133df565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006134a882612743565b91506134b383612743565b92508282026134c181612743565b915082820484148315176134d8576134d761346e565b5b5092915050565b60006134ea82612743565b91506134f583612743565b925082820190508082111561350d5761350c61346e565b5b92915050565b600061351e82612743565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036135505761354f61346e565b5b600182019050919050565b7f496e73756666696369656e742066756e64732100000000000000000000000000600082015250565b6000613591601383612a65565b915061359c8261355b565b602082019050919050565b600060208201905081810360008301526135c081613584565b9050919050565b7f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60008201527f6572206f7220617070726f766564000000000000000000000000000000000000602082015250565b6000613623602e83612a65565b915061362e826135c7565b604082019050919050565b6000602082019050818103600083015261365281613616565b9050919050565b600081905092915050565b50565b6000613674600083613659565b915061367f82613664565b600082019050919050565b600061369582613667565b9150819050919050565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b60006136fb602983612a65565b91506137068261369f565b604082019050919050565b6000602082019050818103600083015261372a816136ee565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061376b82612743565b915061377683612743565b92508261378657613785613731565b5b828206905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006137ed602683612a65565b91506137f882613791565b604082019050919050565b6000602082019050818103600083015261381c816137e0565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613859602083612a65565b915061386482613823565b602082019050919050565b600060208201905081810360008301526138888161384c565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026138f17fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826138b4565b6138fb86836138b4565b95508019841693508086168417925050509392505050565b6000819050919050565b600061393861393361392e84612743565b613913565b612743565b9050919050565b6000819050919050565b6139528361391d565b61396661395e8261393f565b8484546138c1565b825550505050565b600090565b61397b61396e565b613986818484613949565b505050565b5b818110156139aa5761399f600082613973565b60018101905061398c565b5050565b601f8211156139ef576139c08161388f565b6139c9846138a4565b810160208510156139d8578190505b6139ec6139e4856138a4565b83018261398b565b50505b505050565b600082821c905092915050565b6000613a12600019846008026139f4565b1980831691505092915050565b6000613a2b8383613a01565b9150826002028217905092915050565b613a4482612a5a565b67ffffffffffffffff811115613a5d57613a5c6128b9565b5b613a67825461340e565b613a728282856139ae565b600060209050601f831160018114613aa55760008415613a93578287015190505b613a9d8582613a1f565b865550613b05565b601f198416613ab38661388f565b60005b82811015613adb57848901518255600182019150602085019450602081019050613ab6565b86831015613af85784890151613af4601f891682613a01565b8355505b6001600288020188555050505b505050505050565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000613b69602183612a65565b9150613b7482613b0d565b604082019050919050565b60006020820190508181036000830152613b9881613b5c565b9050919050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b6000613bfb602883612a65565b9150613c0682613b9f565b604082019050919050565b60006020820190508181036000830152613c2a81613bee565b9050919050565b60006040820190508181036000830152613c4b8185612f89565b90508181036020830152613c5f8184612f89565b90509392505050565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613cc4602583612a65565b9150613ccf82613c68565b604082019050919050565b60006020820190508181036000830152613cf381613cb7565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b6000613d56602a83612a65565b9150613d6182613cfa565b604082019050919050565b60006020820190508181036000830152613d8581613d49565b9050919050565b7f455243313135353a206275726e2066726f6d20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613de8602383612a65565b9150613df382613d8c565b604082019050919050565b60006020820190508181036000830152613e1781613ddb565b9050919050565b7f455243313135353a206275726e20616d6f756e7420657863656564732062616c60008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b6000613e7a602483612a65565b9150613e8582613e1e565b604082019050919050565b60006020820190508181036000830152613ea981613e6d565b9050919050565b6000604082019050613ec560008301856127b9565b613ed260208301846127b9565b9392505050565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b6000613f35602983612a65565b9150613f4082613ed9565b604082019050919050565b60006020820190508181036000830152613f6481613f28565b9050919050565b7f4e6f7420616c6c6f77656420746f207472616e7366657220746f6b656e000000600082015250565b6000613fa1601d83612a65565b9150613fac82613f6b565b602082019050919050565b60006020820190508181036000830152613fd081613f94565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000613ffe82613fd7565b6140088185613fe2565b9350614018818560208601612a76565b614021816128a8565b840191505092915050565b600060a0820190506140416000830188613160565b61404e6020830187613160565b81810360408301526140608186612f89565b905081810360608301526140748185612f89565b905081810360808301526140888184613ff3565b90509695505050505050565b6000815190506140a38161280f565b92915050565b6000602082840312156140bf576140be6126db565b5b60006140cd84828501614094565b91505092915050565b60008160e01c9050919050565b600060033d11156141025760046000803e6140ff6000516140d6565b90505b90565b600060443d10614192576141176126d1565b60043d036004823e80513d602482011167ffffffffffffffff8211171561413f575050614192565b808201805167ffffffffffffffff81111561415d5750505050614192565b80602083010160043d03850181111561417a575050505050614192565b614189826020018501866128e8565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e2d4552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b60006141f1603483612a65565b91506141fc82614195565b604082019050919050565b60006020820190508181036000830152614220816141e4565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b6000614283602883612a65565b915061428e82614227565b604082019050919050565b600060208201905081810360008301526142b281614276565b9050919050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b60006142ef601483612a65565b91506142fa826142b9565b602082019050919050565b6000602082019050818103600083015261431e816142e2565b9050919050565b600060a08201905061433a6000830188613160565b6143476020830187613160565b61435460408301866127b9565b61436160608301856127b9565b81810360808301526143738184613ff3565b90509695505050505050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b60006143b5601083612a65565b91506143c08261437f565b602082019050919050565b600060208201905081810360008301526143e4816143a8565b905091905056fea26469706673582212200e3cd113f140c680ff2cb7ec17ed6b8087795e66d1c6f0839a2f2b42bc243bd764736f6c63430008110033

Deployed Bytecode Sourcemap

43895:2365:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27154:230;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26177:310;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44193:89;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26898:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45379:419;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29097:438;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46020:237;;;;;;;;;;;;;:::i;:::-;;44359:65;;;;;;;;;;;;;:::i;:::-;;27550:524;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2566:86;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43459:358;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5431:103;;;;;;;;;;;;;:::i;:::-;;44432:269;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45806:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44290:61;;;;;;;;;;;;;:::i;:::-;;4783:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28147:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28374:168;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28614:406;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5689:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43125:326;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27154:230;27240:7;27287:1;27268:21;;:7;:21;;;27260:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;27354:9;:13;27364:2;27354:13;;;;;;;;;;;:22;27368:7;27354:22;;;;;;;;;;;;;;;;27347:29;;27154:230;;;;:::o;26177:310::-;26279:4;26331:26;26316:41;;;:11;:41;;;;:110;;;;26389:37;26374:52;;;:11;:52;;;;26316:110;:163;;;;26443:36;26467:11;26443:23;:36::i;:::-;26316:163;26296:183;;26177:310;;;:::o;44193:89::-;4669:13;:11;:13::i;:::-;44259:15:::1;44267:6;44259:7;:15::i;:::-;44193:89:::0;:::o;26898:105::-;26958:13;26991:4;26984:11;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26898:105;;;:::o;45379:419::-;45546:13;45579:9;45574:111;45598:3;:10;45594:1;:14;45574:111;;;45663:7;45671:1;45663:10;;;;;;;;:::i;:::-;;;;;;;;45646:6;45653:3;45657:1;45653:6;;;;;;;;:::i;:::-;;;;;;;;45646:14;;;;;;;;:::i;:::-;;;;;;;;;;:27;;;;:::i;:::-;45638:5;:35;;;;:::i;:::-;45630:43;;45610:3;;;;;:::i;:::-;;;;45574:111;;;;45716:5;45703:9;:18;;45695:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;45756:34;45767:2;45771:3;45776:7;45785:4;45756:10;:34::i;:::-;45535:263;45379:419;;;;:::o;29097:438::-;29338:12;:10;:12::i;:::-;29330:20;;:4;:20;;;:60;;;;29354:36;29371:4;29377:12;:10;:12::i;:::-;29354:16;:36::i;:::-;29330:60;29308:156;;;;;;;;;;;;:::i;:::-;;;;;;;;;29475:52;29498:4;29504:2;29508:3;29513:7;29522:4;29475:22;:52::i;:::-;29097:438;;;;;:::o;46020:237::-;4669:13;:11;:13::i;:::-;46069:7:::1;46090;:5;:7::i;:::-;46082:21;;46111;46082:55;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46068:69;;;46156:2;46148:11;;;::::0;::::1;;46057:200;46020:237::o:0;44359:65::-;4669:13;:11;:13::i;:::-;44406:10:::1;:8;:10::i;:::-;44359:65::o:0;27550:524::-;27706:16;27767:3;:10;27748:8;:15;:29;27740:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;27836:30;27883:8;:15;27869:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27836:63;;27917:9;27912:122;27936:8;:15;27932:1;:19;27912:122;;;27992:30;28002:8;28011:1;28002:11;;;;;;;;:::i;:::-;;;;;;;;28015:3;28019:1;28015:6;;;;;;;;:::i;:::-;;;;;;;;27992:9;:30::i;:::-;27973:13;27987:1;27973:16;;;;;;;;:::i;:::-;;;;;;;:49;;;;;27953:3;;;;:::i;:::-;;;27912:122;;;;28053:13;28046:20;;;27550:524;;;;:::o;2566:86::-;2613:4;2637:7;;;;;;;;;;;2630:14;;2566:86;:::o;43459:358::-;43635:12;:10;:12::i;:::-;43624:23;;:7;:23;;;:66;;;;43651:39;43668:7;43677:12;:10;:12::i;:::-;43651:16;:39::i;:::-;43624:66;43602:162;;;;;;;;;;;;:::i;:::-;;;;;;;;;43777:32;43788:7;43797:3;43802:6;43777:10;:32::i;:::-;43459:358;;;:::o;5431:103::-;4669:13;:11;:13::i;:::-;5496:30:::1;5523:1;5496:18;:30::i;:::-;5431:103::o:0;44432:269::-;44600:6;44612;:13;;;;44607:2;:18;;;;:::i;:::-;44600:26;;;;;;;;:::i;:::-;;;;;;;;;;44587:9;:39;;44579:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;44661:32;44667:7;44676:2;44680:6;44688:4;44661:5;:32::i;:::-;44432:269;;;;:::o;45806:103::-;4669:13;:11;:13::i;:::-;45891:10:::1;45882:6;:19;;;;;;;;;;;;:::i;:::-;;45806:103:::0;:::o;44290:61::-;4669:13;:11;:13::i;:::-;44335:8:::1;:6;:8::i;:::-;44290:61::o:0;4783:87::-;4829:7;4856:6;;;;;;;;;;;4849:13;;4783:87;:::o;28147:155::-;28242:52;28261:12;:10;:12::i;:::-;28275:8;28285;28242:18;:52::i;:::-;28147:155;;:::o;28374:168::-;28473:4;28497:18;:27;28516:7;28497:27;;;;;;;;;;;;;;;:37;28525:8;28497:37;;;;;;;;;;;;;;;;;;;;;;;;;28490:44;;28374:168;;;;:::o;28614:406::-;28830:12;:10;:12::i;:::-;28822:20;;:4;:20;;;:60;;;;28846:36;28863:4;28869:12;:10;:12::i;:::-;28846:16;:36::i;:::-;28822:60;28800:156;;;;;;;;;;;;:::i;:::-;;;;;;;;;28967:45;28985:4;28991:2;28995;28999:6;29007:4;28967:17;:45::i;:::-;28614:406;;;;;:::o;5689:201::-;4669:13;:11;:13::i;:::-;5798:1:::1;5778:22;;:8;:22;;::::0;5770:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;5854:28;5873:8;5854:18;:28::i;:::-;5689:201:::0;:::o;43125:326::-;43276:12;:10;:12::i;:::-;43265:23;;:7;:23;;;:66;;;;43292:39;43309:7;43318:12;:10;:12::i;:::-;43292:16;:39::i;:::-;43265:66;43243:162;;;;;;;;;;;;:::i;:::-;;;;;;;;;43418:25;43424:7;43433:2;43437:5;43418;:25::i;:::-;43125:326;;;:::o;17458:157::-;17543:4;17582:25;17567:40;;;:11;:40;;;;17560:47;;17458:157;;;:::o;4948:132::-;5023:12;:10;:12::i;:::-;5012:23;;:7;:5;:7::i;:::-;:23;;;5004:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4948:132::o;33321:88::-;33395:6;33388:4;:13;;;;;;:::i;:::-;;33321:88;:::o;34927:813::-;35119:1;35105:16;;:2;:16;;;35097:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;35192:7;:14;35178:3;:10;:28;35170:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;35264:16;35283:12;:10;:12::i;:::-;35264:31;;35308:66;35329:8;35347:1;35351:2;35355:3;35360:7;35369:4;35308:20;:66::i;:::-;35392:9;35387:103;35411:3;:10;35407:1;:14;35387:103;;;35468:7;35476:1;35468:10;;;;;;;;:::i;:::-;;;;;;;;35443:9;:17;35453:3;35457:1;35453:6;;;;;;;;:::i;:::-;;;;;;;;35443:17;;;;;;;;;;;:21;35461:2;35443:21;;;;;;;;;;;;;;;;:35;;;;;;;:::i;:::-;;;;;;;;35423:3;;;;;:::i;:::-;;;;35387:103;;;;35543:2;35507:53;;35539:1;35507:53;;35521:8;35507:53;;;35547:3;35552:7;35507:53;;;;;;;:::i;:::-;;;;;;;;35573:65;35593:8;35611:1;35615:2;35619:3;35624:7;35633:4;35573:19;:65::i;:::-;35651:81;35687:8;35705:1;35709:2;35713:3;35718:7;35727:4;35651:35;:81::i;:::-;35086:654;34927:813;;;;:::o;679:98::-;732:7;759:10;752:17;;679:98;:::o;31331:1146::-;31558:7;:14;31544:3;:10;:28;31536:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;31650:1;31636:16;;:2;:16;;;31628:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;31707:16;31726:12;:10;:12::i;:::-;31707:31;;31751:60;31772:8;31782:4;31788:2;31792:3;31797:7;31806:4;31751:20;:60::i;:::-;31829:9;31824:421;31848:3;:10;31844:1;:14;31824:421;;;31880:10;31893:3;31897:1;31893:6;;;;;;;;:::i;:::-;;;;;;;;31880:19;;31914:14;31931:7;31939:1;31931:10;;;;;;;;:::i;:::-;;;;;;;;31914:27;;31958:19;31980:9;:13;31990:2;31980:13;;;;;;;;;;;:19;31994:4;31980:19;;;;;;;;;;;;;;;;31958:41;;32037:6;32022:11;:21;;32014:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;32170:6;32156:11;:20;32134:9;:13;32144:2;32134:13;;;;;;;;;;;:19;32148:4;32134:19;;;;;;;;;;;;;;;:42;;;;32227:6;32206:9;:13;32216:2;32206:13;;;;;;;;;;;:17;32220:2;32206:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;31865:380;;;31860:3;;;;:::i;:::-;;;31824:421;;;;32292:2;32262:47;;32286:4;32262:47;;32276:8;32262:47;;;32296:3;32301:7;32262:47;;;;;;;:::i;:::-;;;;;;;;32322:59;32342:8;32352:4;32358:2;32362:3;32367:7;32376:4;32322:19;:59::i;:::-;32394:75;32430:8;32440:4;32446:2;32450:3;32455:7;32464:4;32394:35;:75::i;:::-;31525:952;31331:1146;;;;;:::o;3421:120::-;2430:16;:14;:16::i;:::-;3490:5:::1;3480:7;;:15;;;;;;;;;;;;;;;;;;3511:22;3520:12;:10;:12::i;:::-;3511:22;;;;;;:::i;:::-;;;;;;;;3421:120::o:0;37096:969::-;37264:1;37248:18;;:4;:18;;;37240:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;37339:7;:14;37325:3;:10;:28;37317:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;37411:16;37430:12;:10;:12::i;:::-;37411:31;;37455:66;37476:8;37486:4;37500:1;37504:3;37509:7;37455:66;;;;;;;;;;;;:20;:66::i;:::-;37539:9;37534:373;37558:3;:10;37554:1;:14;37534:373;;;37590:10;37603:3;37607:1;37603:6;;;;;;;;:::i;:::-;;;;;;;;37590:19;;37624:14;37641:7;37649:1;37641:10;;;;;;;;:::i;:::-;;;;;;;;37624:27;;37668:19;37690:9;:13;37700:2;37690:13;;;;;;;;;;;:19;37704:4;37690:19;;;;;;;;;;;;;;;;37668:41;;37747:6;37732:11;:21;;37724:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;37874:6;37860:11;:20;37838:9;:13;37848:2;37838:13;;;;;;;;;;;:19;37852:4;37838:19;;;;;;;;;;;;;;;:42;;;;37575:332;;;37570:3;;;;;:::i;:::-;;;;37534:373;;;;37962:1;37924:55;;37948:4;37924:55;;37938:8;37924:55;;;37966:3;37971:7;37924:55;;;;;;;:::i;:::-;;;;;;;;37992:65;38012:8;38022:4;38036:1;38040:3;38045:7;37992:65;;;;;;;;;;;;:19;:65::i;:::-;37229:836;37096:969;;;:::o;6050:191::-;6124:16;6143:6;;;;;;;;;;;6124:25;;6169:8;6160:6;;:17;;;;;;;;;;;;;;;;;;6224:8;6193:40;;6214:8;6193:40;;;;;;;;;;;;6113:128;6050:191;:::o;33795:729::-;33962:1;33948:16;;:2;:16;;;33940:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;34015:16;34034:12;:10;:12::i;:::-;34015:31;;34057:20;34080:21;34098:2;34080:17;:21::i;:::-;34057:44;;34112:24;34139:25;34157:6;34139:17;:25::i;:::-;34112:52;;34177:66;34198:8;34216:1;34220:2;34224:3;34229:7;34238:4;34177:20;:66::i;:::-;34277:6;34256:9;:13;34266:2;34256:13;;;;;;;;;;;:17;34270:2;34256:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;34336:2;34299:52;;34332:1;34299:52;;34314:8;34299:52;;;34340:2;34344:6;34299:52;;;;;;;:::i;:::-;;;;;;;;34364:65;34384:8;34402:1;34406:2;34410:3;34415:7;34424:4;34364:19;:65::i;:::-;34442:74;34473:8;34491:1;34495:2;34499;34503:6;34511:4;34442:30;:74::i;:::-;33929:595;;;33795:729;;;;:::o;3162:118::-;2171:19;:17;:19::i;:::-;3232:4:::1;3222:7;;:14;;;;;;;;;;;;;;;;;;3252:20;3259:12;:10;:12::i;:::-;3252:20;;;;;;:::i;:::-;;;;;;;;3162:118::o:0;38208:331::-;38363:8;38354:17;;:5;:17;;;38346:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;38466:8;38428:18;:25;38447:5;38428:25;;;;;;;;;;;;;;;:35;38454:8;38428:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;38512:8;38490:41;;38505:5;38490:41;;;38522:8;38490:41;;;;;;:::i;:::-;;;;;;;;38208:331;;;:::o;29999:974::-;30201:1;30187:16;;:2;:16;;;30179:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;30258:16;30277:12;:10;:12::i;:::-;30258:31;;30300:20;30323:21;30341:2;30323:17;:21::i;:::-;30300:44;;30355:24;30382:25;30400:6;30382:17;:25::i;:::-;30355:52;;30420:60;30441:8;30451:4;30457:2;30461:3;30466:7;30475:4;30420:20;:60::i;:::-;30493:19;30515:9;:13;30525:2;30515:13;;;;;;;;;;;:19;30529:4;30515:19;;;;;;;;;;;;;;;;30493:41;;30568:6;30553:11;:21;;30545:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;30693:6;30679:11;:20;30657:9;:13;30667:2;30657:13;;;;;;;;;;;:19;30671:4;30657:19;;;;;;;;;;;;;;;:42;;;;30742:6;30721:9;:13;30731:2;30721:13;;;;;;;;;;;:17;30735:2;30721:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;30797:2;30766:46;;30791:4;30766:46;;30781:8;30766:46;;;30801:2;30805:6;30766:46;;;;;;;:::i;:::-;;;;;;;;30825:59;30845:8;30855:4;30861:2;30865:3;30870:7;30879:4;30825:19;:59::i;:::-;30897:68;30928:8;30938:4;30944:2;30948;30952:6;30960:4;30897:30;:68::i;:::-;30168:805;;;;29999:974;;;;;:::o;36038:808::-;36181:1;36165:18;;:4;:18;;;36157:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;36236:16;36255:12;:10;:12::i;:::-;36236:31;;36278:20;36301:21;36319:2;36301:17;:21::i;:::-;36278:44;;36333:24;36360:25;36378:6;36360:17;:25::i;:::-;36333:52;;36398:66;36419:8;36429:4;36443:1;36447:3;36452:7;36398:66;;;;;;;;;;;;:20;:66::i;:::-;36477:19;36499:9;:13;36509:2;36499:13;;;;;;;;;;;:19;36513:4;36499:19;;;;;;;;;;;;;;;;36477:41;;36552:6;36537:11;:21;;36529:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;36671:6;36657:11;:20;36635:9;:13;36645:2;36635:13;;;;;;;;;;;:19;36649:4;36635:19;;;;;;;;;;;;;;;:42;;;;36745:1;36706:54;;36731:4;36706:54;;36721:8;36706:54;;;36749:2;36753:6;36706:54;;;;;;;:::i;:::-;;;;;;;;36773:65;36793:8;36803:4;36817:1;36821:3;36826:7;36773:65;;;;;;;;;;;;:19;:65::i;:::-;36146:700;;;;36038:808;;;:::o;44709:300::-;44922:1;44906:18;;:4;:18;;;:38;;;;44942:1;44928:16;;:2;:16;;;44906:38;44884:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;44709:300;;;;;;:::o;40673:220::-;;;;;;;:::o;41653:813::-;41893:15;:2;:13;;;:15::i;:::-;41889:570;;;41946:2;41929:43;;;41973:8;41983:4;41989:3;41994:7;42003:4;41929:79;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;41925:523;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;42321:6;42314:14;;;;;;;;;;;:::i;:::-;;;;;;;;41925:523;;;42370:62;;;;;;;;;;:::i;:::-;;;;;;;;41925:523;42102:48;;;42090:60;;;:8;:60;;;;42086:159;;42175:50;;;;;;;;;;:::i;:::-;;;;;;;;42086:159;42009:251;41889:570;41653:813;;;;;;:::o;2910:108::-;2977:8;:6;:8::i;:::-;2969:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;2910:108::o;42474:198::-;42540:16;42569:22;42608:1;42594:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42569:41;;42632:7;42621:5;42627:1;42621:8;;;;;;;;:::i;:::-;;;;;;;:18;;;;;42659:5;42652:12;;;42474:198;;;:::o;40901:744::-;41116:15;:2;:13;;;:15::i;:::-;41112:526;;;41169:2;41152:38;;;41191:8;41201:4;41207:2;41211:6;41219:4;41152:72;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;41148:479;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;41500:6;41493:14;;;;;;;;;;;:::i;:::-;;;;;;;;41148:479;;;41549:62;;;;;;;;;;:::i;:::-;;;;;;;;41148:479;41286:43;;;41274:55;;;:8;:55;;;;41270:154;;41354:50;;;;;;;;;;:::i;:::-;;;;;;;;41270:154;41225:214;41112:526;40901:744;;;;;;:::o;2725:108::-;2796:8;:6;:8::i;:::-;2795:9;2787:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;2725:108::o;7481:326::-;7541:4;7798:1;7776:7;:19;;;:23;7769:30;;7481:326;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:77::-;878:7;907:5;896:16;;841:77;;;:::o;924:122::-;997:24;1015:5;997:24;:::i;:::-;990:5;987:35;977:63;;1036:1;1033;1026:12;977:63;924:122;:::o;1052:139::-;1098:5;1136:6;1123:20;1114:29;;1152:33;1179:5;1152:33;:::i;:::-;1052:139;;;;:::o;1197:474::-;1265:6;1273;1322:2;1310:9;1301:7;1297:23;1293:32;1290:119;;;1328:79;;:::i;:::-;1290:119;1448:1;1473:53;1518:7;1509:6;1498:9;1494:22;1473:53;:::i;:::-;1463:63;;1419:117;1575:2;1601:53;1646:7;1637:6;1626:9;1622:22;1601:53;:::i;:::-;1591:63;;1546:118;1197:474;;;;;:::o;1677:118::-;1764:24;1782:5;1764:24;:::i;:::-;1759:3;1752:37;1677:118;;:::o;1801:222::-;1894:4;1932:2;1921:9;1917:18;1909:26;;1945:71;2013:1;2002:9;1998:17;1989:6;1945:71;:::i;:::-;1801:222;;;;:::o;2029:149::-;2065:7;2105:66;2098:5;2094:78;2083:89;;2029:149;;;:::o;2184:120::-;2256:23;2273:5;2256:23;:::i;:::-;2249:5;2246:34;2236:62;;2294:1;2291;2284:12;2236:62;2184:120;:::o;2310:137::-;2355:5;2393:6;2380:20;2371:29;;2409:32;2435:5;2409:32;:::i;:::-;2310:137;;;;:::o;2453:327::-;2511:6;2560:2;2548:9;2539:7;2535:23;2531:32;2528:119;;;2566:79;;:::i;:::-;2528:119;2686:1;2711:52;2755:7;2746:6;2735:9;2731:22;2711:52;:::i;:::-;2701:62;;2657:116;2453:327;;;;:::o;2786:90::-;2820:7;2863:5;2856:13;2849:21;2838:32;;2786:90;;;:::o;2882:109::-;2963:21;2978:5;2963:21;:::i;:::-;2958:3;2951:34;2882:109;;:::o;2997:210::-;3084:4;3122:2;3111:9;3107:18;3099:26;;3135:65;3197:1;3186:9;3182:17;3173:6;3135:65;:::i;:::-;2997:210;;;;:::o;3213:117::-;3322:1;3319;3312:12;3336:117;3445:1;3442;3435:12;3459:102;3500:6;3551:2;3547:7;3542:2;3535:5;3531:14;3527:28;3517:38;;3459:102;;;:::o;3567:180::-;3615:77;3612:1;3605:88;3712:4;3709:1;3702:15;3736:4;3733:1;3726:15;3753:281;3836:27;3858:4;3836:27;:::i;:::-;3828:6;3824:40;3966:6;3954:10;3951:22;3930:18;3918:10;3915:34;3912:62;3909:88;;;3977:18;;:::i;:::-;3909:88;4017:10;4013:2;4006:22;3796:238;3753:281;;:::o;4040:129::-;4074:6;4101:20;;:::i;:::-;4091:30;;4130:33;4158:4;4150:6;4130:33;:::i;:::-;4040:129;;;:::o;4175:308::-;4237:4;4327:18;4319:6;4316:30;4313:56;;;4349:18;;:::i;:::-;4313:56;4387:29;4409:6;4387:29;:::i;:::-;4379:37;;4471:4;4465;4461:15;4453:23;;4175:308;;;:::o;4489:146::-;4586:6;4581:3;4576;4563:30;4627:1;4618:6;4613:3;4609:16;4602:27;4489:146;;;:::o;4641:425::-;4719:5;4744:66;4760:49;4802:6;4760:49;:::i;:::-;4744:66;:::i;:::-;4735:75;;4833:6;4826:5;4819:21;4871:4;4864:5;4860:16;4909:3;4900:6;4895:3;4891:16;4888:25;4885:112;;;4916:79;;:::i;:::-;4885:112;5006:54;5053:6;5048:3;5043;5006:54;:::i;:::-;4725:341;4641:425;;;;;:::o;5086:340::-;5142:5;5191:3;5184:4;5176:6;5172:17;5168:27;5158:122;;5199:79;;:::i;:::-;5158:122;5316:6;5303:20;5341:79;5416:3;5408:6;5401:4;5393:6;5389:17;5341:79;:::i;:::-;5332:88;;5148:278;5086:340;;;;:::o;5432:509::-;5501:6;5550:2;5538:9;5529:7;5525:23;5521:32;5518:119;;;5556:79;;:::i;:::-;5518:119;5704:1;5693:9;5689:17;5676:31;5734:18;5726:6;5723:30;5720:117;;;5756:79;;:::i;:::-;5720:117;5861:63;5916:7;5907:6;5896:9;5892:22;5861:63;:::i;:::-;5851:73;;5647:287;5432:509;;;;:::o;5947:329::-;6006:6;6055:2;6043:9;6034:7;6030:23;6026:32;6023:119;;;6061:79;;:::i;:::-;6023:119;6181:1;6206:53;6251:7;6242:6;6231:9;6227:22;6206:53;:::i;:::-;6196:63;;6152:117;5947:329;;;;:::o;6282:99::-;6334:6;6368:5;6362:12;6352:22;;6282:99;;;:::o;6387:169::-;6471:11;6505:6;6500:3;6493:19;6545:4;6540:3;6536:14;6521:29;;6387:169;;;;:::o;6562:246::-;6643:1;6653:113;6667:6;6664:1;6661:13;6653:113;;;6752:1;6747:3;6743:11;6737:18;6733:1;6728:3;6724:11;6717:39;6689:2;6686:1;6682:10;6677:15;;6653:113;;;6800:1;6791:6;6786:3;6782:16;6775:27;6624:184;6562:246;;;:::o;6814:377::-;6902:3;6930:39;6963:5;6930:39;:::i;:::-;6985:71;7049:6;7044:3;6985:71;:::i;:::-;6978:78;;7065:65;7123:6;7118:3;7111:4;7104:5;7100:16;7065:65;:::i;:::-;7155:29;7177:6;7155:29;:::i;:::-;7150:3;7146:39;7139:46;;6906:285;6814:377;;;;:::o;7197:313::-;7310:4;7348:2;7337:9;7333:18;7325:26;;7397:9;7391:4;7387:20;7383:1;7372:9;7368:17;7361:47;7425:78;7498:4;7489:6;7425:78;:::i;:::-;7417:86;;7197:313;;;;:::o;7516:311::-;7593:4;7683:18;7675:6;7672:30;7669:56;;;7705:18;;:::i;:::-;7669:56;7755:4;7747:6;7743:17;7735:25;;7815:4;7809;7805:15;7797:23;;7516:311;;;:::o;7833:117::-;7942:1;7939;7932:12;7973:710;8069:5;8094:81;8110:64;8167:6;8110:64;:::i;:::-;8094:81;:::i;:::-;8085:90;;8195:5;8224:6;8217:5;8210:21;8258:4;8251:5;8247:16;8240:23;;8311:4;8303:6;8299:17;8291:6;8287:30;8340:3;8332:6;8329:15;8326:122;;;8359:79;;:::i;:::-;8326:122;8474:6;8457:220;8491:6;8486:3;8483:15;8457:220;;;8566:3;8595:37;8628:3;8616:10;8595:37;:::i;:::-;8590:3;8583:50;8662:4;8657:3;8653:14;8646:21;;8533:144;8517:4;8512:3;8508:14;8501:21;;8457:220;;;8461:21;8075:608;;7973:710;;;;;:::o;8706:370::-;8777:5;8826:3;8819:4;8811:6;8807:17;8803:27;8793:122;;8834:79;;:::i;:::-;8793:122;8951:6;8938:20;8976:94;9066:3;9058:6;9051:4;9043:6;9039:17;8976:94;:::i;:::-;8967:103;;8783:293;8706:370;;;;:::o;9082:307::-;9143:4;9233:18;9225:6;9222:30;9219:56;;;9255:18;;:::i;:::-;9219:56;9293:29;9315:6;9293:29;:::i;:::-;9285:37;;9377:4;9371;9367:15;9359:23;;9082:307;;;:::o;9395:423::-;9472:5;9497:65;9513:48;9554:6;9513:48;:::i;:::-;9497:65;:::i;:::-;9488:74;;9585:6;9578:5;9571:21;9623:4;9616:5;9612:16;9661:3;9652:6;9647:3;9643:16;9640:25;9637:112;;;9668:79;;:::i;:::-;9637:112;9758:54;9805:6;9800:3;9795;9758:54;:::i;:::-;9478:340;9395:423;;;;;:::o;9837:338::-;9892:5;9941:3;9934:4;9926:6;9922:17;9918:27;9908:122;;9949:79;;:::i;:::-;9908:122;10066:6;10053:20;10091:78;10165:3;10157:6;10150:4;10142:6;10138:17;10091:78;:::i;:::-;10082:87;;9898:277;9837:338;;;;:::o;10181:1363::-;10326:6;10334;10342;10350;10399:3;10387:9;10378:7;10374:23;10370:33;10367:120;;;10406:79;;:::i;:::-;10367:120;10526:1;10551:53;10596:7;10587:6;10576:9;10572:22;10551:53;:::i;:::-;10541:63;;10497:117;10681:2;10670:9;10666:18;10653:32;10712:18;10704:6;10701:30;10698:117;;;10734:79;;:::i;:::-;10698:117;10839:78;10909:7;10900:6;10889:9;10885:22;10839:78;:::i;:::-;10829:88;;10624:303;10994:2;10983:9;10979:18;10966:32;11025:18;11017:6;11014:30;11011:117;;;11047:79;;:::i;:::-;11011:117;11152:78;11222:7;11213:6;11202:9;11198:22;11152:78;:::i;:::-;11142:88;;10937:303;11307:2;11296:9;11292:18;11279:32;11338:18;11330:6;11327:30;11324:117;;;11360:79;;:::i;:::-;11324:117;11465:62;11519:7;11510:6;11499:9;11495:22;11465:62;:::i;:::-;11455:72;;11250:287;10181:1363;;;;;;;:::o;11550:1509::-;11704:6;11712;11720;11728;11736;11785:3;11773:9;11764:7;11760:23;11756:33;11753:120;;;11792:79;;:::i;:::-;11753:120;11912:1;11937:53;11982:7;11973:6;11962:9;11958:22;11937:53;:::i;:::-;11927:63;;11883:117;12039:2;12065:53;12110:7;12101:6;12090:9;12086:22;12065:53;:::i;:::-;12055:63;;12010:118;12195:2;12184:9;12180:18;12167:32;12226:18;12218:6;12215:30;12212:117;;;12248:79;;:::i;:::-;12212:117;12353:78;12423:7;12414:6;12403:9;12399:22;12353:78;:::i;:::-;12343:88;;12138:303;12508:2;12497:9;12493:18;12480:32;12539:18;12531:6;12528:30;12525:117;;;12561:79;;:::i;:::-;12525:117;12666:78;12736:7;12727:6;12716:9;12712:22;12666:78;:::i;:::-;12656:88;;12451:303;12821:3;12810:9;12806:19;12793:33;12853:18;12845:6;12842:30;12839:117;;;12875:79;;:::i;:::-;12839:117;12980:62;13034:7;13025:6;13014:9;13010:22;12980:62;:::i;:::-;12970:72;;12764:288;11550:1509;;;;;;;;:::o;13065:311::-;13142:4;13232:18;13224:6;13221:30;13218:56;;;13254:18;;:::i;:::-;13218:56;13304:4;13296:6;13292:17;13284:25;;13364:4;13358;13354:15;13346:23;;13065:311;;;:::o;13399:710::-;13495:5;13520:81;13536:64;13593:6;13536:64;:::i;:::-;13520:81;:::i;:::-;13511:90;;13621:5;13650:6;13643:5;13636:21;13684:4;13677:5;13673:16;13666:23;;13737:4;13729:6;13725:17;13717:6;13713:30;13766:3;13758:6;13755:15;13752:122;;;13785:79;;:::i;:::-;13752:122;13900:6;13883:220;13917:6;13912:3;13909:15;13883:220;;;13992:3;14021:37;14054:3;14042:10;14021:37;:::i;:::-;14016:3;14009:50;14088:4;14083:3;14079:14;14072:21;;13959:144;13943:4;13938:3;13934:14;13927:21;;13883:220;;;13887:21;13501:608;;13399:710;;;;;:::o;14132:370::-;14203:5;14252:3;14245:4;14237:6;14233:17;14229:27;14219:122;;14260:79;;:::i;:::-;14219:122;14377:6;14364:20;14402:94;14492:3;14484:6;14477:4;14469:6;14465:17;14402:94;:::i;:::-;14393:103;;14209:293;14132:370;;;;:::o;14508:894::-;14626:6;14634;14683:2;14671:9;14662:7;14658:23;14654:32;14651:119;;;14689:79;;:::i;:::-;14651:119;14837:1;14826:9;14822:17;14809:31;14867:18;14859:6;14856:30;14853:117;;;14889:79;;:::i;:::-;14853:117;14994:78;15064:7;15055:6;15044:9;15040:22;14994:78;:::i;:::-;14984:88;;14780:302;15149:2;15138:9;15134:18;15121:32;15180:18;15172:6;15169:30;15166:117;;;15202:79;;:::i;:::-;15166:117;15307:78;15377:7;15368:6;15357:9;15353:22;15307:78;:::i;:::-;15297:88;;15092:303;14508:894;;;;;:::o;15408:114::-;15475:6;15509:5;15503:12;15493:22;;15408:114;;;:::o;15528:184::-;15627:11;15661:6;15656:3;15649:19;15701:4;15696:3;15692:14;15677:29;;15528:184;;;;:::o;15718:132::-;15785:4;15808:3;15800:11;;15838:4;15833:3;15829:14;15821:22;;15718:132;;;:::o;15856:108::-;15933:24;15951:5;15933:24;:::i;:::-;15928:3;15921:37;15856:108;;:::o;15970:179::-;16039:10;16060:46;16102:3;16094:6;16060:46;:::i;:::-;16138:4;16133:3;16129:14;16115:28;;15970:179;;;;:::o;16155:113::-;16225:4;16257;16252:3;16248:14;16240:22;;16155:113;;;:::o;16304:732::-;16423:3;16452:54;16500:5;16452:54;:::i;:::-;16522:86;16601:6;16596:3;16522:86;:::i;:::-;16515:93;;16632:56;16682:5;16632:56;:::i;:::-;16711:7;16742:1;16727:284;16752:6;16749:1;16746:13;16727:284;;;16828:6;16822:13;16855:63;16914:3;16899:13;16855:63;:::i;:::-;16848:70;;16941:60;16994:6;16941:60;:::i;:::-;16931:70;;16787:224;16774:1;16771;16767:9;16762:14;;16727:284;;;16731:14;17027:3;17020:10;;16428:608;;;16304:732;;;;:::o;17042:373::-;17185:4;17223:2;17212:9;17208:18;17200:26;;17272:9;17266:4;17262:20;17258:1;17247:9;17243:17;17236:47;17300:108;17403:4;17394:6;17300:108;:::i;:::-;17292:116;;17042:373;;;;:::o;17421:1039::-;17548:6;17556;17564;17613:2;17601:9;17592:7;17588:23;17584:32;17581:119;;;17619:79;;:::i;:::-;17581:119;17739:1;17764:53;17809:7;17800:6;17789:9;17785:22;17764:53;:::i;:::-;17754:63;;17710:117;17894:2;17883:9;17879:18;17866:32;17925:18;17917:6;17914:30;17911:117;;;17947:79;;:::i;:::-;17911:117;18052:78;18122:7;18113:6;18102:9;18098:22;18052:78;:::i;:::-;18042:88;;17837:303;18207:2;18196:9;18192:18;18179:32;18238:18;18230:6;18227:30;18224:117;;;18260:79;;:::i;:::-;18224:117;18365:78;18435:7;18426:6;18415:9;18411:22;18365:78;:::i;:::-;18355:88;;18150:303;17421:1039;;;;;:::o;18466:943::-;18561:6;18569;18577;18585;18634:3;18622:9;18613:7;18609:23;18605:33;18602:120;;;18641:79;;:::i;:::-;18602:120;18761:1;18786:53;18831:7;18822:6;18811:9;18807:22;18786:53;:::i;:::-;18776:63;;18732:117;18888:2;18914:53;18959:7;18950:6;18939:9;18935:22;18914:53;:::i;:::-;18904:63;;18859:118;19016:2;19042:53;19087:7;19078:6;19067:9;19063:22;19042:53;:::i;:::-;19032:63;;18987:118;19172:2;19161:9;19157:18;19144:32;19203:18;19195:6;19192:30;19189:117;;;19225:79;;:::i;:::-;19189:117;19330:62;19384:7;19375:6;19364:9;19360:22;19330:62;:::i;:::-;19320:72;;19115:287;18466:943;;;;;;;:::o;19415:539::-;19499:6;19548:2;19536:9;19527:7;19523:23;19519:32;19516:119;;;19554:79;;:::i;:::-;19516:119;19702:1;19691:9;19687:17;19674:31;19732:18;19724:6;19721:30;19718:117;;;19754:79;;:::i;:::-;19718:117;19859:78;19929:7;19920:6;19909:9;19905:22;19859:78;:::i;:::-;19849:88;;19645:302;19415:539;;;;:::o;19960:118::-;20047:24;20065:5;20047:24;:::i;:::-;20042:3;20035:37;19960:118;;:::o;20084:222::-;20177:4;20215:2;20204:9;20200:18;20192:26;;20228:71;20296:1;20285:9;20281:17;20272:6;20228:71;:::i;:::-;20084:222;;;;:::o;20312:116::-;20382:21;20397:5;20382:21;:::i;:::-;20375:5;20372:32;20362:60;;20418:1;20415;20408:12;20362:60;20312:116;:::o;20434:133::-;20477:5;20515:6;20502:20;20493:29;;20531:30;20555:5;20531:30;:::i;:::-;20434:133;;;;:::o;20573:468::-;20638:6;20646;20695:2;20683:9;20674:7;20670:23;20666:32;20663:119;;;20701:79;;:::i;:::-;20663:119;20821:1;20846:53;20891:7;20882:6;20871:9;20867:22;20846:53;:::i;:::-;20836:63;;20792:117;20948:2;20974:50;21016:7;21007:6;20996:9;20992:22;20974:50;:::i;:::-;20964:60;;20919:115;20573:468;;;;;:::o;21047:474::-;21115:6;21123;21172:2;21160:9;21151:7;21147:23;21143:32;21140:119;;;21178:79;;:::i;:::-;21140:119;21298:1;21323:53;21368:7;21359:6;21348:9;21344:22;21323:53;:::i;:::-;21313:63;;21269:117;21425:2;21451:53;21496:7;21487:6;21476:9;21472:22;21451:53;:::i;:::-;21441:63;;21396:118;21047:474;;;;;:::o;21527:1089::-;21631:6;21639;21647;21655;21663;21712:3;21700:9;21691:7;21687:23;21683:33;21680:120;;;21719:79;;:::i;:::-;21680:120;21839:1;21864:53;21909:7;21900:6;21889:9;21885:22;21864:53;:::i;:::-;21854:63;;21810:117;21966:2;21992:53;22037:7;22028:6;22017:9;22013:22;21992:53;:::i;:::-;21982:63;;21937:118;22094:2;22120:53;22165:7;22156:6;22145:9;22141:22;22120:53;:::i;:::-;22110:63;;22065:118;22222:2;22248:53;22293:7;22284:6;22273:9;22269:22;22248:53;:::i;:::-;22238:63;;22193:118;22378:3;22367:9;22363:19;22350:33;22410:18;22402:6;22399:30;22396:117;;;22432:79;;:::i;:::-;22396:117;22537:62;22591:7;22582:6;22571:9;22567:22;22537:62;:::i;:::-;22527:72;;22321:288;21527:1089;;;;;;;;:::o;22622:329::-;22681:6;22730:2;22718:9;22709:7;22705:23;22701:32;22698:119;;;22736:79;;:::i;:::-;22698:119;22856:1;22881:53;22926:7;22917:6;22906:9;22902:22;22881:53;:::i;:::-;22871:63;;22827:117;22622:329;;;;:::o;22957:619::-;23034:6;23042;23050;23099:2;23087:9;23078:7;23074:23;23070:32;23067:119;;;23105:79;;:::i;:::-;23067:119;23225:1;23250:53;23295:7;23286:6;23275:9;23271:22;23250:53;:::i;:::-;23240:63;;23196:117;23352:2;23378:53;23423:7;23414:6;23403:9;23399:22;23378:53;:::i;:::-;23368:63;;23323:118;23480:2;23506:53;23551:7;23542:6;23531:9;23527:22;23506:53;:::i;:::-;23496:63;;23451:118;22957:619;;;;;:::o;23582:229::-;23722:34;23718:1;23710:6;23706:14;23699:58;23791:12;23786:2;23778:6;23774:15;23767:37;23582:229;:::o;23817:366::-;23959:3;23980:67;24044:2;24039:3;23980:67;:::i;:::-;23973:74;;24056:93;24145:3;24056:93;:::i;:::-;24174:2;24169:3;24165:12;24158:19;;23817:366;;;:::o;24189:419::-;24355:4;24393:2;24382:9;24378:18;24370:26;;24442:9;24436:4;24432:20;24428:1;24417:9;24413:17;24406:47;24470:131;24596:4;24470:131;:::i;:::-;24462:139;;24189:419;;;:::o;24614:180::-;24662:77;24659:1;24652:88;24759:4;24756:1;24749:15;24783:4;24780:1;24773:15;24800:320;24844:6;24881:1;24875:4;24871:12;24861:22;;24928:1;24922:4;24918:12;24949:18;24939:81;;25005:4;24997:6;24993:17;24983:27;;24939:81;25067:2;25059:6;25056:14;25036:18;25033:38;25030:84;;25086:18;;:::i;:::-;25030:84;24851:269;24800:320;;;:::o;25126:180::-;25174:77;25171:1;25164:88;25271:4;25268:1;25261:15;25295:4;25292:1;25285:15;25312:180;25360:77;25357:1;25350:88;25457:4;25454:1;25447:15;25481:4;25478:1;25471:15;25498:410;25538:7;25561:20;25579:1;25561:20;:::i;:::-;25556:25;;25595:20;25613:1;25595:20;:::i;:::-;25590:25;;25650:1;25647;25643:9;25672:30;25690:11;25672:30;:::i;:::-;25661:41;;25851:1;25842:7;25838:15;25835:1;25832:22;25812:1;25805:9;25785:83;25762:139;;25881:18;;:::i;:::-;25762:139;25546:362;25498:410;;;;:::o;25914:191::-;25954:3;25973:20;25991:1;25973:20;:::i;:::-;25968:25;;26007:20;26025:1;26007:20;:::i;:::-;26002:25;;26050:1;26047;26043:9;26036:16;;26071:3;26068:1;26065:10;26062:36;;;26078:18;;:::i;:::-;26062:36;25914:191;;;;:::o;26111:233::-;26150:3;26173:24;26191:5;26173:24;:::i;:::-;26164:33;;26219:66;26212:5;26209:77;26206:103;;26289:18;;:::i;:::-;26206:103;26336:1;26329:5;26325:13;26318:20;;26111:233;;;:::o;26350:169::-;26490:21;26486:1;26478:6;26474:14;26467:45;26350:169;:::o;26525:366::-;26667:3;26688:67;26752:2;26747:3;26688:67;:::i;:::-;26681:74;;26764:93;26853:3;26764:93;:::i;:::-;26882:2;26877:3;26873:12;26866:19;;26525:366;;;:::o;26897:419::-;27063:4;27101:2;27090:9;27086:18;27078:26;;27150:9;27144:4;27140:20;27136:1;27125:9;27121:17;27114:47;27178:131;27304:4;27178:131;:::i;:::-;27170:139;;26897:419;;;:::o;27322:233::-;27462:34;27458:1;27450:6;27446:14;27439:58;27531:16;27526:2;27518:6;27514:15;27507:41;27322:233;:::o;27561:366::-;27703:3;27724:67;27788:2;27783:3;27724:67;:::i;:::-;27717:74;;27800:93;27889:3;27800:93;:::i;:::-;27918:2;27913:3;27909:12;27902:19;;27561:366;;;:::o;27933:419::-;28099:4;28137:2;28126:9;28122:18;28114:26;;28186:9;28180:4;28176:20;28172:1;28161:9;28157:17;28150:47;28214:131;28340:4;28214:131;:::i;:::-;28206:139;;27933:419;;;:::o;28358:147::-;28459:11;28496:3;28481:18;;28358:147;;;;:::o;28511:114::-;;:::o;28631:398::-;28790:3;28811:83;28892:1;28887:3;28811:83;:::i;:::-;28804:90;;28903:93;28992:3;28903:93;:::i;:::-;29021:1;29016:3;29012:11;29005:18;;28631:398;;;:::o;29035:379::-;29219:3;29241:147;29384:3;29241:147;:::i;:::-;29234:154;;29405:3;29398:10;;29035:379;;;:::o;29420:228::-;29560:34;29556:1;29548:6;29544:14;29537:58;29629:11;29624:2;29616:6;29612:15;29605:36;29420:228;:::o;29654:366::-;29796:3;29817:67;29881:2;29876:3;29817:67;:::i;:::-;29810:74;;29893:93;29982:3;29893:93;:::i;:::-;30011:2;30006:3;30002:12;29995:19;;29654:366;;;:::o;30026:419::-;30192:4;30230:2;30219:9;30215:18;30207:26;;30279:9;30273:4;30269:20;30265:1;30254:9;30250:17;30243:47;30307:131;30433:4;30307:131;:::i;:::-;30299:139;;30026:419;;;:::o;30451:180::-;30499:77;30496:1;30489:88;30596:4;30593:1;30586:15;30620:4;30617:1;30610:15;30637:176;30669:1;30686:20;30704:1;30686:20;:::i;:::-;30681:25;;30720:20;30738:1;30720:20;:::i;:::-;30715:25;;30759:1;30749:35;;30764:18;;:::i;:::-;30749:35;30805:1;30802;30798:9;30793:14;;30637:176;;;;:::o;30819:225::-;30959:34;30955:1;30947:6;30943:14;30936:58;31028:8;31023:2;31015:6;31011:15;31004:33;30819:225;:::o;31050:366::-;31192:3;31213:67;31277:2;31272:3;31213:67;:::i;:::-;31206:74;;31289:93;31378:3;31289:93;:::i;:::-;31407:2;31402:3;31398:12;31391:19;;31050:366;;;:::o;31422:419::-;31588:4;31626:2;31615:9;31611:18;31603:26;;31675:9;31669:4;31665:20;31661:1;31650:9;31646:17;31639:47;31703:131;31829:4;31703:131;:::i;:::-;31695:139;;31422:419;;;:::o;31847:182::-;31987:34;31983:1;31975:6;31971:14;31964:58;31847:182;:::o;32035:366::-;32177:3;32198:67;32262:2;32257:3;32198:67;:::i;:::-;32191:74;;32274:93;32363:3;32274:93;:::i;:::-;32392:2;32387:3;32383:12;32376:19;;32035:366;;;:::o;32407:419::-;32573:4;32611:2;32600:9;32596:18;32588:26;;32660:9;32654:4;32650:20;32646:1;32635:9;32631:17;32624:47;32688:131;32814:4;32688:131;:::i;:::-;32680:139;;32407:419;;;:::o;32832:141::-;32881:4;32904:3;32896:11;;32927:3;32924:1;32917:14;32961:4;32958:1;32948:18;32940:26;;32832:141;;;:::o;32979:93::-;33016:6;33063:2;33058;33051:5;33047:14;33043:23;33033:33;;32979:93;;;:::o;33078:107::-;33122:8;33172:5;33166:4;33162:16;33141:37;;33078:107;;;;:::o;33191:393::-;33260:6;33310:1;33298:10;33294:18;33333:97;33363:66;33352:9;33333:97;:::i;:::-;33451:39;33481:8;33470:9;33451:39;:::i;:::-;33439:51;;33523:4;33519:9;33512:5;33508:21;33499:30;;33572:4;33562:8;33558:19;33551:5;33548:30;33538:40;;33267:317;;33191:393;;;;;:::o;33590:60::-;33618:3;33639:5;33632:12;;33590:60;;;:::o;33656:142::-;33706:9;33739:53;33757:34;33766:24;33784:5;33766:24;:::i;:::-;33757:34;:::i;:::-;33739:53;:::i;:::-;33726:66;;33656:142;;;:::o;33804:75::-;33847:3;33868:5;33861:12;;33804:75;;;:::o;33885:269::-;33995:39;34026:7;33995:39;:::i;:::-;34056:91;34105:41;34129:16;34105:41;:::i;:::-;34097:6;34090:4;34084:11;34056:91;:::i;:::-;34050:4;34043:105;33961:193;33885:269;;;:::o;34160:73::-;34205:3;34160:73;:::o;34239:189::-;34316:32;;:::i;:::-;34357:65;34415:6;34407;34401:4;34357:65;:::i;:::-;34292:136;34239:189;;:::o;34434:186::-;34494:120;34511:3;34504:5;34501:14;34494:120;;;34565:39;34602:1;34595:5;34565:39;:::i;:::-;34538:1;34531:5;34527:13;34518:22;;34494:120;;;34434:186;;:::o;34626:543::-;34727:2;34722:3;34719:11;34716:446;;;34761:38;34793:5;34761:38;:::i;:::-;34845:29;34863:10;34845:29;:::i;:::-;34835:8;34831:44;35028:2;35016:10;35013:18;35010:49;;;35049:8;35034:23;;35010:49;35072:80;35128:22;35146:3;35128:22;:::i;:::-;35118:8;35114:37;35101:11;35072:80;:::i;:::-;34731:431;;34716:446;34626:543;;;:::o;35175:117::-;35229:8;35279:5;35273:4;35269:16;35248:37;;35175:117;;;;:::o;35298:169::-;35342:6;35375:51;35423:1;35419:6;35411:5;35408:1;35404:13;35375:51;:::i;:::-;35371:56;35456:4;35450;35446:15;35436:25;;35349:118;35298:169;;;;:::o;35472:295::-;35548:4;35694:29;35719:3;35713:4;35694:29;:::i;:::-;35686:37;;35756:3;35753:1;35749:11;35743:4;35740:21;35732:29;;35472:295;;;;:::o;35772:1395::-;35889:37;35922:3;35889:37;:::i;:::-;35991:18;35983:6;35980:30;35977:56;;;36013:18;;:::i;:::-;35977:56;36057:38;36089:4;36083:11;36057:38;:::i;:::-;36142:67;36202:6;36194;36188:4;36142:67;:::i;:::-;36236:1;36260:4;36247:17;;36292:2;36284:6;36281:14;36309:1;36304:618;;;;36966:1;36983:6;36980:77;;;37032:9;37027:3;37023:19;37017:26;37008:35;;36980:77;37083:67;37143:6;37136:5;37083:67;:::i;:::-;37077:4;37070:81;36939:222;36274:887;;36304:618;36356:4;36352:9;36344:6;36340:22;36390:37;36422:4;36390:37;:::i;:::-;36449:1;36463:208;36477:7;36474:1;36471:14;36463:208;;;36556:9;36551:3;36547:19;36541:26;36533:6;36526:42;36607:1;36599:6;36595:14;36585:24;;36654:2;36643:9;36639:18;36626:31;;36500:4;36497:1;36493:12;36488:17;;36463:208;;;36699:6;36690:7;36687:19;36684:179;;;36757:9;36752:3;36748:19;36742:26;36800:48;36842:4;36834:6;36830:17;36819:9;36800:48;:::i;:::-;36792:6;36785:64;36707:156;36684:179;36909:1;36905;36897:6;36893:14;36889:22;36883:4;36876:36;36311:611;;;36274:887;;35864:1303;;;35772:1395;;:::o;37173:220::-;37313:34;37309:1;37301:6;37297:14;37290:58;37382:3;37377:2;37369:6;37365:15;37358:28;37173:220;:::o;37399:366::-;37541:3;37562:67;37626:2;37621:3;37562:67;:::i;:::-;37555:74;;37638:93;37727:3;37638:93;:::i;:::-;37756:2;37751:3;37747:12;37740:19;;37399:366;;;:::o;37771:419::-;37937:4;37975:2;37964:9;37960:18;37952:26;;38024:9;38018:4;38014:20;38010:1;37999:9;37995:17;37988:47;38052:131;38178:4;38052:131;:::i;:::-;38044:139;;37771:419;;;:::o;38196:227::-;38336:34;38332:1;38324:6;38320:14;38313:58;38405:10;38400:2;38392:6;38388:15;38381:35;38196:227;:::o;38429:366::-;38571:3;38592:67;38656:2;38651:3;38592:67;:::i;:::-;38585:74;;38668:93;38757:3;38668:93;:::i;:::-;38786:2;38781:3;38777:12;38770:19;;38429:366;;;:::o;38801:419::-;38967:4;39005:2;38994:9;38990:18;38982:26;;39054:9;39048:4;39044:20;39040:1;39029:9;39025:17;39018:47;39082:131;39208:4;39082:131;:::i;:::-;39074:139;;38801:419;;;:::o;39226:634::-;39447:4;39485:2;39474:9;39470:18;39462:26;;39534:9;39528:4;39524:20;39520:1;39509:9;39505:17;39498:47;39562:108;39665:4;39656:6;39562:108;:::i;:::-;39554:116;;39717:9;39711:4;39707:20;39702:2;39691:9;39687:18;39680:48;39745:108;39848:4;39839:6;39745:108;:::i;:::-;39737:116;;39226:634;;;;;:::o;39866:224::-;40006:34;40002:1;39994:6;39990:14;39983:58;40075:7;40070:2;40062:6;40058:15;40051:32;39866:224;:::o;40096:366::-;40238:3;40259:67;40323:2;40318:3;40259:67;:::i;:::-;40252:74;;40335:93;40424:3;40335:93;:::i;:::-;40453:2;40448:3;40444:12;40437:19;;40096:366;;;:::o;40468:419::-;40634:4;40672:2;40661:9;40657:18;40649:26;;40721:9;40715:4;40711:20;40707:1;40696:9;40692:17;40685:47;40749:131;40875:4;40749:131;:::i;:::-;40741:139;;40468:419;;;:::o;40893:229::-;41033:34;41029:1;41021:6;41017:14;41010:58;41102:12;41097:2;41089:6;41085:15;41078:37;40893:229;:::o;41128:366::-;41270:3;41291:67;41355:2;41350:3;41291:67;:::i;:::-;41284:74;;41367:93;41456:3;41367:93;:::i;:::-;41485:2;41480:3;41476:12;41469:19;;41128:366;;;:::o;41500:419::-;41666:4;41704:2;41693:9;41689:18;41681:26;;41753:9;41747:4;41743:20;41739:1;41728:9;41724:17;41717:47;41781:131;41907:4;41781:131;:::i;:::-;41773:139;;41500:419;;;:::o;41925:222::-;42065:34;42061:1;42053:6;42049:14;42042:58;42134:5;42129:2;42121:6;42117:15;42110:30;41925:222;:::o;42153:366::-;42295:3;42316:67;42380:2;42375:3;42316:67;:::i;:::-;42309:74;;42392:93;42481:3;42392:93;:::i;:::-;42510:2;42505:3;42501:12;42494:19;;42153:366;;;:::o;42525:419::-;42691:4;42729:2;42718:9;42714:18;42706:26;;42778:9;42772:4;42768:20;42764:1;42753:9;42749:17;42742:47;42806:131;42932:4;42806:131;:::i;:::-;42798:139;;42525:419;;;:::o;42950:223::-;43090:34;43086:1;43078:6;43074:14;43067:58;43159:6;43154:2;43146:6;43142:15;43135:31;42950:223;:::o;43179:366::-;43321:3;43342:67;43406:2;43401:3;43342:67;:::i;:::-;43335:74;;43418:93;43507:3;43418:93;:::i;:::-;43536:2;43531:3;43527:12;43520:19;;43179:366;;;:::o;43551:419::-;43717:4;43755:2;43744:9;43740:18;43732:26;;43804:9;43798:4;43794:20;43790:1;43779:9;43775:17;43768:47;43832:131;43958:4;43832:131;:::i;:::-;43824:139;;43551:419;;;:::o;43976:332::-;44097:4;44135:2;44124:9;44120:18;44112:26;;44148:71;44216:1;44205:9;44201:17;44192:6;44148:71;:::i;:::-;44229:72;44297:2;44286:9;44282:18;44273:6;44229:72;:::i;:::-;43976:332;;;;;:::o;44314:228::-;44454:34;44450:1;44442:6;44438:14;44431:58;44523:11;44518:2;44510:6;44506:15;44499:36;44314:228;:::o;44548:366::-;44690:3;44711:67;44775:2;44770:3;44711:67;:::i;:::-;44704:74;;44787:93;44876:3;44787:93;:::i;:::-;44905:2;44900:3;44896:12;44889:19;;44548:366;;;:::o;44920:419::-;45086:4;45124:2;45113:9;45109:18;45101:26;;45173:9;45167:4;45163:20;45159:1;45148:9;45144:17;45137:47;45201:131;45327:4;45201:131;:::i;:::-;45193:139;;44920:419;;;:::o;45345:179::-;45485:31;45481:1;45473:6;45469:14;45462:55;45345:179;:::o;45530:366::-;45672:3;45693:67;45757:2;45752:3;45693:67;:::i;:::-;45686:74;;45769:93;45858:3;45769:93;:::i;:::-;45887:2;45882:3;45878:12;45871:19;;45530:366;;;:::o;45902:419::-;46068:4;46106:2;46095:9;46091:18;46083:26;;46155:9;46149:4;46145:20;46141:1;46130:9;46126:17;46119:47;46183:131;46309:4;46183:131;:::i;:::-;46175:139;;45902:419;;;:::o;46327:98::-;46378:6;46412:5;46406:12;46396:22;;46327:98;;;:::o;46431:168::-;46514:11;46548:6;46543:3;46536:19;46588:4;46583:3;46579:14;46564:29;;46431:168;;;;:::o;46605:373::-;46691:3;46719:38;46751:5;46719:38;:::i;:::-;46773:70;46836:6;46831:3;46773:70;:::i;:::-;46766:77;;46852:65;46910:6;46905:3;46898:4;46891:5;46887:16;46852:65;:::i;:::-;46942:29;46964:6;46942:29;:::i;:::-;46937:3;46933:39;46926:46;;46695:283;46605:373;;;;:::o;46984:1053::-;47307:4;47345:3;47334:9;47330:19;47322:27;;47359:71;47427:1;47416:9;47412:17;47403:6;47359:71;:::i;:::-;47440:72;47508:2;47497:9;47493:18;47484:6;47440:72;:::i;:::-;47559:9;47553:4;47549:20;47544:2;47533:9;47529:18;47522:48;47587:108;47690:4;47681:6;47587:108;:::i;:::-;47579:116;;47742:9;47736:4;47732:20;47727:2;47716:9;47712:18;47705:48;47770:108;47873:4;47864:6;47770:108;:::i;:::-;47762:116;;47926:9;47920:4;47916:20;47910:3;47899:9;47895:19;47888:49;47954:76;48025:4;48016:6;47954:76;:::i;:::-;47946:84;;46984:1053;;;;;;;;:::o;48043:141::-;48099:5;48130:6;48124:13;48115:22;;48146:32;48172:5;48146:32;:::i;:::-;48043:141;;;;:::o;48190:349::-;48259:6;48308:2;48296:9;48287:7;48283:23;48279:32;48276:119;;;48314:79;;:::i;:::-;48276:119;48434:1;48459:63;48514:7;48505:6;48494:9;48490:22;48459:63;:::i;:::-;48449:73;;48405:127;48190:349;;;;:::o;48545:106::-;48589:8;48638:5;48633:3;48629:15;48608:36;;48545:106;;;:::o;48657:183::-;48692:3;48730:1;48712:16;48709:23;48706:128;;;48768:1;48765;48762;48747:23;48790:34;48821:1;48815:8;48790:34;:::i;:::-;48783:41;;48706:128;48657:183;:::o;48846:711::-;48885:3;48923:4;48905:16;48902:26;48931:5;48899:39;48960:20;;:::i;:::-;49035:1;49017:16;49013:24;49010:1;49004:4;48989:49;49068:4;49062:11;49167:16;49160:4;49152:6;49148:17;49145:39;49112:18;49104:6;49101:30;49085:113;49082:146;;;49213:5;;;;49082:146;49259:6;49253:4;49249:17;49295:3;49289:10;49322:18;49314:6;49311:30;49308:43;;;49344:5;;;;;;49308:43;49392:6;49385:4;49380:3;49376:14;49372:27;49451:1;49433:16;49429:24;49423:4;49419:35;49414:3;49411:44;49408:57;;;49458:5;;;;;;;49408:57;49475;49523:6;49517:4;49513:17;49505:6;49501:30;49495:4;49475:57;:::i;:::-;49548:3;49541:10;;48889:668;;;;;48846:711;;:::o;49563:239::-;49703:34;49699:1;49691:6;49687:14;49680:58;49772:22;49767:2;49759:6;49755:15;49748:47;49563:239;:::o;49808:366::-;49950:3;49971:67;50035:2;50030:3;49971:67;:::i;:::-;49964:74;;50047:93;50136:3;50047:93;:::i;:::-;50165:2;50160:3;50156:12;50149:19;;49808:366;;;:::o;50180:419::-;50346:4;50384:2;50373:9;50369:18;50361:26;;50433:9;50427:4;50423:20;50419:1;50408:9;50404:17;50397:47;50461:131;50587:4;50461:131;:::i;:::-;50453:139;;50180:419;;;:::o;50605:227::-;50745:34;50741:1;50733:6;50729:14;50722:58;50814:10;50809:2;50801:6;50797:15;50790:35;50605:227;:::o;50838:366::-;50980:3;51001:67;51065:2;51060:3;51001:67;:::i;:::-;50994:74;;51077:93;51166:3;51077:93;:::i;:::-;51195:2;51190:3;51186:12;51179:19;;50838:366;;;:::o;51210:419::-;51376:4;51414:2;51403:9;51399:18;51391:26;;51463:9;51457:4;51453:20;51449:1;51438:9;51434:17;51427:47;51491:131;51617:4;51491:131;:::i;:::-;51483:139;;51210:419;;;:::o;51635:170::-;51775:22;51771:1;51763:6;51759:14;51752:46;51635:170;:::o;51811:366::-;51953:3;51974:67;52038:2;52033:3;51974:67;:::i;:::-;51967:74;;52050:93;52139:3;52050:93;:::i;:::-;52168:2;52163:3;52159:12;52152:19;;51811:366;;;:::o;52183:419::-;52349:4;52387:2;52376:9;52372:18;52364:26;;52436:9;52430:4;52426:20;52422:1;52411:9;52407:17;52400:47;52464:131;52590:4;52464:131;:::i;:::-;52456:139;;52183:419;;;:::o;52608:751::-;52831:4;52869:3;52858:9;52854:19;52846:27;;52883:71;52951:1;52940:9;52936:17;52927:6;52883:71;:::i;:::-;52964:72;53032:2;53021:9;53017:18;53008:6;52964:72;:::i;:::-;53046;53114:2;53103:9;53099:18;53090:6;53046:72;:::i;:::-;53128;53196:2;53185:9;53181:18;53172:6;53128:72;:::i;:::-;53248:9;53242:4;53238:20;53232:3;53221:9;53217:19;53210:49;53276:76;53347:4;53338:6;53276:76;:::i;:::-;53268:84;;52608:751;;;;;;;;:::o;53365:166::-;53505:18;53501:1;53493:6;53489:14;53482:42;53365:166;:::o;53537:366::-;53679:3;53700:67;53764:2;53759:3;53700:67;:::i;:::-;53693:74;;53776:93;53865:3;53776:93;:::i;:::-;53894:2;53889:3;53885:12;53878:19;;53537:366;;;:::o;53909:419::-;54075:4;54113:2;54102:9;54098:18;54090:26;;54162:9;54156:4;54152:20;54148:1;54137:9;54133:17;54126:47;54190:131;54316:4;54190:131;:::i;:::-;54182:139;;53909:419;;;:::o

Swarm Source

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