ETH Price: $3,107.15 (+0.29%)
Gas: 3 Gwei

Token

Mr. Everybody Possessions Collection (MEP)
 

Overview

Max Total Supply

395 MEP

Holders

165

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
1 MEP
0xd5f0b573051f40977ac6574e2c16ef2f01d59af0
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:
MEV2

Compiler Version
v0.8.3+commit.8d00100c

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-12-22
*/

/**
 *Submitted for verification at Etherscan.io on 2021-11-13
*/

pragma solidity ^0.8.0;

/**
 * @title Counters
 * @author Matt Condon (@shrugs)
 * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number
 * of elements in a mapping, issuing ERC721 ids, or counting request ids.
 *
 * Include with `using Counters for Counters.Counter;`
 */
library Counters {
    struct Counter {
        // This variable should never be directly accessed by users of the library: interactions must be restricted to
        // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add
        // this feature: see https://github.com/ethereum/solidity/issues/4637
        uint256 _value; // default: 0
    }

    function current(Counter storage counter) internal view returns (uint256) {
        return counter._value;
    }

    function increment(Counter storage counter) internal {
        unchecked {
            counter._value += 1;
        }
    }

    function decrement(Counter storage counter) internal {
        uint256 value = counter._value;
        require(value > 0, "Counter: decrement overflow");
        unchecked {
            counter._value = value - 1;
        }
    }

    function reset(Counter storage counter) internal {
        counter._value = 0;
    }
}

// File: @openzeppelin/contracts/access/Ownable.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;
    }
}


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() {
        _setOwner(_msgSender());
    }

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

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

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

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

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

// File: @openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol

// File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol

pragma solidity ^0.8.0;


// File: @openzeppelin/contracts/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

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/utils/Strings.sol

pragma solidity ^0.8.0;

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

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

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

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

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

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

// File: @openzeppelin/contracts/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);
    }

    function _verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) private 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/token/ERC721/IERC721Receiver.sol

pragma solidity ^0.8.0;

/**
 * @title ERC721 token receiver interface
 * @dev Interface for any contract that wants to support safeTransfers
 * from ERC721 asset contracts.
 */
interface IERC721Receiver {
    /**
     * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}
     * by `operator` from `from`, this function is called.
     *
     * It must return its Solidity selector to confirm the token transfer.
     * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.
     *
     * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`.
     */
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}

// File: @openzeppelin/contracts/token/ERC721/IERC721.sol

pragma solidity ^0.8.0;


/**
 * @dev Required interface of an ERC721 compliant contract.
 */
interface IERC721 is IERC165 {
    /**
     * @dev Emitted when `tokenId` token is transferred from `from` to `to`.
     */
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
     */
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
     */
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

    /**
     * @dev Returns the number of tokens in ``owner``'s account.
     */
    function balanceOf(address owner) external view returns (uint256 balance);

    /**
     * @dev Returns the owner of the `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function ownerOf(uint256 tokenId) external view returns (address owner);

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev Transfers `tokenId` token from `from` to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev Gives permission to `to` to transfer `tokenId` token to another account.
     * The approval is cleared when the token is transferred.
     *
     * Only a single account can be approved at a time, so approving the zero address clears previous approvals.
     *
     * Requirements:
     *
     * - The caller must own the token or be an approved operator.
     * - `tokenId` must exist.
     *
     * Emits an {Approval} event.
     */
    function approve(address to, uint256 tokenId) external;

    /**
     * @dev Returns the account approved for `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function getApproved(uint256 tokenId) external view returns (address operator);

    /**
     * @dev Approve or remove `operator` as an operator for the caller.
     * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
     *
     * Requirements:
     *
     * - The `operator` cannot be the caller.
     *
     * Emits an {ApprovalForAll} event.
     */
    function setApprovalForAll(address operator, bool _approved) external;

    /**
     * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
     *
     * See {setApprovalForAll}
     */
    function isApprovedForAll(address owner, address operator) external view returns (bool);

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes calldata data
    ) external;
}


// File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol

pragma solidity ^0.8.0;


/**
 * @title ERC-721 Non-Fungible Token Standard, optional metadata extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Metadata is IERC721 {
    /**
     * @dev Returns the token collection name.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the token collection symbol.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.
     */
    function tokenURI(uint256 tokenId) external view returns (string memory);
}
/**
 * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Enumerable is IERC721 {
    /**
     * @dev Returns the total amount of tokens stored by the contract.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns a token ID owned by `owner` at a given `index` of its token list.
     * Use along with {balanceOf} to enumerate all of ``owner``'s tokens.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId);

    /**
     * @dev Returns a token ID at a given `index` of all the tokens stored by the contract.
     * Use along with {totalSupply} to enumerate all tokens.
     */
    function tokenByIndex(uint256 index) external view returns (uint256);
}

// File: @openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol

pragma solidity ^0.8.0;



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

pragma solidity ^0.8.0;








/**
 * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
 * the Metadata extension, but not including the Enumerable extension, which is available separately as
 * {ERC721Enumerable}.
 */
contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
    using Address for address;
    using Strings for uint256;

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

    // Mapping from token ID to owner address
    mapping(uint256 => address) private _owners;

    // Mapping owner address to token count
    mapping(address => uint256) private _balances;

    // Mapping from token ID to approved address
    mapping(uint256 => address) private _tokenApprovals;

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

    /**
     * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

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

    /**
     * @dev See {IERC721-balanceOf}.
     */
    function balanceOf(address owner) public view virtual override returns (uint256) {
        require(owner != address(0), "ERC721: balance query for the zero address");
        return _balances[owner];
    }

    /**
     * @dev See {IERC721-ownerOf}.
     */
    function ownerOf(uint256 tokenId) public view virtual override returns (address) {
        address owner = _owners[tokenId];
        require(owner != address(0), "ERC721: owner query for nonexistent token");
        return owner;
    }

    /**
     * @dev See {IERC721Metadata-name}.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev See {IERC721Metadata-symbol}.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev See {IERC721Metadata-tokenURI}.
     */
    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");

        string memory baseURI = _baseURI();
        return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : "";
    }

    /**
     * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each
     * token will be the concatenation of the `baseURI` and the `tokenId`. Empty
     * by default, can be overriden in child contracts.
     */
    function _baseURI() internal view virtual returns (string memory) {
        return "";
    }

    /**
     * @dev See {IERC721-approve}.
     */
    function approve(address to, uint256 tokenId) public virtual override {
        address owner = ERC721.ownerOf(tokenId);
        require(to != owner, "ERC721: approval to current owner");

        require(
            _msgSender() == owner || isApprovedForAll(owner, _msgSender()),
            "ERC721: approve caller is not owner nor approved for all"
        );

        _approve(to, tokenId);
    }

    /**
     * @dev See {IERC721-getApproved}.
     */
    function getApproved(uint256 tokenId) public view virtual override returns (address) {
        require(_exists(tokenId), "ERC721: approved query for nonexistent token");

        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        require(operator != _msgSender(), "ERC721: approve to caller");

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

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

    /**
     * @dev See {IERC721-transferFrom}.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        //solhint-disable-next-line max-line-length
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");

        _transfer(from, to, tokenId);
    }

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        safeTransferFrom(from, to, tokenId, "");
    }

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) public virtual override {
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");
        _safeTransfer(from, to, tokenId, _data);
    }

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * `_data` is additional data, it has no specified format and it is sent in call to `to`.
     *
     * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.
     * implement alternative mechanisms to perform token transfer, such as signature-based.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeTransfer(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _transfer(from, to, tokenId);
        require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer");
    }

    /**
     * @dev Returns whether `tokenId` exists.
     *
     * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.
     *
     * Tokens start existing when they are minted (`_mint`),
     * and stop existing when they are burned (`_burn`).
     */
    function _exists(uint256 tokenId) internal view virtual returns (bool) {
        return _owners[tokenId] != address(0);
    }

    /**
     * @dev Returns whether `spender` is allowed to manage `tokenId`.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {
        require(_exists(tokenId), "ERC721: operator query for nonexistent token");
        address owner = ERC721.ownerOf(tokenId);
        return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender));
    }

    /**
     * @dev Safely mints `tokenId` and transfers it to `to`.
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeMint(address to, uint256 tokenId) internal virtual {
        _safeMint(to, tokenId, "");
    }

    /**
     * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is
     * forwarded in {IERC721Receiver-onERC721Received} to contract recipients.
     */
    function _safeMint(
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _mint(to, tokenId);
        require(
            _checkOnERC721Received(address(0), to, tokenId, _data),
            "ERC721: transfer to non ERC721Receiver implementer"
        );
    }

    /**
     * @dev Mints `tokenId` and transfers it to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - `to` cannot be the zero address.
     *
     * Emits a {Transfer} event.
     */
    function _mint(address to, uint256 tokenId) internal virtual {
        require(to != address(0), "ERC721: mint to the zero address");
        require(!_exists(tokenId), "ERC721: token already minted");

        _beforeTokenTransfer(address(0), to, tokenId);

        _balances[to] += 1;
        _owners[tokenId] = to;

        emit Transfer(address(0), to, tokenId);
    }

    /**
     * @dev Destroys `tokenId`.
     * The approval is cleared when the token is burned.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     *
     * Emits a {Transfer} event.
     */
    function _burn(uint256 tokenId) internal virtual {
        address owner = ERC721.ownerOf(tokenId);

        _beforeTokenTransfer(owner, address(0), tokenId);

        // Clear approvals
        _approve(address(0), tokenId);

        _balances[owner] -= 1;
        delete _owners[tokenId];

        emit Transfer(owner, address(0), tokenId);
    }

    /**
     * @dev Transfers `tokenId` from `from` to `to`.
     *  As opposed to {transferFrom}, this imposes no restrictions on msg.sender.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     *
     * Emits a {Transfer} event.
     */
    function _transfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {
        require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own");
        require(to != address(0), "ERC721: transfer to the zero address");

        _beforeTokenTransfer(from, to, tokenId);

        // Clear approvals from the previous owner
        _approve(address(0), tokenId);

        _balances[from] -= 1;
        _balances[to] += 1;
        _owners[tokenId] = to;

        emit Transfer(from, to, tokenId);
    }

    /**
     * @dev Approve `to` to operate on `tokenId`
     *
     * Emits a {Approval} event.
     */
    function _approve(address to, uint256 tokenId) internal virtual {
        _tokenApprovals[tokenId] = to;
        emit Approval(ERC721.ownerOf(tokenId), to, tokenId);
    }

    /**
     * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.
     * The call is not executed if the target address is not a contract.
     *
     * @param from address representing the previous owner of the given token ID
     * @param to target address that will receive the tokens
     * @param tokenId uint256 ID of the token to be transferred
     * @param _data bytes optional data to send along with the call
     * @return bool whether the call correctly returned the expected magic value
     */
    function _checkOnERC721Received(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) private returns (bool) {
        if (to.isContract()) {
            try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {
                return retval == IERC721Receiver(to).onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert("ERC721: transfer to non ERC721Receiver implementer");
                } else {
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }

    /**
     * @dev Hook that is called before any token transfer. This includes minting
     * and burning.
     *
     * Calling conditions:
     *
     * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be
     * transferred to `to`.
     * - When `from` is zero, `tokenId` will be minted for `to`.
     * - When `to` is zero, ``from``'s `tokenId` will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {}
}


/**
 * @dev This implements an optional extension of {ERC721} defined in the EIP that adds
 * enumerability of all the token ids in the contract as well as all token ids owned by each
 * account.
 */
abstract contract ERC721Enumerable is ERC721, IERC721Enumerable {
    // Mapping from owner to list of owned token IDs
    mapping(address => mapping(uint256 => uint256)) private _ownedTokens;

    // Mapping from token ID to index of the owner tokens list
    mapping(uint256 => uint256) private _ownedTokensIndex;

    // Array with all token ids, used for enumeration
    uint256[] private _allTokens;

    // Mapping from token id to position in the allTokens array
    mapping(uint256 => uint256) private _allTokensIndex;

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

    /**
     * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) {
        require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds");
        return _ownedTokens[owner][index];
    }

    /**
     * @dev See {IERC721Enumerable-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _allTokens.length;
    }

    /**
     * @dev See {IERC721Enumerable-tokenByIndex}.
     */
    function tokenByIndex(uint256 index) public view virtual override returns (uint256) {
        require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds");
        return _allTokens[index];
    }

    /**
     * @dev Hook that is called before any token transfer. This includes minting
     * and burning.
     *
     * Calling conditions:
     *
     * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be
     * transferred to `to`.
     * - When `from` is zero, `tokenId` will be minted for `to`.
     * - When `to` is zero, ``from``'s `tokenId` will be burned.
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual override {
        super._beforeTokenTransfer(from, to, tokenId);

        if (from == address(0)) {
            _addTokenToAllTokensEnumeration(tokenId);
        } else if (from != to) {
            _removeTokenFromOwnerEnumeration(from, tokenId);
        }
        if (to == address(0)) {
            _removeTokenFromAllTokensEnumeration(tokenId);
        } else if (to != from) {
            _addTokenToOwnerEnumeration(to, tokenId);
        }
    }

    /**
     * @dev Private function to add a token to this extension's ownership-tracking data structures.
     * @param to address representing the new owner of the given token ID
     * @param tokenId uint256 ID of the token to be added to the tokens list of the given address
     */
    function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private {
        uint256 length = ERC721.balanceOf(to);
        _ownedTokens[to][length] = tokenId;
        _ownedTokensIndex[tokenId] = length;
    }

    /**
     * @dev Private function to add a token to this extension's token tracking data structures.
     * @param tokenId uint256 ID of the token to be added to the tokens list
     */
    function _addTokenToAllTokensEnumeration(uint256 tokenId) private {
        _allTokensIndex[tokenId] = _allTokens.length;
        _allTokens.push(tokenId);
    }

    /**
     * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that
     * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for
     * gas optimizations e.g. when performing a transfer operation (avoiding double writes).
     * This has O(1) time complexity, but alters the order of the _ownedTokens array.
     * @param from address representing the previous owner of the given token ID
     * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address
     */
    function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private {
        // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and
        // then delete the last slot (swap and pop).

        uint256 lastTokenIndex = ERC721.balanceOf(from) - 1;
        uint256 tokenIndex = _ownedTokensIndex[tokenId];

        // When the token to delete is the last token, the swap operation is unnecessary
        if (tokenIndex != lastTokenIndex) {
            uint256 lastTokenId = _ownedTokens[from][lastTokenIndex];

            _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
            _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index
        }

        // This also deletes the contents at the last position of the array
        delete _ownedTokensIndex[tokenId];
        delete _ownedTokens[from][lastTokenIndex];
    }

    /**
     * @dev Private function to remove a token from this extension's token tracking data structures.
     * This has O(1) time complexity, but alters the order of the _allTokens array.
     * @param tokenId uint256 ID of the token to be removed from the tokens list
     */
    function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private {
        // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and
        // then delete the last slot (swap and pop).

        uint256 lastTokenIndex = _allTokens.length - 1;
        uint256 tokenIndex = _allTokensIndex[tokenId];

        // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so
        // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding
        // an 'if' statement (like in _removeTokenFromOwnerEnumeration)
        uint256 lastTokenId = _allTokens[lastTokenIndex];

        _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
        _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index

        // This also deletes the contents at the last position of the array
        delete _allTokensIndex[tokenId];
        _allTokens.pop();
    }
}

pragma solidity ^0.8.0;


/**
 * @dev ERC721 token with storage based token URI management.
 */
abstract contract ERC721URIStorage is ERC721 {
    using Strings for uint256;

    // Optional mapping for token URIs
    mapping(uint256 => string) private _tokenURIs;

    /**
     * @dev See {IERC721Metadata-tokenURI}.
     */
    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        require(_exists(tokenId), "ERC721URIStorage: URI query for nonexistent token");

        string memory _tokenURI = _tokenURIs[tokenId];
        string memory base = _baseURI();

        // If there is no base URI, return the token URI.
        if (bytes(base).length == 0) {
            return _tokenURI;
        }
        // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked).
        if (bytes(_tokenURI).length > 0) {
            return string(abi.encodePacked(base, _tokenURI));
        }

        return super.tokenURI(tokenId);
    }

    /**
     * @dev Sets `_tokenURI` as the tokenURI of `tokenId`.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual {
        require(_exists(tokenId), "ERC721URIStorage: URI set of nonexistent token");
        _tokenURIs[tokenId] = _tokenURI;
    }

    /**
     * @dev Destroys `tokenId`.
     * The approval is cleared when the token is burned.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     *
     * Emits a {Transfer} event.
     */
    function _burn(uint256 tokenId) internal virtual override {
        super._burn(tokenId);

        if (bytes(_tokenURIs[tokenId]).length != 0) {
            delete _tokenURIs[tokenId];
        }
    }
}

//SPDX-License-Identifier: GPL-3.0-or-later
pragma solidity 0.8.3;

contract SodaPassNFT is ERC721, ERC721Enumerable,ERC721URIStorage, Ownable {
   using Counters for Counters.Counter;
    Counters.Counter private _tokenIds;
    
    uint16 public constant maxSupply = 5100;
    string private _baseTokenURI;
    
    uint256 public _startDate = 1634850000000;
    uint256 public _whitelistStartDate = 1634677200000;
    
    mapping (address => bool) private _whitelisted;

    constructor() ERC721("Soda Pass", "SODA") {
         for (uint8 i = 0; i < 100; i++) {
            _tokenIds.increment();

            uint256 newItemId = _tokenIds.current();
            _mint(msg.sender, newItemId);
        }
    }
    
    function setStartDate(uint256 startDate) public onlyOwner {
        _startDate = startDate;
    }
    
    function setWhitelistStartDate(uint256 whitelistStartDate) public onlyOwner {
        _whitelistStartDate = whitelistStartDate;
    }

    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal override(ERC721, ERC721Enumerable) {
        super._beforeTokenTransfer(from, to, tokenId);
    }
    
    function _burn(uint256 tokenId) internal override(ERC721, ERC721URIStorage) {
        super._burn(tokenId);
    }

    function supportsInterface(bytes4 interfaceId)
        public
        view
        override(ERC721, ERC721Enumerable)
        returns (bool)
    {
        return super.supportsInterface(interfaceId);
    }


    function setBaseURI(string memory _newbaseTokenURI) public onlyOwner {
        _baseTokenURI = _newbaseTokenURI;
    }

    function _baseURI() internal view override returns (string memory) {
        return _baseTokenURI;
    }

    // Get minting limit (for a single transaction) based on current token supply
    function getCurrentMintLimit() public view returns (uint8) {
        return block.timestamp >= _startDate ? 20 : 4;
    }

    // Get ether price based on current token supply
    function getCurrentPrice() public pure returns (uint64) {
        return 100_000_000_000_000_000;
    }
    
    function addUserToWhitelist(address wallet) public onlyOwner {
        _whitelisted[wallet] = true;
    }
    
    function removeUserFromWhitelist(address wallet) public onlyOwner {
        _whitelisted[wallet] = false;
    }
    
    // Mint new token(s)
    function mint(uint8 _quantityToMint) public payable {
        require(_startDate <= block.timestamp || (block.timestamp >= _whitelistStartDate && _whitelisted[msg.sender] == true), block.timestamp <= _whitelistStartDate ? "Sale is not open" : "Not whitelisted");
        require(_quantityToMint >= 1, "Must mint at least 1");
        require(block.timestamp >= _whitelistStartDate && block.timestamp <= _startDate ? (_quantityToMint + balanceOf(msg.sender) <= 4) : true, "Whitelisted mints are limited to 4 per wallet");
        require(
            _quantityToMint <= getCurrentMintLimit(),
            "Maximum current buy limit for individual transaction exceeded"
        );
        require(
            (_quantityToMint + totalSupply()) <= maxSupply,
            "Exceeds maximum supply"
        );
        require(
            msg.value == (getCurrentPrice() * _quantityToMint),
            "Ether submitted does not match current price"
        );

        for (uint8 i = 0; i < _quantityToMint; i++) {
            _tokenIds.increment();

            uint256 newItemId = _tokenIds.current();
            _mint(msg.sender, newItemId);
        }
    }
    
    function tokenURI(uint256 tokenId)
        public
        view
        override(ERC721, ERC721URIStorage)
        returns (string memory)
    {
        return super.tokenURI(tokenId);
    }

    // Withdraw ether from contract
    function withdraw() public onlyOwner {
        require(address(this).balance > 0, "Balance must be positive");
        
        uint256 _balance = address(this).balance;
        address _coldWallet = 0x9781F65af8324b40Ee9Ca421ea963642Bc8a8C2b;
        payable(_coldWallet).transfer((_balance * 9)/10);
        
        address _devWallet = 0x3097617CbA85A26AdC214A1F87B680bE4b275cD0;
        payable(_devWallet).transfer((_balance * 1)/10);
    }
}

pragma solidity 0.8.3;

contract MrEverybody is ERC721, ERC721Enumerable,ERC721URIStorage, Ownable {
   using Counters for Counters.Counter;
    Counters.Counter public _tokenIds;
    
    uint16 public constant maxSupply = 1052;
    string private _baseTokenURI;
    
    uint256 public _startDate; // start 
    uint256 public _next48hour = 172800;           // 172800 48 hours
    uint256 public _next24hour = 86400;           // 86400 24 hour
    
    uint256 public _privateSalePrice =  6E16;   // 6E16 0.06 ETH per NFT
    uint256 public _publicSalePrice =  7E16;   //7E16 0.07 ETH per NFT
    bool public sale_started = false;
    event ReturnEvent(uint _amount);
    
    SodaPassNFT  soda_contract;
    
    address sodaContract = 0x3b553Fc51A63298E2E44d8ecd3b1ea01d22cA459;
    
    mapping(address => uint256) public countForAddress;


    constructor() ERC721("Mr. Everybody", "MEB") {
        soda_contract = SodaPassNFT(sodaContract);
        
        // 30 for team
        for (uint8 i = 0; i < 30; i++) {
            _tokenIds.increment();

            uint256 newItemId = _tokenIds.current();
            _mint(msg.sender, newItemId);
        }

    }
    
    function StartSale() public onlyOwner{
        _startDate = block.timestamp;
        sale_started = true;
    }
    
    function StopSale() public onlyOwner{
        sale_started = false;
    }
    
    function getSodaPassBalance(address _zz) public view returns (uint256 balance) {
       return soda_contract.balanceOf(_zz);
    }
    
     function getnow() public view returns (uint256) {
       return block.timestamp;
    }
    
    function _burn(uint256 tokenId) internal override(ERC721, ERC721URIStorage) {
        super._burn(tokenId);
    }
    
    function setStartDate(uint256 startDate) public onlyOwner {
        _startDate = startDate;
    }
    
    function setPrivateSalePrice(uint256 privateSalePrice) public onlyOwner {
        _privateSalePrice = privateSalePrice;
    }
    
    function setPublicSalePrice(uint256 publicSalePrice) public onlyOwner {
        _publicSalePrice = publicSalePrice;
    }

    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal override(ERC721, ERC721Enumerable) {
        super._beforeTokenTransfer(from, to, tokenId);
    }

    function supportsInterface(bytes4 interfaceId)
        public
        view
        override(ERC721, ERC721Enumerable)
        returns (bool)
    {
        return super.supportsInterface(interfaceId);
    }


    function setBaseURI(string memory _newbaseTokenURI) public onlyOwner {
        _baseTokenURI = _newbaseTokenURI;
    }

    function _baseURI() internal view override returns (string memory) {
        return _baseTokenURI;
    }

    
    
     // Mint new token(s)
    function mint(uint8 _quantityToMint) public payable {
        
       require(_quantityToMint <= 10, 'can mint only 10 max at a time');
       require((_quantityToMint + totalSupply()) <= maxSupply,"Exceeds maximum supply");
       require(sale_started == true,"Sale Not Started");
       
              // for next 24 hours after presale started by owner
        if(block.timestamp <= (_startDate + _next48hour))
        {
            require(getSodaPassBalance(msg.sender) > 0 , "Needs to have SodaPass");
            require((countForAddress[msg.sender] + _quantityToMint) <= getSodaPassBalance(msg.sender),"cannot mint over the balance of SodaPass ");
            require(msg.value == (_privateSalePrice * _quantityToMint),"Ether submitted does not match current price 0.06 ETH per token");
            for (uint8 i = 0; i < _quantityToMint; i++) {
                _tokenIds.increment();
                uint256 newItemId = _tokenIds.current();
                countForAddress[msg.sender] = countForAddress[msg.sender] + 1;
                emit ReturnEvent(newItemId);
                _mint(msg.sender, newItemId);
                
             }
        }
        if(block.timestamp > (_startDate + _next48hour) && block.timestamp <= (_startDate + _next48hour + _next24hour)){
            require(getSodaPassBalance(msg.sender) > 0 , "Needs to have SodaPass");
            require(msg.value == (_privateSalePrice * _quantityToMint),"Ether submitted does not match current price 0.06 ETH per token");
             for (uint8 i = 0; i < _quantityToMint; i++) {
              _tokenIds.increment();
              uint256 newItemId = _tokenIds.current();
              emit ReturnEvent(newItemId);
              _mint(msg.sender, newItemId);
          }
         }
        if(block.timestamp > (_startDate + _next48hour + _next24hour)) {
             require(msg.value == (_publicSalePrice * _quantityToMint),"Ether submitted does not match current price 0.07 ETH per token");
             for (uint8 i = 0; i < _quantityToMint; i++) {
             _tokenIds.increment();
             uint256 newItemId = _tokenIds.current();
             emit ReturnEvent(newItemId);
             _mint(msg.sender, newItemId);
             }
         }
    }

    
    function tokenURI(uint256 tokenId)
        public
        view
        override(ERC721, ERC721URIStorage)
        returns (string memory)
    {
        return super.tokenURI(tokenId);
    }

    // Withdraw ether from contract
    function withdraw() public onlyOwner {
        require(address(this).balance > 0, "Balance must be positive");
        
        uint256 _balance = address(this).balance;
        address _coldWallet = 0x0aFEe0A7b9389f9Cf8866F866a93C17CaC29BddA;
        payable(_coldWallet).transfer((_balance * 6)/10);
        
        address _devWallet = 0x7d3d95ac0Bacde573860F75d3cd07369E0CE86F4;
        payable(_devWallet).transfer((_balance * 3)/10);
        
        address _devWallet2 = 0x3097617CbA85A26AdC214A1F87B680bE4b275cD0;
        payable(_devWallet2).transfer((_balance * 1)/10);

    }
}

//Mr. Everybody Possessions Collection

pragma solidity 0.8.3;

contract MEV2 is ERC721, ERC721Enumerable,ERC721URIStorage, Ownable {
   using Counters for Counters.Counter;
    Counters.Counter public _tokenIds;
    
    uint16 public constant maxSupply = 1636;
    string private _baseTokenURI;
    
    uint256 public _startDate; // start 

    bool public sale_started = false;
    event ReturnEvent(uint _amount);
    
    SodaPassNFT  soda_contract;
    MrEverybody  mr_everybody;

    address sodaContract = 0x3b553Fc51A63298E2E44d8ecd3b1ea01d22cA459;
    address _everybody = 0xDdF66bAcA4fA806eD792065E01B7a8166B6018FF;
        
    mapping(uint256 => bool) public _tokenIDused; 

    uint[] public idTOKENs ;

    mapping(uint256 => bool) public _everybodytokenIDused;
    uint[] public everybodyidTOKENs ;


    constructor() ERC721("Mr. Everybody Possessions Collection", "MEP") {
        soda_contract = SodaPassNFT(sodaContract);
        mr_everybody = MrEverybody(_everybody);

    }
    
    function StartSale() public onlyOwner{
        _startDate = block.timestamp;
        sale_started = true;
    }

    function setIdtrue(uint256 _id) private {
        _tokenIDused[_id] = true;

    }

    function getIdtrue(uint256 _id) public view returns (bool val){
        return _tokenIDused[_id];
    }

    function seteverybodyIdtrue(uint256 _id) private {
        _everybodytokenIDused[_id] = true;

    }

    function geteverybodyIdtrue(uint256 _id) public view returns (bool val){
        return _everybodytokenIDused[_id];
    }
    
    function StopSale() public onlyOwner{
        sale_started = false;
    }
    
    function getSodaPassBalance(address _zz) public view returns (uint256 balance) {
       return soda_contract.balanceOf(_zz);
    }

    function geteverybodyBalance(address _zz) public view returns (uint256 balance) {
       return mr_everybody.balanceOf(_zz);
    }
    
     function getnow() public view returns (uint256) {
       return block.timestamp;
    }
    
    function _burn(uint256 tokenId) internal override(ERC721, ERC721URIStorage) {
        super._burn(tokenId);
    }
    
    function setStartDate(uint256 startDate) public onlyOwner {
        _startDate = startDate;
    }

    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal override(ERC721, ERC721Enumerable) {
        super._beforeTokenTransfer(from, to, tokenId);
    }

    function supportsInterface(bytes4 interfaceId)
        public
        view
        override(ERC721, ERC721Enumerable)
        returns (bool)
    {
        return super.supportsInterface(interfaceId);
    }


    function setBaseURI(string memory _newbaseTokenURI) public onlyOwner {
        _baseTokenURI = _newbaseTokenURI;
    }

    function _baseURI() internal view override returns (string memory) {
        return _baseTokenURI;
    }

    function getsodaPassTokenID(address owner,uint256 _index) public view returns (uint256 tokenID){
        return soda_contract.tokenOfOwnerByIndex(owner,_index);
    }

    function geteverybodyTokenID(address owner,uint256 _index) public view returns (uint256 tokenID){
        return mr_everybody.tokenOfOwnerByIndex(owner,_index);
    }
    
     // Mint new token(s)
    function mint(uint8 _quantityToMint) public  {
        
        delete idTOKENs;
        delete everybodyidTOKENs;

       require(_quantityToMint <= 10, 'can mint only 10 max at a time');
       require((_quantityToMint + totalSupply()) <= maxSupply,"Exceeds maximum supply");
       require(sale_started == true,"No Sale Time");
       
              // for next 24 hours after presale started by owner
        if(soda_contract.balanceOf(msg.sender) > 0 || mr_everybody.balanceOf(msg.sender) > 0)
        {

        for(uint256 j = 0; j < getSodaPassBalance(msg.sender); j++){
                
                uint256 tokenID = getsodaPassTokenID(msg.sender,j);
                        if(_tokenIDused[tokenID] !=true){
                             idTOKENs.push(j);
                        }
                        if(idTOKENs.length == _quantityToMint)
                        {
                            break;
                        }             
                }
            if(idTOKENs.length != _quantityToMint){
                for(uint256 j =0;j < geteverybodyBalance(msg.sender); j++){
                    uint256 tokenID = geteverybodyTokenID(msg.sender,j);
                        if(_everybodytokenIDused[tokenID] !=true){
                             everybodyidTOKENs.push(j);
                        }
                        if(everybodyidTOKENs.length + idTOKENs.length == _quantityToMint)
                        {
                            break;
                        }  
                }
            }

                 require(idTOKENs.length + everybodyidTOKENs.length == _quantityToMint, "Token pass used");
                 
                for(uint8 j = 0; j < idTOKENs.length; j++){
                uint256 tokenID = getsodaPassTokenID(msg.sender,idTOKENs[j]);

                    setIdtrue(tokenID);
                    _tokenIds.increment();
                    uint256 newItemId = _tokenIds.current();
                    emit ReturnEvent(newItemId);
                    _mint(msg.sender, newItemId);
                }

                if(idTOKENs.length != _quantityToMint){

               for(uint8 j = 0; j < everybodyidTOKENs.length; j++){
                uint256 tokenID = geteverybodyTokenID(msg.sender,everybodyidTOKENs[j]);

                    seteverybodyIdtrue(tokenID);
                    _tokenIds.increment();
                    uint256 newItemId = _tokenIds.current();
                    emit ReturnEvent(newItemId);
                    _mint(msg.sender, newItemId);
                }
                }
                 

        }
        else{
            revert("No Tokens to mint");
        }


    }

    function getidtokenlength() public view returns(uint256)
    {
        return idTOKENs.length;
    }

    
    function tokenURI(uint256 tokenId)
        public
        view
        override(ERC721, ERC721URIStorage)
        returns (string memory)
    {
        return super.tokenURI(tokenId);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","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":false,"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"ReturnEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"StartSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"StopSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"_everybodytokenIDused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_startDate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"_tokenIDused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_tokenIds","outputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"everybodyidTOKENs","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"getIdtrue","outputs":[{"internalType":"bool","name":"val","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_zz","type":"address"}],"name":"getSodaPassBalance","outputs":[{"internalType":"uint256","name":"balance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_zz","type":"address"}],"name":"geteverybodyBalance","outputs":[{"internalType":"uint256","name":"balance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"geteverybodyIdtrue","outputs":[{"internalType":"bool","name":"val","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"_index","type":"uint256"}],"name":"geteverybodyTokenID","outputs":[{"internalType":"uint256","name":"tokenID","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getidtokenlength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getnow","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"_index","type":"uint256"}],"name":"getsodaPassTokenID","outputs":[{"internalType":"uint256","name":"tokenID","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"idTOKENs","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":[],"name":"maxSupply","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"_quantityToMint","type":"uint8"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sale_started","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"_newbaseTokenURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"startDate","type":"uint256"}],"name":"setStartDate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526000600f60006101000a81548160ff021916908315150217905550733b553fc51a63298e2e44d8ecd3b1ea01d22ca459601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073ddf66baca4fa806ed792065e01b7a8166b6018ff601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550348015620000d657600080fd5b5060405180606001604052806024815260200162004f2e602491396040518060400160405280600381526020017f4d4550000000000000000000000000000000000000000000000000000000000081525081600090805190602001906200013f92919062000315565b5080600190805190602001906200015892919062000315565b5050506200017b6200016f6200024760201b60201c565b6200024f60201b60201c565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600f60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200042a565b600033905090565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200032390620003c5565b90600052602060002090601f01602090048101928262000347576000855562000393565b82601f106200036257805160ff191683800117855562000393565b8280016001018555821562000393579182015b828111156200039257825182559160200191906001019062000375565b5b509050620003a29190620003a6565b5090565b5b80821115620003c1576000816000905550600101620003a7565b5090565b60006002820490506001821680620003de57607f821691505b60208210811415620003f557620003f4620003fb565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b614af4806200043a6000396000f3fe608060405234801561001057600080fd5b50600436106102485760003560e01c8063769f192b1161013b578063ac8daba0116100b8578063d60dfeeb1161007c578063d60dfeeb14610717578063e985e9c514610747578063f2fde38b14610777578063f60dd7e314610793578063ff74f501146107c357610248565b8063ac8daba01461065f578063b86e94a61461067d578063b88d4fde146106ad578063c87b56dd146106c9578063d5abeb01146106f957610248565b80639052eaaf116100ff5780639052eaaf146105a757806395d89b41146105d7578063a22cb465146105f5578063a4cf801f14610611578063aa46a4001461064157610248565b8063769f192b146105155780637944875b1461054557806382d95df51461054f578063881cf1221461056b5780638da5cb5b1461058957610248565b806342842e0e116101c95780636067bb8d1161018d5780636067bb8d1461045f5780636352211e1461048f5780636ecd2306146104bf57806370a08231146104db578063715018a61461050b57610248565b806342842e0e146103a95780634f4702f3146103c55780634f6ccce7146103f557806355f804b3146104255780635abc96221461044157610248565b806318160ddd1161021057806318160ddd146102f157806323b872dd1461030f5780632f745c591461032b578063318aed891461035b5780633a517e0b1461038b57610248565b806301ffc9a71461024d57806303225f4c1461027d57806306fdde0314610287578063081812fc146102a5578063095ea7b3146102d5575b600080fd5b610267600480360381019061026291906136b3565b6107f3565b6040516102749190613c9c565b60405180910390f35b610285610805565b005b61028f6108a5565b60405161029c9190613cb7565b60405180910390f35b6102bf60048036038101906102ba9190613746565b610937565b6040516102cc9190613c0c565b60405180910390f35b6102ef60048036038101906102ea9190613677565b6109bc565b005b6102f9610ad4565b6040516103069190613ff4565b60405180910390f35b61032960048036038101906103249190613571565b610ae1565b005b61034560048036038101906103409190613677565b610b41565b6040516103529190613ff4565b60405180910390f35b6103756004803603810190610370919061350c565b610be6565b6040516103829190613ff4565b60405180910390f35b610393610c9a565b6040516103a09190613ff4565b60405180910390f35b6103c360048036038101906103be9190613571565b610ca7565b005b6103df60048036038101906103da9190613677565b610cc7565b6040516103ec9190613ff4565b60405180910390f35b61040f600480360381019061040a9190613746565b610d7e565b60405161041c9190613ff4565b60405180910390f35b61043f600480360381019061043a9190613705565b610e15565b005b610449610eab565b6040516104569190613c9c565b60405180910390f35b6104796004803603810190610474919061350c565b610ebe565b6040516104869190613ff4565b60405180910390f35b6104a960048036038101906104a49190613746565b610f72565b6040516104b69190613c0c565b60405180910390f35b6104d960048036038101906104d49190613798565b611024565b005b6104f560048036038101906104f0919061350c565b611674565b6040516105029190613ff4565b60405180910390f35b61051361172c565b005b61052f600480360381019061052a9190613746565b6117b4565b60405161053c9190613c9c565b60405180910390f35b61054d6117d4565b005b61056960048036038101906105649190613746565b61186d565b005b6105736118f3565b6040516105809190613ff4565b60405180910390f35b6105916118fb565b60405161059e9190613c0c565b60405180910390f35b6105c160048036038101906105bc9190613746565b611925565b6040516105ce9190613ff4565b60405180910390f35b6105df611949565b6040516105ec9190613cb7565b60405180910390f35b61060f600480360381019061060a919061363b565b6119db565b005b61062b60048036038101906106269190613746565b611b5c565b6040516106389190613c9c565b60405180910390f35b610649611b86565b6040516106569190613ff4565b60405180910390f35b610667611b92565b6040516106749190613ff4565b60405180910390f35b61069760048036038101906106929190613746565b611b98565b6040516106a49190613c9c565b60405180910390f35b6106c760048036038101906106c291906135c0565b611bc2565b005b6106e360048036038101906106de9190613746565b611c24565b6040516106f09190613cb7565b60405180910390f35b610701611c36565b60405161070e9190613fd9565b60405180910390f35b610731600480360381019061072c9190613746565b611c3c565b60405161073e9190613c9c565b60405180910390f35b610761600480360381019061075c9190613535565b611c5c565b60405161076e9190613c9c565b60405180910390f35b610791600480360381019061078c919061350c565b611cf0565b005b6107ad60048036038101906107a89190613677565b611de8565b6040516107ba9190613ff4565b60405180910390f35b6107dd60048036038101906107d89190613746565b611e9f565b6040516107ea9190613ff4565b60405180910390f35b60006107fe82611ec3565b9050919050565b61080d611f3d565b73ffffffffffffffffffffffffffffffffffffffff1661082b6118fb565b73ffffffffffffffffffffffffffffffffffffffff1614610881576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087890613ef9565b60405180910390fd5b42600e819055506001600f60006101000a81548160ff021916908315150217905550565b6060600080546108b490614265565b80601f01602080910402602001604051908101604052809291908181526020018280546108e090614265565b801561092d5780601f106109025761010080835404028352916020019161092d565b820191906000526020600020905b81548152906001019060200180831161091057829003601f168201915b5050505050905090565b600061094282611f45565b610981576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161097890613ed9565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006109c782610f72565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2f90613f59565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a57611f3d565b73ffffffffffffffffffffffffffffffffffffffff161480610a865750610a8581610a80611f3d565b611c5c565b5b610ac5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610abc90613e19565b60405180910390fd5b610acf8383611fb1565b505050565b6000600880549050905090565b610af2610aec611f3d565b8261206a565b610b31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2890613f99565b60405180910390fd5b610b3c838383612148565b505050565b6000610b4c83611674565b8210610b8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8490613cd9565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b6000600f60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231836040518263ffffffff1660e01b8152600401610c439190613c0c565b60206040518083038186803b158015610c5b57600080fd5b505afa158015610c6f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c93919061376f565b9050919050565b6000601480549050905090565b610cc283838360405180602001604052806000815250611bc2565b505050565b6000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632f745c5984846040518363ffffffff1660e01b8152600401610d26929190613c73565b60206040518083038186803b158015610d3e57600080fd5b505afa158015610d52573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d76919061376f565b905092915050565b6000610d88610ad4565b8210610dc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc090613fb9565b60405180910390fd5b60088281548110610e03577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b610e1d611f3d565b73ffffffffffffffffffffffffffffffffffffffff16610e3b6118fb565b73ffffffffffffffffffffffffffffffffffffffff1614610e91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8890613ef9565b60405180910390fd5b80600d9080519060200190610ea79291906132e5565b5050565b600f60009054906101000a900460ff1681565b6000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231836040518263ffffffff1660e01b8152600401610f1b9190613c0c565b60206040518083038186803b158015610f3357600080fd5b505afa158015610f47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f6b919061376f565b9050919050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561101b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101290613e59565b60405180910390fd5b80915050919050565b60146000611032919061336b565b60166000611040919061336b565b600a8160ff161115611087576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107e90613d19565b60405180910390fd5b61066461ffff16611096610ad4565b8260ff166110a491906140d9565b11156110e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110dc90613f79565b60405180910390fd5b60011515600f60009054906101000a900460ff1615151461113b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113290613d59565b60405180910390fd5b6000600f60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b81526004016111989190613c0c565b60206040518083038186803b1580156111b057600080fd5b505afa1580156111c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111e8919061376f565b118061129e57506000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b815260040161124c9190613c0c565b60206040518083038186803b15801561126457600080fd5b505afa158015611278573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061129c919061376f565b115b156116365760005b6112af33610be6565b8110156113445760006112c23383611de8565b9050600115156013600083815260200190815260200160002060009054906101000a900460ff1615151461131a5760148290806001815401808255809150506001900390600052602060002001600090919091909150555b8260ff1660148054905014156113305750611344565b50808061133c906142c8565b9150506112a6565b508060ff16601480549050146114075760005b61136033610ebe565b8110156114055760006113733383610cc7565b9050600115156015600083815260200190815260200160002060009054906101000a900460ff161515146113cb5760168290806001815401808255809150506001900390600052602060002001600090919091909150555b8260ff166014805490506016805490506113e591906140d9565b14156113f15750611405565b5080806113fd906142c8565b915050611357565b505b8060ff1660168054905060148054905061142191906140d9565b14611461576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145890613eb9565b60405180910390fd5b60005b6014805490508160ff1610156115405760006114c73360148460ff16815481106114b7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200154611de8565b90506114d2816123a4565b6114dc600c6123d3565b60006114e8600c6123e9565b90507f6c29ed792f8b613fbba10b9e105a1dcebd92b4dd7938e36de410329ef452a285816040516115199190613ff4565b60405180910390a161152b33826123f7565b5050808061153890614311565b915050611464565b508060ff16601480549050146116315760005b6016805490508160ff16101561162f5760006115b63360168460ff16815481106115a6577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200154610cc7565b90506115c1816125c5565b6115cb600c6123d3565b60006115d7600c6123e9565b90507f6c29ed792f8b613fbba10b9e105a1dcebd92b4dd7938e36de410329ef452a285816040516116089190613ff4565b60405180910390a161161a33826123f7565b5050808061162790614311565b915050611553565b505b611671565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166890613d39565b60405180910390fd5b50565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156116e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116dc90613e39565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611734611f3d565b73ffffffffffffffffffffffffffffffffffffffff166117526118fb565b73ffffffffffffffffffffffffffffffffffffffff16146117a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179f90613ef9565b60405180910390fd5b6117b260006125f4565b565b60156020528060005260406000206000915054906101000a900460ff1681565b6117dc611f3d565b73ffffffffffffffffffffffffffffffffffffffff166117fa6118fb565b73ffffffffffffffffffffffffffffffffffffffff1614611850576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184790613ef9565b60405180910390fd5b6000600f60006101000a81548160ff021916908315150217905550565b611875611f3d565b73ffffffffffffffffffffffffffffffffffffffff166118936118fb565b73ffffffffffffffffffffffffffffffffffffffff16146118e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e090613ef9565b60405180910390fd5b80600e8190555050565b600042905090565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6014818154811061193557600080fd5b906000526020600020016000915090505481565b60606001805461195890614265565b80601f016020809104026020016040519081016040528092919081815260200182805461198490614265565b80156119d15780601f106119a6576101008083540402835291602001916119d1565b820191906000526020600020905b8154815290600101906020018083116119b457829003601f168201915b5050505050905090565b6119e3611f3d565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4890613dd9565b60405180910390fd5b8060056000611a5e611f3d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611b0b611f3d565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611b509190613c9c565b60405180910390a35050565b60006015600083815260200190815260200160002060009054906101000a900460ff169050919050565b600c8060000154905081565b600e5481565b60006013600083815260200190815260200160002060009054906101000a900460ff169050919050565b611bd3611bcd611f3d565b8361206a565b611c12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0990613f99565b60405180910390fd5b611c1e848484846126ba565b50505050565b6060611c2f82612716565b9050919050565b61066481565b60136020528060005260406000206000915054906101000a900460ff1681565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611cf8611f3d565b73ffffffffffffffffffffffffffffffffffffffff16611d166118fb565b73ffffffffffffffffffffffffffffffffffffffff1614611d6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6390613ef9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611ddc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd390613d79565b60405180910390fd5b611de5816125f4565b50565b6000600f60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632f745c5984846040518363ffffffff1660e01b8152600401611e47929190613c73565b60206040518083038186803b158015611e5f57600080fd5b505afa158015611e73573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e97919061376f565b905092915050565b60168181548110611eaf57600080fd5b906000526020600020016000915090505481565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611f365750611f3582612868565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661202483610f72565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061207582611f45565b6120b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ab90613df9565b60405180910390fd5b60006120bf83610f72565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061212e57508373ffffffffffffffffffffffffffffffffffffffff1661211684610937565b73ffffffffffffffffffffffffffffffffffffffff16145b8061213f575061213e8185611c5c565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661216882610f72565b73ffffffffffffffffffffffffffffffffffffffff16146121be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b590613f19565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561222e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222590613db9565b60405180910390fd5b61223983838361294a565b612244600082611fb1565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546122949190614160565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546122eb91906140d9565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60016013600083815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6001816000016000828254019250508190555050565b600081600001549050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612467576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245e90613e79565b60405180910390fd5b61247081611f45565b156124b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124a790613d99565b60405180910390fd5b6124bc6000838361294a565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461250c91906140d9565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b60016015600083815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6126c5848484612148565b6126d18484848461295a565b612710576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161270790613cf9565b60405180910390fd5b50505050565b606061272182611f45565b612760576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161275790613e99565b60405180910390fd5b6000600a6000848152602001908152602001600020805461278090614265565b80601f01602080910402602001604051908101604052809291908181526020018280546127ac90614265565b80156127f95780601f106127ce576101008083540402835291602001916127f9565b820191906000526020600020905b8154815290600101906020018083116127dc57829003601f168201915b50505050509050600061280a612af1565b9050600081511415612820578192505050612863565b60008251111561285557808260405160200161283d929190613be8565b60405160208183030381529060405292505050612863565b61285e84612b83565b925050505b919050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061293357507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612943575061294282612c2a565b5b9050919050565b612955838383612c94565b505050565b600061297b8473ffffffffffffffffffffffffffffffffffffffff16612da8565b15612ae4578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026129a4611f3d565b8786866040518563ffffffff1660e01b81526004016129c69493929190613c27565b602060405180830381600087803b1580156129e057600080fd5b505af1925050508015612a1157506040513d601f19601f82011682018060405250810190612a0e91906136dc565b60015b612a94573d8060008114612a41576040519150601f19603f3d011682016040523d82523d6000602084013e612a46565b606091505b50600081511415612a8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a8390613cf9565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612ae9565b600190505b949350505050565b6060600d8054612b0090614265565b80601f0160208091040260200160405190810160405280929190818152602001828054612b2c90614265565b8015612b795780601f10612b4e57610100808354040283529160200191612b79565b820191906000526020600020905b815481529060010190602001808311612b5c57829003601f168201915b5050505050905090565b6060612b8e82611f45565b612bcd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bc490613f39565b60405180910390fd5b6000612bd7612af1565b90506000815111612bf75760405180602001604052806000815250612c22565b80612c0184612dbb565b604051602001612c12929190613be8565b6040516020818303038152906040525b915050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612c9f838383612f68565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612ce257612cdd81612f6d565b612d21565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612d2057612d1f8382612fb6565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612d6457612d5f81613123565b612da3565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612da257612da18282613266565b5b5b505050565b600080823b905060008111915050919050565b60606000821415612e03576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612f63565b600082905060005b60008214612e35578080612e1e906142c8565b915050600a82612e2e919061412f565b9150612e0b565b60008167ffffffffffffffff811115612e77577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015612ea95781602001600182028036833780820191505090505b5090505b60008514612f5c57600182612ec29190614160565b9150600a85612ed1919061433b565b6030612edd91906140d9565b60f81b818381518110612f19577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612f55919061412f565b9450612ead565b8093505050505b919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612fc384611674565b612fcd9190614160565b90506000600760008481526020019081526020016000205490508181146130b2576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506131379190614160565b905060006009600084815260200190815260200160002054905060006008838154811061318d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200154905080600883815481106131d5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548061324a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b600061327183611674565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b8280546132f190614265565b90600052602060002090601f016020900481019282613313576000855561335a565b82601f1061332c57805160ff191683800117855561335a565b8280016001018555821561335a579182015b8281111561335957825182559160200191906001019061333e565b5b509050613367919061338c565b5090565b5080546000825590600052602060002090810190613389919061338c565b50565b5b808211156133a557600081600090555060010161338d565b5090565b60006133bc6133b784614034565b61400f565b9050828152602081018484840111156133d457600080fd5b6133df848285614223565b509392505050565b60006133fa6133f584614065565b61400f565b90508281526020810184848401111561341257600080fd5b61341d848285614223565b509392505050565b60008135905061343481614a4b565b92915050565b60008135905061344981614a62565b92915050565b60008135905061345e81614a79565b92915050565b60008151905061347381614a79565b92915050565b600082601f83011261348a57600080fd5b813561349a8482602086016133a9565b91505092915050565b600082601f8301126134b457600080fd5b81356134c48482602086016133e7565b91505092915050565b6000813590506134dc81614a90565b92915050565b6000815190506134f181614a90565b92915050565b60008135905061350681614aa7565b92915050565b60006020828403121561351e57600080fd5b600061352c84828501613425565b91505092915050565b6000806040838503121561354857600080fd5b600061355685828601613425565b925050602061356785828601613425565b9150509250929050565b60008060006060848603121561358657600080fd5b600061359486828701613425565b93505060206135a586828701613425565b92505060406135b6868287016134cd565b9150509250925092565b600080600080608085870312156135d657600080fd5b60006135e487828801613425565b94505060206135f587828801613425565b9350506040613606878288016134cd565b925050606085013567ffffffffffffffff81111561362357600080fd5b61362f87828801613479565b91505092959194509250565b6000806040838503121561364e57600080fd5b600061365c85828601613425565b925050602061366d8582860161343a565b9150509250929050565b6000806040838503121561368a57600080fd5b600061369885828601613425565b92505060206136a9858286016134cd565b9150509250929050565b6000602082840312156136c557600080fd5b60006136d38482850161344f565b91505092915050565b6000602082840312156136ee57600080fd5b60006136fc84828501613464565b91505092915050565b60006020828403121561371757600080fd5b600082013567ffffffffffffffff81111561373157600080fd5b61373d848285016134a3565b91505092915050565b60006020828403121561375857600080fd5b6000613766848285016134cd565b91505092915050565b60006020828403121561378157600080fd5b600061378f848285016134e2565b91505092915050565b6000602082840312156137aa57600080fd5b60006137b8848285016134f7565b91505092915050565b6137ca81614194565b82525050565b6137d9816141a6565b82525050565b60006137ea82614096565b6137f481856140ac565b9350613804818560208601614232565b61380d81614428565b840191505092915050565b6000613823826140a1565b61382d81856140bd565b935061383d818560208601614232565b61384681614428565b840191505092915050565b600061385c826140a1565b61386681856140ce565b9350613876818560208601614232565b80840191505092915050565b600061388f602b836140bd565b915061389a82614439565b604082019050919050565b60006138b26032836140bd565b91506138bd82614488565b604082019050919050565b60006138d5601e836140bd565b91506138e0826144d7565b602082019050919050565b60006138f86011836140bd565b915061390382614500565b602082019050919050565b600061391b600c836140bd565b915061392682614529565b602082019050919050565b600061393e6026836140bd565b915061394982614552565b604082019050919050565b6000613961601c836140bd565b915061396c826145a1565b602082019050919050565b60006139846024836140bd565b915061398f826145ca565b604082019050919050565b60006139a76019836140bd565b91506139b282614619565b602082019050919050565b60006139ca602c836140bd565b91506139d582614642565b604082019050919050565b60006139ed6038836140bd565b91506139f882614691565b604082019050919050565b6000613a10602a836140bd565b9150613a1b826146e0565b604082019050919050565b6000613a336029836140bd565b9150613a3e8261472f565b604082019050919050565b6000613a566020836140bd565b9150613a618261477e565b602082019050919050565b6000613a796031836140bd565b9150613a84826147a7565b604082019050919050565b6000613a9c600f836140bd565b9150613aa7826147f6565b602082019050919050565b6000613abf602c836140bd565b9150613aca8261481f565b604082019050919050565b6000613ae26020836140bd565b9150613aed8261486e565b602082019050919050565b6000613b056029836140bd565b9150613b1082614897565b604082019050919050565b6000613b28602f836140bd565b9150613b33826148e6565b604082019050919050565b6000613b4b6021836140bd565b9150613b5682614935565b604082019050919050565b6000613b6e6016836140bd565b9150613b7982614984565b602082019050919050565b6000613b916031836140bd565b9150613b9c826149ad565b604082019050919050565b6000613bb4602c836140bd565b9150613bbf826149fc565b604082019050919050565b613bd3816141de565b82525050565b613be28161420c565b82525050565b6000613bf48285613851565b9150613c008284613851565b91508190509392505050565b6000602082019050613c2160008301846137c1565b92915050565b6000608082019050613c3c60008301876137c1565b613c4960208301866137c1565b613c566040830185613bd9565b8181036060830152613c6881846137df565b905095945050505050565b6000604082019050613c8860008301856137c1565b613c956020830184613bd9565b9392505050565b6000602082019050613cb160008301846137d0565b92915050565b60006020820190508181036000830152613cd18184613818565b905092915050565b60006020820190508181036000830152613cf281613882565b9050919050565b60006020820190508181036000830152613d12816138a5565b9050919050565b60006020820190508181036000830152613d32816138c8565b9050919050565b60006020820190508181036000830152613d52816138eb565b9050919050565b60006020820190508181036000830152613d728161390e565b9050919050565b60006020820190508181036000830152613d9281613931565b9050919050565b60006020820190508181036000830152613db281613954565b9050919050565b60006020820190508181036000830152613dd281613977565b9050919050565b60006020820190508181036000830152613df28161399a565b9050919050565b60006020820190508181036000830152613e12816139bd565b9050919050565b60006020820190508181036000830152613e32816139e0565b9050919050565b60006020820190508181036000830152613e5281613a03565b9050919050565b60006020820190508181036000830152613e7281613a26565b9050919050565b60006020820190508181036000830152613e9281613a49565b9050919050565b60006020820190508181036000830152613eb281613a6c565b9050919050565b60006020820190508181036000830152613ed281613a8f565b9050919050565b60006020820190508181036000830152613ef281613ab2565b9050919050565b60006020820190508181036000830152613f1281613ad5565b9050919050565b60006020820190508181036000830152613f3281613af8565b9050919050565b60006020820190508181036000830152613f5281613b1b565b9050919050565b60006020820190508181036000830152613f7281613b3e565b9050919050565b60006020820190508181036000830152613f9281613b61565b9050919050565b60006020820190508181036000830152613fb281613b84565b9050919050565b60006020820190508181036000830152613fd281613ba7565b9050919050565b6000602082019050613fee6000830184613bca565b92915050565b60006020820190506140096000830184613bd9565b92915050565b600061401961402a565b90506140258282614297565b919050565b6000604051905090565b600067ffffffffffffffff82111561404f5761404e6143f9565b5b61405882614428565b9050602081019050919050565b600067ffffffffffffffff8211156140805761407f6143f9565b5b61408982614428565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006140e48261420c565b91506140ef8361420c565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156141245761412361436c565b5b828201905092915050565b600061413a8261420c565b91506141458361420c565b9250826141555761415461439b565b5b828204905092915050565b600061416b8261420c565b91506141768361420c565b9250828210156141895761418861436c565b5b828203905092915050565b600061419f826141ec565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b83811015614250578082015181840152602081019050614235565b8381111561425f576000848401525b50505050565b6000600282049050600182168061427d57607f821691505b60208210811415614291576142906143ca565b5b50919050565b6142a082614428565b810181811067ffffffffffffffff821117156142bf576142be6143f9565b5b80604052505050565b60006142d38261420c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156143065761430561436c565b5b600182019050919050565b600061431c82614216565b915060ff8214156143305761432f61436c565b5b600182019050919050565b60006143468261420c565b91506143518361420c565b9250826143615761436061439b565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f63616e206d696e74206f6e6c79203130206d617820617420612074696d650000600082015250565b7f4e6f20546f6b656e7320746f206d696e74000000000000000000000000000000600082015250565b7f4e6f2053616c652054696d650000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f45524337323155524953746f726167653a2055524920717565727920666f722060008201527f6e6f6e6578697374656e7420746f6b656e000000000000000000000000000000602082015250565b7f546f6b656e207061737320757365640000000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f45786365656473206d6178696d756d20737570706c7900000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b614a5481614194565b8114614a5f57600080fd5b50565b614a6b816141a6565b8114614a7657600080fd5b50565b614a82816141b2565b8114614a8d57600080fd5b50565b614a998161420c565b8114614aa457600080fd5b50565b614ab081614216565b8114614abb57600080fd5b5056fea2646970667358221220c493ceb0adf03c079266dfb997d12f93e27ba2081d279e5a86e072284c00e5f364736f6c634300080300334d722e204576657279626f647920506f7373657373696f6e7320436f6c6c656374696f6e

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106102485760003560e01c8063769f192b1161013b578063ac8daba0116100b8578063d60dfeeb1161007c578063d60dfeeb14610717578063e985e9c514610747578063f2fde38b14610777578063f60dd7e314610793578063ff74f501146107c357610248565b8063ac8daba01461065f578063b86e94a61461067d578063b88d4fde146106ad578063c87b56dd146106c9578063d5abeb01146106f957610248565b80639052eaaf116100ff5780639052eaaf146105a757806395d89b41146105d7578063a22cb465146105f5578063a4cf801f14610611578063aa46a4001461064157610248565b8063769f192b146105155780637944875b1461054557806382d95df51461054f578063881cf1221461056b5780638da5cb5b1461058957610248565b806342842e0e116101c95780636067bb8d1161018d5780636067bb8d1461045f5780636352211e1461048f5780636ecd2306146104bf57806370a08231146104db578063715018a61461050b57610248565b806342842e0e146103a95780634f4702f3146103c55780634f6ccce7146103f557806355f804b3146104255780635abc96221461044157610248565b806318160ddd1161021057806318160ddd146102f157806323b872dd1461030f5780632f745c591461032b578063318aed891461035b5780633a517e0b1461038b57610248565b806301ffc9a71461024d57806303225f4c1461027d57806306fdde0314610287578063081812fc146102a5578063095ea7b3146102d5575b600080fd5b610267600480360381019061026291906136b3565b6107f3565b6040516102749190613c9c565b60405180910390f35b610285610805565b005b61028f6108a5565b60405161029c9190613cb7565b60405180910390f35b6102bf60048036038101906102ba9190613746565b610937565b6040516102cc9190613c0c565b60405180910390f35b6102ef60048036038101906102ea9190613677565b6109bc565b005b6102f9610ad4565b6040516103069190613ff4565b60405180910390f35b61032960048036038101906103249190613571565b610ae1565b005b61034560048036038101906103409190613677565b610b41565b6040516103529190613ff4565b60405180910390f35b6103756004803603810190610370919061350c565b610be6565b6040516103829190613ff4565b60405180910390f35b610393610c9a565b6040516103a09190613ff4565b60405180910390f35b6103c360048036038101906103be9190613571565b610ca7565b005b6103df60048036038101906103da9190613677565b610cc7565b6040516103ec9190613ff4565b60405180910390f35b61040f600480360381019061040a9190613746565b610d7e565b60405161041c9190613ff4565b60405180910390f35b61043f600480360381019061043a9190613705565b610e15565b005b610449610eab565b6040516104569190613c9c565b60405180910390f35b6104796004803603810190610474919061350c565b610ebe565b6040516104869190613ff4565b60405180910390f35b6104a960048036038101906104a49190613746565b610f72565b6040516104b69190613c0c565b60405180910390f35b6104d960048036038101906104d49190613798565b611024565b005b6104f560048036038101906104f0919061350c565b611674565b6040516105029190613ff4565b60405180910390f35b61051361172c565b005b61052f600480360381019061052a9190613746565b6117b4565b60405161053c9190613c9c565b60405180910390f35b61054d6117d4565b005b61056960048036038101906105649190613746565b61186d565b005b6105736118f3565b6040516105809190613ff4565b60405180910390f35b6105916118fb565b60405161059e9190613c0c565b60405180910390f35b6105c160048036038101906105bc9190613746565b611925565b6040516105ce9190613ff4565b60405180910390f35b6105df611949565b6040516105ec9190613cb7565b60405180910390f35b61060f600480360381019061060a919061363b565b6119db565b005b61062b60048036038101906106269190613746565b611b5c565b6040516106389190613c9c565b60405180910390f35b610649611b86565b6040516106569190613ff4565b60405180910390f35b610667611b92565b6040516106749190613ff4565b60405180910390f35b61069760048036038101906106929190613746565b611b98565b6040516106a49190613c9c565b60405180910390f35b6106c760048036038101906106c291906135c0565b611bc2565b005b6106e360048036038101906106de9190613746565b611c24565b6040516106f09190613cb7565b60405180910390f35b610701611c36565b60405161070e9190613fd9565b60405180910390f35b610731600480360381019061072c9190613746565b611c3c565b60405161073e9190613c9c565b60405180910390f35b610761600480360381019061075c9190613535565b611c5c565b60405161076e9190613c9c565b60405180910390f35b610791600480360381019061078c919061350c565b611cf0565b005b6107ad60048036038101906107a89190613677565b611de8565b6040516107ba9190613ff4565b60405180910390f35b6107dd60048036038101906107d89190613746565b611e9f565b6040516107ea9190613ff4565b60405180910390f35b60006107fe82611ec3565b9050919050565b61080d611f3d565b73ffffffffffffffffffffffffffffffffffffffff1661082b6118fb565b73ffffffffffffffffffffffffffffffffffffffff1614610881576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087890613ef9565b60405180910390fd5b42600e819055506001600f60006101000a81548160ff021916908315150217905550565b6060600080546108b490614265565b80601f01602080910402602001604051908101604052809291908181526020018280546108e090614265565b801561092d5780601f106109025761010080835404028352916020019161092d565b820191906000526020600020905b81548152906001019060200180831161091057829003601f168201915b5050505050905090565b600061094282611f45565b610981576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161097890613ed9565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006109c782610f72565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2f90613f59565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a57611f3d565b73ffffffffffffffffffffffffffffffffffffffff161480610a865750610a8581610a80611f3d565b611c5c565b5b610ac5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610abc90613e19565b60405180910390fd5b610acf8383611fb1565b505050565b6000600880549050905090565b610af2610aec611f3d565b8261206a565b610b31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2890613f99565b60405180910390fd5b610b3c838383612148565b505050565b6000610b4c83611674565b8210610b8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8490613cd9565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b6000600f60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231836040518263ffffffff1660e01b8152600401610c439190613c0c565b60206040518083038186803b158015610c5b57600080fd5b505afa158015610c6f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c93919061376f565b9050919050565b6000601480549050905090565b610cc283838360405180602001604052806000815250611bc2565b505050565b6000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632f745c5984846040518363ffffffff1660e01b8152600401610d26929190613c73565b60206040518083038186803b158015610d3e57600080fd5b505afa158015610d52573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d76919061376f565b905092915050565b6000610d88610ad4565b8210610dc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc090613fb9565b60405180910390fd5b60088281548110610e03577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b610e1d611f3d565b73ffffffffffffffffffffffffffffffffffffffff16610e3b6118fb565b73ffffffffffffffffffffffffffffffffffffffff1614610e91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8890613ef9565b60405180910390fd5b80600d9080519060200190610ea79291906132e5565b5050565b600f60009054906101000a900460ff1681565b6000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231836040518263ffffffff1660e01b8152600401610f1b9190613c0c565b60206040518083038186803b158015610f3357600080fd5b505afa158015610f47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f6b919061376f565b9050919050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561101b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101290613e59565b60405180910390fd5b80915050919050565b60146000611032919061336b565b60166000611040919061336b565b600a8160ff161115611087576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107e90613d19565b60405180910390fd5b61066461ffff16611096610ad4565b8260ff166110a491906140d9565b11156110e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110dc90613f79565b60405180910390fd5b60011515600f60009054906101000a900460ff1615151461113b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113290613d59565b60405180910390fd5b6000600f60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b81526004016111989190613c0c565b60206040518083038186803b1580156111b057600080fd5b505afa1580156111c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111e8919061376f565b118061129e57506000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b815260040161124c9190613c0c565b60206040518083038186803b15801561126457600080fd5b505afa158015611278573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061129c919061376f565b115b156116365760005b6112af33610be6565b8110156113445760006112c23383611de8565b9050600115156013600083815260200190815260200160002060009054906101000a900460ff1615151461131a5760148290806001815401808255809150506001900390600052602060002001600090919091909150555b8260ff1660148054905014156113305750611344565b50808061133c906142c8565b9150506112a6565b508060ff16601480549050146114075760005b61136033610ebe565b8110156114055760006113733383610cc7565b9050600115156015600083815260200190815260200160002060009054906101000a900460ff161515146113cb5760168290806001815401808255809150506001900390600052602060002001600090919091909150555b8260ff166014805490506016805490506113e591906140d9565b14156113f15750611405565b5080806113fd906142c8565b915050611357565b505b8060ff1660168054905060148054905061142191906140d9565b14611461576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145890613eb9565b60405180910390fd5b60005b6014805490508160ff1610156115405760006114c73360148460ff16815481106114b7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200154611de8565b90506114d2816123a4565b6114dc600c6123d3565b60006114e8600c6123e9565b90507f6c29ed792f8b613fbba10b9e105a1dcebd92b4dd7938e36de410329ef452a285816040516115199190613ff4565b60405180910390a161152b33826123f7565b5050808061153890614311565b915050611464565b508060ff16601480549050146116315760005b6016805490508160ff16101561162f5760006115b63360168460ff16815481106115a6577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200154610cc7565b90506115c1816125c5565b6115cb600c6123d3565b60006115d7600c6123e9565b90507f6c29ed792f8b613fbba10b9e105a1dcebd92b4dd7938e36de410329ef452a285816040516116089190613ff4565b60405180910390a161161a33826123f7565b5050808061162790614311565b915050611553565b505b611671565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166890613d39565b60405180910390fd5b50565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156116e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116dc90613e39565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611734611f3d565b73ffffffffffffffffffffffffffffffffffffffff166117526118fb565b73ffffffffffffffffffffffffffffffffffffffff16146117a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179f90613ef9565b60405180910390fd5b6117b260006125f4565b565b60156020528060005260406000206000915054906101000a900460ff1681565b6117dc611f3d565b73ffffffffffffffffffffffffffffffffffffffff166117fa6118fb565b73ffffffffffffffffffffffffffffffffffffffff1614611850576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184790613ef9565b60405180910390fd5b6000600f60006101000a81548160ff021916908315150217905550565b611875611f3d565b73ffffffffffffffffffffffffffffffffffffffff166118936118fb565b73ffffffffffffffffffffffffffffffffffffffff16146118e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e090613ef9565b60405180910390fd5b80600e8190555050565b600042905090565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6014818154811061193557600080fd5b906000526020600020016000915090505481565b60606001805461195890614265565b80601f016020809104026020016040519081016040528092919081815260200182805461198490614265565b80156119d15780601f106119a6576101008083540402835291602001916119d1565b820191906000526020600020905b8154815290600101906020018083116119b457829003601f168201915b5050505050905090565b6119e3611f3d565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4890613dd9565b60405180910390fd5b8060056000611a5e611f3d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611b0b611f3d565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611b509190613c9c565b60405180910390a35050565b60006015600083815260200190815260200160002060009054906101000a900460ff169050919050565b600c8060000154905081565b600e5481565b60006013600083815260200190815260200160002060009054906101000a900460ff169050919050565b611bd3611bcd611f3d565b8361206a565b611c12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0990613f99565b60405180910390fd5b611c1e848484846126ba565b50505050565b6060611c2f82612716565b9050919050565b61066481565b60136020528060005260406000206000915054906101000a900460ff1681565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611cf8611f3d565b73ffffffffffffffffffffffffffffffffffffffff16611d166118fb565b73ffffffffffffffffffffffffffffffffffffffff1614611d6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6390613ef9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611ddc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd390613d79565b60405180910390fd5b611de5816125f4565b50565b6000600f60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632f745c5984846040518363ffffffff1660e01b8152600401611e47929190613c73565b60206040518083038186803b158015611e5f57600080fd5b505afa158015611e73573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e97919061376f565b905092915050565b60168181548110611eaf57600080fd5b906000526020600020016000915090505481565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611f365750611f3582612868565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661202483610f72565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061207582611f45565b6120b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ab90613df9565b60405180910390fd5b60006120bf83610f72565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061212e57508373ffffffffffffffffffffffffffffffffffffffff1661211684610937565b73ffffffffffffffffffffffffffffffffffffffff16145b8061213f575061213e8185611c5c565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661216882610f72565b73ffffffffffffffffffffffffffffffffffffffff16146121be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b590613f19565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561222e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222590613db9565b60405180910390fd5b61223983838361294a565b612244600082611fb1565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546122949190614160565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546122eb91906140d9565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60016013600083815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6001816000016000828254019250508190555050565b600081600001549050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612467576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245e90613e79565b60405180910390fd5b61247081611f45565b156124b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124a790613d99565b60405180910390fd5b6124bc6000838361294a565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461250c91906140d9565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b60016015600083815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6126c5848484612148565b6126d18484848461295a565b612710576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161270790613cf9565b60405180910390fd5b50505050565b606061272182611f45565b612760576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161275790613e99565b60405180910390fd5b6000600a6000848152602001908152602001600020805461278090614265565b80601f01602080910402602001604051908101604052809291908181526020018280546127ac90614265565b80156127f95780601f106127ce576101008083540402835291602001916127f9565b820191906000526020600020905b8154815290600101906020018083116127dc57829003601f168201915b50505050509050600061280a612af1565b9050600081511415612820578192505050612863565b60008251111561285557808260405160200161283d929190613be8565b60405160208183030381529060405292505050612863565b61285e84612b83565b925050505b919050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061293357507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612943575061294282612c2a565b5b9050919050565b612955838383612c94565b505050565b600061297b8473ffffffffffffffffffffffffffffffffffffffff16612da8565b15612ae4578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026129a4611f3d565b8786866040518563ffffffff1660e01b81526004016129c69493929190613c27565b602060405180830381600087803b1580156129e057600080fd5b505af1925050508015612a1157506040513d601f19601f82011682018060405250810190612a0e91906136dc565b60015b612a94573d8060008114612a41576040519150601f19603f3d011682016040523d82523d6000602084013e612a46565b606091505b50600081511415612a8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a8390613cf9565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612ae9565b600190505b949350505050565b6060600d8054612b0090614265565b80601f0160208091040260200160405190810160405280929190818152602001828054612b2c90614265565b8015612b795780601f10612b4e57610100808354040283529160200191612b79565b820191906000526020600020905b815481529060010190602001808311612b5c57829003601f168201915b5050505050905090565b6060612b8e82611f45565b612bcd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bc490613f39565b60405180910390fd5b6000612bd7612af1565b90506000815111612bf75760405180602001604052806000815250612c22565b80612c0184612dbb565b604051602001612c12929190613be8565b6040516020818303038152906040525b915050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612c9f838383612f68565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612ce257612cdd81612f6d565b612d21565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612d2057612d1f8382612fb6565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612d6457612d5f81613123565b612da3565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612da257612da18282613266565b5b5b505050565b600080823b905060008111915050919050565b60606000821415612e03576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612f63565b600082905060005b60008214612e35578080612e1e906142c8565b915050600a82612e2e919061412f565b9150612e0b565b60008167ffffffffffffffff811115612e77577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015612ea95781602001600182028036833780820191505090505b5090505b60008514612f5c57600182612ec29190614160565b9150600a85612ed1919061433b565b6030612edd91906140d9565b60f81b818381518110612f19577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612f55919061412f565b9450612ead565b8093505050505b919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612fc384611674565b612fcd9190614160565b90506000600760008481526020019081526020016000205490508181146130b2576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506131379190614160565b905060006009600084815260200190815260200160002054905060006008838154811061318d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200154905080600883815481106131d5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548061324a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b600061327183611674565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b8280546132f190614265565b90600052602060002090601f016020900481019282613313576000855561335a565b82601f1061332c57805160ff191683800117855561335a565b8280016001018555821561335a579182015b8281111561335957825182559160200191906001019061333e565b5b509050613367919061338c565b5090565b5080546000825590600052602060002090810190613389919061338c565b50565b5b808211156133a557600081600090555060010161338d565b5090565b60006133bc6133b784614034565b61400f565b9050828152602081018484840111156133d457600080fd5b6133df848285614223565b509392505050565b60006133fa6133f584614065565b61400f565b90508281526020810184848401111561341257600080fd5b61341d848285614223565b509392505050565b60008135905061343481614a4b565b92915050565b60008135905061344981614a62565b92915050565b60008135905061345e81614a79565b92915050565b60008151905061347381614a79565b92915050565b600082601f83011261348a57600080fd5b813561349a8482602086016133a9565b91505092915050565b600082601f8301126134b457600080fd5b81356134c48482602086016133e7565b91505092915050565b6000813590506134dc81614a90565b92915050565b6000815190506134f181614a90565b92915050565b60008135905061350681614aa7565b92915050565b60006020828403121561351e57600080fd5b600061352c84828501613425565b91505092915050565b6000806040838503121561354857600080fd5b600061355685828601613425565b925050602061356785828601613425565b9150509250929050565b60008060006060848603121561358657600080fd5b600061359486828701613425565b93505060206135a586828701613425565b92505060406135b6868287016134cd565b9150509250925092565b600080600080608085870312156135d657600080fd5b60006135e487828801613425565b94505060206135f587828801613425565b9350506040613606878288016134cd565b925050606085013567ffffffffffffffff81111561362357600080fd5b61362f87828801613479565b91505092959194509250565b6000806040838503121561364e57600080fd5b600061365c85828601613425565b925050602061366d8582860161343a565b9150509250929050565b6000806040838503121561368a57600080fd5b600061369885828601613425565b92505060206136a9858286016134cd565b9150509250929050565b6000602082840312156136c557600080fd5b60006136d38482850161344f565b91505092915050565b6000602082840312156136ee57600080fd5b60006136fc84828501613464565b91505092915050565b60006020828403121561371757600080fd5b600082013567ffffffffffffffff81111561373157600080fd5b61373d848285016134a3565b91505092915050565b60006020828403121561375857600080fd5b6000613766848285016134cd565b91505092915050565b60006020828403121561378157600080fd5b600061378f848285016134e2565b91505092915050565b6000602082840312156137aa57600080fd5b60006137b8848285016134f7565b91505092915050565b6137ca81614194565b82525050565b6137d9816141a6565b82525050565b60006137ea82614096565b6137f481856140ac565b9350613804818560208601614232565b61380d81614428565b840191505092915050565b6000613823826140a1565b61382d81856140bd565b935061383d818560208601614232565b61384681614428565b840191505092915050565b600061385c826140a1565b61386681856140ce565b9350613876818560208601614232565b80840191505092915050565b600061388f602b836140bd565b915061389a82614439565b604082019050919050565b60006138b26032836140bd565b91506138bd82614488565b604082019050919050565b60006138d5601e836140bd565b91506138e0826144d7565b602082019050919050565b60006138f86011836140bd565b915061390382614500565b602082019050919050565b600061391b600c836140bd565b915061392682614529565b602082019050919050565b600061393e6026836140bd565b915061394982614552565b604082019050919050565b6000613961601c836140bd565b915061396c826145a1565b602082019050919050565b60006139846024836140bd565b915061398f826145ca565b604082019050919050565b60006139a76019836140bd565b91506139b282614619565b602082019050919050565b60006139ca602c836140bd565b91506139d582614642565b604082019050919050565b60006139ed6038836140bd565b91506139f882614691565b604082019050919050565b6000613a10602a836140bd565b9150613a1b826146e0565b604082019050919050565b6000613a336029836140bd565b9150613a3e8261472f565b604082019050919050565b6000613a566020836140bd565b9150613a618261477e565b602082019050919050565b6000613a796031836140bd565b9150613a84826147a7565b604082019050919050565b6000613a9c600f836140bd565b9150613aa7826147f6565b602082019050919050565b6000613abf602c836140bd565b9150613aca8261481f565b604082019050919050565b6000613ae26020836140bd565b9150613aed8261486e565b602082019050919050565b6000613b056029836140bd565b9150613b1082614897565b604082019050919050565b6000613b28602f836140bd565b9150613b33826148e6565b604082019050919050565b6000613b4b6021836140bd565b9150613b5682614935565b604082019050919050565b6000613b6e6016836140bd565b9150613b7982614984565b602082019050919050565b6000613b916031836140bd565b9150613b9c826149ad565b604082019050919050565b6000613bb4602c836140bd565b9150613bbf826149fc565b604082019050919050565b613bd3816141de565b82525050565b613be28161420c565b82525050565b6000613bf48285613851565b9150613c008284613851565b91508190509392505050565b6000602082019050613c2160008301846137c1565b92915050565b6000608082019050613c3c60008301876137c1565b613c4960208301866137c1565b613c566040830185613bd9565b8181036060830152613c6881846137df565b905095945050505050565b6000604082019050613c8860008301856137c1565b613c956020830184613bd9565b9392505050565b6000602082019050613cb160008301846137d0565b92915050565b60006020820190508181036000830152613cd18184613818565b905092915050565b60006020820190508181036000830152613cf281613882565b9050919050565b60006020820190508181036000830152613d12816138a5565b9050919050565b60006020820190508181036000830152613d32816138c8565b9050919050565b60006020820190508181036000830152613d52816138eb565b9050919050565b60006020820190508181036000830152613d728161390e565b9050919050565b60006020820190508181036000830152613d9281613931565b9050919050565b60006020820190508181036000830152613db281613954565b9050919050565b60006020820190508181036000830152613dd281613977565b9050919050565b60006020820190508181036000830152613df28161399a565b9050919050565b60006020820190508181036000830152613e12816139bd565b9050919050565b60006020820190508181036000830152613e32816139e0565b9050919050565b60006020820190508181036000830152613e5281613a03565b9050919050565b60006020820190508181036000830152613e7281613a26565b9050919050565b60006020820190508181036000830152613e9281613a49565b9050919050565b60006020820190508181036000830152613eb281613a6c565b9050919050565b60006020820190508181036000830152613ed281613a8f565b9050919050565b60006020820190508181036000830152613ef281613ab2565b9050919050565b60006020820190508181036000830152613f1281613ad5565b9050919050565b60006020820190508181036000830152613f3281613af8565b9050919050565b60006020820190508181036000830152613f5281613b1b565b9050919050565b60006020820190508181036000830152613f7281613b3e565b9050919050565b60006020820190508181036000830152613f9281613b61565b9050919050565b60006020820190508181036000830152613fb281613b84565b9050919050565b60006020820190508181036000830152613fd281613ba7565b9050919050565b6000602082019050613fee6000830184613bca565b92915050565b60006020820190506140096000830184613bd9565b92915050565b600061401961402a565b90506140258282614297565b919050565b6000604051905090565b600067ffffffffffffffff82111561404f5761404e6143f9565b5b61405882614428565b9050602081019050919050565b600067ffffffffffffffff8211156140805761407f6143f9565b5b61408982614428565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006140e48261420c565b91506140ef8361420c565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156141245761412361436c565b5b828201905092915050565b600061413a8261420c565b91506141458361420c565b9250826141555761415461439b565b5b828204905092915050565b600061416b8261420c565b91506141768361420c565b9250828210156141895761418861436c565b5b828203905092915050565b600061419f826141ec565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b83811015614250578082015181840152602081019050614235565b8381111561425f576000848401525b50505050565b6000600282049050600182168061427d57607f821691505b60208210811415614291576142906143ca565b5b50919050565b6142a082614428565b810181811067ffffffffffffffff821117156142bf576142be6143f9565b5b80604052505050565b60006142d38261420c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156143065761430561436c565b5b600182019050919050565b600061431c82614216565b915060ff8214156143305761432f61436c565b5b600182019050919050565b60006143468261420c565b91506143518361420c565b9250826143615761436061439b565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f63616e206d696e74206f6e6c79203130206d617820617420612074696d650000600082015250565b7f4e6f20546f6b656e7320746f206d696e74000000000000000000000000000000600082015250565b7f4e6f2053616c652054696d650000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f45524337323155524953746f726167653a2055524920717565727920666f722060008201527f6e6f6e6578697374656e7420746f6b656e000000000000000000000000000000602082015250565b7f546f6b656e207061737320757365640000000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f45786365656473206d6178696d756d20737570706c7900000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b614a5481614194565b8114614a5f57600080fd5b50565b614a6b816141a6565b8114614a7657600080fd5b50565b614a82816141b2565b8114614a8d57600080fd5b50565b614a998161420c565b8114614aa457600080fd5b50565b614ab081614216565b8114614abb57600080fd5b5056fea2646970667358221220c493ceb0adf03c079266dfb997d12f93e27ba2081d279e5a86e072284c00e5f364736f6c63430008030033

Deployed Bytecode Sourcemap

56687:6386:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;59165:212;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;57662:114;;;:::i;:::-;;26216:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27775:221;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27298:411;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38854:113;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28665:339;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38522:256;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;58323:132;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;62757:103;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29075:185;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;59805:168;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39044:233;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;59387:120;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;56980:32;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;58463:132;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25910:239;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;60012:2737;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25640:208;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3849:94;;;:::i;:::-;;57368:53;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;58236:75;;;:::i;:::-;;58835:99;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;58608:88;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3198:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;57336:22;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26385:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28068:295;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;58101:123;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;56803:33;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;56936:25;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;57877:105;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29331:328;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;62874:196;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;56849:39;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;57282:44;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28434:164;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4098:192;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;59629:168;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;57428:31;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;59165:212;59304:4;59333:36;59357:11;59333:23;:36::i;:::-;59326:43;;59165:212;;;:::o;57662:114::-;3429:12;:10;:12::i;:::-;3418:23;;:7;:5;:7::i;:::-;:23;;;3410:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;57723:15:::1;57710:10;:28;;;;57764:4;57749:12;;:19;;;;;;;;;;;;;;;;;;57662:114::o:0;26216:100::-;26270:13;26303:5;26296:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26216:100;:::o;27775:221::-;27851:7;27879:16;27887:7;27879;:16::i;:::-;27871:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27964:15;:24;27980:7;27964:24;;;;;;;;;;;;;;;;;;;;;27957:31;;27775:221;;;:::o;27298:411::-;27379:13;27395:23;27410:7;27395:14;:23::i;:::-;27379:39;;27443:5;27437:11;;:2;:11;;;;27429:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;27537:5;27521:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;27546:37;27563:5;27570:12;:10;:12::i;:::-;27546:16;:37::i;:::-;27521:62;27499:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;27680:21;27689:2;27693:7;27680:8;:21::i;:::-;27298:411;;;:::o;38854:113::-;38915:7;38942:10;:17;;;;38935:24;;38854:113;:::o;28665:339::-;28860:41;28879:12;:10;:12::i;:::-;28893:7;28860:18;:41::i;:::-;28852:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;28968:28;28978:4;28984:2;28988:7;28968:9;:28::i;:::-;28665:339;;;:::o;38522:256::-;38619:7;38655:23;38672:5;38655:16;:23::i;:::-;38647:5;:31;38639:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;38744:12;:19;38757:5;38744:19;;;;;;;;;;;;;;;:26;38764:5;38744:26;;;;;;;;;;;;38737:33;;38522:256;;;;:::o;58323:132::-;58385:15;58419:13;;;;;;;;;;;:23;;;58443:3;58419:28;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;58412:35;;58323:132;;;:::o;62757:103::-;62805:7;62837:8;:15;;;;62830:22;;62757:103;:::o;29075:185::-;29213:39;29230:4;29236:2;29240:7;29213:39;;;;;;;;;;;;:16;:39::i;:::-;29075:185;;;:::o;59805:168::-;59885:15;59919:12;;;;;;;;;;;:32;;;59952:5;59958:6;59919:46;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;59912:53;;59805:168;;;;:::o;39044:233::-;39119:7;39155:30;:28;:30::i;:::-;39147:5;:38;39139:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;39252:10;39263:5;39252:17;;;;;;;;;;;;;;;;;;;;;;;;39245:24;;39044:233;;;:::o;59387:120::-;3429:12;:10;:12::i;:::-;3418:23;;:7;:5;:7::i;:::-;:23;;;3410:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;59483:16:::1;59467:13;:32;;;;;;;;;;;;:::i;:::-;;59387:120:::0;:::o;56980:32::-;;;;;;;;;;;;;:::o;58463:132::-;58526:15;58560:12;;;;;;;;;;;:22;;;58583:3;58560:27;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;58553:34;;58463:132;;;:::o;25910:239::-;25982:7;26002:13;26018:7;:16;26026:7;26018:16;;;;;;;;;;;;;;;;;;;;;26002:32;;26070:1;26053:19;;:5;:19;;;;26045:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26136:5;26129:12;;;25910:239;;;:::o;60012:2737::-;60085:8;;60078:15;;;;:::i;:::-;60111:17;;60104:24;;;;:::i;:::-;60167:2;60148:15;:21;;;;60140:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;56884:4;60222:46;;60241:13;:11;:13::i;:::-;60223:15;:31;;;;;;:::i;:::-;60222:46;;60214:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;60328:4;60312:20;;:12;;;;;;;;;;;:20;;;60304:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;60476:1;60438:13;;;;;;;;;;;:23;;;60462:10;60438:35;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:39;:81;;;;60518:1;60481:12;;;;;;;;;;;:22;;;60504:10;60481:34;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:38;60438:81;60435:2303;;;60547:9;60543:467;60566:30;60585:10;60566:18;:30::i;:::-;60562:1;:34;60543:467;;;60639:15;60657:32;60676:10;60687:1;60657:18;:32::i;:::-;60639:50;;60743:4;60719:28;;:12;:21;60732:7;60719:21;;;;;;;;;;;;;;;;;;;;;:28;;;60716:108;;60780:8;60794:1;60780:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;60716:108;60872:15;60853:34;;:8;:15;;;;:34;60850:128;;;60945:5;;;60850:128;60543:467;60598:3;;;;;:::i;:::-;;;;60543:467;;;;61046:15;61027:34;;:8;:15;;;;:34;61024:559;;61085:9;61081:487;61102:31;61122:10;61102:19;:31::i;:::-;61098:1;:35;61081:487;;;61162:15;61180:33;61200:10;61211:1;61180:19;:33::i;:::-;61162:51;;61276:4;61243:37;;:21;:30;61265:7;61243:30;;;;;;;;;;;;;;;;;;;;;:37;;;61240:126;;61313:17;61336:1;61313:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;61240:126;61441:15;61395:61;;61422:8;:15;;;;61395:17;:24;;;;:42;;;;:::i;:::-;:61;61392:155;;;61514:5;;;61392:155;61081:487;61135:3;;;;;:::i;:::-;;;;61081:487;;;;61024:559;61658:15;61612:61;;61630:17;:24;;;;61612:8;:15;;;;:42;;;;:::i;:::-;:61;61604:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;61735:7;61731:391;61752:8;:15;;;;61748:1;:19;;;61731:391;;;61792:15;61810:42;61829:10;61840:8;61849:1;61840:11;;;;;;;;;;;;;;;;;;;;;;;;;;61810:18;:42::i;:::-;61792:60;;61877:18;61887:7;61877:9;:18::i;:::-;61918:21;:9;:19;:21::i;:::-;61962:17;61982:19;:9;:17;:19::i;:::-;61962:39;;62029:22;62041:9;62029:22;;;;;;:::i;:::-;;;;;;;;62074:28;62080:10;62092:9;62074:5;:28::i;:::-;61731:391;;61769:3;;;;;:::i;:::-;;;;61731:391;;;;62164:15;62145:34;;:8;:15;;;;:34;62142:496;;62204:7;62200:419;62221:17;:24;;;;62217:1;:28;;;62200:419;;;62270:15;62288:52;62308:10;62319:17;62337:1;62319:20;;;;;;;;;;;;;;;;;;;;;;;;;;62288:19;:52::i;:::-;62270:70;;62365:27;62384:7;62365:18;:27::i;:::-;62415:21;:9;:19;:21::i;:::-;62459:17;62479:19;:9;:17;:19::i;:::-;62459:39;;62526:22;62538:9;62526:22;;;;;;:::i;:::-;;;;;;;;62571:28;62577:10;62589:9;62571:5;:28::i;:::-;62200:419;;62247:3;;;;;:::i;:::-;;;;62200:419;;;;62142:496;60435:2303;;;62699:27;;;;;;;;;;:::i;:::-;;;;;;;;60435:2303;60012:2737;:::o;25640:208::-;25712:7;25757:1;25740:19;;:5;:19;;;;25732:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;25824:9;:16;25834:5;25824:16;;;;;;;;;;;;;;;;25817:23;;25640:208;;;:::o;3849:94::-;3429:12;:10;:12::i;:::-;3418:23;;:7;:5;:7::i;:::-;:23;;;3410:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3914:21:::1;3932:1;3914:9;:21::i;:::-;3849:94::o:0;57368:53::-;;;;;;;;;;;;;;;;;;;;;;:::o;58236:75::-;3429:12;:10;:12::i;:::-;3418:23;;:7;:5;:7::i;:::-;:23;;;3410:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;58298:5:::1;58283:12;;:20;;;;;;;;;;;;;;;;;;58236:75::o:0;58835:99::-;3429:12;:10;:12::i;:::-;3418:23;;:7;:5;:7::i;:::-;:23;;;3410:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;58917:9:::1;58904:10;:22;;;;58835:99:::0;:::o;58608:88::-;58647:7;58673:15;58666:22;;58608:88;:::o;3198:87::-;3244:7;3271:6;;;;;;;;;;;3264:13;;3198:87;:::o;57336:22::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;26385:104::-;26441:13;26474:7;26467:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26385:104;:::o;28068:295::-;28183:12;:10;:12::i;:::-;28171:24;;:8;:24;;;;28163:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;28283:8;28238:18;:32;28257:12;:10;:12::i;:::-;28238:32;;;;;;;;;;;;;;;:42;28271:8;28238:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;28336:8;28307:48;;28322:12;:10;:12::i;:::-;28307:48;;;28346:8;28307:48;;;;;;:::i;:::-;;;;;;;;28068:295;;:::o;58101:123::-;58163:8;58190:21;:26;58212:3;58190:26;;;;;;;;;;;;;;;;;;;;;58183:33;;58101:123;;;:::o;56803:33::-;;;;;;;;;:::o;56936:25::-;;;;:::o;57877:105::-;57930:8;57957:12;:17;57970:3;57957:17;;;;;;;;;;;;;;;;;;;;;57950:24;;57877:105;;;:::o;29331:328::-;29506:41;29525:12;:10;:12::i;:::-;29539:7;29506:18;:41::i;:::-;29498:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;29612:39;29626:4;29632:2;29636:7;29645:5;29612:13;:39::i;:::-;29331:328;;;;:::o;62874:196::-;63001:13;63039:23;63054:7;63039:14;:23::i;:::-;63032:30;;62874:196;;;:::o;56849:39::-;56884:4;56849:39;:::o;57282:44::-;;;;;;;;;;;;;;;;;;;;;;:::o;28434:164::-;28531:4;28555:18;:25;28574:5;28555:25;;;;;;;;;;;;;;;:35;28581:8;28555:35;;;;;;;;;;;;;;;;;;;;;;;;;28548:42;;28434:164;;;;:::o;4098:192::-;3429:12;:10;:12::i;:::-;3418:23;;:7;:5;:7::i;:::-;:23;;;3410:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4207:1:::1;4187:22;;:8;:22;;;;4179:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;4263:19;4273:8;4263:9;:19::i;:::-;4098:192:::0;:::o;59629:168::-;59708:15;59742:13;;;;;;;;;;;:33;;;59776:5;59782:6;59742:47;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;59735:54;;59629:168;;;;:::o;57428:31::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;38214:224::-;38316:4;38355:35;38340:50;;;:11;:50;;;;:90;;;;38394:36;38418:11;38394:23;:36::i;:::-;38340:90;38333:97;;38214:224;;;:::o;2043:98::-;2096:7;2123:10;2116:17;;2043:98;:::o;31169:127::-;31234:4;31286:1;31258:30;;:7;:16;31266:7;31258:16;;;;;;;;;;;;;;;;;;;;;:30;;;;31251:37;;31169:127;;;:::o;35151:174::-;35253:2;35226:15;:24;35242:7;35226:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;35309:7;35305:2;35271:46;;35280:23;35295:7;35280:14;:23::i;:::-;35271:46;;;;;;;;;;;;35151:174;;:::o;31463:348::-;31556:4;31581:16;31589:7;31581;:16::i;:::-;31573:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;31657:13;31673:23;31688:7;31673:14;:23::i;:::-;31657:39;;31726:5;31715:16;;:7;:16;;;:51;;;;31759:7;31735:31;;:20;31747:7;31735:11;:20::i;:::-;:31;;;31715:51;:87;;;;31770:32;31787:5;31794:7;31770:16;:32::i;:::-;31715:87;31707:96;;;31463:348;;;;:::o;34455:578::-;34614:4;34587:31;;:23;34602:7;34587:14;:23::i;:::-;:31;;;34579:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;34697:1;34683:16;;:2;:16;;;;34675:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;34753:39;34774:4;34780:2;34784:7;34753:20;:39::i;:::-;34857:29;34874:1;34878:7;34857:8;:29::i;:::-;34918:1;34899:9;:15;34909:4;34899:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;34947:1;34930:9;:13;34940:2;34930:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;34978:2;34959:7;:16;34967:7;34959:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;35017:7;35013:2;34998:27;;35007:4;34998:27;;;;;;;;;;;;34455:578;;;:::o;57784:85::-;57855:4;57835:12;:17;57848:3;57835:17;;;;;;;;;;;;:24;;;;;;;;;;;;;;;;;;57784:85;:::o;951:127::-;1058:1;1040:7;:14;;;:19;;;;;;;;;;;951:127;:::o;829:114::-;894:7;921;:14;;;914:21;;829:114;;;:::o;33147:382::-;33241:1;33227:16;;:2;:16;;;;33219:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;33300:16;33308:7;33300;:16::i;:::-;33299:17;33291:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;33362:45;33391:1;33395:2;33399:7;33362:20;:45::i;:::-;33437:1;33420:9;:13;33430:2;33420:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;33468:2;33449:7;:16;33457:7;33449:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;33513:7;33509:2;33488:33;;33505:1;33488:33;;;;;;;;;;;;33147:382;;:::o;57990:103::-;58079:4;58050:21;:26;58072:3;58050:26;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;57990:103;:::o;4298:173::-;4354:16;4373:6;;;;;;;;;;;4354:25;;4399:8;4390:6;;:17;;;;;;;;;;;;;;;;;;4454:8;4423:40;;4444:8;4423:40;;;;;;;;;;;;4298:173;;:::o;30541:315::-;30698:28;30708:4;30714:2;30718:7;30698:9;:28::i;:::-;30745:48;30768:4;30774:2;30778:7;30787:5;30745:22;:48::i;:::-;30737:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;30541:315;;;;:::o;44707:679::-;44780:13;44814:16;44822:7;44814;:16::i;:::-;44806:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;44897:23;44923:10;:19;44934:7;44923:19;;;;;;;;;;;44897:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44953:18;44974:10;:8;:10::i;:::-;44953:31;;45082:1;45066:4;45060:18;:23;45056:72;;;45107:9;45100:16;;;;;;45056:72;45258:1;45238:9;45232:23;:27;45228:108;;;45307:4;45313:9;45290:33;;;;;;;;;:::i;:::-;;;;;;;;;;;;;45276:48;;;;;;45228:108;45355:23;45370:7;45355:14;:23::i;:::-;45348:30;;;;44707:679;;;;:::o;25271:305::-;25373:4;25425:25;25410:40;;;:11;:40;;;;:105;;;;25482:33;25467:48;;;:11;:48;;;;25410:105;:158;;;;25532:36;25556:11;25532:23;:36::i;:::-;25410:158;25390:178;;25271:305;;;:::o;58942:215::-;59104:45;59131:4;59137:2;59141:7;59104:26;:45::i;:::-;58942:215;;;:::o;35890:803::-;36045:4;36066:15;:2;:13;;;:15::i;:::-;36062:624;;;36118:2;36102:36;;;36139:12;:10;:12::i;:::-;36153:4;36159:7;36168:5;36102:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;36098:533;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36365:1;36348:6;:13;:18;36344:272;;;36391:60;;;;;;;;;;:::i;:::-;;;;;;;;36344:272;36566:6;36560:13;36551:6;36547:2;36543:15;36536:38;36098:533;36235:45;;;36225:55;;;:6;:55;;;;36218:62;;;;;36062:624;36670:4;36663:11;;35890:803;;;;;;;:::o;59515:106::-;59567:13;59600;59593:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;59515:106;:::o;26560:334::-;26633:13;26667:16;26675:7;26667;:16::i;:::-;26659:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;26748:21;26772:10;:8;:10::i;:::-;26748:34;;26824:1;26806:7;26800:21;:25;:86;;;;;;;;;;;;;;;;;26852:7;26861:18;:7;:16;:18::i;:::-;26835:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;26800:86;26793:93;;;26560:334;;;:::o;6309:157::-;6394:4;6433:25;6418:40;;;:11;:40;;;;6411:47;;6309:157;;;:::o;39890:589::-;40034:45;40061:4;40067:2;40071:7;40034:26;:45::i;:::-;40112:1;40096:18;;:4;:18;;;40092:187;;;40131:40;40163:7;40131:31;:40::i;:::-;40092:187;;;40201:2;40193:10;;:4;:10;;;40189:90;;40220:47;40253:4;40259:7;40220:32;:47::i;:::-;40189:90;40092:187;40307:1;40293:16;;:2;:16;;;40289:183;;;40326:45;40363:7;40326:36;:45::i;:::-;40289:183;;;40399:4;40393:10;;:2;:10;;;40389:83;;40420:40;40448:2;40452:7;40420:27;:40::i;:::-;40389:83;40289:183;39890:589;;;:::o;9355:387::-;9415:4;9623:12;9690:7;9678:20;9670:28;;9733:1;9726:4;:8;9719:15;;;9355:387;;;:::o;6780:723::-;6836:13;7066:1;7057:5;:10;7053:53;;;7084:10;;;;;;;;;;;;;;;;;;;;;7053:53;7116:12;7131:5;7116:20;;7147:14;7172:78;7187:1;7179:4;:9;7172:78;;7205:8;;;;;:::i;:::-;;;;7236:2;7228:10;;;;;:::i;:::-;;;7172:78;;;7260:19;7292:6;7282:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7260:39;;7310:154;7326:1;7317:5;:10;7310:154;;7354:1;7344:11;;;;;:::i;:::-;;;7421:2;7413:5;:10;;;;:::i;:::-;7400:2;:24;;;;:::i;:::-;7387:39;;7370:6;7377;7370:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;7450:2;7441:11;;;;;:::i;:::-;;;7310:154;;;7488:6;7474:21;;;;;6780:723;;;;:::o;37265:126::-;;;;:::o;41202:164::-;41306:10;:17;;;;41279:15;:24;41295:7;41279:24;;;;;;;;;;;:44;;;;41334:10;41350:7;41334:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41202:164;:::o;41993:988::-;42259:22;42309:1;42284:22;42301:4;42284:16;:22::i;:::-;:26;;;;:::i;:::-;42259:51;;42321:18;42342:17;:26;42360:7;42342:26;;;;;;;;;;;;42321:47;;42489:14;42475:10;:28;42471:328;;42520:19;42542:12;:18;42555:4;42542:18;;;;;;;;;;;;;;;:34;42561:14;42542:34;;;;;;;;;;;;42520:56;;42626:11;42593:12;:18;42606:4;42593:18;;;;;;;;;;;;;;;:30;42612:10;42593:30;;;;;;;;;;;:44;;;;42743:10;42710:17;:30;42728:11;42710:30;;;;;;;;;;;:43;;;;42471:328;;42895:17;:26;42913:7;42895:26;;;;;;;;;;;42888:33;;;42939:12;:18;42952:4;42939:18;;;;;;;;;;;;;;;:34;42958:14;42939:34;;;;;;;;;;;42932:41;;;41993:988;;;;:::o;43276:1079::-;43529:22;43574:1;43554:10;:17;;;;:21;;;;:::i;:::-;43529:46;;43586:18;43607:15;:24;43623:7;43607:24;;;;;;;;;;;;43586:45;;43958:19;43980:10;43991:14;43980:26;;;;;;;;;;;;;;;;;;;;;;;;43958:48;;44044:11;44019:10;44030;44019:22;;;;;;;;;;;;;;;;;;;;;;;:36;;;;44155:10;44124:15;:28;44140:11;44124:28;;;;;;;;;;;:41;;;;44296:15;:24;44312:7;44296:24;;;;;;;;;;;44289:31;;;44331:10;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43276:1079;;;;:::o;40780:221::-;40865:14;40882:20;40899:2;40882:16;:20::i;:::-;40865:37;;40940:7;40913:12;:16;40926:2;40913:16;;;;;;;;;;;;;;;:24;40930:6;40913:24;;;;;;;;;;;:34;;;;40987:6;40958:17;:26;40976:7;40958:26;;;;;;;;;;;:35;;;;40780:221;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:343:1:-;;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:2;;;290:1;287;280:12;249:2;303:41;337:6;332:3;327;303:41;:::i;:::-;90:260;;;;;;:::o;356:345::-;;459:66;475:49;517:6;475:49;:::i;:::-;459:66;:::i;:::-;450:75;;548:6;541:5;534:21;586:4;579:5;575:16;624:3;615:6;610:3;606:16;603:25;600:2;;;641:1;638;631:12;600:2;654:41;688:6;683:3;678;654:41;:::i;:::-;440:261;;;;;;:::o;707:139::-;;791:6;778:20;769:29;;807:33;834:5;807:33;:::i;:::-;759:87;;;;:::o;852:133::-;;933:6;920:20;911:29;;949:30;973:5;949:30;:::i;:::-;901:84;;;;:::o;991:137::-;;1074:6;1061:20;1052:29;;1090:32;1116:5;1090:32;:::i;:::-;1042:86;;;;:::o;1134:141::-;;1221:6;1215:13;1206:22;;1237:32;1263:5;1237:32;:::i;:::-;1196:79;;;;:::o;1294:271::-;;1398:3;1391:4;1383:6;1379:17;1375:27;1365:2;;1416:1;1413;1406:12;1365:2;1456:6;1443:20;1481:78;1555:3;1547:6;1540:4;1532:6;1528:17;1481:78;:::i;:::-;1472:87;;1355:210;;;;;:::o;1585:273::-;;1690:3;1683:4;1675:6;1671:17;1667:27;1657:2;;1708:1;1705;1698:12;1657:2;1748:6;1735:20;1773:79;1848:3;1840:6;1833:4;1825:6;1821:17;1773:79;:::i;:::-;1764:88;;1647:211;;;;;:::o;1864:139::-;;1948:6;1935:20;1926:29;;1964:33;1991:5;1964:33;:::i;:::-;1916:87;;;;:::o;2009:143::-;;2097:6;2091:13;2082:22;;2113:33;2140:5;2113:33;:::i;:::-;2072:80;;;;:::o;2158:135::-;;2240:6;2227:20;2218:29;;2256:31;2281:5;2256:31;:::i;:::-;2208:85;;;;:::o;2299:262::-;;2407:2;2395:9;2386:7;2382:23;2378:32;2375:2;;;2423:1;2420;2413:12;2375:2;2466:1;2491:53;2536:7;2527:6;2516:9;2512:22;2491:53;:::i;:::-;2481:63;;2437:117;2365:196;;;;:::o;2567:407::-;;;2692:2;2680:9;2671:7;2667:23;2663:32;2660:2;;;2708:1;2705;2698:12;2660:2;2751:1;2776:53;2821:7;2812:6;2801:9;2797:22;2776:53;:::i;:::-;2766:63;;2722:117;2878:2;2904:53;2949:7;2940:6;2929:9;2925:22;2904:53;:::i;:::-;2894:63;;2849:118;2650:324;;;;;:::o;2980:552::-;;;;3122:2;3110:9;3101:7;3097:23;3093:32;3090:2;;;3138:1;3135;3128:12;3090:2;3181:1;3206:53;3251:7;3242:6;3231:9;3227:22;3206:53;:::i;:::-;3196:63;;3152:117;3308:2;3334:53;3379:7;3370:6;3359:9;3355:22;3334:53;:::i;:::-;3324:63;;3279:118;3436:2;3462:53;3507:7;3498:6;3487:9;3483:22;3462:53;:::i;:::-;3452:63;;3407:118;3080:452;;;;;:::o;3538:809::-;;;;;3706:3;3694:9;3685:7;3681:23;3677:33;3674:2;;;3723:1;3720;3713:12;3674:2;3766:1;3791:53;3836:7;3827:6;3816:9;3812:22;3791:53;:::i;:::-;3781:63;;3737:117;3893:2;3919:53;3964:7;3955:6;3944:9;3940:22;3919:53;:::i;:::-;3909:63;;3864:118;4021:2;4047:53;4092:7;4083:6;4072:9;4068:22;4047:53;:::i;:::-;4037:63;;3992:118;4177:2;4166:9;4162:18;4149:32;4208:18;4200:6;4197:30;4194:2;;;4240:1;4237;4230:12;4194:2;4268:62;4322:7;4313:6;4302:9;4298:22;4268:62;:::i;:::-;4258:72;;4120:220;3664:683;;;;;;;:::o;4353:401::-;;;4475:2;4463:9;4454:7;4450:23;4446:32;4443:2;;;4491:1;4488;4481:12;4443:2;4534:1;4559:53;4604:7;4595:6;4584:9;4580:22;4559:53;:::i;:::-;4549:63;;4505:117;4661:2;4687:50;4729:7;4720:6;4709:9;4705:22;4687:50;:::i;:::-;4677:60;;4632:115;4433:321;;;;;:::o;4760:407::-;;;4885:2;4873:9;4864:7;4860:23;4856:32;4853:2;;;4901:1;4898;4891:12;4853:2;4944:1;4969:53;5014:7;5005:6;4994:9;4990:22;4969:53;:::i;:::-;4959:63;;4915:117;5071:2;5097:53;5142:7;5133:6;5122:9;5118:22;5097:53;:::i;:::-;5087:63;;5042:118;4843:324;;;;;:::o;5173:260::-;;5280:2;5268:9;5259:7;5255:23;5251:32;5248:2;;;5296:1;5293;5286:12;5248:2;5339:1;5364:52;5408:7;5399:6;5388:9;5384:22;5364:52;:::i;:::-;5354:62;;5310:116;5238:195;;;;:::o;5439:282::-;;5557:2;5545:9;5536:7;5532:23;5528:32;5525:2;;;5573:1;5570;5563:12;5525:2;5616:1;5641:63;5696:7;5687:6;5676:9;5672:22;5641:63;:::i;:::-;5631:73;;5587:127;5515:206;;;;:::o;5727:375::-;;5845:2;5833:9;5824:7;5820:23;5816:32;5813:2;;;5861:1;5858;5851:12;5813:2;5932:1;5921:9;5917:17;5904:31;5962:18;5954:6;5951:30;5948:2;;;5994:1;5991;5984:12;5948:2;6022:63;6077:7;6068:6;6057:9;6053:22;6022:63;:::i;:::-;6012:73;;5875:220;5803:299;;;;:::o;6108:262::-;;6216:2;6204:9;6195:7;6191:23;6187:32;6184:2;;;6232:1;6229;6222:12;6184:2;6275:1;6300:53;6345:7;6336:6;6325:9;6321:22;6300:53;:::i;:::-;6290:63;;6246:117;6174:196;;;;:::o;6376:284::-;;6495:2;6483:9;6474:7;6470:23;6466:32;6463:2;;;6511:1;6508;6501:12;6463:2;6554:1;6579:64;6635:7;6626:6;6615:9;6611:22;6579:64;:::i;:::-;6569:74;;6525:128;6453:207;;;;:::o;6666:258::-;;6772:2;6760:9;6751:7;6747:23;6743:32;6740:2;;;6788:1;6785;6778:12;6740:2;6831:1;6856:51;6899:7;6890:6;6879:9;6875:22;6856:51;:::i;:::-;6846:61;;6802:115;6730:194;;;;:::o;6930:118::-;7017:24;7035:5;7017:24;:::i;:::-;7012:3;7005:37;6995:53;;:::o;7054:109::-;7135:21;7150:5;7135:21;:::i;:::-;7130:3;7123:34;7113:50;;:::o;7169:360::-;;7283:38;7315:5;7283:38;:::i;:::-;7337:70;7400:6;7395:3;7337:70;:::i;:::-;7330:77;;7416:52;7461:6;7456:3;7449:4;7442:5;7438:16;7416:52;:::i;:::-;7493:29;7515:6;7493:29;:::i;:::-;7488:3;7484:39;7477:46;;7259:270;;;;;:::o;7535:364::-;;7651:39;7684:5;7651:39;:::i;:::-;7706:71;7770:6;7765:3;7706:71;:::i;:::-;7699:78;;7786:52;7831:6;7826:3;7819:4;7812:5;7808:16;7786:52;:::i;:::-;7863:29;7885:6;7863:29;:::i;:::-;7858:3;7854:39;7847:46;;7627:272;;;;;:::o;7905:377::-;;8039:39;8072:5;8039:39;:::i;:::-;8094:89;8176:6;8171:3;8094:89;:::i;:::-;8087:96;;8192:52;8237:6;8232:3;8225:4;8218:5;8214:16;8192:52;:::i;:::-;8269:6;8264:3;8260:16;8253:23;;8015:267;;;;;:::o;8288:366::-;;8451:67;8515:2;8510:3;8451:67;:::i;:::-;8444:74;;8527:93;8616:3;8527:93;:::i;:::-;8645:2;8640:3;8636:12;8629:19;;8434:220;;;:::o;8660:366::-;;8823:67;8887:2;8882:3;8823:67;:::i;:::-;8816:74;;8899:93;8988:3;8899:93;:::i;:::-;9017:2;9012:3;9008:12;9001:19;;8806:220;;;:::o;9032:366::-;;9195:67;9259:2;9254:3;9195:67;:::i;:::-;9188:74;;9271:93;9360:3;9271:93;:::i;:::-;9389:2;9384:3;9380:12;9373:19;;9178:220;;;:::o;9404:366::-;;9567:67;9631:2;9626:3;9567:67;:::i;:::-;9560:74;;9643:93;9732:3;9643:93;:::i;:::-;9761:2;9756:3;9752:12;9745:19;;9550:220;;;:::o;9776:366::-;;9939:67;10003:2;9998:3;9939:67;:::i;:::-;9932:74;;10015:93;10104:3;10015:93;:::i;:::-;10133:2;10128:3;10124:12;10117:19;;9922:220;;;:::o;10148:366::-;;10311:67;10375:2;10370:3;10311:67;:::i;:::-;10304:74;;10387:93;10476:3;10387:93;:::i;:::-;10505:2;10500:3;10496:12;10489:19;;10294:220;;;:::o;10520:366::-;;10683:67;10747:2;10742:3;10683:67;:::i;:::-;10676:74;;10759:93;10848:3;10759:93;:::i;:::-;10877:2;10872:3;10868:12;10861:19;;10666:220;;;:::o;10892:366::-;;11055:67;11119:2;11114:3;11055:67;:::i;:::-;11048:74;;11131:93;11220:3;11131:93;:::i;:::-;11249:2;11244:3;11240:12;11233:19;;11038:220;;;:::o;11264:366::-;;11427:67;11491:2;11486:3;11427:67;:::i;:::-;11420:74;;11503:93;11592:3;11503:93;:::i;:::-;11621:2;11616:3;11612:12;11605:19;;11410:220;;;:::o;11636:366::-;;11799:67;11863:2;11858:3;11799:67;:::i;:::-;11792:74;;11875:93;11964:3;11875:93;:::i;:::-;11993:2;11988:3;11984:12;11977:19;;11782:220;;;:::o;12008:366::-;;12171:67;12235:2;12230:3;12171:67;:::i;:::-;12164:74;;12247:93;12336:3;12247:93;:::i;:::-;12365:2;12360:3;12356:12;12349:19;;12154:220;;;:::o;12380:366::-;;12543:67;12607:2;12602:3;12543:67;:::i;:::-;12536:74;;12619:93;12708:3;12619:93;:::i;:::-;12737:2;12732:3;12728:12;12721:19;;12526:220;;;:::o;12752:366::-;;12915:67;12979:2;12974:3;12915:67;:::i;:::-;12908:74;;12991:93;13080:3;12991:93;:::i;:::-;13109:2;13104:3;13100:12;13093:19;;12898:220;;;:::o;13124:366::-;;13287:67;13351:2;13346:3;13287:67;:::i;:::-;13280:74;;13363:93;13452:3;13363:93;:::i;:::-;13481:2;13476:3;13472:12;13465:19;;13270:220;;;:::o;13496:366::-;;13659:67;13723:2;13718:3;13659:67;:::i;:::-;13652:74;;13735:93;13824:3;13735:93;:::i;:::-;13853:2;13848:3;13844:12;13837:19;;13642:220;;;:::o;13868:366::-;;14031:67;14095:2;14090:3;14031:67;:::i;:::-;14024:74;;14107:93;14196:3;14107:93;:::i;:::-;14225:2;14220:3;14216:12;14209:19;;14014:220;;;:::o;14240:366::-;;14403:67;14467:2;14462:3;14403:67;:::i;:::-;14396:74;;14479:93;14568:3;14479:93;:::i;:::-;14597:2;14592:3;14588:12;14581:19;;14386:220;;;:::o;14612:366::-;;14775:67;14839:2;14834:3;14775:67;:::i;:::-;14768:74;;14851:93;14940:3;14851:93;:::i;:::-;14969:2;14964:3;14960:12;14953:19;;14758:220;;;:::o;14984:366::-;;15147:67;15211:2;15206:3;15147:67;:::i;:::-;15140:74;;15223:93;15312:3;15223:93;:::i;:::-;15341:2;15336:3;15332:12;15325:19;;15130:220;;;:::o;15356:366::-;;15519:67;15583:2;15578:3;15519:67;:::i;:::-;15512:74;;15595:93;15684:3;15595:93;:::i;:::-;15713:2;15708:3;15704:12;15697:19;;15502:220;;;:::o;15728:366::-;;15891:67;15955:2;15950:3;15891:67;:::i;:::-;15884:74;;15967:93;16056:3;15967:93;:::i;:::-;16085:2;16080:3;16076:12;16069:19;;15874:220;;;:::o;16100:366::-;;16263:67;16327:2;16322:3;16263:67;:::i;:::-;16256:74;;16339:93;16428:3;16339:93;:::i;:::-;16457:2;16452:3;16448:12;16441:19;;16246:220;;;:::o;16472:366::-;;16635:67;16699:2;16694:3;16635:67;:::i;:::-;16628:74;;16711:93;16800:3;16711:93;:::i;:::-;16829:2;16824:3;16820:12;16813:19;;16618:220;;;:::o;16844:366::-;;17007:67;17071:2;17066:3;17007:67;:::i;:::-;17000:74;;17083:93;17172:3;17083:93;:::i;:::-;17201:2;17196:3;17192:12;17185:19;;16990:220;;;:::o;17216:115::-;17301:23;17318:5;17301:23;:::i;:::-;17296:3;17289:36;17279:52;;:::o;17337:118::-;17424:24;17442:5;17424:24;:::i;:::-;17419:3;17412:37;17402:53;;:::o;17461:435::-;;17663:95;17754:3;17745:6;17663:95;:::i;:::-;17656:102;;17775:95;17866:3;17857:6;17775:95;:::i;:::-;17768:102;;17887:3;17880:10;;17645:251;;;;;:::o;17902:222::-;;18033:2;18022:9;18018:18;18010:26;;18046:71;18114:1;18103:9;18099:17;18090:6;18046:71;:::i;:::-;18000:124;;;;:::o;18130:640::-;;18363:3;18352:9;18348:19;18340:27;;18377:71;18445:1;18434:9;18430:17;18421:6;18377:71;:::i;:::-;18458:72;18526:2;18515:9;18511:18;18502:6;18458:72;:::i;:::-;18540;18608:2;18597:9;18593:18;18584:6;18540:72;:::i;:::-;18659:9;18653:4;18649:20;18644:2;18633:9;18629:18;18622:48;18687:76;18758:4;18749:6;18687:76;:::i;:::-;18679:84;;18330:440;;;;;;;:::o;18776:332::-;;18935:2;18924:9;18920:18;18912:26;;18948:71;19016:1;19005:9;19001:17;18992:6;18948:71;:::i;:::-;19029:72;19097:2;19086:9;19082:18;19073:6;19029:72;:::i;:::-;18902:206;;;;;:::o;19114:210::-;;19239:2;19228:9;19224:18;19216:26;;19252:65;19314:1;19303:9;19299:17;19290:6;19252:65;:::i;:::-;19206:118;;;;:::o;19330:313::-;;19481:2;19470:9;19466:18;19458:26;;19530:9;19524:4;19520:20;19516:1;19505:9;19501:17;19494:47;19558:78;19631:4;19622:6;19558:78;:::i;:::-;19550:86;;19448:195;;;;:::o;19649:419::-;;19853:2;19842:9;19838:18;19830:26;;19902:9;19896:4;19892:20;19888:1;19877:9;19873:17;19866:47;19930:131;20056:4;19930:131;:::i;:::-;19922:139;;19820:248;;;:::o;20074:419::-;;20278:2;20267:9;20263:18;20255:26;;20327:9;20321:4;20317:20;20313:1;20302:9;20298:17;20291:47;20355:131;20481:4;20355:131;:::i;:::-;20347:139;;20245:248;;;:::o;20499:419::-;;20703:2;20692:9;20688:18;20680:26;;20752:9;20746:4;20742:20;20738:1;20727:9;20723:17;20716:47;20780:131;20906:4;20780:131;:::i;:::-;20772:139;;20670:248;;;:::o;20924:419::-;;21128:2;21117:9;21113:18;21105:26;;21177:9;21171:4;21167:20;21163:1;21152:9;21148:17;21141:47;21205:131;21331:4;21205:131;:::i;:::-;21197:139;;21095:248;;;:::o;21349:419::-;;21553:2;21542:9;21538:18;21530:26;;21602:9;21596:4;21592:20;21588:1;21577:9;21573:17;21566:47;21630:131;21756:4;21630:131;:::i;:::-;21622:139;;21520:248;;;:::o;21774:419::-;;21978:2;21967:9;21963:18;21955:26;;22027:9;22021:4;22017:20;22013:1;22002:9;21998:17;21991:47;22055:131;22181:4;22055:131;:::i;:::-;22047:139;;21945:248;;;:::o;22199:419::-;;22403:2;22392:9;22388:18;22380:26;;22452:9;22446:4;22442:20;22438:1;22427:9;22423:17;22416:47;22480:131;22606:4;22480:131;:::i;:::-;22472:139;;22370:248;;;:::o;22624:419::-;;22828:2;22817:9;22813:18;22805:26;;22877:9;22871:4;22867:20;22863:1;22852:9;22848:17;22841:47;22905:131;23031:4;22905:131;:::i;:::-;22897:139;;22795:248;;;:::o;23049:419::-;;23253:2;23242:9;23238:18;23230:26;;23302:9;23296:4;23292:20;23288:1;23277:9;23273:17;23266:47;23330:131;23456:4;23330:131;:::i;:::-;23322:139;;23220:248;;;:::o;23474:419::-;;23678:2;23667:9;23663:18;23655:26;;23727:9;23721:4;23717:20;23713:1;23702:9;23698:17;23691:47;23755:131;23881:4;23755:131;:::i;:::-;23747:139;;23645:248;;;:::o;23899:419::-;;24103:2;24092:9;24088:18;24080:26;;24152:9;24146:4;24142:20;24138:1;24127:9;24123:17;24116:47;24180:131;24306:4;24180:131;:::i;:::-;24172:139;;24070:248;;;:::o;24324:419::-;;24528:2;24517:9;24513:18;24505:26;;24577:9;24571:4;24567:20;24563:1;24552:9;24548:17;24541:47;24605:131;24731:4;24605:131;:::i;:::-;24597:139;;24495:248;;;:::o;24749:419::-;;24953:2;24942:9;24938:18;24930:26;;25002:9;24996:4;24992:20;24988:1;24977:9;24973:17;24966:47;25030:131;25156:4;25030:131;:::i;:::-;25022:139;;24920:248;;;:::o;25174:419::-;;25378:2;25367:9;25363:18;25355:26;;25427:9;25421:4;25417:20;25413:1;25402:9;25398:17;25391:47;25455:131;25581:4;25455:131;:::i;:::-;25447:139;;25345:248;;;:::o;25599:419::-;;25803:2;25792:9;25788:18;25780:26;;25852:9;25846:4;25842:20;25838:1;25827:9;25823:17;25816:47;25880:131;26006:4;25880:131;:::i;:::-;25872:139;;25770:248;;;:::o;26024:419::-;;26228:2;26217:9;26213:18;26205:26;;26277:9;26271:4;26267:20;26263:1;26252:9;26248:17;26241:47;26305:131;26431:4;26305:131;:::i;:::-;26297:139;;26195:248;;;:::o;26449:419::-;;26653:2;26642:9;26638:18;26630:26;;26702:9;26696:4;26692:20;26688:1;26677:9;26673:17;26666:47;26730:131;26856:4;26730:131;:::i;:::-;26722:139;;26620:248;;;:::o;26874:419::-;;27078:2;27067:9;27063:18;27055:26;;27127:9;27121:4;27117:20;27113:1;27102:9;27098:17;27091:47;27155:131;27281:4;27155:131;:::i;:::-;27147:139;;27045:248;;;:::o;27299:419::-;;27503:2;27492:9;27488:18;27480:26;;27552:9;27546:4;27542:20;27538:1;27527:9;27523:17;27516:47;27580:131;27706:4;27580:131;:::i;:::-;27572:139;;27470:248;;;:::o;27724:419::-;;27928:2;27917:9;27913:18;27905:26;;27977:9;27971:4;27967:20;27963:1;27952:9;27948:17;27941:47;28005:131;28131:4;28005:131;:::i;:::-;27997:139;;27895:248;;;:::o;28149:419::-;;28353:2;28342:9;28338:18;28330:26;;28402:9;28396:4;28392:20;28388:1;28377:9;28373:17;28366:47;28430:131;28556:4;28430:131;:::i;:::-;28422:139;;28320:248;;;:::o;28574:419::-;;28778:2;28767:9;28763:18;28755:26;;28827:9;28821:4;28817:20;28813:1;28802:9;28798:17;28791:47;28855:131;28981:4;28855:131;:::i;:::-;28847:139;;28745:248;;;:::o;28999:419::-;;29203:2;29192:9;29188:18;29180:26;;29252:9;29246:4;29242:20;29238:1;29227:9;29223:17;29216:47;29280:131;29406:4;29280:131;:::i;:::-;29272:139;;29170:248;;;:::o;29424:419::-;;29628:2;29617:9;29613:18;29605:26;;29677:9;29671:4;29667:20;29663:1;29652:9;29648:17;29641:47;29705:131;29831:4;29705:131;:::i;:::-;29697:139;;29595:248;;;:::o;29849:218::-;;29978:2;29967:9;29963:18;29955:26;;29991:69;30057:1;30046:9;30042:17;30033:6;29991:69;:::i;:::-;29945:122;;;;:::o;30073:222::-;;30204:2;30193:9;30189:18;30181:26;;30217:71;30285:1;30274:9;30270:17;30261:6;30217:71;:::i;:::-;30171:124;;;;:::o;30301:129::-;;30362:20;;:::i;:::-;30352:30;;30391:33;30419:4;30411:6;30391:33;:::i;:::-;30342:88;;;:::o;30436:75::-;;30502:2;30496:9;30486:19;;30476:35;:::o;30517:307::-;;30668:18;30660:6;30657:30;30654:2;;;30690:18;;:::i;:::-;30654:2;30728:29;30750:6;30728:29;:::i;:::-;30720:37;;30812:4;30806;30802:15;30794:23;;30583:241;;;:::o;30830:308::-;;30982:18;30974:6;30971:30;30968:2;;;31004:18;;:::i;:::-;30968:2;31042:29;31064:6;31042:29;:::i;:::-;31034:37;;31126:4;31120;31116:15;31108:23;;30897:241;;;:::o;31144:98::-;;31229:5;31223:12;31213:22;;31202:40;;;:::o;31248:99::-;;31334:5;31328:12;31318:22;;31307:40;;;:::o;31353:168::-;;31470:6;31465:3;31458:19;31510:4;31505:3;31501:14;31486:29;;31448:73;;;;:::o;31527:169::-;;31645:6;31640:3;31633:19;31685:4;31680:3;31676:14;31661:29;;31623:73;;;;:::o;31702:148::-;;31841:3;31826:18;;31816:34;;;;:::o;31856:305::-;;31915:20;31933:1;31915:20;:::i;:::-;31910:25;;31949:20;31967:1;31949:20;:::i;:::-;31944:25;;32103:1;32035:66;32031:74;32028:1;32025:81;32022:2;;;32109:18;;:::i;:::-;32022:2;32153:1;32150;32146:9;32139:16;;31900:261;;;;:::o;32167:185::-;;32224:20;32242:1;32224:20;:::i;:::-;32219:25;;32258:20;32276:1;32258:20;:::i;:::-;32253:25;;32297:1;32287:2;;32302:18;;:::i;:::-;32287:2;32344:1;32341;32337:9;32332:14;;32209:143;;;;:::o;32358:191::-;;32418:20;32436:1;32418:20;:::i;:::-;32413:25;;32452:20;32470:1;32452:20;:::i;:::-;32447:25;;32491:1;32488;32485:8;32482:2;;;32496:18;;:::i;:::-;32482:2;32541:1;32538;32534:9;32526:17;;32403:146;;;;:::o;32555:96::-;;32621:24;32639:5;32621:24;:::i;:::-;32610:35;;32600:51;;;:::o;32657:90::-;;32734:5;32727:13;32720:21;32709:32;;32699:48;;;:::o;32753:149::-;;32829:66;32822:5;32818:78;32807:89;;32797:105;;;:::o;32908:89::-;;32984:6;32977:5;32973:18;32962:29;;32952:45;;;:::o;33003:126::-;;33080:42;33073:5;33069:54;33058:65;;33048:81;;;:::o;33135:77::-;;33201:5;33190:16;;33180:32;;;:::o;33218:86::-;;33293:4;33286:5;33282:16;33271:27;;33261:43;;;:::o;33310:154::-;33394:6;33389:3;33384;33371:30;33456:1;33447:6;33442:3;33438:16;33431:27;33361:103;;;:::o;33470:307::-;33538:1;33548:113;33562:6;33559:1;33556:13;33548:113;;;33647:1;33642:3;33638:11;33632:18;33628:1;33623:3;33619:11;33612:39;33584:2;33581:1;33577:10;33572:15;;33548:113;;;33679:6;33676:1;33673:13;33670:2;;;33759:1;33750:6;33745:3;33741:16;33734:27;33670:2;33519:258;;;;:::o;33783:320::-;;33864:1;33858:4;33854:12;33844:22;;33911:1;33905:4;33901:12;33932:18;33922:2;;33988:4;33980:6;33976:17;33966:27;;33922:2;34050;34042:6;34039:14;34019:18;34016:38;34013:2;;;34069:18;;:::i;:::-;34013:2;33834:269;;;;:::o;34109:281::-;34192:27;34214:4;34192:27;:::i;:::-;34184:6;34180:40;34322:6;34310:10;34307:22;34286:18;34274:10;34271:34;34268:62;34265:2;;;34333:18;;:::i;:::-;34265:2;34373:10;34369:2;34362:22;34152:238;;;:::o;34396:233::-;;34458:24;34476:5;34458:24;:::i;:::-;34449:33;;34504:66;34497:5;34494:77;34491:2;;;34574:18;;:::i;:::-;34491:2;34621:1;34614:5;34610:13;34603:20;;34439:190;;;:::o;34635:167::-;;34695:22;34711:5;34695:22;:::i;:::-;34686:31;;34739:4;34732:5;34729:15;34726:2;;;34747:18;;:::i;:::-;34726:2;34794:1;34787:5;34783:13;34776:20;;34676:126;;;:::o;34808:176::-;;34857:20;34875:1;34857:20;:::i;:::-;34852:25;;34891:20;34909:1;34891:20;:::i;:::-;34886:25;;34930:1;34920:2;;34935:18;;:::i;:::-;34920:2;34976:1;34973;34969:9;34964:14;;34842:142;;;;:::o;34990:180::-;35038:77;35035:1;35028:88;35135:4;35132:1;35125:15;35159:4;35156:1;35149:15;35176:180;35224:77;35221:1;35214:88;35321:4;35318:1;35311:15;35345:4;35342:1;35335:15;35362:180;35410:77;35407:1;35400:88;35507:4;35504:1;35497:15;35531:4;35528:1;35521:15;35548:180;35596:77;35593:1;35586:88;35693:4;35690:1;35683:15;35717:4;35714:1;35707:15;35734:102;;35826:2;35822:7;35817:2;35810:5;35806:14;35802:28;35792:38;;35782:54;;;:::o;35842:230::-;35982:34;35978:1;35970:6;35966:14;35959:58;36051:13;36046:2;36038:6;36034:15;36027:38;35948:124;:::o;36078:237::-;36218:34;36214:1;36206:6;36202:14;36195:58;36287:20;36282:2;36274:6;36270:15;36263:45;36184:131;:::o;36321:180::-;36461:32;36457:1;36449:6;36445:14;36438:56;36427:74;:::o;36507:167::-;36647:19;36643:1;36635:6;36631:14;36624:43;36613:61;:::o;36680:162::-;36820:14;36816:1;36808:6;36804:14;36797:38;36786:56;:::o;36848:225::-;36988:34;36984:1;36976:6;36972:14;36965:58;37057:8;37052:2;37044:6;37040:15;37033:33;36954:119;:::o;37079:178::-;37219:30;37215:1;37207:6;37203:14;37196:54;37185:72;:::o;37263:223::-;37403:34;37399:1;37391:6;37387:14;37380:58;37472:6;37467:2;37459:6;37455:15;37448:31;37369:117;:::o;37492:175::-;37632:27;37628:1;37620:6;37616:14;37609:51;37598:69;:::o;37673:231::-;37813:34;37809:1;37801:6;37797:14;37790:58;37882:14;37877:2;37869:6;37865:15;37858:39;37779:125;:::o;37910:243::-;38050:34;38046:1;38038:6;38034:14;38027:58;38119:26;38114:2;38106:6;38102:15;38095:51;38016:137;:::o;38159:229::-;38299:34;38295:1;38287:6;38283:14;38276:58;38368:12;38363:2;38355:6;38351:15;38344:37;38265:123;:::o;38394:228::-;38534:34;38530:1;38522:6;38518:14;38511:58;38603:11;38598:2;38590:6;38586:15;38579:36;38500:122;:::o;38628:182::-;38768:34;38764:1;38756:6;38752:14;38745:58;38734:76;:::o;38816:236::-;38956:34;38952:1;38944:6;38940:14;38933:58;39025:19;39020:2;39012:6;39008:15;39001:44;38922:130;:::o;39058:165::-;39198:17;39194:1;39186:6;39182:14;39175:41;39164:59;:::o;39229:231::-;39369:34;39365:1;39357:6;39353:14;39346:58;39438:14;39433:2;39425:6;39421:15;39414:39;39335:125;:::o;39466:182::-;39606:34;39602:1;39594:6;39590:14;39583:58;39572:76;:::o;39654:228::-;39794:34;39790:1;39782:6;39778:14;39771:58;39863:11;39858:2;39850:6;39846:15;39839:36;39760:122;:::o;39888:234::-;40028:34;40024:1;40016:6;40012:14;40005:58;40097:17;40092:2;40084:6;40080:15;40073:42;39994:128;:::o;40128:220::-;40268:34;40264:1;40256:6;40252:14;40245:58;40337:3;40332:2;40324:6;40320:15;40313:28;40234:114;:::o;40354:172::-;40494:24;40490:1;40482:6;40478:14;40471:48;40460:66;:::o;40532:236::-;40672:34;40668:1;40660:6;40656:14;40649:58;40741:19;40736:2;40728:6;40724:15;40717:44;40638:130;:::o;40774:231::-;40914:34;40910:1;40902:6;40898:14;40891:58;40983:14;40978:2;40970:6;40966:15;40959:39;40880:125;:::o;41011:122::-;41084:24;41102:5;41084:24;:::i;:::-;41077:5;41074:35;41064:2;;41123:1;41120;41113:12;41064:2;41054:79;:::o;41139:116::-;41209:21;41224:5;41209:21;:::i;:::-;41202:5;41199:32;41189:2;;41245:1;41242;41235:12;41189:2;41179:76;:::o;41261:120::-;41333:23;41350:5;41333:23;:::i;:::-;41326:5;41323:34;41313:2;;41371:1;41368;41361:12;41313:2;41303:78;:::o;41387:122::-;41460:24;41478:5;41460:24;:::i;:::-;41453:5;41450:35;41440:2;;41499:1;41496;41489:12;41440:2;41430:79;:::o;41515:118::-;41586:22;41602:5;41586:22;:::i;:::-;41579:5;41576:33;41566:2;;41623:1;41620;41613:12;41566:2;41556:77;:::o

Swarm Source

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