ETH Price: $2,952.77 (-2.04%)
Gas: 2 Gwei

Token

BlokHub (BlokHub)
 

Overview

Max Total Supply

596 BlokHub

Holders

596

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
Gate.io
0x0d0707963952f2fba59dd06f2b425ace40b492fe
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:
DropyNft

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// File: airdrop.sol


// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/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: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/access/Ownable.sol


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

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Address.sol


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

pragma solidity ^0.8.1;

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

        return account.code.length > 0;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/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: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/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: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/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: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC1155/IERC1155.sol


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

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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

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

// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/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: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC1155/ERC1155.sol


// OpenZeppelin Contracts (last updated v4.6.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 owner nor approved"
        );
        _safeTransferFrom(from, to, id, amount, data);
    }

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

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

        address operator = _msgSender();
        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: drop.sol



pragma solidity ^0.8.0;



contract DropyNft is ERC1155, Ownable {
    
  string public name;
  string public symbol;
  uint256 public constant DROPY_NFT = 0;
  mapping(uint => string) public tokenURI;

  constructor(string memory _name,
        string memory _symbol,
        string memory _initBaseURI) ERC1155("") {
    name = _name;
    symbol = _symbol;
    setURI(DROPY_NFT, _initBaseURI);
  }

  function mint(address _to, uint _id, uint _amount) external onlyOwner {
    _mint(_to, _id, _amount, "");
  }

  function batchMint(address[] memory addresses, uint _id) public onlyOwner{
   for (uint i = 0; i < addresses.length; i++) {
     _mint(addresses[i], _id , 1, "");
   }
}

  function burn(uint _id, uint _amount) external {
    _burn(msg.sender, _id, _amount);
  }

  function burnBatch(uint[] memory _ids, uint[] memory _amounts) external {
    _burnBatch(msg.sender, _ids, _amounts);
  }

  function burnForMint(address _from, uint[] memory _burnIds, uint[] memory _burnAmounts, uint[] memory _mintIds, uint[] memory _mintAmounts) external onlyOwner {
    _burnBatch(_from, _burnIds, _burnAmounts);
    _mintBatch(_from, _mintIds, _mintAmounts, "");
  }

  function setURI(uint _id, string memory _uri) public onlyOwner {
    tokenURI[_id] = _uri;
    emit URI(_uri, _id);
  }

  function uri(uint _id) public override view returns (string memory) {
    return tokenURI[_id];
  }

}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"string","name":"_initBaseURI","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"inputs":[],"name":"DROPY_NFT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"batchMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_ids","type":"uint256[]"},{"internalType":"uint256[]","name":"_amounts","type":"uint256[]"}],"name":"burnBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"uint256[]","name":"_burnIds","type":"uint256[]"},{"internalType":"uint256[]","name":"_burnAmounts","type":"uint256[]"},{"internalType":"uint256[]","name":"_mintIds","type":"uint256[]"},{"internalType":"uint256[]","name":"_mintAmounts","type":"uint256[]"}],"name":"burnForMint","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":"_to","type":"address"},{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"string","name":"_uri","type":"string"}],"name":"setURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]

