ETH Price: $3,596.54 (+0.50%)

Token

ERC-20: ()
 

Overview

Max Total Supply

698

Holders

277

Total Transfers

-

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

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:
RewardCollection

Compiler Version
v0.8.0+commit.c7dfd78e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

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


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

pragma solidity ^0.8.0;

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

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

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


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

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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


// OpenZeppelin Contracts (last updated v4.5.0) (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
     * ====
     *
     * [IMPORTANT]
     * ====
     * You shouldn't rely on `isContract` to protect against flash loan attacks!
     *
     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
     * constructor.
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        return account.code.length > 0;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

pragma solidity ^0.8.0;

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

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


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

pragma solidity ^0.8.0;


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

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


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

pragma solidity ^0.8.0;


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

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

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


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

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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

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

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


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

pragma solidity ^0.8.0;


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

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


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

pragma solidity ^0.8.0;







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

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

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

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

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

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

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

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

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

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

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

        return batchBalances;
    }

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

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

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

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

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

        address operator = _msgSender();

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

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

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

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

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

        address operator = _msgSender();

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

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

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

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

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

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

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

        address operator = _msgSender();

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

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

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

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

        address operator = _msgSender();

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

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

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

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

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

        address operator = _msgSender();

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

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

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

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

        address operator = _msgSender();

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

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

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

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

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

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

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

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

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

        return array;
    }
}

// File: RewardCollection.sol



pragma solidity ^0.8.0;


/**
 * @title RewardCollection contract
 * @dev Extends ERC1155 Non-Fungible Token Standard basic implementation
 */

interface IPhatPandaz {
    function lastTransfer(uint256) external view returns (uint256);
    function ownerOf(uint256 tokenId) external view returns (address);
}

interface IDateTime {
    function toTimestamp(uint16 year, uint8 month, uint8 day, uint8 hour, uint8 minute) external view returns (uint256);
}

contract RewardCollection is ERC1155, Ownable {
    IPhatPandaz phatPandaz = IPhatPandaz(0x6F14e33f19975C8aa5AdFa66fC2bFe80f539E7B9);
    IDateTime dateTime = IDateTime(0x5Ce96A6dE876155d69FE4D093C57e8e45Eb6B0D0);

    address private redPandazContract;
    address private trashPandazContract;

    uint256 public startTimestamp = 1646175600; // Mar 1st 22 11PM UTC

    mapping(uint256 => mapping (uint256 => bool)) private _rewardClaimNormal;
    mapping(uint256 => mapping (uint256 => bool)) private _rewardClaimSpecial;
    mapping(uint256 => mapping (uint256 => bool)) private _rewardClaimPlatinum;

    mapping(uint256 => uint256) private _totalSupply;

    uint256 private constant FERTILIZER = 0;
    uint256 private constant COCO_CUBEZ = 1;
    uint256 private constant SEEDZ = 2;
    uint256 private constant PLANT = 3;

    uint256 public lastDateNormal = 202203;
    uint256 public lastDateSpecial = 202203;
    uint256 public lastDatePlatinum = 202203;

    uint8 public gapMonthNormal = 3;
    uint8 public gapMonthSpecial = 2;
    uint8 public gapMonthPlatinum = 1;

    uint256 public startHour = 23; // 11PM

    uint256 public holdLimitNormal = 90 days;
    uint256 public holdLimitSpecial = 60 days;

    uint256[] private platinumList = [1, 2, 248, 315, 367, 389, 421, 536, 549, 644, 712, 806, 882, 948, 956, 1020, 1360];
    uint256[] private zkittlezList = [26, 88, 118, 154, 205, 230, 285, 308, 329, 360, 380, 387, 422, 443, 458, 465, 535, 535, 556, 557, 598, 608, 618, 674, 739, 791, 840, 847, 852, 864, 871, 880, 906, 1015, 1086, 1094, 1164, 1165, 1303, 1362];
    uint256[] private terpHogzList = [7, 37, 105, 138, 173, 182, 249, 302, 369, 400, 409, 465, 476, 508, 514, 576, 608, 624, 721, 814, 858, 871, 910, 929, 1000, 1078, 1162, 1177, 1190, 1264, 1291, 1317, 1365];
    uint256[] private charCoirList = [93, 100, 108, 146, 163, 230, 259, 306, 310, 356, 419, 444, 449, 491, 492, 730, 731, 760, 761, 866, 951, 967, 1158, 1212, 1301, 1352];
    uint256[] private vegBloomList = [28, 130, 145, 286, 429, 493, 638, 646, 714, 770, 776, 777, 780, 860, 875, 881, 906, 919, 982, 993, 1006, 1007, 1064, 1204, 1247, 1262, 1304, 1357];

    mapping(uint => bool) private platinumMap;
    mapping(uint => bool) private zkittlezMap;
    mapping(uint => bool) private terpHogzMap;
    mapping(uint => bool) private charCoirMap;
    mapping(uint => bool) private vegBloomMap;

    constructor() ERC1155("") {
        setMappings();
    }

    function setMappings() internal {
        for(uint i = 0; i < platinumList.length; i++) {
            platinumMap[platinumList[i]] = true;
        }
        for(uint i = 0; i < zkittlezList.length; i++) {
            zkittlezMap[zkittlezList[i]] = true;
        }
        for(uint i = 0; i < terpHogzList.length; i++) {
            terpHogzMap[terpHogzList[i]] = true;
        }
        for(uint i = 0; i < charCoirList.length; i++) {
            charCoirMap[charCoirList[i]] = true;
        }
        for(uint i = 0; i < vegBloomList.length; i++) {
            vegBloomMap[vegBloomList[i]] = true;
        }
    }

    function setRedPandaz(address redPandazAddress) external onlyOwner {
        redPandazContract = redPandazAddress;
    }

    function setTrashPandaz(address trashPandazAddress) external onlyOwner {
        trashPandazContract = trashPandazAddress;
    }

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

    function burn(
        address account,
        uint256 id,
        uint256 value
    ) public virtual {
        require(
            account == _msgSender() || isApprovedForAll(account, _msgSender()) || _msgSender() == redPandazContract || _msgSender() == trashPandazContract,
            "ERC1155: not owner nor approved"
        );

        _burn(account, id, value);
    }

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

        _burnBatch(account, ids, values);
    }

    /**
     * @dev See {ERC1155-_beforeTokenTransfer}.
     *
     * Requirements:
     *
     * - the contract must not be paused.
     */
    function _beforeTokenTransfer(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual override {
        super._beforeTokenTransfer(operator, from, to, ids, amounts, data);

        if (from == address(0)) {
            for (uint256 i = 0; i < ids.length; ++i) {
                _totalSupply[ids[i]] += amounts[i];
            }
        }

        if (to == address(0)) {
            for (uint256 i = 0; i < ids.length; ++i) {
                _totalSupply[ids[i]] -= amounts[i];
            }
        }
    }

    /**
     * @dev Total amount of tokens in with a given id.
     */
    function totalSupply(uint256 id) public view virtual returns (uint256) {
        return _totalSupply[id];
    }

    /**
     * @dev Indicates whether any token exist with a given id, or not.
     */
    function exists(uint256 id) public view virtual returns (bool) {
        return totalSupply(id) > 0;
    }

    function updateGapMonthNormal(uint8 _gapMonthNormal) external onlyOwner {
        require(_gapMonthNormal >=1 && _gapMonthNormal <= 12, "Invalid");
        gapMonthNormal = _gapMonthNormal;
    }

    function updateGapMonthSpecial(uint8 _gapMonthSpecial) external onlyOwner {
        require(_gapMonthSpecial >=1 && _gapMonthSpecial <= 12, "Invalid");
        gapMonthSpecial = _gapMonthSpecial;
    }

    function updateGapMonthPlatinum(uint8 _gapMonthPlatinum) external onlyOwner {
        require(_gapMonthPlatinum >=1 && _gapMonthPlatinum <= 12, "Invalid");
        gapMonthPlatinum = _gapMonthPlatinum;
    }

    function updateHoldLimitNormal(uint256 _holdLimitNormal) external onlyOwner {
        holdLimitNormal = _holdLimitNormal;
    }

    function updateHoldLimitSpecial(uint256 _holdLimitSpecial) external onlyOwner {
        holdLimitSpecial = _holdLimitSpecial;
    }

    function getEndTimestamp(uint8 which) public view returns (uint256) {
        uint16 year;
        uint8 month;
        uint256 lastDate;

        if(which == 0)
            lastDate = lastDateNormal;
        else if(which == 1)
            lastDate = lastDateSpecial;
        else
            lastDate = lastDatePlatinum;

        year = uint16(lastDate / 100);
        month = uint8(lastDate % 100);

        if(which == 0)
            month = month + gapMonthNormal;
        else if(which == 1)
            month = month + gapMonthSpecial;
        else
            month = month + gapMonthPlatinum;

        year = year + month / 13;
        month = month % 12 == 0 ? 12 : month % 12;

        return dateTime.toTimestamp(year, month, 1, uint8(startHour), 0);
    }

    function claimPlant() external {
        uint256[] memory ids = new uint256[](3);
        ids[0] = FERTILIZER;
        ids[1] = COCO_CUBEZ;
        ids[2] = SEEDZ;

        uint256[] memory values = new uint256[](3);
        values[0] = 1;
        values[1] = 1;
        values[2] = 1;

        _burnBatch(msg.sender, ids, values);

        _mint(msg.sender, PLANT, 1, "");
    }

    function claimPlatinum(uint256 tokenId) external {
        require(block.timestamp >= startTimestamp, "Not started");
        require(phatPandaz.ownerOf(tokenId) == msg.sender, "Not owner");
        require(platinumMap[tokenId], "Not Platinum");

        if(block.timestamp > getEndTimestamp(2)) {
            uint256 year = lastDatePlatinum / 100;
            uint256 nextMonth = lastDatePlatinum % 100 + gapMonthPlatinum;
            lastDatePlatinum = (year + nextMonth / 13) * 100 + (nextMonth % 12 == 0 ? 12 : nextMonth % 12);
        }

        require(_rewardClaimPlatinum[lastDatePlatinum][tokenId] == false, "Already claimed");
        _rewardClaimPlatinum[lastDatePlatinum][tokenId] = true;
        _mint(msg.sender, SEEDZ, 1, "");
    }

    function claimSpecial(uint256 tokenId) internal {
        require(block.timestamp >= startTimestamp, "Not started");
        require(phatPandaz.ownerOf(tokenId) == msg.sender, "Not owner");

        if(block.timestamp > getEndTimestamp(1)) {
            uint256 year = lastDateSpecial / 100;
            uint256 nextMonth = lastDateSpecial % 100 + gapMonthSpecial;
            lastDateSpecial = (year + nextMonth / 13) * 100 + (nextMonth % 12 == 0 ? 12 : nextMonth % 12);
        }

        require(lastDateSpecial == 202203 || block.timestamp - phatPandaz.lastTransfer(tokenId) >= holdLimitSpecial, "Not hodl enough");
        require(_rewardClaimSpecial[lastDateSpecial][tokenId] == false, "Already claimed");
        _rewardClaimSpecial[lastDateSpecial][tokenId] = true;
    }

    function claimZkittlez(uint256 tokenId) external {
        require(zkittlezMap[tokenId], "Not Zkittlez");

        claimSpecial(tokenId);

        _mint(msg.sender, SEEDZ, 1, "");
    }

    function claimTerpHogz(uint256 tokenId) external {
        require(terpHogzMap[tokenId], "Not Terp Hogz");

        claimSpecial(tokenId);

        _mint(msg.sender, SEEDZ, 1, "");
    }

    function claimCharCoir(uint256 tokenId) external {
        require(charCoirMap[tokenId], "Not Char Coir");

        claimSpecial(tokenId);

        _mint(msg.sender, COCO_CUBEZ, 1, "");
    }

    function claimVegBloom(uint256 tokenId) external {
        require(vegBloomMap[tokenId], "Not Veg+Bloom");

        claimSpecial(tokenId);

        _mint(msg.sender, FERTILIZER, 1, "");
    }

    function claimNormal(uint256 tokenId, uint256 randNo) external {
        require(block.timestamp >= startTimestamp, "Not started");
        require(phatPandaz.ownerOf(tokenId) == msg.sender, "Not owner.");
        require(!zkittlezMap[tokenId] && !terpHogzMap[tokenId] && !charCoirMap[tokenId] && !vegBloomMap[tokenId] && !platinumMap[tokenId], "Not Normal");

        if(block.timestamp > getEndTimestamp(0)) {
            uint256 year = lastDateNormal / 100;
            uint256 nextMonth = lastDateNormal % 100 + gapMonthNormal;
            lastDateNormal = (year + nextMonth / 13) * 100 + (nextMonth % 12 == 0 ? 12 : nextMonth % 12);
        }

        require(lastDateNormal == 202203 || block.timestamp - phatPandaz.lastTransfer(tokenId) >= holdLimitNormal, "Not hodl enough");
        require(_rewardClaimNormal[lastDateNormal][tokenId] == false, "Already claimed");
        _rewardClaimNormal[lastDateNormal][tokenId] = true;

        uint256 rand = uint256(keccak256(abi.encode(block.timestamp, block.difficulty, msg.sender, tokenId, randNo))) % 1000;

        if(lastDateNormal == 202203) {
            if(rand < 445) {
                _mint(msg.sender, FERTILIZER, 1, "");
                return;
            } else if(rand >= 445 && rand < 778) {
                _mint(msg.sender, COCO_CUBEZ, 1, "");
                return;
            }
            else if(rand >= 778) {
                _mint(msg.sender, SEEDZ, 1, "");
                return;
            }
        }

        if((rand >= 200 && rand < 250) || (rand >= 600 && rand < 650))
            _mint(msg.sender, FERTILIZER, 1, "");
        else if((rand >= 100 && rand < 140) || (rand >= 450 && rand < 485))
            _mint(msg.sender, COCO_CUBEZ, 1, "");
        else if((rand >= 300 && rand < 330) || (rand >= 830 && rand < 850))
            _mint(msg.sender, SEEDZ, 1, "");
    }

    function claimStatus(uint256 tokenId, uint256 timestamp) external view returns (bool) {
        if(timestamp < startTimestamp)
            return true;

        uint256 endTime;
        uint256 lastDate;
        uint256 year;
        uint256 nextMonth;
        bool claimFlag;

        if(platinumMap[tokenId]){
            endTime = getEndTimestamp(2);
            if(timestamp > endTime) {
                year = lastDatePlatinum / 100;
                nextMonth = lastDatePlatinum % 100 + gapMonthPlatinum;
                lastDate = (year + nextMonth / 13) * 100 + (nextMonth % 12 == 0 ? 12 : nextMonth % 12);
            }
            else
                lastDate = lastDatePlatinum;            

            claimFlag = _rewardClaimPlatinum[lastDate][tokenId];
        }
        else if(zkittlezMap[tokenId] || terpHogzMap[tokenId] || charCoirMap[tokenId] || vegBloomMap[tokenId]) {
            endTime = getEndTimestamp(1);
            if(timestamp > endTime) {
                year = lastDateSpecial / 100;
                nextMonth = lastDateSpecial % 100 + gapMonthSpecial;
                lastDate = (year + nextMonth / 13) * 100 + (nextMonth % 12 == 0 ? 12 : nextMonth % 12);
            }
            else
                lastDate = lastDateSpecial;
            if(lastDate == 202203)
                claimFlag = _rewardClaimSpecial[lastDate][tokenId];
            else
                claimFlag = (timestamp - phatPandaz.lastTransfer(tokenId) < holdLimitSpecial) || _rewardClaimSpecial[lastDate][tokenId];
        }
        else {
            endTime = getEndTimestamp(0);
            if(timestamp > endTime) {
                year = lastDateNormal / 100;
                nextMonth = lastDateNormal % 100 + gapMonthNormal;
                lastDate = (year + nextMonth / 13) * 100 + (nextMonth % 12 == 0 ? 12 : nextMonth % 12);
            }
            else
                lastDate = lastDateNormal;

            if(lastDate == 202203)
                claimFlag = _rewardClaimNormal[lastDate][tokenId];
            else
                claimFlag = (timestamp - phatPandaz.lastTransfer(tokenId) < holdLimitNormal) || _rewardClaimNormal[lastDate][tokenId];
        }
        return claimFlag;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"burnBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"claimCharCoir","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"randNo","type":"uint256"}],"name":"claimNormal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimPlant","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"claimPlatinum","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"claimStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"claimTerpHogz","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"claimVegBloom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"claimZkittlez","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"exists","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gapMonthNormal","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gapMonthPlatinum","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gapMonthSpecial","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"which","type":"uint8"}],"name":"getEndTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"holdLimitNormal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"holdLimitSpecial","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastDateNormal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastDatePlatinum","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastDateSpecial","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"redPandazAddress","type":"address"}],"name":"setRedPandaz","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"trashPandazAddress","type":"address"}],"name":"setTrashPandaz","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"uri_","type":"string"}],"name":"setURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startHour","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"startTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_gapMonthNormal","type":"uint8"}],"name":"updateGapMonthNormal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_gapMonthPlatinum","type":"uint8"}],"name":"updateGapMonthPlatinum","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_gapMonthSpecial","type":"uint8"}],"name":"updateGapMonthSpecial","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_holdLimitNormal","type":"uint256"}],"name":"updateHoldLimitNormal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_holdLimitSpecial","type":"uint256"}],"name":"updateHoldLimitSpecial","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]

