ETH Price: $2,944.48 (-6.74%)
Gas: 7 Gwei

Token

YuckPass (YUCK)
 

Overview

Max Total Supply

1,233 YUCK

Holders

764

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
0x498d81a4d0ba7fc06c1820927793a48403627afc
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:
YuckPass

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// File: @openzeppelin/contracts/utils/cryptography/MerkleProof.sol


// OpenZeppelin Contracts v4.4.1 (utils/cryptography/MerkleProof.sol)

pragma solidity ^0.8.0;

/**
 * @dev These functions deal with verification of Merkle Trees proofs.
 *
 * The proofs can be generated using the JavaScript library
 * https://github.com/miguelmota/merkletreejs[merkletreejs].
 * Note: the hashing algorithm should be keccak256 and pair sorting should be enabled.
 *
 * See `test/utils/cryptography/MerkleProof.test.js` for some examples.
 */
library MerkleProof {
    /**
     * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree
     * defined by `root`. For this, a `proof` must be provided, containing
     * sibling hashes on the branch from the leaf to the root of the tree. Each
     * pair of leaves and each pair of pre-images are assumed to be sorted.
     */
    function verify(
        bytes32[] memory proof,
        bytes32 root,
        bytes32 leaf
    ) internal pure returns (bool) {
        return processProof(proof, leaf) == root;
    }

    /**
     * @dev Returns the rebuilt hash obtained by traversing a Merklee tree up
     * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt
     * hash matches the root of the tree. When processing the proof, the pairs
     * of leafs & pre-images are assumed to be sorted.
     *
     * _Available since v4.4._
     */
    function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) {
        bytes32 computedHash = leaf;
        for (uint256 i = 0; i < proof.length; i++) {
            bytes32 proofElement = proof[i];
            if (computedHash <= proofElement) {
                // Hash(current computed hash + current element of the proof)
                computedHash = keccak256(abi.encodePacked(computedHash, proofElement));
            } else {
                // Hash(current element of the proof + current computed hash)
                computedHash = keccak256(abi.encodePacked(proofElement, computedHash));
            }
        }
        return computedHash;
    }
}

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


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

pragma solidity ^0.8.0;

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

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

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


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

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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


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

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

pragma solidity ^0.8.0;

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

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


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

pragma solidity ^0.8.0;


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

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


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

pragma solidity ^0.8.0;


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

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

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


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

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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

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

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


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

pragma solidity ^0.8.0;


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

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


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

pragma solidity ^0.8.0;







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

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

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

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

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

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

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

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

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

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

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

        return batchBalances;
    }

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

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

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

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

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

        address operator = _msgSender();

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

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

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

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

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

        address operator = _msgSender();

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

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

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

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

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

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

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

        address operator = _msgSender();

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

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

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

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

        address operator = _msgSender();

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

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

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

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

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

        address operator = _msgSender();

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

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

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

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

        address operator = _msgSender();

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

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

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

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

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

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

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

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

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

        return array;
    }
}

// File: YuckPass.sol


pragma solidity >=0.8.0 <0.9.0;




library OpenSeaGasFreeListing { 
    /**
    @notice Returns whether the operator is an OpenSea proxy for the owner, thus
    allowing it to list without the token owner paying gas.
    @dev ERC{721,1155}.isApprovedForAll should be overriden to also check if
    this function returns true.
     */
    function isApprovedForAll(address owner, address operator) internal view returns (bool) {
        ProxyRegistry registry;
        assembly {
            switch chainid()
            case 1 {
                // mainnet
                registry := 0xa5409ec958c83c3f309868babaca7c86dcb077c1
            }
            case 4 {
                // rinkeby
                registry := 0xf57b2c51ded3a29e6891aba85459d600256cf317
            }
        }

        return address(registry) != address(0) && address(registry.proxies(owner)) == operator;
    }
}

contract OwnableDelegateProxy {}

contract ProxyRegistry {
    mapping(address => OwnableDelegateProxy) public proxies;
}

contract YuckPass is ERC1155, Ownable {

  uint public constant YUCKY = 0;
  uint public constant GOLD = 1;
  uint public constant SILVER = 2;
  uint public constant BRONZE = 3;

  uint public YUCKY_MAX_TOKENS = 3;
  uint public GOLD_MAX_TOKENS = 330;
  uint public SILVER_MAX_TOKENS = 1000;
  uint public BRONZE_MAX_TOKENS = 2000;

  uint public YUCKY_NUM_MINITED = 0;
  uint public GOLD_NUM_MINITED = 0;
  uint public SILVER_NUM_MINITED = 0;
  uint public BRONZE_NUM_MINITED = 0;

  uint public MAX_TOKENS = YUCKY_MAX_TOKENS + GOLD_MAX_TOKENS + SILVER_MAX_TOKENS + BRONZE_MAX_TOKENS;
  uint public numMinted = 0;

  uint public yuckyPriceWei = 0 ether; // 0
  uint public goldPriceWei = 0.25 ether; // 1
  uint public silverPriceWei = 0.08 ether; // 2
  uint public bronzePriceWei = 0.03 ether; // 3

  // All members of First Buyer whitelist.
  bytes32 public firstBuyersMerkleRoot;

  // All members of YuckList whitelist.
  bytes32 public yuckListMerkleRoot;

  mapping (address => uint) public sale1NumMinted;
  mapping (address => uint) public sale2NumMinted;
  mapping (address => uint) public publicNumMinted;

  // Whitelist types (which whitelist is the caller on).
  uint public constant FIRST_BUYERS = 1;
  uint public constant YUCKLIST = 2;

  // Sale state:
  // 0: Closed
  // 1: Open to First Buyer whitelist. Each address can mint 1.
  // 2: Open to First Buyer + YuckList whitelists. Each address can mint 3.
  // 3: Open to Public. Each address can mint 5.
  uint256 public saleState = 0;

  string private _contractUri = "https://yuckpass.com/yuckpass/metadata/contract.json";

  string public name = "YuckPass";
  string public symbol = "YUCK";

  constructor() public ERC1155("https://yuckpass.com/yuckpass/metadata/tokens/{id}.json") {}

  function mint(uint passType, uint amount) public payable {
    require(saleState == 3, "Public mint is not open");
    /**
    * Sale 3:
    * Public. 5 per address. 
    */
    publicNumMinted[msg.sender] = publicNumMinted[msg.sender] + amount;
    require(publicNumMinted[msg.sender] <= 3, "Cannot mint more than 3 per address in this phase");
    _internalMint(passType, amount);
  }

  function earlyMint(uint passType, uint amount, uint whitelistType, bytes32[] calldata merkleProof) public payable {
    require(saleState > 0, "Sale is not open");
    if (saleState == 1) {
      /**
       * Sale 1: 
       * First Buyers only. 1 per address.
       */
      sale1NumMinted[msg.sender] = sale1NumMinted[msg.sender] + amount;
      require(sale1NumMinted[msg.sender] == 1, "Cannot mint more than 1 per address in this phase.");
      
      require(whitelistType == FIRST_BUYERS, "Must use First Buyers whitelist");
      verifyMerkle(msg.sender, merkleProof, FIRST_BUYERS);

    } else if (saleState == 2) {
      /**
       * Sale 2: 
       * First Buyers or YuckList. 2 per address.
       */
      sale2NumMinted[msg.sender] = sale2NumMinted[msg.sender] + amount;
      require(sale2NumMinted[msg.sender] <= 2, "Cannot mint more than 2 per address in this phase.");

      verifyMerkle(msg.sender, merkleProof, whitelistType);
      
    } else {
      revert("The early sale is over. Use the public mint function instead.");
    }

    _internalMint(passType, amount);
  }

  function _internalMint(uint passType, uint amount) internal {
    incrementNumMintedTier(passType, amount);
    if (passType == GOLD) {
      checkPayment(goldPriceWei * amount);
    }
    else if (passType == SILVER) {
      checkPayment(silverPriceWei * amount);
    } 
    else if (passType == BRONZE) {
      checkPayment(bronzePriceWei * amount);
    } else {
      revert("Invalid pass type");
    }
    _mint(msg.sender, passType, amount, "");
  }

  function ownerMint(uint passType, uint amount) public onlyOwner {
    incrementNumMintedTier(passType, amount);
    require(passType == YUCKY || passType == GOLD || passType == SILVER || passType == BRONZE, "Invalid passType");
    _mint(msg.sender, passType, amount, "");
  }

  function incrementNumMintedTier(uint passType, uint amount) internal {
    if (passType == YUCKY) {
      YUCKY_NUM_MINITED = YUCKY_NUM_MINITED + amount;
      require(YUCKY_NUM_MINITED <= YUCKY_MAX_TOKENS, "Minting would exceed yucky max tokens");
    }
    else if (passType == GOLD) {
      GOLD_NUM_MINITED = GOLD_NUM_MINITED + amount;
      require(GOLD_NUM_MINITED <= GOLD_MAX_TOKENS, "Minting would exceed gold max tokens");
    }
    else if (passType == SILVER) {
      SILVER_NUM_MINITED = SILVER_NUM_MINITED + amount;
      require(SILVER_NUM_MINITED <= SILVER_MAX_TOKENS, "Minting would exceed silver max tokens");
    } 
    else if (passType == BRONZE) {
      BRONZE_NUM_MINITED = BRONZE_NUM_MINITED + amount;
      require(BRONZE_NUM_MINITED <= BRONZE_MAX_TOKENS, "Minting would exceed bronze max tokens");
    } else {
      revert("Invalid pass type");
    }
    numMinted = numMinted + amount;
  }

  function incrementNumMinted(uint amount) internal {
    numMinted = numMinted + amount;
    require(numMinted <= MAX_TOKENS, "Minting would exceed max tokens");
  }

  function verifyMerkle(address addr, bytes32[] calldata proof, uint whitelistType) internal view {
    require(isOnWhitelist(addr, proof, whitelistType), "User is not on whitelist");
  }

  function isOnWhitelist(address addr, bytes32[] calldata proof, uint whitelistType) public view returns (bool) {
    bytes32 root;
    if (whitelistType == FIRST_BUYERS) {
      root = firstBuyersMerkleRoot;
    } else if (whitelistType == YUCKLIST) {
      root = yuckListMerkleRoot;
    } else {
      revert("Invalid whitelistType, must be 1 or 2");
    }
    bytes32 leaf = keccak256(abi.encodePacked(addr));
    return MerkleProof.verify(proof, root, leaf);
  }

  function checkPayment(uint amountRequired) internal {
    require(msg.value >= amountRequired, "Not enough funds sent");
  }

  function setFirstBuyersMerkleRoot(bytes32 newMerkle) public onlyOwner {
    firstBuyersMerkleRoot = newMerkle;
  }

  function setYuckListMerkleRoot(bytes32 newMerkle) public onlyOwner {
    yuckListMerkleRoot = newMerkle;
  }

  function setSaleState(uint newState) public onlyOwner {
    require(newState >= 0 && newState <= 3, "Invalid state");
    saleState = newState;
  }

  function withdraw() public onlyOwner {
    uint balance = address(this).balance;
    payable(msg.sender).transfer(balance);
  }

  function setBaseUri(string calldata newUri) public onlyOwner {
    _setURI(newUri);
  }

  function setContractUri(string calldata newUri) public onlyOwner {
    _contractUri = newUri;
  }

  function setGoldPriceWei(uint newPrice) public onlyOwner {
    goldPriceWei = newPrice;
  }

  function setSilverPriceWei(uint newPrice) public onlyOwner {
    silverPriceWei = newPrice;
  }

  function setBronzePriceWei(uint newPrice) public onlyOwner {
    bronzePriceWei = newPrice;
  }

  function setBronzeMaxTokens(uint newMax) public onlyOwner {
    BRONZE_MAX_TOKENS = newMax;
  }

  function setSilverMaxTokens(uint newMax) public onlyOwner {
    SILVER_MAX_TOKENS = newMax;
  }

  function setGoldMaxTokens(uint newMax) public onlyOwner {
    GOLD_MAX_TOKENS = newMax;
  }

  function isApprovedForAll(address owner, address operator) public view override returns (bool) {
    return OpenSeaGasFreeListing.isApprovedForAll(owner, operator) || super.isApprovedForAll(owner, operator);
  }

  function contractURI() public view returns (string memory) {
    return _contractUri;
  }
}

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":[],"name":"BRONZE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BRONZE_MAX_TOKENS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BRONZE_NUM_MINITED","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"FIRST_BUYERS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"GOLD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"GOLD_MAX_TOKENS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"GOLD_NUM_MINITED","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_TOKENS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SILVER","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SILVER_MAX_TOKENS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SILVER_NUM_MINITED","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"YUCKLIST","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"YUCKY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"YUCKY_MAX_TOKENS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"YUCKY_NUM_MINITED","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bronzePriceWei","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"passType","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"whitelistType","type":"uint256"},{"internalType":"bytes32[]","name":"merkleProof","type":"bytes32[]"}],"name":"earlyMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"firstBuyersMerkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"goldPriceWei","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"},{"internalType":"uint256","name":"whitelistType","type":"uint256"}],"name":"isOnWhitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"passType","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"passType","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ownerMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"publicNumMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"","type":"address"}],"name":"sale1NumMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"sale2NumMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"saleState","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"newUri","type":"string"}],"name":"setBaseUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMax","type":"uint256"}],"name":"setBronzeMaxTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"setBronzePriceWei","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newUri","type":"string"}],"name":"setContractUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"newMerkle","type":"bytes32"}],"name":"setFirstBuyersMerkleRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMax","type":"uint256"}],"name":"setGoldMaxTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"setGoldPriceWei","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newState","type":"uint256"}],"name":"setSaleState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMax","type":"uint256"}],"name":"setSilverMaxTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"setSilverPriceWei","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"newMerkle","type":"bytes32"}],"name":"setYuckListMerkleRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"silverPriceWei","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"yuckListMerkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"yuckyPriceWei","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]