60806040523480156200001157600080fd5b506040516200469038038062004690833981810160405281019062000037919062000400565b604051806020016040528060008152506200005881620000c760201b60201c565b50620000796200006d620000e360201b60201c565b620000eb60201b60201c565b826004908051906020019062000091929190620002d2565b508160059080519060200190620000aa929190620002d2565b50620000be600082620001b160201b60201c565b50505062000730565b8060029080519060200190620000df929190620002d2565b5050565b600033905090565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620001c1620000e360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620001e7620002a860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000240576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002379062000545565b60405180910390fd5b8060066000848152602001908152602001600020908051906020019062000269929190620002d2565b50817f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b826040516200029c919062000521565b60405180910390a25050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054620002e09062000618565b90600052602060002090601f01602090048101928262000304576000855562000350565b82601f106200031f57805160ff191683800117855562000350565b8280016001018555821562000350579182015b828111156200034f57825182559160200191906001019062000332565b5b5090506200035f919062000363565b5090565b5b808211156200037e57600081600090555060010162000364565b5090565b600062000399620003938462000590565b62000567565b905082815260208101848484011115620003b857620003b7620006e7565b5b620003c5848285620005e2565b509392505050565b600082601f830112620003e557620003e4620006e2565b5b8151620003f784826020860162000382565b91505092915050565b6000806000606084860312156200041c576200041b620006f1565b5b600084015167ffffffffffffffff8111156200043d576200043c620006ec565b5b6200044b86828701620003cd565b935050602084015167ffffffffffffffff8111156200046f576200046e620006ec565b5b6200047d86828701620003cd565b925050604084015167ffffffffffffffff811115620004a157620004a0620006ec565b5b620004af86828701620003cd565b9150509250925092565b6000620004c682620005c6565b620004d28185620005d1565b9350620004e4818560208601620005e2565b620004ef81620006f6565b840191505092915050565b600062000509602083620005d1565b9150620005168262000707565b602082019050919050565b600060208201905081810360008301526200053d8184620004b9565b905092915050565b600060208201905081810360008301526200056081620004fa565b9050919050565b60006200057362000586565b90506200058182826200064e565b919050565b6000604051905090565b600067ffffffffffffffff821115620005ae57620005ad620006b3565b5b620005b982620006f6565b9050602081019050919050565b600081519050919050565b600082825260208201905092915050565b60005b8381101562000602578082015181840152602081019050620005e5565b8381111562000612576000848401525b50505050565b600060028204905060018216806200063157607f821691505b6020821081141562000648576200064762000684565b5b50919050565b6200065982620006f6565b810181811067ffffffffffffffff821117156200067b576200067a620006b3565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b613f5080620007406000396000f3fe608060405234801561001057600080fd5b50600436106101365760003560e01c806383b74baa116100b8578063a22cb4651161007c578063a22cb46514610325578063b390c0ab14610341578063c87b56dd1461035d578063e985e9c51461038d578063f242432a146103bd578063f2fde38b146103d957610136565b806383b74baa1461029557806383ca4b6f146102b1578063862440e2146102cd5780638da5cb5b146102e957806395d89b411461030757610136565b80632dc21d5b116100ff5780632dc21d5b146102055780632eb2c2d6146102235780634e1273f41461023f578063510f41041461026f578063715018a61461028b57610136565b8062fdd58e1461013b57806301ffc9a71461016b57806306fdde031461019b5780630e89341c146101b9578063156e29f6146101e9575b600080fd5b61015560048036038101906101509190612bc6565b6103f5565b604051610162919061354c565b60405180910390f35b61018560048036038101906101809190612da5565b6104be565b604051610192919061332f565b60405180910390f35b6101a36105a0565b6040516101b0919061334a565b60405180910390f35b6101d360048036038101906101ce9190612dff565b61062e565b6040516101e0919061334a565b60405180910390f35b61020360048036038101906101fe9190612c06565b6106d3565b005b61020d61076f565b60405161021a919061354c565b60405180910390f35b61023d60048036038101906102389190612935565b610774565b005b61025960048036038101906102549190612c59565b610815565b60405161026691906132d6565b60405180910390f35b61028960048036038101906102849190612a9b565b61092e565b005b6102936109d7565b005b6102af60048036038101906102aa9190612cd1565b610a5f565b005b6102cb60048036038101906102c69190612d2d565b610b35565b005b6102e760048036038101906102e29190612e2c565b610b44565b005b6102f1610c24565b6040516102fe91906131f9565b60405180910390f35b61030f610c4e565b60405161031c919061334a565b60405180910390f35b61033f600480360381019061033a9190612b86565b610cdc565b005b61035b60048036038101906103569190612e88565b610cf2565b005b61037760048036038101906103729190612dff565b610d01565b604051610384919061334a565b60405180910390f35b6103a760048036038101906103a291906128f5565b610da1565b6040516103b4919061332f565b60405180910390f35b6103d760048036038101906103d29190612a04565b610e35565b005b6103f360048036038101906103ee91906128c8565b610ed6565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610466576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161045d9061340c565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061058957507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610599575061059882610fce565b5b9050919050565b600480546105ad906137ec565b80601f01602080910402602001604051908101604052809291908181526020018280546105d9906137ec565b80156106265780601f106105fb57610100808354040283529160200191610626565b820191906000526020600020905b81548152906001019060200180831161060957829003601f168201915b505050505081565b606060066000838152602001908152602001600020805461064e906137ec565b80601f016020809104026020016040519081016040528092919081815260200182805461067a906137ec565b80156106c75780601f1061069c576101008083540402835291602001916106c7565b820191906000526020600020905b8154815290600101906020018083116106aa57829003601f168201915b50505050509050919050565b6106db611038565b73ffffffffffffffffffffffffffffffffffffffff166106f9610c24565b73ffffffffffffffffffffffffffffffffffffffff161461074f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610746906134ac565b60405180910390fd5b61076a83838360405180602001604052806000815250611040565b505050565b600081565b61077c611038565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806107c257506107c1856107bc611038565b610da1565b5b610801576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107f89061344c565b60405180910390fd5b61080e85858585856111f1565b5050505050565b6060815183511461085b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610852906134ec565b60405180910390fd5b6000835167ffffffffffffffff81111561087857610877613925565b5b6040519080825280602002602001820160405280156108a65781602001602082028036833780820191505090505b50905060005b8451811015610923576108f38582815181106108cb576108ca6138f6565b5b60200260200101518583815181106108e6576108e56138f6565b5b60200260200101516103f5565b828281518110610906576109056138f6565b5b6020026020010181815250508061091c9061384f565b90506108ac565b508091505092915050565b610936611038565b73ffffffffffffffffffffffffffffffffffffffff16610954610c24565b73ffffffffffffffffffffffffffffffffffffffff16146109aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a1906134ac565b60405180910390fd5b6109b5858585611513565b6109d0858383604051806020016040528060008152506117e2565b5050505050565b6109df611038565b73ffffffffffffffffffffffffffffffffffffffff166109fd610c24565b73ffffffffffffffffffffffffffffffffffffffff1614610a53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4a906134ac565b60405180910390fd5b610a5d6000611a0f565b565b610a67611038565b73ffffffffffffffffffffffffffffffffffffffff16610a85610c24565b73ffffffffffffffffffffffffffffffffffffffff1614610adb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad2906134ac565b60405180910390fd5b60005b8251811015610b3057610b1d838281518110610afd57610afc6138f6565b5b602002602001015183600160405180602001604052806000815250611040565b8080610b289061384f565b915050610ade565b505050565b610b40338383611513565b5050565b610b4c611038565b73ffffffffffffffffffffffffffffffffffffffff16610b6a610c24565b73ffffffffffffffffffffffffffffffffffffffff1614610bc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb7906134ac565b60405180910390fd5b80600660008481526020019081526020016000209080519060200190610be79291906125a0565b50817f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b82604051610c18919061334a565b60405180910390a25050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60058054610c5b906137ec565b80601f0160208091040260200160405190810160405280929190818152602001828054610c87906137ec565b8015610cd45780601f10610ca957610100808354040283529160200191610cd4565b820191906000526020600020905b815481529060010190602001808311610cb757829003601f168201915b505050505081565b610cee610ce7611038565b8383611ad5565b5050565b610cfd338383611c42565b5050565b60066020528060005260406000206000915090508054610d20906137ec565b80601f0160208091040260200160405190810160405280929190818152602001828054610d4c906137ec565b8015610d995780601f10610d6e57610100808354040283529160200191610d99565b820191906000526020600020905b815481529060010190602001808311610d7c57829003601f168201915b505050505081565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610e3d611038565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610e835750610e8285610e7d611038565b610da1565b5b610ec2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb9906133ec565b60405180910390fd5b610ecf8585858585611e89565b5050505050565b610ede611038565b73ffffffffffffffffffffffffffffffffffffffff16610efc610c24565b73ffffffffffffffffffffffffffffffffffffffff1614610f52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f49906134ac565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610fc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb9906133ac565b60405180910390fd5b610fcb81611a0f565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156110b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a79061352c565b60405180910390fd5b60006110ba611038565b905060006110c785612125565b905060006110d485612125565b90506110e58360008985858961219f565b8460008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461114491906136e0565b925050819055508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6289896040516111c2929190613567565b60405180910390a46111d9836000898585896121a7565b6111e8836000898989896121af565b50505050505050565b8151835114611235576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122c9061350c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156112a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129c9061342c565b60405180910390fd5b60006112af611038565b90506112bf81878787878761219f565b60005b84518110156114705760008582815181106112e0576112df6138f6565b5b6020026020010151905060008583815181106112ff576112fe6138f6565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156113a0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113979061348c565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461145591906136e0565b92505081905550505050806114699061384f565b90506112c2565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516114e79291906132f8565b60405180910390a46114fd8187878787876121a7565b61150b818787878787612396565b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611583576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157a9061346c565b60405180910390fd5b80518251146115c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115be9061350c565b60405180910390fd5b60006115d1611038565b90506115f18185600086866040518060200160405280600081525061219f565b60005b835181101561173e576000848281518110611612576116116138f6565b5b602002602001015190506000848381518110611631576116306138f6565b5b60200260200101519050600080600084815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156116d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c9906133cc565b60405180910390fd5b81810360008085815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050505080806117369061384f565b9150506115f4565b50600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb86866040516117b69291906132f8565b60405180910390a46117dc818560008686604051806020016040528060008152506121a7565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611852576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118499061352c565b60405180910390fd5b8151835114611896576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188d9061350c565b60405180910390fd5b60006118a0611038565b90506118b18160008787878761219f565b60005b845181101561196a578381815181106118d0576118cf6138f6565b5b60200260200101516000808784815181106118ee576118ed6138f6565b5b6020026020010151815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461195091906136e0565b9250508190555080806119629061384f565b9150506118b4565b508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516119e29291906132f8565b60405180910390a46119f9816000878787876121a7565b611a0881600087878787612396565b5050505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611b44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3b906134cc565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611c35919061332f565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611cb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca99061346c565b60405180910390fd5b6000611cbc611038565b90506000611cc984612125565b90506000611cd684612125565b9050611cf68387600085856040518060200160405280600081525061219f565b600080600087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905084811015611d8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d84906133cc565b60405180910390fd5b84810360008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628989604051611e5a929190613567565b60405180910390a4611e80848860008686604051806020016040528060008152506121a7565b50505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611ef9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef09061342c565b60405180910390fd5b6000611f03611038565b90506000611f1085612125565b90506000611f1d85612125565b9050611f2d83898985858961219f565b600080600088815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905085811015611fc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fbb9061348c565b60405180910390fd5b85810360008089815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508560008089815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461207991906136e0565b925050819055508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628a8a6040516120f6929190613567565b60405180910390a461210c848a8a86868a6121a7565b61211a848a8a8a8a8a6121af565b505050505050505050565b60606000600167ffffffffffffffff81111561214457612143613925565b5b6040519080825280602002602001820160405280156121725781602001602082028036833780820191505090505b509050828160008151811061218a576121896138f6565b5b60200260200101818152505080915050919050565b505050505050565b505050505050565b6121ce8473ffffffffffffffffffffffffffffffffffffffff1661257d565b1561238e578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b815260040161221495949392919061327c565b602060405180830381600087803b15801561222e57600080fd5b505af192505050801561225f57506040513d601f19601f8201168201806040525081019061225c9190612dd2565b60015b6123055761226b613954565b806308c379a014156122c85750612280613e28565b8061228b57506122ca565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122bf919061334a565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122fc9061336c565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461238c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123839061338c565b60405180910390fd5b505b505050505050565b6123b58473ffffffffffffffffffffffffffffffffffffffff1661257d565b15612575578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b81526004016123fb959493929190613214565b602060405180830381600087803b15801561241557600080fd5b505af192505050801561244657506040513d601f19601f820116820180604052508101906124439190612dd2565b60015b6124ec57612452613954565b806308c379a014156124af5750612467613e28565b8061247257506124b1565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124a6919061334a565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124e39061336c565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612573576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161256a9061338c565b60405180910390fd5b505b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b8280546125ac906137ec565b90600052602060002090601f0160209004810192826125ce5760008555612615565b82601f106125e757805160ff1916838001178555612615565b82800160010185558215612615579182015b828111156126145782518255916020019190600101906125f9565b5b5090506126229190612626565b5090565b5b8082111561263f576000816000905550600101612627565b5090565b6000612656612651846135b5565b613590565b905080838252602082019050828560208602820111156126795761267861397b565b5b60005b858110156126a9578161268f88826127a7565b84526020840193506020830192505060018101905061267c565b5050509392505050565b60006126c66126c1846135e1565b613590565b905080838252602082019050828560208602820111156126e9576126e861397b565b5b60005b8581101561271957816126ff88826128b3565b8452602084019350602083019250506001810190506126ec565b5050509392505050565b60006127366127318461360d565b613590565b90508281526020810184848401111561275257612751613980565b5b61275d8482856137aa565b509392505050565b60006127786127738461363e565b613590565b90508281526020810184848401111561279457612793613980565b5b61279f8482856137aa565b509392505050565b6000813590506127b681613ebe565b92915050565b600082601f8301126127d1576127d0613976565b5b81356127e1848260208601612643565b91505092915050565b600082601f8301126127ff576127fe613976565b5b813561280f8482602086016126b3565b91505092915050565b60008135905061282781613ed5565b92915050565b60008135905061283c81613eec565b92915050565b60008151905061285181613eec565b92915050565b600082601f83011261286c5761286b613976565b5b813561287c848260208601612723565b91505092915050565b600082601f83011261289a57612899613976565b5b81356128aa848260208601612765565b91505092915050565b6000813590506128c281613f03565b92915050565b6000602082840312156128de576128dd61398a565b5b60006128ec848285016127a7565b91505092915050565b6000806040838503121561290c5761290b61398a565b5b600061291a858286016127a7565b925050602061292b858286016127a7565b9150509250929050565b600080600080600060a086880312156129515761295061398a565b5b600061295f888289016127a7565b9550506020612970888289016127a7565b945050604086013567ffffffffffffffff81111561299157612990613985565b5b61299d888289016127ea565b935050606086013567ffffffffffffffff8111156129be576129bd613985565b5b6129ca888289016127ea565b925050608086013567ffffffffffffffff8111156129eb576129ea613985565b5b6129f788828901612857565b9150509295509295909350565b600080600080600060a08688031215612a2057612a1f61398a565b5b6000612a2e888289016127a7565b9550506020612a3f888289016127a7565b9450506040612a50888289016128b3565b9350506060612a61888289016128b3565b925050608086013567ffffffffffffffff811115612a8257612a81613985565b5b612a8e88828901612857565b9150509295509295909350565b600080600080600060a08688031215612ab757612ab661398a565b5b6000612ac5888289016127a7565b955050602086013567ffffffffffffffff811115612ae657612ae5613985565b5b612af2888289016127ea565b945050604086013567ffffffffffffffff811115612b1357612b12613985565b5b612b1f888289016127ea565b935050606086013567ffffffffffffffff811115612b4057612b3f613985565b5b612b4c888289016127ea565b925050608086013567ffffffffffffffff811115612b6d57612b6c613985565b5b612b79888289016127ea565b9150509295509295909350565b60008060408385031215612b9d57612b9c61398a565b5b6000612bab858286016127a7565b9250506020612bbc85828601612818565b9150509250929050565b60008060408385031215612bdd57612bdc61398a565b5b6000612beb858286016127a7565b9250506020612bfc858286016128b3565b9150509250929050565b600080600060608486031215612c1f57612c1e61398a565b5b6000612c2d868287016127a7565b9350506020612c3e868287016128b3565b9250506040612c4f868287016128b3565b9150509250925092565b60008060408385031215612c7057612c6f61398a565b5b600083013567ffffffffffffffff811115612c8e57612c8d613985565b5b612c9a858286016127bc565b925050602083013567ffffffffffffffff811115612cbb57612cba613985565b5b612cc7858286016127ea565b9150509250929050565b60008060408385031215612ce857612ce761398a565b5b600083013567ffffffffffffffff811115612d0657612d05613985565b5b612d12858286016127bc565b9250506020612d23858286016128b3565b9150509250929050565b60008060408385031215612d4457612d4361398a565b5b600083013567ffffffffffffffff811115612d6257612d61613985565b5b612d6e858286016127ea565b925050602083013567ffffffffffffffff811115612d8f57612d8e613985565b5b612d9b858286016127ea565b9150509250929050565b600060208284031215612dbb57612dba61398a565b5b6000612dc98482850161282d565b91505092915050565b600060208284031215612de857612de761398a565b5b6000612df684828501612842565b91505092915050565b600060208284031215612e1557612e1461398a565b5b6000612e23848285016128b3565b91505092915050565b60008060408385031215612e4357612e4261398a565b5b6000612e51858286016128b3565b925050602083013567ffffffffffffffff811115612e7257612e71613985565b5b612e7e85828601612885565b9150509250929050565b60008060408385031215612e9f57612e9e61398a565b5b6000612ead858286016128b3565b9250506020612ebe858286016128b3565b9150509250929050565b6000612ed483836131db565b60208301905092915050565b612ee981613736565b82525050565b6000612efa8261367f565b612f0481856136ad565b9350612f0f8361366f565b8060005b83811015612f40578151612f278882612ec8565b9750612f32836136a0565b925050600181019050612f13565b5085935050505092915050565b612f5681613748565b82525050565b6000612f678261368a565b612f7181856136be565b9350612f818185602086016137b9565b612f8a8161398f565b840191505092915050565b6000612fa082613695565b612faa81856136cf565b9350612fba8185602086016137b9565b612fc38161398f565b840191505092915050565b6000612fdb6034836136cf565b9150612fe6826139ad565b604082019050919050565b6000612ffe6028836136cf565b9150613009826139fc565b604082019050919050565b60006130216026836136cf565b915061302c82613a4b565b604082019050919050565b60006130446024836136cf565b915061304f82613a9a565b604082019050919050565b60006130676029836136cf565b915061307282613ae9565b604082019050919050565b600061308a602a836136cf565b915061309582613b38565b604082019050919050565b60006130ad6025836136cf565b91506130b882613b87565b604082019050919050565b60006130d06032836136cf565b91506130db82613bd6565b604082019050919050565b60006130f36023836136cf565b91506130fe82613c25565b604082019050919050565b6000613116602a836136cf565b915061312182613c74565b604082019050919050565b60006131396020836136cf565b915061314482613cc3565b602082019050919050565b600061315c6029836136cf565b915061316782613cec565b604082019050919050565b600061317f6029836136cf565b915061318a82613d3b565b604082019050919050565b60006131a26028836136cf565b91506131ad82613d8a565b604082019050919050565b60006131c56021836136cf565b91506131d082613dd9565b604082019050919050565b6131e4816137a0565b82525050565b6131f3816137a0565b82525050565b600060208201905061320e6000830184612ee0565b92915050565b600060a0820190506132296000830188612ee0565b6132366020830187612ee0565b81810360408301526132488186612eef565b9050818103606083015261325c8185612eef565b905081810360808301526132708184612f5c565b90509695505050505050565b600060a0820190506132916000830188612ee0565b61329e6020830187612ee0565b6132ab60408301866131ea565b6132b860608301856131ea565b81810360808301526132ca8184612f5c565b90509695505050505050565b600060208201905081810360008301526132f08184612eef565b905092915050565b600060408201905081810360008301526133128185612eef565b905081810360208301526133268184612eef565b90509392505050565b60006020820190506133446000830184612f4d565b92915050565b600060208201905081810360008301526133648184612f95565b905092915050565b6000602082019050818103600083015261338581612fce565b9050919050565b600060208201905081810360008301526133a581612ff1565b9050919050565b600060208201905081810360008301526133c581613014565b9050919050565b600060208201905081810360008301526133e581613037565b9050919050565b600060208201905081810360008301526134058161305a565b9050919050565b600060208201905081810360008301526134258161307d565b9050919050565b60006020820190508181036000830152613445816130a0565b9050919050565b60006020820190508181036000830152613465816130c3565b9050919050565b60006020820190508181036000830152613485816130e6565b9050919050565b600060208201905081810360008301526134a581613109565b9050919050565b600060208201905081810360008301526134c58161312c565b9050919050565b600060208201905081810360008301526134e58161314f565b9050919050565b6000602082019050818103600083015261350581613172565b9050919050565b6000602082019050818103600083015261352581613195565b9050919050565b60006020820190508181036000830152613545816131b8565b9050919050565b600060208201905061356160008301846131ea565b92915050565b600060408201905061357c60008301856131ea565b61358960208301846131ea565b9392505050565b600061359a6135ab565b90506135a6828261381e565b919050565b6000604051905090565b600067ffffffffffffffff8211156135d0576135cf613925565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156135fc576135fb613925565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561362857613627613925565b5b6136318261398f565b9050602081019050919050565b600067ffffffffffffffff82111561365957613658613925565b5b6136628261398f565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b60006136eb826137a0565b91506136f6836137a0565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561372b5761372a613898565b5b828201905092915050565b600061374182613780565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156137d75780820151818401526020810190506137bc565b838111156137e6576000848401525b50505050565b6000600282049050600182168061380457607f821691505b60208210811415613818576138176138c7565b5b50919050565b6138278261398f565b810181811067ffffffffffffffff8211171561384657613845613925565b5b80604052505050565b600061385a826137a0565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561388d5761388c613898565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d11156139735760046000803e6139706000516139a0565b90505b90565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160e01c9050919050565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206275726e20616d6f756e7420657863656564732062616c60008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2061646472657373207a65726f206973206e6f742061207660008201527f616c6964206f776e657200000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f455243313135353a206275726e2066726f6d20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600060443d1015613e3857613ebb565b613e406135ab565b60043d036004823e80513d602482011167ffffffffffffffff82111715613e68575050613ebb565b808201805167ffffffffffffffff811115613e865750505050613ebb565b80602083010160043d038501811115613ea3575050505050613ebb565b613eb28260200185018661381e565b82955050505050505b90565b613ec781613736565b8114613ed257600080fd5b50565b613ede81613748565b8114613ee957600080fd5b50565b613ef581613754565b8114613f0057600080fd5b50565b613f0c816137a0565b8114613f1757600080fd5b5056fea264697066735822122049e5d310ed501a740c42ed19909abbbcdb615ecc2f1f6819ca98baddb9c1ed2164736f6c63430008070033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000007426c6f6b487562000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007426c6f6b487562000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000043697066733a2f2f6261666b72656965647933656d6a3437796a7a65336a686c72627777646670646c727a6633347a7a77727078683775716d32656766647075616d792f0000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101365760003560e01c806383b74baa116100b8578063a22cb4651161007c578063a22cb46514610325578063b390c0ab14610341578063c87b56dd1461035d578063e985e9c51461038d578063f242432a146103bd578063f2fde38b146103d957610136565b806383b74baa1461029557806383ca4b6f146102b1578063862440e2146102cd5780638da5cb5b146102e957806395d89b411461030757610136565b80632dc21d5b116100ff5780632dc21d5b146102055780632eb2c2d6146102235780634e1273f41461023f578063510f41041461026f578063715018a61461028b57610136565b8062fdd58e1461013b57806301ffc9a71461016b57806306fdde031461019b5780630e89341c146101b9578063156e29f6146101e9575b600080fd5b61015560048036038101906101509190612bc6565b6103f5565b604051610162919061354c565b60405180910390f35b61018560048036038101906101809190612da5565b6104be565b604051610192919061332f565b60405180910390f35b6101a36105a0565b6040516101b0919061334a565b60405180910390f35b6101d360048036038101906101ce9190612dff565b61062e565b6040516101e0919061334a565b60405180910390f35b61020360048036038101906101fe9190612c06565b6106d3565b005b61020d61076f565b60405161021a919061354c565b60405180910390f35b61023d60048036038101906102389190612935565b610774565b005b61025960048036038101906102549190612c59565b610815565b60405161026691906132d6565b60405180910390f35b61028960048036038101906102849190612a9b565b61092e565b005b6102936109d7565b005b6102af60048036038101906102aa9190612cd1565b610a5f565b005b6102cb60048036038101906102c69190612d2d565b610b35565b005b6102e760048036038101906102e29190612e2c565b610b44565b005b6102f1610c24565b6040516102fe91906131f9565b60405180910390f35b61030f610c4e565b60405161031c919061334a565b60405180910390f35b61033f600480360381019061033a9190612b86565b610cdc565b005b61035b60048036038101906103569190612e88565b610cf2565b005b61037760048036038101906103729190612dff565b610d01565b604051610384919061334a565b60405180910390f35b6103a760048036038101906103a291906128f5565b610da1565b6040516103b4919061332f565b60405180910390f35b6103d760048036038101906103d29190612a04565b610e35565b005b6103f360048036038101906103ee91906128c8565b610ed6565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610466576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161045d9061340c565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061058957507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610599575061059882610fce565b5b9050919050565b600480546105ad906137ec565b80601f01602080910402602001604051908101604052809291908181526020018280546105d9906137ec565b80156106265780601f106105fb57610100808354040283529160200191610626565b820191906000526020600020905b81548152906001019060200180831161060957829003601f168201915b505050505081565b606060066000838152602001908152602001600020805461064e906137ec565b80601f016020809104026020016040519081016040528092919081815260200182805461067a906137ec565b80156106c75780601f1061069c576101008083540402835291602001916106c7565b820191906000526020600020905b8154815290600101906020018083116106aa57829003601f168201915b50505050509050919050565b6106db611038565b73ffffffffffffffffffffffffffffffffffffffff166106f9610c24565b73ffffffffffffffffffffffffffffffffffffffff161461074f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610746906134ac565b60405180910390fd5b61076a83838360405180602001604052806000815250611040565b505050565b600081565b61077c611038565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806107c257506107c1856107bc611038565b610da1565b5b610801576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107f89061344c565b60405180910390fd5b61080e85858585856111f1565b5050505050565b6060815183511461085b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610852906134ec565b60405180910390fd5b6000835167ffffffffffffffff81111561087857610877613925565b5b6040519080825280602002602001820160405280156108a65781602001602082028036833780820191505090505b50905060005b8451811015610923576108f38582815181106108cb576108ca6138f6565b5b60200260200101518583815181106108e6576108e56138f6565b5b60200260200101516103f5565b828281518110610906576109056138f6565b5b6020026020010181815250508061091c9061384f565b90506108ac565b508091505092915050565b610936611038565b73ffffffffffffffffffffffffffffffffffffffff16610954610c24565b73ffffffffffffffffffffffffffffffffffffffff16146109aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a1906134ac565b60405180910390fd5b6109b5858585611513565b6109d0858383604051806020016040528060008152506117e2565b5050505050565b6109df611038565b73ffffffffffffffffffffffffffffffffffffffff166109fd610c24565b73ffffffffffffffffffffffffffffffffffffffff1614610a53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4a906134ac565b60405180910390fd5b610a5d6000611a0f565b565b610a67611038565b73ffffffffffffffffffffffffffffffffffffffff16610a85610c24565b73ffffffffffffffffffffffffffffffffffffffff1614610adb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad2906134ac565b60405180910390fd5b60005b8251811015610b3057610b1d838281518110610afd57610afc6138f6565b5b602002602001015183600160405180602001604052806000815250611040565b8080610b289061384f565b915050610ade565b505050565b610b40338383611513565b5050565b610b4c611038565b73ffffffffffffffffffffffffffffffffffffffff16610b6a610c24565b73ffffffffffffffffffffffffffffffffffffffff1614610bc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb7906134ac565b60405180910390fd5b80600660008481526020019081526020016000209080519060200190610be79291906125a0565b50817f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b82604051610c18919061334a565b60405180910390a25050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60058054610c5b906137ec565b80601f0160208091040260200160405190810160405280929190818152602001828054610c87906137ec565b8015610cd45780601f10610ca957610100808354040283529160200191610cd4565b820191906000526020600020905b815481529060010190602001808311610cb757829003601f168201915b505050505081565b610cee610ce7611038565b8383611ad5565b5050565b610cfd338383611c42565b5050565b60066020528060005260406000206000915090508054610d20906137ec565b80601f0160208091040260200160405190810160405280929190818152602001828054610d4c906137ec565b8015610d995780601f10610d6e57610100808354040283529160200191610d99565b820191906000526020600020905b815481529060010190602001808311610d7c57829003601f168201915b505050505081565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610e3d611038565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610e835750610e8285610e7d611038565b610da1565b5b610ec2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb9906133ec565b60405180910390fd5b610ecf8585858585611e89565b5050505050565b610ede611038565b73ffffffffffffffffffffffffffffffffffffffff16610efc610c24565b73ffffffffffffffffffffffffffffffffffffffff1614610f52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f49906134ac565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610fc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb9906133ac565b60405180910390fd5b610fcb81611a0f565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156110b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a79061352c565b60405180910390fd5b60006110ba611038565b905060006110c785612125565b905060006110d485612125565b90506110e58360008985858961219f565b8460008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461114491906136e0565b925050819055508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6289896040516111c2929190613567565b60405180910390a46111d9836000898585896121a7565b6111e8836000898989896121af565b50505050505050565b8151835114611235576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122c9061350c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156112a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129c9061342c565b60405180910390fd5b60006112af611038565b90506112bf81878787878761219f565b60005b84518110156114705760008582815181106112e0576112df6138f6565b5b6020026020010151905060008583815181106112ff576112fe6138f6565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156113a0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113979061348c565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461145591906136e0565b92505081905550505050806114699061384f565b90506112c2565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516114e79291906132f8565b60405180910390a46114fd8187878787876121a7565b61150b818787878787612396565b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611583576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157a9061346c565b60405180910390fd5b80518251146115c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115be9061350c565b60405180910390fd5b60006115d1611038565b90506115f18185600086866040518060200160405280600081525061219f565b60005b835181101561173e576000848281518110611612576116116138f6565b5b602002602001015190506000848381518110611631576116306138f6565b5b60200260200101519050600080600084815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156116d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c9906133cc565b60405180910390fd5b81810360008085815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050505080806117369061384f565b9150506115f4565b50600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb86866040516117b69291906132f8565b60405180910390a46117dc818560008686604051806020016040528060008152506121a7565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611852576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118499061352c565b60405180910390fd5b8151835114611896576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188d9061350c565b60405180910390fd5b60006118a0611038565b90506118b18160008787878761219f565b60005b845181101561196a578381815181106118d0576118cf6138f6565b5b60200260200101516000808784815181106118ee576118ed6138f6565b5b6020026020010151815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461195091906136e0565b9250508190555080806119629061384f565b9150506118b4565b508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516119e29291906132f8565b60405180910390a46119f9816000878787876121a7565b611a0881600087878787612396565b5050505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611b44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3b906134cc565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611c35919061332f565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611cb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca99061346c565b60405180910390fd5b6000611cbc611038565b90506000611cc984612125565b90506000611cd684612125565b9050611cf68387600085856040518060200160405280600081525061219f565b600080600087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905084811015611d8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d84906133cc565b60405180910390fd5b84810360008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628989604051611e5a929190613567565b60405180910390a4611e80848860008686604051806020016040528060008152506121a7565b50505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611ef9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef09061342c565b60405180910390fd5b6000611f03611038565b90506000611f1085612125565b90506000611f1d85612125565b9050611f2d83898985858961219f565b600080600088815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905085811015611fc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fbb9061348c565b60405180910390fd5b85810360008089815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508560008089815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461207991906136e0565b925050819055508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628a8a6040516120f6929190613567565b60405180910390a461210c848a8a86868a6121a7565b61211a848a8a8a8a8a6121af565b505050505050505050565b60606000600167ffffffffffffffff81111561214457612143613925565b5b6040519080825280602002602001820160405280156121725781602001602082028036833780820191505090505b509050828160008151811061218a576121896138f6565b5b60200260200101818152505080915050919050565b505050505050565b505050505050565b6121ce8473ffffffffffffffffffffffffffffffffffffffff1661257d565b1561238e578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b815260040161221495949392919061327c565b602060405180830381600087803b15801561222e57600080fd5b505af192505050801561225f57506040513d601f19601f8201168201806040525081019061225c9190612dd2565b60015b6123055761226b613954565b806308c379a014156122c85750612280613e28565b8061228b57506122ca565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122bf919061334a565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122fc9061336c565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461238c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123839061338c565b60405180910390fd5b505b505050505050565b6123b58473ffffffffffffffffffffffffffffffffffffffff1661257d565b15612575578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b81526004016123fb959493929190613214565b602060405180830381600087803b15801561241557600080fd5b505af192505050801561244657506040513d601f19601f820116820180604052508101906124439190612dd2565b60015b6124ec57612452613954565b806308c379a014156124af5750612467613e28565b8061247257506124b1565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124a6919061334a565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124e39061336c565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612573576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161256a9061338c565b60405180910390fd5b505b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b8280546125ac906137ec565b90600052602060002090601f0160209004810192826125ce5760008555612615565b82601f106125e757805160ff1916838001178555612615565b82800160010185558215612615579182015b828111156126145782518255916020019190600101906125f9565b5b5090506126229190612626565b5090565b5b8082111561263f576000816000905550600101612627565b5090565b6000612656612651846135b5565b613590565b905080838252602082019050828560208602820111156126795761267861397b565b5b60005b858110156126a9578161268f88826127a7565b84526020840193506020830192505060018101905061267c565b5050509392505050565b60006126c66126c1846135e1565b613590565b905080838252602082019050828560208602820111156126e9576126e861397b565b5b60005b8581101561271957816126ff88826128b3565b8452602084019350602083019250506001810190506126ec565b5050509392505050565b60006127366127318461360d565b613590565b90508281526020810184848401111561275257612751613980565b5b61275d8482856137aa565b509392505050565b60006127786127738461363e565b613590565b90508281526020810184848401111561279457612793613980565b5b61279f8482856137aa565b509392505050565b6000813590506127b681613ebe565b92915050565b600082601f8301126127d1576127d0613976565b5b81356127e1848260208601612643565b91505092915050565b600082601f8301126127ff576127fe613976565b5b813561280f8482602086016126b3565b91505092915050565b60008135905061282781613ed5565b92915050565b60008135905061283c81613eec565b92915050565b60008151905061285181613eec565b92915050565b600082601f83011261286c5761286b613976565b5b813561287c848260208601612723565b91505092915050565b600082601f83011261289a57612899613976565b5b81356128aa848260208601612765565b91505092915050565b6000813590506128c281613f03565b92915050565b6000602082840312156128de576128dd61398a565b5b60006128ec848285016127a7565b91505092915050565b6000806040838503121561290c5761290b61398a565b5b600061291a858286016127a7565b925050602061292b858286016127a7565b9150509250929050565b600080600080600060a086880312156129515761295061398a565b5b600061295f888289016127a7565b9550506020612970888289016127a7565b945050604086013567ffffffffffffffff81111561299157612990613985565b5b61299d888289016127ea565b935050606086013567ffffffffffffffff8111156129be576129bd613985565b5b6129ca888289016127ea565b925050608086013567ffffffffffffffff8111156129eb576129ea613985565b5b6129f788828901612857565b9150509295509295909350565b600080600080600060a08688031215612a2057612a1f61398a565b5b6000612a2e888289016127a7565b9550506020612a3f888289016127a7565b9450506040612a50888289016128b3565b9350506060612a61888289016128b3565b925050608086013567ffffffffffffffff811115612a8257612a81613985565b5b612a8e88828901612857565b9150509295509295909350565b600080600080600060a08688031215612ab757612ab661398a565b5b6000612ac5888289016127a7565b955050602086013567ffffffffffffffff811115612ae657612ae5613985565b5b612af2888289016127ea565b945050604086013567ffffffffffffffff811115612b1357612b12613985565b5b612b1f888289016127ea565b935050606086013567ffffffffffffffff811115612b4057612b3f613985565b5b612b4c888289016127ea565b925050608086013567ffffffffffffffff811115612b6d57612b6c613985565b5b612b79888289016127ea565b9150509295509295909350565b60008060408385031215612b9d57612b9c61398a565b5b6000612bab858286016127a7565b9250506020612bbc85828601612818565b9150509250929050565b60008060408385031215612bdd57612bdc61398a565b5b6000612beb858286016127a7565b9250506020612bfc858286016128b3565b9150509250929050565b600080600060608486031215612c1f57612c1e61398a565b5b6000612c2d868287016127a7565b9350506020612c3e868287016128b3565b9250506040612c4f868287016128b3565b9150509250925092565b60008060408385031215612c7057612c6f61398a565b5b600083013567ffffffffffffffff811115612c8e57612c8d613985565b5b612c9a858286016127bc565b925050602083013567ffffffffffffffff811115612cbb57612cba613985565b5b612cc7858286016127ea565b9150509250929050565b60008060408385031215612ce857612ce761398a565b5b600083013567ffffffffffffffff811115612d0657612d05613985565b5b612d12858286016127bc565b9250506020612d23858286016128b3565b9150509250929050565b60008060408385031215612d4457612d4361398a565b5b600083013567ffffffffffffffff811115612d6257612d61613985565b5b612d6e858286016127ea565b925050602083013567ffffffffffffffff811115612d8f57612d8e613985565b5b612d9b858286016127ea565b9150509250929050565b600060208284031215612dbb57612dba61398a565b5b6000612dc98482850161282d565b91505092915050565b600060208284031215612de857612de761398a565b5b6000612df684828501612842565b91505092915050565b600060208284031215612e1557612e1461398a565b5b6000612e23848285016128b3565b91505092915050565b60008060408385031215612e4357612e4261398a565b5b6000612e51858286016128b3565b925050602083013567ffffffffffffffff811115612e7257612e71613985565b5b612e7e85828601612885565b9150509250929050565b60008060408385031215612e9f57612e9e61398a565b5b6000612ead858286016128b3565b9250506020612ebe858286016128b3565b9150509250929050565b6000612ed483836131db565b60208301905092915050565b612ee981613736565b82525050565b6000612efa8261367f565b612f0481856136ad565b9350612f0f8361366f565b8060005b83811015612f40578151612f278882612ec8565b9750612f32836136a0565b925050600181019050612f13565b5085935050505092915050565b612f5681613748565b82525050565b6000612f678261368a565b612f7181856136be565b9350612f818185602086016137b9565b612f8a8161398f565b840191505092915050565b6000612fa082613695565b612faa81856136cf565b9350612fba8185602086016137b9565b612fc38161398f565b840191505092915050565b6000612fdb6034836136cf565b9150612fe6826139ad565b604082019050919050565b6000612ffe6028836136cf565b9150613009826139fc565b604082019050919050565b60006130216026836136cf565b915061302c82613a4b565b604082019050919050565b60006130446024836136cf565b915061304f82613a9a565b604082019050919050565b60006130676029836136cf565b915061307282613ae9565b604082019050919050565b600061308a602a836136cf565b915061309582613b38565b604082019050919050565b60006130ad6025836136cf565b91506130b882613b87565b604082019050919050565b60006130d06032836136cf565b91506130db82613bd6565b604082019050919050565b60006130f36023836136cf565b91506130fe82613c25565b604082019050919050565b6000613116602a836136cf565b915061312182613c74565b604082019050919050565b60006131396020836136cf565b915061314482613cc3565b602082019050919050565b600061315c6029836136cf565b915061316782613cec565b604082019050919050565b600061317f6029836136cf565b915061318a82613d3b565b604082019050919050565b60006131a26028836136cf565b91506131ad82613d8a565b604082019050919050565b60006131c56021836136cf565b91506131d082613dd9565b604082019050919050565b6131e4816137a0565b82525050565b6131f3816137a0565b82525050565b600060208201905061320e6000830184612ee0565b92915050565b600060a0820190506132296000830188612ee0565b6132366020830187612ee0565b81810360408301526132488186612eef565b9050818103606083015261325c8185612eef565b905081810360808301526132708184612f5c565b90509695505050505050565b600060a0820190506132916000830188612ee0565b61329e6020830187612ee0565b6132ab60408301866131ea565b6132b860608301856131ea565b81810360808301526132ca8184612f5c565b90509695505050505050565b600060208201905081810360008301526132f08184612eef565b905092915050565b600060408201905081810360008301526133128185612eef565b905081810360208301526133268184612eef565b90509392505050565b60006020820190506133446000830184612f4d565b92915050565b600060208201905081810360008301526133648184612f95565b905092915050565b6000602082019050818103600083015261338581612fce565b9050919050565b600060208201905081810360008301526133a581612ff1565b9050919050565b600060208201905081810360008301526133c581613014565b9050919050565b600060208201905081810360008301526133e581613037565b9050919050565b600060208201905081810360008301526134058161305a565b9050919050565b600060208201905081810360008301526134258161307d565b9050919050565b60006020820190508181036000830152613445816130a0565b9050919050565b60006020820190508181036000830152613465816130c3565b9050919050565b60006020820190508181036000830152613485816130e6565b9050919050565b600060208201905081810360008301526134a581613109565b9050919050565b600060208201905081810360008301526134c58161312c565b9050919050565b600060208201905081810360008301526134e58161314f565b9050919050565b6000602082019050818103600083015261350581613172565b9050919050565b6000602082019050818103600083015261352581613195565b9050919050565b60006020820190508181036000830152613545816131b8565b9050919050565b600060208201905061356160008301846131ea565b92915050565b600060408201905061357c60008301856131ea565b61358960208301846131ea565b9392505050565b600061359a6135ab565b90506135a6828261381e565b919050565b6000604051905090565b600067ffffffffffffffff8211156135d0576135cf613925565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156135fc576135fb613925565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561362857613627613925565b5b6136318261398f565b9050602081019050919050565b600067ffffffffffffffff82111561365957613658613925565b5b6136628261398f565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b60006136eb826137a0565b91506136f6836137a0565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561372b5761372a613898565b5b828201905092915050565b600061374182613780565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156137d75780820151818401526020810190506137bc565b838111156137e6576000848401525b50505050565b6000600282049050600182168061380457607f821691505b60208210811415613818576138176138c7565b5b50919050565b6138278261398f565b810181811067ffffffffffffffff8211171561384657613845613925565b5b80604052505050565b600061385a826137a0565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561388d5761388c613898565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d11156139735760046000803e6139706000516139a0565b90505b90565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160e01c9050919050565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206275726e20616d6f756e7420657863656564732062616c60008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2061646472657373207a65726f206973206e6f742061207660008201527f616c6964206f776e657200000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f455243313135353a206275726e2066726f6d20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600060443d1015613e3857613ebb565b613e406135ab565b60043d036004823e80513d602482011167ffffffffffffffff82111715613e68575050613ebb565b808201805167ffffffffffffffff811115613e865750505050613ebb565b80602083010160043d038501811115613ea3575050505050613ebb565b613eb28260200185018661381e565b82955050505050505b90565b613ec781613736565b8114613ed257600080fd5b50565b613ede81613748565b8114613ee957600080fd5b50565b613ef581613754565b8114613f0057600080fd5b50565b613f0c816137a0565b8114613f1757600080fd5b5056fea264697066735822122049e5d310ed501a740c42ed19909abbbcdb615ecc2f1f6819ca98baddb9c1ed2164736f6c63430008070033

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