600480546001600160a01b0319908116736f14e33f19975c8aa5adfa66fc2bfe80f539e7b91790915560058054909116735ce96a6de876155d69fe4d093c57e8e45eb6b0d017905563621ea570600855620315db600d819055600e819055600f556010805462ff00001961020061ff001960ff19909316600317929092168217166201000017909155601760119081556276a700601255624f1a006013556102a060405260016080908152600260a05260f860c05261013b60e05261016f61010052610185610120526101a56101405261021861016052610225610180526102846101a0526102c86101c0526103266101e0526103729092526103b4610220526103bc610240526103fc6102605261055061028052620001229160149162000903565b506040805161050081018252601a815260586020820152607691810191909152609a606082015260cd608082015260e660a082015261011d60c082015261013460e082015261014961010082015261016861012082015261017c6101408201526101836101608201526101a66101808201526101bb6101a08201526101ca6101c08201526101d16101e0820152610217610200820181905261022082015261022c61024082015261022d610260808301919091526102566102808301526102a082015261026a6102c08201526102a26102e08201526102e361030082015261031761032082015261034861034082015261034f610360808301919091526103546103808301526103a08201526103676103c08201526103706103e082015261038a6104008201526103f761042082015261043e61044082015261044661046082015261048c61048082015261048d6104a08201526105176104c08201526105526104e08201526200029890601590602862000903565b5060408051610420810182526007815260256020820152606991810191909152608a606082015260ad608082015260b660a082015260f960c082015261012e60e08201526101716101008201526101906101208201526101996101408201526101d16101608201526101dc6101808201526101fc6101a08201526102026101c08201526102406101e0820181905261026061020083018190526102706102208401526102d19183019190915261032e9082015261035a6102808201526103676102a082015261038e6102c08201526103a16102e08201526103e861030082015261043661032082015261048a6103408201526104996103608201526104a66103808201526104f06103a082015261050b6103c08201526105256103e0820152610555610400820152620003d090601690602162000903565b506040805161034081018252605d815260646020820152606c918101919091526092606082015260a3608082015260e660a082015261010360c082015261013260e08201526101366101008201526101646101208201526101a36101408201526101bc6101608201526101c16101808201526101eb6101a08201526101ec6101c08201526102da6101e08201526102db6102008201526102f86102208201526102f96102408201526103626102608201526103b76102808201526103c76102a08201526104866102c08201526104bc6102e0820152610515610300820152610548610320820152620004c790601790601a62000903565b506040805161038081018252601c8082526082602083015260919282019290925261011e60608201526101ad60808201526101ed60a082015261027e60c082015261028660e08201526102ca61010082015261030261012082015261030861014082015261030961016082015261030c61018082015261035c6101a082015261036b6101c08201526103716101e082015261038a6102008201526103976102208201526103d66102408201526103e16102608201526103ee6102808201526103ef6102a08201526104286102c08201526104b46102e08201526104df6103008201526104ee61032082015261051861034082015261054d610360820152620005d3916018919062000903565b50348015620005e157600080fd5b50604080516020810190915260008152620005fc8162000621565b50620006116200060b6200063a565b6200063e565b6200061b62000690565b62000a52565b80516200063690600290602084019062000959565b5050565b3390565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60005b6014548110156200070c5760016019600060148481548110620006c657634e487b7160e01b600052603260045260246000fd5b9060005260206000200154815260200190815260200160002060006101000a81548160ff0219169083151502179055508080620007039062000a2a565b91505062000693565b5060005b60155481101562000789576001601a6000601584815481106200074357634e487b7160e01b600052603260045260246000fd5b9060005260206000200154815260200190815260200160002060006101000a81548160ff0219169083151502179055508080620007809062000a2a565b91505062000710565b5060005b60165481101562000806576001601b600060168481548110620007c057634e487b7160e01b600052603260045260246000fd5b9060005260206000200154815260200190815260200160002060006101000a81548160ff0219169083151502179055508080620007fd9062000a2a565b9150506200078d565b5060005b60175481101562000883576001601c6000601784815481106200083d57634e487b7160e01b600052603260045260246000fd5b9060005260206000200154815260200190815260200160002060006101000a81548160ff02191690831515021790555080806200087a9062000a2a565b9150506200080a565b5060005b60185481101562000900576001601d600060188481548110620008ba57634e487b7160e01b600052603260045260246000fd5b9060005260206000200154815260200190815260200160002060006101000a81548160ff0219169083151502179055508080620008f79062000a2a565b91505062000887565b50565b82805482825590600052602060002090810192821562000947579160200282015b8281111562000947578251829061ffff1690559160200191906001019062000924565b5062000955929150620009d6565b5090565b8280546200096790620009ed565b90600052602060002090601f0160209004810192826200098b576000855562000947565b82601f10620009a657805160ff191683800117855562000947565b8280016001018555821562000947579182015b8281111562000947578251825591602001919060010190620009b9565b5b80821115620009555760008155600101620009d7565b60028104600182168062000a0257607f821691505b6020821081141562000a2457634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141562000a4b57634e487b7160e01b81526011600452602481fd5b5060010190565b613cf98062000a626000396000f3fe608060405234801561001057600080fd5b506004361061025d5760003560e01c80635bbad62411610146578063b8f8616a116100c3578063e6fd48bc11610087578063e6fd48bc146104e3578063e8669e42146104eb578063e985e9c5146104fe578063f242432a14610511578063f2fde38b14610524578063f5298aca146105375761025d565b8063b8f8616a1461048f578063bd85b03914610497578063c02303ee146104aa578063c0fc88c3146104bd578063c20b9257146104d05761025d565b806389fc31f61161010a57806389fc31f6146104395780638da5cb5b1461044c5780639bf8256814610461578063a22cb46514610469578063ada784941461047c5761025d565b80635bbad624146103fb5780636b20c4541461040e5780636c7f3087146104215780636dcd733414610429578063715018a6146104315761025d565b80632b8d190a116101df5780633d8cc2f8116101a35780633d8cc2f8146103875780633e7de83e1461039a57806343fcf895146103a257806347bf9585146103b55780634e1273f4146103c85780634f558e79146103e85761025d565b80632b8d190a1461033e5780632e64f511146103515780632eb2c2d614610359578063301c35371461036c578063399607a61461037f5761025d565b8063122386da11610226578063122386da146102f35780631e31d226146103085780632666928f14610310578063287504cb1461032357806329dd11c21461032b5761025d565b8062fdd58e1461026257806301ffc9a71461028b57806302fe5305146102ab5780630e89341c146102c05780630fcfe530146102e0575b600080fd5b610275610270366004612fbc565b61054a565b60405161028291906139b1565b60405180910390f35b61029e6102993660046130db565b6105a4565b604051610282919061333c565b6102be6102b9366004613113565b6105e4565b005b6102d36102ce366004613161565b61062f565b6040516102829190613347565b6102be6102ee3660046131b2565b6106c3565b6102fb61074c565b60405161028291906139f4565b61027561075a565b6102be61031e366004612d97565b610760565b6102756107c1565b6102be610339366004613191565b6107c7565b6102be61034c366004613161565b610ca9565b6102fb610ec8565b6102be610367366004612e07565b610ed7565b6102be61037a366004612d97565b610f35565b6102fb610f96565b61029e610395366004613191565b610f9f565b61027561141c565b6102be6103b0366004613161565b611422565b6102be6103c3366004613161565b611476565b6103db6103d636600461301b565b6114ba565b6040516102829190613304565b61029e6103f6366004613161565b6115da565b6102be610409366004613161565b6115ed565b6102be61041c366004612f18565b611641565b6102be6116e0565b610275611869565b6102be61186f565b6102756104473660046131b2565b6118ba565b610454611a35565b6040516102829190613258565b610275611a45565b6102be610477366004612f8b565b611a4b565b6102be61048a366004613161565b611a5d565b610275611ab0565b6102756104a5366004613161565b611ab6565b6102be6104b83660046131b2565b611ac8565b6102be6104cb366004613161565b611b57565b6102be6104de3660046131b2565b611b85565b610275611c16565b6102be6104f9366004613161565b611c1c565b61029e61050c366004612dcf565b611c60565b6102be61051f366004612eb1565b611c8e565b6102be610532366004612d97565b611ce5565b6102be610545366004612fe7565b611d53565b60006001600160a01b03831661057b5760405162461bcd60e51b81526004016105729061341b565b60405180910390fd5b506000818152602081815260408083206001600160a01b03861684529091529020545b92915050565b60006001600160e01b03198216636cdb3d1360e11b14806105d557506001600160e01b031982166303a24d0760e21b145b8061059e575061059e82611df2565b6105ec611e0b565b6001600160a01b03166105fd611a35565b6001600160a01b0316146106235760405162461bcd60e51b815260040161057290613747565b61062c81611e0f565b50565b60606002805461063e90613b1f565b80601f016020809104026020016040519081016040528092919081815260200182805461066a90613b1f565b80156106b75780601f1061068c576101008083540402835291602001916106b7565b820191906000526020600020905b81548152906001019060200180831161069a57829003601f168201915b50505050509050919050565b6106cb611e0b565b6001600160a01b03166106dc611a35565b6001600160a01b0316146107025760405162461bcd60e51b815260040161057290613747565b60018160ff161015801561071a5750600c8160ff1611155b6107365760405162461bcd60e51b815260040161057290613847565b6010805460ff191660ff92909216919091179055565b601054610100900460ff1681565b60115481565b610768611e0b565b6001600160a01b0316610779611a35565b6001600160a01b03161461079f5760405162461bcd60e51b815260040161057290613747565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b600d5481565b6008544210156107e95760405162461bcd60e51b8152600401610572906133f6565b600480546040516331a9108f60e11b815233926001600160a01b0390921691636352211e9161081a918791016139b1565b60206040518083038186803b15801561083257600080fd5b505afa158015610846573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061086a9190612db3565b6001600160a01b0316146108905760405162461bcd60e51b815260040161057290613800565b6000828152601a602052604090205460ff161580156108be57506000828152601b602052604090205460ff16155b80156108d957506000828152601c602052604090205460ff16155b80156108f457506000828152601d602052604090205460ff16155b801561090f575060008281526019602052604090205460ff16155b61092b5760405162461bcd60e51b8152600401610572906134ac565b61093560006118ba565b4211156109ca5760006064600d5461094d9190613ab3565b601054600d5491925060009160ff9091169061096b90606490613b75565b6109759190613a76565b9050610982600c82613b75565b1561099757610992600c82613b75565b61099a565b600c5b6109a5600d83613ab3565b6109af9084613a76565b6109ba906064613ae9565b6109c49190613a76565b600d5550505b600d54620315db1480610a6757506012546004805460405163209ca49f60e11b81526001600160a01b0390911691634139493e91610a0a918791016139b1565b60206040518083038186803b158015610a2257600080fd5b505afa158015610a36573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a5a9190613179565b610a649042613b08565b10155b610a835760405162461bcd60e51b81526004016105729061371e565b600d54600090815260096020908152604080832085845290915290205460ff1615610ac05760405162461bcd60e51b8152600401610572906136f5565b600d5460009081526009602090815260408083208584528252808320805460ff19166001179055516103e891610b009142914491339189918991016139c8565b6040516020818303038152906040528051906020012060001c610b239190613b75565b9050600d54620315db1415610bb9576101bd811015610b5f57610b59336000600160405180602001604052806000815250611e22565b50610ca5565b6101bd8110158015610b72575061030a81105b15610b9357610b593360018060405180602001604052806000815250611e22565b61030a8110610bb957610b59336002600160405180602001604052806000815250611e22565b60c88110158015610bca575060fa81105b80610be357506102588110158015610be3575061028a81105b15610c0a57610c05336000600160405180602001604052806000815250611e22565b610ca3565b60648110158015610c1b5750608c81105b80610c3457506101c28110158015610c3457506101e581105b15610c5557610c053360018060405180602001604052806000815250611e22565b61012c8110158015610c68575061014a81105b80610c81575061033e8110158015610c81575061035281105b15610ca357610ca3336002600160405180602001604052806000815250611e22565b505b5050565b600854421015610ccb5760405162461bcd60e51b8152600401610572906133f6565b600480546040516331a9108f60e11b815233926001600160a01b0390921691636352211e91610cfc918691016139b1565b60206040518083038186803b158015610d1457600080fd5b505afa158015610d28573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d4c9190612db3565b6001600160a01b031614610d725760405162461bcd60e51b815260040161057290613824565b60008181526019602052604090205460ff16610da05760405162461bcd60e51b8152600401610572906135ab565b610daa60026118ba565b421115610e475760006064600f54610dc29190613ab3565b90506000601060029054906101000a900460ff1660ff166064600f54610de89190613b75565b610df29190613a76565b9050610dff600c82613b75565b15610e1457610e0f600c82613b75565b610e17565b600c5b610e22600d83613ab3565b610e2c9084613a76565b610e37906064613ae9565b610e419190613a76565b600f5550505b600f546000908152600b6020908152604080832084845290915290205460ff1615610e845760405162461bcd60e51b8152600401610572906136f5565b600f546000908152600b602090815260408083208484528252808320805460ff19166001908117909155815192830190915291815261062c91339160029190611e22565b60105462010000900460ff1681565b610edf611e0b565b6001600160a01b0316856001600160a01b03161480610f055750610f058561050c611e0b565b610f215760405162461bcd60e51b815260040161057290613616565b610f2e8585858585611f11565b5050505050565b610f3d611e0b565b6001600160a01b0316610f4e611a35565b6001600160a01b031614610f745760405162461bcd60e51b815260040161057290613747565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b60105460ff1681565b6000600854821015610fb35750600161059e565b600083815260196020526040812054819081908190819060ff161561109d57610fdc60026118ba565b945084871115611074576064600f54610ff59190613ab3565b601054600f5491945062010000900460ff169061101490606490613b75565b61101e9190613a76565b915061102b600c83613b75565b156110405761103b600c83613b75565b611043565b600c5b61104e600d84613ab3565b6110589085613a76565b611063906064613ae9565b61106d9190613a76565b935061107a565b600f5493505b506000838152600b602090815260408083208a845290915290205460ff16611411565b6000888152601a602052604090205460ff16806110c857506000888152601b602052604090205460ff165b806110e157506000888152601c602052604090205460ff165b806110fa57506000888152601d602052604090205460ff165b1561128d5761110960016118ba565b9450848711156111a0576064600e546111229190613ab3565b601054600e54919450610100900460ff169061114090606490613b75565b61114a9190613a76565b9150611157600c83613b75565b1561116c57611167600c83613b75565b61116f565b600c5b61117a600d84613ab3565b6111849085613a76565b61118f906064613ae9565b6111999190613a76565b93506111a6565b600e5493505b83620315db14156111d457506000838152600a602090815260408083208a845290915290205460ff16611288565b6013546004805460405163209ca49f60e11b81526001600160a01b0390911691634139493e91611206918d91016139b1565b60206040518083038186803b15801561121e57600080fd5b505afa158015611232573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112569190613179565b6112609089613b08565b108061128557506000848152600a602090815260408083208b845290915290205460ff165b90505b611411565b61129760006118ba565b945084871115611329576064600d546112b09190613ab3565b601054600d5491945060ff16906112c990606490613b75565b6112d39190613a76565b91506112e0600c83613b75565b156112f5576112f0600c83613b75565b6112f8565b600c5b611303600d84613ab3565b61130d9085613a76565b611318906064613ae9565b6113229190613a76565b935061132f565b600d5493505b83620315db141561135d575060008381526009602090815260408083208a845290915290205460ff16611411565b6012546004805460405163209ca49f60e11b81526001600160a01b0390911691634139493e9161138f918d91016139b1565b60206040518083038186803b1580156113a757600080fd5b505afa1580156113bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113df9190613179565b6113e99089613b08565b108061140e575060008481526009602090815260408083208b845290915290205460ff165b90505b979650505050505050565b60135481565b6000818152601d602052604090205460ff166114505760405162461bcd60e51b815260040161057290613584565b611459816120e2565b61062c336000600160405180602001604052806000815250611e22565b61147e611e0b565b6001600160a01b031661148f611a35565b6001600160a01b0316146114b55760405162461bcd60e51b815260040161057290613747565b601355565b606081518351146114dd5760405162461bcd60e51b8152600401610572906138b1565b6000835167ffffffffffffffff81111561150757634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015611530578160200160208202803683370190505b50905060005b84518110156115d25761159785828151811061156257634e487b7160e01b600052603260045260246000fd5b602002602001015185838151811061158a57634e487b7160e01b600052603260045260246000fd5b602002602001015161054a565b8282815181106115b757634e487b7160e01b600052603260045260246000fd5b60209081029190910101526115cb81613b5a565b9050611536565b509392505050565b6000806115e683611ab6565b1192915050565b6000818152601b602052604090205460ff1661161b5760405162461bcd60e51b8152600401610572906137a2565b611624816120e2565b61062c336002600160405180602001604052806000815250611e22565b611649611e0b565b6001600160a01b0316836001600160a01b0316148061166f575061166f8361050c611e0b565b8061169457506006546001600160a01b0316611689611e0b565b6001600160a01b0316145b806116b957506007546001600160a01b03166116ae611e0b565b6001600160a01b0316145b6116d55760405162461bcd60e51b8152600401610572906137c9565b610ca3838383612370565b604080516003808252608082019092526000916020820160608036833701905050905060008160008151811061172657634e487b7160e01b600052603260045260246000fd5b60200260200101818152505060018160018151811061175557634e487b7160e01b600052603260045260246000fd5b60200260200101818152505060028160028151811061178457634e487b7160e01b600052603260045260246000fd5b6020908102919091010152604080516003808252608082019092526000918160200160208202803683370190505090506001816000815181106117d757634e487b7160e01b600052603260045260246000fd5b60200260200101818152505060018160018151811061180657634e487b7160e01b600052603260045260246000fd5b60200260200101818152505060018160028151811061183557634e487b7160e01b600052603260045260246000fd5b60200260200101818152505061184c338383612370565b610ca5336003600160405180602001604052806000815250611e22565b60125481565b611877611e0b565b6001600160a01b0316611888611a35565b6001600160a01b0316146118ae5760405162461bcd60e51b815260040161057290613747565b6118b86000612521565b565b600080808060ff85166118d05750600d546118ea565b8460ff16600114156118e55750600e546118ea565b50600f545b6118f5606482613ab3565b9250611902606482613b75565b915060ff85166119235760105461191c9060ff1683613a8e565b915061195d565b8460ff16600114156119445760105461191c90610100900460ff1683613a8e565b60105461195a9062010000900460ff1683613a8e565b91505b611968600d83613ac7565b6119759060ff1684613a50565b9250611982600c83613b89565b60ff161561199a57611995600c83613b89565b61199d565b600c5b6005546011546040516362ba968760e01b81529294506001600160a01b03909116916362ba9687916119dc918791879160019190600090600401613983565b60206040518083038186803b1580156119f457600080fd5b505afa158015611a08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a2c9190613179565b95945050505050565b6003546001600160a01b03165b90565b600e5481565b610ca5611a56611e0b565b8383612573565b6000818152601c602052604090205460ff16611a8b5760405162461bcd60e51b8152600401610572906134d0565b611a94816120e2565b61062c3360018060405180602001604052806000815250611e22565b600f5481565b6000908152600c602052604090205490565b611ad0611e0b565b6001600160a01b0316611ae1611a35565b6001600160a01b031614611b075760405162461bcd60e51b815260040161057290613747565b60018160ff1610158015611b1f5750600c8160ff1611155b611b3b5760405162461bcd60e51b815260040161057290613847565b6010805460ff9092166101000261ff0019909216919091179055565b6000818152601a602052604090205460ff1661161b5760405162461bcd60e51b81526004016105729061377c565b611b8d611e0b565b6001600160a01b0316611b9e611a35565b6001600160a01b031614611bc45760405162461bcd60e51b815260040161057290613747565b60018160ff1610158015611bdc5750600c8160ff1611155b611bf85760405162461bcd60e51b815260040161057290613847565b6010805460ff909216620100000262ff000019909216919091179055565b60085481565b611c24611e0b565b6001600160a01b0316611c35611a35565b6001600160a01b031614611c5b5760405162461bcd60e51b815260040161057290613747565b601255565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205460ff1690565b611c96611e0b565b6001600160a01b0316856001600160a01b03161480611cbc5750611cbc8561050c611e0b565b611cd85760405162461bcd60e51b81526004016105729061353b565b610f2e8585858585612616565b611ced611e0b565b6001600160a01b0316611cfe611a35565b6001600160a01b031614611d245760405162461bcd60e51b815260040161057290613747565b6001600160a01b038116611d4a5760405162461bcd60e51b815260040161057290613466565b61062c81612521565b611d5b611e0b565b6001600160a01b0316836001600160a01b03161480611d815750611d818361050c611e0b565b80611da657506006546001600160a01b0316611d9b611e0b565b6001600160a01b0316145b80611dcb57506007546001600160a01b0316611dc0611e0b565b6001600160a01b0316145b611de75760405162461bcd60e51b8152600401610572906137c9565b610ca383838361274a565b6001600160e01b031981166301ffc9a760e01b14919050565b3390565b8051610ca5906002906020840190612c14565b6001600160a01b038416611e485760405162461bcd60e51b815260040161057290613942565b6000611e52611e0b565b9050611e7381600087611e6488612859565b611e6d88612859565b876128b2565b6000848152602081815260408083206001600160a01b038916845290915281208054859290611ea3908490613a76565b92505081905550846001600160a01b031660006001600160a01b0316826001600160a01b03167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051611efa9291906139ba565b60405180910390a4610f2e81600087878787612a04565b8151835114611f325760405162461bcd60e51b8152600401610572906138fa565b6001600160a01b038416611f585760405162461bcd60e51b8152600401610572906135d1565b6000611f62611e0b565b9050611f728187878787876128b2565b60005b8451811015612074576000858281518110611fa057634e487b7160e01b600052603260045260246000fd5b602002602001015190506000858381518110611fcc57634e487b7160e01b600052603260045260246000fd5b602090810291909101810151600084815280835260408082206001600160a01b038e16835290935291909120549091508181101561201c5760405162461bcd60e51b8152600401610572906136ab565b6000838152602081815260408083206001600160a01b038e8116855292528083208585039055908b16825281208054849290612059908490613a76565b925050819055505050508061206d90613b5a565b9050611f75565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516120c4929190613317565b60405180910390a46120da818787878787612b12565b505050505050565b6008544210156121045760405162461bcd60e51b8152600401610572906133f6565b600480546040516331a9108f60e11b815233926001600160a01b0390921691636352211e91612135918691016139b1565b60206040518083038186803b15801561214d57600080fd5b505afa158015612161573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121859190612db3565b6001600160a01b0316146121ab5760405162461bcd60e51b815260040161057290613824565b6121b560016118ba565b4211156122525760006064600e546121cd9190613ab3565b90506000601060019054906101000a900460ff1660ff166064600e546121f39190613b75565b6121fd9190613a76565b905061220a600c82613b75565b1561221f5761221a600c82613b75565b612222565b600c5b61222d600d83613ab3565b6122379084613a76565b612242906064613ae9565b61224c9190613a76565b600e5550505b600e54620315db14806122ef57506013546004805460405163209ca49f60e11b81526001600160a01b0390911691634139493e91612292918691016139b1565b60206040518083038186803b1580156122aa57600080fd5b505afa1580156122be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122e29190613179565b6122ec9042613b08565b10155b61230b5760405162461bcd60e51b81526004016105729061371e565b600e546000908152600a6020908152604080832084845290915290205460ff16156123485760405162461bcd60e51b8152600401610572906136f5565b600e546000908152600a6020908152604080832093835292905220805460ff19166001179055565b6001600160a01b0383166123965760405162461bcd60e51b815260040161057290613668565b80518251146123b75760405162461bcd60e51b8152600401610572906138fa565b60006123c1611e0b565b90506123e1818560008686604051806020016040528060008152506128b2565b60005b83518110156124c257600084828151811061240f57634e487b7160e01b600052603260045260246000fd5b60200260200101519050600084838151811061243b57634e487b7160e01b600052603260045260246000fd5b602090810291909101810151600084815280835260408082206001600160a01b038c16835290935291909120549091508181101561248b5760405162461bcd60e51b8152600401610572906134f7565b6000928352602083815260408085206001600160a01b038b16865290915290922091039055806124ba81613b5a565b9150506123e4565b5060006001600160a01b0316846001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051612513929190613317565b60405180910390a450505050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b816001600160a01b0316836001600160a01b031614156125a55760405162461bcd60e51b815260040161057290613868565b6001600160a01b0383811660008181526001602090815260408083209487168084529490915290819020805460ff1916851515179055517f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c319061260990859061333c565b60405180910390a3505050565b6001600160a01b03841661263c5760405162461bcd60e51b8152600401610572906135d1565b6000612646611e0b565b9050612657818787611e6488612859565b6000848152602081815260408083206001600160a01b038a168452909152902054838110156126985760405162461bcd60e51b8152600401610572906136ab565b6000858152602081815260408083206001600160a01b038b81168552925280832087850390559088168252812080548692906126d5908490613a76565b92505081905550856001600160a01b0316876001600160a01b0316836001600160a01b03167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62888860405161272b9291906139ba565b60405180910390a4612741828888888888612a04565b50505050505050565b6001600160a01b0383166127705760405162461bcd60e51b815260040161057290613668565b600061277a611e0b565b90506127aa8185600061278c87612859565b61279587612859565b604051806020016040528060008152506128b2565b6000838152602081815260408083206001600160a01b0388168452909152902054828110156127eb5760405162461bcd60e51b8152600401610572906134f7565b6000848152602081815260408083206001600160a01b03808a16808652919093528184208786039055905190918516907fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f629061284a90899089906139ba565b60405180910390a45050505050565b604080516001808252818301909252606091600091906020808301908036833701905050905082816000815181106128a157634e487b7160e01b600052603260045260246000fd5b602090810291909101015292915050565b6128c08686868686866120da565b6001600160a01b0385166129635760005b8351811015612961578281815181106128fa57634e487b7160e01b600052603260045260246000fd5b6020026020010151600c600086848151811061292657634e487b7160e01b600052603260045260246000fd5b60200260200101518152602001908152602001600020600082825461294b9190613a76565b9091555061295a905081613b5a565b90506128d1565b505b6001600160a01b0384166120da5760005b83518110156127415782818151811061299d57634e487b7160e01b600052603260045260246000fd5b6020026020010151600c60008684815181106129c957634e487b7160e01b600052603260045260246000fd5b6020026020010151815260200190815260200160002060008282546129ee9190613b08565b909155506129fd905081613b5a565b9050612974565b612a16846001600160a01b0316612be3565b156120da5760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e6190612a4f90899089908890889088906004016132ca565b602060405180830381600087803b158015612a6957600080fd5b505af1925050508015612a99575060408051601f3d908101601f19168201909252612a96918101906130f7565b60015b612ae257612aa5613bf3565b80612ab05750612aca565b8060405162461bcd60e51b81526004016105729190613347565b60405162461bcd60e51b81526004016105729061335a565b6001600160e01b0319811663f23a6e6160e01b146127415760405162461bcd60e51b8152600401610572906133ae565b612b24846001600160a01b0316612be3565b156120da5760405163bc197c8160e01b81526001600160a01b0385169063bc197c8190612b5d908990899088908890889060040161326c565b602060405180830381600087803b158015612b7757600080fd5b505af1925050508015612ba7575060408051601f3d908101601f19168201909252612ba4918101906130f7565b60015b612bb357612aa5613bf3565b6001600160e01b0319811663bc197c8160e01b146127415760405162461bcd60e51b8152600401610572906133ae565b600080826001600160a01b0316803b806020016040519081016040528181526000908060200190933c511192915050565b828054612c2090613b1f565b90600052602060002090601f016020900481019282612c425760008555612c88565b82601f10612c5b57805160ff1916838001178555612c88565b82800160010185558215612c88579182015b82811115612c88578251825591602001919060010190612c6d565b50612c94929150612c98565b5090565b5b80821115612c945760008155600101612c99565b600067ffffffffffffffff831115612cc757612cc7613bd7565b612cda601f8401601f1916602001613a02565b9050828152838383011115612cee57600080fd5b828260208301376000602084830101529392505050565b600082601f830112612d15578081fd5b81356020612d2a612d2583613a2c565b613a02565b8281528181019085830183850287018401881015612d46578586fd5b855b85811015612d6457813584529284019290840190600101612d48565b5090979650505050505050565b600082601f830112612d81578081fd5b612d9083833560208501612cad565b9392505050565b600060208284031215612da8578081fd5b8135612d9081613c98565b600060208284031215612dc4578081fd5b8151612d9081613c98565b60008060408385031215612de1578081fd5b8235612dec81613c98565b91506020830135612dfc81613c98565b809150509250929050565b600080600080600060a08688031215612e1e578081fd5b8535612e2981613c98565b94506020860135612e3981613c98565b9350604086013567ffffffffffffffff80821115612e55578283fd5b612e6189838a01612d05565b94506060880135915080821115612e76578283fd5b612e8289838a01612d05565b93506080880135915080821115612e97578283fd5b50612ea488828901612d71565b9150509295509295909350565b600080600080600060a08688031215612ec8578081fd5b8535612ed381613c98565b94506020860135612ee381613c98565b93506040860135925060608601359150608086013567ffffffffffffffff811115612f0c578182fd5b612ea488828901612d71565b600080600060608486031215612f2c578283fd5b8335612f3781613c98565b9250602084013567ffffffffffffffff80821115612f53578384fd5b612f5f87838801612d05565b93506040860135915080821115612f74578283fd5b50612f8186828701612d05565b9150509250925092565b60008060408385031215612f9d578081fd5b8235612fa881613c98565b915060208301358015158114612dfc578182fd5b60008060408385031215612fce578182fd5b8235612fd981613c98565b946020939093013593505050565b600080600060608486031215612ffb578081fd5b833561300681613c98565b95602085013595506040909401359392505050565b6000806040838503121561302d578182fd5b823567ffffffffffffffff80821115613044578384fd5b818501915085601f830112613057578384fd5b81356020613067612d2583613a2c565b82815281810190858301838502870184018b1015613083578889fd5b8896505b848710156130ae57803561309a81613c98565b835260019690960195918301918301613087565b50965050860135925050808211156130c4578283fd5b506130d185828601612d05565b9150509250929050565b6000602082840312156130ec578081fd5b8135612d9081613cad565b600060208284031215613108578081fd5b8151612d9081613cad565b600060208284031215613124578081fd5b813567ffffffffffffffff81111561313a578182fd5b8201601f8101841361314a578182fd5b61315984823560208401612cad565b949350505050565b600060208284031215613172578081fd5b5035919050565b60006020828403121561318a578081fd5b5051919050565b600080604083850312156131a3578182fd5b50508035926020909101359150565b6000602082840312156131c3578081fd5b813560ff81168114612d90578182fd5b6000815180845260208085019450808401835b83811015613202578151875295820195908201906001016131e6565b509495945050505050565b60008151808452815b8181101561323257602081850181015186830182015201613216565b818111156132435782602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0391909116815260200190565b6001600160a01b0386811682528516602082015260a060408201819052600090613298908301866131d3565b82810360608401526132aa81866131d3565b905082810360808401526132be818561320d565b98975050505050505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a0608082018190526000906114119083018461320d565b600060208252612d9060208301846131d3565b60006040825261332a60408301856131d3565b8281036020840152611a2c81856131d3565b901515815260200190565b600060208252612d90602083018461320d565b60208082526034908201527f455243313135353a207472616e7366657220746f206e6f6e20455243313135356040820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b606082015260800190565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b6020808252600b908201526a139bdd081cdd185c9d195960aa1b604082015260600190565b6020808252602b908201527f455243313135353a2062616c616e636520717565727920666f7220746865207a60408201526a65726f206164647265737360a81b606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b6020808252600a9082015269139bdd08139bdc9b585b60b21b604082015260600190565b6020808252600d908201526c2737ba1021b430b91021b7b4b960991b604082015260600190565b60208082526024908201527f455243313135353a206275726e20616d6f756e7420657863656564732062616c604082015263616e636560e01b606082015260800190565b60208082526029908201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260408201526808185c1c1c9bdd995960ba1b606082015260800190565b6020808252600d908201526c4e6f74205665672b426c6f6f6d60981b604082015260600190565b6020808252600c908201526b4e6f7420506c6174696e756d60a01b604082015260600190565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526032908201527f455243313135353a207472616e736665722063616c6c6572206973206e6f74206040820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b606082015260800190565b60208082526023908201527f455243313135353a206275726e2066726f6d20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b6020808252600f908201526e105b1c9958591e4818db185a5b5959608a1b604082015260600190565b6020808252600f908201526e09cdee840d0dec8d840cadcdeeaced608b1b604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252600c908201526b2737ba102d35b4ba3a3632bd60a11b604082015260600190565b6020808252600d908201526c2737ba102a32b938102437b3bd60991b604082015260600190565b6020808252601f908201527f455243313135353a206e6f74206f776e6572206e6f7220617070726f76656400604082015260600190565b6020808252600a90820152692737ba1037bbb732b91760b11b604082015260600190565b6020808252600990820152682737ba1037bbb732b960b91b604082015260600190565b602080825260079082015266125b9d985b1a5960ca1b604082015260600190565b60208082526029908201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604082015268103337b91039b2b63360b91b606082015260800190565b60208082526029908201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604082015268040dad2e6dac2e8c6d60bb1b606082015260800190565b60208082526028908201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206040820152670dad2e6dac2e8c6d60c31b606082015260800190565b60208082526021908201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736040820152607360f81b606082015260800190565b61ffff95909516855260ff938416602086015291831660408501528216606084015216608082015260a00190565b90815260200190565b918252602082015260400190565b94855260208501939093526001600160a01b039190911660408401526060830152608082015260a00190565b60ff91909116815260200190565b60405181810167ffffffffffffffff81118282101715613a2457613a24613bd7565b604052919050565b600067ffffffffffffffff821115613a4657613a46613bd7565b5060209081020190565b600061ffff808316818516808303821115613a6d57613a6d613bab565b01949350505050565b60008219821115613a8957613a89613bab565b500190565b600060ff821660ff84168060ff03821115613aab57613aab613bab565b019392505050565b600082613ac257613ac2613bc1565b500490565b600060ff831680613ada57613ada613bc1565b8060ff84160491505092915050565b6000816000190483118215151615613b0357613b03613bab565b500290565b600082821015613b1a57613b1a613bab565b500390565b600281046001821680613b3357607f821691505b60208210811415613b5457634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415613b6e57613b6e613bab565b5060010190565b600082613b8457613b84613bc1565b500690565b600060ff831680613b9c57613b9c613bc1565b8060ff84160691505092915050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b60e01c90565b600060443d1015613c0357611a42565b600481823e6308c379a0613c178251613bed565b14613c2157611a42565b6040513d600319016004823e80513d67ffffffffffffffff8160248401118184111715613c515750505050611a42565b82840192508251915080821115613c6b5750505050611a42565b503d83016020828401011115613c8357505050611a42565b601f01601f1916810160200160405291505090565b6001600160a01b038116811461062c57600080fd5b6001600160e01b03198116811461062c57600080fdfea26469706673582212208b55910c8c8c3f735f46c41b3fdbac49d04d7e8786047f349a2cd9e1ae01631364736f6c63430008000033

