ETH Price: $3,459.78 (+1.21%)

Token

Ghostie - Pumpkinhead NFT ()
 

Overview

Max Total Supply

520

Holders

260

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

Filtered by Token Holder
heronft.eth
0x1398f87f6ce2c64ffdeff0f3ebfdf75bf90dd12f
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:
GhostiePumpkinhead

Compiler Version
v0.8.0+commit.c7dfd78e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

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

/**
╭━━━┳╮╱╭┳━━━┳━━━┳━━━━┳━━┳━━━╮
┃╭━╮┃┃╱┃┃╭━╮┃╭━╮┃╭╮╭╮┣┫┣┫╭━━╯
┃┃╱╰┫╰━╯┃┃╱┃┃╰━━╋╯┃┃╰╯┃┃┃╰━━╮
┃┃╭━┫╭━╮┃┃╱┃┣━━╮┃╱┃┃╱╱┃┃┃╭━━╯
┃╰┻━┃┃╱┃┃╰━╯┃╰━╯┃╱┃┃╱╭┫┣┫╰━━╮
╰━━━┻╯╱╰┻━━━┻━━━╯╱╰╯╱╰━━┻━━━╯
*/

// SPDX-License-Identifier: MIT pragma

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

/**
 * @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;
    }
}

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

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

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

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

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

/**
 * @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);
}

/**
 * @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;
    }
}

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

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

/**
 * @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;
}

/**
 * @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);
}

/**
 * @dev Implementation of the basic standard multi-token.
 * See https://eips.ethereum.org/EIPS/eip-1155
 * Originally based on code by Enjin: https://github.com/enjin/erc-1155
 *
 * _Available since v3.1._
 */