000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000007426c6f6b487562000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007426c6f6b487562000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000043697066733a2f2f6261666b72656965647933656d6a3437796a7a65336a686c72627777646670646c727a6633347a7a77727078683775716d32656766647075616d792f0000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _name (string): BlokHub
Arg [1] : _symbol (string): BlokHub
Arg [2] : _initBaseURI (string): ipfs://bafkreiedy3emj47yjze3jhlrbwwdfpdlrzf34zzwrpxh7uqm2egfdpuamy/

-----Encoded View---------------
11 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000007
Arg [4] : 426c6f6b48756200000000000000000000000000000000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000007
Arg [6] : 426c6f6b48756200000000000000000000000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000043
Arg [8] : 697066733a2f2f6261666b72656965647933656d6a3437796a7a65336a686c72
Arg [9] : 627777646670646c727a6633347a7a77727078683775716d3265676664707561
Arg [10] : 6d792f0000000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

39475:1418:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23895:230;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22918:310;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39524:18;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40787:101;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39866:111;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39572:37;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25833:442;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24291:524;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40388:265;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2738:103;;;:::i;:::-;;39983:173;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40259:123;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40659:122;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2087:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39547:20;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24888:155;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40162:91;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39614:39;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25115:168;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25355:401;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2996:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23895:230;23981:7;24028:1;24009:21;;:7;:21;;;;24001:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;24095:9;:13;24105:2;24095:13;;;;;;;;;;;:22;24109:7;24095:22;;;;;;;;;;;;;;;;24088:29;;23895:230;;;;:::o;22918:310::-;23020:4;23072:26;23057:41;;;:11;:41;;;;:110;;;;23130:37;23115:52;;;:11;:52;;;;23057:110;:163;;;;23184:36;23208:11;23184:23;:36::i;:::-;23057:163;23037:183;;22918:310;;;:::o;39524:18::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;40787:101::-;40840:13;40869:8;:13;40878:3;40869:13;;;;;;;;;;;40862:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40787:101;;;:::o;39866:111::-;2318:12;:10;:12::i;:::-;2307:23;;:7;:5;:7::i;:::-;:23;;;2299:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39943:28:::1;39949:3;39954;39959:7;39943:28;;;;;;;;;;;::::0;:5:::1;:28::i;:::-;39866:111:::0;;;:::o;39572:37::-;39608:1;39572:37;:::o;25833:442::-;26074:12;:10;:12::i;:::-;26066:20;;:4;:20;;;:60;;;;26090:36;26107:4;26113:12;:10;:12::i;:::-;26090:16;:36::i;:::-;26066:60;26044:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;26215:52;26238:4;26244:2;26248:3;26253:7;26262:4;26215:22;:52::i;:::-;25833:442;;;;;:::o;24291:524::-;24447:16;24508:3;:10;24489:8;:15;:29;24481:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;24577:30;24624:8;:15;24610:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24577:63;;24658:9;24653:122;24677:8;:15;24673:1;:19;24653:122;;;24733:30;24743:8;24752:1;24743:11;;;;;;;;:::i;:::-;;;;;;;;24756:3;24760:1;24756:6;;;;;;;;:::i;:::-;;;;;;;;24733:9;:30::i;:::-;24714:13;24728:1;24714:16;;;;;;;;:::i;:::-;;;;;;;:49;;;;;24694:3;;;;:::i;:::-;;;24653:122;;;;24794:13;24787:20;;;24291:524;;;;:::o;40388:265::-;2318:12;:10;:12::i;:::-;2307:23;;:7;:5;:7::i;:::-;:23;;;2299:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40554:41:::1;40565:5;40572:8;40582:12;40554:10;:41::i;:::-;40602:45;40613:5;40620:8;40630:12;40602:45;;;;;;;;;;;::::0;:10:::1;:45::i;:::-;40388:265:::0;;;;;:::o;2738:103::-;2318:12;:10;:12::i;:::-;2307:23;;:7;:5;:7::i;:::-;:23;;;2299:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2803:30:::1;2830:1;2803:18;:30::i;:::-;2738:103::o:0;39983:173::-;2318:12;:10;:12::i;:::-;2307:23;;:7;:5;:7::i;:::-;:23;;;2299:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40067:6:::1;40062:91;40083:9;:16;40079:1;:20;40062:91;;;40114:32;40120:9;40130:1;40120:12;;;;;;;;:::i;:::-;;;;;;;;40134:3;40140:1;40114:32;;;;;;;;;;;::::0;:5:::1;:32::i;:::-;40101:3;;;;;:::i;:::-;;;;40062:91;;;;39983:173:::0;;:::o;40259:123::-;40338:38;40349:10;40361:4;40367:8;40338:10;:38::i;:::-;40259:123;;:::o;40659:122::-;2318:12;:10;:12::i;:::-;2307:23;;:7;:5;:7::i;:::-;:23;;;2299:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40745:4:::1;40729:8;:13;40738:3;40729:13;;;;;;;;;;;:20;;;;;;;;;;;;:::i;:::-;;40771:3;40761:14;40765:4;40761:14;;;;;;:::i;:::-;;;;;;;;40659:122:::0;;:::o;2087:87::-;2133:7;2160:6;;;;;;;;;;;2153:13;;2087:87;:::o;39547:20::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;24888:155::-;24983:52;25002:12;:10;:12::i;:::-;25016:8;25026;24983:18;:52::i;:::-;24888:155;;:::o;40162:91::-;40216:31;40222:10;40234:3;40239:7;40216:5;:31::i;:::-;40162:91;;:::o;39614:39::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;25115:168::-;25214:4;25238:18;:27;25257:7;25238:27;;;;;;;;;;;;;;;:37;25266:8;25238:37;;;;;;;;;;;;;;;;;;;;;;;;;25231:44;;25115:168;;;;:::o;25355:401::-;25571:12;:10;:12::i;:::-;25563:20;;:4;:20;;;:60;;;;25587:36;25604:4;25610:12;:10;:12::i;:::-;25587:16;:36::i;:::-;25563:60;25541:151;;;;;;;;;;;;:::i;:::-;;;;;;;;;25703:45;25721:4;25727:2;25731;25735:6;25743:4;25703:17;:45::i;:::-;25355:401;;;;;:::o;2996:201::-;2318:12;:10;:12::i;:::-;2307:23;;:7;:5;:7::i;:::-;:23;;;2299:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3105:1:::1;3085:22;;:8;:22;;;;3077:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;3161:28;3180:8;3161:18;:28::i;:::-;2996:201:::0;:::o;13999:157::-;14084:4;14123:25;14108:40;;;:11;:40;;;;14101:47;;13999:157;;;:::o;758:98::-;811:7;838:10;831:17;;758:98;:::o;30535:729::-;30702:1;30688:16;;:2;:16;;;;30680:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;30755:16;30774:12;:10;:12::i;:::-;30755:31;;30797:20;30820:21;30838:2;30820:17;:21::i;:::-;30797:44;;30852:24;30879:25;30897:6;30879:17;:25::i;:::-;30852:52;;30917:66;30938:8;30956:1;30960:2;30964:3;30969:7;30978:4;30917:20;:66::i;:::-;31017:6;30996:9;:13;31006:2;30996:13;;;;;;;;;;;:17;31010:2;30996:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;31076:2;31039:52;;31072:1;31039:52;;31054:8;31039:52;;;31080:2;31084:6;31039:52;;;;;;;:::i;:::-;;;;;;;;31104:65;31124:8;31142:1;31146:2;31150:3;31155:7;31164:4;31104:19;:65::i;:::-;31182:74;31213:8;31231:1;31235:2;31239;31243:6;31251:4;31182:30;:74::i;:::-;30669:595;;;30535:729;;;;:::o;28071:1146::-;28298:7;:14;28284:3;:10;:28;28276:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;28390:1;28376:16;;:2;:16;;;;28368:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;28447:16;28466:12;:10;:12::i;:::-;28447:31;;28491:60;28512:8;28522:4;28528:2;28532:3;28537:7;28546:4;28491:20;:60::i;:::-;28569:9;28564:421;28588:3;:10;28584:1;:14;28564:421;;;28620:10;28633:3;28637:1;28633:6;;;;;;;;:::i;:::-;;;;;;;;28620:19;;28654:14;28671:7;28679:1;28671:10;;;;;;;;:::i;:::-;;;;;;;;28654:27;;28698:19;28720:9;:13;28730:2;28720:13;;;;;;;;;;;:19;28734:4;28720:19;;;;;;;;;;;;;;;;28698:41;;28777:6;28762:11;:21;;28754:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;28910:6;28896:11;:20;28874:9;:13;28884:2;28874:13;;;;;;;;;;;:19;28888:4;28874:19;;;;;;;;;;;;;;;:42;;;;28967:6;28946:9;:13;28956:2;28946:13;;;;;;;;;;;:17;28960:2;28946:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;28605:380;;;28600:3;;;;:::i;:::-;;;28564:421;;;;29032:2;29002:47;;29026:4;29002:47;;29016:8;29002:47;;;29036:3;29041:7;29002:47;;;;;;;:::i;:::-;;;;;;;;29062:59;29082:8;29092:4;29098:2;29102:3;29107:7;29116:4;29062:19;:59::i;:::-;29134:75;29170:8;29180:4;29186:2;29190:3;29195:7;29204:4;29134:35;:75::i;:::-;28265:952;28071:1146;;;;;:::o;33836:969::-;34004:1;33988:18;;:4;:18;;;;33980:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;34079:7;:14;34065:3;:10;:28;34057:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;34151:16;34170:12;:10;:12::i;:::-;34151:31;;34195:66;34216:8;34226:4;34240:1;34244:3;34249:7;34195:66;;;;;;;;;;;;:20;:66::i;:::-;34279:9;34274:373;34298:3;:10;34294:1;:14;34274:373;;;34330:10;34343:3;34347:1;34343:6;;;;;;;;:::i;:::-;;;;;;;;34330:19;;34364:14;34381:7;34389:1;34381:10;;;;;;;;:::i;:::-;;;;;;;;34364:27;;34408:19;34430:9;:13;34440:2;34430:13;;;;;;;;;;;:19;34444:4;34430:19;;;;;;;;;;;;;;;;34408:41;;34487:6;34472:11;:21;;34464:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;34614:6;34600:11;:20;34578:9;:13;34588:2;34578:13;;;;;;;;;;;:19;34592:4;34578:19;;;;;;;;;;;;;;;:42;;;;34315:332;;;34310:3;;;;;:::i;:::-;;;;34274:373;;;;34702:1;34664:55;;34688:4;34664:55;;34678:8;34664:55;;;34706:3;34711:7;34664:55;;;;;;;:::i;:::-;;;;;;;;34732:65;34752:8;34762:4;34776:1;34780:3;34785:7;34732:65;;;;;;;;;;;;:19;:65::i;:::-;33969:836;33836:969;;;:::o;31667:813::-;31859:1;31845:16;;:2;:16;;;;31837:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;31932:7;:14;31918:3;:10;:28;31910:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;32004:16;32023:12;:10;:12::i;:::-;32004:31;;32048:66;32069:8;32087:1;32091:2;32095:3;32100:7;32109:4;32048:20;:66::i;:::-;32132:9;32127:103;32151:3;:10;32147:1;:14;32127:103;;;32208:7;32216:1;32208:10;;;;;;;;:::i;:::-;;;;;;;;32183:9;:17;32193:3;32197:1;32193:6;;;;;;;;:::i;:::-;;;;;;;;32183:17;;;;;;;;;;;:21;32201:2;32183:21;;;;;;;;;;;;;;;;:35;;;;;;;:::i;:::-;;;;;;;;32163:3;;;;;:::i;:::-;;;;32127:103;;;;32283:2;32247:53;;32279:1;32247:53;;32261:8;32247:53;;;32287:3;32292:7;32247:53;;;;;;;:::i;:::-;;;;;;;;32313:65;32333:8;32351:1;32355:2;32359:3;32364:7;32373:4;32313:19;:65::i;:::-;32391:81;32427:8;32445:1;32449:2;32453:3;32458:7;32467:4;32391:35;:81::i;:::-;31826:654;31667:813;;;;:::o;3357:191::-;3431:16;3450:6;;;;;;;;;;;3431:25;;3476:8;3467:6;;:17;;;;;;;;;;;;;;;;;;3531:8;3500:40;;3521:8;3500:40;;;;;;;;;;;;3420:128;3357:191;:::o;34948:331::-;35103:8;35094:17;;:5;:17;;;;35086:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;35206:8;35168:18;:25;35187:5;35168:25;;;;;;;;;;;;;;;:35;35194:8;35168:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;35252:8;35230:41;;35245:5;35230:41;;;35262:8;35230:41;;;;;;:::i;:::-;;;;;;;;34948:331;;;:::o;32778:808::-;32921:1;32905:18;;:4;:18;;;;32897:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;32976:16;32995:12;:10;:12::i;:::-;32976:31;;33018:20;33041:21;33059:2;33041:17;:21::i;:::-;33018:44;;33073:24;33100:25;33118:6;33100:17;:25::i;:::-;33073:52;;33138:66;33159:8;33169:4;33183:1;33187:3;33192:7;33138:66;;;;;;;;;;;;:20;:66::i;:::-;33217:19;33239:9;:13;33249:2;33239:13;;;;;;;;;;;:19;33253:4;33239:19;;;;;;;;;;;;;;;;33217:41;;33292:6;33277:11;:21;;33269:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;33411:6;33397:11;:20;33375:9;:13;33385:2;33375:13;;;;;;;;;;;:19;33389:4;33375:19;;;;;;;;;;;;;;;:42;;;;33485:1;33446:54;;33471:4;33446:54;;33461:8;33446:54;;;33489:2;33493:6;33446:54;;;;;;;:::i;:::-;;;;;;;;33513:65;33533:8;33543:4;33557:1;33561:3;33566:7;33513:65;;;;;;;;;;;;:19;:65::i;:::-;32886:700;;;;32778:808;;;:::o;26739:974::-;26941:1;26927:16;;:2;:16;;;;26919:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;26998:16;27017:12;:10;:12::i;:::-;26998:31;;27040:20;27063:21;27081:2;27063:17;:21::i;:::-;27040:44;;27095:24;27122:25;27140:6;27122:17;:25::i;:::-;27095:52;;27160:60;27181:8;27191:4;27197:2;27201:3;27206:7;27215:4;27160:20;:60::i;:::-;27233:19;27255:9;:13;27265:2;27255:13;;;;;;;;;;;:19;27269:4;27255:19;;;;;;;;;;;;;;;;27233:41;;27308:6;27293:11;:21;;27285:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;27433:6;27419:11;:20;27397:9;:13;27407:2;27397:13;;;;;;;;;;;:19;27411:4;27397:19;;;;;;;;;;;;;;;:42;;;;27482:6;27461:9;:13;27471:2;27461:13;;;;;;;;;;;:17;27475:2;27461:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;27537:2;27506:46;;27531:4;27506:46;;27521:8;27506:46;;;27541:2;27545:6;27506:46;;;;;;;:::i;:::-;;;;;;;;27565:59;27585:8;27595:4;27601:2;27605:3;27610:7;27619:4;27565:19;:59::i;:::-;27637:68;27668:8;27678:4;27684:2;27688;27692:6;27700:4;27637:30;:68::i;:::-;26908:805;;;;26739:974;;;;;:::o;39214:198::-;39280:16;39309:22;39348:1;39334:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39309:41;;39372:7;39361:5;39367:1;39361:8;;;;;;;;:::i;:::-;;;;;;;:18;;;;;39399:5;39392:12;;;39214:198;;;:::o;36237:221::-;;;;;;;:::o;37413:220::-;;;;;;;:::o;37641:744::-;37856:15;:2;:13;;;:15::i;:::-;37852:526;;;37909:2;37892:38;;;37931:8;37941:4;37947:2;37951:6;37959:4;37892:72;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;37888:479;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;38240:6;38233:14;;;;;;;;;;;:::i;:::-;;;;;;;;37888:479;;;38289:62;;;;;;;;;;:::i;:::-;;;;;;;;37888:479;38026:43;;;38014:55;;;:8;:55;;;;38010:154;;38094:50;;;;;;;;;;:::i;:::-;;;;;;;;38010:154;37965:214;37852:526;37641:744;;;;;;:::o;38393:813::-;38633:15;:2;:13;;;:15::i;:::-;38629:570;;;38686:2;38669:43;;;38713:8;38723:4;38729:3;38734:7;38743:4;38669:79;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;38665:523;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;39061:6;39054:14;;;;;;;;;;;:::i;:::-;;;;;;;;38665:523;;;39110:62;;;;;;;;;;:::i;:::-;;;;;;;;38665:523;38842:48;;;38830:60;;;:8;:60;;;;38826:159;;38915:50;;;;;;;;;;:::i;:::-;;;;;;;;38826:159;38749:251;38629:570;38393:813;;;;;;:::o;4841:326::-;4901:4;5158:1;5136:7;:19;;;:23;5129:30;;4841:326;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;769:::-;865:5;890:81;906:64;963:6;906:64;:::i;:::-;890:81;:::i;:::-;881:90;;991:5;1020:6;1013:5;1006:21;1054:4;1047:5;1043:16;1036:23;;1080:6;1130:3;1122:4;1114:6;1110:17;1105:3;1101:27;1098:36;1095:143;;;1149:79;;:::i;:::-;1095:143;1262:1;1247:238;1272:6;1269:1;1266:13;1247:238;;;1340:3;1369:37;1402:3;1390:10;1369:37;:::i;:::-;1364:3;1357:50;1436:4;1431:3;1427:14;1420:21;;1470:4;1465:3;1461:14;1454:21;;1307:178;1294:1;1291;1287:9;1282:14;;1247:238;;;1251:14;871:620;;769:722;;;;;:::o;1497:410::-;1574:5;1599:65;1615:48;1656:6;1615:48;:::i;:::-;1599:65;:::i;:::-;1590:74;;1687:6;1680:5;1673:21;1725:4;1718:5;1714:16;1763:3;1754:6;1749:3;1745:16;1742:25;1739:112;;;1770:79;;:::i;:::-;1739:112;1860:41;1894:6;1889:3;1884;1860:41;:::i;:::-;1580:327;1497:410;;;;;:::o;1913:412::-;1991:5;2016:66;2032:49;2074:6;2032:49;:::i;:::-;2016:66;:::i;:::-;2007:75;;2105:6;2098:5;2091:21;2143:4;2136:5;2132:16;2181:3;2172:6;2167:3;2163:16;2160:25;2157:112;;;2188:79;;:::i;:::-;2157:112;2278:41;2312:6;2307:3;2302;2278:41;:::i;:::-;1997:328;1913:412;;;;;:::o;2331:139::-;2377:5;2415:6;2402:20;2393:29;;2431:33;2458:5;2431:33;:::i;:::-;2331:139;;;;:::o;2493:370::-;2564:5;2613:3;2606:4;2598:6;2594:17;2590:27;2580:122;;2621:79;;:::i;:::-;2580:122;2738:6;2725:20;2763:94;2853:3;2845:6;2838:4;2830:6;2826:17;2763:94;:::i;:::-;2754:103;;2570:293;2493:370;;;;:::o;2886:::-;2957:5;3006:3;2999:4;2991:6;2987:17;2983:27;2973:122;;3014:79;;:::i;:::-;2973:122;3131:6;3118:20;3156:94;3246:3;3238:6;3231:4;3223:6;3219:17;3156:94;:::i;:::-;3147:103;;2963:293;2886:370;;;;:::o;3262:133::-;3305:5;3343:6;3330:20;3321:29;;3359:30;3383:5;3359:30;:::i;:::-;3262:133;;;;:::o;3401:137::-;3446:5;3484:6;3471:20;3462:29;;3500:32;3526:5;3500:32;:::i;:::-;3401:137;;;;:::o;3544:141::-;3600:5;3631:6;3625:13;3616:22;;3647:32;3673:5;3647:32;:::i;:::-;3544:141;;;;:::o;3704:338::-;3759:5;3808:3;3801:4;3793:6;3789:17;3785:27;3775:122;;3816:79;;:::i;:::-;3775:122;3933:6;3920:20;3958:78;4032:3;4024:6;4017:4;4009:6;4005:17;3958:78;:::i;:::-;3949:87;;3765:277;3704:338;;;;:::o;4062:340::-;4118:5;4167:3;4160:4;4152:6;4148:17;4144:27;4134:122;;4175:79;;:::i;:::-;4134:122;4292:6;4279:20;4317:79;4392:3;4384:6;4377:4;4369:6;4365:17;4317:79;:::i;:::-;4308:88;;4124:278;4062:340;;;;:::o;4408:139::-;4454:5;4492:6;4479:20;4470:29;;4508:33;4535:5;4508:33;:::i;:::-;4408:139;;;;:::o;4553:329::-;4612:6;4661:2;4649:9;4640:7;4636:23;4632:32;4629:119;;;4667:79;;:::i;:::-;4629:119;4787:1;4812:53;4857:7;4848:6;4837:9;4833:22;4812:53;:::i;:::-;4802:63;;4758:117;4553:329;;;;:::o;4888:474::-;4956:6;4964;5013:2;5001:9;4992:7;4988:23;4984:32;4981:119;;;5019:79;;:::i;:::-;4981:119;5139:1;5164:53;5209:7;5200:6;5189:9;5185:22;5164:53;:::i;:::-;5154:63;;5110:117;5266:2;5292:53;5337:7;5328:6;5317:9;5313:22;5292:53;:::i;:::-;5282:63;;5237:118;4888:474;;;;;:::o;5368:1509::-;5522:6;5530;5538;5546;5554;5603:3;5591:9;5582:7;5578:23;5574:33;5571:120;;;5610:79;;:::i;:::-;5571:120;5730:1;5755:53;5800:7;5791:6;5780:9;5776:22;5755:53;:::i;:::-;5745:63;;5701:117;5857:2;5883:53;5928:7;5919:6;5908:9;5904:22;5883:53;:::i;:::-;5873:63;;5828:118;6013:2;6002:9;5998:18;5985:32;6044:18;6036:6;6033:30;6030:117;;;6066:79;;:::i;:::-;6030:117;6171:78;6241:7;6232:6;6221:9;6217:22;6171:78;:::i;:::-;6161:88;;5956:303;6326:2;6315:9;6311:18;6298:32;6357:18;6349:6;6346:30;6343:117;;;6379:79;;:::i;:::-;6343:117;6484:78;6554:7;6545:6;6534:9;6530:22;6484:78;:::i;:::-;6474:88;;6269:303;6639:3;6628:9;6624:19;6611:33;6671:18;6663:6;6660:30;6657:117;;;6693:79;;:::i;:::-;6657:117;6798:62;6852:7;6843:6;6832:9;6828:22;6798:62;:::i;:::-;6788:72;;6582:288;5368:1509;;;;;;;;:::o;6883:1089::-;6987:6;6995;7003;7011;7019;7068:3;7056:9;7047:7;7043:23;7039:33;7036:120;;;7075:79;;:::i;:::-;7036:120;7195:1;7220:53;7265:7;7256:6;7245:9;7241:22;7220:53;:::i;:::-;7210:63;;7166:117;7322:2;7348:53;7393:7;7384:6;7373:9;7369:22;7348:53;:::i;:::-;7338:63;;7293:118;7450:2;7476:53;7521:7;7512:6;7501:9;7497:22;7476:53;:::i;:::-;7466:63;;7421:118;7578:2;7604:53;7649:7;7640:6;7629:9;7625:22;7604:53;:::i;:::-;7594:63;;7549:118;7734:3;7723:9;7719:19;7706:33;7766:18;7758:6;7755:30;7752:117;;;7788:79;;:::i;:::-;7752:117;7893:62;7947:7;7938:6;7927:9;7923:22;7893:62;:::i;:::-;7883:72;;7677:288;6883:1089;;;;;;;;:::o;7978:1751::-;8173:6;8181;8189;8197;8205;8254:3;8242:9;8233:7;8229:23;8225:33;8222:120;;;8261:79;;:::i;:::-;8222:120;8381:1;8406:53;8451:7;8442:6;8431:9;8427:22;8406:53;:::i;:::-;8396:63;;8352:117;8536:2;8525:9;8521:18;8508:32;8567:18;8559:6;8556:30;8553:117;;;8589:79;;:::i;:::-;8553:117;8694:78;8764:7;8755:6;8744:9;8740:22;8694:78;:::i;:::-;8684:88;;8479:303;8849:2;8838:9;8834:18;8821:32;8880:18;8872:6;8869:30;8866:117;;;8902:79;;:::i;:::-;8866:117;9007:78;9077:7;9068:6;9057:9;9053:22;9007:78;:::i;:::-;8997:88;;8792:303;9162:2;9151:9;9147:18;9134:32;9193:18;9185:6;9182:30;9179:117;;;9215:79;;:::i;:::-;9179:117;9320:78;9390:7;9381:6;9370:9;9366:22;9320:78;:::i;:::-;9310:88;;9105:303;9475:3;9464:9;9460:19;9447:33;9507:18;9499:6;9496:30;9493:117;;;9529:79;;:::i;:::-;9493:117;9634:78;9704:7;9695:6;9684:9;9680:22;9634:78;:::i;:::-;9624:88;;9418:304;7978:1751;;;;;;;;:::o;9735:468::-;9800:6;9808;9857:2;9845:9;9836:7;9832:23;9828:32;9825:119;;;9863:79;;:::i;:::-;9825:119;9983:1;10008:53;10053:7;10044:6;10033:9;10029:22;10008:53;:::i;:::-;9998:63;;9954:117;10110:2;10136:50;10178:7;10169:6;10158:9;10154:22;10136:50;:::i;:::-;10126:60;;10081:115;9735:468;;;;;:::o;10209:474::-;10277:6;10285;10334:2;10322:9;10313:7;10309:23;10305:32;10302:119;;;10340:79;;:::i;:::-;10302:119;10460:1;10485:53;10530:7;10521:6;10510:9;10506:22;10485:53;:::i;:::-;10475:63;;10431:117;10587:2;10613:53;10658:7;10649:6;10638:9;10634:22;10613:53;:::i;:::-;10603:63;;10558:118;10209:474;;;;;:::o;10689:619::-;10766:6;10774;10782;10831:2;10819:9;10810:7;10806:23;10802:32;10799:119;;;10837:79;;:::i;:::-;10799:119;10957:1;10982:53;11027:7;11018:6;11007:9;11003:22;10982:53;:::i;:::-;10972:63;;10928:117;11084:2;11110:53;11155:7;11146:6;11135:9;11131:22;11110:53;:::i;:::-;11100:63;;11055:118;11212:2;11238:53;11283:7;11274:6;11263:9;11259:22;11238:53;:::i;:::-;11228:63;;11183:118;10689:619;;;;;:::o;11314:894::-;11432:6;11440;11489:2;11477:9;11468:7;11464:23;11460:32;11457:119;;;11495:79;;:::i;:::-;11457:119;11643:1;11632:9;11628:17;11615:31;11673:18;11665:6;11662:30;11659:117;;;11695:79;;:::i;:::-;11659:117;11800:78;11870:7;11861:6;11850:9;11846:22;11800:78;:::i;:::-;11790:88;;11586:302;11955:2;11944:9;11940:18;11927:32;11986:18;11978:6;11975:30;11972:117;;;12008:79;;:::i;:::-;11972:117;12113:78;12183:7;12174:6;12163:9;12159:22;12113:78;:::i;:::-;12103:88;;11898:303;11314:894;;;;;:::o;12214:684::-;12307:6;12315;12364:2;12352:9;12343:7;12339:23;12335:32;12332:119;;;12370:79;;:::i;:::-;12332:119;12518:1;12507:9;12503:17;12490:31;12548:18;12540:6;12537:30;12534:117;;;12570:79;;:::i;:::-;12534:117;12675:78;12745:7;12736:6;12725:9;12721:22;12675:78;:::i;:::-;12665:88;;12461:302;12802:2;12828:53;12873:7;12864:6;12853:9;12849:22;12828:53;:::i;:::-;12818:63;;12773:118;12214:684;;;;;:::o;12904:894::-;13022:6;13030;13079:2;13067:9;13058:7;13054:23;13050:32;13047:119;;;13085:79;;:::i;:::-;13047:119;13233:1;13222:9;13218:17;13205:31;13263:18;13255:6;13252:30;13249:117;;;13285:79;;:::i;:::-;13249:117;13390:78;13460:7;13451:6;13440:9;13436:22;13390:78;:::i;:::-;13380:88;;13176:302;13545:2;13534:9;13530:18;13517:32;13576:18;13568:6;13565:30;13562:117;;;13598:79;;:::i;:::-;13562:117;13703:78;13773:7;13764:6;13753:9;13749:22;13703:78;:::i;:::-;13693:88;;13488:303;12904:894;;;;;:::o;13804:327::-;13862:6;13911:2;13899:9;13890:7;13886:23;13882:32;13879:119;;;13917:79;;:::i;:::-;13879:119;14037:1;14062:52;14106:7;14097:6;14086:9;14082:22;14062:52;:::i;:::-;14052:62;;14008:116;13804:327;;;;:::o;14137:349::-;14206:6;14255:2;14243:9;14234:7;14230:23;14226:32;14223:119;;;14261:79;;:::i;:::-;14223:119;14381:1;14406:63;14461:7;14452:6;14441:9;14437:22;14406:63;:::i;:::-;14396:73;;14352:127;14137:349;;;;:::o;14492:329::-;14551:6;14600:2;14588:9;14579:7;14575:23;14571:32;14568:119;;;14606:79;;:::i;:::-;14568:119;14726:1;14751:53;14796:7;14787:6;14776:9;14772:22;14751:53;:::i;:::-;14741:63;;14697:117;14492:329;;;;:::o;14827:654::-;14905:6;14913;14962:2;14950:9;14941:7;14937:23;14933:32;14930:119;;;14968:79;;:::i;:::-;14930:119;15088:1;15113:53;15158:7;15149:6;15138:9;15134:22;15113:53;:::i;:::-;15103:63;;15059:117;15243:2;15232:9;15228:18;15215:32;15274:18;15266:6;15263:30;15260:117;;;15296:79;;:::i;:::-;15260:117;15401:63;15456:7;15447:6;15436:9;15432:22;15401:63;:::i;:::-;15391:73;;15186:288;14827:654;;;;;:::o;15487:474::-;15555:6;15563;15612:2;15600:9;15591:7;15587:23;15583:32;15580:119;;;15618:79;;:::i;:::-;15580:119;15738:1;15763:53;15808:7;15799:6;15788:9;15784:22;15763:53;:::i;:::-;15753:63;;15709:117;15865:2;15891:53;15936:7;15927:6;15916:9;15912:22;15891:53;:::i;:::-;15881:63;;15836:118;15487:474;;;;;:::o;15967:179::-;16036:10;16057:46;16099:3;16091:6;16057:46;:::i;:::-;16135:4;16130:3;16126:14;16112:28;;15967:179;;;;:::o;16152:118::-;16239:24;16257:5;16239:24;:::i;:::-;16234:3;16227:37;16152:118;;:::o;16306:732::-;16425:3;16454:54;16502:5;16454:54;:::i;:::-;16524:86;16603:6;16598:3;16524:86;:::i;:::-;16517:93;;16634:56;16684:5;16634:56;:::i;:::-;16713:7;16744:1;16729:284;16754:6;16751:1;16748:13;16729:284;;;16830:6;16824:13;16857:63;16916:3;16901:13;16857:63;:::i;:::-;16850:70;;16943:60;16996:6;16943:60;:::i;:::-;16933:70;;16789:224;16776:1;16773;16769:9;16764:14;;16729:284;;;16733:14;17029:3;17022:10;;16430:608;;;16306:732;;;;:::o;17044:109::-;17125:21;17140:5;17125:21;:::i;:::-;17120:3;17113:34;17044:109;;:::o;17159:360::-;17245:3;17273:38;17305:5;17273:38;:::i;:::-;17327:70;17390:6;17385:3;17327:70;:::i;:::-;17320:77;;17406:52;17451:6;17446:3;17439:4;17432:5;17428:16;17406:52;:::i;:::-;17483:29;17505:6;17483:29;:::i;:::-;17478:3;17474:39;17467:46;;17249:270;17159:360;;;;:::o;17525:364::-;17613:3;17641:39;17674:5;17641:39;:::i;:::-;17696:71;17760:6;17755:3;17696:71;:::i;:::-;17689:78;;17776:52;17821:6;17816:3;17809:4;17802:5;17798:16;17776:52;:::i;:::-;17853:29;17875:6;17853:29;:::i;:::-;17848:3;17844:39;17837:46;;17617:272;17525:364;;;;:::o;17895:366::-;18037:3;18058:67;18122:2;18117:3;18058:67;:::i;:::-;18051:74;;18134:93;18223:3;18134:93;:::i;:::-;18252:2;18247:3;18243:12;18236:19;;17895:366;;;:::o;18267:::-;18409:3;18430:67;18494:2;18489:3;18430:67;:::i;:::-;18423:74;;18506:93;18595:3;18506:93;:::i;:::-;18624:2;18619:3;18615:12;18608:19;;18267:366;;;:::o;18639:::-;18781:3;18802:67;18866:2;18861:3;18802:67;:::i;:::-;18795:74;;18878:93;18967:3;18878:93;:::i;:::-;18996:2;18991:3;18987:12;18980:19;;18639:366;;;:::o;19011:::-;19153:3;19174:67;19238:2;19233:3;19174:67;:::i;:::-;19167:74;;19250:93;19339:3;19250:93;:::i;:::-;19368:2;19363:3;19359:12;19352:19;;19011:366;;;:::o;19383:::-;19525:3;19546:67;19610:2;19605:3;19546:67;:::i;:::-;19539:74;;19622:93;19711:3;19622:93;:::i;:::-;19740:2;19735:3;19731:12;19724:19;;19383:366;;;:::o;19755:::-;19897:3;19918:67;19982:2;19977:3;19918:67;:::i;:::-;19911:74;;19994:93;20083:3;19994:93;:::i;:::-;20112:2;20107:3;20103:12;20096:19;;19755:366;;;:::o;20127:::-;20269:3;20290:67;20354:2;20349:3;20290:67;:::i;:::-;20283:74;;20366:93;20455:3;20366:93;:::i;:::-;20484:2;20479:3;20475:12;20468:19;;20127:366;;;:::o;20499:::-;20641:3;20662:67;20726:2;20721:3;20662:67;:::i;:::-;20655:74;;20738:93;20827:3;20738:93;:::i;:::-;20856:2;20851:3;20847:12;20840:19;;20499:366;;;:::o;20871:::-;21013:3;21034:67;21098:2;21093:3;21034:67;:::i;:::-;21027:74;;21110:93;21199:3;21110:93;:::i;:::-;21228:2;21223:3;21219:12;21212:19;;20871:366;;;:::o;21243:::-;21385:3;21406:67;21470:2;21465:3;21406:67;:::i;:::-;21399:74;;21482:93;21571:3;21482:93;:::i;:::-;21600:2;21595:3;21591:12;21584:19;;21243:366;;;:::o;21615:::-;21757:3;21778:67;21842:2;21837:3;21778:67;:::i;:::-;21771:74;;21854:93;21943:3;21854:93;:::i;:::-;21972:2;21967:3;21963:12;21956:19;;21615:366;;;:::o;21987:::-;22129:3;22150:67;22214:2;22209:3;22150:67;:::i;:::-;22143:74;;22226:93;22315:3;22226:93;:::i;:::-;22344:2;22339:3;22335:12;22328:19;;21987:366;;;:::o;22359:::-;22501:3;22522:67;22586:2;22581:3;22522:67;:::i;:::-;22515:74;;22598:93;22687:3;22598:93;:::i;:::-;22716:2;22711:3;22707:12;22700:19;;22359:366;;;:::o;22731:::-;22873:3;22894:67;22958:2;22953:3;22894:67;:::i;:::-;22887:74;;22970:93;23059:3;22970:93;:::i;:::-;23088:2;23083:3;23079:12;23072:19;;22731:366;;;:::o;23103:::-;23245:3;23266:67;23330:2;23325:3;23266:67;:::i;:::-;23259:74;;23342:93;23431:3;23342:93;:::i;:::-;23460:2;23455:3;23451:12;23444:19;;23103:366;;;:::o;23475:108::-;23552:24;23570:5;23552:24;:::i;:::-;23547:3;23540:37;23475:108;;:::o;23589:118::-;23676:24;23694:5;23676:24;:::i;:::-;23671:3;23664:37;23589:118;;:::o;23713:222::-;23806:4;23844:2;23833:9;23829:18;23821:26;;23857:71;23925:1;23914:9;23910:17;23901:6;23857:71;:::i;:::-;23713:222;;;;:::o;23941:1053::-;24264:4;24302:3;24291:9;24287:19;24279:27;;24316:71;24384:1;24373:9;24369:17;24360:6;24316:71;:::i;:::-;24397:72;24465:2;24454:9;24450:18;24441:6;24397:72;:::i;:::-;24516:9;24510:4;24506:20;24501:2;24490:9;24486:18;24479:48;24544:108;24647:4;24638:6;24544:108;:::i;:::-;24536:116;;24699:9;24693:4;24689:20;24684:2;24673:9;24669:18;24662:48;24727:108;24830:4;24821:6;24727:108;:::i;:::-;24719:116;;24883:9;24877:4;24873:20;24867:3;24856:9;24852:19;24845:49;24911:76;24982:4;24973:6;24911:76;:::i;:::-;24903:84;;23941:1053;;;;;;;;:::o;25000:751::-;25223:4;25261:3;25250:9;25246:19;25238:27;;25275:71;25343:1;25332:9;25328:17;25319:6;25275:71;:::i;:::-;25356:72;25424:2;25413:9;25409:18;25400:6;25356:72;:::i;:::-;25438;25506:2;25495:9;25491:18;25482:6;25438:72;:::i;:::-;25520;25588:2;25577:9;25573:18;25564:6;25520:72;:::i;:::-;25640:9;25634:4;25630:20;25624:3;25613:9;25609:19;25602:49;25668:76;25739:4;25730:6;25668:76;:::i;:::-;25660:84;;25000:751;;;;;;;;:::o;25757:373::-;25900:4;25938:2;25927:9;25923:18;25915:26;;25987:9;25981:4;25977:20;25973:1;25962:9;25958:17;25951:47;26015:108;26118:4;26109:6;26015:108;:::i;:::-;26007:116;;25757:373;;;;:::o;26136:634::-;26357:4;26395:2;26384:9;26380:18;26372:26;;26444:9;26438:4;26434:20;26430:1;26419:9;26415:17;26408:47;26472:108;26575:4;26566:6;26472:108;:::i;:::-;26464:116;;26627:9;26621:4;26617:20;26612:2;26601:9;26597:18;26590:48;26655:108;26758:4;26749:6;26655:108;:::i;:::-;26647:116;;26136:634;;;;;:::o;26776:210::-;26863:4;26901:2;26890:9;26886:18;26878:26;;26914:65;26976:1;26965:9;26961:17;26952:6;26914:65;:::i;:::-;26776:210;;;;:::o;26992:313::-;27105:4;27143:2;27132:9;27128:18;27120:26;;27192:9;27186:4;27182:20;27178:1;27167:9;27163:17;27156:47;27220:78;27293:4;27284:6;27220:78;:::i;:::-;27212:86;;26992:313;;;;:::o;27311:419::-;27477:4;27515:2;27504:9;27500:18;27492:26;;27564:9;27558:4;27554:20;27550:1;27539:9;27535:17;27528:47;27592:131;27718:4;27592:131;:::i;:::-;27584:139;;27311:419;;;:::o;27736:::-;27902:4;27940:2;27929:9;27925:18;27917:26;;27989:9;27983:4;27979:20;27975:1;27964:9;27960:17;27953:47;28017:131;28143:4;28017:131;:::i;:::-;28009:139;;27736:419;;;:::o;28161:::-;28327:4;28365:2;28354:9;28350:18;28342:26;;28414:9;28408:4;28404:20;28400:1;28389:9;28385:17;28378:47;28442:131;28568:4;28442:131;:::i;:::-;28434:139;;28161:419;;;:::o;28586:::-;28752:4;28790:2;28779:9;28775:18;28767:26;;28839:9;28833:4;28829:20;28825:1;28814:9;28810:17;28803:47;28867:131;28993:4;28867:131;:::i;:::-;28859:139;;28586:419;;;:::o;29011:::-;29177:4;29215:2;29204:9;29200:18;29192:26;;29264:9;29258:4;29254:20;29250:1;29239:9;29235:17;29228:47;29292:131;29418:4;29292:131;:::i;:::-;29284:139;;29011:419;;;:::o;29436:::-;29602:4;29640:2;29629:9;29625:18;29617:26;;29689:9;29683:4;29679:20;29675:1;29664:9;29660:17;29653:47;29717:131;29843:4;29717:131;:::i;:::-;29709:139;;29436:419;;;:::o;29861:::-;30027:4;30065:2;30054:9;30050:18;30042:26;;30114:9;30108:4;30104:20;30100:1;30089:9;30085:17;30078:47;30142:131;30268:4;30142:131;:::i;:::-;30134:139;;29861:419;;;:::o;30286:::-;30452:4;30490:2;30479:9;30475:18;30467:26;;30539:9;30533:4;30529:20;30525:1;30514:9;30510:17;30503:47;30567:131;30693:4;30567:131;:::i;:::-;30559:139;;30286:419;;;:::o;30711:::-;30877:4;30915:2;30904:9;30900:18;30892:26;;30964:9;30958:4;30954:20;30950:1;30939:9;30935:17;30928:47;30992:131;31118:4;30992:131;:::i;:::-;30984:139;;30711:419;;;:::o;31136:::-;31302:4;31340:2;31329:9;31325:18;31317:26;;31389:9;31383:4;31379:20;31375:1;31364:9;31360:17;31353:47;31417:131;31543:4;31417:131;:::i;:::-;31409:139;;31136:419;;;:::o;31561:::-;31727:4;31765:2;31754:9;31750:18;31742:26;;31814:9;31808:4;31804:20;31800:1;31789:9;31785:17;31778:47;31842:131;31968:4;31842:131;:::i;:::-;31834:139;;31561:419;;;:::o;31986:::-;32152:4;32190:2;32179:9;32175:18;32167:26;;32239:9;32233:4;32229:20;32225:1;32214:9;32210:17;32203:47;32267:131;32393:4;32267:131;:::i;:::-;32259:139;;31986:419;;;:::o;32411:::-;32577:4;32615:2;32604:9;32600:18;32592:26;;32664:9;32658:4;32654:20;32650:1;32639:9;32635:17;32628:47;32692:131;32818:4;32692:131;:::i;:::-;32684:139;;32411:419;;;:::o;32836:::-;33002:4;33040:2;33029:9;33025:18;33017:26;;33089:9;33083:4;33079:20;33075:1;33064:9;33060:17;33053:47;33117:131;33243:4;33117:131;:::i;:::-;33109:139;;32836:419;;;:::o;33261:::-;33427:4;33465:2;33454:9;33450:18;33442:26;;33514:9;33508:4;33504:20;33500:1;33489:9;33485:17;33478:47;33542:131;33668:4;33542:131;:::i;:::-;33534:139;;33261:419;;;:::o;33686:222::-;33779:4;33817:2;33806:9;33802:18;33794:26;;33830:71;33898:1;33887:9;33883:17;33874:6;33830:71;:::i;:::-;33686:222;;;;:::o;33914:332::-;34035:4;34073:2;34062:9;34058:18;34050:26;;34086:71;34154:1;34143:9;34139:17;34130:6;34086:71;:::i;:::-;34167:72;34235:2;34224:9;34220:18;34211:6;34167:72;:::i;:::-;33914:332;;;;;:::o;34252:129::-;34286:6;34313:20;;:::i;:::-;34303:30;;34342:33;34370:4;34362:6;34342:33;:::i;:::-;34252:129;;;:::o;34387:75::-;34420:6;34453:2;34447:9;34437:19;;34387:75;:::o;34468:311::-;34545:4;34635:18;34627:6;34624:30;34621:56;;;34657:18;;:::i;:::-;34621:56;34707:4;34699:6;34695:17;34687:25;;34767:4;34761;34757:15;34749:23;;34468:311;;;:::o;34785:::-;34862:4;34952:18;34944:6;34941:30;34938:56;;;34974:18;;:::i;:::-;34938:56;35024:4;35016:6;35012:17;35004:25;;35084:4;35078;35074:15;35066:23;;34785:311;;;:::o;35102:307::-;35163:4;35253:18;35245:6;35242:30;35239:56;;;35275:18;;:::i;:::-;35239:56;35313:29;35335:6;35313:29;:::i;:::-;35305:37;;35397:4;35391;35387:15;35379:23;;35102:307;;;:::o;35415:308::-;35477:4;35567:18;35559:6;35556:30;35553:56;;;35589:18;;:::i;:::-;35553:56;35627:29;35649:6;35627:29;:::i;:::-;35619:37;;35711:4;35705;35701:15;35693:23;;35415:308;;;:::o;35729:132::-;35796:4;35819:3;35811:11;;35849:4;35844:3;35840:14;35832:22;;35729:132;;;:::o;35867:114::-;35934:6;35968:5;35962:12;35952:22;;35867:114;;;:::o;35987:98::-;36038:6;36072:5;36066:12;36056:22;;35987:98;;;:::o;36091:99::-;36143:6;36177:5;36171:12;36161:22;;36091:99;;;:::o;36196:113::-;36266:4;36298;36293:3;36289:14;36281:22;;36196:113;;;:::o;36315:184::-;36414:11;36448:6;36443:3;36436:19;36488:4;36483:3;36479:14;36464:29;;36315:184;;;;:::o;36505:168::-;36588:11;36622:6;36617:3;36610:19;36662:4;36657:3;36653:14;36638:29;;36505:168;;;;:::o;36679:169::-;36763:11;36797:6;36792:3;36785:19;36837:4;36832:3;36828:14;36813:29;;36679:169;;;;:::o;36854:305::-;36894:3;36913:20;36931:1;36913:20;:::i;:::-;36908:25;;36947:20;36965:1;36947:20;:::i;:::-;36942:25;;37101:1;37033:66;37029:74;37026:1;37023:81;37020:107;;;37107:18;;:::i;:::-;37020:107;37151:1;37148;37144:9;37137:16;;36854:305;;;;:::o;37165:96::-;37202:7;37231:24;37249:5;37231:24;:::i;:::-;37220:35;;37165:96;;;:::o;37267:90::-;37301:7;37344:5;37337:13;37330:21;37319:32;;37267:90;;;:::o;37363:149::-;37399:7;37439:66;37432:5;37428:78;37417:89;;37363:149;;;:::o;37518:126::-;37555:7;37595:42;37588:5;37584:54;37573:65;;37518:126;;;:::o;37650:77::-;37687:7;37716:5;37705:16;;37650:77;;;:::o;37733:154::-;37817:6;37812:3;37807;37794:30;37879:1;37870:6;37865:3;37861:16;37854:27;37733:154;;;:::o;37893:307::-;37961:1;37971:113;37985:6;37982:1;37979:13;37971:113;;;38070:1;38065:3;38061:11;38055:18;38051:1;38046:3;38042:11;38035:39;38007:2;38004:1;38000:10;37995:15;;37971:113;;;38102:6;38099:1;38096:13;38093:101;;;38182:1;38173:6;38168:3;38164:16;38157:27;38093:101;37942:258;37893:307;;;:::o;38206:320::-;38250:6;38287:1;38281:4;38277:12;38267:22;;38334:1;38328:4;38324:12;38355:18;38345:81;;38411:4;38403:6;38399:17;38389:27;;38345:81;38473:2;38465:6;38462:14;38442:18;38439:38;38436:84;;;38492:18;;:::i;:::-;38436:84;38257:269;38206:320;;;:::o;38532:281::-;38615:27;38637:4;38615:27;:::i;:::-;38607:6;38603:40;38745:6;38733:10;38730:22;38709:18;38697:10;38694:34;38691:62;38688:88;;;38756:18;;:::i;:::-;38688:88;38796:10;38792:2;38785:22;38575:238;38532:281;;:::o;38819:233::-;38858:3;38881:24;38899:5;38881:24;:::i;:::-;38872:33;;38927:66;38920:5;38917:77;38914:103;;;38997:18;;:::i;:::-;38914:103;39044:1;39037:5;39033:13;39026:20;;38819:233;;;:::o;39058:180::-;39106:77;39103:1;39096:88;39203:4;39200:1;39193:15;39227:4;39224:1;39217:15;39244:180;39292:77;39289:1;39282:88;39389:4;39386:1;39379:15;39413:4;39410:1;39403:15;39430:180;39478:77;39475:1;39468:88;39575:4;39572:1;39565:15;39599:4;39596:1;39589:15;39616:180;39664:77;39661:1;39654:88;39761:4;39758:1;39751:15;39785:4;39782:1;39775:15;39802:183;39837:3;39875:1;39857:16;39854:23;39851:128;;;39913:1;39910;39907;39892:23;39935:34;39966:1;39960:8;39935:34;:::i;:::-;39928:41;;39851:128;39802:183;:::o;39991:117::-;40100:1;40097;40090:12;40114:117;40223:1;40220;40213:12;40237:117;40346:1;40343;40336:12;40360:117;40469:1;40466;40459:12;40483:117;40592:1;40589;40582:12;40606:102;40647:6;40698:2;40694:7;40689:2;40682:5;40678:14;40674:28;40664:38;;40606:102;;;:::o;40714:106::-;40758:8;40807:5;40802:3;40798:15;40777:36;;40714:106;;;:::o;40826:239::-;40966:34;40962:1;40954:6;40950:14;40943:58;41035:22;41030:2;41022:6;41018:15;41011:47;40826:239;:::o;41071:227::-;41211:34;41207:1;41199:6;41195:14;41188:58;41280:10;41275:2;41267:6;41263:15;41256:35;41071:227;:::o;41304:225::-;41444:34;41440:1;41432:6;41428:14;41421:58;41513:8;41508:2;41500:6;41496:15;41489:33;41304:225;:::o;41535:223::-;41675:34;41671:1;41663:6;41659:14;41652:58;41744:6;41739:2;41731:6;41727:15;41720:31;41535:223;:::o;41764:228::-;41904:34;41900:1;41892:6;41888:14;41881:58;41973:11;41968:2;41960:6;41956:15;41949:36;41764:228;:::o;41998:229::-;42138:34;42134:1;42126:6;42122:14;42115:58;42207:12;42202:2;42194:6;42190:15;42183:37;41998:229;:::o;42233:224::-;42373:34;42369:1;42361:6;42357:14;42350:58;42442:7;42437:2;42429:6;42425:15;42418:32;42233:224;:::o;42463:237::-;42603:34;42599:1;42591:6;42587:14;42580:58;42672:20;42667:2;42659:6;42655:15;42648:45;42463:237;:::o;42706:222::-;42846:34;42842:1;42834:6;42830:14;42823:58;42915:5;42910:2;42902:6;42898:15;42891:30;42706:222;:::o;42934:229::-;43074:34;43070:1;43062:6;43058:14;43051:58;43143:12;43138:2;43130:6;43126:15;43119:37;42934:229;:::o;43169:182::-;43309:34;43305:1;43297:6;43293:14;43286:58;43169:182;:::o;43357:228::-;43497:34;43493:1;43485:6;43481:14;43474:58;43566:11;43561:2;43553:6;43549:15;43542:36;43357:228;:::o;43591:::-;43731:34;43727:1;43719:6;43715:14;43708:58;43800:11;43795:2;43787:6;43783:15;43776:36;43591:228;:::o;43825:227::-;43965:34;43961:1;43953:6;43949:14;43942:58;44034:10;44029:2;44021:6;44017:15;44010:35;43825:227;:::o;44058:220::-;44198:34;44194:1;44186:6;44182:14;44175:58;44267:3;44262:2;44254:6;44250:15;44243:28;44058:220;:::o;44284:711::-;44323:3;44361:4;44343:16;44340:26;44337:39;;;44369:5;;44337:39;44398:20;;:::i;:::-;44473:1;44455:16;44451:24;44448:1;44442:4;44427:49;44506:4;44500:11;44605:16;44598:4;44590:6;44586:17;44583:39;44550:18;44542:6;44539:30;44523:113;44520:146;;;44651:5;;;;44520:146;44697:6;44691:4;44687:17;44733:3;44727:10;44760:18;44752:6;44749:30;44746:43;;;44782:5;;;;;;44746:43;44830:6;44823:4;44818:3;44814:14;44810:27;44889:1;44871:16;44867:24;44861:4;44857:35;44852:3;44849:44;44846:57;;;44896:5;;;;;;;44846:57;44913;44961:6;44955:4;44951:17;44943:6;44939:30;44933:4;44913:57;:::i;:::-;44986:3;44979:10;;44327:668;;;;;44284:711;;:::o;45001:122::-;45074:24;45092:5;45074:24;:::i;:::-;45067:5;45064:35;45054:63;;45113:1;45110;45103:12;45054:63;45001:122;:::o;45129:116::-;45199:21;45214:5;45199:21;:::i;:::-;45192:5;45189:32;45179:60;;45235:1;45232;45225:12;45179:60;45129:116;:::o;45251:120::-;45323:23;45340:5;45323:23;:::i;:::-;45316:5;45313:34;45303:62;;45361:1;45358;45351:12;45303:62;45251:120;:::o;45377:122::-;45450:24;45468:5;45450:24;:::i;:::-;45443:5;45440:35;45430:63;;45489:1;45486;45479:12;45430:63;45377:122;:::o

Swarm Source

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