Deployed Bytecode

0x608060405234801561001057600080fd5b506004361061025d5760003560e01c80635bbad62411610146578063b8f8616a116100c3578063e6fd48bc11610087578063e6fd48bc146104e3578063e8669e42146104eb578063e985e9c5146104fe578063f242432a14610511578063f2fde38b14610524578063f5298aca146105375761025d565b8063b8f8616a1461048f578063bd85b03914610497578063c02303ee146104aa578063c0fc88c3146104bd578063c20b9257146104d05761025d565b806389fc31f61161010a57806389fc31f6146104395780638da5cb5b1461044c5780639bf8256814610461578063a22cb46514610469578063ada784941461047c5761025d565b80635bbad624146103fb5780636b20c4541461040e5780636c7f3087146104215780636dcd733414610429578063715018a6146104315761025d565b80632b8d190a116101df5780633d8cc2f8116101a35780633d8cc2f8146103875780633e7de83e1461039a57806343fcf895146103a257806347bf9585146103b55780634e1273f4146103c85780634f558e79146103e85761025d565b80632b8d190a1461033e5780632e64f511146103515780632eb2c2d614610359578063301c35371461036c578063399607a61461037f5761025d565b8063122386da11610226578063122386da146102f35780631e31d226146103085780632666928f14610310578063287504cb1461032357806329dd11c21461032b5761025d565b8062fdd58e1461026257806301ffc9a71461028b57806302fe5305146102ab5780630e89341c146102c05780630fcfe530146102e0575b600080fd5b610275610270366004612fbc565b61054a565b60405161028291906139b1565b60405180910390f35b61029e6102993660046130db565b6105a4565b604051610282919061333c565b6102be6102b9366004613113565b6105e4565b005b6102d36102ce366004613161565b61062f565b6040516102829190613347565b6102be6102ee3660046131b2565b6106c3565b6102fb61074c565b60405161028291906139f4565b61027561075a565b6102be61031e366004612d97565b610760565b6102756107c1565b6102be610339366004613191565b6107c7565b6102be61034c366004613161565b610ca9565b6102fb610ec8565b6102be610367366004612e07565b610ed7565b6102be61037a366004612d97565b610f35565b6102fb610f96565b61029e610395366004613191565b610f9f565b61027561141c565b6102be6103b0366004613161565b611422565b6102be6103c3366004613161565b611476565b6103db6103d636600461301b565b6114ba565b6040516102829190613304565b61029e6103f6366004613161565b6115da565b6102be610409366004613161565b6115ed565b6102be61041c366004612f18565b611641565b6102be6116e0565b610275611869565b6102be61186f565b6102756104473660046131b2565b6118ba565b610454611a35565b6040516102829190613258565b610275611a45565b6102be610477366004612f8b565b611a4b565b6102be61048a366004613161565b611a5d565b610275611ab0565b6102756104a5366004613161565b611ab6565b6102be6104b83660046131b2565b611ac8565b6102be6104cb366004613161565b611b57565b6102be6104de3660046131b2565b611b85565b610275611c16565b6102be6104f9366004613161565b611c1c565b61029e61050c366004612dcf565b611c60565b6102be61051f366004612eb1565b611c8e565b6102be610532366004612d97565b611ce5565b6102be610545366004612fe7565b611d53565b60006001600160a01b03831661057b5760405162461bcd60e51b81526004016105729061341b565b60405180910390fd5b506000818152602081815260408083206001600160a01b03861684529091529020545b92915050565b60006001600160e01b03198216636cdb3d1360e11b14806105d557506001600160e01b031982166303a24d0760e21b145b8061059e575061059e82611df2565b6105ec611e0b565b6001600160a01b03166105fd611a35565b6001600160a01b0316146106235760405162461bcd60e51b815260040161057290613747565b61062c81611e0f565b50565b60606002805461063e90613b1f565b80601f016020809104026020016040519081016040528092919081815260200182805461066a90613b1f565b80156106b75780601f1061068c576101008083540402835291602001916106b7565b820191906000526020600020905b81548152906001019060200180831161069a57829003601f168201915b50505050509050919050565b6106cb611e0b565b6001600160a01b03166106dc611a35565b6001600160a01b0316146107025760405162461bcd60e51b815260040161057290613747565b60018160ff161015801561071a5750600c8160ff1611155b6107365760405162461bcd60e51b815260040161057290613847565b6010805460ff191660ff92909216919091179055565b601054610100900460ff1681565b60115481565b610768611e0b565b6001600160a01b0316610779611a35565b6001600160a01b03161461079f5760405162461bcd60e51b815260040161057290613747565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b600d5481565b6008544210156107e95760405162461bcd60e51b8152600401610572906133f6565b600480546040516331a9108f60e11b815233926001600160a01b0390921691636352211e9161081a918791016139b1565b60206040518083038186803b15801561083257600080fd5b505afa158015610846573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061086a9190612db3565b6001600160a01b0316146108905760405162461bcd60e51b815260040161057290613800565b6000828152601a602052604090205460ff161580156108be57506000828152601b602052604090205460ff16155b80156108d957506000828152601c602052604090205460ff16155b80156108f457506000828152601d602052604090205460ff16155b801561090f575060008281526019602052604090205460ff16155b61092b5760405162461bcd60e51b8152600401610572906134ac565b61093560006118ba565b4211156109ca5760006064600d5461094d9190613ab3565b601054600d5491925060009160ff9091169061096b90606490613b75565b6109759190613a76565b9050610982600c82613b75565b1561099757610992600c82613b75565b61099a565b600c5b6109a5600d83613ab3565b6109af9084613a76565b6109ba906064613ae9565b6109c49190613a76565b600d5550505b600d54620315db1480610a6757506012546004805460405163209ca49f60e11b81526001600160a01b0390911691634139493e91610a0a918791016139b1565b60206040518083038186803b158015610a2257600080fd5b505afa158015610a36573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a5a9190613179565b610a649042613b08565b10155b610a835760405162461bcd60e51b81526004016105729061371e565b600d54600090815260096020908152604080832085845290915290205460ff1615610ac05760405162461bcd60e51b8152600401610572906136f5565b600d5460009081526009602090815260408083208584528252808320805460ff19166001179055516103e891610b009142914491339189918991016139c8565b6040516020818303038152906040528051906020012060001c610b239190613b75565b9050600d54620315db1415610bb9576101bd811015610b5f57610b59336000600160405180602001604052806000815250611e22565b50610ca5565b6101bd8110158015610b72575061030a81105b15610b9357610b593360018060405180602001604052806000815250611e22565b61030a8110610bb957610b59336002600160405180602001604052806000815250611e22565b60c88110158015610bca575060fa81105b80610be357506102588110158015610be3575061028a81105b15610c0a57610c05336000600160405180602001604052806000815250611e22565b610ca3565b60648110158015610c1b5750608c81105b80610c3457506101c28110158015610c3457506101e581105b15610c5557610c053360018060405180602001604052806000815250611e22565b61012c8110158015610c68575061014a81105b80610c81575061033e8110158015610c81575061035281105b15610ca357610ca3336002600160405180602001604052806000815250611e22565b505b5050565b600854421015610ccb5760405162461bcd60e51b8152600401610572906133f6565b600480546040516331a9108f60e11b815233926001600160a01b0390921691636352211e91610cfc918691016139b1565b60206040518083038186803b158015610d1457600080fd5b505afa158015610d28573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d4c9190612db3565b6001600160a01b031614610d725760405162461bcd60e51b815260040161057290613824565b60008181526019602052604090205460ff16610da05760405162461bcd60e51b8152600401610572906135ab565b610daa60026118ba565b421115610e475760006064600f54610dc29190613ab3565b90506000601060029054906101000a900460ff1660ff166064600f54610de89190613b75565b610df29190613a76565b9050610dff600c82613b75565b15610e1457610e0f600c82613b75565b610e17565b600c5b610e22600d83613ab3565b610e2c9084613a76565b610e37906064613ae9565b610e419190613a76565b600f5550505b600f546000908152600b6020908152604080832084845290915290205460ff1615610e845760405162461bcd60e51b8152600401610572906136f5565b600f546000908152600b602090815260408083208484528252808320805460ff19166001908117909155815192830190915291815261062c91339160029190611e22565b60105462010000900460ff1681565b610edf611e0b565b6001600160a01b0316856001600160a01b03161480610f055750610f058561050c611e0b565b610f215760405162461bcd60e51b815260040161057290613616565b610f2e8585858585611f11565b5050505050565b610f3d611e0b565b6001600160a01b0316610f4e611a35565b6001600160a01b031614610f745760405162461bcd60e51b815260040161057290613747565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b60105460ff1681565b6000600854821015610fb35750600161059e565b600083815260196020526040812054819081908190819060ff161561109d57610fdc60026118ba565b945084871115611074576064600f54610ff59190613ab3565b601054600f5491945062010000900460ff169061101490606490613b75565b61101e9190613a76565b915061102b600c83613b75565b156110405761103b600c83613b75565b611043565b600c5b61104e600d84613ab3565b6110589085613a76565b611063906064613ae9565b61106d9190613a76565b935061107a565b600f5493505b506000838152600b602090815260408083208a845290915290205460ff16611411565b6000888152601a602052604090205460ff16806110c857506000888152601b602052604090205460ff165b806110e157506000888152601c602052604090205460ff165b806110fa57506000888152601d602052604090205460ff165b1561128d5761110960016118ba565b9450848711156111a0576064600e546111229190613ab3565b601054600e54919450610100900460ff169061114090606490613b75565b61114a9190613a76565b9150611157600c83613b75565b1561116c57611167600c83613b75565b61116f565b600c5b61117a600d84613ab3565b6111849085613a76565b61118f906064613ae9565b6111999190613a76565b93506111a6565b600e5493505b83620315db14156111d457506000838152600a602090815260408083208a845290915290205460ff16611288565b6013546004805460405163209ca49f60e11b81526001600160a01b0390911691634139493e91611206918d91016139b1565b60206040518083038186803b15801561121e57600080fd5b505afa158015611232573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112569190613179565b6112609089613b08565b108061128557506000848152600a602090815260408083208b845290915290205460ff165b90505b611411565b61129760006118ba565b945084871115611329576064600d546112b09190613ab3565b601054600d5491945060ff16906112c990606490613b75565b6112d39190613a76565b91506112e0600c83613b75565b156112f5576112f0600c83613b75565b6112f8565b600c5b611303600d84613ab3565b61130d9085613a76565b611318906064613ae9565b6113229190613a76565b935061132f565b600d5493505b83620315db141561135d575060008381526009602090815260408083208a845290915290205460ff16611411565b6012546004805460405163209ca49f60e11b81526001600160a01b0390911691634139493e9161138f918d91016139b1565b60206040518083038186803b1580156113a757600080fd5b505afa1580156113bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113df9190613179565b6113e99089613b08565b108061140e575060008481526009602090815260408083208b845290915290205460ff165b90505b979650505050505050565b60135481565b6000818152601d602052604090205460ff166114505760405162461bcd60e51b815260040161057290613584565b611459816120e2565b61062c336000600160405180602001604052806000815250611e22565b61147e611e0b565b6001600160a01b031661148f611a35565b6001600160a01b0316146114b55760405162461bcd60e51b815260040161057290613747565b601355565b606081518351146114dd5760405162461bcd60e51b8152600401610572906138b1565b6000835167ffffffffffffffff81111561150757634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015611530578160200160208202803683370190505b50905060005b84518110156115d25761159785828151811061156257634e487b7160e01b600052603260045260246000fd5b602002602001015185838151811061158a57634e487b7160e01b600052603260045260246000fd5b602002602001015161054a565b8282815181106115b757634e487b7160e01b600052603260045260246000fd5b60209081029190910101526115cb81613b5a565b9050611536565b509392505050565b6000806115e683611ab6565b1192915050565b6000818152601b602052604090205460ff1661161b5760405162461bcd60e51b8152600401610572906137a2565b611624816120e2565b61062c336002600160405180602001604052806000815250611e22565b611649611e0b565b6001600160a01b0316836001600160a01b0316148061166f575061166f8361050c611e0b565b8061169457506006546001600160a01b0316611689611e0b565b6001600160a01b0316145b806116b957506007546001600160a01b03166116ae611e0b565b6001600160a01b0316145b6116d55760405162461bcd60e51b8152600401610572906137c9565b610ca3838383612370565b604080516003808252608082019092526000916020820160608036833701905050905060008160008151811061172657634e487b7160e01b600052603260045260246000fd5b60200260200101818152505060018160018151811061175557634e487b7160e01b600052603260045260246000fd5b60200260200101818152505060028160028151811061178457634e487b7160e01b600052603260045260246000fd5b6020908102919091010152604080516003808252608082019092526000918160200160208202803683370190505090506001816000815181106117d757634e487b7160e01b600052603260045260246000fd5b60200260200101818152505060018160018151811061180657634e487b7160e01b600052603260045260246000fd5b60200260200101818152505060018160028151811061183557634e487b7160e01b600052603260045260246000fd5b60200260200101818152505061184c338383612370565b610ca5336003600160405180602001604052806000815250611e22565b60125481565b611877611e0b565b6001600160a01b0316611888611a35565b6001600160a01b0316146118ae5760405162461bcd60e51b815260040161057290613747565b6118b86000612521565b565b600080808060ff85166118d05750600d546118ea565b8460ff16600114156118e55750600e546118ea565b50600f545b6118f5606482613ab3565b9250611902606482613b75565b915060ff85166119235760105461191c9060ff1683613a8e565b915061195d565b8460ff16600114156119445760105461191c90610100900460ff1683613a8e565b60105461195a9062010000900460ff1683613a8e565b91505b611968600d83613ac7565b6119759060ff1684613a50565b9250611982600c83613b89565b60ff161561199a57611995600c83613b89565b61199d565b600c5b6005546011546040516362ba968760e01b81529294506001600160a01b03909116916362ba9687916119dc918791879160019190600090600401613983565b60206040518083038186803b1580156119f457600080fd5b505afa158015611a08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a2c9190613179565b95945050505050565b6003546001600160a01b03165b90565b600e5481565b610ca5611a56611e0b565b8383612573565b6000818152601c602052604090205460ff16611a8b5760405162461bcd60e51b8152600401610572906134d0565b611a94816120e2565b61062c3360018060405180602001604052806000815250611e22565b600f5481565b6000908152600c602052604090205490565b611ad0611e0b565b6001600160a01b0316611ae1611a35565b6001600160a01b031614611b075760405162461bcd60e51b815260040161057290613747565b60018160ff1610158015611b1f5750600c8160ff1611155b611b3b5760405162461bcd60e51b815260040161057290613847565b6010805460ff9092166101000261ff0019909216919091179055565b6000818152601a602052604090205460ff1661161b5760405162461bcd60e51b81526004016105729061377c565b611b8d611e0b565b6001600160a01b0316611b9e611a35565b6001600160a01b031614611bc45760405162461bcd60e51b815260040161057290613747565b60018160ff1610158015611bdc5750600c8160ff1611155b611bf85760405162461bcd60e51b815260040161057290613847565b6010805460ff909216620100000262ff000019909216919091179055565b60085481565b611c24611e0b565b6001600160a01b0316611c35611a35565b6001600160a01b031614611c5b5760405162461bcd60e51b815260040161057290613747565b601255565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205460ff1690565b611c96611e0b565b6001600160a01b0316856001600160a01b03161480611cbc5750611cbc8561050c611e0b565b611cd85760405162461bcd60e51b81526004016105729061353b565b610f2e8585858585612616565b611ced611e0b565b6001600160a01b0316611cfe611a35565b6001600160a01b031614611d245760405162461bcd60e51b815260040161057290613747565b6001600160a01b038116611d4a5760405162461bcd60e51b815260040161057290613466565b61062c81612521565b611d5b611e0b565b6001600160a01b0316836001600160a01b03161480611d815750611d818361050c611e0b565b80611da657506006546001600160a01b0316611d9b611e0b565b6001600160a01b0316145b80611dcb57506007546001600160a01b0316611dc0611e0b565b6001600160a01b0316145b611de75760405162461bcd60e51b8152600401610572906137c9565b610ca383838361274a565b6001600160e01b031981166301ffc9a760e01b14919050565b3390565b8051610ca5906002906020840190612c14565b6001600160a01b038416611e485760405162461bcd60e51b815260040161057290613942565b6000611e52611e0b565b9050611e7381600087611e6488612859565b611e6d88612859565b876128b2565b6000848152602081815260408083206001600160a01b038916845290915281208054859290611ea3908490613a76565b92505081905550846001600160a01b031660006001600160a01b0316826001600160a01b03167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051611efa9291906139ba565b60405180910390a4610f2e81600087878787612a04565b8151835114611f325760405162461bcd60e51b8152600401610572906138fa565b6001600160a01b038416611f585760405162461bcd60e51b8152600401610572906135d1565b6000611f62611e0b565b9050611f728187878787876128b2565b60005b8451811015612074576000858281518110611fa057634e487b7160e01b600052603260045260246000fd5b602002602001015190506000858381518110611fcc57634e487b7160e01b600052603260045260246000fd5b602090810291909101810151600084815280835260408082206001600160a01b038e16835290935291909120549091508181101561201c5760405162461bcd60e51b8152600401610572906136ab565b6000838152602081815260408083206001600160a01b038e8116855292528083208585039055908b16825281208054849290612059908490613a76565b925050819055505050508061206d90613b5a565b9050611f75565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516120c4929190613317565b60405180910390a46120da818787878787612b12565b505050505050565b6008544210156121045760405162461bcd60e51b8152600401610572906133f6565b600480546040516331a9108f60e11b815233926001600160a01b0390921691636352211e91612135918691016139b1565b60206040518083038186803b15801561214d57600080fd5b505afa158015612161573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121859190612db3565b6001600160a01b0316146121ab5760405162461bcd60e51b815260040161057290613824565b6121b560016118ba565b4211156122525760006064600e546121cd9190613ab3565b90506000601060019054906101000a900460ff1660ff166064600e546121f39190613b75565b6121fd9190613a76565b905061220a600c82613b75565b1561221f5761221a600c82613b75565b612222565b600c5b61222d600d83613ab3565b6122379084613a76565b612242906064613ae9565b61224c9190613a76565b600e5550505b600e54620315db14806122ef57506013546004805460405163209ca49f60e11b81526001600160a01b0390911691634139493e91612292918691016139b1565b60206040518083038186803b1580156122aa57600080fd5b505afa1580156122be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122e29190613179565b6122ec9042613b08565b10155b61230b5760405162461bcd60e51b81526004016105729061371e565b600e546000908152600a6020908152604080832084845290915290205460ff16156123485760405162461bcd60e51b8152600401610572906136f5565b600e546000908152600a6020908152604080832093835292905220805460ff19166001179055565b6001600160a01b0383166123965760405162461bcd60e51b815260040161057290613668565b80518251146123b75760405162461bcd60e51b8152600401610572906138fa565b60006123c1611e0b565b90506123e1818560008686604051806020016040528060008152506128b2565b60005b83518110156124c257600084828151811061240f57634e487b7160e01b600052603260045260246000fd5b60200260200101519050600084838151811061243b57634e487b7160e01b600052603260045260246000fd5b602090810291909101810151600084815280835260408082206001600160a01b038c16835290935291909120549091508181101561248b5760405162461bcd60e51b8152600401610572906134f7565b6000928352602083815260408085206001600160a01b038b16865290915290922091039055806124ba81613b5a565b9150506123e4565b5060006001600160a01b0316846001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051612513929190613317565b60405180910390a450505050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b816001600160a01b0316836001600160a01b031614156125a55760405162461bcd60e51b815260040161057290613868565b6001600160a01b0383811660008181526001602090815260408083209487168084529490915290819020805460ff1916851515179055517f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c319061260990859061333c565b60405180910390a3505050565b6001600160a01b03841661263c5760405162461bcd60e51b8152600401610572906135d1565b6000612646611e0b565b9050612657818787611e6488612859565b6000848152602081815260408083206001600160a01b038a168452909152902054838110156126985760405162461bcd60e51b8152600401610572906136ab565b6000858152602081815260408083206001600160a01b038b81168552925280832087850390559088168252812080548692906126d5908490613a76565b92505081905550856001600160a01b0316876001600160a01b0316836001600160a01b03167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62888860405161272b9291906139ba565b60405180910390a4612741828888888888612a04565b50505050505050565b6001600160a01b0383166127705760405162461bcd60e51b815260040161057290613668565b600061277a611e0b565b90506127aa8185600061278c87612859565b61279587612859565b604051806020016040528060008152506128b2565b6000838152602081815260408083206001600160a01b0388168452909152902054828110156127eb5760405162461bcd60e51b8152600401610572906134f7565b6000848152602081815260408083206001600160a01b03808a16808652919093528184208786039055905190918516907fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f629061284a90899089906139ba565b60405180910390a45050505050565b604080516001808252818301909252606091600091906020808301908036833701905050905082816000815181106128a157634e487b7160e01b600052603260045260246000fd5b602090810291909101015292915050565b6128c08686868686866120da565b6001600160a01b0385166129635760005b8351811015612961578281815181106128fa57634e487b7160e01b600052603260045260246000fd5b6020026020010151600c600086848151811061292657634e487b7160e01b600052603260045260246000fd5b60200260200101518152602001908152602001600020600082825461294b9190613a76565b9091555061295a905081613b5a565b90506128d1565b505b6001600160a01b0384166120da5760005b83518110156127415782818151811061299d57634e487b7160e01b600052603260045260246000fd5b6020026020010151600c60008684815181106129c957634e487b7160e01b600052603260045260246000fd5b6020026020010151815260200190815260200160002060008282546129ee9190613b08565b909155506129fd905081613b5a565b9050612974565b612a16846001600160a01b0316612be3565b156120da5760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e6190612a4f90899089908890889088906004016132ca565b602060405180830381600087803b158015612a6957600080fd5b505af1925050508015612a99575060408051601f3d908101601f19168201909252612a96918101906130f7565b60015b612ae257612aa5613bf3565b80612ab05750612aca565b8060405162461bcd60e51b81526004016105729190613347565b60405162461bcd60e51b81526004016105729061335a565b6001600160e01b0319811663f23a6e6160e01b146127415760405162461bcd60e51b8152600401610572906133ae565b612b24846001600160a01b0316612be3565b156120da5760405163bc197c8160e01b81526001600160a01b0385169063bc197c8190612b5d908990899088908890889060040161326c565b602060405180830381600087803b158015612b7757600080fd5b505af1925050508015612ba7575060408051601f3d908101601f19168201909252612ba4918101906130f7565b60015b612bb357612aa5613bf3565b6001600160e01b0319811663bc197c8160e01b146127415760405162461bcd60e51b8152600401610572906133ae565b600080826001600160a01b0316803b806020016040519081016040528181526000908060200190933c511192915050565b828054612c2090613b1f565b90600052602060002090601f016020900481019282612c425760008555612c88565b82601f10612c5b57805160ff1916838001178555612c88565b82800160010185558215612c88579182015b82811115612c88578251825591602001919060010190612c6d565b50612c94929150612c98565b5090565b5b80821115612c945760008155600101612c99565b600067ffffffffffffffff831115612cc757612cc7613bd7565b612cda601f8401601f1916602001613a02565b9050828152838383011115612cee57600080fd5b828260208301376000602084830101529392505050565b600082601f830112612d15578081fd5b81356020612d2a612d2583613a2c565b613a02565b8281528181019085830183850287018401881015612d46578586fd5b855b85811015612d6457813584529284019290840190600101612d48565b5090979650505050505050565b600082601f830112612d81578081fd5b612d9083833560208501612cad565b9392505050565b600060208284031215612da8578081fd5b8135612d9081613c98565b600060208284031215612dc4578081fd5b8151612d9081613c98565b60008060408385031215612de1578081fd5b8235612dec81613c98565b91506020830135612dfc81613c98565b809150509250929050565b600080600080600060a08688031215612e1e578081fd5b8535612e2981613c98565b94506020860135612e3981613c98565b9350604086013567ffffffffffffffff80821115612e55578283fd5b612e6189838a01612d05565b94506060880135915080821115612e76578283fd5b612e8289838a01612d05565b93506080880135915080821115612e97578283fd5b50612ea488828901612d71565b9150509295509295909350565b600080600080600060a08688031215612ec8578081fd5b8535612ed381613c98565b94506020860135612ee381613c98565b93506040860135925060608601359150608086013567ffffffffffffffff811115612f0c578182fd5b612ea488828901612d71565b600080600060608486031215612f2c578283fd5b8335612f3781613c98565b9250602084013567ffffffffffffffff80821115612f53578384fd5b612f5f87838801612d05565b93506040860135915080821115612f74578283fd5b50612f8186828701612d05565b9150509250925092565b60008060408385031215612f9d578081fd5b8235612fa881613c98565b915060208301358015158114612dfc578182fd5b60008060408385031215612fce578182fd5b8235612fd981613c98565b946020939093013593505050565b600080600060608486031215612ffb578081fd5b833561300681613c98565b95602085013595506040909401359392505050565b6000806040838503121561302d578182fd5b823567ffffffffffffffff80821115613044578384fd5b818501915085601f830112613057578384fd5b81356020613067612d2583613a2c565b82815281810190858301838502870184018b1015613083578889fd5b8896505b848710156130ae57803561309a81613c98565b835260019690960195918301918301613087565b50965050860135925050808211156130c4578283fd5b506130d185828601612d05565b9150509250929050565b6000602082840312156130ec578081fd5b8135612d9081613cad565b600060208284031215613108578081fd5b8151612d9081613cad565b600060208284031215613124578081fd5b813567ffffffffffffffff81111561313a578182fd5b8201601f8101841361314a578182fd5b61315984823560208401612cad565b949350505050565b600060208284031215613172578081fd5b5035919050565b60006020828403121561318a578081fd5b5051919050565b600080604083850312156131a3578182fd5b50508035926020909101359150565b6000602082840312156131c3578081fd5b813560ff81168114612d90578182fd5b6000815180845260208085019450808401835b83811015613202578151875295820195908201906001016131e6565b509495945050505050565b60008151808452815b8181101561323257602081850181015186830182015201613216565b818111156132435782602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0391909116815260200190565b6001600160a01b0386811682528516602082015260a060408201819052600090613298908301866131d3565b82810360608401526132aa81866131d3565b905082810360808401526132be818561320d565b98975050505050505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a0608082018190526000906114119083018461320d565b600060208252612d9060208301846131d3565b60006040825261332a60408301856131d3565b8281036020840152611a2c81856131d3565b901515815260200190565b600060208252612d90602083018461320d565b60208082526034908201527f455243313135353a207472616e7366657220746f206e6f6e20455243313135356040820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b606082015260800190565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b6020808252600b908201526a139bdd081cdd185c9d195960aa1b604082015260600190565b6020808252602b908201527f455243313135353a2062616c616e636520717565727920666f7220746865207a60408201526a65726f206164647265737360a81b606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b6020808252600a9082015269139bdd08139bdc9b585b60b21b604082015260600190565b6020808252600d908201526c2737ba1021b430b91021b7b4b960991b604082015260600190565b60208082526024908201527f455243313135353a206275726e20616d6f756e7420657863656564732062616c604082015263616e636560e01b606082015260800190565b60208082526029908201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260408201526808185c1c1c9bdd995960ba1b606082015260800190565b6020808252600d908201526c4e6f74205665672b426c6f6f6d60981b604082015260600190565b6020808252600c908201526b4e6f7420506c6174696e756d60a01b604082015260600190565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526032908201527f455243313135353a207472616e736665722063616c6c6572206973206e6f74206040820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b606082015260800190565b60208082526023908201527f455243313135353a206275726e2066726f6d20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b6020808252600f908201526e105b1c9958591e4818db185a5b5959608a1b604082015260600190565b6020808252600f908201526e09cdee840d0dec8d840cadcdeeaced608b1b604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252600c908201526b2737ba102d35b4ba3a3632bd60a11b604082015260600190565b6020808252600d908201526c2737ba102a32b938102437b3bd60991b604082015260600190565b6020808252601f908201527f455243313135353a206e6f74206f776e6572206e6f7220617070726f76656400604082015260600190565b6020808252600a90820152692737ba1037bbb732b91760b11b604082015260600190565b6020808252600990820152682737ba1037bbb732b960b91b604082015260600190565b602080825260079082015266125b9d985b1a5960ca1b604082015260600190565b60208082526029908201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604082015268103337b91039b2b63360b91b606082015260800190565b60208082526029908201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604082015268040dad2e6dac2e8c6d60bb1b606082015260800190565b60208082526028908201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206040820152670dad2e6dac2e8c6d60c31b606082015260800190565b60208082526021908201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736040820152607360f81b606082015260800190565b61ffff95909516855260ff938416602086015291831660408501528216606084015216608082015260a00190565b90815260200190565b918252602082015260400190565b94855260208501939093526001600160a01b039190911660408401526060830152608082015260a00190565b60ff91909116815260200190565b60405181810167ffffffffffffffff81118282101715613a2457613a24613bd7565b604052919050565b600067ffffffffffffffff821115613a4657613a46613bd7565b5060209081020190565b600061ffff808316818516808303821115613a6d57613a6d613bab565b01949350505050565b60008219821115613a8957613a89613bab565b500190565b600060ff821660ff84168060ff03821115613aab57613aab613bab565b019392505050565b600082613ac257613ac2613bc1565b500490565b600060ff831680613ada57613ada613bc1565b8060ff84160491505092915050565b6000816000190483118215151615613b0357613b03613bab565b500290565b600082821015613b1a57613b1a613bab565b500390565b600281046001821680613b3357607f821691505b60208210811415613b5457634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415613b6e57613b6e613bab565b5060010190565b600082613b8457613b84613bc1565b500690565b600060ff831680613b9c57613b9c613bc1565b8060ff84160691505092915050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b60e01c90565b600060443d1015613c0357611a42565b600481823e6308c379a0613c178251613bed565b14613c2157611a42565b6040513d600319016004823e80513d67ffffffffffffffff8160248401118184111715613c515750505050611a42565b82840192508251915080821115613c6b5750505050611a42565b503d83016020828401011115613c8357505050611a42565b601f01601f1916810160200160405291505090565b6001600160a01b038116811461062c57600080fd5b6001600160e01b03198116811461062c57600080fdfea26469706673582212208b55910c8c8c3f735f46c41b3fdbac49d04d7e8786047f349a2cd9e1ae01631364736f6c63430008000033