6080604052600360045561014a6005556103e86006556107d0600755600060085560006009556000600a556000600b556007546006546005546004546200004791906200035c565b6200005391906200035c565b6200005f91906200035c565b600c556000600d556000600e556703782dace9d90000600f5567011c37937e080000601055666a94d74f430000601155600060175560405180606001604052806034815260200162005eff6034913960189080519060200190620000c5929190620002ac565b506040518060400160405280600881526020017f5975636b506173730000000000000000000000000000000000000000000000008152506019908051906020019062000113929190620002ac565b506040518060400160405280600481526020017f5955434b00000000000000000000000000000000000000000000000000000000815250601a908051906020019062000161929190620002ac565b503480156200016f57600080fd5b5060405180606001604052806037815260200162005f33603791396200019b81620001c260201b60201c565b50620001bc620001b0620001de60201b60201c565b620001e660201b60201c565b62000457565b8060029080519060200190620001da929190620002ac565b5050565b600033905090565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620002ba90620003c3565b90600052602060002090601f016020900481019282620002de57600085556200032a565b82601f10620002f957805160ff19168380011785556200032a565b828001600101855582156200032a579182015b82811115620003295782518255916020019190600101906200030c565b5b5090506200033991906200033d565b5090565b5b80821115620003585760008160009055506001016200033e565b5090565b60006200036982620003b9565b91506200037683620003b9565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115620003ae57620003ad620003f9565b5b828201905092915050565b6000819050919050565b60006002820490506001821680620003dc57607f821691505b60208210811415620003f357620003f262000428565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b615a9880620004676000396000f3fe60806040526004361061036a5760003560e01c806395d89b41116101c6578063d47573d4116100f7578063e985e9c511610095578063f45d86d21161006f578063f45d86d214610c69578063f47c84c514610c92578063f82d941f14610cbd578063fbefeaa414610ce85761036a565b8063e985e9c514610bda578063f242432a14610c17578063f2fde38b14610c405761036a565b8063e00fd543116100d1578063e00fd54314610b2e578063e3e55f0814610b59578063e4cc7e3d14610b84578063e8a3d48514610baf5761036a565b8063d47573d414610aaf578063d52079b414610ad8578063dd22c20b14610b035761036a565b8063c7f9378511610164578063c8be3f511161013e578063c8be3f51146109f5578063ccb4807b14610a1e578063cee2688514610a47578063cf14b28314610a845761036a565b8063c7f9378514610983578063c813cfd4146109ae578063c819b87b146109ca5761036a565b8063a22cb465116101a0578063a22cb465146108dd578063a961b16214610906578063bba767f91461092f578063c2de8f2b146109585761036a565b806395d89b4114610860578063997994fe1461088b578063a0bcfc7f146108b45761036a565b80632eb2c2d6116102a057806356fac7161161023e5780637708c027116102185780637708c027146107ba5780638c25de60146107e35780638da5cb5b1461080c5780638ff2846f146108375761036a565b806356fac7161461074d578063603f4d5214610778578063715018a6146107a35761036a565b80633e4bee381161027a5780633e4bee381461068f57806341fa3755146106ba57806348a95e73146106e55780634e1273f4146107105761036a565b80632eb2c2d61461062457806336cc955c1461064d5780633ccfd60b146106785761036a565b80630f420d9b1161030d5780631b1081fa116102e75780631b1081fa146105875780631b2ef1ca146105b25780632049ac06146105ce57806320a86f4c146105f95761036a565b80630f420d9b146104d057806312fd93d51461050d5780631a58f3ca1461054a5761036a565b8063084c408811610349578063084c4088146104145780630c97cfc21461043d5780630e814981146104685780630e89341c146104935761036a565b8062fdd58e1461036f57806301ffc9a7146103ac57806306fdde03146103e9575b600080fd5b34801561037b57600080fd5b5061039660048036038101906103919190613eb2565b610d13565b6040516103a39190614c70565b60405180910390f35b3480156103b857600080fd5b506103d360048036038101906103ce9190613f97565b610ddc565b6040516103e09190614858565b60405180910390f35b3480156103f557600080fd5b506103fe610ebe565b60405161040b919061488e565b60405180910390f35b34801561042057600080fd5b5061043b6004803603810190610436919061406b565b610f4c565b005b34801561044957600080fd5b50610452611023565b60405161045f9190614c70565b60405180910390f35b34801561047457600080fd5b5061047d611029565b60405161048a9190614c70565b60405180910390f35b34801561049f57600080fd5b506104ba60048036038101906104b5919061406b565b61102f565b6040516104c7919061488e565b60405180910390f35b3480156104dc57600080fd5b506104f760048036038101906104f29190613c2b565b6110c3565b6040516105049190614c70565b60405180910390f35b34801561051957600080fd5b50610534600480360381019061052f9190613c2b565b6110db565b6040516105419190614c70565b60405180910390f35b34801561055657600080fd5b50610571600480360381019061056c9190613dfe565b6110f3565b60405161057e9190614858565b60405180910390f35b34801561059357600080fd5b5061059c6111db565b6040516105a99190614c70565b60405180910390f35b6105cc60048036038101906105c79190614098565b6111e1565b005b3480156105da57600080fd5b506105e3611345565b6040516105f09190614c70565b60405180910390f35b34801561060557600080fd5b5061060e61134b565b60405161061b9190614c70565b60405180910390f35b34801561063057600080fd5b5061064b60048036038101906106469190613c98565b611351565b005b34801561065957600080fd5b506106626113f2565b60405161066f9190614c70565b60405180910390f35b34801561068457600080fd5b5061068d6113f8565b005b34801561069b57600080fd5b506106a46114c3565b6040516106b19190614c70565b60405180910390f35b3480156106c657600080fd5b506106cf6114c8565b6040516106dc9190614c70565b60405180910390f35b3480156106f157600080fd5b506106fa6114ce565b6040516107079190614c70565b60405180910390f35b34801561071c57600080fd5b5061073760048036038101906107329190613ef2565b6114d4565b60405161074491906147ff565b60405180910390f35b34801561075957600080fd5b506107626115ed565b60405161076f9190614c70565b60405180910390f35b34801561078457600080fd5b5061078d6115f2565b60405161079a9190614c70565b60405180910390f35b3480156107af57600080fd5b506107b86115f8565b005b3480156107c657600080fd5b506107e160048036038101906107dc919061406b565b611680565b005b3480156107ef57600080fd5b5061080a60048036038101906108059190613f6a565b611706565b005b34801561081857600080fd5b5061082161178c565b60405161082e9190614722565b60405180910390f35b34801561084357600080fd5b5061085e6004803603810190610859919061406b565b6117b6565b005b34801561086c57600080fd5b5061087561183c565b604051610882919061488e565b60405180910390f35b34801561089757600080fd5b506108b260048036038101906108ad9190613f6a565b6118ca565b005b3480156108c057600080fd5b506108db60048036038101906108d6919061401e565b611950565b005b3480156108e957600080fd5b5061090460048036038101906108ff9190613e72565b611a1d565b005b34801561091257600080fd5b5061092d6004803603810190610928919061406b565b611a33565b005b34801561093b57600080fd5b506109566004803603810190610951919061406b565b611ab9565b005b34801561096457600080fd5b5061096d611b3f565b60405161097a9190614873565b60405180910390f35b34801561098f57600080fd5b50610998611b45565b6040516109a59190614c70565b60405180910390f35b6109c860048036038101906109c391906140d8565b611b4b565b005b3480156109d657600080fd5b506109df611e7a565b6040516109ec9190614873565b60405180910390f35b348015610a0157600080fd5b50610a1c6004803603810190610a17919061406b565b611e80565b005b348015610a2a57600080fd5b50610a456004803603810190610a40919061401e565b611f06565b005b348015610a5357600080fd5b50610a6e6004803603810190610a699190613c2b565b611f98565b604051610a7b9190614c70565b60405180910390f35b348015610a9057600080fd5b50610a99611fb0565b604051610aa69190614c70565b60405180910390f35b348015610abb57600080fd5b50610ad66004803603810190610ad19190614098565b611fb6565b005b348015610ae457600080fd5b50610aed6120bf565b604051610afa9190614c70565b60405180910390f35b348015610b0f57600080fd5b50610b186120c5565b604051610b259190614c70565b60405180910390f35b348015610b3a57600080fd5b50610b436120ca565b604051610b509190614c70565b60405180910390f35b348015610b6557600080fd5b50610b6e6120cf565b604051610b7b9190614c70565b60405180910390f35b348015610b9057600080fd5b50610b996120d4565b604051610ba69190614c70565b60405180910390f35b348015610bbb57600080fd5b50610bc46120da565b604051610bd1919061488e565b60405180910390f35b348015610be657600080fd5b50610c016004803603810190610bfc9190613c58565b61216c565b604051610c0e9190614858565b60405180910390f35b348015610c2357600080fd5b50610c3e6004803603810190610c399190613d67565b612191565b005b348015610c4c57600080fd5b50610c676004803603810190610c629190613c2b565b612232565b005b348015610c7557600080fd5b50610c906004803603810190610c8b919061406b565b61232a565b005b348015610c9e57600080fd5b50610ca76123b0565b604051610cb49190614c70565b60405180910390f35b348015610cc957600080fd5b50610cd26123b6565b604051610cdf9190614c70565b60405180910390f35b348015610cf457600080fd5b50610cfd6123bb565b604051610d0a9190614c70565b60405180910390f35b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610d84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7b90614910565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610ea757507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610eb75750610eb6826123c1565b5b9050919050565b60198054610ecb90614f55565b80601f0160208091040260200160405190810160405280929190818152602001828054610ef790614f55565b8015610f445780601f10610f1957610100808354040283529160200191610f44565b820191906000526020600020905b815481529060010190602001808311610f2757829003601f168201915b505050505081565b610f5461242b565b73ffffffffffffffffffffffffffffffffffffffff16610f7261178c565b73ffffffffffffffffffffffffffffffffffffffff1614610fc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fbf90614af0565b60405180910390fd5b60008110158015610fda575060038111155b611019576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101090614ad0565b60405180910390fd5b8060178190555050565b60085481565b60075481565b60606002805461103e90614f55565b80601f016020809104026020016040519081016040528092919081815260200182805461106a90614f55565b80156110b75780601f1061108c576101008083540402835291602001916110b7565b820191906000526020600020905b81548152906001019060200180831161109a57829003601f168201915b50505050509050919050565b60146020528060005260406000206000915090505481565b60166020528060005260406000206000915090505481565b6000806001831415611109576012549050611158565b600283141561111c576013549050611157565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114e90614bb0565b60405180910390fd5b5b60008660405160200161116b91906146db565b6040516020818303038152906040528051906020012090506111cf868680806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050508383612433565b92505050949350505050565b60115481565b600360175414611226576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121d90614a50565b60405180910390fd5b80601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546112719190614dd3565b601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506003601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611337576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132e90614b10565b60405180910390fd5b611341828261244a565b5050565b600e5481565b60055481565b61135961242b565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061139f575061139e8561139961242b565b61216c565b5b6113de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d5906149f0565b60405180910390fd5b6113eb858585858561251c565b5050505050565b60065481565b61140061242b565b73ffffffffffffffffffffffffffffffffffffffff1661141e61178c565b73ffffffffffffffffffffffffffffffffffffffff1614611474576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146b90614af0565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156114bf573d6000803e3d6000fd5b5050565b600181565b600b5481565b60095481565b6060815183511461151a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151190614bf0565b60405180910390fd5b6000835167ffffffffffffffff811115611537576115366150bc565b5b6040519080825280602002602001820160405280156115655781602001602082028036833780820191505090505b50905060005b84518110156115e2576115b285828151811061158a5761158961508d565b5b60200260200101518583815181106115a5576115a461508d565b5b6020026020010151610d13565b8282815181106115c5576115c461508d565b5b602002602001018181525050806115db90614fb8565b905061156b565b508091505092915050565b600281565b60175481565b61160061242b565b73ffffffffffffffffffffffffffffffffffffffff1661161e61178c565b73ffffffffffffffffffffffffffffffffffffffff1614611674576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166b90614af0565b60405180910390fd5b61167e6000612830565b565b61168861242b565b73ffffffffffffffffffffffffffffffffffffffff166116a661178c565b73ffffffffffffffffffffffffffffffffffffffff16146116fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f390614af0565b60405180910390fd5b8060118190555050565b61170e61242b565b73ffffffffffffffffffffffffffffffffffffffff1661172c61178c565b73ffffffffffffffffffffffffffffffffffffffff1614611782576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177990614af0565b60405180910390fd5b8060128190555050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6117be61242b565b73ffffffffffffffffffffffffffffffffffffffff166117dc61178c565b73ffffffffffffffffffffffffffffffffffffffff1614611832576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182990614af0565b60405180910390fd5b8060068190555050565b601a805461184990614f55565b80601f016020809104026020016040519081016040528092919081815260200182805461187590614f55565b80156118c25780601f10611897576101008083540402835291602001916118c2565b820191906000526020600020905b8154815290600101906020018083116118a557829003601f168201915b505050505081565b6118d261242b565b73ffffffffffffffffffffffffffffffffffffffff166118f061178c565b73ffffffffffffffffffffffffffffffffffffffff1614611946576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193d90614af0565b60405180910390fd5b8060138190555050565b61195861242b565b73ffffffffffffffffffffffffffffffffffffffff1661197661178c565b73ffffffffffffffffffffffffffffffffffffffff16146119cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c390614af0565b60405180910390fd5b611a1982828080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506128f6565b5050565b611a2f611a2861242b565b8383612910565b5050565b611a3b61242b565b73ffffffffffffffffffffffffffffffffffffffff16611a5961178c565b73ffffffffffffffffffffffffffffffffffffffff1614611aaf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa690614af0565b60405180910390fd5b8060108190555050565b611ac161242b565b73ffffffffffffffffffffffffffffffffffffffff16611adf61178c565b73ffffffffffffffffffffffffffffffffffffffff1614611b35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2c90614af0565b60405180910390fd5b80600f8190555050565b60125481565b600f5481565b600060175411611b90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8790614b90565b60405180910390fd5b60016017541415611d005783601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611be69190614dd3565b601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414611cab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca290614b50565b60405180910390fd5b60018314611cee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce590614ab0565b60405180910390fd5b611cfb3383836001612a7d565b611e69565b60026017541415611e2d5783601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611d569190614dd3565b601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506002601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611e1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1390614a70565b60405180910390fd5b611e2833838386612a7d565b611e68565b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5f90614a10565b60405180910390fd5b5b611e73858561244a565b5050505050565b60135481565b611e8861242b565b73ffffffffffffffffffffffffffffffffffffffff16611ea661178c565b73ffffffffffffffffffffffffffffffffffffffff1614611efc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef390614af0565b60405180910390fd5b8060078190555050565b611f0e61242b565b73ffffffffffffffffffffffffffffffffffffffff16611f2c61178c565b73ffffffffffffffffffffffffffffffffffffffff1614611f82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7990614af0565b60405180910390fd5b818160189190611f93929190613817565b505050565b60156020528060005260406000206000915090505481565b60105481565b611fbe61242b565b73ffffffffffffffffffffffffffffffffffffffff16611fdc61178c565b73ffffffffffffffffffffffffffffffffffffffff1614612032576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202990614af0565b60405180910390fd5b61203c8282612ace565b600082148061204b5750600182145b806120565750600282145b806120615750600382145b6120a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209790614950565b60405180910390fd5b6120bb33838360405180602001604052806000815250612cc8565b5050565b600d5481565b600181565b600381565b600281565b600a5481565b6060601880546120e990614f55565b80601f016020809104026020016040519081016040528092919081815260200182805461211590614f55565b80156121625780601f1061213757610100808354040283529160200191612162565b820191906000526020600020905b81548152906001019060200180831161214557829003601f168201915b5050505050905090565b60006121788383612e5e565b8061218957506121888383612fa5565b5b905092915050565b61219961242b565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806121df57506121de856121d961242b565b61216c565b5b61221e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221590614990565b60405180910390fd5b61222b8585858585613039565b5050505050565b61223a61242b565b73ffffffffffffffffffffffffffffffffffffffff1661225861178c565b73ffffffffffffffffffffffffffffffffffffffff16146122ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122a590614af0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561231e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231590614930565b60405180910390fd5b61232781612830565b50565b61233261242b565b73ffffffffffffffffffffffffffffffffffffffff1661235061178c565b73ffffffffffffffffffffffffffffffffffffffff16146123a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239d90614af0565b60405180910390fd5b8060058190555050565b600c5481565b600081565b60045481565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b60008261244085846132bb565b1490509392505050565b6124548282612ace565b60018214156124785761247381600f5461246e9190614e29565b61336e565b6124fd565b600282141561249c57612497816010546124929190614e29565b61336e565b6124fc565b60038214156124c0576124bb816011546124b69190614e29565b61336e565b6124fb565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124f2906149b0565b60405180910390fd5b5b5b61251833838360405180602001604052806000815250612cc8565b5050565b8151835114612560576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161255790614c10565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156125d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125c7906149d0565b60405180910390fd5b60006125da61242b565b90506125ea8187878787876133b4565b60005b845181101561279b57600085828151811061260b5761260a61508d565b5b60200260200101519050600085838151811061262a5761262961508d565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156126cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126c290614a90565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546127809190614dd3565b925050819055505050508061279490614fb8565b90506125ed565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051612812929190614821565b60405180910390a46128288187878787876133bc565b505050505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b806002908051906020019061290c92919061389d565b5050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561297f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161297690614bd0565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612a709190614858565b60405180910390a3505050565b612a89848484846110f3565b612ac8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612abf90614970565b60405180910390fd5b50505050565b6000821415612b375780600854612ae59190614dd3565b6008819055506004546008541115612b32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b2990614b70565b60405180910390fd5b612cb0565b6001821415612ba05780600954612b4e9190614dd3565b6009819055506005546009541115612b9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b9290614b30565b60405180910390fd5b612caf565b6002821415612c095780600a54612bb79190614dd3565b600a81905550600654600a541115612c04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bfb90614c30565b60405180910390fd5b612cae565b6003821415612c725780600b54612c209190614dd3565b600b81905550600754600b541115612c6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c6490614a30565b60405180910390fd5b612cad565b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ca4906149b0565b60405180910390fd5b5b5b5b80600d54612cbe9190614dd3565b600d819055505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612d38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d2f90614c50565b60405180910390fd5b6000612d4261242b565b9050612d6381600087612d54886135a3565b612d5d886135a3565b876133b4565b8260008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612dc29190614dd3565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051612e40929190614c8b565b60405180910390a4612e578160008787878761361d565b5050505050565b6000804660018114612e775760048114612e9357612eab565b73a5409ec958c83c3f309868babaca7c86dcb077c19150612eab565b73f57b2c51ded3a29e6891aba85459d600256cf31791505b50600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614158015612f9c57508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1663c4552791866040518263ffffffff1660e01b8152600401612f349190614722565b60206040518083038186803b158015612f4c57600080fd5b505afa158015612f60573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f849190613ff1565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156130a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130a0906149d0565b60405180910390fd5b60006130b361242b565b90506130d38187876130c4886135a3565b6130cd886135a3565b876133b4565b600080600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508381101561316a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161316190614a90565b60405180910390fd5b83810360008087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508360008087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461321f9190614dd3565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62888860405161329c929190614c8b565b60405180910390a46132b282888888888861361d565b50505050505050565b60008082905060005b84518110156133635760008582815181106132e2576132e161508d565b5b602002602001015190508083116133235782816040516020016133069291906146f6565b60405160208183030381529060405280519060200120925061334f565b80836040516020016133369291906146f6565b6040516020818303038152906040528051906020012092505b50808061335b90614fb8565b9150506132c4565b508091505092915050565b803410156133b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133a8906148f0565b60405180910390fd5b50565b505050505050565b6133db8473ffffffffffffffffffffffffffffffffffffffff16613804565b1561359b578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b815260040161342195949392919061473d565b602060405180830381600087803b15801561343b57600080fd5b505af192505050801561346c57506040513d601f19601f820116820180604052508101906134699190613fc4565b60015b613512576134786150eb565b806308c379a014156134d5575061348d615942565b8061349857506134d7565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134cc919061488e565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613509906148b0565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614613599576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613590906148d0565b60405180910390fd5b505b505050505050565b60606000600167ffffffffffffffff8111156135c2576135c16150bc565b5b6040519080825280602002602001820160405280156135f05781602001602082028036833780820191505090505b50905082816000815181106136085761360761508d565b5b60200260200101818152505080915050919050565b61363c8473ffffffffffffffffffffffffffffffffffffffff16613804565b156137fc578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b81526004016136829594939291906147a5565b602060405180830381600087803b15801561369c57600080fd5b505af19250505080156136cd57506040513d601f19601f820116820180604052508101906136ca9190613fc4565b60015b613773576136d96150eb565b806308c379a0141561373657506136ee615942565b806136f95750613738565b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161372d919061488e565b60405180910390fd5b505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161376a906148b0565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146137fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137f1906148d0565b60405180910390fd5b505b505050505050565b600080823b905060008111915050919050565b82805461382390614f55565b90600052602060002090601f016020900481019282613845576000855561388c565b82601f1061385e57803560ff191683800117855561388c565b8280016001018555821561388c579182015b8281111561388b578235825591602001919060010190613870565b5b5090506138999190613923565b5090565b8280546138a990614f55565b90600052602060002090601f0160209004810192826138cb5760008555613912565b82601f106138e457805160ff1916838001178555613912565b82800160010185558215613912579182015b828111156139115782518255916020019190600101906138f6565b5b50905061391f9190613923565b5090565b5b8082111561393c576000816000905550600101613924565b5090565b600061395361394e84614cd9565b614cb4565b9050808382526020820190508285602086028201111561397657613975615117565b5b60005b858110156139a6578161398c8882613a62565b845260208401935060208301925050600181019050613979565b5050509392505050565b60006139c36139be84614d05565b614cb4565b905080838252602082019050828560208602820111156139e6576139e5615117565b5b60005b85811015613a1657816139fc8882613c16565b8452602084019350602083019250506001810190506139e9565b5050509392505050565b6000613a33613a2e84614d31565b614cb4565b905082815260208101848484011115613a4f57613a4e61511c565b5b613a5a848285614f13565b509392505050565b600081359050613a71816159d8565b92915050565b600082601f830112613a8c57613a8b615112565b5b8135613a9c848260208601613940565b91505092915050565b60008083601f840112613abb57613aba615112565b5b8235905067ffffffffffffffff811115613ad857613ad761510d565b5b602083019150836020820283011115613af457613af3615117565b5b9250929050565b600082601f830112613b1057613b0f615112565b5b8135613b208482602086016139b0565b91505092915050565b600081359050613b38816159ef565b92915050565b600081359050613b4d81615a06565b92915050565b600081359050613b6281615a1d565b92915050565b600081519050613b7781615a1d565b92915050565b600082601f830112613b9257613b91615112565b5b8135613ba2848260208601613a20565b91505092915050565b600081519050613bba81615a34565b92915050565b60008083601f840112613bd657613bd5615112565b5b8235905067ffffffffffffffff811115613bf357613bf261510d565b5b602083019150836001820283011115613c0f57613c0e615117565b5b9250929050565b600081359050613c2581615a4b565b92915050565b600060208284031215613c4157613c40615126565b5b6000613c4f84828501613a62565b91505092915050565b60008060408385031215613c6f57613c6e615126565b5b6000613c7d85828601613a62565b9250506020613c8e85828601613a62565b9150509250929050565b600080600080600060a08688031215613cb457613cb3615126565b5b6000613cc288828901613a62565b9550506020613cd388828901613a62565b945050604086013567ffffffffffffffff811115613cf457613cf3615121565b5b613d0088828901613afb565b935050606086013567ffffffffffffffff811115613d2157613d20615121565b5b613d2d88828901613afb565b925050608086013567ffffffffffffffff811115613d4e57613d4d615121565b5b613d5a88828901613b7d565b9150509295509295909350565b600080600080600060a08688031215613d8357613d82615126565b5b6000613d9188828901613a62565b9550506020613da288828901613a62565b9450506040613db388828901613c16565b9350506060613dc488828901613c16565b925050608086013567ffffffffffffffff811115613de557613de4615121565b5b613df188828901613b7d565b9150509295509295909350565b60008060008060608587031215613e1857613e17615126565b5b6000613e2687828801613a62565b945050602085013567ffffffffffffffff811115613e4757613e46615121565b5b613e5387828801613aa5565b93509350506040613e6687828801613c16565b91505092959194509250565b60008060408385031215613e8957613e88615126565b5b6000613e9785828601613a62565b9250506020613ea885828601613b29565b9150509250929050565b60008060408385031215613ec957613ec8615126565b5b6000613ed785828601613a62565b9250506020613ee885828601613c16565b9150509250929050565b60008060408385031215613f0957613f08615126565b5b600083013567ffffffffffffffff811115613f2757613f26615121565b5b613f3385828601613a77565b925050602083013567ffffffffffffffff811115613f5457613f53615121565b5b613f6085828601613afb565b9150509250929050565b600060208284031215613f8057613f7f615126565b5b6000613f8e84828501613b3e565b91505092915050565b600060208284031215613fad57613fac615126565b5b6000613fbb84828501613b53565b91505092915050565b600060208284031215613fda57613fd9615126565b5b6000613fe884828501613b68565b91505092915050565b60006020828403121561400757614006615126565b5b600061401584828501613bab565b91505092915050565b6000806020838503121561403557614034615126565b5b600083013567ffffffffffffffff81111561405357614052615121565b5b61405f85828601613bc0565b92509250509250929050565b60006020828403121561408157614080615126565b5b600061408f84828501613c16565b91505092915050565b600080604083850312156140af576140ae615126565b5b60006140bd85828601613c16565b92505060206140ce85828601613c16565b9150509250929050565b6000806000806000608086880312156140f4576140f3615126565b5b600061410288828901613c16565b955050602061411388828901613c16565b945050604061412488828901613c16565b935050606086013567ffffffffffffffff81111561414557614144615121565b5b61415188828901613aa5565b92509250509295509295909350565b600061416c83836146bd565b60208301905092915050565b61418181614e83565b82525050565b61419861419382614e83565b615001565b82525050565b60006141a982614d72565b6141b38185614da0565b93506141be83614d62565b8060005b838110156141ef5781516141d68882614160565b97506141e183614d93565b9250506001810190506141c2565b5085935050505092915050565b61420581614e95565b82525050565b61421481614ea1565b82525050565b61422b61422682614ea1565b615013565b82525050565b600061423c82614d7d565b6142468185614db1565b9350614256818560208601614f22565b61425f8161512b565b840191505092915050565b600061427582614d88565b61427f8185614dc2565b935061428f818560208601614f22565b6142988161512b565b840191505092915050565b60006142b0603483614dc2565b91506142bb82615156565b604082019050919050565b60006142d3602883614dc2565b91506142de826151a5565b604082019050919050565b60006142f6601583614dc2565b9150614301826151f4565b602082019050919050565b6000614319602b83614dc2565b91506143248261521d565b604082019050919050565b600061433c602683614dc2565b91506143478261526c565b604082019050919050565b600061435f601083614dc2565b915061436a826152bb565b602082019050919050565b6000614382601883614dc2565b915061438d826152e4565b602082019050919050565b60006143a5602983614dc2565b91506143b08261530d565b604082019050919050565b60006143c8601183614dc2565b91506143d38261535c565b602082019050919050565b60006143eb602583614dc2565b91506143f682615385565b604082019050919050565b600061440e603283614dc2565b9150614419826153d4565b604082019050919050565b6000614431603d83614dc2565b915061443c82615423565b604082019050919050565b6000614454602683614dc2565b915061445f82615472565b604082019050919050565b6000614477601783614dc2565b9150614482826154c1565b602082019050919050565b600061449a603283614dc2565b91506144a5826154ea565b604082019050919050565b60006144bd602a83614dc2565b91506144c882615539565b604082019050919050565b60006144e0601f83614dc2565b91506144eb82615588565b602082019050919050565b6000614503600d83614dc2565b915061450e826155b1565b602082019050919050565b6000614526602083614dc2565b9150614531826155da565b602082019050919050565b6000614549603183614dc2565b915061455482615603565b604082019050919050565b600061456c602483614dc2565b915061457782615652565b604082019050919050565b600061458f603283614dc2565b915061459a826156a1565b604082019050919050565b60006145b2602583614dc2565b91506145bd826156f0565b604082019050919050565b60006145d5601083614dc2565b91506145e08261573f565b602082019050919050565b60006145f8602583614dc2565b915061460382615768565b604082019050919050565b600061461b602983614dc2565b9150614626826157b7565b604082019050919050565b600061463e602983614dc2565b915061464982615806565b604082019050919050565b6000614661602883614dc2565b915061466c82615855565b604082019050919050565b6000614684602683614dc2565b915061468f826158a4565b604082019050919050565b60006146a7602183614dc2565b91506146b2826158f3565b604082019050919050565b6146c681614f09565b82525050565b6146d581614f09565b82525050565b60006146e78284614187565b60148201915081905092915050565b6000614702828561421a565b602082019150614712828461421a565b6020820191508190509392505050565b60006020820190506147376000830184614178565b92915050565b600060a0820190506147526000830188614178565b61475f6020830187614178565b8181036040830152614771818661419e565b90508181036060830152614785818561419e565b905081810360808301526147998184614231565b90509695505050505050565b600060a0820190506147ba6000830188614178565b6147c76020830187614178565b6147d460408301866146cc565b6147e160608301856146cc565b81810360808301526147f38184614231565b90509695505050505050565b60006020820190508181036000830152614819818461419e565b905092915050565b6000604082019050818103600083015261483b818561419e565b9050818103602083015261484f818461419e565b90509392505050565b600060208201905061486d60008301846141fc565b92915050565b6000602082019050614888600083018461420b565b92915050565b600060208201905081810360008301526148a8818461426a565b905092915050565b600060208201905081810360008301526148c9816142a3565b9050919050565b600060208201905081810360008301526148e9816142c6565b9050919050565b60006020820190508181036000830152614909816142e9565b9050919050565b600060208201905081810360008301526149298161430c565b9050919050565b600060208201905081810360008301526149498161432f565b9050919050565b6000602082019050818103600083015261496981614352565b9050919050565b6000602082019050818103600083015261498981614375565b9050919050565b600060208201905081810360008301526149a981614398565b9050919050565b600060208201905081810360008301526149c9816143bb565b9050919050565b600060208201905081810360008301526149e9816143de565b9050919050565b60006020820190508181036000830152614a0981614401565b9050919050565b60006020820190508181036000830152614a2981614424565b9050919050565b60006020820190508181036000830152614a4981614447565b9050919050565b60006020820190508181036000830152614a698161446a565b9050919050565b60006020820190508181036000830152614a898161448d565b9050919050565b60006020820190508181036000830152614aa9816144b0565b9050919050565b60006020820190508181036000830152614ac9816144d3565b9050919050565b60006020820190508181036000830152614ae9816144f6565b9050919050565b60006020820190508181036000830152614b0981614519565b9050919050565b60006020820190508181036000830152614b298161453c565b9050919050565b60006020820190508181036000830152614b498161455f565b9050919050565b60006020820190508181036000830152614b6981614582565b9050919050565b60006020820190508181036000830152614b89816145a5565b9050919050565b60006020820190508181036000830152614ba9816145c8565b9050919050565b60006020820190508181036000830152614bc9816145eb565b9050919050565b60006020820190508181036000830152614be98161460e565b9050919050565b60006020820190508181036000830152614c0981614631565b9050919050565b60006020820190508181036000830152614c2981614654565b9050919050565b60006020820190508181036000830152614c4981614677565b9050919050565b60006020820190508181036000830152614c698161469a565b9050919050565b6000602082019050614c8560008301846146cc565b92915050565b6000604082019050614ca060008301856146cc565b614cad60208301846146cc565b9392505050565b6000614cbe614ccf565b9050614cca8282614f87565b919050565b6000604051905090565b600067ffffffffffffffff821115614cf457614cf36150bc565b5b602082029050602081019050919050565b600067ffffffffffffffff821115614d2057614d1f6150bc565b5b602082029050602081019050919050565b600067ffffffffffffffff821115614d4c57614d4b6150bc565b5b614d558261512b565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b6000614dde82614f09565b9150614de983614f09565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614e1e57614e1d61502f565b5b828201905092915050565b6000614e3482614f09565b9150614e3f83614f09565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614e7857614e7761502f565b5b828202905092915050565b6000614e8e82614ee9565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6000614ee282614e83565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015614f40578082015181840152602081019050614f25565b83811115614f4f576000848401525b50505050565b60006002820490506001821680614f6d57607f821691505b60208210811415614f8157614f8061505e565b5b50919050565b614f908261512b565b810181811067ffffffffffffffff82111715614faf57614fae6150bc565b5b80604052505050565b6000614fc382614f09565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614ff657614ff561502f565b5b600182019050919050565b600061500c8261501d565b9050919050565b6000819050919050565b60006150288261513c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d111561510a5760046000803e615107600051615149565b90505b90565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b60008160e01c9050919050565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b7f4e6f7420656e6f7567682066756e64732073656e740000000000000000000000600082015250565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f496e76616c696420706173735479706500000000000000000000000000000000600082015250565b7f55736572206973206e6f74206f6e2077686974656c6973740000000000000000600082015250565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b7f496e76616c696420706173732074797065000000000000000000000000000000600082015250565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f546865206561726c792073616c65206973206f7665722e20557365207468652060008201527f7075626c6963206d696e742066756e6374696f6e20696e73746561642e000000602082015250565b7f4d696e74696e6720776f756c64206578636565642062726f6e7a65206d61782060008201527f746f6b656e730000000000000000000000000000000000000000000000000000602082015250565b7f5075626c6963206d696e74206973206e6f74206f70656e000000000000000000600082015250565b7f43616e6e6f74206d696e74206d6f7265207468616e203220706572206164647260008201527f65737320696e20746869732070686173652e0000000000000000000000000000602082015250565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b7f4d75737420757365204669727374204275796572732077686974656c69737400600082015250565b7f496e76616c696420737461746500000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f43616e6e6f74206d696e74206d6f7265207468616e203320706572206164647260008201527f65737320696e2074686973207068617365000000000000000000000000000000602082015250565b7f4d696e74696e6720776f756c642065786365656420676f6c64206d617820746f60008201527f6b656e7300000000000000000000000000000000000000000000000000000000602082015250565b7f43616e6e6f74206d696e74206d6f7265207468616e203120706572206164647260008201527f65737320696e20746869732070686173652e0000000000000000000000000000602082015250565b7f4d696e74696e6720776f756c6420657863656564207975636b79206d6178207460008201527f6f6b656e73000000000000000000000000000000000000000000000000000000602082015250565b7f53616c65206973206e6f74206f70656e00000000000000000000000000000000600082015250565b7f496e76616c69642077686974656c697374547970652c206d757374206265203160008201527f206f722032000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b7f4d696e74696e6720776f756c64206578636565642073696c766572206d61782060008201527f746f6b656e730000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600060443d1015615952576159d5565b61595a614ccf565b60043d036004823e80513d602482011167ffffffffffffffff821117156159825750506159d5565b808201805167ffffffffffffffff8111156159a057505050506159d5565b80602083010160043d0385018111156159bd5750505050506159d5565b6159cc82602001850186614f87565b82955050505050505b90565b6159e181614e83565b81146159ec57600080fd5b50565b6159f881614e95565b8114615a0357600080fd5b50565b615a0f81614ea1565b8114615a1a57600080fd5b50565b615a2681614eab565b8114615a3157600080fd5b50565b615a3d81614ed7565b8114615a4857600080fd5b50565b615a5481614f09565b8114615a5f57600080fd5b5056fea2646970667358221220bd71c70de85f7b226c2de5ebba55e9e1654485e9d7d4be21e3dac0c5d495c89664736f6c6343000807003368747470733a2f2f7975636b706173732e636f6d2f7975636b706173732f6d657461646174612f636f6e74726163742e6a736f6e68747470733a2f2f7975636b706173732e636f6d2f7975636b706173732f6d657461646174612f746f6b656e732f7b69647d2e6a736f6e