contract ERC1155 is Context, ERC165, IERC1155, IERC1155MetadataURI {
    using Address for address;

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

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

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

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

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

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

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

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

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

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

        return batchBalances;
    }

    /**
     * @dev See {IERC1155-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved)
        public
        virtual
        override
    {
        require(
            _msgSender() != operator,
            "ERC1155: setting approval status for self"
        );

        _operatorApprovals[_msgSender()][operator] = approved;
        emit ApprovalForAll(_msgSender(), operator, approved);
    }

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

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

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

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

        address operator = _msgSender();

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

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

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

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

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

        address operator = _msgSender();

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

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

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

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

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

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

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

        address operator = _msgSender();

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

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

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

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

        address operator = _msgSender();

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

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

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

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

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

        address operator = _msgSender();

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

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

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

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

        address operator = _msgSender();

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

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

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

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

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

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

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

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

        return array;
    }
}

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() {
        _setOwner(_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 {
        _setOwner(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"
        );
        _setOwner(newOwner);
    }

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

contract GhostiePumpkinhead is ERC1155, Ownable {
    using Strings for uint256;

    modifier contractIsNotFrozen() {
        require(isFrozen == false, "This function can not be called anymore");
        _;
    }

    uint256 public totalSupply = 520;
    uint256 public currentSupply = 0;
    bool public isFrozen = false;

    string public name = "Ghostie - Pumpkinhead NFT";

    constructor() ERC1155("https://ghostie.s3.amazonaws.com/test/metadata/") {}

    function uri(uint256 _tokenId)
        public
        view
        virtual
        override
        returns (string memory)
    {
        return
            string(
                abi.encodePacked(
                    ERC1155.uri(_tokenId),
                    _tokenId.toString(),
                    ".json"
                )
            );
    }

    function setURI(string memory _uri) external onlyOwner contractIsNotFrozen {
        _setURI(_uri);
    }

    function airdrop(address _address, uint256 amount)
        external
        onlyOwner
        contractIsNotFrozen
    {
        require(
            currentSupply + amount <= totalSupply,
            "Exceeding maximum supply"
        );
        _mint(_address, 0, amount, "");
        currentSupply += amount;
    }

    function batchAirdrop(
        address[] memory _addresses,
        uint256[] memory _amounts
    ) external onlyOwner contractIsNotFrozen {
        require(_addresses.length > 0, "At least one token should be minted");
        require(
            _addresses.length == _amounts.length,
            "Inconsistency between the number of addresses and the amount allocated"
        );

        uint256 totalAmount = 0;

        for (uint256 i = 0; i < _amounts.length; i++) {
            totalAmount += _amounts[i];
        }

        require(
            currentSupply + totalAmount <= totalSupply,
            "Exceeding maximum supply"
        );

        for (uint256 i = 0; i < _addresses.length; i++) {
            _mint(_addresses[i], 0, _amounts[i], "");
            currentSupply += _amounts[i];
        }
    }

    function togglefFeeze() external onlyOwner {
        isFrozen = !isFrozen;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_addresses","type":"address[]"},{"internalType":"uint256[]","name":"_amounts","type":"uint256[]"}],"name":"batchAirdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"currentSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isFrozen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_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":"togglefFeeze","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]

608060405261020860045560006005556000600660006101000a81548160ff0219169083151502179055506040518060400160405280601981526020017f47686f73746965202d2050756d706b696e68656164204e4654000000000000008152506007908051906020019062000077929190620001c2565b503480156200008557600080fd5b506040518060600160405280602f815260200162003d8d602f9139620000b181620000d860201b60201c565b50620000d2620000c6620000f460201b60201c565b620000fc60201b60201c565b620002d7565b8060029080519060200190620000f0929190620001c2565b5050565b600033905090565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620001d09062000272565b90600052602060002090601f016020900481019282620001f4576000855562000240565b82601f106200020f57805160ff191683800117855562000240565b8280016001018555821562000240579182015b828111156200023f57825182559160200191906001019062000222565b5b5090506200024f919062000253565b5090565b5b808211156200026e57600081600090555060010162000254565b5090565b600060028204905060018216806200028b57607f821691505b60208210811415620002a257620002a1620002a8565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b613aa680620002e76000396000f3fe608060405234801561001057600080fd5b50600436106101205760003560e01c8063715018a6116100ad578063a22cb46511610071578063a22cb465146102e3578063b816d087146102ff578063e985e9c51461031b578063f242432a1461034b578063f2fde38b1461036757610120565b8063715018a614610277578063771282f61461028157806381d6ab131461029f5780638ba4cc3c146102a95780638da5cb5b146102c557610120565b80630e89341c116100f45780630e89341c146101bf57806318160ddd146101ef5780632eb2c2d61461020d57806333eeb147146102295780634e1273f41461024757610120565b8062fdd58e1461012557806301ffc9a71461015557806302fe53051461018557806306fdde03146101a1575b600080fd5b61013f600480360381019061013a9190612763565b610383565b60405161014c91906134be565b60405180910390f35b61016f600480360381019061016a919061280b565b61044c565b60405161017c9190613261565b60405180910390f35b61019f600480360381019061019a919061285d565b61052e565b005b6101a961060c565b6040516101b6919061327c565b60405180910390f35b6101d960048036038101906101d4919061289e565b61069a565b6040516101e6919061327c565b60405180910390f35b6101f76106d5565b60405161020491906134be565b60405180910390f35b610227600480360381019061022291906125d9565b6106db565b005b61023161077c565b60405161023e9190613261565b60405180910390f35b610261600480360381019061025c919061279f565b61078f565b60405161026e9190613208565b60405180910390f35b61027f610940565b005b6102896109c8565b60405161029691906134be565b60405180910390f35b6102a76109ce565b005b6102c360048036038101906102be9190612763565b610a76565b005b6102cd610bd3565b6040516102da919061312b565b60405180910390f35b6102fd60048036038101906102f89190612727565b610bfd565b005b6103196004803603810190610314919061279f565b610d7e565b005b6103356004803603810190610330919061259d565b6110b3565b6040516103429190613261565b60405180910390f35b61036560048036038101906103609190612698565b611147565b005b610381600480360381019061037c9190612574565b6111e8565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156103f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103eb906132fe565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061051757507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806105275750610526826112e0565b5b9050919050565b61053661134a565b73ffffffffffffffffffffffffffffffffffffffff16610554610bd3565b73ffffffffffffffffffffffffffffffffffffffff16146105aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105a1906133fe565b60405180910390fd5b60001515600660009054906101000a900460ff16151514610600576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105f79061335e565b60405180910390fd5b61060981611352565b50565b60078054610619906137d8565b80601f0160208091040260200160405190810160405280929190818152602001828054610645906137d8565b80156106925780601f1061066757610100808354040283529160200191610692565b820191906000526020600020905b81548152906001019060200180831161067557829003601f168201915b505050505081565b60606106a58261136c565b6106ae83611400565b6040516020016106bf9291906130fc565b6040516020818303038152906040529050919050565b60045481565b6106e361134a565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061072957506107288561072361134a565b6110b3565b5b610768576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161075f906133be565b60405180910390fd5b61077585858585856115ad565b5050505050565b600660009054906101000a900460ff1681565b606081518351146107d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107cc9061343e565b60405180910390fd5b6000835167ffffffffffffffff811115610818577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156108465781602001602082028036833780820191505090505b50905060005b8451811015610935576108df858281518110610891577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101518583815181106108d2577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151610383565b828281518110610918577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010181815250508061092e9061380a565b905061084c565b508091505092915050565b61094861134a565b73ffffffffffffffffffffffffffffffffffffffff16610966610bd3565b73ffffffffffffffffffffffffffffffffffffffff16146109bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109b3906133fe565b60405180910390fd5b6109c6600061190d565b565b60055481565b6109d661134a565b73ffffffffffffffffffffffffffffffffffffffff166109f4610bd3565b73ffffffffffffffffffffffffffffffffffffffff1614610a4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a41906133fe565b60405180910390fd5b600660009054906101000a900460ff1615600660006101000a81548160ff021916908315150217905550565b610a7e61134a565b73ffffffffffffffffffffffffffffffffffffffff16610a9c610bd3565b73ffffffffffffffffffffffffffffffffffffffff1614610af2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae9906133fe565b60405180910390fd5b60001515600660009054906101000a900460ff16151514610b48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3f9061335e565b60405180910390fd5b60045481600554610b599190613667565b1115610b9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b91906132de565b60405180910390fd5b610bb682600083604051806020016040528060008152506119d3565b8060056000828254610bc89190613667565b925050819055505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b8173ffffffffffffffffffffffffffffffffffffffff16610c1c61134a565b73ffffffffffffffffffffffffffffffffffffffff161415610c73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6a9061341e565b60405180910390fd5b8060016000610c8061134a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16610d2d61134a565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051610d729190613261565b60405180910390a35050565b610d8661134a565b73ffffffffffffffffffffffffffffffffffffffff16610da4610bd3565b73ffffffffffffffffffffffffffffffffffffffff1614610dfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df1906133fe565b60405180910390fd5b60001515600660009054906101000a900460ff16151514610e50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e479061335e565b60405180910390fd5b6000825111610e94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8b9061349e565b60405180910390fd5b8051825114610ed8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ecf9061337e565b60405180910390fd5b6000805b8251811015610f4657828181518110610f1e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015182610f319190613667565b91508080610f3e9061380a565b915050610edc565b5060045481600554610f589190613667565b1115610f99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f90906132de565b60405180910390fd5b60005b83518110156110ad57611041848281518110610fe1577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101516000858481518110611024577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151604051806020016040528060008152506119d3565b82818151811061107a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151600560008282546110939190613667565b9250508190555080806110a59061380a565b915050610f9c565b50505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61114f61134a565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061119557506111948561118f61134a565b6110b3565b5b6111d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111cb9061333e565b60405180910390fd5b6111e18585858585611b69565b5050505050565b6111f061134a565b73ffffffffffffffffffffffffffffffffffffffff1661120e610bd3565b73ffffffffffffffffffffffffffffffffffffffff1614611264576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125b906133fe565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156112d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112cb9061331e565b60405180910390fd5b6112dd8161190d565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b806002908051906020019061136892919061226c565b5050565b60606002805461137b906137d8565b80601f01602080910402602001604051908101604052809291908181526020018280546113a7906137d8565b80156113f45780601f106113c9576101008083540402835291602001916113f4565b820191906000526020600020905b8154815290600101906020018083116113d757829003601f168201915b50505050509050919050565b60606000821415611448576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506115a8565b600082905060005b6000821461147a5780806114639061380a565b915050600a8261147391906136bd565b9150611450565b60008167ffffffffffffffff8111156114bc577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156114ee5781602001600182028036833780820191505090505b5090505b600085146115a15760018261150791906136ee565b9150600a856115169190613853565b60306115229190613667565b60f81b81838151811061155e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561159a91906136bd565b94506114f2565b8093505050505b919050565b81518351146115f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e89061345e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611661576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116589061339e565b60405180910390fd5b600061166b61134a565b905061167b818787878787611deb565b60005b84518110156118785760008582815181106116c2577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015190506000858381518110611707577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156117a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179f906133de565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461185d9190613667565b92505081905550505050806118719061380a565b905061167e565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516118ef92919061322a565b60405180910390a4611905818787878787611df3565b505050505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611a43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3a9061347e565b60405180910390fd5b6000611a4d61134a565b9050611a6e81600087611a5f88611fc3565b611a6888611fc3565b87611deb565b8260008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611acd9190613667565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051611b4b9291906134d9565b60405180910390a4611b6281600087878787612089565b5050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611bd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd09061339e565b60405180910390fd5b6000611be361134a565b9050611c03818787611bf488611fc3565b611bfd88611fc3565b87611deb565b600080600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015611c9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c91906133de565b60405180910390fd5b83810360008087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508360008087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611d4f9190613667565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628888604051611dcc9291906134d9565b60405180910390a4611de2828888888888612089565b50505050505050565b505050505050565b611e128473ffffffffffffffffffffffffffffffffffffffff16612259565b15611fbb578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401611e58959493929190613146565b602060405180830381600087803b158015611e7257600080fd5b505af1925050508015611ea357506040513d601f19601f82011682018060405250810190611ea09190612834565b60015b611f3257611eaf61395e565b80611eba5750611ef7565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eee919061327c565b60405180910390fd5b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f299061329e565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611fb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb0906132be565b60405180910390fd5b505b505050505050565b60606000600167ffffffffffffffff811115612008577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156120365781602001602082028036833780820191505090505b5090508281600081518110612074577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101818152505080915050919050565b6120a88473ffffffffffffffffffffffffffffffffffffffff16612259565b15612251578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b81526004016120ee9594939291906131ae565b602060405180830381600087803b15801561210857600080fd5b505af192505050801561213957506040513d601f19601f820116820180604052508101906121369190612834565b60015b6121c85761214561395e565b80612150575061218d565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612184919061327c565b60405180910390fd5b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121bf9061329e565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461224f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612246906132be565b60405180910390fd5b505b505050505050565b600080823b905060008111915050919050565b828054612278906137d8565b90600052602060002090601f01602090048101928261229a57600085556122e1565b82601f106122b357805160ff19168380011785556122e1565b828001600101855582156122e1579182015b828111156122e05782518255916020019190600101906122c5565b5b5090506122ee91906122f2565b5090565b5b8082111561230b5760008160009055506001016122f3565b5090565b600061232261231d84613533565b613502565b9050808382526020820190508285602086028201111561234157600080fd5b60005b8581101561237157816123578882612463565b845260208401935060208301925050600181019050612344565b5050509392505050565b600061238e6123898461355f565b613502565b905080838252602082019050828560208602820111156123ad57600080fd5b60005b858110156123dd57816123c3888261255f565b8452602084019350602083019250506001810190506123b0565b5050509392505050565b60006123fa6123f58461358b565b613502565b90508281526020810184848401111561241257600080fd5b61241d848285613796565b509392505050565b6000612438612433846135bb565b613502565b90508281526020810184848401111561245057600080fd5b61245b848285613796565b509392505050565b60008135905061247281613a14565b92915050565b600082601f83011261248957600080fd5b813561249984826020860161230f565b91505092915050565b600082601f8301126124b357600080fd5b81356124c384826020860161237b565b91505092915050565b6000813590506124db81613a2b565b92915050565b6000813590506124f081613a42565b92915050565b60008151905061250581613a42565b92915050565b600082601f83011261251c57600080fd5b813561252c8482602086016123e7565b91505092915050565b600082601f83011261254657600080fd5b8135612556848260208601612425565b91505092915050565b60008135905061256e81613a59565b92915050565b60006020828403121561258657600080fd5b600061259484828501612463565b91505092915050565b600080604083850312156125b057600080fd5b60006125be85828601612463565b92505060206125cf85828601612463565b9150509250929050565b600080600080600060a086880312156125f157600080fd5b60006125ff88828901612463565b955050602061261088828901612463565b945050604086013567ffffffffffffffff81111561262d57600080fd5b612639888289016124a2565b935050606086013567ffffffffffffffff81111561265657600080fd5b612662888289016124a2565b925050608086013567ffffffffffffffff81111561267f57600080fd5b61268b8882890161250b565b9150509295509295909350565b600080600080600060a086880312156126b057600080fd5b60006126be88828901612463565b95505060206126cf88828901612463565b94505060406126e08882890161255f565b93505060606126f18882890161255f565b925050608086013567ffffffffffffffff81111561270e57600080fd5b61271a8882890161250b565b9150509295509295909350565b6000806040838503121561273a57600080fd5b600061274885828601612463565b9250506020612759858286016124cc565b9150509250929050565b6000806040838503121561277657600080fd5b600061278485828601612463565b92505060206127958582860161255f565b9150509250929050565b600080604083850312156127b257600080fd5b600083013567ffffffffffffffff8111156127cc57600080fd5b6127d885828601612478565b925050602083013567ffffffffffffffff8111156127f557600080fd5b612801858286016124a2565b9150509250929050565b60006020828403121561281d57600080fd5b600061282b848285016124e1565b91505092915050565b60006020828403121561284657600080fd5b6000612854848285016124f6565b91505092915050565b60006020828403121561286f57600080fd5b600082013567ffffffffffffffff81111561288957600080fd5b61289584828501612535565b91505092915050565b6000602082840312156128b057600080fd5b60006128be8482850161255f565b91505092915050565b60006128d383836130de565b60208301905092915050565b6128e881613722565b82525050565b60006128f9826135fb565b6129038185613629565b935061290e836135eb565b8060005b8381101561293f57815161292688826128c7565b97506129318361361c565b925050600181019050612912565b5085935050505092915050565b61295581613734565b82525050565b600061296682613606565b612970818561363a565b93506129808185602086016137a5565b61298981613940565b840191505092915050565b600061299f82613611565b6129a9818561364b565b93506129b98185602086016137a5565b6129c281613940565b840191505092915050565b60006129d882613611565b6129e2818561365c565b93506129f28185602086016137a5565b80840191505092915050565b6000612a0b60348361364b565b91507f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008301527f526563656976657220696d706c656d656e7465720000000000000000000000006020830152604082019050919050565b6000612a7160288361364b565b91507f455243313135353a204552433131353552656365697665722072656a6563746560008301527f6420746f6b656e730000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612ad760188361364b565b91507f457863656564696e67206d6178696d756d20737570706c7900000000000000006000830152602082019050919050565b6000612b17602b8361364b565b91507f455243313135353a2062616c616e636520717565727920666f7220746865207a60008301527f65726f20616464726573730000000000000000000000000000000000000000006020830152604082019050919050565b6000612b7d60268361364b565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612be360298361364b565b91507f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008301527f20617070726f76656400000000000000000000000000000000000000000000006020830152604082019050919050565b6000612c4960278361364b565b91507f546869732066756e6374696f6e2063616e206e6f742062652063616c6c65642060008301527f616e796d6f7265000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612caf60468361364b565b91507f496e636f6e73697374656e6379206265747765656e20746865206e756d62657260008301527f206f662061646472657373657320616e642074686520616d6f756e7420616c6c60208301527f6f636174656400000000000000000000000000000000000000000000000000006040830152606082019050919050565b6000612d3b60258361364b565b91507f455243313135353a207472616e7366657220746f20746865207a65726f20616460008301527f64726573730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612da160328361364b565b91507f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008301527f6f776e6572206e6f7220617070726f76656400000000000000000000000000006020830152604082019050919050565b6000612e07602a8361364b565b91507f455243313135353a20696e73756666696369656e742062616c616e636520666f60008301527f72207472616e73666572000000000000000000000000000000000000000000006020830152604082019050919050565b6000612e6d60058361365c565b91507f2e6a736f6e0000000000000000000000000000000000000000000000000000006000830152600582019050919050565b6000612ead60208361364b565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000612eed60298361364b565b91507f455243313135353a2073657474696e6720617070726f76616c2073746174757360008301527f20666f722073656c6600000000000000000000000000000000000000000000006020830152604082019050919050565b6000612f5360298361364b565b91507f455243313135353a206163636f756e747320616e6420696473206c656e67746860008301527f206d69736d6174636800000000000000000000000000000000000000000000006020830152604082019050919050565b6000612fb960288361364b565b91507f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008301527f6d69736d617463680000000000000000000000000000000000000000000000006020830152604082019050919050565b600061301f60218361364b565b91507f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008301527f73000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061308560238361364b565b91507f4174206c65617374206f6e6520746f6b656e2073686f756c64206265206d696e60008301527f74656400000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6130e78161378c565b82525050565b6130f68161378c565b82525050565b600061310882856129cd565b915061311482846129cd565b915061311f82612e60565b91508190509392505050565b600060208201905061314060008301846128df565b92915050565b600060a08201905061315b60008301886128df565b61316860208301876128df565b818103604083015261317a81866128ee565b9050818103606083015261318e81856128ee565b905081810360808301526131a2818461295b565b90509695505050505050565b600060a0820190506131c360008301886128df565b6131d060208301876128df565b6131dd60408301866130ed565b6131ea60608301856130ed565b81810360808301526131fc818461295b565b90509695505050505050565b6000602082019050818103600083015261322281846128ee565b905092915050565b6000604082019050818103600083015261324481856128ee565b9050818103602083015261325881846128ee565b90509392505050565b6000602082019050613276600083018461294c565b92915050565b600060208201905081810360008301526132968184612994565b905092915050565b600060208201905081810360008301526132b7816129fe565b9050919050565b600060208201905081810360008301526132d781612a64565b9050919050565b600060208201905081810360008301526132f781612aca565b9050919050565b6000602082019050818103600083015261331781612b0a565b9050919050565b6000602082019050818103600083015261333781612b70565b9050919050565b6000602082019050818103600083015261335781612bd6565b9050919050565b6000602082019050818103600083015261337781612c3c565b9050919050565b6000602082019050818103600083015261339781612ca2565b9050919050565b600060208201905081810360008301526133b781612d2e565b9050919050565b600060208201905081810360008301526133d781612d94565b9050919050565b600060208201905081810360008301526133f781612dfa565b9050919050565b6000602082019050818103600083015261341781612ea0565b9050919050565b6000602082019050818103600083015261343781612ee0565b9050919050565b6000602082019050818103600083015261345781612f46565b9050919050565b6000602082019050818103600083015261347781612fac565b9050919050565b6000602082019050818103600083015261349781613012565b9050919050565b600060208201905081810360008301526134b781613078565b9050919050565b60006020820190506134d360008301846130ed565b92915050565b60006040820190506134ee60008301856130ed565b6134fb60208301846130ed565b9392505050565b6000604051905081810181811067ffffffffffffffff8211171561352957613528613911565b5b8060405250919050565b600067ffffffffffffffff82111561354e5761354d613911565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561357a57613579613911565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156135a6576135a5613911565b5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff8211156135d6576135d5613911565b5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006136728261378c565b915061367d8361378c565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156136b2576136b1613884565b5b828201905092915050565b60006136c88261378c565b91506136d38361378c565b9250826136e3576136e26138b3565b5b828204905092915050565b60006136f98261378c565b91506137048361378c565b92508282101561371757613716613884565b5b828203905092915050565b600061372d8261376c565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156137c35780820151818401526020810190506137a8565b838111156137d2576000848401525b50505050565b600060028204905060018216806137f057607f821691505b60208210811415613804576138036138e2565b5b50919050565b60006138158261378c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561384857613847613884565b5b600182019050919050565b600061385e8261378c565b91506138698361378c565b925082613879576138786138b3565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b60008160e01c9050919050565b600060443d101561396e57613a11565b60046000803e61397f600051613951565b6308c379a081146139905750613a11565b60405160043d036004823e80513d602482011167ffffffffffffffff821117156139bc57505050613a11565b808201805167ffffffffffffffff8111156139db575050505050613a11565b8060208301013d85018111156139f657505050505050613a11565b6139ff82613940565b60208401016040528296505050505050505b90565b613a1d81613722565b8114613a2857600080fd5b50565b613a3481613734565b8114613a3f57600080fd5b50565b613a4b81613740565b8114613a5657600080fd5b50565b613a628161378c565b8114613a6d57600080fd5b5056fea2646970667358221220a1ba61030ddd0cbf343fa8e7c3ff520facc64e5e6b7f35df1a027e50d3a4f73564736f6c6343000800003368747470733a2f2f67686f737469652e73332e616d617a6f6e6177732e636f6d2f746573742f6d657461646174612f

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101205760003560e01c8063715018a6116100ad578063a22cb46511610071578063a22cb465146102e3578063b816d087146102ff578063e985e9c51461031b578063f242432a1461034b578063f2fde38b1461036757610120565b8063715018a614610277578063771282f61461028157806381d6ab131461029f5780638ba4cc3c146102a95780638da5cb5b146102c557610120565b80630e89341c116100f45780630e89341c146101bf57806318160ddd146101ef5780632eb2c2d61461020d57806333eeb147146102295780634e1273f41461024757610120565b8062fdd58e1461012557806301ffc9a71461015557806302fe53051461018557806306fdde03146101a1575b600080fd5b61013f600480360381019061013a9190612763565b610383565b60405161014c91906134be565b60405180910390f35b61016f600480360381019061016a919061280b565b61044c565b60405161017c9190613261565b60405180910390f35b61019f600480360381019061019a919061285d565b61052e565b005b6101a961060c565b6040516101b6919061327c565b60405180910390f35b6101d960048036038101906101d4919061289e565b61069a565b6040516101e6919061327c565b60405180910390f35b6101f76106d5565b60405161020491906134be565b60405180910390f35b610227600480360381019061022291906125d9565b6106db565b005b61023161077c565b60405161023e9190613261565b60405180910390f35b610261600480360381019061025c919061279f565b61078f565b60405161026e9190613208565b60405180910390f35b61027f610940565b005b6102896109c8565b60405161029691906134be565b60405180910390f35b6102a76109ce565b005b6102c360048036038101906102be9190612763565b610a76565b005b6102cd610bd3565b6040516102da919061312b565b60405180910390f35b6102fd60048036038101906102f89190612727565b610bfd565b005b6103196004803603810190610314919061279f565b610d7e565b005b6103356004803603810190610330919061259d565b6110b3565b6040516103429190613261565b60405180910390f35b61036560048036038101906103609190612698565b611147565b005b610381600480360381019061037c9190612574565b6111e8565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156103f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103eb906132fe565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061051757507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806105275750610526826112e0565b5b9050919050565b61053661134a565b73ffffffffffffffffffffffffffffffffffffffff16610554610bd3565b73ffffffffffffffffffffffffffffffffffffffff16146105aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105a1906133fe565b60405180910390fd5b60001515600660009054906101000a900460ff16151514610600576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105f79061335e565b60405180910390fd5b61060981611352565b50565b60078054610619906137d8565b80601f0160208091040260200160405190810160405280929190818152602001828054610645906137d8565b80156106925780601f1061066757610100808354040283529160200191610692565b820191906000526020600020905b81548152906001019060200180831161067557829003601f168201915b505050505081565b60606106a58261136c565b6106ae83611400565b6040516020016106bf9291906130fc565b6040516020818303038152906040529050919050565b60045481565b6106e361134a565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061072957506107288561072361134a565b6110b3565b5b610768576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161075f906133be565b60405180910390fd5b61077585858585856115ad565b5050505050565b600660009054906101000a900460ff1681565b606081518351146107d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107cc9061343e565b60405180910390fd5b6000835167ffffffffffffffff811115610818577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156108465781602001602082028036833780820191505090505b50905060005b8451811015610935576108df858281518110610891577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101518583815181106108d2577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151610383565b828281518110610918577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010181815250508061092e9061380a565b905061084c565b508091505092915050565b61094861134a565b73ffffffffffffffffffffffffffffffffffffffff16610966610bd3565b73ffffffffffffffffffffffffffffffffffffffff16146109bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109b3906133fe565b60405180910390fd5b6109c6600061190d565b565b60055481565b6109d661134a565b73ffffffffffffffffffffffffffffffffffffffff166109f4610bd3565b73ffffffffffffffffffffffffffffffffffffffff1614610a4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a41906133fe565b60405180910390fd5b600660009054906101000a900460ff1615600660006101000a81548160ff021916908315150217905550565b610a7e61134a565b73ffffffffffffffffffffffffffffffffffffffff16610a9c610bd3565b73ffffffffffffffffffffffffffffffffffffffff1614610af2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae9906133fe565b60405180910390fd5b60001515600660009054906101000a900460ff16151514610b48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3f9061335e565b60405180910390fd5b60045481600554610b599190613667565b1115610b9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b91906132de565b60405180910390fd5b610bb682600083604051806020016040528060008152506119d3565b8060056000828254610bc89190613667565b925050819055505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b8173ffffffffffffffffffffffffffffffffffffffff16610c1c61134a565b73ffffffffffffffffffffffffffffffffffffffff161415610c73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6a9061341e565b60405180910390fd5b8060016000610c8061134a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16610d2d61134a565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051610d729190613261565b60405180910390a35050565b610d8661134a565b73ffffffffffffffffffffffffffffffffffffffff16610da4610bd3565b73ffffffffffffffffffffffffffffffffffffffff1614610dfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df1906133fe565b60405180910390fd5b60001515600660009054906101000a900460ff16151514610e50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e479061335e565b60405180910390fd5b6000825111610e94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8b9061349e565b60405180910390fd5b8051825114610ed8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ecf9061337e565b60405180910390fd5b6000805b8251811015610f4657828181518110610f1e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015182610f319190613667565b91508080610f3e9061380a565b915050610edc565b5060045481600554610f589190613667565b1115610f99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f90906132de565b60405180910390fd5b60005b83518110156110ad57611041848281518110610fe1577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101516000858481518110611024577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151604051806020016040528060008152506119d3565b82818151811061107a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151600560008282546110939190613667565b9250508190555080806110a59061380a565b915050610f9c565b50505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61114f61134a565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061119557506111948561118f61134a565b6110b3565b5b6111d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111cb9061333e565b60405180910390fd5b6111e18585858585611b69565b5050505050565b6111f061134a565b73ffffffffffffffffffffffffffffffffffffffff1661120e610bd3565b73ffffffffffffffffffffffffffffffffffffffff1614611264576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125b906133fe565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156112d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112cb9061331e565b60405180910390fd5b6112dd8161190d565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b806002908051906020019061136892919061226c565b5050565b60606002805461137b906137d8565b80601f01602080910402602001604051908101604052809291908181526020018280546113a7906137d8565b80156113f45780601f106113c9576101008083540402835291602001916113f4565b820191906000526020600020905b8154815290600101906020018083116113d757829003601f168201915b50505050509050919050565b60606000821415611448576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506115a8565b600082905060005b6000821461147a5780806114639061380a565b915050600a8261147391906136bd565b9150611450565b60008167ffffffffffffffff8111156114bc577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156114ee5781602001600182028036833780820191505090505b5090505b600085146115a15760018261150791906136ee565b9150600a856115169190613853565b60306115229190613667565b60f81b81838151811061155e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561159a91906136bd565b94506114f2565b8093505050505b919050565b81518351146115f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e89061345e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611661576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116589061339e565b60405180910390fd5b600061166b61134a565b905061167b818787878787611deb565b60005b84518110156118785760008582815181106116c2577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015190506000858381518110611707577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156117a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179f906133de565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461185d9190613667565b92505081905550505050806118719061380a565b905061167e565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516118ef92919061322a565b60405180910390a4611905818787878787611df3565b505050505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611a43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3a9061347e565b60405180910390fd5b6000611a4d61134a565b9050611a6e81600087611a5f88611fc3565b611a6888611fc3565b87611deb565b8260008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611acd9190613667565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051611b4b9291906134d9565b60405180910390a4611b6281600087878787612089565b5050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611bd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd09061339e565b60405180910390fd5b6000611be361134a565b9050611c03818787611bf488611fc3565b611bfd88611fc3565b87611deb565b600080600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015611c9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c91906133de565b60405180910390fd5b83810360008087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508360008087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611d4f9190613667565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628888604051611dcc9291906134d9565b60405180910390a4611de2828888888888612089565b50505050505050565b505050505050565b611e128473ffffffffffffffffffffffffffffffffffffffff16612259565b15611fbb578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401611e58959493929190613146565b602060405180830381600087803b158015611e7257600080fd5b505af1925050508015611ea357506040513d601f19601f82011682018060405250810190611ea09190612834565b60015b611f3257611eaf61395e565b80611eba5750611ef7565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eee919061327c565b60405180910390fd5b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f299061329e565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611fb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb0906132be565b60405180910390fd5b505b505050505050565b60606000600167ffffffffffffffff811115612008577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156120365781602001602082028036833780820191505090505b5090508281600081518110612074577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101818152505080915050919050565b6120a88473ffffffffffffffffffffffffffffffffffffffff16612259565b15612251578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b81526004016120ee9594939291906131ae565b602060405180830381600087803b15801561210857600080fd5b505af192505050801561213957506040513d601f19601f820116820180604052508101906121369190612834565b60015b6121c85761214561395e565b80612150575061218d565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612184919061327c565b60405180910390fd5b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121bf9061329e565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461224f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612246906132be565b60405180910390fd5b505b505050505050565b600080823b905060008111915050919050565b828054612278906137d8565b90600052602060002090601f01602090048101928261229a57600085556122e1565b82601f106122b357805160ff19168380011785556122e1565b828001600101855582156122e1579182015b828111156122e05782518255916020019190600101906122c5565b5b5090506122ee91906122f2565b5090565b5b8082111561230b5760008160009055506001016122f3565b5090565b600061232261231d84613533565b613502565b9050808382526020820190508285602086028201111561234157600080fd5b60005b8581101561237157816123578882612463565b845260208401935060208301925050600181019050612344565b5050509392505050565b600061238e6123898461355f565b613502565b905080838252602082019050828560208602820111156123ad57600080fd5b60005b858110156123dd57816123c3888261255f565b8452602084019350602083019250506001810190506123b0565b5050509392505050565b60006123fa6123f58461358b565b613502565b90508281526020810184848401111561241257600080fd5b61241d848285613796565b509392505050565b6000612438612433846135bb565b613502565b90508281526020810184848401111561245057600080fd5b61245b848285613796565b509392505050565b60008135905061247281613a14565b92915050565b600082601f83011261248957600080fd5b813561249984826020860161230f565b91505092915050565b600082601f8301126124b357600080fd5b81356124c384826020860161237b565b91505092915050565b6000813590506124db81613a2b565b92915050565b6000813590506124f081613a42565b92915050565b60008151905061250581613a42565b92915050565b600082601f83011261251c57600080fd5b813561252c8482602086016123e7565b91505092915050565b600082601f83011261254657600080fd5b8135612556848260208601612425565b91505092915050565b60008135905061256e81613a59565b92915050565b60006020828403121561258657600080fd5b600061259484828501612463565b91505092915050565b600080604083850312156125b057600080fd5b60006125be85828601612463565b92505060206125cf85828601612463565b9150509250929050565b600080600080600060a086880312156125f157600080fd5b60006125ff88828901612463565b955050602061261088828901612463565b945050604086013567ffffffffffffffff81111561262d57600080fd5b612639888289016124a2565b935050606086013567ffffffffffffffff81111561265657600080fd5b612662888289016124a2565b925050608086013567ffffffffffffffff81111561267f57600080fd5b61268b8882890161250b565b9150509295509295909350565b600080600080600060a086880312156126b057600080fd5b60006126be88828901612463565b95505060206126cf88828901612463565b94505060406126e08882890161255f565b93505060606126f18882890161255f565b925050608086013567ffffffffffffffff81111561270e57600080fd5b61271a8882890161250b565b9150509295509295909350565b6000806040838503121561273a57600080fd5b600061274885828601612463565b9250506020612759858286016124cc565b9150509250929050565b6000806040838503121561277657600080fd5b600061278485828601612463565b92505060206127958582860161255f565b9150509250929050565b600080604083850312156127b257600080fd5b600083013567ffffffffffffffff8111156127cc57600080fd5b6127d885828601612478565b925050602083013567ffffffffffffffff8111156127f557600080fd5b612801858286016124a2565b9150509250929050565b60006020828403121561281d57600080fd5b600061282b848285016124e1565b91505092915050565b60006020828403121561284657600080fd5b6000612854848285016124f6565b91505092915050565b60006020828403121561286f57600080fd5b600082013567ffffffffffffffff81111561288957600080fd5b61289584828501612535565b91505092915050565b6000602082840312156128b057600080fd5b60006128be8482850161255f565b91505092915050565b60006128d383836130de565b60208301905092915050565b6128e881613722565b82525050565b60006128f9826135fb565b6129038185613629565b935061290e836135eb565b8060005b8381101561293f57815161292688826128c7565b97506129318361361c565b925050600181019050612912565b5085935050505092915050565b61295581613734565b82525050565b600061296682613606565b612970818561363a565b93506129808185602086016137a5565b61298981613940565b840191505092915050565b600061299f82613611565b6129a9818561364b565b93506129b98185602086016137a5565b6129c281613940565b840191505092915050565b60006129d882613611565b6129e2818561365c565b93506129f28185602086016137a5565b80840191505092915050565b6000612a0b60348361364b565b91507f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008301527f526563656976657220696d706c656d656e7465720000000000000000000000006020830152604082019050919050565b6000612a7160288361364b565b91507f455243313135353a204552433131353552656365697665722072656a6563746560008301527f6420746f6b656e730000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612ad760188361364b565b91507f457863656564696e67206d6178696d756d20737570706c7900000000000000006000830152602082019050919050565b6000612b17602b8361364b565b91507f455243313135353a2062616c616e636520717565727920666f7220746865207a60008301527f65726f20616464726573730000000000000000000000000000000000000000006020830152604082019050919050565b6000612b7d60268361364b565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612be360298361364b565b91507f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008301527f20617070726f76656400000000000000000000000000000000000000000000006020830152604082019050919050565b6000612c4960278361364b565b91507f546869732066756e6374696f6e2063616e206e6f742062652063616c6c65642060008301527f616e796d6f7265000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612caf60468361364b565b91507f496e636f6e73697374656e6379206265747765656e20746865206e756d62657260008301527f206f662061646472657373657320616e642074686520616d6f756e7420616c6c60208301527f6f636174656400000000000000000000000000000000000000000000000000006040830152606082019050919050565b6000612d3b60258361364b565b91507f455243313135353a207472616e7366657220746f20746865207a65726f20616460008301527f64726573730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612da160328361364b565b91507f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008301527f6f776e6572206e6f7220617070726f76656400000000000000000000000000006020830152604082019050919050565b6000612e07602a8361364b565b91507f455243313135353a20696e73756666696369656e742062616c616e636520666f60008301527f72207472616e73666572000000000000000000000000000000000000000000006020830152604082019050919050565b6000612e6d60058361365c565b91507f2e6a736f6e0000000000000000000000000000000000000000000000000000006000830152600582019050919050565b6000612ead60208361364b565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000612eed60298361364b565b91507f455243313135353a2073657474696e6720617070726f76616c2073746174757360008301527f20666f722073656c6600000000000000000000000000000000000000000000006020830152604082019050919050565b6000612f5360298361364b565b91507f455243313135353a206163636f756e747320616e6420696473206c656e67746860008301527f206d69736d6174636800000000000000000000000000000000000000000000006020830152604082019050919050565b6000612fb960288361364b565b91507f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008301527f6d69736d617463680000000000000000000000000000000000000000000000006020830152604082019050919050565b600061301f60218361364b565b91507f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008301527f73000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061308560238361364b565b91507f4174206c65617374206f6e6520746f6b656e2073686f756c64206265206d696e60008301527f74656400000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6130e78161378c565b82525050565b6130f68161378c565b82525050565b600061310882856129cd565b915061311482846129cd565b915061311f82612e60565b91508190509392505050565b600060208201905061314060008301846128df565b92915050565b600060a08201905061315b60008301886128df565b61316860208301876128df565b818103604083015261317a81866128ee565b9050818103606083015261318e81856128ee565b905081810360808301526131a2818461295b565b90509695505050505050565b600060a0820190506131c360008301886128df565b6131d060208301876128df565b6131dd60408301866130ed565b6131ea60608301856130ed565b81810360808301526131fc818461295b565b90509695505050505050565b6000602082019050818103600083015261322281846128ee565b905092915050565b6000604082019050818103600083015261324481856128ee565b9050818103602083015261325881846128ee565b90509392505050565b6000602082019050613276600083018461294c565b92915050565b600060208201905081810360008301526132968184612994565b905092915050565b600060208201905081810360008301526132b7816129fe565b9050919050565b600060208201905081810360008301526132d781612a64565b9050919050565b600060208201905081810360008301526132f781612aca565b9050919050565b6000602082019050818103600083015261331781612b0a565b9050919050565b6000602082019050818103600083015261333781612b70565b9050919050565b6000602082019050818103600083015261335781612bd6565b9050919050565b6000602082019050818103600083015261337781612c3c565b9050919050565b6000602082019050818103600083015261339781612ca2565b9050919050565b600060208201905081810360008301526133b781612d2e565b9050919050565b600060208201905081810360008301526133d781612d94565b9050919050565b600060208201905081810360008301526133f781612dfa565b9050919050565b6000602082019050818103600083015261341781612ea0565b9050919050565b6000602082019050818103600083015261343781612ee0565b9050919050565b6000602082019050818103600083015261345781612f46565b9050919050565b6000602082019050818103600083015261347781612fac565b9050919050565b6000602082019050818103600083015261349781613012565b9050919050565b600060208201905081810360008301526134b781613078565b9050919050565b60006020820190506134d360008301846130ed565b92915050565b60006040820190506134ee60008301856130ed565b6134fb60208301846130ed565b9392505050565b6000604051905081810181811067ffffffffffffffff8211171561352957613528613911565b5b8060405250919050565b600067ffffffffffffffff82111561354e5761354d613911565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561357a57613579613911565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156135a6576135a5613911565b5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff8211156135d6576135d5613911565b5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006136728261378c565b915061367d8361378c565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156136b2576136b1613884565b5b828201905092915050565b60006136c88261378c565b91506136d38361378c565b9250826136e3576136e26138b3565b5b828204905092915050565b60006136f98261378c565b91506137048361378c565b92508282101561371757613716613884565b5b828203905092915050565b600061372d8261376c565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156137c35780820151818401526020810190506137a8565b838111156137d2576000848401525b50505050565b600060028204905060018216806137f057607f821691505b60208210811415613804576138036138e2565b5b50919050565b60006138158261378c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561384857613847613884565b5b600182019050919050565b600061385e8261378c565b91506138698361378c565b925082613879576138786138b3565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b60008160e01c9050919050565b600060443d101561396e57613a11565b60046000803e61397f600051613951565b6308c379a081146139905750613a11565b60405160043d036004823e80513d602482011167ffffffffffffffff821117156139bc57505050613a11565b808201805167ffffffffffffffff8111156139db575050505050613a11565b8060208301013d85018111156139f657505050505050613a11565b6139ff82613940565b60208401016040528296505050505050505b90565b613a1d81613722565b8114613a2857600080fd5b50565b613a3481613734565b8114613a3f57600080fd5b50565b613a4b81613740565b8114613a5657600080fd5b50565b613a628161378c565b8114613a6d57600080fd5b5056fea2646970667358221220a1ba61030ddd0cbf343fa8e7c3ff520facc64e5e6b7f35df1a027e50d3a4f73564736f6c63430008000033

Deployed Bytecode Sourcemap

38995:2241:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22548:318;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21521:360;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39850:107;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39338:48;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39478:364;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39223:32;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24886:442;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39301:28;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23032:561;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38329:94;;;:::i;:::-;;39262:32;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41151:82;;;:::i;:::-;;39965:327;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37678:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23666:380;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40300:843;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24118:218;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24408:401;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38578:229;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22548:318;22679:7;22745:1;22726:21;;:7;:21;;;;22704:114;;;;;;;;;;;;:::i;:::-;;;;;;;;;22836:9;:13;22846:2;22836:13;;;;;;;;;;;:22;22850:7;22836:22;;;;;;;;;;;;;;;;22829:29;;22548:318;;;;:::o;21521:360::-;21668:4;21725:26;21710:41;;;:11;:41;;;;:110;;;;21783:37;21768:52;;;:11;:52;;;;21710:110;:163;;;;21837:36;21861:11;21837:23;:36::i;:::-;21710:163;21690:183;;21521:360;;;:::o;39850:107::-;37909:12;:10;:12::i;:::-;37898:23;;:7;:5;:7::i;:::-;:23;;;37890:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39146:5:::1;39134:17;;:8;;;;;;;;;;;:17;;;39126:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;39936:13:::2;39944:4;39936:7;:13::i;:::-;39850:107:::0;:::o;39338:48::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;39478:364::-;39592:13;39707:21;39719:8;39707:11;:21::i;:::-;39751:19;:8;:17;:19::i;:::-;39668:151;;;;;;;;;:::i;:::-;;;;;;;;;;;;;39623:211;;39478:364;;;:::o;39223:32::-;;;;:::o;24886:442::-;25127:12;:10;:12::i;:::-;25119:20;;:4;:20;;;:60;;;;25143:36;25160:4;25166:12;:10;:12::i;:::-;25143:16;:36::i;:::-;25119:60;25097:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;25268:52;25291:4;25297:2;25301:3;25306:7;25315:4;25268:22;:52::i;:::-;24886:442;;;;;:::o;39301:28::-;;;;;;;;;;;;;:::o;23032:561::-;23188:16;23263:3;:10;23244:8;:15;:29;23222:120;;;;;;;;;;;;:::i;:::-;;;;;;;;;23355:30;23402:8;:15;23388:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23355:63;;23436:9;23431:122;23455:8;:15;23451:1;:19;23431:122;;;23511:30;23521:8;23530:1;23521:11;;;;;;;;;;;;;;;;;;;;;;23534:3;23538:1;23534:6;;;;;;;;;;;;;;;;;;;;;;23511:9;:30::i;:::-;23492:13;23506:1;23492:16;;;;;;;;;;;;;;;;;;;;;:49;;;;;23472:3;;;;:::i;:::-;;;23431:122;;;;23572:13;23565:20;;;23032:561;;;;:::o;38329:94::-;37909:12;:10;:12::i;:::-;37898:23;;:7;:5;:7::i;:::-;:23;;;37890:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38394:21:::1;38412:1;38394:9;:21::i;:::-;38329:94::o:0;39262:32::-;;;;:::o;41151:82::-;37909:12;:10;:12::i;:::-;37898:23;;:7;:5;:7::i;:::-;:23;;;37890:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41217:8:::1;;;;;;;;;;;41216:9;41205:8;;:20;;;;;;;;;;;;;;;;;;41151:82::o:0;39965:327::-;37909:12;:10;:12::i;:::-;37898:23;;:7;:5;:7::i;:::-;:23;;;37890:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39146:5:::1;39134:17;;:8;;;;;;;;;;;:17;;;39126:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;40146:11:::2;;40136:6;40120:13;;:22;;;;:::i;:::-;:37;;40098:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;40220:30;40226:8;40236:1;40239:6;40220:30;;;;;;;;;;;::::0;:5:::2;:30::i;:::-;40278:6;40261:13;;:23;;;;;;;:::i;:::-;;;;;;;;39965:327:::0;;:::o;37678:87::-;37724:7;37751:6;;;;;;;;;;;37744:13;;37678:87;:::o;23666:380::-;23831:8;23815:24;;:12;:10;:12::i;:::-;:24;;;;23793:115;;;;;;;;;;;;:::i;:::-;;;;;;;;;23966:8;23921:18;:32;23940:12;:10;:12::i;:::-;23921:32;;;;;;;;;;;;;;;:42;23954:8;23921:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;24019:8;23990:48;;24005:12;:10;:12::i;:::-;23990:48;;;24029:8;23990:48;;;;;;:::i;:::-;;;;;;;;23666:380;;:::o;40300:843::-;37909:12;:10;:12::i;:::-;37898:23;;:7;:5;:7::i;:::-;:23;;;37890:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39146:5:::1;39134:17;;:8;;;;;;;;;;;:17;;;39126:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;40481:1:::2;40461:10;:17;:21;40453:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;40576:8;:15;40555:10;:17;:36;40533:156;;;;;;;;;;;;:::i;:::-;;;;;;;;;40702:19;40743:9:::0;40738:99:::2;40762:8;:15;40758:1;:19;40738:99;;;40814:8;40823:1;40814:11;;;;;;;;;;;;;;;;;;;;;;40799:26;;;;;:::i;:::-;;;40779:3;;;;;:::i;:::-;;;;40738:99;;;;40902:11;;40887;40871:13;;:27;;;;:::i;:::-;:42;;40849:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;40983:9;40978:158;41002:10;:17;40998:1;:21;40978:158;;;41041:40;41047:10;41058:1;41047:13;;;;;;;;;;;;;;;;;;;;;;41062:1;41065:8;41074:1;41065:11;;;;;;;;;;;;;;;;;;;;;;41041:40;;;;;;;;;;;::::0;:5:::2;:40::i;:::-;41113:8;41122:1;41113:11;;;;;;;;;;;;;;;;;;;;;;41096:13;;:28;;;;;;;:::i;:::-;;;;;;;;41021:3;;;;;:::i;:::-;;;;40978:158;;;;39206:1;40300:843:::0;;:::o;24118:218::-;24262:4;24291:18;:27;24310:7;24291:27;;;;;;;;;;;;;;;:37;24319:8;24291:37;;;;;;;;;;;;;;;;;;;;;;;;;24284:44;;24118:218;;;;:::o;24408:401::-;24624:12;:10;:12::i;:::-;24616:20;;:4;:20;;;:60;;;;24640:36;24657:4;24663:12;:10;:12::i;:::-;24640:16;:36::i;:::-;24616:60;24594:151;;;;;;;;;;;;:::i;:::-;;;;;;;;;24756:45;24774:4;24780:2;24784;24788:6;24796:4;24756:17;:45::i;:::-;24408:401;;;;;:::o;38578:229::-;37909:12;:10;:12::i;:::-;37898:23;;:7;:5;:7::i;:::-;:23;;;37890:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38701:1:::1;38681:22;;:8;:22;;;;38659:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;38780:19;38790:8;38780:9;:19::i;:::-;38578:229:::0;:::o;13386:207::-;13516:4;13560:25;13545:40;;;:11;:40;;;;13538:47;;13386:207;;;:::o;9705:98::-;9758:7;9785:10;9778:17;;9705:98;:::o;29189:88::-;29263:6;29256:4;:13;;;;;;;;;;;;:::i;:::-;;29189:88;:::o;22292:105::-;22352:13;22385:4;22378:11;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22292:105;;;:::o;10145:723::-;10201:13;10431:1;10422:5;:10;10418:53;;;10449:10;;;;;;;;;;;;;;;;;;;;;10418:53;10481:12;10496:5;10481:20;;10512:14;10537:78;10552:1;10544:4;:9;10537:78;;10570:8;;;;;:::i;:::-;;;;10601:2;10593:10;;;;;:::i;:::-;;;10537:78;;;10625:19;10657:6;10647:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10625:39;;10675:154;10691:1;10682:5;:10;10675:154;;10719:1;10709:11;;;;;:::i;:::-;;;10786:2;10778:5;:10;;;;:::i;:::-;10765:2;:24;;;;:::i;:::-;10752:39;;10735:6;10742;10735:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;10815:2;10806:11;;;;;:::i;:::-;;;10675:154;;;10853:6;10839:21;;;;;10145:723;;;;:::o;27096:1249::-;27337:7;:14;27323:3;:10;:28;27301:118;;;;;;;;;;;;:::i;:::-;;;;;;;;;27452:1;27438:16;;:2;:16;;;;27430:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;27509:16;27528:12;:10;:12::i;:::-;27509:31;;27553:60;27574:8;27584:4;27590:2;27594:3;27599:7;27608:4;27553:20;:60::i;:::-;27631:9;27626:470;27650:3;:10;27646:1;:14;27626:470;;;27682:10;27695:3;27699:1;27695:6;;;;;;;;;;;;;;;;;;;;;;27682:19;;27716:14;27733:7;27741:1;27733:10;;;;;;;;;;;;;;;;;;;;;;27716:27;;27760:19;27782:9;:13;27792:2;27782:13;;;;;;;;;;;:19;27796:4;27782:19;;;;;;;;;;;;;;;;27760:41;;27857:6;27842:11;:21;;27816:125;;;;;;;;;;;;:::i;:::-;;;;;;;;;28021:6;28007:11;:20;27985:9;:13;27995:2;27985:13;;;;;;;;;;;:19;27999:4;27985:19;;;;;;;;;;;;;;;:42;;;;28078:6;28057:9;:13;28067:2;28057:13;;;;;;;;;;;:17;28071:2;28057:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;27626:470;;;27662:3;;;;:::i;:::-;;;27626:470;;;;28143:2;28113:47;;28137:4;28113:47;;28127:8;28113:47;;;28147:3;28152:7;28113:47;;;;;;;:::i;:::-;;;;;;;;28173:164;28223:8;28246:4;28265:2;28282:3;28300:7;28322:4;28173:35;:164::i;:::-;27096:1249;;;;;;:::o;38815:173::-;38871:16;38890:6;;;;;;;;;;;38871:25;;38916:8;38907:6;;:17;;;;;;;;;;;;;;;;;;38971:8;38940:40;;38961:8;38940:40;;;;;;;;;;;;38815:173;;:::o;29678:777::-;29855:1;29836:21;;:7;:21;;;;29828:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;29908:16;29927:12;:10;:12::i;:::-;29908:31;;29952:196;29987:8;30018:1;30035:7;30057:21;30075:2;30057:17;:21::i;:::-;30093:25;30111:6;30093:17;:25::i;:::-;30133:4;29952:20;:196::i;:::-;30187:6;30161:9;:13;30171:2;30161:13;;;;;;;;;;;:22;30175:7;30161:22;;;;;;;;;;;;;;;;:32;;;;;;;:::i;:::-;;;;;;;;30246:7;30209:57;;30242:1;30209:57;;30224:8;30209:57;;;30255:2;30259:6;30209:57;;;;;;;:::i;:::-;;;;;;;;30279:168;30324:8;30355:1;30372:7;30394:2;30411:6;30432:4;30279:30;:168::i;:::-;29678:777;;;;;:::o;25792:946::-;25994:1;25980:16;;:2;:16;;;;25972:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;26051:16;26070:12;:10;:12::i;:::-;26051:31;;26095:185;26130:8;26153:4;26172:2;26189:21;26207:2;26189:17;:21::i;:::-;26225:25;26243:6;26225:17;:25::i;:::-;26265:4;26095:20;:185::i;:::-;26293:19;26315:9;:13;26325:2;26315:13;;;;;;;;;;;:19;26329:4;26315:19;;;;;;;;;;;;;;;;26293:41;;26382:6;26367:11;:21;;26345:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;26530:6;26516:11;:20;26494:9;:13;26504:2;26494:13;;;;;;;;;;;:19;26508:4;26494:19;;;;;;;;;;;;;;;:42;;;;26579:6;26558:9;:13;26568:2;26558:13;;;;;;;;;;;:17;26572:2;26558:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;26634:2;26603:46;;26628:4;26603:46;;26618:8;26603:46;;;26638:2;26642:6;26603:46;;;;;;;:::i;:::-;;;;;;;;26662:68;26693:8;26703:4;26709:2;26713;26717:6;26725:4;26662:30;:68::i;:::-;25792:946;;;;;;;:::o;34895:221::-;;;;;;;:::o;36030:975::-;36270:15;:2;:13;;;:15::i;:::-;36266:732;;;36340:2;36323:43;;;36389:8;36420:4;36447:3;36473:7;36503:4;36323:203;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;36302:685;;;;:::i;:::-;;;;;;;;36860:6;36853:14;;;;;;;;;;;:::i;:::-;;;;;;;;36302:685;36909:62;;;;;;;;;;:::i;:::-;;;;;;;;36302:685;36623:48;;;36611:60;;;:8;:60;;;;36585:199;;36714:50;;;;;;;;;;:::i;:::-;;;;;;;;36585:199;36540:259;36266:732;36030:975;;;;;;:::o;37013:230::-;37106:16;37140:22;37179:1;37165:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37140:41;;37203:7;37192:5;37198:1;37192:8;;;;;;;;;;;;;;;;;;;;;:18;;;;;37230:5;37223:12;;;37013:230;;;:::o;35124:898::-;35339:15;:2;:13;;;:15::i;:::-;35335:680;;;35409:2;35392:38;;;35453:8;35484:4;35511:2;35536:6;35565:4;35392:196;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;35371:633;;;;:::i;:::-;;;;;;;;35877:6;35870:14;;;;;;;;;;;:::i;:::-;;;;;;;;35371:633;35926:62;;;;;;;;;;:::i;:::-;;;;;;;;35371:633;35663:43;;;35651:55;;;:8;:55;;;;35647:154;;35731:50;;;;;;;;;;:::i;:::-;;;;;;;;35647:154;35602:214;35335:680;35124:898;;;;;;:::o;1367:387::-;1427:4;1635:12;1702:7;1690:20;1682:28;;1745:1;1738:4;:8;1731:15;;;1367:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:622:1:-;;145:80;160:64;217:6;160:64;:::i;:::-;145:80;:::i;:::-;136:89;;245:5;273:6;266:5;259:21;299:4;292:5;288:16;281:23;;324:6;374:3;366:4;358:6;354:17;349:3;345:27;342:36;339:2;;;391:1;388;381:12;339:2;419:1;404:236;429:6;426:1;423:13;404:236;;;496:3;524:37;557:3;545:10;524:37;:::i;:::-;519:3;512:50;591:4;586:3;582:14;575:21;;625:4;620:3;616:14;609:21;;464:176;451:1;448;444:9;439:14;;404:236;;;408:14;126:520;;;;;;;:::o;669:622::-;;790:80;805:64;862:6;805:64;:::i;:::-;790:80;:::i;:::-;781:89;;890:5;918:6;911:5;904:21;944:4;937:5;933:16;926:23;;969:6;1019:3;1011:4;1003:6;999:17;994:3;990:27;987:36;984:2;;;1036:1;1033;1026:12;984:2;1064:1;1049:236;1074:6;1071:1;1068:13;1049:236;;;1141:3;1169:37;1202:3;1190:10;1169:37;:::i;:::-;1164:3;1157:50;1236:4;1231:3;1227:14;1220:21;;1270:4;1265:3;1261:14;1254:21;;1109:176;1096:1;1093;1089:9;1084:14;;1049:236;;;1053:14;771:520;;;;;;;:::o;1297:342::-;;1399:64;1414:48;1455:6;1414:48;:::i;:::-;1399:64;:::i;:::-;1390:73;;1486:6;1479:5;1472:21;1524:4;1517:5;1513:16;1562:3;1553:6;1548:3;1544:16;1541:25;1538:2;;;1579:1;1576;1569:12;1538:2;1592:41;1626:6;1621:3;1616;1592:41;:::i;:::-;1380:259;;;;;;:::o;1645:344::-;;1748:65;1763:49;1805:6;1763:49;:::i;:::-;1748:65;:::i;:::-;1739:74;;1836:6;1829:5;1822:21;1874:4;1867:5;1863:16;1912:3;1903:6;1898:3;1894:16;1891:25;1888:2;;;1929:1;1926;1919:12;1888:2;1942:41;1976:6;1971:3;1966;1942:41;:::i;:::-;1729:260;;;;;;:::o;1995:139::-;;2079:6;2066:20;2057:29;;2095:33;2122:5;2095:33;:::i;:::-;2047:87;;;;:::o;2157:303::-;;2277:3;2270:4;2262:6;2258:17;2254:27;2244:2;;2295:1;2292;2285:12;2244:2;2335:6;2322:20;2360:94;2450:3;2442:6;2435:4;2427:6;2423:17;2360:94;:::i;:::-;2351:103;;2234:226;;;;;:::o;2483:303::-;;2603:3;2596:4;2588:6;2584:17;2580:27;2570:2;;2621:1;2618;2611:12;2570:2;2661:6;2648:20;2686:94;2776:3;2768:6;2761:4;2753:6;2749:17;2686:94;:::i;:::-;2677:103;;2560:226;;;;;:::o;2792:133::-;;2873:6;2860:20;2851:29;;2889:30;2913:5;2889:30;:::i;:::-;2841:84;;;;:::o;2931:137::-;;3014:6;3001:20;2992:29;;3030:32;3056:5;3030:32;:::i;:::-;2982:86;;;;:::o;3074:141::-;;3161:6;3155:13;3146:22;;3177:32;3203:5;3177:32;:::i;:::-;3136:79;;;;:::o;3234:271::-;;3338:3;3331:4;3323:6;3319:17;3315:27;3305:2;;3356:1;3353;3346:12;3305:2;3396:6;3383:20;3421:78;3495:3;3487:6;3480:4;3472:6;3468:17;3421:78;:::i;:::-;3412:87;;3295:210;;;;;:::o;3525:273::-;;3630:3;3623:4;3615:6;3611:17;3607:27;3597:2;;3648:1;3645;3638:12;3597:2;3688:6;3675:20;3713:79;3788:3;3780:6;3773:4;3765:6;3761:17;3713:79;:::i;:::-;3704:88;;3587:211;;;;;:::o;3804:139::-;;3888:6;3875:20;3866:29;;3904:33;3931:5;3904:33;:::i;:::-;3856:87;;;;:::o;3949:262::-;;4057:2;4045:9;4036:7;4032:23;4028:32;4025:2;;;4073:1;4070;4063:12;4025:2;4116:1;4141:53;4186:7;4177:6;4166:9;4162:22;4141:53;:::i;:::-;4131:63;;4087:117;4015:196;;;;:::o;4217:407::-;;;4342:2;4330:9;4321:7;4317:23;4313:32;4310:2;;;4358:1;4355;4348:12;4310:2;4401:1;4426:53;4471:7;4462:6;4451:9;4447:22;4426:53;:::i;:::-;4416:63;;4372:117;4528:2;4554:53;4599:7;4590:6;4579:9;4575:22;4554:53;:::i;:::-;4544:63;;4499:118;4300:324;;;;;:::o;4630:1241::-;;;;;;4865:3;4853:9;4844:7;4840:23;4836:33;4833:2;;;4882:1;4879;4872:12;4833:2;4925:1;4950:53;4995:7;4986:6;4975:9;4971:22;4950:53;:::i;:::-;4940:63;;4896:117;5052:2;5078:53;5123:7;5114:6;5103:9;5099:22;5078:53;:::i;:::-;5068:63;;5023:118;5208:2;5197:9;5193:18;5180:32;5239:18;5231:6;5228:30;5225:2;;;5271:1;5268;5261:12;5225:2;5299:78;5369:7;5360:6;5349:9;5345:22;5299:78;:::i;:::-;5289:88;;5151:236;5454:2;5443:9;5439:18;5426:32;5485:18;5477:6;5474:30;5471:2;;;5517:1;5514;5507:12;5471:2;5545:78;5615:7;5606:6;5595:9;5591:22;5545:78;:::i;:::-;5535:88;;5397:236;5700:3;5689:9;5685:19;5672:33;5732:18;5724:6;5721:30;5718:2;;;5764:1;5761;5754:12;5718:2;5792:62;5846:7;5837:6;5826:9;5822:22;5792:62;:::i;:::-;5782:72;;5643:221;4823:1048;;;;;;;;:::o;5877:955::-;;;;;;6062:3;6050:9;6041:7;6037:23;6033:33;6030:2;;;6079:1;6076;6069:12;6030:2;6122:1;6147:53;6192:7;6183:6;6172:9;6168:22;6147:53;:::i;:::-;6137:63;;6093:117;6249:2;6275:53;6320:7;6311:6;6300:9;6296:22;6275:53;:::i;:::-;6265:63;;6220:118;6377:2;6403:53;6448:7;6439:6;6428:9;6424:22;6403:53;:::i;:::-;6393:63;;6348:118;6505:2;6531:53;6576:7;6567:6;6556:9;6552:22;6531:53;:::i;:::-;6521:63;;6476:118;6661:3;6650:9;6646:19;6633:33;6693:18;6685:6;6682:30;6679:2;;;6725:1;6722;6715:12;6679:2;6753:62;6807:7;6798:6;6787:9;6783:22;6753:62;:::i;:::-;6743:72;;6604:221;6020:812;;;;;;;;:::o;6838:401::-;;;6960:2;6948:9;6939:7;6935:23;6931:32;6928:2;;;6976:1;6973;6966:12;6928:2;7019:1;7044:53;7089:7;7080:6;7069:9;7065:22;7044:53;:::i;:::-;7034:63;;6990:117;7146:2;7172:50;7214:7;7205:6;7194:9;7190:22;7172:50;:::i;:::-;7162:60;;7117:115;6918:321;;;;;:::o;7245:407::-;;;7370:2;7358:9;7349:7;7345:23;7341:32;7338:2;;;7386:1;7383;7376:12;7338:2;7429:1;7454:53;7499:7;7490:6;7479:9;7475:22;7454:53;:::i;:::-;7444:63;;7400:117;7556:2;7582:53;7627:7;7618:6;7607:9;7603:22;7582:53;:::i;:::-;7572:63;;7527:118;7328:324;;;;;:::o;7658:693::-;;;7833:2;7821:9;7812:7;7808:23;7804:32;7801:2;;;7849:1;7846;7839:12;7801:2;7920:1;7909:9;7905:17;7892:31;7950:18;7942:6;7939:30;7936:2;;;7982:1;7979;7972:12;7936:2;8010:78;8080:7;8071:6;8060:9;8056:22;8010:78;:::i;:::-;8000:88;;7863:235;8165:2;8154:9;8150:18;8137:32;8196:18;8188:6;8185:30;8182:2;;;8228:1;8225;8218:12;8182:2;8256:78;8326:7;8317:6;8306:9;8302:22;8256:78;:::i;:::-;8246:88;;8108:236;7791:560;;;;;:::o;8357:260::-;;8464:2;8452:9;8443:7;8439:23;8435:32;8432:2;;;8480:1;8477;8470:12;8432:2;8523:1;8548:52;8592:7;8583:6;8572:9;8568:22;8548:52;:::i;:::-;8538:62;;8494:116;8422:195;;;;:::o;8623:282::-;;8741:2;8729:9;8720:7;8716:23;8712:32;8709:2;;;8757:1;8754;8747:12;8709:2;8800:1;8825:63;8880:7;8871:6;8860:9;8856:22;8825:63;:::i;:::-;8815:73;;8771:127;8699:206;;;;:::o;8911:375::-;;9029:2;9017:9;9008:7;9004:23;9000:32;8997:2;;;9045:1;9042;9035:12;8997:2;9116:1;9105:9;9101:17;9088:31;9146:18;9138:6;9135:30;9132:2;;;9178:1;9175;9168:12;9132:2;9206:63;9261:7;9252:6;9241:9;9237:22;9206:63;:::i;:::-;9196:73;;9059:220;8987:299;;;;:::o;9292:262::-;;9400:2;9388:9;9379:7;9375:23;9371:32;9368:2;;;9416:1;9413;9406:12;9368:2;9459:1;9484:53;9529:7;9520:6;9509:9;9505:22;9484:53;:::i;:::-;9474:63;;9430:117;9358:196;;;;:::o;9560:179::-;;9650:46;9692:3;9684:6;9650:46;:::i;:::-;9728:4;9723:3;9719:14;9705:28;;9640:99;;;;:::o;9745:118::-;9832:24;9850:5;9832:24;:::i;:::-;9827:3;9820:37;9810:53;;:::o;9899:732::-;;10047:54;10095:5;10047:54;:::i;:::-;10117:86;10196:6;10191:3;10117:86;:::i;:::-;10110:93;;10227:56;10277:5;10227:56;:::i;:::-;10306:7;10337:1;10322:284;10347:6;10344:1;10341:13;10322:284;;;10423:6;10417:13;10450:63;10509:3;10494:13;10450:63;:::i;:::-;10443:70;;10536:60;10589:6;10536:60;:::i;:::-;10526:70;;10382:224;10369:1;10366;10362:9;10357:14;;10322:284;;;10326:14;10622:3;10615:10;;10023:608;;;;;;;:::o;10637:109::-;10718:21;10733:5;10718:21;:::i;:::-;10713:3;10706:34;10696:50;;:::o;10752:360::-;;10866:38;10898:5;10866:38;:::i;:::-;10920:70;10983:6;10978:3;10920:70;:::i;:::-;10913:77;;10999:52;11044:6;11039:3;11032:4;11025:5;11021:16;10999:52;:::i;:::-;11076:29;11098:6;11076:29;:::i;:::-;11071:3;11067:39;11060:46;;10842:270;;;;;:::o;11118:364::-;;11234:39;11267:5;11234:39;:::i;:::-;11289:71;11353:6;11348:3;11289:71;:::i;:::-;11282:78;;11369:52;11414:6;11409:3;11402:4;11395:5;11391:16;11369:52;:::i;:::-;11446:29;11468:6;11446:29;:::i;:::-;11441:3;11437:39;11430:46;;11210:272;;;;;:::o;11488:377::-;;11622:39;11655:5;11622:39;:::i;:::-;11677:89;11759:6;11754:3;11677:89;:::i;:::-;11670:96;;11775:52;11820:6;11815:3;11808:4;11801:5;11797:16;11775:52;:::i;:::-;11852:6;11847:3;11843:16;11836:23;;11598:267;;;;;:::o;11871:384::-;;12034:67;12098:2;12093:3;12034:67;:::i;:::-;12027:74;;12131:34;12127:1;12122:3;12118:11;12111:55;12197:22;12192:2;12187:3;12183:12;12176:44;12246:2;12241:3;12237:12;12230:19;;12017:238;;;:::o;12261:372::-;;12424:67;12488:2;12483:3;12424:67;:::i;:::-;12417:74;;12521:34;12517:1;12512:3;12508:11;12501:55;12587:10;12582:2;12577:3;12573:12;12566:32;12624:2;12619:3;12615:12;12608:19;;12407:226;;;:::o;12639:322::-;;12802:67;12866:2;12861:3;12802:67;:::i;:::-;12795:74;;12899:26;12895:1;12890:3;12886:11;12879:47;12952:2;12947:3;12943:12;12936:19;;12785:176;;;:::o;12967:375::-;;13130:67;13194:2;13189:3;13130:67;:::i;:::-;13123:74;;13227:34;13223:1;13218:3;13214:11;13207:55;13293:13;13288:2;13283:3;13279:12;13272:35;13333:2;13328:3;13324:12;13317:19;;13113:229;;;:::o;13348:370::-;;13511:67;13575:2;13570:3;13511:67;:::i;:::-;13504:74;;13608:34;13604:1;13599:3;13595:11;13588:55;13674:8;13669:2;13664:3;13660:12;13653:30;13709:2;13704:3;13700:12;13693:19;;13494:224;;;:::o;13724:373::-;;13887:67;13951:2;13946:3;13887:67;:::i;:::-;13880:74;;13984:34;13980:1;13975:3;13971:11;13964:55;14050:11;14045:2;14040:3;14036:12;14029:33;14088:2;14083:3;14079:12;14072:19;;13870:227;;;:::o;14103:371::-;;14266:67;14330:2;14325:3;14266:67;:::i;:::-;14259:74;;14363:34;14359:1;14354:3;14350:11;14343:55;14429:9;14424:2;14419:3;14415:12;14408:31;14465:2;14460:3;14456:12;14449:19;;14249:225;;;:::o;14480:436::-;;14643:67;14707:2;14702:3;14643:67;:::i;:::-;14636:74;;14740:34;14736:1;14731:3;14727:11;14720:55;14806:34;14801:2;14796:3;14792:12;14785:56;14872:8;14867:2;14862:3;14858:12;14851:30;14907:2;14902:3;14898:12;14891:19;;14626:290;;;:::o;14922:369::-;;15085:67;15149:2;15144:3;15085:67;:::i;:::-;15078:74;;15182:34;15178:1;15173:3;15169:11;15162:55;15248:7;15243:2;15238:3;15234:12;15227:29;15282:2;15277:3;15273:12;15266:19;;15068:223;;;:::o;15297:382::-;;15460:67;15524:2;15519:3;15460:67;:::i;:::-;15453:74;;15557:34;15553:1;15548:3;15544:11;15537:55;15623:20;15618:2;15613:3;15609:12;15602:42;15670:2;15665:3;15661:12;15654:19;;15443:236;;;:::o;15685:374::-;;15848:67;15912:2;15907:3;15848:67;:::i;:::-;15841:74;;15945:34;15941:1;15936:3;15932:11;15925:55;16011:12;16006:2;16001:3;15997:12;15990:34;16050:2;16045:3;16041:12;16034:19;;15831:228;;;:::o;16065:337::-;;16246:84;16328:1;16323:3;16246:84;:::i;:::-;16239:91;;16360:7;16356:1;16351:3;16347:11;16340:28;16394:1;16389:3;16385:11;16378:18;;16229:173;;;:::o;16408:330::-;;16571:67;16635:2;16630:3;16571:67;:::i;:::-;16564:74;;16668:34;16664:1;16659:3;16655:11;16648:55;16729:2;16724:3;16720:12;16713:19;;16554:184;;;:::o;16744:373::-;;16907:67;16971:2;16966:3;16907:67;:::i;:::-;16900:74;;17004:34;17000:1;16995:3;16991:11;16984:55;17070:11;17065:2;17060:3;17056:12;17049:33;17108:2;17103:3;17099:12;17092:19;;16890:227;;;:::o;17123:373::-;;17286:67;17350:2;17345:3;17286:67;:::i;:::-;17279:74;;17383:34;17379:1;17374:3;17370:11;17363:55;17449:11;17444:2;17439:3;17435:12;17428:33;17487:2;17482:3;17478:12;17471:19;;17269:227;;;:::o;17502:372::-;;17665:67;17729:2;17724:3;17665:67;:::i;:::-;17658:74;;17762:34;17758:1;17753:3;17749:11;17742:55;17828:10;17823:2;17818:3;17814:12;17807:32;17865:2;17860:3;17856:12;17849:19;;17648:226;;;:::o;17880:365::-;;18043:67;18107:2;18102:3;18043:67;:::i;:::-;18036:74;;18140:34;18136:1;18131:3;18127:11;18120:55;18206:3;18201:2;18196:3;18192:12;18185:25;18236:2;18231:3;18227:12;18220:19;;18026:219;;;:::o;18251:367::-;;18414:67;18478:2;18473:3;18414:67;:::i;:::-;18407:74;;18511:34;18507:1;18502:3;18498:11;18491:55;18577:5;18572:2;18567:3;18563:12;18556:27;18609:2;18604:3;18600:12;18593:19;;18397:221;;;:::o;18624:108::-;18701:24;18719:5;18701:24;:::i;:::-;18696:3;18689:37;18679:53;;:::o;18738:118::-;18825:24;18843:5;18825:24;:::i;:::-;18820:3;18813:37;18803:53;;:::o;18862:701::-;;19165:95;19256:3;19247:6;19165:95;:::i;:::-;19158:102;;19277:95;19368:3;19359:6;19277:95;:::i;:::-;19270:102;;19389:148;19533:3;19389:148;:::i;:::-;19382:155;;19554:3;19547:10;;19147:416;;;;;:::o;19569:222::-;;19700:2;19689:9;19685:18;19677:26;;19713:71;19781:1;19770:9;19766:17;19757:6;19713:71;:::i;:::-;19667:124;;;;:::o;19797:1053::-;;20158:3;20147:9;20143:19;20135:27;;20172:71;20240:1;20229:9;20225:17;20216:6;20172:71;:::i;:::-;20253:72;20321:2;20310:9;20306:18;20297:6;20253:72;:::i;:::-;20372:9;20366:4;20362:20;20357:2;20346:9;20342:18;20335:48;20400:108;20503:4;20494:6;20400:108;:::i;:::-;20392:116;;20555:9;20549:4;20545:20;20540:2;20529:9;20525:18;20518:48;20583:108;20686:4;20677:6;20583:108;:::i;:::-;20575:116;;20739:9;20733:4;20729:20;20723:3;20712:9;20708:19;20701:49;20767:76;20838:4;20829:6;20767:76;:::i;:::-;20759:84;;20125:725;;;;;;;;:::o;20856:751::-;;21117:3;21106:9;21102:19;21094:27;;21131:71;21199:1;21188:9;21184:17;21175:6;21131:71;:::i;:::-;21212:72;21280:2;21269:9;21265:18;21256:6;21212:72;:::i;:::-;21294;21362:2;21351:9;21347:18;21338:6;21294:72;:::i;:::-;21376;21444:2;21433:9;21429:18;21420:6;21376:72;:::i;:::-;21496:9;21490:4;21486:20;21480:3;21469:9;21465:19;21458:49;21524:76;21595:4;21586:6;21524:76;:::i;:::-;21516:84;;21084:523;;;;;;;;:::o;21613:373::-;;21794:2;21783:9;21779:18;21771:26;;21843:9;21837:4;21833:20;21829:1;21818:9;21814:17;21807:47;21871:108;21974:4;21965:6;21871:108;:::i;:::-;21863:116;;21761:225;;;;:::o;21992:634::-;;22251:2;22240:9;22236:18;22228:26;;22300:9;22294:4;22290:20;22286:1;22275:9;22271:17;22264:47;22328:108;22431:4;22422:6;22328:108;:::i;:::-;22320:116;;22483:9;22477:4;22473:20;22468:2;22457:9;22453:18;22446:48;22511:108;22614:4;22605:6;22511:108;:::i;:::-;22503:116;;22218:408;;;;;:::o;22632:210::-;;22757:2;22746:9;22742:18;22734:26;;22770:65;22832:1;22821:9;22817:17;22808:6;22770:65;:::i;:::-;22724:118;;;;:::o;22848:313::-;;22999:2;22988:9;22984:18;22976:26;;23048:9;23042:4;23038:20;23034:1;23023:9;23019:17;23012:47;23076:78;23149:4;23140:6;23076:78;:::i;:::-;23068:86;;22966:195;;;;:::o;23167:419::-;;23371:2;23360:9;23356:18;23348:26;;23420:9;23414:4;23410:20;23406:1;23395:9;23391:17;23384:47;23448:131;23574:4;23448:131;:::i;:::-;23440:139;;23338:248;;;:::o;23592:419::-;;23796:2;23785:9;23781:18;23773:26;;23845:9;23839:4;23835:20;23831:1;23820:9;23816:17;23809:47;23873:131;23999:4;23873:131;:::i;:::-;23865:139;;23763:248;;;:::o;24017:419::-;;24221:2;24210:9;24206:18;24198:26;;24270:9;24264:4;24260:20;24256:1;24245:9;24241:17;24234:47;24298:131;24424:4;24298:131;:::i;:::-;24290:139;;24188:248;;;:::o;24442:419::-;;24646:2;24635:9;24631:18;24623:26;;24695:9;24689:4;24685:20;24681:1;24670:9;24666:17;24659:47;24723:131;24849:4;24723:131;:::i;:::-;24715:139;;24613:248;;;:::o;24867:419::-;;25071:2;25060:9;25056:18;25048:26;;25120:9;25114:4;25110:20;25106:1;25095:9;25091:17;25084:47;25148:131;25274:4;25148:131;:::i;:::-;25140:139;;25038:248;;;:::o;25292:419::-;;25496:2;25485:9;25481:18;25473:26;;25545:9;25539:4;25535:20;25531:1;25520:9;25516:17;25509:47;25573:131;25699:4;25573:131;:::i;:::-;25565:139;;25463:248;;;:::o;25717:419::-;;25921:2;25910:9;25906:18;25898:26;;25970:9;25964:4;25960:20;25956:1;25945:9;25941:17;25934:47;25998:131;26124:4;25998:131;:::i;:::-;25990:139;;25888:248;;;:::o;26142:419::-;;26346:2;26335:9;26331:18;26323:26;;26395:9;26389:4;26385:20;26381:1;26370:9;26366:17;26359:47;26423:131;26549:4;26423:131;:::i;:::-;26415:139;;26313:248;;;:::o;26567:419::-;;26771:2;26760:9;26756:18;26748:26;;26820:9;26814:4;26810:20;26806:1;26795:9;26791:17;26784:47;26848:131;26974:4;26848:131;:::i;:::-;26840:139;;26738:248;;;:::o;26992:419::-;;27196:2;27185:9;27181:18;27173:26;;27245:9;27239:4;27235:20;27231:1;27220:9;27216:17;27209:47;27273:131;27399:4;27273:131;:::i;:::-;27265:139;;27163:248;;;:::o;27417:419::-;;27621:2;27610:9;27606:18;27598:26;;27670:9;27664:4;27660:20;27656:1;27645:9;27641:17;27634:47;27698:131;27824:4;27698:131;:::i;:::-;27690:139;;27588:248;;;:::o;27842:419::-;;28046:2;28035:9;28031:18;28023:26;;28095:9;28089:4;28085:20;28081:1;28070:9;28066:17;28059:47;28123:131;28249:4;28123:131;:::i;:::-;28115:139;;28013:248;;;:::o;28267:419::-;;28471:2;28460:9;28456:18;28448:26;;28520:9;28514:4;28510:20;28506:1;28495:9;28491:17;28484:47;28548:131;28674:4;28548:131;:::i;:::-;28540:139;;28438:248;;;:::o;28692:419::-;;28896:2;28885:9;28881:18;28873:26;;28945:9;28939:4;28935:20;28931:1;28920:9;28916:17;28909:47;28973:131;29099:4;28973:131;:::i;:::-;28965:139;;28863:248;;;:::o;29117:419::-;;29321:2;29310:9;29306:18;29298:26;;29370:9;29364:4;29360:20;29356:1;29345:9;29341:17;29334:47;29398:131;29524:4;29398:131;:::i;:::-;29390:139;;29288:248;;;:::o;29542:419::-;;29746:2;29735:9;29731:18;29723:26;;29795:9;29789:4;29785:20;29781:1;29770:9;29766:17;29759:47;29823:131;29949:4;29823:131;:::i;:::-;29815:139;;29713:248;;;:::o;29967:419::-;;30171:2;30160:9;30156:18;30148:26;;30220:9;30214:4;30210:20;30206:1;30195:9;30191:17;30184:47;30248:131;30374:4;30248:131;:::i;:::-;30240:139;;30138:248;;;:::o;30392:222::-;;30523:2;30512:9;30508:18;30500:26;;30536:71;30604:1;30593:9;30589:17;30580:6;30536:71;:::i;:::-;30490:124;;;;:::o;30620:332::-;;30779:2;30768:9;30764:18;30756:26;;30792:71;30860:1;30849:9;30845:17;30836:6;30792:71;:::i;:::-;30873:72;30941:2;30930:9;30926:18;30917:6;30873:72;:::i;:::-;30746:206;;;;;:::o;30958:283::-;;31024:2;31018:9;31008:19;;31066:4;31058:6;31054:17;31173:6;31161:10;31158:22;31137:18;31125:10;31122:34;31119:62;31116:2;;;31184:18;;:::i;:::-;31116:2;31224:10;31220:2;31213:22;30998:243;;;;:::o;31247:311::-;;31414:18;31406:6;31403:30;31400:2;;;31436:18;;:::i;:::-;31400:2;31486:4;31478:6;31474:17;31466:25;;31546:4;31540;31536:15;31528:23;;31329:229;;;:::o;31564:311::-;;31731:18;31723:6;31720:30;31717:2;;;31753:18;;:::i;:::-;31717:2;31803:4;31795:6;31791:17;31783:25;;31863:4;31857;31853:15;31845:23;;31646:229;;;:::o;31881:331::-;;32032:18;32024:6;32021:30;32018:2;;;32054:18;;:::i;:::-;32018:2;32139:4;32135:9;32128:4;32120:6;32116:17;32112:33;32104:41;;32200:4;32194;32190:15;32182:23;;31947:265;;;:::o;32218:332::-;;32370:18;32362:6;32359:30;32356:2;;;32392:18;;:::i;:::-;32356:2;32477:4;32473:9;32466:4;32458:6;32454:17;32450:33;32442:41;;32538:4;32532;32528:15;32520:23;;32285:265;;;:::o;32556:132::-;;32646:3;32638:11;;32676:4;32671:3;32667:14;32659:22;;32628:60;;;:::o;32694:114::-;;32795:5;32789:12;32779:22;;32768:40;;;:::o;32814:98::-;;32899:5;32893:12;32883:22;;32872:40;;;:::o;32918:99::-;;33004:5;32998:12;32988:22;;32977:40;;;:::o;33023:113::-;;33125:4;33120:3;33116:14;33108:22;;33098:38;;;:::o;33142:184::-;;33275:6;33270:3;33263:19;33315:4;33310:3;33306:14;33291:29;;33253:73;;;;:::o;33332:168::-;;33449:6;33444:3;33437:19;33489:4;33484:3;33480:14;33465:29;;33427:73;;;;:::o;33506:169::-;;33624:6;33619:3;33612:19;33664:4;33659:3;33655:14;33640:29;;33602:73;;;;:::o;33681:148::-;;33820:3;33805:18;;33795:34;;;;:::o;33835:305::-;;33894:20;33912:1;33894:20;:::i;:::-;33889:25;;33928:20;33946:1;33928:20;:::i;:::-;33923:25;;34082:1;34014:66;34010:74;34007:1;34004:81;34001:2;;;34088:18;;:::i;:::-;34001:2;34132:1;34129;34125:9;34118:16;;33879:261;;;;:::o;34146:185::-;;34203:20;34221:1;34203:20;:::i;:::-;34198:25;;34237:20;34255:1;34237:20;:::i;:::-;34232:25;;34276:1;34266:2;;34281:18;;:::i;:::-;34266:2;34323:1;34320;34316:9;34311:14;;34188:143;;;;:::o;34337:191::-;;34397:20;34415:1;34397:20;:::i;:::-;34392:25;;34431:20;34449:1;34431:20;:::i;:::-;34426:25;;34470:1;34467;34464:8;34461:2;;;34475:18;;:::i;:::-;34461:2;34520:1;34517;34513:9;34505:17;;34382:146;;;;:::o;34534:96::-;;34600:24;34618:5;34600:24;:::i;:::-;34589:35;;34579:51;;;:::o;34636:90::-;;34713:5;34706:13;34699:21;34688:32;;34678:48;;;:::o;34732:149::-;;34808:66;34801:5;34797:78;34786:89;;34776:105;;;:::o;34887:126::-;;34964:42;34957:5;34953:54;34942:65;;34932:81;;;:::o;35019:77::-;;35085:5;35074:16;;35064:32;;;:::o;35102:154::-;35186:6;35181:3;35176;35163:30;35248:1;35239:6;35234:3;35230:16;35223:27;35153:103;;;:::o;35262:307::-;35330:1;35340:113;35354:6;35351:1;35348:13;35340:113;;;35439:1;35434:3;35430:11;35424:18;35420:1;35415:3;35411:11;35404:39;35376:2;35373:1;35369:10;35364:15;;35340:113;;;35471:6;35468:1;35465:13;35462:2;;;35551:1;35542:6;35537:3;35533:16;35526:27;35462:2;35311:258;;;;:::o;35575:320::-;;35656:1;35650:4;35646:12;35636:22;;35703:1;35697:4;35693:12;35724:18;35714:2;;35780:4;35772:6;35768:17;35758:27;;35714:2;35842;35834:6;35831:14;35811:18;35808:38;35805:2;;;35861:18;;:::i;:::-;35805:2;35626:269;;;;:::o;35901:233::-;;35963:24;35981:5;35963:24;:::i;:::-;35954:33;;36009:66;36002:5;35999:77;35996:2;;;36079:18;;:::i;:::-;35996:2;36126:1;36119:5;36115:13;36108:20;;35944:190;;;:::o;36140:176::-;;36189:20;36207:1;36189:20;:::i;:::-;36184:25;;36223:20;36241:1;36223:20;:::i;:::-;36218:25;;36262:1;36252:2;;36267:18;;:::i;:::-;36252:2;36308:1;36305;36301:9;36296:14;;36174:142;;;;:::o;36322:180::-;36370:77;36367:1;36360:88;36467:4;36464:1;36457:15;36491:4;36488:1;36481:15;36508:180;36556:77;36553:1;36546:88;36653:4;36650:1;36643:15;36677:4;36674:1;36667:15;36694:180;36742:77;36739:1;36732:88;36839:4;36836:1;36829:15;36863:4;36860:1;36853:15;36880:180;36928:77;36925:1;36918:88;37025:4;37022:1;37015:15;37049:4;37046:1;37039:15;37066:102;;37158:2;37154:7;37149:2;37142:5;37138:14;37134:28;37124:38;;37114:54;;;:::o;37174:106::-;;37267:5;37262:3;37258:15;37237:36;;37227:53;;;:::o;37286:833::-;;37363:4;37345:16;37342:26;37339:2;;;37371:5;;37339:2;37409:1;37406;37403;37388:23;37431:34;37462:1;37456:8;37431:34;:::i;:::-;37492:10;37487:3;37484:19;37474:2;;37507:5;;;37474:2;37542;37536:9;37600:1;37582:16;37578:24;37575:1;37569:4;37554:49;37633:4;37627:11;37732:16;37725:4;37717:6;37713:17;37710:39;37677:18;37669:6;37666:30;37650:113;37647:2;;;37778:5;;;;;37647:2;37824:6;37818:4;37814:17;37860:3;37854:10;37887:18;37879:6;37876:30;37873:2;;;37909:5;;;;;;;37873:2;37957:6;37950:4;37945:3;37941:14;37937:27;37994:16;37988:4;37984:27;37979:3;37976:36;37973:2;;;38015:5;;;;;;;;37973:2;38063:29;38085:6;38063:29;:::i;:::-;38056:4;38051:3;38047:14;38043:50;38039:2;38032:62;38110:3;38103:10;;37329:790;;;;;;;;:::o;38125:122::-;38198:24;38216:5;38198:24;:::i;:::-;38191:5;38188:35;38178:2;;38237:1;38234;38227:12;38178:2;38168:79;:::o;38253:116::-;38323:21;38338:5;38323:21;:::i;:::-;38316:5;38313:32;38303:2;;38359:1;38356;38349:12;38303:2;38293:76;:::o;38375:120::-;38447:23;38464:5;38447:23;:::i;:::-;38440:5;38437:34;38427:2;;38485:1;38482;38475:12;38427:2;38417:78;:::o;38501:122::-;38574:24;38592:5;38574:24;:::i;:::-;38567:5;38564:35;38554:2;;38613:1;38610;38603:12;38554:2;38544:79;:::o

Swarm Source

ipfs://a1ba61030ddd0cbf343fa8e7c3ff520facc64e5e6b7f35df1a027e50d3a4f735
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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