Deployed Bytecode Sourcemap

37390:14206:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23377:231;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22400:310;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;40803:87::-;;;;;;:::i;:::-;;:::i;:::-;;23121:105;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;42932:198::-;;;;;;:::i;:::-;;:::i;38424:32::-;;;:::i;:::-;;;;;;;:::i;38505:29::-;;;:::i;40535:122::-;;;;;;:::i;:::-;;:::i;38246:38::-;;;:::i;47427:1894::-;;;;;;:::i;:::-;;:::i;45049:761::-;;;;;;:::i;:::-;;:::i;38463:33::-;;;:::i;25316:442::-;;;;;;:::i;:::-;;:::i;40665:130::-;;;;;;:::i;:::-;;:::i;38386:31::-;;;:::i;49329:2264::-;;;;;;:::i;:::-;;:::i;38598:41::-;;;:::i;47222:197::-;;;;;;:::i;:::-;;:::i;43705:133::-;;;;;;:::i;:::-;;:::i;23774:524::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;42816:108::-;;;;;;:::i;:::-;;:::i;46817:192::-;;;;;;:::i;:::-;;:::i;41293:419::-;;;;;;:::i;:::-;;:::i;44648:393::-;;;:::i;38551:40::-;;;:::i;2606:103::-;;;:::i;43846:794::-;;;;;;:::i;:::-;;:::i;1955:87::-;;;:::i;:::-;;;;;;;:::i;38291:39::-;;;:::i;24371:155::-;;;;;;:::i;:::-;;:::i;47017:197::-;;;;;;:::i;:::-;;:::i;38337:40::-;;;:::i;42605:113::-;;;;;;:::i;:::-;;:::i;43138:204::-;;;;;;:::i;:::-;;:::i;46618:191::-;;;;;;:::i;:::-;;:::i;43350:210::-;;;;;;:::i;:::-;;:::i;37697:42::-;;;:::i;43568:129::-;;;;;;:::i;:::-;;:::i;24598:168::-;;;;;;:::i;:::-;;:::i;24838:401::-;;;;;;:::i;:::-;;:::i;2864:201::-;;;;;;:::i;:::-;;:::i;40898:387::-;;;;;;:::i;:::-;;:::i;23377:231::-;23463:7;-1:-1:-1;;;;;23491:21:0;;23483:77;;;;-1:-1:-1;;;23483:77:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;23578:9:0;:13;;;;;;;;;;;-1:-1:-1;;;;;23578:22:0;;;;;;;;;;23377:231;;;;;:::o;22400:310::-;22502:4;-1:-1:-1;;;;;;22539:41:0;;-1:-1:-1;;;22539:41:0;;:110;;-1:-1:-1;;;;;;;22597:52:0;;-1:-1:-1;;;22597:52:0;22539:110;:163;;;;22666:36;22690:11;22666:23;:36::i;40803:87::-;2186:12;:10;:12::i;:::-;-1:-1:-1;;;;;2175:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2175:23:0;;2167:68;;;;-1:-1:-1;;;2167:68:0;;;;;;;:::i;:::-;40869:13:::1;40877:4;40869:7;:13::i;:::-;40803:87:::0;:::o;23121:105::-;23181:13;23214:4;23207:11;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23121:105;;;:::o;42932:198::-;2186:12;:10;:12::i;:::-;-1:-1:-1;;;;;2175:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2175:23:0;;2167:68;;;;-1:-1:-1;;;2167:68:0;;;;;;;:::i;:::-;43041:1:::1;43023:15;:19;;;;:44;;;;;43065:2;43046:15;:21;;;;43023:44;43015:64;;;;-1:-1:-1::0;;;43015:64:0::1;;;;;;;:::i;:::-;43090:14;:32:::0;;-1:-1:-1;;43090:32:0::1;;::::0;;;::::1;::::0;;;::::1;::::0;;42932:198::o;38424:32::-;;;;;;;;;:::o;38505:29::-;;;;:::o;40535:122::-;2186:12;:10;:12::i;:::-;-1:-1:-1;;;;;2175:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2175:23:0;;2167:68;;;;-1:-1:-1;;;2167:68:0;;;;;;;:::i;:::-;40613:17:::1;:36:::0;;-1:-1:-1;;;;;;40613:36:0::1;-1:-1:-1::0;;;;;40613:36:0;;;::::1;::::0;;;::::1;::::0;;40535:122::o;38246:38::-;;;;:::o;47427:1894::-;47528:14;;47509:15;:33;;47501:57;;;;-1:-1:-1;;;47501:57:0;;;;;;;:::i;:::-;47577:10;;;:27;;-1:-1:-1;;;47577:27:0;;47608:10;;-1:-1:-1;;;;;47577:10:0;;;;:18;;:27;;47596:7;;47577:27;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;47577:41:0;;47569:64;;;;-1:-1:-1;;;47569:64:0;;;;;;;:::i;:::-;47653:20;;;;:11;:20;;;;;;;;47652:21;:46;;;;-1:-1:-1;47678:20:0;;;;:11;:20;;;;;;;;47677:21;47652:46;:71;;;;-1:-1:-1;47703:20:0;;;;:11;:20;;;;;;;;47702:21;47652:71;:96;;;;-1:-1:-1;47728:20:0;;;;:11;:20;;;;;;;;47727:21;47652:96;:121;;;;-1:-1:-1;47753:20:0;;;;:11;:20;;;;;;;;47752:21;47652:121;47644:144;;;;-1:-1:-1;;;47644:144:0;;;;;;;:::i;:::-;47822:18;47838:1;47822:15;:18::i;:::-;47804:15;:36;47801:282;;;47857:12;47889:3;47872:14;;:20;;;;:::i;:::-;47950:14;;47927;;47857:35;;-1:-1:-1;47907:17:0;;47950:14;;;;;47927:20;;47944:3;;47927:20;:::i;:::-;:37;;;;:::i;:::-;47907:57;-1:-1:-1;48029:14:0;48041:2;47907:57;48029:14;:::i;:::-;:19;:41;;48056:14;48068:2;48056:9;:14;:::i;:::-;48029:41;;;48051:2;48029:41;48004:14;48016:2;48004:9;:14;:::i;:::-;47997:21;;:4;:21;:::i;:::-;47996:29;;48022:3;47996:29;:::i;:::-;:75;;;;:::i;:::-;47979:14;:92;-1:-1:-1;;47801:282:0;48103:14;;48121:6;48103:24;:97;;;-1:-1:-1;48185:15:0;;48149:10;;;:32;;-1:-1:-1;;;48149:32:0;;-1:-1:-1;;;;;48149:10:0;;;;:23;;:32;;48173:7;;48149:32;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;48131:50;;:15;:50;:::i;:::-;:69;;48103:97;48095:125;;;;-1:-1:-1;;;48095:125:0;;;;;;;:::i;:::-;48258:14;;48239:34;;;;:18;:34;;;;;;;;:43;;;;;;;;;;;:52;48231:80;;;;-1:-1:-1;;;48231:80:0;;;;;;;:::i;:::-;48341:14;;48322:34;;;;:18;:34;;;;;;;;:43;;;;;;;;:50;;-1:-1:-1;;48322:50:0;48368:4;48322:50;;;48418:74;48497:4;;48418:74;;48429:15;;48446:16;;48464:10;;48357:7;;48485:6;;48418:74;;:::i;:::-;;;;;;;;;;;;;48408:85;;;;;;48400:94;;:101;;;;:::i;:::-;48385:116;;48517:14;;48535:6;48517:24;48514:424;;;48568:3;48561:4;:10;48558:369;;;48592:36;48598:10;38108:1;48622;48592:36;;;;;;;;;;;;:5;:36::i;:::-;48647:7;;;48558:369;48686:3;48678:4;:11;;:25;;;;;48700:3;48693:4;:10;48678:25;48675:252;;;48724:36;48730:10;38154:1;48754;48724:36;;;;;;;;;;;;:5;:36::i;48675:252::-;48831:3;48823:4;:11;48820:107;;48855:31;48861:10;38195:1;48880;48855:31;;;;;;;;;;;;:5;:31::i;48820:107::-;48962:3;48954:4;:11;;:25;;;;;48976:3;48969:4;:10;48954:25;48953:58;;;;48993:3;48985:4;:11;;:25;;;;;49007:3;49000:4;:10;48985:25;48950:363;;;49026:36;49032:10;38108:1;49056;49026:36;;;;;;;;;;;;:5;:36::i;:::-;48950:363;;;49090:3;49082:4;:11;;:25;;;;;49104:3;49097:4;:10;49082:25;49081:58;;;;49121:3;49113:4;:11;;:25;;;;;49135:3;49128:4;:10;49113:25;49078:235;;;49154:36;49160:10;38154:1;49184;49154:36;;;;;;;;;;;;:5;:36::i;49078:235::-;49218:3;49210:4;:11;;:25;;;;;49232:3;49225:4;:10;49210:25;49209:58;;;;49249:3;49241:4;:11;;:25;;;;;49263:3;49256:4;:10;49241:25;49206:107;;;49282:31;49288:10;38195:1;49307;49282:31;;;;;;;;;;;;:5;:31::i;:::-;47427:1894;;;;:::o;45049:761::-;45136:14;;45117:15;:33;;45109:57;;;;-1:-1:-1;;;45109:57:0;;;;;;;:::i;:::-;45185:10;;;:27;;-1:-1:-1;;;45185:27:0;;45216:10;;-1:-1:-1;;;;;45185:10:0;;;;:18;;:27;;45204:7;;45185:27;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;45185:41:0;;45177:63;;;;-1:-1:-1;;;45177:63:0;;;;;;;:::i;:::-;45259:20;;;;:11;:20;;;;;;;;45251:45;;;;-1:-1:-1;;;45251:45:0;;;;;;;:::i;:::-;45330:18;45346:1;45330:15;:18::i;:::-;45312:15;:36;45309:290;;;45365:12;45399:3;45380:16;;:22;;;;:::i;:::-;45365:37;;45417:17;45462:16;;;;;;;;;;;45437:41;;45456:3;45437:16;;:22;;;;:::i;:::-;:41;;;;:::i;:::-;45417:61;-1:-1:-1;45545:14:0;45557:2;45417:61;45545:14;:::i;:::-;:19;:41;;45572:14;45584:2;45572:9;:14;:::i;:::-;45545:41;;;45567:2;45545:41;45520:14;45532:2;45520:9;:14;:::i;:::-;45513:21;;:4;:21;:::i;:::-;45512:29;;45538:3;45512:29;:::i;:::-;:75;;;;:::i;:::-;45493:16;:94;-1:-1:-1;;45309:290:0;45640:16;;45619:38;;;;:20;:38;;;;;;;;:47;;;;;;;;;;;:56;45611:84;;;;-1:-1:-1;;;45611:84:0;;;;;;;:::i;:::-;45727:16;;45706:38;;;;:20;:38;;;;;;;;:47;;;;;;;;:54;;-1:-1:-1;;45706:54:0;45756:4;45706:54;;;;;;45771:31;;;;;;;;;;;;;45777:10;;38195:1;;45756:4;45771:5;:31::i;38463:33::-;;;;;;;;;:::o;25316:442::-;25557:12;:10;:12::i;:::-;-1:-1:-1;;;;;25549:20:0;:4;-1:-1:-1;;;;;25549:20:0;;:60;;;;25573:36;25590:4;25596:12;:10;:12::i;25573:36::-;25527:160;;;;-1:-1:-1;;;25527:160:0;;;;;;;:::i;:::-;25698:52;25721:4;25727:2;25731:3;25736:7;25745:4;25698:22;:52::i;:::-;25316:442;;;;;:::o;40665:130::-;2186:12;:10;:12::i;:::-;-1:-1:-1;;;;;2175:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2175:23:0;;2167:68;;;;-1:-1:-1;;;2167:68:0;;;;;;;:::i;:::-;40747:19:::1;:40:::0;;-1:-1:-1;;;;;;40747:40:0::1;-1:-1:-1::0;;;;;40747:40:0;;;::::1;::::0;;;::::1;::::0;;40665:130::o;38386:31::-;;;;;;:::o;49329:2264::-;49409:4;49441:14;;49429:9;:26;49426:55;;;-1:-1:-1;49477:4:0;49470:11;;49426:55;49494:15;49628:20;;;:11;:20;;;;;;49494:15;;;;;;;;49628:20;;49625:1934;;;49674:18;49690:1;49674:15;:18::i;:::-;49664:28;;49722:7;49710:9;:19;49707:328;;;49776:3;49757:16;;:22;;;;:::i;:::-;49835:16;;49810;;49750:29;;-1:-1:-1;49835:16:0;;;;;;49810:22;;49829:3;;49810:22;:::i;:::-;:41;;;;:::i;:::-;49798:53;-1:-1:-1;49914:14:0;49926:2;49798:53;49914:14;:::i;:::-;:19;:41;;49941:14;49953:2;49941:9;:14;:::i;:::-;49914:41;;;49936:2;49914:41;49889:14;49901:2;49889:9;:14;:::i;:::-;49882:21;;:4;:21;:::i;:::-;49881:29;;49907:3;49881:29;:::i;:::-;:75;;;;:::i;:::-;49870:86;;49707:328;;;50019:16;;50008:27;;49707:328;-1:-1:-1;50076:30:0;;;;:20;:30;;;;;;;;:39;;;;;;;;;;;49625:1934;;;50145:20;;;;:11;:20;;;;;;;;;:44;;-1:-1:-1;50169:20:0;;;;:11;:20;;;;;;;;50145:44;:68;;;-1:-1:-1;50193:20:0;;;;:11;:20;;;;;;;;50145:68;:92;;;-1:-1:-1;50217:20:0;;;;:11;:20;;;;;;;;50145:92;50142:1417;;;50264:18;50280:1;50264:15;:18::i;:::-;50254:28;;50312:7;50300:9;:19;50297:324;;;50365:3;50347:15;;:21;;;;:::i;:::-;50423:15;;50399;;50340:28;;-1:-1:-1;50423:15:0;;;;;;50399:21;;50417:3;;50399:21;:::i;:::-;:39;;;;:::i;:::-;50387:51;-1:-1:-1;50501:14:0;50513:2;50387:51;50501:14;:::i;:::-;:19;:41;;50528:14;50540:2;50528:9;:14;:::i;:::-;50501:41;;;50523:2;50501:41;50476:14;50488:2;50476:9;:14;:::i;:::-;50469:21;;:4;:21;:::i;:::-;50468:29;;50494:3;50468:29;:::i;:::-;:75;;;;:::i;:::-;50457:86;;50297:324;;;50606:15;;50595:26;;50297:324;50639:8;50651:6;50639:18;50636:246;;;-1:-1:-1;50688:29:0;;;;:19;:29;;;;;;;;:38;;;;;;;;;;;50636:246;;;50823:16;;50788:10;;;:32;;-1:-1:-1;;;50788:32:0;;-1:-1:-1;;;;;50788:10:0;;;;:23;;:32;;50812:7;;50788:32;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;50776:44;;:9;:44;:::i;:::-;:63;50775:107;;;-1:-1:-1;50844:29:0;;;;:19;:29;;;;;;;;:38;;;;;;;;;;;50775:107;50763:119;;50636:246;50142:1417;;;50934:18;50950:1;50934:15;:18::i;:::-;50924:28;;50982:7;50970:9;:19;50967:320;;;51034:3;51017:14;;:20;;;;:::i;:::-;51091:14;;51068;;51010:27;;-1:-1:-1;51091:14:0;;;51068:20;;51085:3;;51068:20;:::i;:::-;:37;;;;:::i;:::-;51056:49;-1:-1:-1;51168:14:0;51180:2;51056:49;51168:14;:::i;:::-;:19;:41;;51195:14;51207:2;51195:9;:14;:::i;:::-;51168:41;;;51190:2;51168:41;51143:14;51155:2;51143:9;:14;:::i;:::-;51136:21;;:4;:21;:::i;:::-;51135:29;;51161:3;51135:29;:::i;:::-;:75;;;;:::i;:::-;51124:86;;50967:320;;;51273:14;;51262:25;;50967:320;51307:8;51319:6;51307:18;51304:243;;;-1:-1:-1;51356:28:0;;;;:18;:28;;;;;;;;:37;;;;;;;;;;;51304:243;;;51490:15;;51455:10;;;:32;;-1:-1:-1;;;51455:32:0;;-1:-1:-1;;;;;51455:10:0;;;;:23;;:32;;51479:7;;51455:32;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;51443:44;;:9;:44;:::i;:::-;:62;51442:105;;;-1:-1:-1;51510:28:0;;;;:18;:28;;;;;;;;:37;;;;;;;;;;;51442:105;51430:117;;51304:243;51576:9;49329:2264;-1:-1:-1;;;;;;;49329:2264:0:o;38598:41::-;;;;:::o;47222:197::-;47290:20;;;;:11;:20;;;;;;;;47282:46;;;;-1:-1:-1;;;47282:46:0;;;;;;;:::i;:::-;47341:21;47354:7;47341:12;:21::i;:::-;47375:36;47381:10;38108:1;47405;47375:36;;;;;;;;;;;;:5;:36::i;43705:133::-;2186:12;:10;:12::i;:::-;-1:-1:-1;;;;;2175:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2175:23:0;;2167:68;;;;-1:-1:-1;;;2167:68:0;;;;;;;:::i;:::-;43794:16:::1;:36:::0;43705:133::o;23774:524::-;23930:16;23991:3;:10;23972:8;:15;:29;23964:83;;;;-1:-1:-1;;;23964:83:0;;;;;;;:::i;:::-;24060:30;24107:8;:15;24093:30;;;;;;-1:-1:-1;;;24093:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24093:30:0;;24060:63;;24141:9;24136:122;24160:8;:15;24156:1;:19;24136:122;;;24216:30;24226:8;24235:1;24226:11;;;;;;-1:-1:-1;;;24226:11:0;;;;;;;;;;;;;;;24239:3;24243:1;24239:6;;;;;;-1:-1:-1;;;24239:6:0;;;;;;;;;;;;;;;24216:9;:30::i;:::-;24197:13;24211:1;24197:16;;;;;;-1:-1:-1;;;24197:16:0;;;;;;;;;;;;;;;;;;:49;24177:3;;;:::i;:::-;;;24136:122;;;-1:-1:-1;24277:13:0;23774:524;-1:-1:-1;;;23774:524:0:o;42816:108::-;42873:4;42915:1;42897:15;42909:2;42897:11;:15::i;:::-;:19;;42816:108;-1:-1:-1;;42816:108:0:o;46817:192::-;46885:20;;;;:11;:20;;;;;;;;46877:46;;;;-1:-1:-1;;;46877:46:0;;;;;;;:::i;:::-;46936:21;46949:7;46936:12;:21::i;:::-;46970:31;46976:10;38195:1;46995;46970:31;;;;;;;;;;;;:5;:31::i;41293:419::-;41469:12;:10;:12::i;:::-;-1:-1:-1;;;;;41458:23:0;:7;-1:-1:-1;;;;;41458:23:0;;:66;;;;41485:39;41502:7;41511:12;:10;:12::i;41485:39::-;41458:103;;;-1:-1:-1;41544:17:0;;-1:-1:-1;;;;;41544:17:0;41528:12;:10;:12::i;:::-;-1:-1:-1;;;;;41528:33:0;;41458:103;:142;;;-1:-1:-1;41581:19:0;;-1:-1:-1;;;;;41581:19:0;41565:12;:10;:12::i;:::-;-1:-1:-1;;;;;41565:35:0;;41458:142;41436:223;;;;-1:-1:-1;;;41436:223:0;;;;;;;:::i;:::-;41672:32;41683:7;41692:3;41697:6;41672:10;:32::i;44648:393::-;44713:16;;;44727:1;44713:16;;;;;;;;;44690:20;;44713:16;;;;;;;;;;-1:-1:-1;44713:16:0;44690:39;;38108:1;44740:3;44744:1;44740:6;;;;;;-1:-1:-1;;;44740:6:0;;;;;;;;;;;;;;:19;;;;;38154:1;44770:3;44774:1;44770:6;;;;;;-1:-1:-1;;;44770:6:0;;;;;;;;;;;;;;:19;;;;;38195:1;44800:3;44804:1;44800:6;;;;;;-1:-1:-1;;;44800:6:0;;;;;;;;;;;;;;;;;;:14;44853:16;;;44867:1;44853:16;;;;;;;;;44827:23;;44853:16;;;;;;;;;;;;-1:-1:-1;44853:16:0;44827:42;;44892:1;44880:6;44887:1;44880:9;;;;;;-1:-1:-1;;;44880:9:0;;;;;;;;;;;;;;:13;;;;;44916:1;44904:6;44911:1;44904:9;;;;;;-1:-1:-1;;;44904:9:0;;;;;;;;;;;;;;:13;;;;;44940:1;44928:6;44935:1;44928:9;;;;;;-1:-1:-1;;;44928:9:0;;;;;;;;;;;;;;:13;;;;;44954:35;44965:10;44977:3;44982:6;44954:10;:35::i;:::-;45002:31;45008:10;38236:1;45027;45002:31;;;;;;;;;;;;:5;:31::i;38551:40::-;;;;:::o;2606:103::-;2186:12;:10;:12::i;:::-;-1:-1:-1;;;;;2175:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2175:23:0;;2167:68;;;;-1:-1:-1;;;2167:68:0;;;;;;;:::i;:::-;2671:30:::1;2698:1;2671:18;:30::i;:::-;2606:103::o:0;43846:794::-;43905:7;;;;44001:10;;;43998:179;;-1:-1:-1;44037:14:0;;43998:179;;;44070:5;:10;;44079:1;44070:10;44067:110;;;-1:-1:-1;44106:15:0;;44067:110;;;-1:-1:-1;44161:16:0;;44067:110;44204:14;44215:3;44204:8;:14;:::i;:::-;44190:29;-1:-1:-1;44244:14:0;44255:3;44244:8;:14;:::i;:::-;44230:29;-1:-1:-1;44275:10:0;;;44272:194;;44316:14;;44308:22;;44316:14;;44308:5;:22;:::i;:::-;44300:30;;44272:194;;;44349:5;:10;;44358:1;44349:10;44346:120;;;44390:15;;44382:23;;44390:15;;;;;44382:5;:23;:::i;44346:120::-;44450:16;;44442:24;;44450:16;;;;;44442:5;:24;:::i;:::-;44434:32;;44346:120;44493:10;44501:2;44493:5;:10;:::i;:::-;44486:17;;;;:4;:17;:::i;:::-;44479:24;-1:-1:-1;44522:10:0;44530:2;44522:5;:10;:::i;:::-;:15;;;:33;;44545:10;44553:2;44545:5;:10;:::i;:::-;44522:33;;;44540:2;44522:33;44575:8;;44618:9;;44575:57;;-1:-1:-1;;;44575:57:0;;44514:41;;-1:-1:-1;;;;;;44575:8:0;;;;:20;;:57;;44596:4;;44514:41;;44575:8;;44618:9;44575:8;;:57;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;44568:64;43846:794;-1:-1:-1;;;;;43846:794:0:o;1955:87::-;2028:6;;-1:-1:-1;;;;;2028:6:0;1955:87;;:::o;38291:39::-;;;;:::o;24371:155::-;24466:52;24485:12;:10;:12::i;:::-;24499:8;24509;24466:18;:52::i;47017:197::-;47085:20;;;;:11;:20;;;;;;;;47077:46;;;;-1:-1:-1;;;47077:46:0;;;;;;;:::i;:::-;47136:21;47149:7;47136:12;:21::i;:::-;47170:36;47176:10;38154:1;47200;47170:36;;;;;;;;;;;;:5;:36::i;38337:40::-;;;;:::o;42605:113::-;42667:7;42694:16;;;:12;:16;;;;;;;42605:113::o;43138:204::-;2186:12;:10;:12::i;:::-;-1:-1:-1;;;;;2175:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2175:23:0;;2167:68;;;;-1:-1:-1;;;2167:68:0;;;;;;;:::i;:::-;43250:1:::1;43231:16;:20;;;;:46;;;;;43275:2;43255:16;:22;;;;43231:46;43223:66;;;;-1:-1:-1::0;;;43223:66:0::1;;;;;;;:::i;:::-;43300:15;:34:::0;;::::1;::::0;;::::1;;;-1:-1:-1::0;;43300:34:0;;::::1;::::0;;;::::1;::::0;;43138:204::o;46618:191::-;46686:20;;;;:11;:20;;;;;;;;46678:45;;;;-1:-1:-1;;;46678:45:0;;;;;;;:::i;43350:210::-;2186:12;:10;:12::i;:::-;-1:-1:-1;;;;;2175:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2175:23:0;;2167:68;;;;-1:-1:-1;;;2167:68:0;;;;;;;:::i;:::-;43465:1:::1;43445:17;:21;;;;:48;;;;;43491:2;43470:17;:23;;;;43445:48;43437:68;;;;-1:-1:-1::0;;;43437:68:0::1;;;;;;;:::i;:::-;43516:16;:36:::0;;::::1;::::0;;::::1;::::0;::::1;-1:-1:-1::0;;43516:36:0;;::::1;::::0;;;::::1;::::0;;43350:210::o;37697:42::-;;;;:::o;43568:129::-;2186:12;:10;:12::i;:::-;-1:-1:-1;;;;;2175:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2175:23:0;;2167:68;;;;-1:-1:-1;;;2167:68:0;;;;;;;:::i;:::-;43655:15:::1;:34:::0;43568:129::o;24598:168::-;-1:-1:-1;;;;;24721:27:0;;;24697:4;24721:27;;;:18;:27;;;;;;;;:37;;;;;;;;;;;;;;;24598:168::o;24838:401::-;25054:12;:10;:12::i;:::-;-1:-1:-1;;;;;25046:20:0;:4;-1:-1:-1;;;;;25046:20:0;;:60;;;;25070:36;25087:4;25093:12;:10;:12::i;25070:36::-;25024:151;;;;-1:-1:-1;;;25024:151:0;;;;;;;:::i;:::-;25186:45;25204:4;25210:2;25214;25218:6;25226:4;25186:17;:45::i;2864:201::-;2186:12;:10;:12::i;:::-;-1:-1:-1;;;;;2175:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2175:23:0;;2167:68;;;;-1:-1:-1;;;2167:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;2953:22:0;::::1;2945:73;;;;-1:-1:-1::0;;;2945:73:0::1;;;;;;;:::i;:::-;3029:28;3048:8;3029:18;:28::i;40898:387::-:0;41049:12;:10;:12::i;:::-;-1:-1:-1;;;;;41038:23:0;:7;-1:-1:-1;;;;;41038:23:0;;:66;;;;41065:39;41082:7;41091:12;:10;:12::i;41065:39::-;41038:103;;;-1:-1:-1;41124:17:0;;-1:-1:-1;;;;;41124:17:0;41108:12;:10;:12::i;:::-;-1:-1:-1;;;;;41108:33:0;;41038:103;:142;;;-1:-1:-1;41161:19:0;;-1:-1:-1;;;;;41161:19:0;41145:12;:10;:12::i;:::-;-1:-1:-1;;;;;41145:35:0;;41038:142;41016:223;;;;-1:-1:-1;;;41016:223:0;;;;;;;:::i;:::-;41252:25;41258:7;41267:2;41271:5;41252;:25::i;13708:157::-;-1:-1:-1;;;;;;13817:40:0;;-1:-1:-1;;;13817:40:0;13708:157;;;:::o;679:98::-;759:10;679:98;:::o;29318:88::-;29385:13;;;;:4;;:13;;;;;:::i;29792:569::-;-1:-1:-1;;;;;29945:16:0;;29937:62;;;;-1:-1:-1;;;29937:62:0;;;;;;;:::i;:::-;30012:16;30031:12;:10;:12::i;:::-;30012:31;;30056:102;30077:8;30095:1;30099:2;30103:21;30121:2;30103:17;:21::i;:::-;30126:25;30144:6;30126:17;:25::i;:::-;30153:4;30056:20;:102::i;:::-;30171:9;:13;;;;;;;;;;;-1:-1:-1;;;;;30171:17:0;;;;;;;;;:27;;30192:6;;30171:9;:27;;30192:6;;30171:27;:::i;:::-;;;;;;;;30251:2;-1:-1:-1;;;;;30214:52:0;30247:1;-1:-1:-1;;;;;30214:52:0;30229:8;-1:-1:-1;;;;;30214:52:0;;30255:2;30259:6;30214:52;;;;;;;:::i;:::-;;;;;;;;30279:74;30310:8;30328:1;30332:2;30336;30340:6;30348:4;30279:30;:74::i;27400:1074::-;27627:7;:14;27613:3;:10;:28;27605:81;;;;-1:-1:-1;;;27605:81:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27705:16:0;;27697:66;;;;-1:-1:-1;;;27697:66:0;;;;;;;:::i;:::-;27776:16;27795:12;:10;:12::i;:::-;27776:31;;27820:60;27841:8;27851:4;27857:2;27861:3;27866:7;27875:4;27820:20;:60::i;:::-;27898:9;27893:421;27917:3;:10;27913:1;:14;27893:421;;;27949:10;27962:3;27966:1;27962:6;;;;;;-1:-1:-1;;;27962:6:0;;;;;;;;;;;;;;;27949:19;;27983:14;28000:7;28008:1;28000:10;;;;;;-1:-1:-1;;;28000:10:0;;;;;;;;;;;;;;;;;;;;28027:19;28049:13;;;;;;;;;;-1:-1:-1;;;;;28049:19:0;;;;;;;;;;;;28000:10;;-1:-1:-1;28091:21:0;;;;28083:76;;;;-1:-1:-1;;;28083:76:0;;;;;;;:::i;:::-;28203:9;:13;;;;;;;;;;;-1:-1:-1;;;;;28203:19:0;;;;;;;;;;28225:20;;;28203:42;;28275:17;;;;;;;:27;;28225:20;;28203:9;28275:27;;28225:20;;28275:27;:::i;:::-;;;;;;;;27893:421;;;27929:3;;;;:::i;:::-;;;27893:421;;;;28361:2;-1:-1:-1;;;;;28331:47:0;28355:4;-1:-1:-1;;;;;28331:47:0;28345:8;-1:-1:-1;;;;;28331:47:0;;28365:3;28370:7;28331:47;;;;;;;:::i;:::-;;;;;;;;28391:75;28427:8;28437:4;28443:2;28447:3;28452:7;28461:4;28391:35;:75::i;:::-;27400:1074;;;;;;:::o;45818:792::-;45904:14;;45885:15;:33;;45877:57;;;;-1:-1:-1;;;45877:57:0;;;;;;;:::i;:::-;45953:10;;;:27;;-1:-1:-1;;;45953:27:0;;45984:10;;-1:-1:-1;;;;;45953:10:0;;;;:18;;:27;;45972:7;;45953:27;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;45953:41:0;;45945:63;;;;-1:-1:-1;;;45945:63:0;;;;;;;:::i;:::-;46042:18;46058:1;46042:15;:18::i;:::-;46024:15;:36;46021:286;;;46077:12;46110:3;46092:15;;:21;;;;:::i;:::-;46077:36;;46128:17;46172:15;;;;;;;;;;;46148:39;;46166:3;46148:15;;:21;;;;:::i;:::-;:39;;;;:::i;:::-;46128:59;-1:-1:-1;46253:14:0;46265:2;46128:59;46253:14;:::i;:::-;:19;:41;;46280:14;46292:2;46280:9;:14;:::i;:::-;46253:41;;;46275:2;46253:41;46228:14;46240:2;46228:9;:14;:::i;:::-;46221:21;;:4;:21;:::i;:::-;46220:29;;46246:3;46220:29;:::i;:::-;:75;;;;:::i;:::-;46202:15;:93;-1:-1:-1;;46021:286:0;46327:15;;46346:6;46327:25;:99;;;-1:-1:-1;46410:16:0;;46374:10;;;:32;;-1:-1:-1;;;46374:32:0;;-1:-1:-1;;;;;46374:10:0;;;;:23;;:32;;46398:7;;46374:32;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;46356:50;;:15;:50;:::i;:::-;:70;;46327:99;46319:127;;;;-1:-1:-1;;;46319:127:0;;;;;;;:::i;:::-;46485:15;;46465:36;;;;:19;:36;;;;;;;;:45;;;;;;;;;;;:54;46457:82;;;;-1:-1:-1;;;46457:82:0;;;;;;;:::i;:::-;46570:15;;46550:36;;;;:19;:36;;;;;;;;:45;;;;;;;:52;;-1:-1:-1;;46550:52:0;46598:4;46550:52;;;45818:792::o;32553:891::-;-1:-1:-1;;;;;32705:18:0;;32697:66;;;;-1:-1:-1;;;32697:66:0;;;;;;;:::i;:::-;32796:7;:14;32782:3;:10;:28;32774:81;;;;-1:-1:-1;;;32774:81:0;;;;;;;:::i;:::-;32868:16;32887:12;:10;:12::i;:::-;32868:31;;32912:66;32933:8;32943:4;32957:1;32961:3;32966:7;32912:66;;;;;;;;;;;;:20;:66::i;:::-;32996:9;32991:373;33015:3;:10;33011:1;:14;32991:373;;;33047:10;33060:3;33064:1;33060:6;;;;;;-1:-1:-1;;;33060:6:0;;;;;;;;;;;;;;;33047:19;;33081:14;33098:7;33106:1;33098:10;;;;;;-1:-1:-1;;;33098:10:0;;;;;;;;;;;;;;;;;;;;33125:19;33147:13;;;;;;;;;;-1:-1:-1;;;;;33147:19:0;;;;;;;;;;;;33098:10;;-1:-1:-1;33189:21:0;;;;33181:70;;;;-1:-1:-1;;;33181:70:0;;;;;;;:::i;:::-;33295:9;:13;;;;;;;;;;;-1:-1:-1;;;;;33295:19:0;;;;;;;;;;33317:20;;33295:42;;33027:3;;;;:::i;:::-;;;;32991:373;;;;33419:1;-1:-1:-1;;;;;33381:55:0;33405:4;-1:-1:-1;;;;;33381:55:0;33395:8;-1:-1:-1;;;;;33381:55:0;;33423:3;33428:7;33381:55;;;;;;;:::i;:::-;;;;;;;;32553:891;;;;:::o;3225:191::-;3318:6;;;-1:-1:-1;;;;;3335:17:0;;;-1:-1:-1;;;;;;3335:17:0;;;;;;;3368:40;;3318:6;;;3335:17;3318:6;;3368:40;;3299:16;;3368:40;3225:191;;:::o;33586:331::-;33741:8;-1:-1:-1;;;;;33732:17:0;:5;-1:-1:-1;;;;;33732:17:0;;;33724:71;;;;-1:-1:-1;;;33724:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33806:25:0;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;:46;;-1:-1:-1;;33806:46:0;;;;;;;33868:41;;;;;33806:46;;33868:41;:::i;:::-;;;;;;;;33586:331;;;:::o;26222:820::-;-1:-1:-1;;;;;26410:16:0;;26402:66;;;;-1:-1:-1;;;26402:66:0;;;;;;;:::i;:::-;26481:16;26500:12;:10;:12::i;:::-;26481:31;;26525:96;26546:8;26556:4;26562:2;26566:21;26584:2;26566:17;:21::i;26525:96::-;26634:19;26656:13;;;;;;;;;;;-1:-1:-1;;;;;26656:19:0;;;;;;;;;;26694:21;;;;26686:76;;;;-1:-1:-1;;;26686:76:0;;;;;;;:::i;:::-;26798:9;:13;;;;;;;;;;;-1:-1:-1;;;;;26798:19:0;;;;;;;;;;26820:20;;;26798:42;;26862:17;;;;;;;:27;;26820:20;;26798:9;26862:27;;26820:20;;26862:27;:::i;:::-;;;;;;;;26938:2;-1:-1:-1;;;;;26907:46:0;26932:4;-1:-1:-1;;;;;26907:46:0;26922:8;-1:-1:-1;;;;;26907:46:0;;26942:2;26946:6;26907:46;;;;;;;:::i;:::-;;;;;;;;26966:68;26997:8;27007:4;27013:2;27017;27021:6;27029:4;26966:30;:68::i;:::-;26222:820;;;;;;;:::o;31702:648::-;-1:-1:-1;;;;;31829:18:0;;31821:66;;;;-1:-1:-1;;;31821:66:0;;;;;;;:::i;:::-;31900:16;31919:12;:10;:12::i;:::-;31900:31;;31944:102;31965:8;31975:4;31989:1;31993:21;32011:2;31993:17;:21::i;:::-;32016:25;32034:6;32016:17;:25::i;:::-;31944:102;;;;;;;;;;;;:20;:102::i;:::-;32059:19;32081:13;;;;;;;;;;;-1:-1:-1;;;;;32081:19:0;;;;;;;;;;32119:21;;;;32111:70;;;;-1:-1:-1;;;32111:70:0;;;;;;;:::i;:::-;32217:9;:13;;;;;;;;;;;-1:-1:-1;;;;;32217:19:0;;;;;;;;;;;;;32239:20;;;32217:42;;32288:54;;32217:19;;32288:54;;;;;;;32227:2;;32253:6;;32288:54;:::i;:::-;;;;;;;;31702:648;;;;;:::o;36675:198::-;36795:16;;;36809:1;36795:16;;;;;;;;;36741;;36770:22;;36795:16;;;;;;;;;;;;-1:-1:-1;36795:16:0;36770:41;;36833:7;36822:5;36828:1;36822:8;;;;;;-1:-1:-1;;;36822:8:0;;;;;;;;;;;;;;;;;;:18;36860:5;36675:198;-1:-1:-1;;36675:198:0:o;41868:655::-;42107:66;42134:8;42144:4;42150:2;42154:3;42159:7;42168:4;42107:26;:66::i;:::-;-1:-1:-1;;;;;42190:18:0;;42186:160;;42230:9;42225:110;42249:3;:10;42245:1;:14;42225:110;;;42309:7;42317:1;42309:10;;;;;;-1:-1:-1;;;42309:10:0;;;;;;;;;;;;;;;42285:12;:20;42298:3;42302:1;42298:6;;;;;;-1:-1:-1;;;42298:6:0;;;;;;;;;;;;;;;42285:20;;;;;;;;;;;;:34;;;;;;;:::i;:::-;;;;-1:-1:-1;42261:3:0;;-1:-1:-1;42261:3:0;;:::i;:::-;;;42225:110;;;;42186:160;-1:-1:-1;;;;;42362:16:0;;42358:158;;42400:9;42395:110;42419:3;:10;42415:1;:14;42395:110;;;42479:7;42487:1;42479:10;;;;;;-1:-1:-1;;;42479:10:0;;;;;;;;;;;;;;;42455:12;:20;42468:3;42472:1;42468:6;;;;;;-1:-1:-1;;;42468:6:0;;;;;;;;;;;;;;;42455:20;;;;;;;;;;;;:34;;;;;;;:::i;:::-;;;;-1:-1:-1;42431:3:0;;-1:-1:-1;42431:3:0;;:::i;:::-;;;42395:110;;35102:744;35317:15;:2;-1:-1:-1;;;;;35317:13:0;;:15::i;:::-;35313:526;;;35353:72;;-1:-1:-1;;;35353:72:0;;-1:-1:-1;;;;;35353:38:0;;;;;:72;;35392:8;;35402:4;;35408:2;;35412:6;;35420:4;;35353:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35353:72:0;;;;;;;;-1:-1:-1;;35353:72:0;;;;;;;;;;;;:::i;:::-;;;35349:479;;;;:::i;:::-;;;;;;;;35701:6;35694:14;;-1:-1:-1;;;35694:14:0;;;;;;;;:::i;35349:479::-;35750:62;;-1:-1:-1;;;35750:62:0;;;;;;;:::i;35349:479::-;-1:-1:-1;;;;;;35475:55:0;;-1:-1:-1;;;35475:55:0;35471:154;;35555:50;;-1:-1:-1;;;35555:50:0;;;;;;;:::i;35854:813::-;36094:15;:2;-1:-1:-1;;;;;36094:13:0;;:15::i;:::-;36090:570;;;36130:79;;-1:-1:-1;;;36130:79:0;;-1:-1:-1;;;;;36130:43:0;;;;;:79;;36174:8;;36184:4;;36190:3;;36195:7;;36204:4;;36130:79;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36130:79:0;;;;;;;;-1:-1:-1;;36130:79:0;;;;;;;;;;;;:::i;:::-;;;36126:523;;;;:::i;:::-;-1:-1:-1;;;;;;36291:60:0;;-1:-1:-1;;;36291:60:0;36287:159;;36376:50;;-1:-1:-1;;;36376:50:0;;;;;;;:::i;4656:326::-;4716:4;4973:1;4951:7;-1:-1:-1;;;;;4951:12:0;;;;;;;;;;;;;;;;;;;;;;;;:19;:23;;4656:326;-1:-1:-1;;4656:326:0:o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:409:1;;114:18;106:6;103:30;100:2;;;136:18;;:::i;:::-;174:58;220:2;197:17;;-1:-1:-1;;193:31:1;226:4;189:42;174:58;:::i;:::-;165:67;;255:6;248:5;241:21;295:3;286:6;281:3;277:16;274:25;271:2;;;312:1;309;302:12;271:2;361:6;356:3;349:4;342:5;338:16;325:43;415:1;408:4;399:6;392:5;388:18;384:29;377:40;90:333;;;;;:::o;428:705::-;;541:3;534:4;526:6;522:17;518:27;508:2;;563:5;556;549:20;508:2;603:6;590:20;629:4;653:65;668:49;714:2;668:49;:::i;:::-;653:65;:::i;:::-;752:15;;;783:12;;;;815:15;;;861:11;;;849:24;;845:33;;842:42;-1:-1:-1;839:2:1;;;901:5;894;887:20;839:2;927:5;941:163;955:2;952:1;949:9;941:163;;;1012:17;;1000:30;;1050:12;;;;1082;;;;973:1;966:9;941:163;;;-1:-1:-1;1122:5:1;;498:635;-1:-1:-1;;;;;;;498:635:1:o;1138:232::-;;1235:3;1228:4;1220:6;1216:17;1212:27;1202:2;;1257:5;1250;1243:20;1202:2;1283:81;1360:3;1351:6;1338:20;1331:4;1323:6;1319:17;1283:81;:::i;:::-;1274:90;1192:178;-1:-1:-1;;;1192:178:1:o;1375:259::-;;1487:2;1475:9;1466:7;1462:23;1458:32;1455:2;;;1508:6;1500;1493:22;1455:2;1552:9;1539:23;1571:33;1598:5;1571:33;:::i;1639:263::-;;1762:2;1750:9;1741:7;1737:23;1733:32;1730:2;;;1783:6;1775;1768:22;1730:2;1820:9;1814:16;1839:33;1866:5;1839:33;:::i;1907:402::-;;;2036:2;2024:9;2015:7;2011:23;2007:32;2004:2;;;2057:6;2049;2042:22;2004:2;2101:9;2088:23;2120:33;2147:5;2120:33;:::i;:::-;2172:5;-1:-1:-1;2229:2:1;2214:18;;2201:32;2242:35;2201:32;2242:35;:::i;:::-;2296:7;2286:17;;;1994:315;;;;;:::o;2314:1129::-;;;;;;2553:3;2541:9;2532:7;2528:23;2524:33;2521:2;;;2575:6;2567;2560:22;2521:2;2619:9;2606:23;2638:33;2665:5;2638:33;:::i;:::-;2690:5;-1:-1:-1;2747:2:1;2732:18;;2719:32;2760:35;2719:32;2760:35;:::i;:::-;2814:7;-1:-1:-1;2872:2:1;2857:18;;2844:32;2895:18;2925:14;;;2922:2;;;2957:6;2949;2942:22;2922:2;2985:67;3044:7;3035:6;3024:9;3020:22;2985:67;:::i;:::-;2975:77;;3105:2;3094:9;3090:18;3077:32;3061:48;;3134:2;3124:8;3121:16;3118:2;;;3155:6;3147;3140:22;3118:2;3183:69;3244:7;3233:8;3222:9;3218:24;3183:69;:::i;:::-;3173:79;;3305:3;3294:9;3290:19;3277:33;3261:49;;3335:2;3325:8;3322:16;3319:2;;;3356:6;3348;3341:22;3319:2;;3384:53;3429:7;3418:8;3407:9;3403:24;3384:53;:::i;:::-;3374:63;;;2511:932;;;;;;;;:::o;3448:760::-;;;;;;3637:3;3625:9;3616:7;3612:23;3608:33;3605:2;;;3659:6;3651;3644:22;3605:2;3703:9;3690:23;3722:33;3749:5;3722:33;:::i;:::-;3774:5;-1:-1:-1;3831:2:1;3816:18;;3803:32;3844:35;3803:32;3844:35;:::i;:::-;3898:7;-1:-1:-1;3952:2:1;3937:18;;3924:32;;-1:-1:-1;4003:2:1;3988:18;;3975:32;;-1:-1:-1;4058:3:1;4043:19;;4030:33;4086:18;4075:30;;4072:2;;;4123:6;4115;4108:22;4072:2;4151:51;4194:7;4185:6;4174:9;4170:22;4151:51;:::i;4213:774::-;;;;4409:2;4397:9;4388:7;4384:23;4380:32;4377:2;;;4430:6;4422;4415:22;4377:2;4474:9;4461:23;4493:33;4520:5;4493:33;:::i;:::-;4545:5;-1:-1:-1;4601:2:1;4586:18;;4573:32;4624:18;4654:14;;;4651:2;;;4686:6;4678;4671:22;4651:2;4714:67;4773:7;4764:6;4753:9;4749:22;4714:67;:::i;:::-;4704:77;;4834:2;4823:9;4819:18;4806:32;4790:48;;4863:2;4853:8;4850:16;4847:2;;;4884:6;4876;4869:22;4847:2;;4912:69;4973:7;4962:8;4951:9;4947:24;4912:69;:::i;:::-;4902:79;;;4367:620;;;;;:::o;4992:438::-;;;5118:2;5106:9;5097:7;5093:23;5089:32;5086:2;;;5139:6;5131;5124:22;5086:2;5183:9;5170:23;5202:33;5229:5;5202:33;:::i;:::-;5254:5;-1:-1:-1;5311:2:1;5296:18;;5283:32;5353:15;;5346:23;5334:36;;5324:2;;5389:6;5381;5374:22;5435:327;;;5564:2;5552:9;5543:7;5539:23;5535:32;5532:2;;;5585:6;5577;5570:22;5532:2;5629:9;5616:23;5648:33;5675:5;5648:33;:::i;:::-;5700:5;5752:2;5737:18;;;;5724:32;;-1:-1:-1;;;5522:240:1:o;5767:395::-;;;;5913:2;5901:9;5892:7;5888:23;5884:32;5881:2;;;5934:6;5926;5919:22;5881:2;5978:9;5965:23;5997:33;6024:5;5997:33;:::i;:::-;6049:5;6101:2;6086:18;;6073:32;;-1:-1:-1;6152:2:1;6137:18;;;6124:32;;5871:291;-1:-1:-1;;;5871:291:1:o;6167:1295::-;;;6346:2;6334:9;6325:7;6321:23;6317:32;6314:2;;;6367:6;6359;6352:22;6314:2;6412:9;6399:23;6441:18;6482:2;6474:6;6471:14;6468:2;;;6503:6;6495;6488:22;6468:2;6546:6;6535:9;6531:22;6521:32;;6591:7;6584:4;6580:2;6576:13;6572:27;6562:2;;6618:6;6610;6603:22;6562:2;6659;6646:16;6681:4;6705:65;6720:49;6766:2;6720:49;:::i;6705:65::-;6804:15;;;6835:12;;;;6867:11;;;6905;;;6897:20;;6893:29;;6890:42;-1:-1:-1;6887:2:1;;;6950:6;6942;6935:22;6887:2;6977:6;6968:15;;6992:240;7006:2;7003:1;7000:9;6992:240;;;7077:3;7064:17;7094:33;7121:5;7094:33;:::i;:::-;7140:18;;7024:1;7017:9;;;;;7178:12;;;;7210;;6992:240;;;-1:-1:-1;7251:5:1;-1:-1:-1;;7294:18:1;;7281:32;;-1:-1:-1;;7325:16:1;;;7322:2;;;7359:6;7351;7344:22;7322:2;;7387:69;7448:7;7437:8;7426:9;7422:24;7387:69;:::i;:::-;7377:79;;;6304:1158;;;;;:::o;7467:257::-;;7578:2;7566:9;7557:7;7553:23;7549:32;7546:2;;;7599:6;7591;7584:22;7546:2;7643:9;7630:23;7662:32;7688:5;7662:32;:::i;7729:261::-;;7851:2;7839:9;7830:7;7826:23;7822:32;7819:2;;;7872:6;7864;7857:22;7819:2;7909:9;7903:16;7928:32;7954:5;7928:32;:::i;7995:482::-;;8117:2;8105:9;8096:7;8092:23;8088:32;8085:2;;;8138:6;8130;8123:22;8085:2;8183:9;8170:23;8216:18;8208:6;8205:30;8202:2;;;8253:6;8245;8238:22;8202:2;8281:22;;8334:4;8326:13;;8322:27;-1:-1:-1;8312:2:1;;8368:6;8360;8353:22;8312:2;8396:75;8463:7;8458:2;8445:16;8440:2;8436;8432:11;8396:75;:::i;:::-;8386:85;8075:402;-1:-1:-1;;;;8075:402:1:o;8482:190::-;;8594:2;8582:9;8573:7;8569:23;8565:32;8562:2;;;8615:6;8607;8600:22;8562:2;-1:-1:-1;8643:23:1;;8552:120;-1:-1:-1;8552:120:1:o;8677:194::-;;8800:2;8788:9;8779:7;8775:23;8771:32;8768:2;;;8821:6;8813;8806:22;8768:2;-1:-1:-1;8849:16:1;;8758:113;-1:-1:-1;8758:113:1:o;8876:258::-;;;9005:2;8993:9;8984:7;8980:23;8976:32;8973:2;;;9026:6;9018;9011:22;8973:2;-1:-1:-1;;9054:23:1;;;9124:2;9109:18;;;9096:32;;-1:-1:-1;8963:171:1:o;9139:289::-;;9249:2;9237:9;9228:7;9224:23;9220:32;9217:2;;;9270:6;9262;9255:22;9217:2;9314:9;9301:23;9364:4;9357:5;9353:16;9346:5;9343:27;9333:2;;9389:6;9381;9374:22;9433:443;;9530:5;9524:12;9557:6;9552:3;9545:19;9583:4;9612:2;9607:3;9603:12;9596:19;;9649:2;9642:5;9638:14;9670:3;9682:169;9696:6;9693:1;9690:13;9682:169;;;9757:13;;9745:26;;9791:12;;;;9826:15;;;;9718:1;9711:9;9682:169;;;-1:-1:-1;9867:3:1;;9500:376;-1:-1:-1;;;;;9500:376:1:o;9881:477::-;;9962:5;9956:12;9989:6;9984:3;9977:19;10014:3;10026:162;10040:6;10037:1;10034:13;10026:162;;;10102:4;10158:13;;;10154:22;;10148:29;10130:11;;;10126:20;;10119:59;10055:12;10026:162;;;10206:6;10203:1;10200:13;10197:2;;;10272:3;10265:4;10256:6;10251:3;10247:16;10243:27;10236:40;10197:2;-1:-1:-1;10340:2:1;10319:15;-1:-1:-1;;10315:29:1;10306:39;;;;10347:4;10302:50;;9932:426;-1:-1:-1;;9932:426:1:o;10363:203::-;-1:-1:-1;;;;;10527:32:1;;;;10509:51;;10497:2;10482:18;;10464:102::o;10571:840::-;-1:-1:-1;;;;;10968:15:1;;;10950:34;;11020:15;;11015:2;11000:18;;10993:43;10930:3;11067:2;11052:18;;11045:31;;;10571:840;;11099:63;;11142:19;;11134:6;11099:63;:::i;:::-;11210:9;11202:6;11198:22;11193:2;11182:9;11178:18;11171:50;11244;11287:6;11279;11244:50;:::i;:::-;11230:64;;11343:9;11335:6;11331:22;11325:3;11314:9;11310:19;11303:51;11371:34;11398:6;11390;11371:34;:::i;:::-;11363:42;10902:509;-1:-1:-1;;;;;;;;10902:509:1:o;11416:562::-;-1:-1:-1;;;;;11713:15:1;;;11695:34;;11765:15;;11760:2;11745:18;;11738:43;11812:2;11797:18;;11790:34;;;11855:2;11840:18;;11833:34;;;11675:3;11898;11883:19;;11876:32;;;11416:562;;11925:47;;11952:19;;11944:6;11925:47;:::i;11983:267::-;;12162:2;12151:9;12144:21;12182:62;12240:2;12229:9;12225:18;12217:6;12182:62;:::i;12255:477::-;;12512:2;12501:9;12494:21;12538:62;12596:2;12585:9;12581:18;12573:6;12538:62;:::i;:::-;12648:9;12640:6;12636:22;12631:2;12620:9;12616:18;12609:50;12676;12719:6;12711;12676:50;:::i;12737:187::-;12902:14;;12895:22;12877:41;;12865:2;12850:18;;12832:92::o;12929:221::-;;13078:2;13067:9;13060:21;13098:46;13140:2;13129:9;13125:18;13117:6;13098:46;:::i;13155:416::-;13357:2;13339:21;;;13396:2;13376:18;;;13369:30;13435:34;13430:2;13415:18;;13408:62;-1:-1:-1;;;13501:2:1;13486:18;;13479:50;13561:3;13546:19;;13329:242::o;13576:404::-;13778:2;13760:21;;;13817:2;13797:18;;;13790:30;13856:34;13851:2;13836:18;;13829:62;-1:-1:-1;;;13922:2:1;13907:18;;13900:38;13970:3;13955:19;;13750:230::o;13985:335::-;14187:2;14169:21;;;14226:2;14206:18;;;14199:30;-1:-1:-1;;;14260:2:1;14245:18;;14238:41;14311:2;14296:18;;14159:161::o;14325:407::-;14527:2;14509:21;;;14566:2;14546:18;;;14539:30;14605:34;14600:2;14585:18;;14578:62;-1:-1:-1;;;14671:2:1;14656:18;;14649:41;14722:3;14707:19;;14499:233::o;14737:402::-;14939:2;14921:21;;;14978:2;14958:18;;;14951:30;15017:34;15012:2;14997:18;;14990:62;-1:-1:-1;;;15083:2:1;15068:18;;15061:36;15129:3;15114:19;;14911:228::o;15144:334::-;15346:2;15328:21;;;15385:2;15365:18;;;15358:30;-1:-1:-1;;;15419:2:1;15404:18;;15397:40;15469:2;15454:18;;15318:160::o;15483:337::-;15685:2;15667:21;;;15724:2;15704:18;;;15697:30;-1:-1:-1;;;15758:2:1;15743:18;;15736:43;15811:2;15796:18;;15657:163::o;15825:400::-;16027:2;16009:21;;;16066:2;16046:18;;;16039:30;16105:34;16100:2;16085:18;;16078:62;-1:-1:-1;;;16171:2:1;16156:18;;16149:34;16215:3;16200:19;;15999:226::o;16230:405::-;16432:2;16414:21;;;16471:2;16451:18;;;16444:30;16510:34;16505:2;16490:18;;16483:62;-1:-1:-1;;;16576:2:1;16561:18;;16554:39;16625:3;16610:19;;16404:231::o;16640:337::-;16842:2;16824:21;;;16881:2;16861:18;;;16854:30;-1:-1:-1;;;16915:2:1;16900:18;;16893:43;16968:2;16953:18;;16814:163::o;16982:336::-;17184:2;17166:21;;;17223:2;17203:18;;;17196:30;-1:-1:-1;;;17257:2:1;17242:18;;17235:42;17309:2;17294:18;;17156:162::o;17323:401::-;17525:2;17507:21;;;17564:2;17544:18;;;17537:30;17603:34;17598:2;17583:18;;17576:62;-1:-1:-1;;;17669:2:1;17654:18;;17647:35;17714:3;17699:19;;17497:227::o;17729:414::-;17931:2;17913:21;;;17970:2;17950:18;;;17943:30;18009:34;18004:2;17989:18;;17982:62;-1:-1:-1;;;18075:2:1;18060:18;;18053:48;18133:3;18118:19;;17903:240::o;18148:399::-;18350:2;18332:21;;;18389:2;18369:18;;;18362:30;18428:34;18423:2;18408:18;;18401:62;-1:-1:-1;;;18494:2:1;18479:18;;18472:33;18537:3;18522:19;;18322:225::o;18552:406::-;18754:2;18736:21;;;18793:2;18773:18;;;18766:30;18832:34;18827:2;18812:18;;18805:62;-1:-1:-1;;;18898:2:1;18883:18;;18876:40;18948:3;18933:19;;18726:232::o;18963:339::-;19165:2;19147:21;;;19204:2;19184:18;;;19177:30;-1:-1:-1;;;19238:2:1;19223:18;;19216:45;19293:2;19278:18;;19137:165::o;19307:339::-;19509:2;19491:21;;;19548:2;19528:18;;;19521:30;-1:-1:-1;;;19582:2:1;19567:18;;19560:45;19637:2;19622:18;;19481:165::o;19651:356::-;19853:2;19835:21;;;19872:18;;;19865:30;19931:34;19926:2;19911:18;;19904:62;19998:2;19983:18;;19825:182::o;20012:336::-;20214:2;20196:21;;;20253:2;20233:18;;;20226:30;-1:-1:-1;;;20287:2:1;20272:18;;20265:42;20339:2;20324:18;;20186:162::o;20353:337::-;20555:2;20537:21;;;20594:2;20574:18;;;20567:30;-1:-1:-1;;;20628:2:1;20613:18;;20606:43;20681:2;20666:18;;20527:163::o;20695:355::-;20897:2;20879:21;;;20936:2;20916:18;;;20909:30;20975:33;20970:2;20955:18;;20948:61;21041:2;21026:18;;20869:181::o;21055:334::-;21257:2;21239:21;;;21296:2;21276:18;;;21269:30;-1:-1:-1;;;21330:2:1;21315:18;;21308:40;21380:2;21365:18;;21229:160::o;21394:332::-;21596:2;21578:21;;;21635:1;21615:18;;;21608:29;-1:-1:-1;;;21668:2:1;21653:18;;21646:39;21717:2;21702:18;;21568:158::o;21731:330::-;21933:2;21915:21;;;21972:1;21952:18;;;21945:29;-1:-1:-1;;;22005:2:1;21990:18;;21983:37;22052:2;22037:18;;21905:156::o;22066:405::-;22268:2;22250:21;;;22307:2;22287:18;;;22280:30;22346:34;22341:2;22326:18;;22319:62;-1:-1:-1;;;22412:2:1;22397:18;;22390:39;22461:3;22446:19;;22240:231::o;22476:405::-;22678:2;22660:21;;;22717:2;22697:18;;;22690:30;22756:34;22751:2;22736:18;;22729:62;-1:-1:-1;;;22822:2:1;22807:18;;22800:39;22871:3;22856:19;;22650:231::o;22886:404::-;23088:2;23070:21;;;23127:2;23107:18;;;23100:30;23166:34;23161:2;23146:18;;23139:62;-1:-1:-1;;;23232:2:1;23217:18;;23210:38;23280:3;23265:19;;23060:230::o;23295:397::-;23497:2;23479:21;;;23536:2;23516:18;;;23509:30;23575:34;23570:2;23555:18;;23548:62;-1:-1:-1;;;23641:2:1;23626:18;;23619:31;23682:3;23667:19;;23469:223::o;23697:522::-;23988:6;23976:19;;;;23958:38;;24044:4;24032:17;;;24027:2;24012:18;;24005:45;24086:17;;;24081:2;24066:18;;24059:45;24140:17;;24135:2;24120:18;;24113:45;24195:17;24189:3;24174:19;;24167:46;23945:3;23930:19;;23912:307::o;24224:177::-;24370:25;;;24358:2;24343:18;;24325:76::o;24406:248::-;24580:25;;;24636:2;24621:18;;24614:34;24568:2;24553:18;;24535:119::o;24659:489::-;24918:25;;;24974:2;24959:18;;24952:34;;;;-1:-1:-1;;;;;25022:32:1;;;;25017:2;25002:18;;24995:60;25086:2;25071:18;;25064:34;25129:3;25114:19;;25107:35;24905:3;24890:19;;24872:276::o;25153:184::-;25325:4;25313:17;;;;25295:36;;25283:2;25268:18;;25250:87::o;25342:251::-;25412:2;25406:9;25442:17;;;25489:18;25474:34;;25510:22;;;25471:62;25468:2;;;25536:18;;:::i;:::-;25572:2;25565:22;25386:207;;-1:-1:-1;25386:207:1:o;25598:192::-;;25697:18;25689:6;25686:30;25683:2;;;25719:18;;:::i;:::-;-1:-1:-1;25779:4:1;25760:17;;;25756:28;;25673:117::o;25795:224::-;;25862:6;25895:2;25892:1;25888:10;25925:2;25922:1;25918:10;25956:3;25952:2;25948:12;25943:3;25940:21;25937:2;;;25964:18;;:::i;:::-;26000:13;;25842:177;-1:-1:-1;;;;25842:177:1:o;26024:128::-;;26095:1;26091:6;26088:1;26085:13;26082:2;;;26101:18;;:::i;:::-;-1:-1:-1;26137:9:1;;26072:80::o;26157:204::-;;26231:4;26228:1;26224:12;26263:4;26260:1;26256:12;26298:3;26292:4;26288:14;26283:3;26280:23;26277:2;;;26306:18;;:::i;:::-;26342:13;;26203:158;-1:-1:-1;;;26203:158:1:o;26366:120::-;;26432:1;26422:2;;26437:18;;:::i;:::-;-1:-1:-1;26471:9:1;;26412:74::o;26491:165::-;;26563:4;26560:1;26556:12;26587:3;26577:2;;26594:18;;:::i;:::-;26646:3;26639:4;26636:1;26632:12;26628:22;26623:27;;;26535:121;;;;:::o;26661:168::-;;26767:1;26763;26759:6;26755:14;26752:1;26749:21;26744:1;26737:9;26730:17;26726:45;26723:2;;;26774:18;;:::i;:::-;-1:-1:-1;26814:9:1;;26713:116::o;26834:125::-;;26902:1;26899;26896:8;26893:2;;;26907:18;;:::i;:::-;-1:-1:-1;26944:9:1;;26883:76::o;26964:380::-;27049:1;27039:12;;27096:1;27086:12;;;27107:2;;27161:4;27153:6;27149:17;27139:27;;27107:2;27214;27206:6;27203:14;27183:18;27180:38;27177:2;;;27260:10;27255:3;27251:20;27248:1;27241:31;27295:4;27292:1;27285:15;27323:4;27320:1;27313:15;27177:2;;27019:325;;;:::o;27349:135::-;;-1:-1:-1;;27409:17:1;;27406:2;;;27429:18;;:::i;:::-;-1:-1:-1;27476:1:1;27465:13;;27396:88::o;27489:112::-;;27547:1;27537:2;;27552:18;;:::i;:::-;-1:-1:-1;27586:9:1;;27527:74::o;27606:157::-;;27670:4;27667:1;27663:12;27694:3;27684:2;;27701:18;;:::i;:::-;27753:3;27746:4;27743:1;27739:12;27735:22;27730:27;;;27642:121;;;;:::o;27768:127::-;27829:10;27824:3;27820:20;27817:1;27810:31;27860:4;27857:1;27850:15;27884:4;27881:1;27874:15;27900:127;27961:10;27956:3;27952:20;27949:1;27942:31;27992:4;27989:1;27982:15;28016:4;28013:1;28006:15;28032:127;28093:10;28088:3;28084:20;28081:1;28074:31;28124:4;28121:1;28114:15;28148:4;28145:1;28138:15;28164:88;28239:3;28235:15;;28221:31::o;28257:764::-;;28338:4;28320:16;28317:26;28314:2;;;28346:5;;28314:2;28387:1;28382:3;28377;28362:27;28449:10;28411:36;28442:3;28436:10;28411:36;:::i;:::-;28408:52;28398:2;;28464:5;;28398:2;28498;28492:9;28538:16;-1:-1:-1;;28534:29:1;28531:1;28492:9;28510:54;28593:4;28587:11;28617:16;28652:18;28723:2;28716:4;28708:6;28704:17;28701:25;28696:2;28688:6;28685:14;28682:45;28679:2;;;28730:5;;;;;;28679:2;28767:6;28761:4;28757:17;28746:28;;28803:3;28797:10;28783:24;;28830:2;28822:6;28819:14;28816:2;;;28836:5;;;;;;28816:2;;28897:16;28891:4;28887:27;28880:4;28871:6;28866:3;28862:16;28858:27;28855:60;28852:2;;;28918:5;;;;;28852:2;28983;28962:15;-1:-1:-1;;28958:29:1;28949:39;;28990:4;28945:50;28941:2;28934:62;28953:3;-1:-1:-1;;28304:717:1;:::o;29026:133::-;-1:-1:-1;;;;;29103:31:1;;29093:42;;29083:2;;29149:1;29146;29139:12;29164:133;-1:-1:-1;;;;;;29240:32:1;;29230:43;;29220:2;;29287:1;29284;29277:12

Swarm Source

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