Deployed Bytecode

0x60806040526004361061036a5760003560e01c806395d89b41116101c6578063d47573d4116100f7578063e985e9c511610095578063f45d86d21161006f578063f45d86d214610c69578063f47c84c514610c92578063f82d941f14610cbd578063fbefeaa414610ce85761036a565b8063e985e9c514610bda578063f242432a14610c17578063f2fde38b14610c405761036a565b8063e00fd543116100d1578063e00fd54314610b2e578063e3e55f0814610b59578063e4cc7e3d14610b84578063e8a3d48514610baf5761036a565b8063d47573d414610aaf578063d52079b414610ad8578063dd22c20b14610b035761036a565b8063c7f9378511610164578063c8be3f511161013e578063c8be3f51146109f5578063ccb4807b14610a1e578063cee2688514610a47578063cf14b28314610a845761036a565b8063c7f9378514610983578063c813cfd4146109ae578063c819b87b146109ca5761036a565b8063a22cb465116101a0578063a22cb465146108dd578063a961b16214610906578063bba767f91461092f578063c2de8f2b146109585761036a565b806395d89b4114610860578063997994fe1461088b578063a0bcfc7f146108b45761036a565b80632eb2c2d6116102a057806356fac7161161023e5780637708c027116102185780637708c027146107ba5780638c25de60146107e35780638da5cb5b1461080c5780638ff2846f146108375761036a565b806356fac7161461074d578063603f4d5214610778578063715018a6146107a35761036a565b80633e4bee381161027a5780633e4bee381461068f57806341fa3755146106ba57806348a95e73146106e55780634e1273f4146107105761036a565b80632eb2c2d61461062457806336cc955c1461064d5780633ccfd60b146106785761036a565b80630f420d9b1161030d5780631b1081fa116102e75780631b1081fa146105875780631b2ef1ca146105b25780632049ac06146105ce57806320a86f4c146105f95761036a565b80630f420d9b146104d057806312fd93d51461050d5780631a58f3ca1461054a5761036a565b8063084c408811610349578063084c4088146104145780630c97cfc21461043d5780630e814981146104685780630e89341c146104935761036a565b8062fdd58e1461036f57806301ffc9a7146103ac57806306fdde03146103e9575b600080fd5b34801561037b57600080fd5b5061039660048036038101906103919190613eb2565b610d13565b6040516103a39190614c70565b60405180910390f35b3480156103b857600080fd5b506103d360048036038101906103ce9190613f97565b610ddc565b6040516103e09190614858565b60405180910390f35b3480156103f557600080fd5b506103fe610ebe565b60405161040b919061488e565b60405180910390f35b34801561042057600080fd5b5061043b6004803603810190610436919061406b565b610f4c565b005b34801561044957600080fd5b50610452611023565b60405161045f9190614c70565b60405180910390f35b34801561047457600080fd5b5061047d611029565b60405161048a9190614c70565b60405180910390f35b34801561049f57600080fd5b506104ba60048036038101906104b5919061406b565b61102f565b6040516104c7919061488e565b60405180910390f35b3480156104dc57600080fd5b506104f760048036038101906104f29190613c2b565b6110c3565b6040516105049190614c70565b60405180910390f35b34801561051957600080fd5b50610534600480360381019061052f9190613c2b565b6110db565b6040516105419190614c70565b60405180910390f35b34801561055657600080fd5b50610571600480360381019061056c9190613dfe565b6110f3565b60405161057e9190614858565b60405180910390f35b34801561059357600080fd5b5061059c6111db565b6040516105a99190614c70565b60405180910390f35b6105cc60048036038101906105c79190614098565b6111e1565b005b3480156105da57600080fd5b506105e3611345565b6040516105f09190614c70565b60405180910390f35b34801561060557600080fd5b5061060e61134b565b60405161061b9190614c70565b60405180910390f35b34801561063057600080fd5b5061064b60048036038101906106469190613c98565b611351565b005b34801561065957600080fd5b506106626113f2565b60405161066f9190614c70565b60405180910390f35b34801561068457600080fd5b5061068d6113f8565b005b34801561069b57600080fd5b506106a46114c3565b6040516106b19190614c70565b60405180910390f35b3480156106c657600080fd5b506106cf6114c8565b6040516106dc9190614c70565b60405180910390f35b3480156106f157600080fd5b506106fa6114ce565b6040516107079190614c70565b60405180910390f35b34801561071c57600080fd5b5061073760048036038101906107329190613ef2565b6114d4565b60405161074491906147ff565b60405180910390f35b34801561075957600080fd5b506107626115ed565b60405161076f9190614c70565b60405180910390f35b34801561078457600080fd5b5061078d6115f2565b60405161079a9190614c70565b60405180910390f35b3480156107af57600080fd5b506107b86115f8565b005b3480156107c657600080fd5b506107e160048036038101906107dc919061406b565b611680565b005b3480156107ef57600080fd5b5061080a60048036038101906108059190613f6a565b611706565b005b34801561081857600080fd5b5061082161178c565b60405161082e9190614722565b60405180910390f35b34801561084357600080fd5b5061085e6004803603810190610859919061406b565b6117b6565b005b34801561086c57600080fd5b5061087561183c565b604051610882919061488e565b60405180910390f35b34801561089757600080fd5b506108b260048036038101906108ad9190613f6a565b6118ca565b005b3480156108c057600080fd5b506108db60048036038101906108d6919061401e565b611950565b005b3480156108e957600080fd5b5061090460048036038101906108ff9190613e72565b611a1d565b005b34801561091257600080fd5b5061092d6004803603810190610928919061406b565b611a33565b005b34801561093b57600080fd5b506109566004803603810190610951919061406b565b611ab9565b005b34801561096457600080fd5b5061096d611b3f565b60405161097a9190614873565b60405180910390f35b34801561098f57600080fd5b50610998611b45565b6040516109a59190614c70565b60405180910390f35b6109c860048036038101906109c391906140d8565b611b4b565b005b3480156109d657600080fd5b506109df611e7a565b6040516109ec9190614873565b60405180910390f35b348015610a0157600080fd5b50610a1c6004803603810190610a17919061406b565b611e80565b005b348015610a2a57600080fd5b50610a456004803603810190610a40919061401e565b611f06565b005b348015610a5357600080fd5b50610a6e6004803603810190610a699190613c2b565b611f98565b604051610a7b9190614c70565b60405180910390f35b348015610a9057600080fd5b50610a99611fb0565b604051610aa69190614c70565b60405180910390f35b348015610abb57600080fd5b50610ad66004803603810190610ad19190614098565b611fb6565b005b348015610ae457600080fd5b50610aed6120bf565b604051610afa9190614c70565b60405180910390f35b348015610b0f57600080fd5b50610b186120c5565b604051610b259190614c70565b60405180910390f35b348015610b3a57600080fd5b50610b436120ca565b604051610b509190614c70565b60405180910390f35b348015610b6557600080fd5b50610b6e6120cf565b604051610b7b9190614c70565b60405180910390f35b348015610b9057600080fd5b50610b996120d4565b604051610ba69190614c70565b60405180910390f35b348015610bbb57600080fd5b50610bc46120da565b604051610bd1919061488e565b60405180910390f35b348015610be657600080fd5b50610c016004803603810190610bfc9190613c58565b61216c565b604051610c0e9190614858565b60405180910390f35b348015610c2357600080fd5b50610c3e6004803603810190610c399190613d67565b612191565b005b348015610c4c57600080fd5b50610c676004803603810190610c629190613c2b565b612232565b005b348015610c7557600080fd5b50610c906004803603810190610c8b919061406b565b61232a565b005b348015610c9e57600080fd5b50610ca76123b0565b604051610cb49190614c70565b60405180910390f35b348015610cc957600080fd5b50610cd26123b6565b604051610cdf9190614c70565b60405180910390f35b348015610cf457600080fd5b50610cfd6123bb565b604051610d0a9190614c70565b60405180910390f35b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610d84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7b90614910565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610ea757507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610eb75750610eb6826123c1565b5b9050919050565b60198054610ecb90614f55565b80601f0160208091040260200160405190810160405280929190818152602001828054610ef790614f55565b8015610f445780601f10610f1957610100808354040283529160200191610f44565b820191906000526020600020905b815481529060010190602001808311610f2757829003601f168201915b505050505081565b610f5461242b565b73ffffffffffffffffffffffffffffffffffffffff16610f7261178c565b73ffffffffffffffffffffffffffffffffffffffff1614610fc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fbf90614af0565b60405180910390fd5b60008110158015610fda575060038111155b611019576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101090614ad0565b60405180910390fd5b8060178190555050565b60085481565b60075481565b60606002805461103e90614f55565b80601f016020809104026020016040519081016040528092919081815260200182805461106a90614f55565b80156110b75780601f1061108c576101008083540402835291602001916110b7565b820191906000526020600020905b81548152906001019060200180831161109a57829003601f168201915b50505050509050919050565b60146020528060005260406000206000915090505481565b60166020528060005260406000206000915090505481565b6000806001831415611109576012549050611158565b600283141561111c576013549050611157565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114e90614bb0565b60405180910390fd5b5b60008660405160200161116b91906146db565b6040516020818303038152906040528051906020012090506111cf868680806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050508383612433565b92505050949350505050565b60115481565b600360175414611226576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121d90614a50565b60405180910390fd5b80601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546112719190614dd3565b601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506003601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611337576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132e90614b10565b60405180910390fd5b611341828261244a565b5050565b600e5481565b60055481565b61135961242b565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061139f575061139e8561139961242b565b61216c565b5b6113de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d5906149f0565b60405180910390fd5b6113eb858585858561251c565b5050505050565b60065481565b61140061242b565b73ffffffffffffffffffffffffffffffffffffffff1661141e61178c565b73ffffffffffffffffffffffffffffffffffffffff1614611474576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146b90614af0565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156114bf573d6000803e3d6000fd5b5050565b600181565b600b5481565b60095481565b6060815183511461151a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151190614bf0565b60405180910390fd5b6000835167ffffffffffffffff811115611537576115366150bc565b5b6040519080825280602002602001820160405280156115655781602001602082028036833780820191505090505b50905060005b84518110156115e2576115b285828151811061158a5761158961508d565b5b60200260200101518583815181106115a5576115a461508d565b5b6020026020010151610d13565b8282815181106115c5576115c461508d565b5b602002602001018181525050806115db90614fb8565b905061156b565b508091505092915050565b600281565b60175481565b61160061242b565b73ffffffffffffffffffffffffffffffffffffffff1661161e61178c565b73ffffffffffffffffffffffffffffffffffffffff1614611674576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166b90614af0565b60405180910390fd5b61167e6000612830565b565b61168861242b565b73ffffffffffffffffffffffffffffffffffffffff166116a661178c565b73ffffffffffffffffffffffffffffffffffffffff16146116fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f390614af0565b60405180910390fd5b8060118190555050565b61170e61242b565b73ffffffffffffffffffffffffffffffffffffffff1661172c61178c565b73ffffffffffffffffffffffffffffffffffffffff1614611782576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177990614af0565b60405180910390fd5b8060128190555050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6117be61242b565b73ffffffffffffffffffffffffffffffffffffffff166117dc61178c565b73ffffffffffffffffffffffffffffffffffffffff1614611832576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182990614af0565b60405180910390fd5b8060068190555050565b601a805461184990614f55565b80601f016020809104026020016040519081016040528092919081815260200182805461187590614f55565b80156118c25780601f10611897576101008083540402835291602001916118c2565b820191906000526020600020905b8154815290600101906020018083116118a557829003601f168201915b505050505081565b6118d261242b565b73ffffffffffffffffffffffffffffffffffffffff166118f061178c565b73ffffffffffffffffffffffffffffffffffffffff1614611946576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193d90614af0565b60405180910390fd5b8060138190555050565b61195861242b565b73ffffffffffffffffffffffffffffffffffffffff1661197661178c565b73ffffffffffffffffffffffffffffffffffffffff16146119cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c390614af0565b60405180910390fd5b611a1982828080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506128f6565b5050565b611a2f611a2861242b565b8383612910565b5050565b611a3b61242b565b73ffffffffffffffffffffffffffffffffffffffff16611a5961178c565b73ffffffffffffffffffffffffffffffffffffffff1614611aaf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa690614af0565b60405180910390fd5b8060108190555050565b611ac161242b565b73ffffffffffffffffffffffffffffffffffffffff16611adf61178c565b73ffffffffffffffffffffffffffffffffffffffff1614611b35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2c90614af0565b60405180910390fd5b80600f8190555050565b60125481565b600f5481565b600060175411611b90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8790614b90565b60405180910390fd5b60016017541415611d005783601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611be69190614dd3565b601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414611cab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca290614b50565b60405180910390fd5b60018314611cee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce590614ab0565b60405180910390fd5b611cfb3383836001612a7d565b611e69565b60026017541415611e2d5783601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611d569190614dd3565b601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506002601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611e1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1390614a70565b60405180910390fd5b611e2833838386612a7d565b611e68565b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5f90614a10565b60405180910390fd5b5b611e73858561244a565b5050505050565b60135481565b611e8861242b565b73ffffffffffffffffffffffffffffffffffffffff16611ea661178c565b73ffffffffffffffffffffffffffffffffffffffff1614611efc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef390614af0565b60405180910390fd5b8060078190555050565b611f0e61242b565b73ffffffffffffffffffffffffffffffffffffffff16611f2c61178c565b73ffffffffffffffffffffffffffffffffffffffff1614611f82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7990614af0565b60405180910390fd5b818160189190611f93929190613817565b505050565b60156020528060005260406000206000915090505481565b60105481565b611fbe61242b565b73ffffffffffffffffffffffffffffffffffffffff16611fdc61178c565b73ffffffffffffffffffffffffffffffffffffffff1614612032576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202990614af0565b60405180910390fd5b61203c8282612ace565b600082148061204b5750600182145b806120565750600282145b806120615750600382145b6120a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209790614950565b60405180910390fd5b6120bb33838360405180602001604052806000815250612cc8565b5050565b600d5481565b600181565b600381565b600281565b600a5481565b6060601880546120e990614f55565b80601f016020809104026020016040519081016040528092919081815260200182805461211590614f55565b80156121625780601f1061213757610100808354040283529160200191612162565b820191906000526020600020905b81548152906001019060200180831161214557829003601f168201915b5050505050905090565b60006121788383612e5e565b8061218957506121888383612fa5565b5b905092915050565b61219961242b565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806121df57506121de856121d961242b565b61216c565b5b61221e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221590614990565b60405180910390fd5b61222b8585858585613039565b5050505050565b61223a61242b565b73ffffffffffffffffffffffffffffffffffffffff1661225861178c565b73ffffffffffffffffffffffffffffffffffffffff16146122ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122a590614af0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561231e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231590614930565b60405180910390fd5b61232781612830565b50565b61233261242b565b73ffffffffffffffffffffffffffffffffffffffff1661235061178c565b73ffffffffffffffffffffffffffffffffffffffff16146123a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239d90614af0565b60405180910390fd5b8060058190555050565b600c5481565b600081565b60045481565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b60008261244085846132bb565b1490509392505050565b6124548282612ace565b60018214156124785761247381600f5461246e9190614e29565b61336e565b6124fd565b600282141561249c57612497816010546124929190614e29565b61336e565b6124fc565b60038214156124c0576124bb816011546124b69190614e29565b61336e565b6124fb565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124f2906149b0565b60405180910390fd5b5b5b61251833838360405180602001604052806000815250612cc8565b5050565b8151835114612560576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161255790614c10565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156125d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125c7906149d0565b60405180910390fd5b60006125da61242b565b90506125ea8187878787876133b4565b60005b845181101561279b57600085828151811061260b5761260a61508d565b5b60200260200101519050600085838151811061262a5761262961508d565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156126cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126c290614a90565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546127809190614dd3565b925050819055505050508061279490614fb8565b90506125ed565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051612812929190614821565b60405180910390a46128288187878787876133bc565b505050505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b806002908051906020019061290c92919061389d565b5050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561297f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161297690614bd0565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612a709190614858565b60405180910390a3505050565b612a89848484846110f3565b612ac8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612abf90614970565b60405180910390fd5b50505050565b6000821415612b375780600854612ae59190614dd3565b6008819055506004546008541115612b32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b2990614b70565b60405180910390fd5b612cb0565b6001821415612ba05780600954612b4e9190614dd3565b6009819055506005546009541115612b9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b9290614b30565b60405180910390fd5b612caf565b6002821415612c095780600a54612bb79190614dd3565b600a81905550600654600a541115612c04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bfb90614c30565b60405180910390fd5b612cae565b6003821415612c725780600b54612c209190614dd3565b600b81905550600754600b541115612c6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c6490614a30565b60405180910390fd5b612cad565b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ca4906149b0565b60405180910390fd5b5b5b5b80600d54612cbe9190614dd3565b600d819055505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612d38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d2f90614c50565b60405180910390fd5b6000612d4261242b565b9050612d6381600087612d54886135a3565b612d5d886135a3565b876133b4565b8260008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612dc29190614dd3565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051612e40929190614c8b565b60405180910390a4612e578160008787878761361d565b5050505050565b6000804660018114612e775760048114612e9357612eab565b73a5409ec958c83c3f309868babaca7c86dcb077c19150612eab565b73f57b2c51ded3a29e6891aba85459d600256cf31791505b50600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614158015612f9c57508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1663c4552791866040518263ffffffff1660e01b8152600401612f349190614722565b60206040518083038186803b158015612f4c57600080fd5b505afa158015612f60573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f849190613ff1565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156130a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130a0906149d0565b60405180910390fd5b60006130b361242b565b90506130d38187876130c4886135a3565b6130cd886135a3565b876133b4565b600080600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508381101561316a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161316190614a90565b60405180910390fd5b83810360008087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508360008087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461321f9190614dd3565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62888860405161329c929190614c8b565b60405180910390a46132b282888888888861361d565b50505050505050565b60008082905060005b84518110156133635760008582815181106132e2576132e161508d565b5b602002602001015190508083116133235782816040516020016133069291906146f6565b60405160208183030381529060405280519060200120925061334f565b80836040516020016133369291906146f6565b6040516020818303038152906040528051906020012092505b50808061335b90614fb8565b9150506132c4565b508091505092915050565b803410156133b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133a8906148f0565b60405180910390fd5b50565b505050505050565b6133db8473ffffffffffffffffffffffffffffffffffffffff16613804565b1561359b578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b815260040161342195949392919061473d565b602060405180830381600087803b15801561343b57600080fd5b505af192505050801561346c57506040513d601f19601f820116820180604052508101906134699190613fc4565b60015b613512576134786150eb565b806308c379a014156134d5575061348d615942565b8061349857506134d7565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134cc919061488e565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613509906148b0565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614613599576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613590906148d0565b60405180910390fd5b505b505050505050565b60606000600167ffffffffffffffff8111156135c2576135c16150bc565b5b6040519080825280602002602001820160405280156135f05781602001602082028036833780820191505090505b50905082816000815181106136085761360761508d565b5b60200260200101818152505080915050919050565b61363c8473ffffffffffffffffffffffffffffffffffffffff16613804565b156137fc578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b81526004016136829594939291906147a5565b602060405180830381600087803b15801561369c57600080fd5b505af19250505080156136cd57506040513d601f19601f820116820180604052508101906136ca9190613fc4565b60015b613773576136d96150eb565b806308c379a0141561373657506136ee615942565b806136f95750613738565b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161372d919061488e565b60405180910390fd5b505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161376a906148b0565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146137fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137f1906148d0565b60405180910390fd5b505b505050505050565b600080823b905060008111915050919050565b82805461382390614f55565b90600052602060002090601f016020900481019282613845576000855561388c565b82601f1061385e57803560ff191683800117855561388c565b8280016001018555821561388c579182015b8281111561388b578235825591602001919060010190613870565b5b5090506138999190613923565b5090565b8280546138a990614f55565b90600052602060002090601f0160209004810192826138cb5760008555613912565b82601f106138e457805160ff1916838001178555613912565b82800160010185558215613912579182015b828111156139115782518255916020019190600101906138f6565b5b50905061391f9190613923565b5090565b5b8082111561393c576000816000905550600101613924565b5090565b600061395361394e84614cd9565b614cb4565b9050808382526020820190508285602086028201111561397657613975615117565b5b60005b858110156139a6578161398c8882613a62565b845260208401935060208301925050600181019050613979565b5050509392505050565b60006139c36139be84614d05565b614cb4565b905080838252602082019050828560208602820111156139e6576139e5615117565b5b60005b85811015613a1657816139fc8882613c16565b8452602084019350602083019250506001810190506139e9565b5050509392505050565b6000613a33613a2e84614d31565b614cb4565b905082815260208101848484011115613a4f57613a4e61511c565b5b613a5a848285614f13565b509392505050565b600081359050613a71816159d8565b92915050565b600082601f830112613a8c57613a8b615112565b5b8135613a9c848260208601613940565b91505092915050565b60008083601f840112613abb57613aba615112565b5b8235905067ffffffffffffffff811115613ad857613ad761510d565b5b602083019150836020820283011115613af457613af3615117565b5b9250929050565b600082601f830112613b1057613b0f615112565b5b8135613b208482602086016139b0565b91505092915050565b600081359050613b38816159ef565b92915050565b600081359050613b4d81615a06565b92915050565b600081359050613b6281615a1d565b92915050565b600081519050613b7781615a1d565b92915050565b600082601f830112613b9257613b91615112565b5b8135613ba2848260208601613a20565b91505092915050565b600081519050613bba81615a34565b92915050565b60008083601f840112613bd657613bd5615112565b5b8235905067ffffffffffffffff811115613bf357613bf261510d565b5b602083019150836001820283011115613c0f57613c0e615117565b5b9250929050565b600081359050613c2581615a4b565b92915050565b600060208284031215613c4157613c40615126565b5b6000613c4f84828501613a62565b91505092915050565b60008060408385031215613c6f57613c6e615126565b5b6000613c7d85828601613a62565b9250506020613c8e85828601613a62565b9150509250929050565b600080600080600060a08688031215613cb457613cb3615126565b5b6000613cc288828901613a62565b9550506020613cd388828901613a62565b945050604086013567ffffffffffffffff811115613cf457613cf3615121565b5b613d0088828901613afb565b935050606086013567ffffffffffffffff811115613d2157613d20615121565b5b613d2d88828901613afb565b925050608086013567ffffffffffffffff811115613d4e57613d4d615121565b5b613d5a88828901613b7d565b9150509295509295909350565b600080600080600060a08688031215613d8357613d82615126565b5b6000613d9188828901613a62565b9550506020613da288828901613a62565b9450506040613db388828901613c16565b9350506060613dc488828901613c16565b925050608086013567ffffffffffffffff811115613de557613de4615121565b5b613df188828901613b7d565b9150509295509295909350565b60008060008060608587031215613e1857613e17615126565b5b6000613e2687828801613a62565b945050602085013567ffffffffffffffff811115613e4757613e46615121565b5b613e5387828801613aa5565b93509350506040613e6687828801613c16565b91505092959194509250565b60008060408385031215613e8957613e88615126565b5b6000613e9785828601613a62565b9250506020613ea885828601613b29565b9150509250929050565b60008060408385031215613ec957613ec8615126565b5b6000613ed785828601613a62565b9250506020613ee885828601613c16565b9150509250929050565b60008060408385031215613f0957613f08615126565b5b600083013567ffffffffffffffff811115613f2757613f26615121565b5b613f3385828601613a77565b925050602083013567ffffffffffffffff811115613f5457613f53615121565b5b613f6085828601613afb565b9150509250929050565b600060208284031215613f8057613f7f615126565b5b6000613f8e84828501613b3e565b91505092915050565b600060208284031215613fad57613fac615126565b5b6000613fbb84828501613b53565b91505092915050565b600060208284031215613fda57613fd9615126565b5b6000613fe884828501613b68565b91505092915050565b60006020828403121561400757614006615126565b5b600061401584828501613bab565b91505092915050565b6000806020838503121561403557614034615126565b5b600083013567ffffffffffffffff81111561405357614052615121565b5b61405f85828601613bc0565b92509250509250929050565b60006020828403121561408157614080615126565b5b600061408f84828501613c16565b91505092915050565b600080604083850312156140af576140ae615126565b5b60006140bd85828601613c16565b92505060206140ce85828601613c16565b9150509250929050565b6000806000806000608086880312156140f4576140f3615126565b5b600061410288828901613c16565b955050602061411388828901613c16565b945050604061412488828901613c16565b935050606086013567ffffffffffffffff81111561414557614144615121565b5b61415188828901613aa5565b92509250509295509295909350565b600061416c83836146bd565b60208301905092915050565b61418181614e83565b82525050565b61419861419382614e83565b615001565b82525050565b60006141a982614d72565b6141b38185614da0565b93506141be83614d62565b8060005b838110156141ef5781516141d68882614160565b97506141e183614d93565b9250506001810190506141c2565b5085935050505092915050565b61420581614e95565b82525050565b61421481614ea1565b82525050565b61422b61422682614ea1565b615013565b82525050565b600061423c82614d7d565b6142468185614db1565b9350614256818560208601614f22565b61425f8161512b565b840191505092915050565b600061427582614d88565b61427f8185614dc2565b935061428f818560208601614f22565b6142988161512b565b840191505092915050565b60006142b0603483614dc2565b91506142bb82615156565b604082019050919050565b60006142d3602883614dc2565b91506142de826151a5565b604082019050919050565b60006142f6601583614dc2565b9150614301826151f4565b602082019050919050565b6000614319602b83614dc2565b91506143248261521d565b604082019050919050565b600061433c602683614dc2565b91506143478261526c565b604082019050919050565b600061435f601083614dc2565b915061436a826152bb565b602082019050919050565b6000614382601883614dc2565b915061438d826152e4565b602082019050919050565b60006143a5602983614dc2565b91506143b08261530d565b604082019050919050565b60006143c8601183614dc2565b91506143d38261535c565b602082019050919050565b60006143eb602583614dc2565b91506143f682615385565b604082019050919050565b600061440e603283614dc2565b9150614419826153d4565b604082019050919050565b6000614431603d83614dc2565b915061443c82615423565b604082019050919050565b6000614454602683614dc2565b915061445f82615472565b604082019050919050565b6000614477601783614dc2565b9150614482826154c1565b602082019050919050565b600061449a603283614dc2565b91506144a5826154ea565b604082019050919050565b60006144bd602a83614dc2565b91506144c882615539565b604082019050919050565b60006144e0601f83614dc2565b91506144eb82615588565b602082019050919050565b6000614503600d83614dc2565b915061450e826155b1565b602082019050919050565b6000614526602083614dc2565b9150614531826155da565b602082019050919050565b6000614549603183614dc2565b915061455482615603565b604082019050919050565b600061456c602483614dc2565b915061457782615652565b604082019050919050565b600061458f603283614dc2565b915061459a826156a1565b604082019050919050565b60006145b2602583614dc2565b91506145bd826156f0565b604082019050919050565b60006145d5601083614dc2565b91506145e08261573f565b602082019050919050565b60006145f8602583614dc2565b915061460382615768565b604082019050919050565b600061461b602983614dc2565b9150614626826157b7565b604082019050919050565b600061463e602983614dc2565b915061464982615806565b604082019050919050565b6000614661602883614dc2565b915061466c82615855565b604082019050919050565b6000614684602683614dc2565b915061468f826158a4565b604082019050919050565b60006146a7602183614dc2565b91506146b2826158f3565b604082019050919050565b6146c681614f09565b82525050565b6146d581614f09565b82525050565b60006146e78284614187565b60148201915081905092915050565b6000614702828561421a565b602082019150614712828461421a565b6020820191508190509392505050565b60006020820190506147376000830184614178565b92915050565b600060a0820190506147526000830188614178565b61475f6020830187614178565b8181036040830152614771818661419e565b90508181036060830152614785818561419e565b905081810360808301526147998184614231565b90509695505050505050565b600060a0820190506147ba6000830188614178565b6147c76020830187614178565b6147d460408301866146cc565b6147e160608301856146cc565b81810360808301526147f38184614231565b90509695505050505050565b60006020820190508181036000830152614819818461419e565b905092915050565b6000604082019050818103600083015261483b818561419e565b9050818103602083015261484f818461419e565b90509392505050565b600060208201905061486d60008301846141fc565b92915050565b6000602082019050614888600083018461420b565b92915050565b600060208201905081810360008301526148a8818461426a565b905092915050565b600060208201905081810360008301526148c9816142a3565b9050919050565b600060208201905081810360008301526148e9816142c6565b9050919050565b60006020820190508181036000830152614909816142e9565b9050919050565b600060208201905081810360008301526149298161430c565b9050919050565b600060208201905081810360008301526149498161432f565b9050919050565b6000602082019050818103600083015261496981614352565b9050919050565b6000602082019050818103600083015261498981614375565b9050919050565b600060208201905081810360008301526149a981614398565b9050919050565b600060208201905081810360008301526149c9816143bb565b9050919050565b600060208201905081810360008301526149e9816143de565b9050919050565b60006020820190508181036000830152614a0981614401565b9050919050565b60006020820190508181036000830152614a2981614424565b9050919050565b60006020820190508181036000830152614a4981614447565b9050919050565b60006020820190508181036000830152614a698161446a565b9050919050565b60006020820190508181036000830152614a898161448d565b9050919050565b60006020820190508181036000830152614aa9816144b0565b9050919050565b60006020820190508181036000830152614ac9816144d3565b9050919050565b60006020820190508181036000830152614ae9816144f6565b9050919050565b60006020820190508181036000830152614b0981614519565b9050919050565b60006020820190508181036000830152614b298161453c565b9050919050565b60006020820190508181036000830152614b498161455f565b9050919050565b60006020820190508181036000830152614b6981614582565b9050919050565b60006020820190508181036000830152614b89816145a5565b9050919050565b60006020820190508181036000830152614ba9816145c8565b9050919050565b60006020820190508181036000830152614bc9816145eb565b9050919050565b60006020820190508181036000830152614be98161460e565b9050919050565b60006020820190508181036000830152614c0981614631565b9050919050565b60006020820190508181036000830152614c2981614654565b9050919050565b60006020820190508181036000830152614c4981614677565b9050919050565b60006020820190508181036000830152614c698161469a565b9050919050565b6000602082019050614c8560008301846146cc565b92915050565b6000604082019050614ca060008301856146cc565b614cad60208301846146cc565b9392505050565b6000614cbe614ccf565b9050614cca8282614f87565b919050565b6000604051905090565b600067ffffffffffffffff821115614cf457614cf36150bc565b5b602082029050602081019050919050565b600067ffffffffffffffff821115614d2057614d1f6150bc565b5b602082029050602081019050919050565b600067ffffffffffffffff821115614d4c57614d4b6150bc565b5b614d558261512b565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b6000614dde82614f09565b9150614de983614f09565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614e1e57614e1d61502f565b5b828201905092915050565b6000614e3482614f09565b9150614e3f83614f09565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614e7857614e7761502f565b5b828202905092915050565b6000614e8e82614ee9565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6000614ee282614e83565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015614f40578082015181840152602081019050614f25565b83811115614f4f576000848401525b50505050565b60006002820490506001821680614f6d57607f821691505b60208210811415614f8157614f8061505e565b5b50919050565b614f908261512b565b810181811067ffffffffffffffff82111715614faf57614fae6150bc565b5b80604052505050565b6000614fc382614f09565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614ff657614ff561502f565b5b600182019050919050565b600061500c8261501d565b9050919050565b6000819050919050565b60006150288261513c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d111561510a5760046000803e615107600051615149565b90505b90565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b60008160e01c9050919050565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b7f4e6f7420656e6f7567682066756e64732073656e740000000000000000000000600082015250565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f496e76616c696420706173735479706500000000000000000000000000000000600082015250565b7f55736572206973206e6f74206f6e2077686974656c6973740000000000000000600082015250565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b7f496e76616c696420706173732074797065000000000000000000000000000000600082015250565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f546865206561726c792073616c65206973206f7665722e20557365207468652060008201527f7075626c6963206d696e742066756e6374696f6e20696e73746561642e000000602082015250565b7f4d696e74696e6720776f756c64206578636565642062726f6e7a65206d61782060008201527f746f6b656e730000000000000000000000000000000000000000000000000000602082015250565b7f5075626c6963206d696e74206973206e6f74206f70656e000000000000000000600082015250565b7f43616e6e6f74206d696e74206d6f7265207468616e203220706572206164647260008201527f65737320696e20746869732070686173652e0000000000000000000000000000602082015250565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b7f4d75737420757365204669727374204275796572732077686974656c69737400600082015250565b7f496e76616c696420737461746500000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f43616e6e6f74206d696e74206d6f7265207468616e203320706572206164647260008201527f65737320696e2074686973207068617365000000000000000000000000000000602082015250565b7f4d696e74696e6720776f756c642065786365656420676f6c64206d617820746f60008201527f6b656e7300000000000000000000000000000000000000000000000000000000602082015250565b7f43616e6e6f74206d696e74206d6f7265207468616e203120706572206164647260008201527f65737320696e20746869732070686173652e0000000000000000000000000000602082015250565b7f4d696e74696e6720776f756c6420657863656564207975636b79206d6178207460008201527f6f6b656e73000000000000000000000000000000000000000000000000000000602082015250565b7f53616c65206973206e6f74206f70656e00000000000000000000000000000000600082015250565b7f496e76616c69642077686974656c697374547970652c206d757374206265203160008201527f206f722032000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b7f4d696e74696e6720776f756c64206578636565642073696c766572206d61782060008201527f746f6b656e730000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600060443d1015615952576159d5565b61595a614ccf565b60043d036004823e80513d602482011167ffffffffffffffff821117156159825750506159d5565b808201805167ffffffffffffffff8111156159a057505050506159d5565b80602083010160043d0385018111156159bd5750505050506159d5565b6159cc82602001850186614f87565b82955050505050505b90565b6159e181614e83565b81146159ec57600080fd5b50565b6159f881614e95565b8114615a0357600080fd5b50565b615a0f81614ea1565b8114615a1a57600080fd5b50565b615a2681614eab565b8114615a3157600080fd5b50565b615a3d81614ed7565b8114615a4857600080fd5b50565b615a5481614f09565b8114615a5f57600080fd5b5056fea2646970667358221220bd71c70de85f7b226c2de5ebba55e9e1654485e9d7d4be21e3dac0c5d495c89664736f6c63430008070033

Deployed Bytecode Sourcemap

39726:7682:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25146:231;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24169:310;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41375:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45993:150;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40073:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40030:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24890:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40724:47;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40828:48;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45141:476;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40505:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41543:395;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40364:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39951:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27085:442;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39989:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46149:130;;;;;;;;;;;;;:::i;:::-;;39806:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40187:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40111:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25543:524;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40983:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41249:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4774:103;;;;;;;;;;;;;:::i;:::-;;46687:97;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45755:116;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4123:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46893:97;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41411:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45877:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46285:89;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26140:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46584:97;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46485:93;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40600:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40409:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41944:1123;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40684:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46790:97;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46380:99;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40776:47;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40456:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43547:280;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40332:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40941:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39876:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39840;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40148:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47314:91;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47095:213;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26607:401;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5032:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46996:93;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40228:99;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39771:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39914:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25146:231;25232:7;25279:1;25260:21;;:7;:21;;;;25252:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;25347:9;:13;25357:2;25347:13;;;;;;;;;;;:22;25361:7;25347:22;;;;;;;;;;;;;;;;25340:29;;25146:231;;;;:::o;24169:310::-;24271:4;24323:26;24308:41;;;:11;:41;;;;:110;;;;24381:37;24366:52;;;:11;:52;;;;24308:110;:163;;;;24435:36;24459:11;24435:23;:36::i;:::-;24308:163;24288:183;;24169:310;;;:::o;41375:31::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;45993:150::-;4354:12;:10;:12::i;:::-;4343:23;;:7;:5;:7::i;:::-;:23;;;4335:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46074:1:::1;46062:8;:13;;:30;;;;;46091:1;46079:8;:13;;46062:30;46054:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;46129:8;46117:9;:20;;;;45993:150:::0;:::o;40073:33::-;;;;:::o;40030:36::-;;;;:::o;24890:105::-;24950:13;24983:4;24976:11;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24890:105;;;:::o;40724:47::-;;;;;;;;;;;;;;;;;:::o;40828:48::-;;;;;;;;;;;;;;;;;:::o;45141:476::-;45245:4;45258:12;40977:1;45281:13;:29;45277:229;;;45328:21;;45321:28;;45277:229;;;41015:1;45367:13;:25;45363:143;;;45410:18;;45403:25;;45363:143;;;45451:47;;;;;;;;;;:::i;:::-;;;;;;;;45363:143;45277:229;45512:12;45554:4;45537:22;;;;;;;;:::i;:::-;;;;;;;;;;;;;45527:33;;;;;;45512:48;;45574:37;45593:5;;45574:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45600:4;45606;45574:18;:37::i;:::-;45567:44;;;;45141:476;;;;;;:::o;40505:39::-;;;;:::o;41543:395::-;41628:1;41615:9;;:14;41607:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;41787:6;41757:15;:27;41773:10;41757:27;;;;;;;;;;;;;;;;:36;;;;:::i;:::-;41727:15;:27;41743:10;41727:27;;;;;;;;;;;;;;;:66;;;;41839:1;41808:15;:27;41824:10;41808:27;;;;;;;;;;;;;;;;:32;;41800:94;;;;;;;;;;;;:::i;:::-;;;;;;;;;41901:31;41915:8;41925:6;41901:13;:31::i;:::-;41543:395;;:::o;40364:35::-;;;;:::o;39951:33::-;;;;:::o;27085:442::-;27326:12;:10;:12::i;:::-;27318:20;;:4;:20;;;:60;;;;27342:36;27359:4;27365:12;:10;:12::i;:::-;27342:16;:36::i;:::-;27318:60;27296:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;27467:52;27490:4;27496:2;27500:3;27505:7;27514:4;27467:22;:52::i;:::-;27085:442;;;;;:::o;39989:36::-;;;;:::o;46149:130::-;4354:12;:10;:12::i;:::-;4343:23;;:7;:5;:7::i;:::-;:23;;;4335:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46193:12:::1;46208:21;46193:36;;46244:10;46236:28;;:37;46265:7;46236:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;46186:93;46149:130::o:0;39806:29::-;39834:1;39806:29;:::o;40187:34::-;;;;:::o;40111:32::-;;;;:::o;25543:524::-;25699:16;25760:3;:10;25741:8;:15;:29;25733:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;25829:30;25876:8;:15;25862:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25829:63;;25910:9;25905:122;25929:8;:15;25925:1;:19;25905:122;;;25985:30;25995:8;26004:1;25995:11;;;;;;;;:::i;:::-;;;;;;;;26008:3;26012:1;26008:6;;;;;;;;:::i;:::-;;;;;;;;25985:9;:30::i;:::-;25966:13;25980:1;25966:16;;;;;;;;:::i;:::-;;;;;;;:49;;;;;25946:3;;;;:::i;:::-;;;25905:122;;;;26046:13;26039:20;;;25543:524;;;;:::o;40983:33::-;41015:1;40983:33;:::o;41249:28::-;;;;:::o;4774:103::-;4354:12;:10;:12::i;:::-;4343:23;;:7;:5;:7::i;:::-;:23;;;4335:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4839:30:::1;4866:1;4839:18;:30::i;:::-;4774:103::o:0;46687:97::-;4354:12;:10;:12::i;:::-;4343:23;;:7;:5;:7::i;:::-;:23;;;4335:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46770:8:::1;46753:14;:25;;;;46687:97:::0;:::o;45755:116::-;4354:12;:10;:12::i;:::-;4343:23;;:7;:5;:7::i;:::-;:23;;;4335:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45856:9:::1;45832:21;:33;;;;45755:116:::0;:::o;4123:87::-;4169:7;4196:6;;;;;;;;;;;4189:13;;4123:87;:::o;46893:97::-;4354:12;:10;:12::i;:::-;4343:23;;:7;:5;:7::i;:::-;:23;;;4335:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46978:6:::1;46958:17;:26;;;;46893:97:::0;:::o;41411:29::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;45877:110::-;4354:12;:10;:12::i;:::-;4343:23;;:7;:5;:7::i;:::-;:23;;;4335:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45972:9:::1;45951:18;:30;;;;45877:110:::0;:::o;46285:89::-;4354:12;:10;:12::i;:::-;4343:23;;:7;:5;:7::i;:::-;:23;;;4335:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46353:15:::1;46361:6;;46353:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:7;:15::i;:::-;46285:89:::0;;:::o;26140:155::-;26235:52;26254:12;:10;:12::i;:::-;26268:8;26278;26235:18;:52::i;:::-;26140:155;;:::o;46584:97::-;4354:12;:10;:12::i;:::-;4343:23;;:7;:5;:7::i;:::-;:23;;;4335:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46667:8:::1;46650:14;:25;;;;46584:97:::0;:::o;46485:93::-;4354:12;:10;:12::i;:::-;4343:23;;:7;:5;:7::i;:::-;:23;;;4335:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46564:8:::1;46549:12;:23;;;;46485:93:::0;:::o;40600:36::-;;;;:::o;40409:37::-;;;;:::o;41944:1123::-;42085:1;42073:9;;:13;42065:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;42131:1;42118:9;;:14;42114:908;;;42286:6;42257:14;:26;42272:10;42257:26;;;;;;;;;;;;;;;;:35;;;;:::i;:::-;42228:14;:26;42243:10;42228:26;;;;;;;;;;;;;;;:64;;;;42339:1;42309:14;:26;42324:10;42309:26;;;;;;;;;;;;;;;;:31;42301:94;;;;;;;;;;;;:::i;:::-;;;;;;;;;40977:1;42420:13;:29;42412:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;42494:51;42507:10;42519:11;;40977:1;42494:12;:51::i;:::-;42114:908;;;42578:1;42565:9;;:14;42561:461;;;42740:6;42711:14;:26;42726:10;42711:26;;;;;;;;;;;;;;;;:35;;;;:::i;:::-;42682:14;:26;42697:10;42682:26;;;;;;;;;;;;;;;:64;;;;42793:1;42763:14;:26;42778:10;42763:26;;;;;;;;;;;;;;;;:31;;42755:94;;;;;;;;;;;;:::i;:::-;;;;;;;;;42860:52;42873:10;42885:11;;42898:13;42860:12;:52::i;:::-;42561:461;;;42943:71;;;;;;;;;;:::i;:::-;;;;;;;;42561:461;42114:908;43030:31;43044:8;43054:6;43030:13;:31::i;:::-;41944:1123;;;;;:::o;40684:33::-;;;;:::o;46790:97::-;4354:12;:10;:12::i;:::-;4343:23;;:7;:5;:7::i;:::-;:23;;;4335:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46875:6:::1;46855:17;:26;;;;46790:97:::0;:::o;46380:99::-;4354:12;:10;:12::i;:::-;4343:23;;:7;:5;:7::i;:::-;:23;;;4335:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46467:6:::1;;46452:12;:21;;;;;;;:::i;:::-;;46380:99:::0;;:::o;40776:47::-;;;;;;;;;;;;;;;;;:::o;40456:39::-;;;;:::o;43547:280::-;4354:12;:10;:12::i;:::-;4343:23;;:7;:5;:7::i;:::-;:23;;;4335:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43618:40:::1;43641:8;43651:6;43618:22;:40::i;:::-;39800:1;43673:8;:17;:37;;;;39834:1;43694:8;:16;43673:37;:59;;;;39870:1;43714:8;:18;43673:59;:81;;;;39906:1;43736:8;:18;43673:81;43665:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;43782:39;43788:10;43800:8;43810:6;43782:39;;;;;;;;;;;::::0;:5:::1;:39::i;:::-;43547:280:::0;;:::o;40332:25::-;;;;:::o;40941:37::-;40977:1;40941:37;:::o;39876:31::-;39906:1;39876:31;:::o;39840:::-;39870:1;39840:31;:::o;40148:34::-;;;;:::o;47314:91::-;47358:13;47387:12;47380:19;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47314:91;:::o;47095:213::-;47184:4;47204:55;47243:5;47250:8;47204:38;:55::i;:::-;:98;;;;47263:39;47286:5;47293:8;47263:22;:39::i;:::-;47204:98;47197:105;;47095:213;;;;:::o;26607:401::-;26823:12;:10;:12::i;:::-;26815:20;;:4;:20;;;:60;;;;26839:36;26856:4;26862:12;:10;:12::i;:::-;26839:16;:36::i;:::-;26815:60;26793:151;;;;;;;;;;;;:::i;:::-;;;;;;;;;26955:45;26973:4;26979:2;26983;26987:6;26995:4;26955:17;:45::i;:::-;26607:401;;;;;:::o;5032:201::-;4354:12;:10;:12::i;:::-;4343:23;;:7;:5;:7::i;:::-;:23;;;4335:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5141:1:::1;5121:22;;:8;:22;;;;5113:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;5197:28;5216:8;5197:18;:28::i;:::-;5032:201:::0;:::o;46996:93::-;4354:12;:10;:12::i;:::-;4343:23;;:7;:5;:7::i;:::-;:23;;;4335:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47077:6:::1;47059:15;:24;;;;46996:93:::0;:::o;40228:99::-;;;;:::o;39771:30::-;39800:1;39771:30;:::o;39914:32::-;;;;:::o;15524:157::-;15609:4;15648:25;15633:40;;;:11;:40;;;;15626:47;;15524:157;;;:::o;2847:98::-;2900:7;2927:10;2920:17;;2847:98;:::o;908:190::-;1033:4;1086;1057:25;1070:5;1077:4;1057:12;:25::i;:::-;:33;1050:40;;908:190;;;;;:::o;43073:468::-;43140:40;43163:8;43173:6;43140:22;:40::i;:::-;39834:1;43191:8;:16;43187:303;;;43218:35;43246:6;43231:12;;:21;;;;:::i;:::-;43218:12;:35::i;:::-;43187:303;;;39870:1;43276:8;:18;43272:218;;;43305:37;43335:6;43318:14;;:23;;;;:::i;:::-;43305:12;:37::i;:::-;43272:218;;;39906:1;43366:8;:18;43362:128;;;43395:37;43425:6;43408:14;;:23;;;;:::i;:::-;43395:12;:37::i;:::-;43362:128;;;43455:27;;;;;;;;;;:::i;:::-;;;;;;;;43362:128;43272:218;43187:303;43496:39;43502:10;43514:8;43524:6;43496:39;;;;;;;;;;;;:5;:39::i;:::-;43073:468;;:::o;29169:1074::-;29396:7;:14;29382:3;:10;:28;29374:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;29488:1;29474:16;;:2;:16;;;;29466:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;29545:16;29564:12;:10;:12::i;:::-;29545:31;;29589:60;29610:8;29620:4;29626:2;29630:3;29635:7;29644:4;29589:20;:60::i;:::-;29667:9;29662:421;29686:3;:10;29682:1;:14;29662:421;;;29718:10;29731:3;29735:1;29731:6;;;;;;;;:::i;:::-;;;;;;;;29718:19;;29752:14;29769:7;29777:1;29769:10;;;;;;;;:::i;:::-;;;;;;;;29752:27;;29796:19;29818:9;:13;29828:2;29818:13;;;;;;;;;;;:19;29832:4;29818:19;;;;;;;;;;;;;;;;29796:41;;29875:6;29860:11;:21;;29852:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;30008:6;29994:11;:20;29972:9;:13;29982:2;29972:13;;;;;;;;;;;:19;29986:4;29972:19;;;;;;;;;;;;;;;:42;;;;30065:6;30044:9;:13;30054:2;30044:13;;;;;;;;;;;:17;30058:2;30044:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;29703:380;;;29698:3;;;;:::i;:::-;;;29662:421;;;;30130:2;30100:47;;30124:4;30100:47;;30114:8;30100:47;;;30134:3;30139:7;30100:47;;;;;;;:::i;:::-;;;;;;;;30160:75;30196:8;30206:4;30212:2;30216:3;30221:7;30230:4;30160:35;:75::i;:::-;29363:880;29169:1074;;;;;:::o;5393:191::-;5467:16;5486:6;;;;;;;;;;;5467:25;;5512:8;5503:6;;:17;;;;;;;;;;;;;;;;;;5567:8;5536:40;;5557:8;5536:40;;;;;;;;;;;;5456:128;5393:191;:::o;31087:88::-;31161:6;31154:4;:13;;;;;;;;;;;;:::i;:::-;;31087:88;:::o;35355:331::-;35510:8;35501:17;;:5;:17;;;;35493:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;35613:8;35575:18;:25;35594:5;35575:25;;;;;;;;;;;;;;;:35;35601:8;35575:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;35659:8;35637:41;;35652:5;35637:41;;;35669:8;35637:41;;;;;;:::i;:::-;;;;;;;;35355:331;;;:::o;44948:187::-;45059:41;45073:4;45079:5;;45086:13;45059;:41::i;:::-;45051:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;44948:187;;;;:::o;43833:936::-;39800:1;43913:8;:17;43909:818;;;43981:6;43961:17;;:26;;;;:::i;:::-;43941:17;:46;;;;44025:16;;44004:17;;:37;;43996:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;43909:818;;;39834:1;44106:8;:16;44102:625;;;44171:6;44152:16;;:25;;;;:::i;:::-;44133:16;:44;;;;44214:15;;44194:16;;:35;;44186:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;44102:625;;;39870:1;44293:8;:18;44289:438;;;44364:6;44343:18;;:27;;;;:::i;:::-;44322:18;:48;;;;44409:17;;44387:18;;:39;;44379:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;44289:438;;;39906:1;44493:8;:18;44489:238;;;44564:6;44543:18;;:27;;;;:::i;:::-;44522:18;:48;;;;44609:17;;44587:18;;:39;;44579:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;44489:238;;;44692:27;;;;;;;;;;:::i;:::-;;;;;;;;44489:238;44289:438;44102:625;43909:818;44757:6;44745:9;;:18;;;;:::i;:::-;44733:9;:30;;;;43833:936;;:::o;31561:569::-;31728:1;31714:16;;:2;:16;;;;31706:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;31781:16;31800:12;:10;:12::i;:::-;31781:31;;31825:102;31846:8;31864:1;31868:2;31872:21;31890:2;31872:17;:21::i;:::-;31895:25;31913:6;31895:17;:25::i;:::-;31922:4;31825:20;:102::i;:::-;31961:6;31940:9;:13;31950:2;31940:13;;;;;;;;;;;:17;31954:2;31940:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;32020:2;31983:52;;32016:1;31983:52;;31998:8;31983:52;;;32024:2;32028:6;31983:52;;;;;;;:::i;:::-;;;;;;;;32048:74;32079:8;32097:1;32101:2;32105;32109:6;32117:4;32048:30;:74::i;:::-;31695:435;31561:569;;;;:::o;39027:563::-;39109:4;39126:22;39190:9;39218:1;39213:123;;;;39355:1;39350:123;;;;39183:290;;39213:123;39279:42;39267:54;;39213:123;;39350;39416:42;39404:54;;39183:290;;39532:1;39503:31;;39511:8;39503:31;;;;:79;;;;;39574:8;39538:44;;39546:8;:16;;;39563:5;39546:23;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39538:44;;;39503:79;39496:86;;;39027:563;;;;:::o;26367:168::-;26466:4;26490:18;:27;26509:7;26490:27;;;;;;;;;;;;;;;:37;26518:8;26490:37;;;;;;;;;;;;;;;;;;;;;;;;;26483:44;;26367:168;;;;:::o;27991:820::-;28193:1;28179:16;;:2;:16;;;;28171:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;28250:16;28269:12;:10;:12::i;:::-;28250:31;;28294:96;28315:8;28325:4;28331:2;28335:21;28353:2;28335:17;:21::i;:::-;28358:25;28376:6;28358:17;:25::i;:::-;28385:4;28294:20;:96::i;:::-;28403:19;28425:9;:13;28435:2;28425:13;;;;;;;;;;;:19;28439:4;28425:19;;;;;;;;;;;;;;;;28403:41;;28478:6;28463:11;:21;;28455:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;28603:6;28589:11;:20;28567:9;:13;28577:2;28567:13;;;;;;;;;;;:19;28581:4;28567:19;;;;;;;;;;;;;;;:42;;;;28652:6;28631:9;:13;28641:2;28631:13;;;;;;;;;;;:17;28645:2;28631:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;28707:2;28676:46;;28701:4;28676:46;;28691:8;28676:46;;;28711:2;28715:6;28676:46;;;;;;;:::i;:::-;;;;;;;;28735:68;28766:8;28776:4;28782:2;28786;28790:6;28798:4;28735:30;:68::i;:::-;28160:651;;27991:820;;;;;:::o;1460:701::-;1543:7;1563:20;1586:4;1563:27;;1606:9;1601:523;1625:5;:12;1621:1;:16;1601:523;;;1659:20;1682:5;1688:1;1682:8;;;;;;;;:::i;:::-;;;;;;;;1659:31;;1725:12;1709;:28;1705:408;;1879:12;1893;1862:44;;;;;;;;;:::i;:::-;;;;;;;;;;;;;1852:55;;;;;;1837:70;;1705:408;;;2069:12;2083;2052:44;;;;;;;;;:::i;:::-;;;;;;;;;;;;;2042:55;;;;;;2027:70;;1705:408;1644:480;1639:3;;;;;:::i;:::-;;;;1601:523;;;;2141:12;2134:19;;;1460:701;;;;:::o;45623:126::-;45703:14;45690:9;:27;;45682:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;45623:126;:::o;36642:221::-;;;;;;;:::o;37623:813::-;37863:15;:2;:13;;;:15::i;:::-;37859:570;;;37916:2;37899:43;;;37943:8;37953:4;37959:3;37964:7;37973:4;37899:79;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;37895:523;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;38291:6;38284:14;;;;;;;;;;;:::i;:::-;;;;;;;;37895:523;;;38340:62;;;;;;;;;;:::i;:::-;;;;;;;;37895:523;38072:48;;;38060:60;;;:8;:60;;;;38056:159;;38145:50;;;;;;;;;;:::i;:::-;;;;;;;;38056:159;37979:251;37859:570;37623:813;;;;;;:::o;38444:198::-;38510:16;38539:22;38578:1;38564:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38539:41;;38602:7;38591:5;38597:1;38591:8;;;;;;;;:::i;:::-;;;;;;;:18;;;;;38629:5;38622:12;;;38444:198;;;:::o;36871:744::-;37086:15;:2;:13;;;:15::i;:::-;37082:526;;;37139:2;37122:38;;;37161:8;37171:4;37177:2;37181:6;37189:4;37122:72;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;37118:479;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;37470:6;37463:14;;;;;;;;;;;:::i;:::-;;;;;;;;37118:479;;;37519:62;;;;;;;;;;:::i;:::-;;;;;;;;37118:479;37256:43;;;37244:55;;;:8;:55;;;;37240:154;;37324:50;;;;;;;;;;:::i;:::-;;;;;;;;37240:154;37195:214;37082:526;36871:744;;;;;;:::o;6411:387::-;6471:4;6679:12;6746:7;6734:20;6726:28;;6789:1;6782:4;:8;6775:15;;;6411:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;769:::-;865:5;890:81;906:64;963:6;906:64;:::i;:::-;890:81;:::i;:::-;881:90;;991:5;1020:6;1013:5;1006:21;1054:4;1047:5;1043:16;1036:23;;1080:6;1130:3;1122:4;1114:6;1110:17;1105:3;1101:27;1098:36;1095:143;;;1149:79;;:::i;:::-;1095:143;1262:1;1247:238;1272:6;1269:1;1266:13;1247:238;;;1340:3;1369:37;1402:3;1390:10;1369:37;:::i;:::-;1364:3;1357:50;1436:4;1431:3;1427:14;1420:21;;1470:4;1465:3;1461:14;1454:21;;1307:178;1294:1;1291;1287:9;1282:14;;1247:238;;;1251:14;871:620;;769:722;;;;;:::o;1497:410::-;1574:5;1599:65;1615:48;1656:6;1615:48;:::i;:::-;1599:65;:::i;:::-;1590:74;;1687:6;1680:5;1673:21;1725:4;1718:5;1714:16;1763:3;1754:6;1749:3;1745:16;1742:25;1739:112;;;1770:79;;:::i;:::-;1739:112;1860:41;1894:6;1889:3;1884;1860:41;:::i;:::-;1580:327;1497:410;;;;;:::o;1913:139::-;1959:5;1997:6;1984:20;1975:29;;2013:33;2040:5;2013:33;:::i;:::-;1913:139;;;;:::o;2075:370::-;2146:5;2195:3;2188:4;2180:6;2176:17;2172:27;2162:122;;2203:79;;:::i;:::-;2162:122;2320:6;2307:20;2345:94;2435:3;2427:6;2420:4;2412:6;2408:17;2345:94;:::i;:::-;2336:103;;2152:293;2075:370;;;;:::o;2468:568::-;2541:8;2551:6;2601:3;2594:4;2586:6;2582:17;2578:27;2568:122;;2609:79;;:::i;:::-;2568:122;2722:6;2709:20;2699:30;;2752:18;2744:6;2741:30;2738:117;;;2774:79;;:::i;:::-;2738:117;2888:4;2880:6;2876:17;2864:29;;2942:3;2934:4;2926:6;2922:17;2912:8;2908:32;2905:41;2902:128;;;2949:79;;:::i;:::-;2902:128;2468:568;;;;;:::o;3059:370::-;3130:5;3179:3;3172:4;3164:6;3160:17;3156:27;3146:122;;3187:79;;:::i;:::-;3146:122;3304:6;3291:20;3329:94;3419:3;3411:6;3404:4;3396:6;3392:17;3329:94;:::i;:::-;3320:103;;3136:293;3059:370;;;;:::o;3435:133::-;3478:5;3516:6;3503:20;3494:29;;3532:30;3556:5;3532:30;:::i;:::-;3435:133;;;;:::o;3574:139::-;3620:5;3658:6;3645:20;3636:29;;3674:33;3701:5;3674:33;:::i;:::-;3574:139;;;;:::o;3719:137::-;3764:5;3802:6;3789:20;3780:29;;3818:32;3844:5;3818:32;:::i;:::-;3719:137;;;;:::o;3862:141::-;3918:5;3949:6;3943:13;3934:22;;3965:32;3991:5;3965:32;:::i;:::-;3862:141;;;;:::o;4022:338::-;4077:5;4126:3;4119:4;4111:6;4107:17;4103:27;4093:122;;4134:79;;:::i;:::-;4093:122;4251:6;4238:20;4276:78;4350:3;4342:6;4335:4;4327:6;4323:17;4276:78;:::i;:::-;4267:87;;4083:277;4022:338;;;;:::o;4366:201::-;4452:5;4483:6;4477:13;4468:22;;4499:62;4555:5;4499:62;:::i;:::-;4366:201;;;;:::o;4587:553::-;4645:8;4655:6;4705:3;4698:4;4690:6;4686:17;4682:27;4672:122;;4713:79;;:::i;:::-;4672:122;4826:6;4813:20;4803:30;;4856:18;4848:6;4845:30;4842:117;;;4878:79;;:::i;:::-;4842:117;4992:4;4984:6;4980:17;4968:29;;5046:3;5038:4;5030:6;5026:17;5016:8;5012:32;5009:41;5006:128;;;5053:79;;:::i;:::-;5006:128;4587:553;;;;;:::o;5146:139::-;5192:5;5230:6;5217:20;5208:29;;5246:33;5273:5;5246:33;:::i;:::-;5146:139;;;;:::o;5291:329::-;5350:6;5399:2;5387:9;5378:7;5374:23;5370:32;5367:119;;;5405:79;;:::i;:::-;5367:119;5525:1;5550:53;5595:7;5586:6;5575:9;5571:22;5550:53;:::i;:::-;5540:63;;5496:117;5291:329;;;;:::o;5626:474::-;5694:6;5702;5751:2;5739:9;5730:7;5726:23;5722:32;5719:119;;;5757:79;;:::i;:::-;5719:119;5877:1;5902:53;5947:7;5938:6;5927:9;5923:22;5902:53;:::i;:::-;5892:63;;5848:117;6004:2;6030:53;6075:7;6066:6;6055:9;6051:22;6030:53;:::i;:::-;6020:63;;5975:118;5626:474;;;;;:::o;6106:1509::-;6260:6;6268;6276;6284;6292;6341:3;6329:9;6320:7;6316:23;6312:33;6309:120;;;6348:79;;:::i;:::-;6309:120;6468:1;6493:53;6538:7;6529:6;6518:9;6514:22;6493:53;:::i;:::-;6483:63;;6439:117;6595:2;6621:53;6666:7;6657:6;6646:9;6642:22;6621:53;:::i;:::-;6611:63;;6566:118;6751:2;6740:9;6736:18;6723:32;6782:18;6774:6;6771:30;6768:117;;;6804:79;;:::i;:::-;6768:117;6909:78;6979:7;6970:6;6959:9;6955:22;6909:78;:::i;:::-;6899:88;;6694:303;7064:2;7053:9;7049:18;7036:32;7095:18;7087:6;7084:30;7081:117;;;7117:79;;:::i;:::-;7081:117;7222:78;7292:7;7283:6;7272:9;7268:22;7222:78;:::i;:::-;7212:88;;7007:303;7377:3;7366:9;7362:19;7349:33;7409:18;7401:6;7398:30;7395:117;;;7431:79;;:::i;:::-;7395:117;7536:62;7590:7;7581:6;7570:9;7566:22;7536:62;:::i;:::-;7526:72;;7320:288;6106:1509;;;;;;;;:::o;7621:1089::-;7725:6;7733;7741;7749;7757;7806:3;7794:9;7785:7;7781:23;7777:33;7774:120;;;7813:79;;:::i;:::-;7774:120;7933:1;7958:53;8003:7;7994:6;7983:9;7979:22;7958:53;:::i;:::-;7948:63;;7904:117;8060:2;8086:53;8131:7;8122:6;8111:9;8107:22;8086:53;:::i;:::-;8076:63;;8031:118;8188:2;8214:53;8259:7;8250:6;8239:9;8235:22;8214:53;:::i;:::-;8204:63;;8159:118;8316:2;8342:53;8387:7;8378:6;8367:9;8363:22;8342:53;:::i;:::-;8332:63;;8287:118;8472:3;8461:9;8457:19;8444:33;8504:18;8496:6;8493:30;8490:117;;;8526:79;;:::i;:::-;8490:117;8631:62;8685:7;8676:6;8665:9;8661:22;8631:62;:::i;:::-;8621:72;;8415:288;7621:1089;;;;;;;;:::o;8716:849::-;8820:6;8828;8836;8844;8893:2;8881:9;8872:7;8868:23;8864:32;8861:119;;;8899:79;;:::i;:::-;8861:119;9019:1;9044:53;9089:7;9080:6;9069:9;9065:22;9044:53;:::i;:::-;9034:63;;8990:117;9174:2;9163:9;9159:18;9146:32;9205:18;9197:6;9194:30;9191:117;;;9227:79;;:::i;:::-;9191:117;9340:80;9412:7;9403:6;9392:9;9388:22;9340:80;:::i;:::-;9322:98;;;;9117:313;9469:2;9495:53;9540:7;9531:6;9520:9;9516:22;9495:53;:::i;:::-;9485:63;;9440:118;8716:849;;;;;;;:::o;9571:468::-;9636:6;9644;9693:2;9681:9;9672:7;9668:23;9664:32;9661:119;;;9699:79;;:::i;:::-;9661:119;9819:1;9844:53;9889:7;9880:6;9869:9;9865:22;9844:53;:::i;:::-;9834:63;;9790:117;9946:2;9972:50;10014:7;10005:6;9994:9;9990:22;9972:50;:::i;:::-;9962:60;;9917:115;9571:468;;;;;:::o;10045:474::-;10113:6;10121;10170:2;10158:9;10149:7;10145:23;10141:32;10138:119;;;10176:79;;:::i;:::-;10138:119;10296:1;10321:53;10366:7;10357:6;10346:9;10342:22;10321:53;:::i;:::-;10311:63;;10267:117;10423:2;10449:53;10494:7;10485:6;10474:9;10470:22;10449:53;:::i;:::-;10439:63;;10394:118;10045:474;;;;;:::o;10525:894::-;10643:6;10651;10700:2;10688:9;10679:7;10675:23;10671:32;10668:119;;;10706:79;;:::i;:::-;10668:119;10854:1;10843:9;10839:17;10826:31;10884:18;10876:6;10873:30;10870:117;;;10906:79;;:::i;:::-;10870:117;11011:78;11081:7;11072:6;11061:9;11057:22;11011:78;:::i;:::-;11001:88;;10797:302;11166:2;11155:9;11151:18;11138:32;11197:18;11189:6;11186:30;11183:117;;;11219:79;;:::i;:::-;11183:117;11324:78;11394:7;11385:6;11374:9;11370:22;11324:78;:::i;:::-;11314:88;;11109:303;10525:894;;;;;:::o;11425:329::-;11484:6;11533:2;11521:9;11512:7;11508:23;11504:32;11501:119;;;11539:79;;:::i;:::-;11501:119;11659:1;11684:53;11729:7;11720:6;11709:9;11705:22;11684:53;:::i;:::-;11674:63;;11630:117;11425:329;;;;:::o;11760:327::-;11818:6;11867:2;11855:9;11846:7;11842:23;11838:32;11835:119;;;11873:79;;:::i;:::-;11835:119;11993:1;12018:52;12062:7;12053:6;12042:9;12038:22;12018:52;:::i;:::-;12008:62;;11964:116;11760:327;;;;:::o;12093:349::-;12162:6;12211:2;12199:9;12190:7;12186:23;12182:32;12179:119;;;12217:79;;:::i;:::-;12179:119;12337:1;12362:63;12417:7;12408:6;12397:9;12393:22;12362:63;:::i;:::-;12352:73;;12308:127;12093:349;;;;:::o;12448:409::-;12547:6;12596:2;12584:9;12575:7;12571:23;12567:32;12564:119;;;12602:79;;:::i;:::-;12564:119;12722:1;12747:93;12832:7;12823:6;12812:9;12808:22;12747:93;:::i;:::-;12737:103;;12693:157;12448:409;;;;:::o;12863:529::-;12934:6;12942;12991:2;12979:9;12970:7;12966:23;12962:32;12959:119;;;12997:79;;:::i;:::-;12959:119;13145:1;13134:9;13130:17;13117:31;13175:18;13167:6;13164:30;13161:117;;;13197:79;;:::i;:::-;13161:117;13310:65;13367:7;13358:6;13347:9;13343:22;13310:65;:::i;:::-;13292:83;;;;13088:297;12863:529;;;;;:::o;13398:329::-;13457:6;13506:2;13494:9;13485:7;13481:23;13477:32;13474:119;;;13512:79;;:::i;:::-;13474:119;13632:1;13657:53;13702:7;13693:6;13682:9;13678:22;13657:53;:::i;:::-;13647:63;;13603:117;13398:329;;;;:::o;13733:474::-;13801:6;13809;13858:2;13846:9;13837:7;13833:23;13829:32;13826:119;;;13864:79;;:::i;:::-;13826:119;13984:1;14009:53;14054:7;14045:6;14034:9;14030:22;14009:53;:::i;:::-;13999:63;;13955:117;14111:2;14137:53;14182:7;14173:6;14162:9;14158:22;14137:53;:::i;:::-;14127:63;;14082:118;13733:474;;;;;:::o;14213:995::-;14326:6;14334;14342;14350;14358;14407:3;14395:9;14386:7;14382:23;14378:33;14375:120;;;14414:79;;:::i;:::-;14375:120;14534:1;14559:53;14604:7;14595:6;14584:9;14580:22;14559:53;:::i;:::-;14549:63;;14505:117;14661:2;14687:53;14732:7;14723:6;14712:9;14708:22;14687:53;:::i;:::-;14677:63;;14632:118;14789:2;14815:53;14860:7;14851:6;14840:9;14836:22;14815:53;:::i;:::-;14805:63;;14760:118;14945:2;14934:9;14930:18;14917:32;14976:18;14968:6;14965:30;14962:117;;;14998:79;;:::i;:::-;14962:117;15111:80;15183:7;15174:6;15163:9;15159:22;15111:80;:::i;:::-;15093:98;;;;14888:313;14213:995;;;;;;;;:::o;15214:179::-;15283:10;15304:46;15346:3;15338:6;15304:46;:::i;:::-;15382:4;15377:3;15373:14;15359:28;;15214:179;;;;:::o;15399:118::-;15486:24;15504:5;15486:24;:::i;:::-;15481:3;15474:37;15399:118;;:::o;15523:157::-;15628:45;15648:24;15666:5;15648:24;:::i;:::-;15628:45;:::i;:::-;15623:3;15616:58;15523:157;;:::o;15716:732::-;15835:3;15864:54;15912:5;15864:54;:::i;:::-;15934:86;16013:6;16008:3;15934:86;:::i;:::-;15927:93;;16044:56;16094:5;16044:56;:::i;:::-;16123:7;16154:1;16139:284;16164:6;16161:1;16158:13;16139:284;;;16240:6;16234:13;16267:63;16326:3;16311:13;16267:63;:::i;:::-;16260:70;;16353:60;16406:6;16353:60;:::i;:::-;16343:70;;16199:224;16186:1;16183;16179:9;16174:14;;16139:284;;;16143:14;16439:3;16432:10;;15840:608;;;15716:732;;;;:::o;16454:109::-;16535:21;16550:5;16535:21;:::i;:::-;16530:3;16523:34;16454:109;;:::o;16569:118::-;16656:24;16674:5;16656:24;:::i;:::-;16651:3;16644:37;16569:118;;:::o;16693:157::-;16798:45;16818:24;16836:5;16818:24;:::i;:::-;16798:45;:::i;:::-;16793:3;16786:58;16693:157;;:::o;16856:360::-;16942:3;16970:38;17002:5;16970:38;:::i;:::-;17024:70;17087:6;17082:3;17024:70;:::i;:::-;17017:77;;17103:52;17148:6;17143:3;17136:4;17129:5;17125:16;17103:52;:::i;:::-;17180:29;17202:6;17180:29;:::i;:::-;17175:3;17171:39;17164:46;;16946:270;16856:360;;;;:::o;17222:364::-;17310:3;17338:39;17371:5;17338:39;:::i;:::-;17393:71;17457:6;17452:3;17393:71;:::i;:::-;17386:78;;17473:52;17518:6;17513:3;17506:4;17499:5;17495:16;17473:52;:::i;:::-;17550:29;17572:6;17550:29;:::i;:::-;17545:3;17541:39;17534:46;;17314:272;17222:364;;;;:::o;17592:366::-;17734:3;17755:67;17819:2;17814:3;17755:67;:::i;:::-;17748:74;;17831:93;17920:3;17831:93;:::i;:::-;17949:2;17944:3;17940:12;17933:19;;17592:366;;;:::o;17964:::-;18106:3;18127:67;18191:2;18186:3;18127:67;:::i;:::-;18120:74;;18203:93;18292:3;18203:93;:::i;:::-;18321:2;18316:3;18312:12;18305:19;;17964:366;;;:::o;18336:::-;18478:3;18499:67;18563:2;18558:3;18499:67;:::i;:::-;18492:74;;18575:93;18664:3;18575:93;:::i;:::-;18693:2;18688:3;18684:12;18677:19;;18336:366;;;:::o;18708:::-;18850:3;18871:67;18935:2;18930:3;18871:67;:::i;:::-;18864:74;;18947:93;19036:3;18947:93;:::i;:::-;19065:2;19060:3;19056:12;19049:19;;18708:366;;;:::o;19080:::-;19222:3;19243:67;19307:2;19302:3;19243:67;:::i;:::-;19236:74;;19319:93;19408:3;19319:93;:::i;:::-;19437:2;19432:3;19428:12;19421:19;;19080:366;;;:::o;19452:::-;19594:3;19615:67;19679:2;19674:3;19615:67;:::i;:::-;19608:74;;19691:93;19780:3;19691:93;:::i;:::-;19809:2;19804:3;19800:12;19793:19;;19452:366;;;:::o;19824:::-;19966:3;19987:67;20051:2;20046:3;19987:67;:::i;:::-;19980:74;;20063:93;20152:3;20063:93;:::i;:::-;20181:2;20176:3;20172:12;20165:19;;19824:366;;;:::o;20196:::-;20338:3;20359:67;20423:2;20418:3;20359:67;:::i;:::-;20352:74;;20435:93;20524:3;20435:93;:::i;:::-;20553:2;20548:3;20544:12;20537:19;;20196:366;;;:::o;20568:::-;20710:3;20731:67;20795:2;20790:3;20731:67;:::i;:::-;20724:74;;20807:93;20896:3;20807:93;:::i;:::-;20925:2;20920:3;20916:12;20909:19;;20568:366;;;:::o;20940:::-;21082:3;21103:67;21167:2;21162:3;21103:67;:::i;:::-;21096:74;;21179:93;21268:3;21179:93;:::i;:::-;21297:2;21292:3;21288:12;21281:19;;20940:366;;;:::o;21312:::-;21454:3;21475:67;21539:2;21534:3;21475:67;:::i;:::-;21468:74;;21551:93;21640:3;21551:93;:::i;:::-;21669:2;21664:3;21660:12;21653:19;;21312:366;;;:::o;21684:::-;21826:3;21847:67;21911:2;21906:3;21847:67;:::i;:::-;21840:74;;21923:93;22012:3;21923:93;:::i;:::-;22041:2;22036:3;22032:12;22025:19;;21684:366;;;:::o;22056:::-;22198:3;22219:67;22283:2;22278:3;22219:67;:::i;:::-;22212:74;;22295:93;22384:3;22295:93;:::i;:::-;22413:2;22408:3;22404:12;22397:19;;22056:366;;;:::o;22428:::-;22570:3;22591:67;22655:2;22650:3;22591:67;:::i;:::-;22584:74;;22667:93;22756:3;22667:93;:::i;:::-;22785:2;22780:3;22776:12;22769:19;;22428:366;;;:::o;22800:::-;22942:3;22963:67;23027:2;23022:3;22963:67;:::i;:::-;22956:74;;23039:93;23128:3;23039:93;:::i;:::-;23157:2;23152:3;23148:12;23141:19;;22800:366;;;:::o;23172:::-;23314:3;23335:67;23399:2;23394:3;23335:67;:::i;:::-;23328:74;;23411:93;23500:3;23411:93;:::i;:::-;23529:2;23524:3;23520:12;23513:19;;23172:366;;;:::o;23544:::-;23686:3;23707:67;23771:2;23766:3;23707:67;:::i;:::-;23700:74;;23783:93;23872:3;23783:93;:::i;:::-;23901:2;23896:3;23892:12;23885:19;;23544:366;;;:::o;23916:::-;24058:3;24079:67;24143:2;24138:3;24079:67;:::i;:::-;24072:74;;24155:93;24244:3;24155:93;:::i;:::-;24273:2;24268:3;24264:12;24257:19;;23916:366;;;:::o;24288:::-;24430:3;24451:67;24515:2;24510:3;24451:67;:::i;:::-;24444:74;;24527:93;24616:3;24527:93;:::i;:::-;24645:2;24640:3;24636:12;24629:19;;24288:366;;;:::o;24660:::-;24802:3;24823:67;24887:2;24882:3;24823:67;:::i;:::-;24816:74;;24899:93;24988:3;24899:93;:::i;:::-;25017:2;25012:3;25008:12;25001:19;;24660:366;;;:::o;25032:::-;25174:3;25195:67;25259:2;25254:3;25195:67;:::i;:::-;25188:74;;25271:93;25360:3;25271:93;:::i;:::-;25389:2;25384:3;25380:12;25373:19;;25032:366;;;:::o;25404:::-;25546:3;25567:67;25631:2;25626:3;25567:67;:::i;:::-;25560:74;;25643:93;25732:3;25643:93;:::i;:::-;25761:2;25756:3;25752:12;25745:19;;25404:366;;;:::o;25776:::-;25918:3;25939:67;26003:2;25998:3;25939:67;:::i;:::-;25932:74;;26015:93;26104:3;26015:93;:::i;:::-;26133:2;26128:3;26124:12;26117:19;;25776:366;;;:::o;26148:::-;26290:3;26311:67;26375:2;26370:3;26311:67;:::i;:::-;26304:74;;26387:93;26476:3;26387:93;:::i;:::-;26505:2;26500:3;26496:12;26489:19;;26148:366;;;:::o;26520:::-;26662:3;26683:67;26747:2;26742:3;26683:67;:::i;:::-;26676:74;;26759:93;26848:3;26759:93;:::i;:::-;26877:2;26872:3;26868:12;26861:19;;26520:366;;;:::o;26892:::-;27034:3;27055:67;27119:2;27114:3;27055:67;:::i;:::-;27048:74;;27131:93;27220:3;27131:93;:::i;:::-;27249:2;27244:3;27240:12;27233:19;;26892:366;;;:::o;27264:::-;27406:3;27427:67;27491:2;27486:3;27427:67;:::i;:::-;27420:74;;27503:93;27592:3;27503:93;:::i;:::-;27621:2;27616:3;27612:12;27605:19;;27264:366;;;:::o;27636:::-;27778:3;27799:67;27863:2;27858:3;27799:67;:::i;:::-;27792:74;;27875:93;27964:3;27875:93;:::i;:::-;27993:2;27988:3;27984:12;27977:19;;27636:366;;;:::o;28008:::-;28150:3;28171:67;28235:2;28230:3;28171:67;:::i;:::-;28164:74;;28247:93;28336:3;28247:93;:::i;:::-;28365:2;28360:3;28356:12;28349:19;;28008:366;;;:::o;28380:::-;28522:3;28543:67;28607:2;28602:3;28543:67;:::i;:::-;28536:74;;28619:93;28708:3;28619:93;:::i;:::-;28737:2;28732:3;28728:12;28721:19;;28380:366;;;:::o;28752:108::-;28829:24;28847:5;28829:24;:::i;:::-;28824:3;28817:37;28752:108;;:::o;28866:118::-;28953:24;28971:5;28953:24;:::i;:::-;28948:3;28941:37;28866:118;;:::o;28990:256::-;29102:3;29117:75;29188:3;29179:6;29117:75;:::i;:::-;29217:2;29212:3;29208:12;29201:19;;29237:3;29230:10;;28990:256;;;;:::o;29252:397::-;29392:3;29407:75;29478:3;29469:6;29407:75;:::i;:::-;29507:2;29502:3;29498:12;29491:19;;29520:75;29591:3;29582:6;29520:75;:::i;:::-;29620:2;29615:3;29611:12;29604:19;;29640:3;29633:10;;29252:397;;;;;:::o;29655:222::-;29748:4;29786:2;29775:9;29771:18;29763:26;;29799:71;29867:1;29856:9;29852:17;29843:6;29799:71;:::i;:::-;29655:222;;;;:::o;29883:1053::-;30206:4;30244:3;30233:9;30229:19;30221:27;;30258:71;30326:1;30315:9;30311:17;30302:6;30258:71;:::i;:::-;30339:72;30407:2;30396:9;30392:18;30383:6;30339:72;:::i;:::-;30458:9;30452:4;30448:20;30443:2;30432:9;30428:18;30421:48;30486:108;30589:4;30580:6;30486:108;:::i;:::-;30478:116;;30641:9;30635:4;30631:20;30626:2;30615:9;30611:18;30604:48;30669:108;30772:4;30763:6;30669:108;:::i;:::-;30661:116;;30825:9;30819:4;30815:20;30809:3;30798:9;30794:19;30787:49;30853:76;30924:4;30915:6;30853:76;:::i;:::-;30845:84;;29883:1053;;;;;;;;:::o;30942:751::-;31165:4;31203:3;31192:9;31188:19;31180:27;;31217:71;31285:1;31274:9;31270:17;31261:6;31217:71;:::i;:::-;31298:72;31366:2;31355:9;31351:18;31342:6;31298:72;:::i;:::-;31380;31448:2;31437:9;31433:18;31424:6;31380:72;:::i;:::-;31462;31530:2;31519:9;31515:18;31506:6;31462:72;:::i;:::-;31582:9;31576:4;31572:20;31566:3;31555:9;31551:19;31544:49;31610:76;31681:4;31672:6;31610:76;:::i;:::-;31602:84;;30942:751;;;;;;;;:::o;31699:373::-;31842:4;31880:2;31869:9;31865:18;31857:26;;31929:9;31923:4;31919:20;31915:1;31904:9;31900:17;31893:47;31957:108;32060:4;32051:6;31957:108;:::i;:::-;31949:116;;31699:373;;;;:::o;32078:634::-;32299:4;32337:2;32326:9;32322:18;32314:26;;32386:9;32380:4;32376:20;32372:1;32361:9;32357:17;32350:47;32414:108;32517:4;32508:6;32414:108;:::i;:::-;32406:116;;32569:9;32563:4;32559:20;32554:2;32543:9;32539:18;32532:48;32597:108;32700:4;32691:6;32597:108;:::i;:::-;32589:116;;32078:634;;;;;:::o;32718:210::-;32805:4;32843:2;32832:9;32828:18;32820:26;;32856:65;32918:1;32907:9;32903:17;32894:6;32856:65;:::i;:::-;32718:210;;;;:::o;32934:222::-;33027:4;33065:2;33054:9;33050:18;33042:26;;33078:71;33146:1;33135:9;33131:17;33122:6;33078:71;:::i;:::-;32934:222;;;;:::o;33162:313::-;33275:4;33313:2;33302:9;33298:18;33290:26;;33362:9;33356:4;33352:20;33348:1;33337:9;33333:17;33326:47;33390:78;33463:4;33454:6;33390:78;:::i;:::-;33382:86;;33162:313;;;;:::o;33481:419::-;33647:4;33685:2;33674:9;33670:18;33662:26;;33734:9;33728:4;33724:20;33720:1;33709:9;33705:17;33698:47;33762:131;33888:4;33762:131;:::i;:::-;33754:139;;33481:419;;;:::o;33906:::-;34072:4;34110:2;34099:9;34095:18;34087:26;;34159:9;34153:4;34149:20;34145:1;34134:9;34130:17;34123:47;34187:131;34313:4;34187:131;:::i;:::-;34179:139;;33906:419;;;:::o;34331:::-;34497:4;34535:2;34524:9;34520:18;34512:26;;34584:9;34578:4;34574:20;34570:1;34559:9;34555:17;34548:47;34612:131;34738:4;34612:131;:::i;:::-;34604:139;;34331:419;;;:::o;34756:::-;34922:4;34960:2;34949:9;34945:18;34937:26;;35009:9;35003:4;34999:20;34995:1;34984:9;34980:17;34973:47;35037:131;35163:4;35037:131;:::i;:::-;35029:139;;34756:419;;;:::o;35181:::-;35347:4;35385:2;35374:9;35370:18;35362:26;;35434:9;35428:4;35424:20;35420:1;35409:9;35405:17;35398:47;35462:131;35588:4;35462:131;:::i;:::-;35454:139;;35181:419;;;:::o;35606:::-;35772:4;35810:2;35799:9;35795:18;35787:26;;35859:9;35853:4;35849:20;35845:1;35834:9;35830:17;35823:47;35887:131;36013:4;35887:131;:::i;:::-;35879:139;;35606:419;;;:::o;36031:::-;36197:4;36235:2;36224:9;36220:18;36212:26;;36284:9;36278:4;36274:20;36270:1;36259:9;36255:17;36248:47;36312:131;36438:4;36312:131;:::i;:::-;36304:139;;36031:419;;;:::o;36456:::-;36622:4;36660:2;36649:9;36645:18;36637:26;;36709:9;36703:4;36699:20;36695:1;36684:9;36680:17;36673:47;36737:131;36863:4;36737:131;:::i;:::-;36729:139;;36456:419;;;:::o;36881:::-;37047:4;37085:2;37074:9;37070:18;37062:26;;37134:9;37128:4;37124:20;37120:1;37109:9;37105:17;37098:47;37162:131;37288:4;37162:131;:::i;:::-;37154:139;;36881:419;;;:::o;37306:::-;37472:4;37510:2;37499:9;37495:18;37487:26;;37559:9;37553:4;37549:20;37545:1;37534:9;37530:17;37523:47;37587:131;37713:4;37587:131;:::i;:::-;37579:139;;37306:419;;;:::o;37731:::-;37897:4;37935:2;37924:9;37920:18;37912:26;;37984:9;37978:4;37974:20;37970:1;37959:9;37955:17;37948:47;38012:131;38138:4;38012:131;:::i;:::-;38004:139;;37731:419;;;:::o;38156:::-;38322:4;38360:2;38349:9;38345:18;38337:26;;38409:9;38403:4;38399:20;38395:1;38384:9;38380:17;38373:47;38437:131;38563:4;38437:131;:::i;:::-;38429:139;;38156:419;;;:::o;38581:::-;38747:4;38785:2;38774:9;38770:18;38762:26;;38834:9;38828:4;38824:20;38820:1;38809:9;38805:17;38798:47;38862:131;38988:4;38862:131;:::i;:::-;38854:139;;38581:419;;;:::o;39006:::-;39172:4;39210:2;39199:9;39195:18;39187:26;;39259:9;39253:4;39249:20;39245:1;39234:9;39230:17;39223:47;39287:131;39413:4;39287:131;:::i;:::-;39279:139;;39006:419;;;:::o;39431:::-;39597:4;39635:2;39624:9;39620:18;39612:26;;39684:9;39678:4;39674:20;39670:1;39659:9;39655:17;39648:47;39712:131;39838:4;39712:131;:::i;:::-;39704:139;;39431:419;;;:::o;39856:::-;40022:4;40060:2;40049:9;40045:18;40037:26;;40109:9;40103:4;40099:20;40095:1;40084:9;40080:17;40073:47;40137:131;40263:4;40137:131;:::i;:::-;40129:139;;39856:419;;;:::o;40281:::-;40447:4;40485:2;40474:9;40470:18;40462:26;;40534:9;40528:4;40524:20;40520:1;40509:9;40505:17;40498:47;40562:131;40688:4;40562:131;:::i;:::-;40554:139;;40281:419;;;:::o;40706:::-;40872:4;40910:2;40899:9;40895:18;40887:26;;40959:9;40953:4;40949:20;40945:1;40934:9;40930:17;40923:47;40987:131;41113:4;40987:131;:::i;:::-;40979:139;;40706:419;;;:::o;41131:::-;41297:4;41335:2;41324:9;41320:18;41312:26;;41384:9;41378:4;41374:20;41370:1;41359:9;41355:17;41348:47;41412:131;41538:4;41412:131;:::i;:::-;41404:139;;41131:419;;;:::o;41556:::-;41722:4;41760:2;41749:9;41745:18;41737:26;;41809:9;41803:4;41799:20;41795:1;41784:9;41780:17;41773:47;41837:131;41963:4;41837:131;:::i;:::-;41829:139;;41556:419;;;:::o;41981:::-;42147:4;42185:2;42174:9;42170:18;42162:26;;42234:9;42228:4;42224:20;42220:1;42209:9;42205:17;42198:47;42262:131;42388:4;42262:131;:::i;:::-;42254:139;;41981:419;;;:::o;42406:::-;42572:4;42610:2;42599:9;42595:18;42587:26;;42659:9;42653:4;42649:20;42645:1;42634:9;42630:17;42623:47;42687:131;42813:4;42687:131;:::i;:::-;42679:139;;42406:419;;;:::o;42831:::-;42997:4;43035:2;43024:9;43020:18;43012:26;;43084:9;43078:4;43074:20;43070:1;43059:9;43055:17;43048:47;43112:131;43238:4;43112:131;:::i;:::-;43104:139;;42831:419;;;:::o;43256:::-;43422:4;43460:2;43449:9;43445:18;43437:26;;43509:9;43503:4;43499:20;43495:1;43484:9;43480:17;43473:47;43537:131;43663:4;43537:131;:::i;:::-;43529:139;;43256:419;;;:::o;43681:::-;43847:4;43885:2;43874:9;43870:18;43862:26;;43934:9;43928:4;43924:20;43920:1;43909:9;43905:17;43898:47;43962:131;44088:4;43962:131;:::i;:::-;43954:139;;43681:419;;;:::o;44106:::-;44272:4;44310:2;44299:9;44295:18;44287:26;;44359:9;44353:4;44349:20;44345:1;44334:9;44330:17;44323:47;44387:131;44513:4;44387:131;:::i;:::-;44379:139;;44106:419;;;:::o;44531:::-;44697:4;44735:2;44724:9;44720:18;44712:26;;44784:9;44778:4;44774:20;44770:1;44759:9;44755:17;44748:47;44812:131;44938:4;44812:131;:::i;:::-;44804:139;;44531:419;;;:::o;44956:::-;45122:4;45160:2;45149:9;45145:18;45137:26;;45209:9;45203:4;45199:20;45195:1;45184:9;45180:17;45173:47;45237:131;45363:4;45237:131;:::i;:::-;45229:139;;44956:419;;;:::o;45381:::-;45547:4;45585:2;45574:9;45570:18;45562:26;;45634:9;45628:4;45624:20;45620:1;45609:9;45605:17;45598:47;45662:131;45788:4;45662:131;:::i;:::-;45654:139;;45381:419;;;:::o;45806:::-;45972:4;46010:2;45999:9;45995:18;45987:26;;46059:9;46053:4;46049:20;46045:1;46034:9;46030:17;46023:47;46087:131;46213:4;46087:131;:::i;:::-;46079:139;;45806:419;;;:::o;46231:222::-;46324:4;46362:2;46351:9;46347:18;46339:26;;46375:71;46443:1;46432:9;46428:17;46419:6;46375:71;:::i;:::-;46231:222;;;;:::o;46459:332::-;46580:4;46618:2;46607:9;46603:18;46595:26;;46631:71;46699:1;46688:9;46684:17;46675:6;46631:71;:::i;:::-;46712:72;46780:2;46769:9;46765:18;46756:6;46712:72;:::i;:::-;46459:332;;;;;:::o;46797:129::-;46831:6;46858:20;;:::i;:::-;46848:30;;46887:33;46915:4;46907:6;46887:33;:::i;:::-;46797:129;;;:::o;46932:75::-;46965:6;46998:2;46992:9;46982:19;;46932:75;:::o;47013:311::-;47090:4;47180:18;47172:6;47169:30;47166:56;;;47202:18;;:::i;:::-;47166:56;47252:4;47244:6;47240:17;47232:25;;47312:4;47306;47302:15;47294:23;;47013:311;;;:::o;47330:::-;47407:4;47497:18;47489:6;47486:30;47483:56;;;47519:18;;:::i;:::-;47483:56;47569:4;47561:6;47557:17;47549:25;;47629:4;47623;47619:15;47611:23;;47330:311;;;:::o;47647:307::-;47708:4;47798:18;47790:6;47787:30;47784:56;;;47820:18;;:::i;:::-;47784:56;47858:29;47880:6;47858:29;:::i;:::-;47850:37;;47942:4;47936;47932:15;47924:23;;47647:307;;;:::o;47960:132::-;48027:4;48050:3;48042:11;;48080:4;48075:3;48071:14;48063:22;;47960:132;;;:::o;48098:114::-;48165:6;48199:5;48193:12;48183:22;;48098:114;;;:::o;48218:98::-;48269:6;48303:5;48297:12;48287:22;;48218:98;;;:::o;48322:99::-;48374:6;48408:5;48402:12;48392:22;;48322:99;;;:::o;48427:113::-;48497:4;48529;48524:3;48520:14;48512:22;;48427:113;;;:::o;48546:184::-;48645:11;48679:6;48674:3;48667:19;48719:4;48714:3;48710:14;48695:29;;48546:184;;;;:::o;48736:168::-;48819:11;48853:6;48848:3;48841:19;48893:4;48888:3;48884:14;48869:29;;48736:168;;;;:::o;48910:169::-;48994:11;49028:6;49023:3;49016:19;49068:4;49063:3;49059:14;49044:29;;48910:169;;;;:::o;49085:305::-;49125:3;49144:20;49162:1;49144:20;:::i;:::-;49139:25;;49178:20;49196:1;49178:20;:::i;:::-;49173:25;;49332:1;49264:66;49260:74;49257:1;49254:81;49251:107;;;49338:18;;:::i;:::-;49251:107;49382:1;49379;49375:9;49368:16;;49085:305;;;;:::o;49396:348::-;49436:7;49459:20;49477:1;49459:20;:::i;:::-;49454:25;;49493:20;49511:1;49493:20;:::i;:::-;49488:25;;49681:1;49613:66;49609:74;49606:1;49603:81;49598:1;49591:9;49584:17;49580:105;49577:131;;;49688:18;;:::i;:::-;49577:131;49736:1;49733;49729:9;49718:20;;49396:348;;;;:::o;49750:96::-;49787:7;49816:24;49834:5;49816:24;:::i;:::-;49805:35;;49750:96;;;:::o;49852:90::-;49886:7;49929:5;49922:13;49915:21;49904:32;;49852:90;;;:::o;49948:77::-;49985:7;50014:5;50003:16;;49948:77;;;:::o;50031:149::-;50067:7;50107:66;50100:5;50096:78;50085:89;;50031:149;;;:::o;50186:125::-;50252:7;50281:24;50299:5;50281:24;:::i;:::-;50270:35;;50186:125;;;:::o;50317:126::-;50354:7;50394:42;50387:5;50383:54;50372:65;;50317:126;;;:::o;50449:77::-;50486:7;50515:5;50504:16;;50449:77;;;:::o;50532:154::-;50616:6;50611:3;50606;50593:30;50678:1;50669:6;50664:3;50660:16;50653:27;50532:154;;;:::o;50692:307::-;50760:1;50770:113;50784:6;50781:1;50778:13;50770:113;;;50869:1;50864:3;50860:11;50854:18;50850:1;50845:3;50841:11;50834:39;50806:2;50803:1;50799:10;50794:15;;50770:113;;;50901:6;50898:1;50895:13;50892:101;;;50981:1;50972:6;50967:3;50963:16;50956:27;50892:101;50741:258;50692:307;;;:::o;51005:320::-;51049:6;51086:1;51080:4;51076:12;51066:22;;51133:1;51127:4;51123:12;51154:18;51144:81;;51210:4;51202:6;51198:17;51188:27;;51144:81;51272:2;51264:6;51261:14;51241:18;51238:38;51235:84;;;51291:18;;:::i;:::-;51235:84;51056:269;51005:320;;;:::o;51331:281::-;51414:27;51436:4;51414:27;:::i;:::-;51406:6;51402:40;51544:6;51532:10;51529:22;51508:18;51496:10;51493:34;51490:62;51487:88;;;51555:18;;:::i;:::-;51487:88;51595:10;51591:2;51584:22;51374:238;51331:281;;:::o;51618:233::-;51657:3;51680:24;51698:5;51680:24;:::i;:::-;51671:33;;51726:66;51719:5;51716:77;51713:103;;;51796:18;;:::i;:::-;51713:103;51843:1;51836:5;51832:13;51825:20;;51618:233;;;:::o;51857:100::-;51896:7;51925:26;51945:5;51925:26;:::i;:::-;51914:37;;51857:100;;;:::o;51963:79::-;52002:7;52031:5;52020:16;;51963:79;;;:::o;52048:94::-;52087:7;52116:20;52130:5;52116:20;:::i;:::-;52105:31;;52048:94;;;:::o;52148:180::-;52196:77;52193:1;52186:88;52293:4;52290:1;52283:15;52317:4;52314:1;52307:15;52334:180;52382:77;52379:1;52372:88;52479:4;52476:1;52469:15;52503:4;52500:1;52493:15;52520:180;52568:77;52565:1;52558:88;52665:4;52662:1;52655:15;52689:4;52686:1;52679:15;52706:180;52754:77;52751:1;52744:88;52851:4;52848:1;52841:15;52875:4;52872:1;52865:15;52892:183;52927:3;52965:1;52947:16;52944:23;52941:128;;;53003:1;53000;52997;52982:23;53025:34;53056:1;53050:8;53025:34;:::i;:::-;53018:41;;52941:128;52892:183;:::o;53081:117::-;53190:1;53187;53180:12;53204:117;53313:1;53310;53303:12;53327:117;53436:1;53433;53426:12;53450:117;53559:1;53556;53549:12;53573:117;53682:1;53679;53672:12;53696:117;53805:1;53802;53795:12;53819:102;53860:6;53911:2;53907:7;53902:2;53895:5;53891:14;53887:28;53877:38;;53819:102;;;:::o;53927:94::-;53960:8;54008:5;54004:2;54000:14;53979:35;;53927:94;;;:::o;54027:106::-;54071:8;54120:5;54115:3;54111:15;54090:36;;54027:106;;;:::o;54139:239::-;54279:34;54275:1;54267:6;54263:14;54256:58;54348:22;54343:2;54335:6;54331:15;54324:47;54139:239;:::o;54384:227::-;54524:34;54520:1;54512:6;54508:14;54501:58;54593:10;54588:2;54580:6;54576:15;54569:35;54384:227;:::o;54617:171::-;54757:23;54753:1;54745:6;54741:14;54734:47;54617:171;:::o;54794:230::-;54934:34;54930:1;54922:6;54918:14;54911:58;55003:13;54998:2;54990:6;54986:15;54979:38;54794:230;:::o;55030:225::-;55170:34;55166:1;55158:6;55154:14;55147:58;55239:8;55234:2;55226:6;55222:15;55215:33;55030:225;:::o;55261:166::-;55401:18;55397:1;55389:6;55385:14;55378:42;55261:166;:::o;55433:174::-;55573:26;55569:1;55561:6;55557:14;55550:50;55433:174;:::o;55613:228::-;55753:34;55749:1;55741:6;55737:14;55730:58;55822:11;55817:2;55809:6;55805:15;55798:36;55613:228;:::o;55847:167::-;55987:19;55983:1;55975:6;55971:14;55964:43;55847:167;:::o;56020:224::-;56160:34;56156:1;56148:6;56144:14;56137:58;56229:7;56224:2;56216:6;56212:15;56205:32;56020:224;:::o;56250:237::-;56390:34;56386:1;56378:6;56374:14;56367:58;56459:20;56454:2;56446:6;56442:15;56435:45;56250:237;:::o;56493:248::-;56633:34;56629:1;56621:6;56617:14;56610:58;56702:31;56697:2;56689:6;56685:15;56678:56;56493:248;:::o;56747:225::-;56887:34;56883:1;56875:6;56871:14;56864:58;56956:8;56951:2;56943:6;56939:15;56932:33;56747:225;:::o;56978:173::-;57118:25;57114:1;57106:6;57102:14;57095:49;56978:173;:::o;57157:237::-;57297:34;57293:1;57285:6;57281:14;57274:58;57366:20;57361:2;57353:6;57349:15;57342:45;57157:237;:::o;57400:229::-;57540:34;57536:1;57528:6;57524:14;57517:58;57609:12;57604:2;57596:6;57592:15;57585:37;57400:229;:::o;57635:181::-;57775:33;57771:1;57763:6;57759:14;57752:57;57635:181;:::o;57822:163::-;57962:15;57958:1;57950:6;57946:14;57939:39;57822:163;:::o;57991:182::-;58131:34;58127:1;58119:6;58115:14;58108:58;57991:182;:::o;58179:236::-;58319:34;58315:1;58307:6;58303:14;58296:58;58388:19;58383:2;58375:6;58371:15;58364:44;58179:236;:::o;58421:223::-;58561:34;58557:1;58549:6;58545:14;58538:58;58630:6;58625:2;58617:6;58613:15;58606:31;58421:223;:::o;58650:237::-;58790:34;58786:1;58778:6;58774:14;58767:58;58859:20;58854:2;58846:6;58842:15;58835:45;58650:237;:::o;58893:224::-;59033:34;59029:1;59021:6;59017:14;59010:58;59102:7;59097:2;59089:6;59085:15;59078:32;58893:224;:::o;59123:166::-;59263:18;59259:1;59251:6;59247:14;59240:42;59123:166;:::o;59295:224::-;59435:34;59431:1;59423:6;59419:14;59412:58;59504:7;59499:2;59491:6;59487:15;59480:32;59295:224;:::o;59525:228::-;59665:34;59661:1;59653:6;59649:14;59642:58;59734:11;59729:2;59721:6;59717:15;59710:36;59525:228;:::o;59759:::-;59899:34;59895:1;59887:6;59883:14;59876:58;59968:11;59963:2;59955:6;59951:15;59944:36;59759:228;:::o;59993:227::-;60133:34;60129:1;60121:6;60117:14;60110:58;60202:10;60197:2;60189:6;60185:15;60178:35;59993:227;:::o;60226:225::-;60366:34;60362:1;60354:6;60350:14;60343:58;60435:8;60430:2;60422:6;60418:15;60411:33;60226:225;:::o;60457:220::-;60597:34;60593:1;60585:6;60581:14;60574:58;60666:3;60661:2;60653:6;60649:15;60642:28;60457:220;:::o;60683:711::-;60722:3;60760:4;60742:16;60739:26;60736:39;;;60768:5;;60736:39;60797:20;;:::i;:::-;60872:1;60854:16;60850:24;60847:1;60841:4;60826:49;60905:4;60899:11;61004:16;60997:4;60989:6;60985:17;60982:39;60949:18;60941:6;60938:30;60922:113;60919:146;;;61050:5;;;;60919:146;61096:6;61090:4;61086:17;61132:3;61126:10;61159:18;61151:6;61148:30;61145:43;;;61181:5;;;;;;61145:43;61229:6;61222:4;61217:3;61213:14;61209:27;61288:1;61270:16;61266:24;61260:4;61256:35;61251:3;61248:44;61245:57;;;61295:5;;;;;;;61245:57;61312;61360:6;61354:4;61350:17;61342:6;61338:30;61332:4;61312:57;:::i;:::-;61385:3;61378:10;;60726:668;;;;;60683:711;;:::o;61400:122::-;61473:24;61491:5;61473:24;:::i;:::-;61466:5;61463:35;61453:63;;61512:1;61509;61502:12;61453:63;61400:122;:::o;61528:116::-;61598:21;61613:5;61598:21;:::i;:::-;61591:5;61588:32;61578:60;;61634:1;61631;61624:12;61578:60;61528:116;:::o;61650:122::-;61723:24;61741:5;61723:24;:::i;:::-;61716:5;61713:35;61703:63;;61762:1;61759;61752:12;61703:63;61650:122;:::o;61778:120::-;61850:23;61867:5;61850:23;:::i;:::-;61843:5;61840:34;61830:62;;61888:1;61885;61878:12;61830:62;61778:120;:::o;61904:180::-;62006:53;62053:5;62006:53;:::i;:::-;61999:5;61996:64;61986:92;;62074:1;62071;62064:12;61986:92;61904:180;:::o;62090:122::-;62163:24;62181:5;62163:24;:::i;:::-;62156:5;62153:35;62143:63;;62202:1;62199;62192:12;62143:63;62090:122;:::o

Swarm Source

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