ETH Price: $3,348.98 (+0.43%)

Token

DINOX (DNX)
 

Overview

Max Total Supply

9,000 DNX

Holders

6,067

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
1 DNX
0x23fa7fe52a7af03aaaa4b77aacca226eaaf9f63f
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Dinox is a game in development that utilizes NFT (ERC-721) tokens , which are represented as animated Dinosaurs - DNX.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
Dinox

Compiler Version
v0.8.1+commit.df193b15

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-04-15
*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;
// File: @openzeppelin/contracts/utils/Strings.sol


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

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

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

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

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

}


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

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

        uint256 size;
        // solhint-disable-next-line no-inline-assembly
        assembly { size := extcodesize(account) }
        return size > 0;
    }

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

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (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");

        // solhint-disable-next-line avoid-low-level-calls
        (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");

        // solhint-disable-next-line avoid-low-level-calls
        (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");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

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


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

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


/**
 * @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/token/ERC721/IERC721.sol



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

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

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

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

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

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

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

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

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

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

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

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



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



/**
 * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Enumerable is IERC721 {

    /**
     * @dev Returns the total amount of tokens stored by the contract.
     */
    function totalSupply() external view returns (uint256);

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

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

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



/**
 * @title ERC-721 Non-Fungible Token Standard, optional metadata extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Metadata is IERC721 {

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

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

    /**
     * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.
     */
    function tokenURI(uint256 tokenId) external view returns (string memory);
}

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


/*
 * @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) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}
// File: @openzeppelin/contracts/access/Ownable.sol

/**
 * @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 () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), 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 {
        emit OwnershipTransferred(_owner, address(0));
        _owner = 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");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

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


/**
 * @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/ERC721/ERC721.sol


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

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;
    
    string private _baseURI;

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

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

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

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

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

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

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

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

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

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

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

        string memory base = contractURI();
        return bytes(base).length > 0
            ? string(abi.encodePacked(base, tokenId.toString()))
            : '';
    }


    /**
    * @dev Returns the base URI set via {_setBaseURI}. This will be
    * automatically added as a prefix in {tokenURI} to each token's URI, or
    * to the token ID if no specific URI is set for that token ID.
    */
    function contractURI() public view virtual returns (string memory) {
        return _baseURI;
    }
    
    
    /**
     * @dev Internal function to set the base URI for all token IDs. It is
     * automatically added as a prefix to the value returned in {tokenURI},
     * or to the token ID if {tokenURI} is empty.
     */
    function _setBaseURI(string memory baseURI_) internal virtual {
        _baseURI = baseURI_;
    }

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

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

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

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

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

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

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

        _transfer(from, to, tokenId);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _beforeTokenTransfer(from, to, tokenId);

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

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

        emit Transfer(from, to, tokenId);
    }

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

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

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

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



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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// File: contract-182924bc6f.sol



contract Dinox is ERC721, ERC721Enumerable, Ownable, IERC721Receiver {
    constructor() ERC721("DINOX", "DNX") {}

    mapping (uint256 => uint256) private _parentsA;
    mapping (uint256 => uint256) private _parentsB;
    mapping (uint256 => bool) private _isParent;
    mapping (uint256 => uint16) private _gs;

    mapping (uint16 => uint16) private _gsSupply;    
    mapping (uint16 => uint16) private _gsCap;
    mapping (uint16 => uint256) private _gsStartTokenId;
    mapping (uint16 => uint16) private _gsBracketSizes;
    mapping (uint16 => uint16) private _gsBrackets;
    mapping (uint16 => uint256) private _gsPrices;
    mapping (uint16 => uint) private _gsStartTime;    
    mapping (uint16 => uint) private _gsEndTime;
    mapping (uint16 => uint256) private _postgsPrice;

    address private _breeder;
    bool private _breedingEnabled = false;
    bool private _salesEnabled = false;
    
    function buyDNX(uint16 gid, uint16 count) public payable {
        require(_salesEnabled, "E01");
        require(block.timestamp > _gsStartTime[gid], "E02");
        require(block.timestamp < _gsEndTime[gid], "E03");
        require(count > 0 && count <= 10, "E04");
        require(_gsSupply[gid] + count <= _gsCap[gid], "E05");
        require(msg.value >= calculatePrice(gid,count), "E06");

        for (uint i = 0; i < count; i++) {
            uint mintIndex = _gsSupply[gid] + _gsStartTokenId[gid] + i;
            _safeMint(msg.sender, mintIndex);
            _gs[mintIndex] = gid;
        }
        _gsSupply[gid] += count;
    }
    
    function lateBuyDNX(uint16 gid, uint16 count) public payable {
        require(_salesEnabled, "E01");
        require(block.timestamp > _gsEndTime[gid], "E12");
        require(count > 0 && count <= 10, "E04");
        require(_postgsPrice[gid] > 0, "E07");
        require(_gsSupply[gid] + count <= _gsCap[gid], "E05");
        require(msg.value >= _postgsPrice[gid]*count, "E06");

        for (uint i = 0; i < count; i++) {
            uint mintIndex = _gsSupply[gid] + _gsStartTokenId[gid] + i;
            _safeMint(msg.sender, mintIndex);
            _gs[mintIndex] = gid;
        }
        _gsSupply[gid] += count;
    }
    
    function breedDNX(uint256 parentA, uint256 parentB, uint256 tokenId, uint16 resolvedGen, address to) public {
        require(_breedingEnabled, "E08");
        require(msg.sender == _breeder, "E09");
        require(ownerOf(parentA) == to && ownerOf(parentB) == to, "E10");
        require(!_isParent[parentA] && !_isParent[parentB], "E11");
        _safeMint(to, tokenId);
        _parentsA[tokenId] = parentA;
        _parentsB[tokenId] = parentB;
        _isParent[parentA] = true;        
        _isParent[parentB] = true;
        _gs[tokenId] = resolvedGen;
    }
    
    function calculatePrice(uint16 gid, uint16 count) public view returns (uint256) {
        require(block.timestamp > _gsStartTime[gid], "E02");
        require(block.timestamp < _gsEndTime[gid], "E03");
        require(_gsSupply[gid] < _gsCap[gid], "E13");

        uint16 sb = 0;
        uint16 eb = 0;
        uint16 i;
        for (i = 0; i <= gid; i++) {
            if (i < gid) {
                sb += _gsBracketSizes[i];
            }
            eb += _gsBracketSizes[i];
        }
        
        uint16 pi = 0;
        uint256 sf = 0;
        for (i = sb; i < eb; i++) {
            sf += _gsBrackets[i];
            if (sf > _gsSupply[gid]) {
                pi = i+1;
                break;
            }
        }
        
        require(pi > 0, "E14");
        
        return _gsPrices[pi-1]*count;
    }
    
    function reserveForGiveaway(uint16 gid, uint16 count) public onlyOwner {
        for (uint i = 0; i < count; i++) {
            uint mintIndex = _gsSupply[gid] + _gsStartTokenId[gid] + i;
            _safeMint(msg.sender, mintIndex);
            _gs[mintIndex] = gid;
        }
        _gsSupply[gid] += count;
    }
    
    function changeGSCap(uint16 gid, uint16 supply) public onlyOwner {
        _gsCap[gid] = supply;
        _gsSupply[gid] = 0;
    }
    
    function changeGSStartToken(uint16 gid, uint256 tokenId) public onlyOwner {
        _gsStartTokenId[gid] = tokenId;
    }
    
    function changeGSBracketSizes(uint16 gid, uint16 bracketSize) public onlyOwner {
        _gsBracketSizes[gid] = bracketSize;
    }
    
    function changeGSBrackets(uint16 bracketId, uint16 bracketTokenCount) public onlyOwner {
        _gsBrackets[bracketId] = bracketTokenCount;
    }
    
    function changeGSBracketPrice(uint16 bid, uint256 p) public onlyOwner {
        _gsPrices[bid] = p;
    }
    
    function changeGSPostPrice(uint16 gid, uint256 p) public onlyOwner {
        _postgsPrice[gid] = p;
    }
    
    function changeGSTime(uint16 gid, uint st, uint et) public onlyOwner {
        _gsStartTime[gid] = st;
        _gsEndTime[gid] = et;
    }
    
    function toggleSales() public onlyOwner {
        _salesEnabled = !_salesEnabled;
    }
    
    function toggleBreeding() public onlyOwner {
        _breedingEnabled = !_breedingEnabled;
    }
    
    function getPA(uint256 tokenId) public view returns (uint256) {
        return _parentsA[tokenId];
    }
    
    function getPB(uint256 tokenId) public view returns (uint256) {
        return _parentsB[tokenId];
    }
    
    function getIsP(uint256 tokenId) public view returns (bool) {
        return _isParent[tokenId];
    }
    
    function getTG(uint256 tokenId) public view returns (uint16) {
        return _gs[tokenId];
    }
    
    function getGSSupply(uint16 gid) public view returns (uint16) {
        return _gsSupply[gid];
    }
    
    function getGSCap(uint16 gid) public view returns (uint16) {
        return _gsCap[gid];
    }
    
    function setBreederAddress(address breeder) public onlyOwner {
        _breeder = breeder;
    }
    
    function setBaseURI(string memory baseURI) public onlyOwner {
        _setBaseURI(baseURI);
    }
    
    function withdrawAll() public payable onlyOwner {
        require(payable(msg.sender).send(address(this).balance));
    }

    function tokensOfOwner(address _owner) external view returns(uint256[] memory ) {
        uint256 tokenCount = balanceOf(_owner);
        if (tokenCount == 0) {
            return new uint256[](0);
        } else {
            uint256[] memory result = new uint256[](tokenCount);
            uint256 index;
            for (index = 0; index < tokenCount; index++) {
                result[index] = tokenOfOwnerByIndex(_owner, index);
            }
            return result;
        }
    }
    
    function _beforeTokenTransfer(address from, address to, uint256 tokenId)
        internal
        override(ERC721, ERC721Enumerable)
    {
        super._beforeTokenTransfer(from, to, tokenId);
    }

    function supportsInterface(bytes4 interfaceId)
        public
        view
        override(ERC721, ERC721Enumerable)
        returns (bool)
    {
        return super.supportsInterface(interfaceId);
    }
    
    function onERC721Received(address, address, uint256, bytes memory) public virtual override returns (bytes4) {
        return this.onERC721Received.selector;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"parentA","type":"uint256"},{"internalType":"uint256","name":"parentB","type":"uint256"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint16","name":"resolvedGen","type":"uint16"},{"internalType":"address","name":"to","type":"address"}],"name":"breedDNX","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"gid","type":"uint16"},{"internalType":"uint16","name":"count","type":"uint16"}],"name":"buyDNX","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint16","name":"gid","type":"uint16"},{"internalType":"uint16","name":"count","type":"uint16"}],"name":"calculatePrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"bid","type":"uint16"},{"internalType":"uint256","name":"p","type":"uint256"}],"name":"changeGSBracketPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"gid","type":"uint16"},{"internalType":"uint16","name":"bracketSize","type":"uint16"}],"name":"changeGSBracketSizes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"bracketId","type":"uint16"},{"internalType":"uint16","name":"bracketTokenCount","type":"uint16"}],"name":"changeGSBrackets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"gid","type":"uint16"},{"internalType":"uint16","name":"supply","type":"uint16"}],"name":"changeGSCap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"gid","type":"uint16"},{"internalType":"uint256","name":"p","type":"uint256"}],"name":"changeGSPostPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"gid","type":"uint16"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"changeGSStartToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"gid","type":"uint16"},{"internalType":"uint256","name":"st","type":"uint256"},{"internalType":"uint256","name":"et","type":"uint256"}],"name":"changeGSTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"gid","type":"uint16"}],"name":"getGSCap","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"gid","type":"uint16"}],"name":"getGSSupply","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getIsP","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getPA","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getPB","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getTG","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"gid","type":"uint16"},{"internalType":"uint16","name":"count","type":"uint16"}],"name":"lateBuyDNX","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC721Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"gid","type":"uint16"},{"internalType":"uint16","name":"count","type":"uint16"}],"name":"reserveForGiveaway","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"breeder","type":"address"}],"name":"setBreederAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"toggleBreeding","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"toggleSales","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"tokensOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawAll","outputs":[],"stateMutability":"payable","type":"function"}]

60806040526000601960146101000a81548160ff0219169083151502179055506000601960156101000a81548160ff0219169083151502179055503480156200004757600080fd5b506040518060400160405280600581526020017f44494e4f580000000000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f444e5800000000000000000000000000000000000000000000000000000000008152508160009080519060200190620000cc929190620001a7565b508060019080519060200190620000e5929190620001a7565b5050506000620000fa6200019f60201b60201c565b905080600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350620002bc565b600033905090565b828054620001b59062000257565b90600052602060002090601f016020900481019282620001d9576000855562000225565b82601f10620001f457805160ff191683800117855562000225565b8280016001018555821562000225579182015b828111156200022457825182559160200191906001019062000207565b5b50905062000234919062000238565b5090565b5b808211156200025357600081600090555060010162000239565b5090565b600060028204905060018216806200027057607f821691505b602082108114156200028757620002866200028d565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b615f8080620002cc6000396000f3fe6080604052600436106102715760003560e01c80635c069a581161014f578063a22cb465116100c1578063dbd30ae01161007a578063dbd30ae01461099e578063e8a3d485146109b5578063e985e9c5146109e0578063f257cc6b14610a1d578063f2fde38b14610a5a578063f3169b8614610a8357610271565b8063a22cb46514610894578063a24b1f3e146108bd578063b88d4fde146108e6578063c87b56dd1461090f578063cd9d507c1461094c578063d0136b831461097557610271565b80637c02a1b3116101135780637c02a1b3146107915780638462151c146107ba578063853828b6146107f75780638da5cb5b1461080157806395d89b411461082c57806397c9eec91461085757610271565b80635c069a58146106a757806362f5a924146106e45780636352211e1461070057806370a082311461073d578063715018a61461077a57610271565b806325a0f0ab116101e857806335f3a06b116101ac57806335f3a06b1461058957806339c15342146105b257806342842e0e146105db5780634f6ccce7146106045780635102fe331461064157806355f804b31461067e57610271565b806325a0f0ab146104a157806328c2d99d146104de5780632c3fab8f146105075780632f745c591461052357806335e4295a1461056057610271565b8063095ea7b31161023a578063095ea7b3146103815780630fbcf93c146103aa578063150b7a02146103d3578063159655451461041057806318160ddd1461044d57806323b872dd1461047857610271565b806214995e1461027657806301ffc9a71461029f578063064ee27c146102dc57806306fdde0314610319578063081812fc14610344575b600080fd5b34801561028257600080fd5b5061029d60048036038101906102989190614611565b610a9a565b005b3480156102ab57600080fd5b506102c660048036038101906102c19190614555565b610b50565b6040516102d39190614df8565b60405180910390f35b3480156102e857600080fd5b5061030360048036038101906102fe91906145e8565b610b62565b6040516103109190615250565b60405180910390f35b34801561032557600080fd5b5061032e610b95565b60405161033b9190614e2e565b60405180910390f35b34801561035057600080fd5b5061036b600480360381019061036691906146d8565b610c27565b6040516103789190614d6f565b60405180910390f35b34801561038d57600080fd5b506103a860048036038101906103a39190614519565b610cac565b005b3480156103b657600080fd5b506103d160048036038101906103cc91906143ae565b610dc4565b005b3480156103df57600080fd5b506103fa60048036038101906103f59190614462565b610e84565b6040516104079190614e13565b60405180910390f35b34801561041c57600080fd5b50610437600480360381019061043291906145e8565b610e98565b6040516104449190615250565b60405180910390f35b34801561045957600080fd5b50610462610ecb565b60405161046f919061526b565b60405180910390f35b34801561048457600080fd5b5061049f600480360381019061049a9190614413565b610ed8565b005b3480156104ad57600080fd5b506104c860048036038101906104c39190614611565b610f38565b6040516104d5919061526b565b60405180910390f35b3480156104ea57600080fd5b5061050560048036038101906105009190614611565b611270565b005b610521600480360381019061051c9190614611565b61135d565b005b34801561052f57600080fd5b5061054a60048036038101906105459190614519565b6116e9565b604051610557919061526b565b60405180910390f35b34801561056c57600080fd5b5061058760048036038101906105829190614701565b61178e565b005b34801561059557600080fd5b506105b060048036038101906105ab919061464d565b611a74565b005b3480156105be57600080fd5b506105d960048036038101906105d49190614611565b611b14565b005b3480156105e757600080fd5b5061060260048036038101906105fd9190614413565b611bca565b005b34801561061057600080fd5b5061062b600480360381019061062691906146d8565b611bea565b604051610638919061526b565b60405180910390f35b34801561064d57600080fd5b50610668600480360381019061066391906146d8565b611c81565b604051610675919061526b565b60405180910390f35b34801561068a57600080fd5b506106a560048036038101906106a091906145a7565b611c9e565b005b3480156106b357600080fd5b506106ce60048036038101906106c991906146d8565b611d26565b6040516106db9190614df8565b60405180910390f35b6106fe60048036038101906106f99190614611565b611d50565b005b34801561070c57600080fd5b50610727600480360381019061072291906146d8565b6120ba565b6040516107349190614d6f565b60405180910390f35b34801561074957600080fd5b50610764600480360381019061075f91906143ae565b61216c565b604051610771919061526b565b60405180910390f35b34801561078657600080fd5b5061078f612224565b005b34801561079d57600080fd5b506107b860048036038101906107b39190614689565b612361565b005b3480156107c657600080fd5b506107e160048036038101906107dc91906143ae565b612422565b6040516107ee9190614dd6565b60405180910390f35b6107ff61259e565b005b34801561080d57600080fd5b5061081661265a565b6040516108239190614d6f565b60405180910390f35b34801561083857600080fd5b50610841612684565b60405161084e9190614e2e565b60405180910390f35b34801561086357600080fd5b5061087e600480360381019061087991906146d8565b612716565b60405161088b9190615250565b60405180910390f35b3480156108a057600080fd5b506108bb60048036038101906108b691906144dd565b612741565b005b3480156108c957600080fd5b506108e460048036038101906108df9190614611565b6128c2565b005b3480156108f257600080fd5b5061090d60048036038101906109089190614462565b612a53565b005b34801561091b57600080fd5b50610936600480360381019061093191906146d8565b612ab5565b6040516109439190614e2e565b60405180910390f35b34801561095857600080fd5b50610973600480360381019061096e919061464d565b612b5c565b005b34801561098157600080fd5b5061099c6004803603810190610997919061464d565b612bfc565b005b3480156109aa57600080fd5b506109b3612c9c565b005b3480156109c157600080fd5b506109ca612d44565b6040516109d79190614e2e565b60405180910390f35b3480156109ec57600080fd5b50610a076004803603810190610a0291906143d7565b612dd6565b604051610a149190614df8565b60405180910390f35b348015610a2957600080fd5b50610a446004803603810190610a3f91906146d8565b612e6a565b604051610a51919061526b565b60405180910390f35b348015610a6657600080fd5b50610a816004803603810190610a7c91906143ae565b612e87565b005b348015610a8f57600080fd5b50610a98613033565b005b610aa26130db565b73ffffffffffffffffffffffffffffffffffffffff16610ac061265a565b73ffffffffffffffffffffffffffffffffffffffff1614610b16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0d90615170565b60405180910390fd5b80601360008461ffff1661ffff16815260200190815260200160002060006101000a81548161ffff021916908361ffff1602179055505050565b6000610b5b826130e3565b9050919050565b6000601060008361ffff1661ffff16815260200190815260200160002060009054906101000a900461ffff169050919050565b606060008054610ba4906155ce565b80601f0160208091040260200160405190810160405280929190818152602001828054610bd0906155ce565b8015610c1d5780601f10610bf257610100808354040283529160200191610c1d565b820191906000526020600020905b815481529060010190602001808311610c0057829003601f168201915b5050505050905090565b6000610c328261315d565b610c71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6890615150565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610cb7826120ba565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610d28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1f906151d0565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610d476130db565b73ffffffffffffffffffffffffffffffffffffffff161480610d765750610d7581610d706130db565b612dd6565b5b610db5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dac90614ff0565b60405180910390fd5b610dbf83836131c9565b505050565b610dcc6130db565b73ffffffffffffffffffffffffffffffffffffffff16610dea61265a565b73ffffffffffffffffffffffffffffffffffffffff1614610e40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3790615170565b60405180910390fd5b80601960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600063150b7a0260e01b9050949350505050565b6000601160008361ffff1661ffff16815260200190815260200160002060009054906101000a900461ffff169050919050565b6000600980549050905090565b610ee9610ee36130db565b82613282565b610f28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1f906151f0565b60405180910390fd5b610f33838383613360565b505050565b6000601660008461ffff1661ffff168152602001908152602001600020544211610f97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8e90615030565b60405180910390fd5b601760008461ffff1661ffff168152602001908152602001600020544210610ff4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610feb90615070565b60405180910390fd5b601160008461ffff1661ffff16815260200190815260200160002060009054906101000a900461ffff1661ffff16601060008561ffff1661ffff16815260200190815260200160002060009054906101000a900461ffff1661ffff1610611090576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108790615110565b60405180910390fd5b60008060005b8561ffff168161ffff1611611137578561ffff168161ffff1610156110ed57601360008261ffff1661ffff16815260200190815260200160002060009054906101000a900461ffff16836110ea9190615389565b92505b601360008261ffff1661ffff16815260200190815260200160002060009054906101000a900461ffff16826111229190615389565b9150808061112f90615631565b915050611096565b6000808492505b8361ffff168361ffff1610156111e557601460008461ffff1661ffff16815260200190815260200160002060009054906101000a900461ffff1661ffff168161118791906153c1565b9050601060008961ffff1661ffff16815260200190815260200160002060009054906101000a900461ffff1661ffff168111156111d2576001836111cb9190615389565b91506111e5565b82806111dd90615631565b93505061113e565b60008261ffff161161122c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122390615090565b60405180910390fd5b8661ffff166015600060018561124291906154a2565b61ffff1661ffff168152602001908152602001600020546112639190615448565b9550505050505092915050565b6112786130db565b73ffffffffffffffffffffffffffffffffffffffff1661129661265a565b73ffffffffffffffffffffffffffffffffffffffff16146112ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e390615170565b60405180910390fd5b80601160008461ffff1661ffff16815260200190815260200160002060006101000a81548161ffff021916908361ffff1602179055506000601060008461ffff1661ffff16815260200190815260200160002060006101000a81548161ffff021916908361ffff1602179055505050565b601960159054906101000a900460ff166113ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a390614e50565b60405180910390fd5b601760008361ffff1661ffff168152602001908152602001600020544211611409576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140090615230565b60405180910390fd5b60008161ffff161180156114225750600a8161ffff1611155b611461576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611458906150b0565b60405180910390fd5b6000601860008461ffff1661ffff16815260200190815260200160002054116114bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b690614f90565b60405180910390fd5b601160008361ffff1661ffff16815260200190815260200160002060009054906101000a900461ffff1661ffff1681601060008561ffff1661ffff16815260200190815260200160002060009054906101000a900461ffff166115229190615389565b61ffff161115611567576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155e90614f30565b60405180910390fd5b8061ffff16601860008461ffff1661ffff168152602001908152602001600020546115929190615448565b3410156115d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115cb90614e90565b60405180910390fd5b60005b8161ffff1681101561169257600081601260008661ffff1661ffff16815260200190815260200160002054601060008761ffff1661ffff16815260200190815260200160002060009054906101000a900461ffff1661ffff1661163a91906153c1565b61164491906153c1565b905061165033826135bc565b83600f600083815260200190815260200160002060006101000a81548161ffff021916908361ffff16021790555050808061168a9061565c565b9150506115d7565b5080601060008461ffff1661ffff16815260200190815260200160002060008282829054906101000a900461ffff166116cb9190615389565b92506101000a81548161ffff021916908361ffff1602179055505050565b60006116f48361216c565b8210611735576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172c90614eb0565b60405180910390fd5b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b601960149054906101000a900460ff166117dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d490615130565b60405180910390fd5b601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461186d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186490614e70565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661188d866120ba565b73ffffffffffffffffffffffffffffffffffffffff161480156118e357508073ffffffffffffffffffffffffffffffffffffffff166118cb856120ba565b73ffffffffffffffffffffffffffffffffffffffff16145b611922576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191990614fd0565b60405180910390fd5b600e600086815260200190815260200160002060009054906101000a900460ff1615801561196e5750600e600085815260200190815260200160002060009054906101000a900460ff16155b6119ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a4906150f0565b60405180910390fd5b6119b781846135bc565b84600c60008581526020019081526020016000208190555083600d6000858152602001908152602001600020819055506001600e600087815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600e600086815260200190815260200160002060006101000a81548160ff02191690831515021790555081600f600085815260200190815260200160002060006101000a81548161ffff021916908361ffff1602179055505050505050565b611a7c6130db565b73ffffffffffffffffffffffffffffffffffffffff16611a9a61265a565b73ffffffffffffffffffffffffffffffffffffffff1614611af0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae790615170565b60405180910390fd5b80601560008461ffff1661ffff168152602001908152602001600020819055505050565b611b1c6130db565b73ffffffffffffffffffffffffffffffffffffffff16611b3a61265a565b73ffffffffffffffffffffffffffffffffffffffff1614611b90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8790615170565b60405180910390fd5b80601460008461ffff1661ffff16815260200190815260200160002060006101000a81548161ffff021916908361ffff1602179055505050565b611be583838360405180602001604052806000815250612a53565b505050565b6000611bf4610ecb565b8210611c35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2c90615210565b60405180910390fd5b60098281548110611c6f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b6000600c6000838152602001908152602001600020549050919050565b611ca66130db565b73ffffffffffffffffffffffffffffffffffffffff16611cc461265a565b73ffffffffffffffffffffffffffffffffffffffff1614611d1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1190615170565b60405180910390fd5b611d23816135da565b50565b6000600e600083815260200190815260200160002060009054906101000a900460ff169050919050565b601960159054906101000a900460ff16611d9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9690614e50565b60405180910390fd5b601660008361ffff1661ffff168152602001908152602001600020544211611dfc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df390615030565b60405180910390fd5b601760008361ffff1661ffff168152602001908152602001600020544210611e59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5090615070565b60405180910390fd5b60008161ffff16118015611e725750600a8161ffff1611155b611eb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea8906150b0565b60405180910390fd5b601160008361ffff1661ffff16815260200190815260200160002060009054906101000a900461ffff1661ffff1681601060008561ffff1661ffff16815260200190815260200160002060009054906101000a900461ffff16611f149190615389565b61ffff161115611f59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5090614f30565b60405180910390fd5b611f638282610f38565b341015611fa5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9c90614e90565b60405180910390fd5b60005b8161ffff1681101561206357600081601260008661ffff1661ffff16815260200190815260200160002054601060008761ffff1661ffff16815260200190815260200160002060009054906101000a900461ffff1661ffff1661200b91906153c1565b61201591906153c1565b905061202133826135bc565b83600f600083815260200190815260200160002060006101000a81548161ffff021916908361ffff16021790555050808061205b9061565c565b915050611fa8565b5080601060008461ffff1661ffff16815260200190815260200160002060008282829054906101000a900461ffff1661209c9190615389565b92506101000a81548161ffff021916908361ffff1602179055505050565b6000806003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612163576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215a90615050565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156121dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d490615010565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61222c6130db565b73ffffffffffffffffffffffffffffffffffffffff1661224a61265a565b73ffffffffffffffffffffffffffffffffffffffff16146122a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229790615170565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6123696130db565b73ffffffffffffffffffffffffffffffffffffffff1661238761265a565b73ffffffffffffffffffffffffffffffffffffffff16146123dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123d490615170565b60405180910390fd5b81601660008561ffff1661ffff1681526020019081526020016000208190555080601760008561ffff1661ffff16815260200190815260200160002081905550505050565b6060600061242f8361216c565b905060008114156124b257600067ffffffffffffffff81111561247b577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156124a95781602001602082028036833780820191505090505b50915050612599565b60008167ffffffffffffffff8111156124f4577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156125225781602001602082028036833780820191505090505b50905060005b828110156125925761253a85826116e9565b828281518110612573577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001018181525050808061258a9061565c565b915050612528565b8193505050505b919050565b6125a66130db565b73ffffffffffffffffffffffffffffffffffffffff166125c461265a565b73ffffffffffffffffffffffffffffffffffffffff161461261a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161261190615170565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f1935050505061265857600080fd5b565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054612693906155ce565b80601f01602080910402602001604051908101604052809291908181526020018280546126bf906155ce565b801561270c5780601f106126e15761010080835404028352916020019161270c565b820191906000526020600020905b8154815290600101906020018083116126ef57829003601f168201915b5050505050905090565b6000600f600083815260200190815260200160002060009054906101000a900461ffff169050919050565b6127496130db565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156127b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ae90614f70565b60405180910390fd5b80600660006127c46130db565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166128716130db565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516128b69190614df8565b60405180910390a35050565b6128ca6130db565b73ffffffffffffffffffffffffffffffffffffffff166128e861265a565b73ffffffffffffffffffffffffffffffffffffffff161461293e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161293590615170565b60405180910390fd5b60005b8161ffff168110156129fc57600081601260008661ffff1661ffff16815260200190815260200160002054601060008761ffff1661ffff16815260200190815260200160002060009054906101000a900461ffff1661ffff166129a491906153c1565b6129ae91906153c1565b90506129ba33826135bc565b83600f600083815260200190815260200160002060006101000a81548161ffff021916908361ffff1602179055505080806129f49061565c565b915050612941565b5080601060008461ffff1661ffff16815260200190815260200160002060008282829054906101000a900461ffff16612a359190615389565b92506101000a81548161ffff021916908361ffff1602179055505050565b612a64612a5e6130db565b83613282565b612aa3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a9a906151f0565b60405180910390fd5b612aaf848484846135f4565b50505050565b6060612ac08261315d565b612aff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612af6906151b0565b60405180910390fd5b6000612b09612d44565b90506000815111612b295760405180602001604052806000815250612b54565b80612b3384613650565b604051602001612b44929190614d4b565b6040516020818303038152906040525b915050919050565b612b646130db565b73ffffffffffffffffffffffffffffffffffffffff16612b8261265a565b73ffffffffffffffffffffffffffffffffffffffff1614612bd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bcf90615170565b60405180910390fd5b80601860008461ffff1661ffff168152602001908152602001600020819055505050565b612c046130db565b73ffffffffffffffffffffffffffffffffffffffff16612c2261265a565b73ffffffffffffffffffffffffffffffffffffffff1614612c78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c6f90615170565b60405180910390fd5b80601260008461ffff1661ffff168152602001908152602001600020819055505050565b612ca46130db565b73ffffffffffffffffffffffffffffffffffffffff16612cc261265a565b73ffffffffffffffffffffffffffffffffffffffff1614612d18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d0f90615170565b60405180910390fd5b601960159054906101000a900460ff1615601960156101000a81548160ff021916908315150217905550565b606060028054612d53906155ce565b80601f0160208091040260200160405190810160405280929190818152602001828054612d7f906155ce565b8015612dcc5780601f10612da157610100808354040283529160200191612dcc565b820191906000526020600020905b815481529060010190602001808311612daf57829003601f168201915b5050505050905090565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6000600d6000838152602001908152602001600020549050919050565b612e8f6130db565b73ffffffffffffffffffffffffffffffffffffffff16612ead61265a565b73ffffffffffffffffffffffffffffffffffffffff1614612f03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612efa90615170565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612f73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f6a90614ef0565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61303b6130db565b73ffffffffffffffffffffffffffffffffffffffff1661305961265a565b73ffffffffffffffffffffffffffffffffffffffff16146130af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130a690615170565b60405180910390fd5b601960149054906101000a900460ff1615601960146101000a81548160ff021916908315150217905550565b600033905090565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806131565750613155826137fd565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661323c836120ba565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061328d8261315d565b6132cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132c390614fb0565b60405180910390fd5b60006132d7836120ba565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061334657508373ffffffffffffffffffffffffffffffffffffffff1661332e84610c27565b73ffffffffffffffffffffffffffffffffffffffff16145b8061335757506133568185612dd6565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16613380826120ba565b73ffffffffffffffffffffffffffffffffffffffff16146133d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133cd90615190565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613446576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161343d90614f50565b60405180910390fd5b6134518383836138df565b61345c6000826131c9565b6001600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546134ac91906154d6565b925050819055506001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461350391906153c1565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6135d68282604051806020016040528060008152506138ef565b5050565b80600290805190602001906135f09291906141bd565b5050565b6135ff848484613360565b61360b8484848461394a565b61364a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161364190614ed0565b60405180910390fd5b50505050565b60606000821415613698576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506137f8565b600082905060005b600082146136ca5780806136b39061565c565b915050600a826136c39190615417565b91506136a0565b60008167ffffffffffffffff81111561370c577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f19166020018201604052801561373e5781602001600182028036833780820191505090505b5090505b600085146137f15760018261375791906154d6565b9150600a8561376691906156a5565b603061377291906153c1565b60f81b8183815181106137ae577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856137ea9190615417565b9450613742565b8093505050505b919050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806138c857507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806138d857506138d782613ae1565b5b9050919050565b6138ea838383613b4b565b505050565b6138f98383613c5f565b613906600084848461394a565b613945576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161393c90614ed0565b60405180910390fd5b505050565b600061396b8473ffffffffffffffffffffffffffffffffffffffff16613e2d565b15613ad4578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026139946130db565b8786866040518563ffffffff1660e01b81526004016139b69493929190614d8a565b602060405180830381600087803b1580156139d057600080fd5b505af1925050508015613a0157506040513d601f19601f820116820180604052508101906139fe919061457e565b60015b613a84573d8060008114613a31576040519150601f19603f3d011682016040523d82523d6000602084013e613a36565b606091505b50600081511415613a7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a7390614ed0565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613ad9565b600190505b949350505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b613b56838383613e40565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613b9957613b9481613e45565b613bd8565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614613bd757613bd68382613e8e565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613c1b57613c1681613ffb565b613c5a565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614613c5957613c58828261413e565b5b5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613ccf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613cc6906150d0565b60405180910390fd5b613cd88161315d565b15613d18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d0f90614f10565b60405180910390fd5b613d24600083836138df565b6001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613d7491906153c1565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b505050565b600980549050600a600083815260200190815260200160002081905550600981908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001613e9b8461216c565b613ea591906154d6565b9050600060086000848152602001908152602001600020549050818114613f8a576000600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816008600083815260200190815260200160002081905550505b6008600084815260200190815260200160002060009055600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160098054905061400f91906154d6565b90506000600a6000848152602001908152602001600020549050600060098381548110614065577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200154905080600983815481106140ad577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020018190555081600a600083815260200190815260200160002081905550600a6000858152602001908152602001600020600090556009805480614122577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b60006141498361216c565b905081600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806008600084815260200190815260200160002081905550505050565b8280546141c9906155ce565b90600052602060002090601f0160209004810192826141eb5760008555614232565b82601f1061420457805160ff1916838001178555614232565b82800160010185558215614232579182015b82811115614231578251825591602001919060010190614216565b5b50905061423f9190614243565b5090565b5b8082111561425c576000816000905550600101614244565b5090565b600061427361426e846152ab565b615286565b90508281526020810184848401111561428b57600080fd5b61429684828561558c565b509392505050565b60006142b16142ac846152dc565b615286565b9050828152602081018484840111156142c957600080fd5b6142d484828561558c565b509392505050565b6000813590506142eb81615ed7565b92915050565b60008135905061430081615eee565b92915050565b60008135905061431581615f05565b92915050565b60008151905061432a81615f05565b92915050565b600082601f83011261434157600080fd5b8135614351848260208601614260565b91505092915050565b600082601f83011261436b57600080fd5b813561437b84826020860161429e565b91505092915050565b60008135905061439381615f1c565b92915050565b6000813590506143a881615f33565b92915050565b6000602082840312156143c057600080fd5b60006143ce848285016142dc565b91505092915050565b600080604083850312156143ea57600080fd5b60006143f8858286016142dc565b9250506020614409858286016142dc565b9150509250929050565b60008060006060848603121561442857600080fd5b6000614436868287016142dc565b9350506020614447868287016142dc565b925050604061445886828701614399565b9150509250925092565b6000806000806080858703121561447857600080fd5b6000614486878288016142dc565b9450506020614497878288016142dc565b93505060406144a887828801614399565b925050606085013567ffffffffffffffff8111156144c557600080fd5b6144d187828801614330565b91505092959194509250565b600080604083850312156144f057600080fd5b60006144fe858286016142dc565b925050602061450f858286016142f1565b9150509250929050565b6000806040838503121561452c57600080fd5b600061453a858286016142dc565b925050602061454b85828601614399565b9150509250929050565b60006020828403121561456757600080fd5b600061457584828501614306565b91505092915050565b60006020828403121561459057600080fd5b600061459e8482850161431b565b91505092915050565b6000602082840312156145b957600080fd5b600082013567ffffffffffffffff8111156145d357600080fd5b6145df8482850161435a565b91505092915050565b6000602082840312156145fa57600080fd5b600061460884828501614384565b91505092915050565b6000806040838503121561462457600080fd5b600061463285828601614384565b925050602061464385828601614384565b9150509250929050565b6000806040838503121561466057600080fd5b600061466e85828601614384565b925050602061467f85828601614399565b9150509250929050565b60008060006060848603121561469e57600080fd5b60006146ac86828701614384565b93505060206146bd86828701614399565b92505060406146ce86828701614399565b9150509250925092565b6000602082840312156146ea57600080fd5b60006146f884828501614399565b91505092915050565b600080600080600060a0868803121561471957600080fd5b600061472788828901614399565b955050602061473888828901614399565b945050604061474988828901614399565b935050606061475a88828901614384565b925050608061476b888289016142dc565b9150509295509295909350565b60006147848383614d2d565b60208301905092915050565b6147998161550a565b82525050565b60006147aa8261531d565b6147b4818561534b565b93506147bf8361530d565b8060005b838110156147f05781516147d78882614778565b97506147e28361533e565b9250506001810190506147c3565b5085935050505092915050565b6148068161551c565b82525050565b61481581615528565b82525050565b600061482682615328565b614830818561535c565b935061484081856020860161559b565b61484981615792565b840191505092915050565b600061485f82615333565b614869818561536d565b935061487981856020860161559b565b61488281615792565b840191505092915050565b600061489882615333565b6148a2818561537e565b93506148b281856020860161559b565b80840191505092915050565b60006148cb60038361536d565b91506148d6826157a3565b602082019050919050565b60006148ee60038361536d565b91506148f9826157cc565b602082019050919050565b600061491160038361536d565b915061491c826157f5565b602082019050919050565b6000614934602b8361536d565b915061493f8261581e565b604082019050919050565b600061495760328361536d565b91506149628261586d565b604082019050919050565b600061497a60268361536d565b9150614985826158bc565b604082019050919050565b600061499d601c8361536d565b91506149a88261590b565b602082019050919050565b60006149c060038361536d565b91506149cb82615934565b602082019050919050565b60006149e360248361536d565b91506149ee8261595d565b604082019050919050565b6000614a0660198361536d565b9150614a11826159ac565b602082019050919050565b6000614a2960038361536d565b9150614a34826159d5565b602082019050919050565b6000614a4c602c8361536d565b9150614a57826159fe565b604082019050919050565b6000614a6f60038361536d565b9150614a7a82615a4d565b602082019050919050565b6000614a9260388361536d565b9150614a9d82615a76565b604082019050919050565b6000614ab5602a8361536d565b9150614ac082615ac5565b604082019050919050565b6000614ad860038361536d565b9150614ae382615b14565b602082019050919050565b6000614afb60298361536d565b9150614b0682615b3d565b604082019050919050565b6000614b1e60038361536d565b9150614b2982615b8c565b602082019050919050565b6000614b4160038361536d565b9150614b4c82615bb5565b602082019050919050565b6000614b6460038361536d565b9150614b6f82615bde565b602082019050919050565b6000614b8760208361536d565b9150614b9282615c07565b602082019050919050565b6000614baa60038361536d565b9150614bb582615c30565b602082019050919050565b6000614bcd60038361536d565b9150614bd882615c59565b602082019050919050565b6000614bf060038361536d565b9150614bfb82615c82565b602082019050919050565b6000614c13602c8361536d565b9150614c1e82615cab565b604082019050919050565b6000614c3660208361536d565b9150614c4182615cfa565b602082019050919050565b6000614c5960298361536d565b9150614c6482615d23565b604082019050919050565b6000614c7c602f8361536d565b9150614c8782615d72565b604082019050919050565b6000614c9f60218361536d565b9150614caa82615dc1565b604082019050919050565b6000614cc260318361536d565b9150614ccd82615e10565b604082019050919050565b6000614ce5602c8361536d565b9150614cf082615e5f565b604082019050919050565b6000614d0860038361536d565b9150614d1382615eae565b602082019050919050565b614d2781615554565b82525050565b614d3681615582565b82525050565b614d4581615582565b82525050565b6000614d57828561488d565b9150614d63828461488d565b91508190509392505050565b6000602082019050614d846000830184614790565b92915050565b6000608082019050614d9f6000830187614790565b614dac6020830186614790565b614db96040830185614d3c565b8181036060830152614dcb818461481b565b905095945050505050565b60006020820190508181036000830152614df0818461479f565b905092915050565b6000602082019050614e0d60008301846147fd565b92915050565b6000602082019050614e28600083018461480c565b92915050565b60006020820190508181036000830152614e488184614854565b905092915050565b60006020820190508181036000830152614e69816148be565b9050919050565b60006020820190508181036000830152614e89816148e1565b9050919050565b60006020820190508181036000830152614ea981614904565b9050919050565b60006020820190508181036000830152614ec981614927565b9050919050565b60006020820190508181036000830152614ee98161494a565b9050919050565b60006020820190508181036000830152614f098161496d565b9050919050565b60006020820190508181036000830152614f2981614990565b9050919050565b60006020820190508181036000830152614f49816149b3565b9050919050565b60006020820190508181036000830152614f69816149d6565b9050919050565b60006020820190508181036000830152614f89816149f9565b9050919050565b60006020820190508181036000830152614fa981614a1c565b9050919050565b60006020820190508181036000830152614fc981614a3f565b9050919050565b60006020820190508181036000830152614fe981614a62565b9050919050565b6000602082019050818103600083015261500981614a85565b9050919050565b6000602082019050818103600083015261502981614aa8565b9050919050565b6000602082019050818103600083015261504981614acb565b9050919050565b6000602082019050818103600083015261506981614aee565b9050919050565b6000602082019050818103600083015261508981614b11565b9050919050565b600060208201905081810360008301526150a981614b34565b9050919050565b600060208201905081810360008301526150c981614b57565b9050919050565b600060208201905081810360008301526150e981614b7a565b9050919050565b6000602082019050818103600083015261510981614b9d565b9050919050565b6000602082019050818103600083015261512981614bc0565b9050919050565b6000602082019050818103600083015261514981614be3565b9050919050565b6000602082019050818103600083015261516981614c06565b9050919050565b6000602082019050818103600083015261518981614c29565b9050919050565b600060208201905081810360008301526151a981614c4c565b9050919050565b600060208201905081810360008301526151c981614c6f565b9050919050565b600060208201905081810360008301526151e981614c92565b9050919050565b6000602082019050818103600083015261520981614cb5565b9050919050565b6000602082019050818103600083015261522981614cd8565b9050919050565b6000602082019050818103600083015261524981614cfb565b9050919050565b60006020820190506152656000830184614d1e565b92915050565b60006020820190506152806000830184614d3c565b92915050565b60006152906152a1565b905061529c8282615600565b919050565b6000604051905090565b600067ffffffffffffffff8211156152c6576152c5615763565b5b6152cf82615792565b9050602081019050919050565b600067ffffffffffffffff8211156152f7576152f6615763565b5b61530082615792565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061539482615554565b915061539f83615554565b92508261ffff038211156153b6576153b56156d6565b5b828201905092915050565b60006153cc82615582565b91506153d783615582565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561540c5761540b6156d6565b5b828201905092915050565b600061542282615582565b915061542d83615582565b92508261543d5761543c615705565b5b828204905092915050565b600061545382615582565b915061545e83615582565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615497576154966156d6565b5b828202905092915050565b60006154ad82615554565b91506154b883615554565b9250828210156154cb576154ca6156d6565b5b828203905092915050565b60006154e182615582565b91506154ec83615582565b9250828210156154ff576154fe6156d6565b5b828203905092915050565b600061551582615562565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156155b957808201518184015260208101905061559e565b838111156155c8576000848401525b50505050565b600060028204905060018216806155e657607f821691505b602082108114156155fa576155f9615734565b5b50919050565b61560982615792565b810181811067ffffffffffffffff8211171561562857615627615763565b5b80604052505050565b600061563c82615554565b915061ffff821415615651576156506156d6565b5b600182019050919050565b600061566782615582565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561569a576156996156d6565b5b600182019050919050565b60006156b082615582565b91506156bb83615582565b9250826156cb576156ca615705565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f4530310000000000000000000000000000000000000000000000000000000000600082015250565b7f4530390000000000000000000000000000000000000000000000000000000000600082015250565b7f4530360000000000000000000000000000000000000000000000000000000000600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4530350000000000000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4530370000000000000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4531300000000000000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4530320000000000000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4530330000000000000000000000000000000000000000000000000000000000600082015250565b7f4531340000000000000000000000000000000000000000000000000000000000600082015250565b7f4530340000000000000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4531310000000000000000000000000000000000000000000000000000000000600082015250565b7f4531330000000000000000000000000000000000000000000000000000000000600082015250565b7f4530380000000000000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f4531320000000000000000000000000000000000000000000000000000000000600082015250565b615ee08161550a565b8114615eeb57600080fd5b50565b615ef78161551c565b8114615f0257600080fd5b50565b615f0e81615528565b8114615f1957600080fd5b50565b615f2581615554565b8114615f3057600080fd5b50565b615f3c81615582565b8114615f4757600080fd5b5056fea2646970667358221220f158461a3e259f20808c1e30da07dc56e95c59fe4d6b6398d7530078a623249464736f6c63430008010033

Deployed Bytecode

0x6080604052600436106102715760003560e01c80635c069a581161014f578063a22cb465116100c1578063dbd30ae01161007a578063dbd30ae01461099e578063e8a3d485146109b5578063e985e9c5146109e0578063f257cc6b14610a1d578063f2fde38b14610a5a578063f3169b8614610a8357610271565b8063a22cb46514610894578063a24b1f3e146108bd578063b88d4fde146108e6578063c87b56dd1461090f578063cd9d507c1461094c578063d0136b831461097557610271565b80637c02a1b3116101135780637c02a1b3146107915780638462151c146107ba578063853828b6146107f75780638da5cb5b1461080157806395d89b411461082c57806397c9eec91461085757610271565b80635c069a58146106a757806362f5a924146106e45780636352211e1461070057806370a082311461073d578063715018a61461077a57610271565b806325a0f0ab116101e857806335f3a06b116101ac57806335f3a06b1461058957806339c15342146105b257806342842e0e146105db5780634f6ccce7146106045780635102fe331461064157806355f804b31461067e57610271565b806325a0f0ab146104a157806328c2d99d146104de5780632c3fab8f146105075780632f745c591461052357806335e4295a1461056057610271565b8063095ea7b31161023a578063095ea7b3146103815780630fbcf93c146103aa578063150b7a02146103d3578063159655451461041057806318160ddd1461044d57806323b872dd1461047857610271565b806214995e1461027657806301ffc9a71461029f578063064ee27c146102dc57806306fdde0314610319578063081812fc14610344575b600080fd5b34801561028257600080fd5b5061029d60048036038101906102989190614611565b610a9a565b005b3480156102ab57600080fd5b506102c660048036038101906102c19190614555565b610b50565b6040516102d39190614df8565b60405180910390f35b3480156102e857600080fd5b5061030360048036038101906102fe91906145e8565b610b62565b6040516103109190615250565b60405180910390f35b34801561032557600080fd5b5061032e610b95565b60405161033b9190614e2e565b60405180910390f35b34801561035057600080fd5b5061036b600480360381019061036691906146d8565b610c27565b6040516103789190614d6f565b60405180910390f35b34801561038d57600080fd5b506103a860048036038101906103a39190614519565b610cac565b005b3480156103b657600080fd5b506103d160048036038101906103cc91906143ae565b610dc4565b005b3480156103df57600080fd5b506103fa60048036038101906103f59190614462565b610e84565b6040516104079190614e13565b60405180910390f35b34801561041c57600080fd5b50610437600480360381019061043291906145e8565b610e98565b6040516104449190615250565b60405180910390f35b34801561045957600080fd5b50610462610ecb565b60405161046f919061526b565b60405180910390f35b34801561048457600080fd5b5061049f600480360381019061049a9190614413565b610ed8565b005b3480156104ad57600080fd5b506104c860048036038101906104c39190614611565b610f38565b6040516104d5919061526b565b60405180910390f35b3480156104ea57600080fd5b5061050560048036038101906105009190614611565b611270565b005b610521600480360381019061051c9190614611565b61135d565b005b34801561052f57600080fd5b5061054a60048036038101906105459190614519565b6116e9565b604051610557919061526b565b60405180910390f35b34801561056c57600080fd5b5061058760048036038101906105829190614701565b61178e565b005b34801561059557600080fd5b506105b060048036038101906105ab919061464d565b611a74565b005b3480156105be57600080fd5b506105d960048036038101906105d49190614611565b611b14565b005b3480156105e757600080fd5b5061060260048036038101906105fd9190614413565b611bca565b005b34801561061057600080fd5b5061062b600480360381019061062691906146d8565b611bea565b604051610638919061526b565b60405180910390f35b34801561064d57600080fd5b50610668600480360381019061066391906146d8565b611c81565b604051610675919061526b565b60405180910390f35b34801561068a57600080fd5b506106a560048036038101906106a091906145a7565b611c9e565b005b3480156106b357600080fd5b506106ce60048036038101906106c991906146d8565b611d26565b6040516106db9190614df8565b60405180910390f35b6106fe60048036038101906106f99190614611565b611d50565b005b34801561070c57600080fd5b50610727600480360381019061072291906146d8565b6120ba565b6040516107349190614d6f565b60405180910390f35b34801561074957600080fd5b50610764600480360381019061075f91906143ae565b61216c565b604051610771919061526b565b60405180910390f35b34801561078657600080fd5b5061078f612224565b005b34801561079d57600080fd5b506107b860048036038101906107b39190614689565b612361565b005b3480156107c657600080fd5b506107e160048036038101906107dc91906143ae565b612422565b6040516107ee9190614dd6565b60405180910390f35b6107ff61259e565b005b34801561080d57600080fd5b5061081661265a565b6040516108239190614d6f565b60405180910390f35b34801561083857600080fd5b50610841612684565b60405161084e9190614e2e565b60405180910390f35b34801561086357600080fd5b5061087e600480360381019061087991906146d8565b612716565b60405161088b9190615250565b60405180910390f35b3480156108a057600080fd5b506108bb60048036038101906108b691906144dd565b612741565b005b3480156108c957600080fd5b506108e460048036038101906108df9190614611565b6128c2565b005b3480156108f257600080fd5b5061090d60048036038101906109089190614462565b612a53565b005b34801561091b57600080fd5b50610936600480360381019061093191906146d8565b612ab5565b6040516109439190614e2e565b60405180910390f35b34801561095857600080fd5b50610973600480360381019061096e919061464d565b612b5c565b005b34801561098157600080fd5b5061099c6004803603810190610997919061464d565b612bfc565b005b3480156109aa57600080fd5b506109b3612c9c565b005b3480156109c157600080fd5b506109ca612d44565b6040516109d79190614e2e565b60405180910390f35b3480156109ec57600080fd5b50610a076004803603810190610a0291906143d7565b612dd6565b604051610a149190614df8565b60405180910390f35b348015610a2957600080fd5b50610a446004803603810190610a3f91906146d8565b612e6a565b604051610a51919061526b565b60405180910390f35b348015610a6657600080fd5b50610a816004803603810190610a7c91906143ae565b612e87565b005b348015610a8f57600080fd5b50610a98613033565b005b610aa26130db565b73ffffffffffffffffffffffffffffffffffffffff16610ac061265a565b73ffffffffffffffffffffffffffffffffffffffff1614610b16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0d90615170565b60405180910390fd5b80601360008461ffff1661ffff16815260200190815260200160002060006101000a81548161ffff021916908361ffff1602179055505050565b6000610b5b826130e3565b9050919050565b6000601060008361ffff1661ffff16815260200190815260200160002060009054906101000a900461ffff169050919050565b606060008054610ba4906155ce565b80601f0160208091040260200160405190810160405280929190818152602001828054610bd0906155ce565b8015610c1d5780601f10610bf257610100808354040283529160200191610c1d565b820191906000526020600020905b815481529060010190602001808311610c0057829003601f168201915b5050505050905090565b6000610c328261315d565b610c71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6890615150565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610cb7826120ba565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610d28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1f906151d0565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610d476130db565b73ffffffffffffffffffffffffffffffffffffffff161480610d765750610d7581610d706130db565b612dd6565b5b610db5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dac90614ff0565b60405180910390fd5b610dbf83836131c9565b505050565b610dcc6130db565b73ffffffffffffffffffffffffffffffffffffffff16610dea61265a565b73ffffffffffffffffffffffffffffffffffffffff1614610e40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3790615170565b60405180910390fd5b80601960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600063150b7a0260e01b9050949350505050565b6000601160008361ffff1661ffff16815260200190815260200160002060009054906101000a900461ffff169050919050565b6000600980549050905090565b610ee9610ee36130db565b82613282565b610f28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1f906151f0565b60405180910390fd5b610f33838383613360565b505050565b6000601660008461ffff1661ffff168152602001908152602001600020544211610f97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8e90615030565b60405180910390fd5b601760008461ffff1661ffff168152602001908152602001600020544210610ff4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610feb90615070565b60405180910390fd5b601160008461ffff1661ffff16815260200190815260200160002060009054906101000a900461ffff1661ffff16601060008561ffff1661ffff16815260200190815260200160002060009054906101000a900461ffff1661ffff1610611090576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108790615110565b60405180910390fd5b60008060005b8561ffff168161ffff1611611137578561ffff168161ffff1610156110ed57601360008261ffff1661ffff16815260200190815260200160002060009054906101000a900461ffff16836110ea9190615389565b92505b601360008261ffff1661ffff16815260200190815260200160002060009054906101000a900461ffff16826111229190615389565b9150808061112f90615631565b915050611096565b6000808492505b8361ffff168361ffff1610156111e557601460008461ffff1661ffff16815260200190815260200160002060009054906101000a900461ffff1661ffff168161118791906153c1565b9050601060008961ffff1661ffff16815260200190815260200160002060009054906101000a900461ffff1661ffff168111156111d2576001836111cb9190615389565b91506111e5565b82806111dd90615631565b93505061113e565b60008261ffff161161122c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122390615090565b60405180910390fd5b8661ffff166015600060018561124291906154a2565b61ffff1661ffff168152602001908152602001600020546112639190615448565b9550505050505092915050565b6112786130db565b73ffffffffffffffffffffffffffffffffffffffff1661129661265a565b73ffffffffffffffffffffffffffffffffffffffff16146112ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e390615170565b60405180910390fd5b80601160008461ffff1661ffff16815260200190815260200160002060006101000a81548161ffff021916908361ffff1602179055506000601060008461ffff1661ffff16815260200190815260200160002060006101000a81548161ffff021916908361ffff1602179055505050565b601960159054906101000a900460ff166113ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a390614e50565b60405180910390fd5b601760008361ffff1661ffff168152602001908152602001600020544211611409576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140090615230565b60405180910390fd5b60008161ffff161180156114225750600a8161ffff1611155b611461576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611458906150b0565b60405180910390fd5b6000601860008461ffff1661ffff16815260200190815260200160002054116114bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b690614f90565b60405180910390fd5b601160008361ffff1661ffff16815260200190815260200160002060009054906101000a900461ffff1661ffff1681601060008561ffff1661ffff16815260200190815260200160002060009054906101000a900461ffff166115229190615389565b61ffff161115611567576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155e90614f30565b60405180910390fd5b8061ffff16601860008461ffff1661ffff168152602001908152602001600020546115929190615448565b3410156115d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115cb90614e90565b60405180910390fd5b60005b8161ffff1681101561169257600081601260008661ffff1661ffff16815260200190815260200160002054601060008761ffff1661ffff16815260200190815260200160002060009054906101000a900461ffff1661ffff1661163a91906153c1565b61164491906153c1565b905061165033826135bc565b83600f600083815260200190815260200160002060006101000a81548161ffff021916908361ffff16021790555050808061168a9061565c565b9150506115d7565b5080601060008461ffff1661ffff16815260200190815260200160002060008282829054906101000a900461ffff166116cb9190615389565b92506101000a81548161ffff021916908361ffff1602179055505050565b60006116f48361216c565b8210611735576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172c90614eb0565b60405180910390fd5b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b601960149054906101000a900460ff166117dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d490615130565b60405180910390fd5b601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461186d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186490614e70565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661188d866120ba565b73ffffffffffffffffffffffffffffffffffffffff161480156118e357508073ffffffffffffffffffffffffffffffffffffffff166118cb856120ba565b73ffffffffffffffffffffffffffffffffffffffff16145b611922576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191990614fd0565b60405180910390fd5b600e600086815260200190815260200160002060009054906101000a900460ff1615801561196e5750600e600085815260200190815260200160002060009054906101000a900460ff16155b6119ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a4906150f0565b60405180910390fd5b6119b781846135bc565b84600c60008581526020019081526020016000208190555083600d6000858152602001908152602001600020819055506001600e600087815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600e600086815260200190815260200160002060006101000a81548160ff02191690831515021790555081600f600085815260200190815260200160002060006101000a81548161ffff021916908361ffff1602179055505050505050565b611a7c6130db565b73ffffffffffffffffffffffffffffffffffffffff16611a9a61265a565b73ffffffffffffffffffffffffffffffffffffffff1614611af0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae790615170565b60405180910390fd5b80601560008461ffff1661ffff168152602001908152602001600020819055505050565b611b1c6130db565b73ffffffffffffffffffffffffffffffffffffffff16611b3a61265a565b73ffffffffffffffffffffffffffffffffffffffff1614611b90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8790615170565b60405180910390fd5b80601460008461ffff1661ffff16815260200190815260200160002060006101000a81548161ffff021916908361ffff1602179055505050565b611be583838360405180602001604052806000815250612a53565b505050565b6000611bf4610ecb565b8210611c35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2c90615210565b60405180910390fd5b60098281548110611c6f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b6000600c6000838152602001908152602001600020549050919050565b611ca66130db565b73ffffffffffffffffffffffffffffffffffffffff16611cc461265a565b73ffffffffffffffffffffffffffffffffffffffff1614611d1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1190615170565b60405180910390fd5b611d23816135da565b50565b6000600e600083815260200190815260200160002060009054906101000a900460ff169050919050565b601960159054906101000a900460ff16611d9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9690614e50565b60405180910390fd5b601660008361ffff1661ffff168152602001908152602001600020544211611dfc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df390615030565b60405180910390fd5b601760008361ffff1661ffff168152602001908152602001600020544210611e59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5090615070565b60405180910390fd5b60008161ffff16118015611e725750600a8161ffff1611155b611eb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea8906150b0565b60405180910390fd5b601160008361ffff1661ffff16815260200190815260200160002060009054906101000a900461ffff1661ffff1681601060008561ffff1661ffff16815260200190815260200160002060009054906101000a900461ffff16611f149190615389565b61ffff161115611f59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5090614f30565b60405180910390fd5b611f638282610f38565b341015611fa5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9c90614e90565b60405180910390fd5b60005b8161ffff1681101561206357600081601260008661ffff1661ffff16815260200190815260200160002054601060008761ffff1661ffff16815260200190815260200160002060009054906101000a900461ffff1661ffff1661200b91906153c1565b61201591906153c1565b905061202133826135bc565b83600f600083815260200190815260200160002060006101000a81548161ffff021916908361ffff16021790555050808061205b9061565c565b915050611fa8565b5080601060008461ffff1661ffff16815260200190815260200160002060008282829054906101000a900461ffff1661209c9190615389565b92506101000a81548161ffff021916908361ffff1602179055505050565b6000806003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612163576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215a90615050565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156121dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d490615010565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61222c6130db565b73ffffffffffffffffffffffffffffffffffffffff1661224a61265a565b73ffffffffffffffffffffffffffffffffffffffff16146122a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229790615170565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6123696130db565b73ffffffffffffffffffffffffffffffffffffffff1661238761265a565b73ffffffffffffffffffffffffffffffffffffffff16146123dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123d490615170565b60405180910390fd5b81601660008561ffff1661ffff1681526020019081526020016000208190555080601760008561ffff1661ffff16815260200190815260200160002081905550505050565b6060600061242f8361216c565b905060008114156124b257600067ffffffffffffffff81111561247b577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156124a95781602001602082028036833780820191505090505b50915050612599565b60008167ffffffffffffffff8111156124f4577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156125225781602001602082028036833780820191505090505b50905060005b828110156125925761253a85826116e9565b828281518110612573577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001018181525050808061258a9061565c565b915050612528565b8193505050505b919050565b6125a66130db565b73ffffffffffffffffffffffffffffffffffffffff166125c461265a565b73ffffffffffffffffffffffffffffffffffffffff161461261a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161261190615170565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f1935050505061265857600080fd5b565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054612693906155ce565b80601f01602080910402602001604051908101604052809291908181526020018280546126bf906155ce565b801561270c5780601f106126e15761010080835404028352916020019161270c565b820191906000526020600020905b8154815290600101906020018083116126ef57829003601f168201915b5050505050905090565b6000600f600083815260200190815260200160002060009054906101000a900461ffff169050919050565b6127496130db565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156127b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ae90614f70565b60405180910390fd5b80600660006127c46130db565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166128716130db565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516128b69190614df8565b60405180910390a35050565b6128ca6130db565b73ffffffffffffffffffffffffffffffffffffffff166128e861265a565b73ffffffffffffffffffffffffffffffffffffffff161461293e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161293590615170565b60405180910390fd5b60005b8161ffff168110156129fc57600081601260008661ffff1661ffff16815260200190815260200160002054601060008761ffff1661ffff16815260200190815260200160002060009054906101000a900461ffff1661ffff166129a491906153c1565b6129ae91906153c1565b90506129ba33826135bc565b83600f600083815260200190815260200160002060006101000a81548161ffff021916908361ffff1602179055505080806129f49061565c565b915050612941565b5080601060008461ffff1661ffff16815260200190815260200160002060008282829054906101000a900461ffff16612a359190615389565b92506101000a81548161ffff021916908361ffff1602179055505050565b612a64612a5e6130db565b83613282565b612aa3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a9a906151f0565b60405180910390fd5b612aaf848484846135f4565b50505050565b6060612ac08261315d565b612aff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612af6906151b0565b60405180910390fd5b6000612b09612d44565b90506000815111612b295760405180602001604052806000815250612b54565b80612b3384613650565b604051602001612b44929190614d4b565b6040516020818303038152906040525b915050919050565b612b646130db565b73ffffffffffffffffffffffffffffffffffffffff16612b8261265a565b73ffffffffffffffffffffffffffffffffffffffff1614612bd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bcf90615170565b60405180910390fd5b80601860008461ffff1661ffff168152602001908152602001600020819055505050565b612c046130db565b73ffffffffffffffffffffffffffffffffffffffff16612c2261265a565b73ffffffffffffffffffffffffffffffffffffffff1614612c78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c6f90615170565b60405180910390fd5b80601260008461ffff1661ffff168152602001908152602001600020819055505050565b612ca46130db565b73ffffffffffffffffffffffffffffffffffffffff16612cc261265a565b73ffffffffffffffffffffffffffffffffffffffff1614612d18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d0f90615170565b60405180910390fd5b601960159054906101000a900460ff1615601960156101000a81548160ff021916908315150217905550565b606060028054612d53906155ce565b80601f0160208091040260200160405190810160405280929190818152602001828054612d7f906155ce565b8015612dcc5780601f10612da157610100808354040283529160200191612dcc565b820191906000526020600020905b815481529060010190602001808311612daf57829003601f168201915b5050505050905090565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6000600d6000838152602001908152602001600020549050919050565b612e8f6130db565b73ffffffffffffffffffffffffffffffffffffffff16612ead61265a565b73ffffffffffffffffffffffffffffffffffffffff1614612f03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612efa90615170565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612f73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f6a90614ef0565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61303b6130db565b73ffffffffffffffffffffffffffffffffffffffff1661305961265a565b73ffffffffffffffffffffffffffffffffffffffff16146130af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130a690615170565b60405180910390fd5b601960149054906101000a900460ff1615601960146101000a81548160ff021916908315150217905550565b600033905090565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806131565750613155826137fd565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661323c836120ba565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061328d8261315d565b6132cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132c390614fb0565b60405180910390fd5b60006132d7836120ba565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061334657508373ffffffffffffffffffffffffffffffffffffffff1661332e84610c27565b73ffffffffffffffffffffffffffffffffffffffff16145b8061335757506133568185612dd6565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16613380826120ba565b73ffffffffffffffffffffffffffffffffffffffff16146133d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133cd90615190565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613446576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161343d90614f50565b60405180910390fd5b6134518383836138df565b61345c6000826131c9565b6001600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546134ac91906154d6565b925050819055506001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461350391906153c1565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6135d68282604051806020016040528060008152506138ef565b5050565b80600290805190602001906135f09291906141bd565b5050565b6135ff848484613360565b61360b8484848461394a565b61364a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161364190614ed0565b60405180910390fd5b50505050565b60606000821415613698576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506137f8565b600082905060005b600082146136ca5780806136b39061565c565b915050600a826136c39190615417565b91506136a0565b60008167ffffffffffffffff81111561370c577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f19166020018201604052801561373e5781602001600182028036833780820191505090505b5090505b600085146137f15760018261375791906154d6565b9150600a8561376691906156a5565b603061377291906153c1565b60f81b8183815181106137ae577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856137ea9190615417565b9450613742565b8093505050505b919050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806138c857507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806138d857506138d782613ae1565b5b9050919050565b6138ea838383613b4b565b505050565b6138f98383613c5f565b613906600084848461394a565b613945576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161393c90614ed0565b60405180910390fd5b505050565b600061396b8473ffffffffffffffffffffffffffffffffffffffff16613e2d565b15613ad4578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026139946130db565b8786866040518563ffffffff1660e01b81526004016139b69493929190614d8a565b602060405180830381600087803b1580156139d057600080fd5b505af1925050508015613a0157506040513d601f19601f820116820180604052508101906139fe919061457e565b60015b613a84573d8060008114613a31576040519150601f19603f3d011682016040523d82523d6000602084013e613a36565b606091505b50600081511415613a7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a7390614ed0565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613ad9565b600190505b949350505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b613b56838383613e40565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613b9957613b9481613e45565b613bd8565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614613bd757613bd68382613e8e565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613c1b57613c1681613ffb565b613c5a565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614613c5957613c58828261413e565b5b5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613ccf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613cc6906150d0565b60405180910390fd5b613cd88161315d565b15613d18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d0f90614f10565b60405180910390fd5b613d24600083836138df565b6001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613d7491906153c1565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b505050565b600980549050600a600083815260200190815260200160002081905550600981908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001613e9b8461216c565b613ea591906154d6565b9050600060086000848152602001908152602001600020549050818114613f8a576000600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816008600083815260200190815260200160002081905550505b6008600084815260200190815260200160002060009055600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160098054905061400f91906154d6565b90506000600a6000848152602001908152602001600020549050600060098381548110614065577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200154905080600983815481106140ad577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020018190555081600a600083815260200190815260200160002081905550600a6000858152602001908152602001600020600090556009805480614122577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b60006141498361216c565b905081600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806008600084815260200190815260200160002081905550505050565b8280546141c9906155ce565b90600052602060002090601f0160209004810192826141eb5760008555614232565b82601f1061420457805160ff1916838001178555614232565b82800160010185558215614232579182015b82811115614231578251825591602001919060010190614216565b5b50905061423f9190614243565b5090565b5b8082111561425c576000816000905550600101614244565b5090565b600061427361426e846152ab565b615286565b90508281526020810184848401111561428b57600080fd5b61429684828561558c565b509392505050565b60006142b16142ac846152dc565b615286565b9050828152602081018484840111156142c957600080fd5b6142d484828561558c565b509392505050565b6000813590506142eb81615ed7565b92915050565b60008135905061430081615eee565b92915050565b60008135905061431581615f05565b92915050565b60008151905061432a81615f05565b92915050565b600082601f83011261434157600080fd5b8135614351848260208601614260565b91505092915050565b600082601f83011261436b57600080fd5b813561437b84826020860161429e565b91505092915050565b60008135905061439381615f1c565b92915050565b6000813590506143a881615f33565b92915050565b6000602082840312156143c057600080fd5b60006143ce848285016142dc565b91505092915050565b600080604083850312156143ea57600080fd5b60006143f8858286016142dc565b9250506020614409858286016142dc565b9150509250929050565b60008060006060848603121561442857600080fd5b6000614436868287016142dc565b9350506020614447868287016142dc565b925050604061445886828701614399565b9150509250925092565b6000806000806080858703121561447857600080fd5b6000614486878288016142dc565b9450506020614497878288016142dc565b93505060406144a887828801614399565b925050606085013567ffffffffffffffff8111156144c557600080fd5b6144d187828801614330565b91505092959194509250565b600080604083850312156144f057600080fd5b60006144fe858286016142dc565b925050602061450f858286016142f1565b9150509250929050565b6000806040838503121561452c57600080fd5b600061453a858286016142dc565b925050602061454b85828601614399565b9150509250929050565b60006020828403121561456757600080fd5b600061457584828501614306565b91505092915050565b60006020828403121561459057600080fd5b600061459e8482850161431b565b91505092915050565b6000602082840312156145b957600080fd5b600082013567ffffffffffffffff8111156145d357600080fd5b6145df8482850161435a565b91505092915050565b6000602082840312156145fa57600080fd5b600061460884828501614384565b91505092915050565b6000806040838503121561462457600080fd5b600061463285828601614384565b925050602061464385828601614384565b9150509250929050565b6000806040838503121561466057600080fd5b600061466e85828601614384565b925050602061467f85828601614399565b9150509250929050565b60008060006060848603121561469e57600080fd5b60006146ac86828701614384565b93505060206146bd86828701614399565b92505060406146ce86828701614399565b9150509250925092565b6000602082840312156146ea57600080fd5b60006146f884828501614399565b91505092915050565b600080600080600060a0868803121561471957600080fd5b600061472788828901614399565b955050602061473888828901614399565b945050604061474988828901614399565b935050606061475a88828901614384565b925050608061476b888289016142dc565b9150509295509295909350565b60006147848383614d2d565b60208301905092915050565b6147998161550a565b82525050565b60006147aa8261531d565b6147b4818561534b565b93506147bf8361530d565b8060005b838110156147f05781516147d78882614778565b97506147e28361533e565b9250506001810190506147c3565b5085935050505092915050565b6148068161551c565b82525050565b61481581615528565b82525050565b600061482682615328565b614830818561535c565b935061484081856020860161559b565b61484981615792565b840191505092915050565b600061485f82615333565b614869818561536d565b935061487981856020860161559b565b61488281615792565b840191505092915050565b600061489882615333565b6148a2818561537e565b93506148b281856020860161559b565b80840191505092915050565b60006148cb60038361536d565b91506148d6826157a3565b602082019050919050565b60006148ee60038361536d565b91506148f9826157cc565b602082019050919050565b600061491160038361536d565b915061491c826157f5565b602082019050919050565b6000614934602b8361536d565b915061493f8261581e565b604082019050919050565b600061495760328361536d565b91506149628261586d565b604082019050919050565b600061497a60268361536d565b9150614985826158bc565b604082019050919050565b600061499d601c8361536d565b91506149a88261590b565b602082019050919050565b60006149c060038361536d565b91506149cb82615934565b602082019050919050565b60006149e360248361536d565b91506149ee8261595d565b604082019050919050565b6000614a0660198361536d565b9150614a11826159ac565b602082019050919050565b6000614a2960038361536d565b9150614a34826159d5565b602082019050919050565b6000614a4c602c8361536d565b9150614a57826159fe565b604082019050919050565b6000614a6f60038361536d565b9150614a7a82615a4d565b602082019050919050565b6000614a9260388361536d565b9150614a9d82615a76565b604082019050919050565b6000614ab5602a8361536d565b9150614ac082615ac5565b604082019050919050565b6000614ad860038361536d565b9150614ae382615b14565b602082019050919050565b6000614afb60298361536d565b9150614b0682615b3d565b604082019050919050565b6000614b1e60038361536d565b9150614b2982615b8c565b602082019050919050565b6000614b4160038361536d565b9150614b4c82615bb5565b602082019050919050565b6000614b6460038361536d565b9150614b6f82615bde565b602082019050919050565b6000614b8760208361536d565b9150614b9282615c07565b602082019050919050565b6000614baa60038361536d565b9150614bb582615c30565b602082019050919050565b6000614bcd60038361536d565b9150614bd882615c59565b602082019050919050565b6000614bf060038361536d565b9150614bfb82615c82565b602082019050919050565b6000614c13602c8361536d565b9150614c1e82615cab565b604082019050919050565b6000614c3660208361536d565b9150614c4182615cfa565b602082019050919050565b6000614c5960298361536d565b9150614c6482615d23565b604082019050919050565b6000614c7c602f8361536d565b9150614c8782615d72565b604082019050919050565b6000614c9f60218361536d565b9150614caa82615dc1565b604082019050919050565b6000614cc260318361536d565b9150614ccd82615e10565b604082019050919050565b6000614ce5602c8361536d565b9150614cf082615e5f565b604082019050919050565b6000614d0860038361536d565b9150614d1382615eae565b602082019050919050565b614d2781615554565b82525050565b614d3681615582565b82525050565b614d4581615582565b82525050565b6000614d57828561488d565b9150614d63828461488d565b91508190509392505050565b6000602082019050614d846000830184614790565b92915050565b6000608082019050614d9f6000830187614790565b614dac6020830186614790565b614db96040830185614d3c565b8181036060830152614dcb818461481b565b905095945050505050565b60006020820190508181036000830152614df0818461479f565b905092915050565b6000602082019050614e0d60008301846147fd565b92915050565b6000602082019050614e28600083018461480c565b92915050565b60006020820190508181036000830152614e488184614854565b905092915050565b60006020820190508181036000830152614e69816148be565b9050919050565b60006020820190508181036000830152614e89816148e1565b9050919050565b60006020820190508181036000830152614ea981614904565b9050919050565b60006020820190508181036000830152614ec981614927565b9050919050565b60006020820190508181036000830152614ee98161494a565b9050919050565b60006020820190508181036000830152614f098161496d565b9050919050565b60006020820190508181036000830152614f2981614990565b9050919050565b60006020820190508181036000830152614f49816149b3565b9050919050565b60006020820190508181036000830152614f69816149d6565b9050919050565b60006020820190508181036000830152614f89816149f9565b9050919050565b60006020820190508181036000830152614fa981614a1c565b9050919050565b60006020820190508181036000830152614fc981614a3f565b9050919050565b60006020820190508181036000830152614fe981614a62565b9050919050565b6000602082019050818103600083015261500981614a85565b9050919050565b6000602082019050818103600083015261502981614aa8565b9050919050565b6000602082019050818103600083015261504981614acb565b9050919050565b6000602082019050818103600083015261506981614aee565b9050919050565b6000602082019050818103600083015261508981614b11565b9050919050565b600060208201905081810360008301526150a981614b34565b9050919050565b600060208201905081810360008301526150c981614b57565b9050919050565b600060208201905081810360008301526150e981614b7a565b9050919050565b6000602082019050818103600083015261510981614b9d565b9050919050565b6000602082019050818103600083015261512981614bc0565b9050919050565b6000602082019050818103600083015261514981614be3565b9050919050565b6000602082019050818103600083015261516981614c06565b9050919050565b6000602082019050818103600083015261518981614c29565b9050919050565b600060208201905081810360008301526151a981614c4c565b9050919050565b600060208201905081810360008301526151c981614c6f565b9050919050565b600060208201905081810360008301526151e981614c92565b9050919050565b6000602082019050818103600083015261520981614cb5565b9050919050565b6000602082019050818103600083015261522981614cd8565b9050919050565b6000602082019050818103600083015261524981614cfb565b9050919050565b60006020820190506152656000830184614d1e565b92915050565b60006020820190506152806000830184614d3c565b92915050565b60006152906152a1565b905061529c8282615600565b919050565b6000604051905090565b600067ffffffffffffffff8211156152c6576152c5615763565b5b6152cf82615792565b9050602081019050919050565b600067ffffffffffffffff8211156152f7576152f6615763565b5b61530082615792565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061539482615554565b915061539f83615554565b92508261ffff038211156153b6576153b56156d6565b5b828201905092915050565b60006153cc82615582565b91506153d783615582565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561540c5761540b6156d6565b5b828201905092915050565b600061542282615582565b915061542d83615582565b92508261543d5761543c615705565b5b828204905092915050565b600061545382615582565b915061545e83615582565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615497576154966156d6565b5b828202905092915050565b60006154ad82615554565b91506154b883615554565b9250828210156154cb576154ca6156d6565b5b828203905092915050565b60006154e182615582565b91506154ec83615582565b9250828210156154ff576154fe6156d6565b5b828203905092915050565b600061551582615562565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156155b957808201518184015260208101905061559e565b838111156155c8576000848401525b50505050565b600060028204905060018216806155e657607f821691505b602082108114156155fa576155f9615734565b5b50919050565b61560982615792565b810181811067ffffffffffffffff8211171561562857615627615763565b5b80604052505050565b600061563c82615554565b915061ffff821415615651576156506156d6565b5b600182019050919050565b600061566782615582565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561569a576156996156d6565b5b600182019050919050565b60006156b082615582565b91506156bb83615582565b9250826156cb576156ca615705565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f4530310000000000000000000000000000000000000000000000000000000000600082015250565b7f4530390000000000000000000000000000000000000000000000000000000000600082015250565b7f4530360000000000000000000000000000000000000000000000000000000000600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4530350000000000000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4530370000000000000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4531300000000000000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4530320000000000000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4530330000000000000000000000000000000000000000000000000000000000600082015250565b7f4531340000000000000000000000000000000000000000000000000000000000600082015250565b7f4530340000000000000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4531310000000000000000000000000000000000000000000000000000000000600082015250565b7f4531330000000000000000000000000000000000000000000000000000000000600082015250565b7f4530380000000000000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f4531320000000000000000000000000000000000000000000000000000000000600082015250565b615ee08161550a565b8114615eeb57600080fd5b50565b615ef78161551c565b8114615f0257600080fd5b50565b615f0e81615528565b8114615f1957600080fd5b50565b615f2581615554565b8114615f3057600080fd5b50565b615f3c81615582565b8114615f4757600080fd5b5056fea2646970667358221220f158461a3e259f20808c1e30da07dc56e95c59fe4d6b6398d7530078a623249464736f6c63430008010033

Deployed Bytecode Sourcemap

42950:7380:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47270:132;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49939:212;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48639:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24553:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26465:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25995:404;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48861:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50163:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48753:96;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37436:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27355:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45795:848;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46990:133;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44550:641;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37104:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45203:580;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47574:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47414:148;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27731:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37626:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48176:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48971:99;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48412:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43885:653;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24247:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23977:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20803:148;;;;;;;;;;;;;:::i;:::-;;47812:141;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49213:502;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49082:123;;;:::i;:::-;;20152:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24722:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48528:99;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26758:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46655:323;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27953:285;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24897:354;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47693:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47135:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47965:89;;;;;;;;;;;;;:::i;:::-;;25492:101;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27124:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48294:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21106:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48066:98;;;;;;;;;;;;;:::i;:::-;;47270:132;20383:12;:10;:12::i;:::-;20372:23;;:7;:5;:7::i;:::-;:23;;;20364:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47383:11:::1;47360:15;:20;47376:3;47360:20;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;47270:132:::0;;:::o;49939:212::-;50078:4;50107:36;50131:11;50107:23;:36::i;:::-;50100:43;;49939:212;;;:::o;48639:102::-;48693:6;48719:9;:14;48729:3;48719:14;;;;;;;;;;;;;;;;;;;;;;;;;48712:21;;48639:102;;;:::o;24553:100::-;24607:13;24640:5;24633:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24553:100;:::o;26465:221::-;26541:7;26569:16;26577:7;26569;:16::i;:::-;26561:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26654:15;:24;26670:7;26654:24;;;;;;;;;;;;;;;;;;;;;26647:31;;26465:221;;;:::o;25995:404::-;26076:13;26092:23;26107:7;26092:14;:23::i;:::-;26076:39;;26140:5;26134:11;;:2;:11;;;;26126:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;26220:5;26204:21;;:12;:10;:12::i;:::-;:21;;;:69;;;;26229:44;26253:5;26260:12;:10;:12::i;:::-;26229:23;:44::i;:::-;26204:69;26196:161;;;;;;;;;;;;:::i;:::-;;;;;;;;;26370:21;26379:2;26383:7;26370:8;:21::i;:::-;25995:404;;;:::o;48861:98::-;20383:12;:10;:12::i;:::-;20372:23;;:7;:5;:7::i;:::-;:23;;;20364:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48944:7:::1;48933:8;;:18;;;;;;;;;;;;;;;;;;48861:98:::0;:::o;50163:164::-;50263:6;50289:30;;;50282:37;;50163:164;;;;;;:::o;48753:96::-;48804:6;48830;:11;48837:3;48830:11;;;;;;;;;;;;;;;;;;;;;;;;;48823:18;;48753:96;;;:::o;37436:113::-;37497:7;37524:10;:17;;;;37517:24;;37436:113;:::o;27355:305::-;27516:41;27535:12;:10;:12::i;:::-;27549:7;27516:18;:41::i;:::-;27508:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;27624:28;27634:4;27640:2;27644:7;27624:9;:28::i;:::-;27355:305;;;:::o;45795:848::-;45866:7;45912:12;:17;45925:3;45912:17;;;;;;;;;;;;;;;;45894:15;:35;45886:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;45974:10;:15;45985:3;45974:15;;;;;;;;;;;;;;;;45956;:33;45948:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;46033:6;:11;46040:3;46033:11;;;;;;;;;;;;;;;;;;;;;;;;;46016:28;;:9;:14;46026:3;46016:14;;;;;;;;;;;;;;;;;;;;;;;;;:28;;;46008:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;46065:9;46089;46113:8;46132:164;46149:3;46144:8;;:1;:8;;;46132:164;;46182:3;46178:7;;:1;:7;;;46174:72;;;46212:15;:18;46228:1;46212:18;;;;;;;;;;;;;;;;;;;;;;;;;46206:24;;;;;:::i;:::-;;;46174:72;46266:15;:18;46282:1;46266:18;;;;;;;;;;;;;;;;;;;;;;;;;46260:24;;;;;:::i;:::-;;;46154:3;;;;;:::i;:::-;;;;46132:164;;;46316:9;46340:10;46374:2;46370:6;;46365:179;46382:2;46378:6;;:1;:6;;;46365:179;;;46412:11;:14;46424:1;46412:14;;;;;;;;;;;;;;;;;;;;;;;;;46406:20;;;;;;;:::i;:::-;;;46450:9;:14;46460:3;46450:14;;;;;;;;;;;;;;;;;;;;;;;;;46445:19;;:2;:19;46441:92;;;46492:1;46490;:3;;;;:::i;:::-;46485:8;;46512:5;;46441:92;46386:3;;;;;:::i;:::-;;;;46365:179;;;46577:1;46572:2;:6;;;46564:22;;;;;;;;;;;;:::i;:::-;;;;;;;;;46630:5;46614:21;;:9;:15;46627:1;46624:2;:4;;;;:::i;:::-;46614:15;;;;;;;;;;;;;;;;:21;;;;:::i;:::-;46607:28;;;;;;;45795:848;;;;:::o;46990:133::-;20383:12;:10;:12::i;:::-;20372:23;;:7;:5;:7::i;:::-;:23;;;20364:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47080:6:::1;47066;:11;47073:3;47066:11;;;;;;;;;;;;;;;;:20;;;;;;;;;;;;;;;;;;47114:1;47097:9;:14;47107:3;47097:14;;;;;;;;;;;;;;;;:18;;;;;;;;;;;;;;;;;;46990:133:::0;;:::o;44550:641::-;44630:13;;;;;;;;;;;44622:29;;;;;;;;;;;;:::i;:::-;;;;;;;;;44688:10;:15;44699:3;44688:15;;;;;;;;;;;;;;;;44670;:33;44662:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;44738:1;44730:5;:9;;;:24;;;;;44752:2;44743:5;:11;;;;44730:24;44722:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;44801:1;44781:12;:17;44794:3;44781:17;;;;;;;;;;;;;;;;:21;44773:37;;;;;;;;;;;;:::i;:::-;;;;;;;;;44855:6;:11;44862:3;44855:11;;;;;;;;;;;;;;;;;;;;;;;;;44829:37;;44846:5;44829:9;:14;44839:3;44829:14;;;;;;;;;;;;;;;;;;;;;;;;;:22;;;;:::i;:::-;:37;;;;44821:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;44924:5;44906:23;;:12;:17;44919:3;44906:17;;;;;;;;;;;;;;;;:23;;;;:::i;:::-;44893:9;:36;;44885:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;44955:6;44950:200;44971:5;44967:9;;:1;:9;44950:200;;;44998:14;45055:1;45032:15;:20;45048:3;45032:20;;;;;;;;;;;;;;;;45015:9;:14;45025:3;45015:14;;;;;;;;;;;;;;;;;;;;;;;;;:37;;;;;;:::i;:::-;:41;;;;:::i;:::-;44998:58;;45071:32;45081:10;45093:9;45071;:32::i;:::-;45135:3;45118;:14;45122:9;45118:14;;;;;;;;;;;;:20;;;;;;;;;;;;;;;;;;44950:200;44978:3;;;;;:::i;:::-;;;;44950:200;;;;45178:5;45160:9;:14;45170:3;45160:14;;;;;;;;;;;;;;;;:23;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;44550:641;;:::o;37104:256::-;37201:7;37237:23;37254:5;37237:16;:23::i;:::-;37229:5;:31;37221:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;37326:12;:19;37339:5;37326:19;;;;;;;;;;;;;;;:26;37346:5;37326:26;;;;;;;;;;;;37319:33;;37104:256;;;;:::o;45203:580::-;45330:16;;;;;;;;;;;45322:32;;;;;;;;;;;;:::i;:::-;;;;;;;;;45387:8;;;;;;;;;;;45373:22;;:10;:22;;;45365:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;45442:2;45422:22;;:16;45430:7;45422;:16::i;:::-;:22;;;:48;;;;;45468:2;45448:22;;:16;45456:7;45448;:16::i;:::-;:22;;;45422:48;45414:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;45498:9;:18;45508:7;45498:18;;;;;;;;;;;;;;;;;;;;;45497:19;:42;;;;;45521:9;:18;45531:7;45521:18;;;;;;;;;;;;;;;;;;;;;45520:19;45497:42;45489:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;45558:22;45568:2;45572:7;45558:9;:22::i;:::-;45612:7;45591:9;:18;45601:7;45591:18;;;;;;;;;;;:28;;;;45651:7;45630:9;:18;45640:7;45630:18;;;;;;;;;;;:28;;;;45690:4;45669:9;:18;45679:7;45669:18;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;45734:4;45713:9;:18;45723:7;45713:18;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;45764:11;45749:3;:12;45753:7;45749:12;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;45203:580;;;;;:::o;47574:107::-;20383:12;:10;:12::i;:::-;20372:23;;:7;:5;:7::i;:::-;:23;;;20364:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47672:1:::1;47655:9;:14;47665:3;47655:14;;;;;;;;;;;;;;;:18;;;;47574:107:::0;;:::o;47414:148::-;20383:12;:10;:12::i;:::-;20372:23;;:7;:5;:7::i;:::-;:23;;;20364:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47537:17:::1;47512:11;:22;47524:9;47512:22;;;;;;;;;;;;;;;;:42;;;;;;;;;;;;;;;;;;47414:148:::0;;:::o;27731:151::-;27835:39;27852:4;27858:2;27862:7;27835:39;;;;;;;;;;;;:16;:39::i;:::-;27731:151;;;:::o;37626:233::-;37701:7;37737:30;:28;:30::i;:::-;37729:5;:38;37721:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;37834:10;37845:5;37834:17;;;;;;;;;;;;;;;;;;;;;;;;37827:24;;37626:233;;;:::o;48176:106::-;48229:7;48256:9;:18;48266:7;48256:18;;;;;;;;;;;;48249:25;;48176:106;;;:::o;48971:99::-;20383:12;:10;:12::i;:::-;20372:23;;:7;:5;:7::i;:::-;:23;;;20364:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49042:20:::1;49054:7;49042:11;:20::i;:::-;48971:99:::0;:::o;48412:104::-;48466:4;48490:9;:18;48500:7;48490:18;;;;;;;;;;;;;;;;;;;;;48483:25;;48412:104;;;:::o;43885:653::-;43961:13;;;;;;;;;;;43953:29;;;;;;;;;;;;:::i;:::-;;;;;;;;;44019:12;:17;44032:3;44019:17;;;;;;;;;;;;;;;;44001:15;:35;43993:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;44081:10;:15;44092:3;44081:15;;;;;;;;;;;;;;;;44063;:33;44055:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;44131:1;44123:5;:9;;;:24;;;;;44145:2;44136:5;:11;;;;44123:24;44115:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;44200:6;:11;44207:3;44200:11;;;;;;;;;;;;;;;;;;;;;;;;;44174:37;;44191:5;44174:9;:14;44184:3;44174:14;;;;;;;;;;;;;;;;;;;;;;;;;:22;;;;:::i;:::-;:37;;;;44166:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;44251:25;44266:3;44270:5;44251:14;:25::i;:::-;44238:9;:38;;44230:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;44302:6;44297:200;44318:5;44314:9;;:1;:9;44297:200;;;44345:14;44402:1;44379:15;:20;44395:3;44379:20;;;;;;;;;;;;;;;;44362:9;:14;44372:3;44362:14;;;;;;;;;;;;;;;;;;;;;;;;;:37;;;;;;:::i;:::-;:41;;;;:::i;:::-;44345:58;;44418:32;44428:10;44440:9;44418;:32::i;:::-;44482:3;44465;:14;44469:9;44465:14;;;;;;;;;;;;:20;;;;;;;;;;;;;;;;;;44297:200;44325:3;;;;;:::i;:::-;;;;44297:200;;;;44525:5;44507:9;:14;44517:3;44507:14;;;;;;;;;;;;;;;;:23;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;43885:653;;:::o;24247:239::-;24319:7;24339:13;24355:7;:16;24363:7;24355:16;;;;;;;;;;;;;;;;;;;;;24339:32;;24407:1;24390:19;;:5;:19;;;;24382:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;24473:5;24466:12;;;24247:239;;;:::o;23977:208::-;24049:7;24094:1;24077:19;;:5;:19;;;;24069:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;24161:9;:16;24171:5;24161:16;;;;;;;;;;;;;;;;24154:23;;23977:208;;;:::o;20803:148::-;20383:12;:10;:12::i;:::-;20372:23;;:7;:5;:7::i;:::-;:23;;;20364:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20910:1:::1;20873:40;;20894:6;;;;;;;;;;;20873:40;;;;;;;;;;;;20941:1;20924:6;;:19;;;;;;;;;;;;;;;;;;20803:148::o:0;47812:141::-;20383:12;:10;:12::i;:::-;20372:23;;:7;:5;:7::i;:::-;:23;;;20364:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47912:2:::1;47892:12;:17;47905:3;47892:17;;;;;;;;;;;;;;;:22;;;;47943:2;47925:10;:15;47936:3;47925:15;;;;;;;;;;;;;;;:20;;;;47812:141:::0;;;:::o;49213:502::-;49274:16;49304:18;49325:17;49335:6;49325:9;:17::i;:::-;49304:38;;49371:1;49357:10;:15;49353:355;;;49410:1;49396:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49389:23;;;;;49353:355;49445:23;49485:10;49471:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49445:51;;49511:13;49539:130;49563:10;49555:5;:18;49539:130;;;49619:34;49639:6;49647:5;49619:19;:34::i;:::-;49603:6;49610:5;49603:13;;;;;;;;;;;;;;;;;;;;;:50;;;;;49575:7;;;;;:::i;:::-;;;;49539:130;;;49690:6;49683:13;;;;;49213:502;;;;:::o;49082:123::-;20383:12;:10;:12::i;:::-;20372:23;;:7;:5;:7::i;:::-;:23;;;20364:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49157:10:::1;49149:24;;:47;49174:21;49149:47;;;;;;;;;;;;;;;;;;;;;;;49141:56;;;::::0;::::1;;49082:123::o:0;20152:87::-;20198:7;20225:6;;;;;;;;;;;20218:13;;20152:87;:::o;24722:104::-;24778:13;24811:7;24804:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24722:104;:::o;48528:99::-;48581:6;48607:3;:12;48611:7;48607:12;;;;;;;;;;;;;;;;;;;;;48600:19;;48528:99;;;:::o;26758:295::-;26873:12;:10;:12::i;:::-;26861:24;;:8;:24;;;;26853:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;26973:8;26928:18;:32;26947:12;:10;:12::i;:::-;26928:32;;;;;;;;;;;;;;;:42;26961:8;26928:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;27026:8;26997:48;;27012:12;:10;:12::i;:::-;26997:48;;;27036:8;26997:48;;;;;;:::i;:::-;;;;;;;;26758:295;;:::o;46655:323::-;20383:12;:10;:12::i;:::-;20372:23;;:7;:5;:7::i;:::-;:23;;;20364:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46742:6:::1;46737:200;46758:5;46754:9;;:1;:9;46737:200;;;46785:14;46842:1;46819:15;:20;46835:3;46819:20;;;;;;;;;;;;;;;;46802:9;:14;46812:3;46802:14;;;;;;;;;;;;;;;;;;;;;;;;;:37;;;;;;:::i;:::-;:41;;;;:::i;:::-;46785:58;;46858:32;46868:10;46880:9;46858;:32::i;:::-;46922:3;46905;:14;46909:9;46905:14;;;;;;;;;;;;:20;;;;;;;;;;;;;;;;;;46737:200;46765:3;;;;;:::i;:::-;;;;46737:200;;;;46965:5;46947:9;:14;46957:3;46947:14;;;;;;;;;;;;;;;;:23;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;46655:323:::0;;:::o;27953:285::-;28085:41;28104:12;:10;:12::i;:::-;28118:7;28085:18;:41::i;:::-;28077:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;28191:39;28205:4;28211:2;28215:7;28224:5;28191:13;:39::i;:::-;27953:285;;;;:::o;24897:354::-;24970:13;25004:16;25012:7;25004;:16::i;:::-;24996:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;25085:18;25106:13;:11;:13::i;:::-;25085:34;;25158:1;25143:4;25137:18;:22;:106;;;;;;;;;;;;;;;;;25199:4;25205:18;:7;:16;:18::i;:::-;25182:42;;;;;;;;;:::i;:::-;;;;;;;;;;;;;25137:106;25130:113;;;24897:354;;;:::o;47693:107::-;20383:12;:10;:12::i;:::-;20372:23;;:7;:5;:7::i;:::-;:23;;;20364:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47791:1:::1;47771:12;:17;47784:3;47771:17;;;;;;;;;;;;;;;:21;;;;47693:107:::0;;:::o;47135:123::-;20383:12;:10;:12::i;:::-;20372:23;;:7;:5;:7::i;:::-;:23;;;20364:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47243:7:::1;47220:15;:20;47236:3;47220:20;;;;;;;;;;;;;;;:30;;;;47135:123:::0;;:::o;47965:89::-;20383:12;:10;:12::i;:::-;20372:23;;:7;:5;:7::i;:::-;:23;;;20364:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48033:13:::1;;;;;;;;;;;48032:14;48016:13;;:30;;;;;;;;;;;;;;;;;;47965:89::o:0;25492:101::-;25544:13;25577:8;25570:15;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25492:101;:::o;27124:164::-;27221:4;27245:18;:25;27264:5;27245:25;;;;;;;;;;;;;;;:35;27271:8;27245:35;;;;;;;;;;;;;;;;;;;;;;;;;27238:42;;27124:164;;;;:::o;48294:106::-;48347:7;48374:9;:18;48384:7;48374:18;;;;;;;;;;;;48367:25;;48294:106;;;:::o;21106:244::-;20383:12;:10;:12::i;:::-;20372:23;;:7;:5;:7::i;:::-;:23;;;20364:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21215:1:::1;21195:22;;:8;:22;;;;21187:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;21305:8;21276:38;;21297:6;;;;;;;;;;;21276:38;;;;;;;;;;;;21334:8;21325:6;;:17;;;;;;;;;;;;;;;;;;21106:244:::0;:::o;48066:98::-;20383:12;:10;:12::i;:::-;20372:23;;:7;:5;:7::i;:::-;:23;;;20364:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48140:16:::1;;;;;;;;;;;48139:17;48120:16;;:36;;;;;;;;;;;;;;;;;;48066:98::o:0;18743:::-;18796:7;18823:10;18816:17;;18743:98;:::o;36783:237::-;36885:4;36924:35;36909:50;;;:11;:50;;;;:103;;;;36976:36;37000:11;36976:23;:36::i;:::-;36909:103;36902:110;;36783:237;;;:::o;29705:127::-;29770:4;29822:1;29794:30;;:7;:16;29802:7;29794:16;;;;;;;;;;;;;;;;;;;;;:30;;;;29787:37;;29705:127;;;:::o;33589:174::-;33691:2;33664:15;:24;33680:7;33664:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;33747:7;33743:2;33709:46;;33718:23;33733:7;33718:14;:23::i;:::-;33709:46;;;;;;;;;;;;33589:174;;:::o;29999:355::-;30092:4;30117:16;30125:7;30117;:16::i;:::-;30109:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;30193:13;30209:23;30224:7;30209:14;:23::i;:::-;30193:39;;30262:5;30251:16;;:7;:16;;;:51;;;;30295:7;30271:31;;:20;30283:7;30271:11;:20::i;:::-;:31;;;30251:51;:94;;;;30306:39;30330:5;30337:7;30306:23;:39::i;:::-;30251:94;30243:103;;;29999:355;;;;:::o;32927:544::-;33052:4;33025:31;;:23;33040:7;33025:14;:23::i;:::-;:31;;;33017:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;33135:1;33121:16;;:2;:16;;;;33113:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;33191:39;33212:4;33218:2;33222:7;33191:20;:39::i;:::-;33295:29;33312:1;33316:7;33295:8;:29::i;:::-;33356:1;33337:9;:15;33347:4;33337:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;33385:1;33368:9;:13;33378:2;33368:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;33416:2;33397:7;:16;33405:7;33397:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;33455:7;33451:2;33436:27;;33445:4;33436:27;;;;;;;;;;;;32927:544;;;:::o;30696:110::-;30772:26;30782:2;30786:7;30772:26;;;;;;;;;;;;:9;:26::i;:::-;30696:110;;:::o;25833:100::-;25917:8;25906;:19;;;;;;;;;;;;:::i;:::-;;25833:100;:::o;29120:272::-;29234:28;29244:4;29250:2;29254:7;29234:9;:28::i;:::-;29281:48;29304:4;29310:2;29314:7;29323:5;29281:22;:48::i;:::-;29273:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;29120:272;;;;:::o;338:723::-;394:13;624:1;615:5;:10;611:53;;;642:10;;;;;;;;;;;;;;;;;;;;;611:53;674:12;689:5;674:20;;705:14;730:78;745:1;737:4;:9;730:78;;763:8;;;;;:::i;:::-;;;;794:2;786:10;;;;;:::i;:::-;;;730:78;;;818:19;850:6;840:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;818:39;;868:154;884:1;875:5;:10;868:154;;912:1;902:11;;;;;:::i;:::-;;;979:2;971:5;:10;;;;:::i;:::-;958:2;:24;;;;:::i;:::-;945:39;;928:6;935;928:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;1008:2;999:11;;;;;:::i;:::-;;;868:154;;;1046:6;1032:21;;;;;338:723;;;;:::o;23621:292::-;23723:4;23762:25;23747:40;;;:11;:40;;;;:105;;;;23819:33;23804:48;;;:11;:48;;;;23747:105;:158;;;;23869:36;23893:11;23869:23;:36::i;:::-;23747:158;23740:165;;23621:292;;;:::o;49727:204::-;49878:45;49905:4;49911:2;49915:7;49878:26;:45::i;:::-;49727:204;;;:::o;31033:250::-;31129:18;31135:2;31139:7;31129:5;:18::i;:::-;31166:54;31197:1;31201:2;31205:7;31214:5;31166:22;:54::i;:::-;31158:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;31033:250;;;:::o;34328:843::-;34449:4;34475:15;:2;:13;;;:15::i;:::-;34471:693;;;34527:2;34511:36;;;34548:12;:10;:12::i;:::-;34562:4;34568:7;34577:5;34511:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;34507:602;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34774:1;34757:6;:13;:18;34753:341;;;34800:60;;;;;;;;;;:::i;:::-;;;;;;;;34753:341;35044:6;35038:13;35029:6;35025:2;35021:15;35014:38;34507:602;34644:45;;;34634:55;;;:6;:55;;;;34627:62;;;;;34471:693;35148:4;35141:11;;34328:843;;;;;;;:::o;22124:157::-;22209:4;22248:25;22233:40;;;:11;:40;;;;22226:47;;22124:157;;;:::o;38472:555::-;38582:45;38609:4;38615:2;38619:7;38582:26;:45::i;:::-;38660:1;38644:18;;:4;:18;;;38640:187;;;38679:40;38711:7;38679:31;:40::i;:::-;38640:187;;;38749:2;38741:10;;:4;:10;;;38737:90;;38768:47;38801:4;38807:7;38768:32;:47::i;:::-;38737:90;38640:187;38855:1;38841:16;;:2;:16;;;38837:183;;;38874:45;38911:7;38874:36;:45::i;:::-;38837:183;;;38947:4;38941:10;;:2;:10;;;38937:83;;38968:40;38996:2;39000:7;38968:27;:40::i;:::-;38937:83;38837:183;38472:555;;;:::o;31619:382::-;31713:1;31699:16;;:2;:16;;;;31691:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;31772:16;31780:7;31772;:16::i;:::-;31771:17;31763:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;31834:45;31863:1;31867:2;31871:7;31834:20;:45::i;:::-;31909:1;31892:9;:13;31902:2;31892:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;31940:2;31921:7;:16;31929:7;31921:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;31985:7;31981:2;31960:33;;31977:1;31960:33;;;;;;;;;;;;31619:382;;:::o;2832:422::-;2892:4;3100:12;3211:7;3199:20;3191:28;;3245:1;3238:4;:8;3231:15;;;2832:422;;;:::o;35784:93::-;;;;:::o;39750:164::-;39854:10;:17;;;;39827:15;:24;39843:7;39827:24;;;;;;;;;;;:44;;;;39882:10;39898:7;39882:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39750:164;:::o;40541:988::-;40807:22;40857:1;40832:22;40849:4;40832:16;:22::i;:::-;:26;;;;:::i;:::-;40807:51;;40869:18;40890:17;:26;40908:7;40890:26;;;;;;;;;;;;40869:47;;41037:14;41023:10;:28;41019:328;;41068:19;41090:12;:18;41103:4;41090:18;;;;;;;;;;;;;;;:34;41109:14;41090:34;;;;;;;;;;;;41068:56;;41174:11;41141:12;:18;41154:4;41141:18;;;;;;;;;;;;;;;:30;41160:10;41141:30;;;;;;;;;;;:44;;;;41291:10;41258:17;:30;41276:11;41258:30;;;;;;;;;;;:43;;;;41019:328;;41443:17;:26;41461:7;41443:26;;;;;;;;;;;41436:33;;;41487:12;:18;41500:4;41487:18;;;;;;;;;;;;;;;:34;41506:14;41487:34;;;;;;;;;;;41480:41;;;40541:988;;;;:::o;41824:1079::-;42077:22;42122:1;42102:10;:17;;;;:21;;;;:::i;:::-;42077:46;;42134:18;42155:15;:24;42171:7;42155:24;;;;;;;;;;;;42134:45;;42506:19;42528:10;42539:14;42528:26;;;;;;;;;;;;;;;;;;;;;;;;42506:48;;42592:11;42567:10;42578;42567:22;;;;;;;;;;;;;;;;;;;;;;;:36;;;;42703:10;42672:15;:28;42688:11;42672:28;;;;;;;;;;;:41;;;;42844:15;:24;42860:7;42844:24;;;;;;;;;;;42837:31;;;42879:10;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41824:1079;;;;:::o;39328:221::-;39413:14;39430:20;39447:2;39430:16;:20::i;:::-;39413:37;;39488:7;39461:12;:16;39474:2;39461:16;;;;;;;;;;;;;;;:24;39478:6;39461:24;;;;;;;;;;;:34;;;;39535:6;39506:17;:26;39524:7;39506:26;;;;;;;;;;;:35;;;;39328:221;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:343:1:-;;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:2;;;290:1;287;280:12;249:2;303:41;337:6;332:3;327;303:41;:::i;:::-;90:260;;;;;;:::o;356:345::-;;459:66;475:49;517:6;475:49;:::i;:::-;459:66;:::i;:::-;450:75;;548:6;541:5;534:21;586:4;579:5;575:16;624:3;615:6;610:3;606:16;603:25;600:2;;;641:1;638;631:12;600:2;654:41;688:6;683:3;678;654:41;:::i;:::-;440:261;;;;;;:::o;707:139::-;;791:6;778:20;769:29;;807:33;834:5;807:33;:::i;:::-;759:87;;;;:::o;852:133::-;;933:6;920:20;911:29;;949:30;973:5;949:30;:::i;:::-;901:84;;;;:::o;991:137::-;;1074:6;1061:20;1052:29;;1090:32;1116:5;1090:32;:::i;:::-;1042:86;;;;:::o;1134:141::-;;1221:6;1215:13;1206:22;;1237:32;1263:5;1237:32;:::i;:::-;1196:79;;;;:::o;1294:271::-;;1398:3;1391:4;1383:6;1379:17;1375:27;1365:2;;1416:1;1413;1406:12;1365:2;1456:6;1443:20;1481:78;1555:3;1547:6;1540:4;1532:6;1528:17;1481:78;:::i;:::-;1472:87;;1355:210;;;;;:::o;1585:273::-;;1690:3;1683:4;1675:6;1671:17;1667:27;1657:2;;1708:1;1705;1698:12;1657:2;1748:6;1735:20;1773:79;1848:3;1840:6;1833:4;1825:6;1821:17;1773:79;:::i;:::-;1764:88;;1647:211;;;;;:::o;1864:137::-;;1947:6;1934:20;1925:29;;1963:32;1989:5;1963:32;:::i;:::-;1915:86;;;;:::o;2007:139::-;;2091:6;2078:20;2069:29;;2107:33;2134:5;2107:33;:::i;:::-;2059:87;;;;:::o;2152:262::-;;2260:2;2248:9;2239:7;2235:23;2231:32;2228:2;;;2276:1;2273;2266:12;2228:2;2319:1;2344:53;2389:7;2380:6;2369:9;2365:22;2344:53;:::i;:::-;2334:63;;2290:117;2218:196;;;;:::o;2420:407::-;;;2545:2;2533:9;2524:7;2520:23;2516:32;2513:2;;;2561:1;2558;2551:12;2513:2;2604:1;2629:53;2674:7;2665:6;2654:9;2650:22;2629:53;:::i;:::-;2619:63;;2575:117;2731:2;2757:53;2802:7;2793:6;2782:9;2778:22;2757:53;:::i;:::-;2747:63;;2702:118;2503:324;;;;;:::o;2833:552::-;;;;2975:2;2963:9;2954:7;2950:23;2946:32;2943:2;;;2991:1;2988;2981:12;2943:2;3034:1;3059:53;3104:7;3095:6;3084:9;3080:22;3059:53;:::i;:::-;3049:63;;3005:117;3161:2;3187:53;3232:7;3223:6;3212:9;3208:22;3187:53;:::i;:::-;3177:63;;3132:118;3289:2;3315:53;3360:7;3351:6;3340:9;3336:22;3315:53;:::i;:::-;3305:63;;3260:118;2933:452;;;;;:::o;3391:809::-;;;;;3559:3;3547:9;3538:7;3534:23;3530:33;3527:2;;;3576:1;3573;3566:12;3527:2;3619:1;3644:53;3689:7;3680:6;3669:9;3665:22;3644:53;:::i;:::-;3634:63;;3590:117;3746:2;3772:53;3817:7;3808:6;3797:9;3793:22;3772:53;:::i;:::-;3762:63;;3717:118;3874:2;3900:53;3945:7;3936:6;3925:9;3921:22;3900:53;:::i;:::-;3890:63;;3845:118;4030:2;4019:9;4015:18;4002:32;4061:18;4053:6;4050:30;4047:2;;;4093:1;4090;4083:12;4047:2;4121:62;4175:7;4166:6;4155:9;4151:22;4121:62;:::i;:::-;4111:72;;3973:220;3517:683;;;;;;;:::o;4206:401::-;;;4328:2;4316:9;4307:7;4303:23;4299:32;4296:2;;;4344:1;4341;4334:12;4296:2;4387:1;4412:53;4457:7;4448:6;4437:9;4433:22;4412:53;:::i;:::-;4402:63;;4358:117;4514:2;4540:50;4582:7;4573:6;4562:9;4558:22;4540:50;:::i;:::-;4530:60;;4485:115;4286:321;;;;;:::o;4613:407::-;;;4738:2;4726:9;4717:7;4713:23;4709:32;4706:2;;;4754:1;4751;4744:12;4706:2;4797:1;4822:53;4867:7;4858:6;4847:9;4843:22;4822:53;:::i;:::-;4812:63;;4768:117;4924:2;4950:53;4995:7;4986:6;4975:9;4971:22;4950:53;:::i;:::-;4940:63;;4895:118;4696:324;;;;;:::o;5026:260::-;;5133:2;5121:9;5112:7;5108:23;5104:32;5101:2;;;5149:1;5146;5139:12;5101:2;5192:1;5217:52;5261:7;5252:6;5241:9;5237:22;5217:52;:::i;:::-;5207:62;;5163:116;5091:195;;;;:::o;5292:282::-;;5410:2;5398:9;5389:7;5385:23;5381:32;5378:2;;;5426:1;5423;5416:12;5378:2;5469:1;5494:63;5549:7;5540:6;5529:9;5525:22;5494:63;:::i;:::-;5484:73;;5440:127;5368:206;;;;:::o;5580:375::-;;5698:2;5686:9;5677:7;5673:23;5669:32;5666:2;;;5714:1;5711;5704:12;5666:2;5785:1;5774:9;5770:17;5757:31;5815:18;5807:6;5804:30;5801:2;;;5847:1;5844;5837:12;5801:2;5875:63;5930:7;5921:6;5910:9;5906:22;5875:63;:::i;:::-;5865:73;;5728:220;5656:299;;;;:::o;5961:260::-;;6068:2;6056:9;6047:7;6043:23;6039:32;6036:2;;;6084:1;6081;6074:12;6036:2;6127:1;6152:52;6196:7;6187:6;6176:9;6172:22;6152:52;:::i;:::-;6142:62;;6098:116;6026:195;;;;:::o;6227:403::-;;;6350:2;6338:9;6329:7;6325:23;6321:32;6318:2;;;6366:1;6363;6356:12;6318:2;6409:1;6434:52;6478:7;6469:6;6458:9;6454:22;6434:52;:::i;:::-;6424:62;;6380:116;6535:2;6561:52;6605:7;6596:6;6585:9;6581:22;6561:52;:::i;:::-;6551:62;;6506:117;6308:322;;;;;:::o;6636:405::-;;;6760:2;6748:9;6739:7;6735:23;6731:32;6728:2;;;6776:1;6773;6766:12;6728:2;6819:1;6844:52;6888:7;6879:6;6868:9;6864:22;6844:52;:::i;:::-;6834:62;;6790:116;6945:2;6971:53;7016:7;7007:6;6996:9;6992:22;6971:53;:::i;:::-;6961:63;;6916:118;6718:323;;;;;:::o;7047:550::-;;;;7188:2;7176:9;7167:7;7163:23;7159:32;7156:2;;;7204:1;7201;7194:12;7156:2;7247:1;7272:52;7316:7;7307:6;7296:9;7292:22;7272:52;:::i;:::-;7262:62;;7218:116;7373:2;7399:53;7444:7;7435:6;7424:9;7420:22;7399:53;:::i;:::-;7389:63;;7344:118;7501:2;7527:53;7572:7;7563:6;7552:9;7548:22;7527:53;:::i;:::-;7517:63;;7472:118;7146:451;;;;;:::o;7603:262::-;;7711:2;7699:9;7690:7;7686:23;7682:32;7679:2;;;7727:1;7724;7717:12;7679:2;7770:1;7795:53;7840:7;7831:6;7820:9;7816:22;7795:53;:::i;:::-;7785:63;;7741:117;7669:196;;;;:::o;7871:842::-;;;;;;8046:3;8034:9;8025:7;8021:23;8017:33;8014:2;;;8063:1;8060;8053:12;8014:2;8106:1;8131:53;8176:7;8167:6;8156:9;8152:22;8131:53;:::i;:::-;8121:63;;8077:117;8233:2;8259:53;8304:7;8295:6;8284:9;8280:22;8259:53;:::i;:::-;8249:63;;8204:118;8361:2;8387:53;8432:7;8423:6;8412:9;8408:22;8387:53;:::i;:::-;8377:63;;8332:118;8489:2;8515:52;8559:7;8550:6;8539:9;8535:22;8515:52;:::i;:::-;8505:62;;8460:117;8616:3;8643:53;8688:7;8679:6;8668:9;8664:22;8643:53;:::i;:::-;8633:63;;8587:119;8004:709;;;;;;;;:::o;8719:179::-;;8809:46;8851:3;8843:6;8809:46;:::i;:::-;8887:4;8882:3;8878:14;8864:28;;8799:99;;;;:::o;8904:118::-;8991:24;9009:5;8991:24;:::i;:::-;8986:3;8979:37;8969:53;;:::o;9058:732::-;;9206:54;9254:5;9206:54;:::i;:::-;9276:86;9355:6;9350:3;9276:86;:::i;:::-;9269:93;;9386:56;9436:5;9386:56;:::i;:::-;9465:7;9496:1;9481:284;9506:6;9503:1;9500:13;9481:284;;;9582:6;9576:13;9609:63;9668:3;9653:13;9609:63;:::i;:::-;9602:70;;9695:60;9748:6;9695:60;:::i;:::-;9685:70;;9541:224;9528:1;9525;9521:9;9516:14;;9481:284;;;9485:14;9781:3;9774:10;;9182:608;;;;;;;:::o;9796:109::-;9877:21;9892:5;9877:21;:::i;:::-;9872:3;9865:34;9855:50;;:::o;9911:115::-;9996:23;10013:5;9996:23;:::i;:::-;9991:3;9984:36;9974:52;;:::o;10032:360::-;;10146:38;10178:5;10146:38;:::i;:::-;10200:70;10263:6;10258:3;10200:70;:::i;:::-;10193:77;;10279:52;10324:6;10319:3;10312:4;10305:5;10301:16;10279:52;:::i;:::-;10356:29;10378:6;10356:29;:::i;:::-;10351:3;10347:39;10340:46;;10122:270;;;;;:::o;10398:364::-;;10514:39;10547:5;10514:39;:::i;:::-;10569:71;10633:6;10628:3;10569:71;:::i;:::-;10562:78;;10649:52;10694:6;10689:3;10682:4;10675:5;10671:16;10649:52;:::i;:::-;10726:29;10748:6;10726:29;:::i;:::-;10721:3;10717:39;10710:46;;10490:272;;;;;:::o;10768:377::-;;10902:39;10935:5;10902:39;:::i;:::-;10957:89;11039:6;11034:3;10957:89;:::i;:::-;10950:96;;11055:52;11100:6;11095:3;11088:4;11081:5;11077:16;11055:52;:::i;:::-;11132:6;11127:3;11123:16;11116:23;;10878:267;;;;;:::o;11151:365::-;;11314:66;11378:1;11373:3;11314:66;:::i;:::-;11307:73;;11389:93;11478:3;11389:93;:::i;:::-;11507:2;11502:3;11498:12;11491:19;;11297:219;;;:::o;11522:365::-;;11685:66;11749:1;11744:3;11685:66;:::i;:::-;11678:73;;11760:93;11849:3;11760:93;:::i;:::-;11878:2;11873:3;11869:12;11862:19;;11668:219;;;:::o;11893:365::-;;12056:66;12120:1;12115:3;12056:66;:::i;:::-;12049:73;;12131:93;12220:3;12131:93;:::i;:::-;12249:2;12244:3;12240:12;12233:19;;12039:219;;;:::o;12264:366::-;;12427:67;12491:2;12486:3;12427:67;:::i;:::-;12420:74;;12503:93;12592:3;12503:93;:::i;:::-;12621:2;12616:3;12612:12;12605:19;;12410:220;;;:::o;12636:366::-;;12799:67;12863:2;12858:3;12799:67;:::i;:::-;12792:74;;12875:93;12964:3;12875:93;:::i;:::-;12993:2;12988:3;12984:12;12977:19;;12782:220;;;:::o;13008:366::-;;13171:67;13235:2;13230:3;13171:67;:::i;:::-;13164:74;;13247:93;13336:3;13247:93;:::i;:::-;13365:2;13360:3;13356:12;13349:19;;13154:220;;;:::o;13380:366::-;;13543:67;13607:2;13602:3;13543:67;:::i;:::-;13536:74;;13619:93;13708:3;13619:93;:::i;:::-;13737:2;13732:3;13728:12;13721:19;;13526:220;;;:::o;13752:365::-;;13915:66;13979:1;13974:3;13915:66;:::i;:::-;13908:73;;13990:93;14079:3;13990:93;:::i;:::-;14108:2;14103:3;14099:12;14092:19;;13898:219;;;:::o;14123:366::-;;14286:67;14350:2;14345:3;14286:67;:::i;:::-;14279:74;;14362:93;14451:3;14362:93;:::i;:::-;14480:2;14475:3;14471:12;14464:19;;14269:220;;;:::o;14495:366::-;;14658:67;14722:2;14717:3;14658:67;:::i;:::-;14651:74;;14734:93;14823:3;14734:93;:::i;:::-;14852:2;14847:3;14843:12;14836:19;;14641:220;;;:::o;14867:365::-;;15030:66;15094:1;15089:3;15030:66;:::i;:::-;15023:73;;15105:93;15194:3;15105:93;:::i;:::-;15223:2;15218:3;15214:12;15207:19;;15013:219;;;:::o;15238:366::-;;15401:67;15465:2;15460:3;15401:67;:::i;:::-;15394:74;;15477:93;15566:3;15477:93;:::i;:::-;15595:2;15590:3;15586:12;15579:19;;15384:220;;;:::o;15610:365::-;;15773:66;15837:1;15832:3;15773:66;:::i;:::-;15766:73;;15848:93;15937:3;15848:93;:::i;:::-;15966:2;15961:3;15957:12;15950:19;;15756:219;;;:::o;15981:366::-;;16144:67;16208:2;16203:3;16144:67;:::i;:::-;16137:74;;16220:93;16309:3;16220:93;:::i;:::-;16338:2;16333:3;16329:12;16322:19;;16127:220;;;:::o;16353:366::-;;16516:67;16580:2;16575:3;16516:67;:::i;:::-;16509:74;;16592:93;16681:3;16592:93;:::i;:::-;16710:2;16705:3;16701:12;16694:19;;16499:220;;;:::o;16725:365::-;;16888:66;16952:1;16947:3;16888:66;:::i;:::-;16881:73;;16963:93;17052:3;16963:93;:::i;:::-;17081:2;17076:3;17072:12;17065:19;;16871:219;;;:::o;17096:366::-;;17259:67;17323:2;17318:3;17259:67;:::i;:::-;17252:74;;17335:93;17424:3;17335:93;:::i;:::-;17453:2;17448:3;17444:12;17437:19;;17242:220;;;:::o;17468:365::-;;17631:66;17695:1;17690:3;17631:66;:::i;:::-;17624:73;;17706:93;17795:3;17706:93;:::i;:::-;17824:2;17819:3;17815:12;17808:19;;17614:219;;;:::o;17839:365::-;;18002:66;18066:1;18061:3;18002:66;:::i;:::-;17995:73;;18077:93;18166:3;18077:93;:::i;:::-;18195:2;18190:3;18186:12;18179:19;;17985:219;;;:::o;18210:365::-;;18373:66;18437:1;18432:3;18373:66;:::i;:::-;18366:73;;18448:93;18537:3;18448:93;:::i;:::-;18566:2;18561:3;18557:12;18550:19;;18356:219;;;:::o;18581:366::-;;18744:67;18808:2;18803:3;18744:67;:::i;:::-;18737:74;;18820:93;18909:3;18820:93;:::i;:::-;18938:2;18933:3;18929:12;18922:19;;18727:220;;;:::o;18953:365::-;;19116:66;19180:1;19175:3;19116:66;:::i;:::-;19109:73;;19191:93;19280:3;19191:93;:::i;:::-;19309:2;19304:3;19300:12;19293:19;;19099:219;;;:::o;19324:365::-;;19487:66;19551:1;19546:3;19487:66;:::i;:::-;19480:73;;19562:93;19651:3;19562:93;:::i;:::-;19680:2;19675:3;19671:12;19664:19;;19470:219;;;:::o;19695:365::-;;19858:66;19922:1;19917:3;19858:66;:::i;:::-;19851:73;;19933:93;20022:3;19933:93;:::i;:::-;20051:2;20046:3;20042:12;20035:19;;19841:219;;;:::o;20066:366::-;;20229:67;20293:2;20288:3;20229:67;:::i;:::-;20222:74;;20305:93;20394:3;20305:93;:::i;:::-;20423:2;20418:3;20414:12;20407:19;;20212:220;;;:::o;20438:366::-;;20601:67;20665:2;20660:3;20601:67;:::i;:::-;20594:74;;20677:93;20766:3;20677:93;:::i;:::-;20795:2;20790:3;20786:12;20779:19;;20584:220;;;:::o;20810:366::-;;20973:67;21037:2;21032:3;20973:67;:::i;:::-;20966:74;;21049:93;21138:3;21049:93;:::i;:::-;21167:2;21162:3;21158:12;21151:19;;20956:220;;;:::o;21182:366::-;;21345:67;21409:2;21404:3;21345:67;:::i;:::-;21338:74;;21421:93;21510:3;21421:93;:::i;:::-;21539:2;21534:3;21530:12;21523:19;;21328:220;;;:::o;21554:366::-;;21717:67;21781:2;21776:3;21717:67;:::i;:::-;21710:74;;21793:93;21882:3;21793:93;:::i;:::-;21911:2;21906:3;21902:12;21895:19;;21700:220;;;:::o;21926:366::-;;22089:67;22153:2;22148:3;22089:67;:::i;:::-;22082:74;;22165:93;22254:3;22165:93;:::i;:::-;22283:2;22278:3;22274:12;22267:19;;22072:220;;;:::o;22298:366::-;;22461:67;22525:2;22520:3;22461:67;:::i;:::-;22454:74;;22537:93;22626:3;22537:93;:::i;:::-;22655:2;22650:3;22646:12;22639:19;;22444:220;;;:::o;22670:365::-;;22833:66;22897:1;22892:3;22833:66;:::i;:::-;22826:73;;22908:93;22997:3;22908:93;:::i;:::-;23026:2;23021:3;23017:12;23010:19;;22816:219;;;:::o;23041:115::-;23126:23;23143:5;23126:23;:::i;:::-;23121:3;23114:36;23104:52;;:::o;23162:108::-;23239:24;23257:5;23239:24;:::i;:::-;23234:3;23227:37;23217:53;;:::o;23276:118::-;23363:24;23381:5;23363:24;:::i;:::-;23358:3;23351:37;23341:53;;:::o;23400:435::-;;23602:95;23693:3;23684:6;23602:95;:::i;:::-;23595:102;;23714:95;23805:3;23796:6;23714:95;:::i;:::-;23707:102;;23826:3;23819:10;;23584:251;;;;;:::o;23841:222::-;;23972:2;23961:9;23957:18;23949:26;;23985:71;24053:1;24042:9;24038:17;24029:6;23985:71;:::i;:::-;23939:124;;;;:::o;24069:640::-;;24302:3;24291:9;24287:19;24279:27;;24316:71;24384:1;24373:9;24369:17;24360:6;24316:71;:::i;:::-;24397:72;24465:2;24454:9;24450:18;24441:6;24397:72;:::i;:::-;24479;24547:2;24536:9;24532:18;24523:6;24479:72;:::i;:::-;24598:9;24592:4;24588:20;24583:2;24572:9;24568:18;24561:48;24626:76;24697:4;24688:6;24626:76;:::i;:::-;24618:84;;24269:440;;;;;;;:::o;24715:373::-;;24896:2;24885:9;24881:18;24873:26;;24945:9;24939:4;24935:20;24931:1;24920:9;24916:17;24909:47;24973:108;25076:4;25067:6;24973:108;:::i;:::-;24965:116;;24863:225;;;;:::o;25094:210::-;;25219:2;25208:9;25204:18;25196:26;;25232:65;25294:1;25283:9;25279:17;25270:6;25232:65;:::i;:::-;25186:118;;;;:::o;25310:218::-;;25439:2;25428:9;25424:18;25416:26;;25452:69;25518:1;25507:9;25503:17;25494:6;25452:69;:::i;:::-;25406:122;;;;:::o;25534:313::-;;25685:2;25674:9;25670:18;25662:26;;25734:9;25728:4;25724:20;25720:1;25709:9;25705:17;25698:47;25762:78;25835:4;25826:6;25762:78;:::i;:::-;25754:86;;25652:195;;;;:::o;25853:419::-;;26057:2;26046:9;26042:18;26034:26;;26106:9;26100:4;26096:20;26092:1;26081:9;26077:17;26070:47;26134:131;26260:4;26134:131;:::i;:::-;26126:139;;26024:248;;;:::o;26278:419::-;;26482:2;26471:9;26467:18;26459:26;;26531:9;26525:4;26521:20;26517:1;26506:9;26502:17;26495:47;26559:131;26685:4;26559:131;:::i;:::-;26551:139;;26449:248;;;:::o;26703:419::-;;26907:2;26896:9;26892:18;26884:26;;26956:9;26950:4;26946:20;26942:1;26931:9;26927:17;26920:47;26984:131;27110:4;26984:131;:::i;:::-;26976:139;;26874:248;;;:::o;27128:419::-;;27332:2;27321:9;27317:18;27309:26;;27381:9;27375:4;27371:20;27367:1;27356:9;27352:17;27345:47;27409:131;27535:4;27409:131;:::i;:::-;27401:139;;27299:248;;;:::o;27553:419::-;;27757:2;27746:9;27742:18;27734:26;;27806:9;27800:4;27796:20;27792:1;27781:9;27777:17;27770:47;27834:131;27960:4;27834:131;:::i;:::-;27826:139;;27724:248;;;:::o;27978:419::-;;28182:2;28171:9;28167:18;28159:26;;28231:9;28225:4;28221:20;28217:1;28206:9;28202:17;28195:47;28259:131;28385:4;28259:131;:::i;:::-;28251:139;;28149:248;;;:::o;28403:419::-;;28607:2;28596:9;28592:18;28584:26;;28656:9;28650:4;28646:20;28642:1;28631:9;28627:17;28620:47;28684:131;28810:4;28684:131;:::i;:::-;28676:139;;28574:248;;;:::o;28828:419::-;;29032:2;29021:9;29017:18;29009:26;;29081:9;29075:4;29071:20;29067:1;29056:9;29052:17;29045:47;29109:131;29235:4;29109:131;:::i;:::-;29101:139;;28999:248;;;:::o;29253:419::-;;29457:2;29446:9;29442:18;29434:26;;29506:9;29500:4;29496:20;29492:1;29481:9;29477:17;29470:47;29534:131;29660:4;29534:131;:::i;:::-;29526:139;;29424:248;;;:::o;29678:419::-;;29882:2;29871:9;29867:18;29859:26;;29931:9;29925:4;29921:20;29917:1;29906:9;29902:17;29895:47;29959:131;30085:4;29959:131;:::i;:::-;29951:139;;29849:248;;;:::o;30103:419::-;;30307:2;30296:9;30292:18;30284:26;;30356:9;30350:4;30346:20;30342:1;30331:9;30327:17;30320:47;30384:131;30510:4;30384:131;:::i;:::-;30376:139;;30274:248;;;:::o;30528:419::-;;30732:2;30721:9;30717:18;30709:26;;30781:9;30775:4;30771:20;30767:1;30756:9;30752:17;30745:47;30809:131;30935:4;30809:131;:::i;:::-;30801:139;;30699:248;;;:::o;30953:419::-;;31157:2;31146:9;31142:18;31134:26;;31206:9;31200:4;31196:20;31192:1;31181:9;31177:17;31170:47;31234:131;31360:4;31234:131;:::i;:::-;31226:139;;31124:248;;;:::o;31378:419::-;;31582:2;31571:9;31567:18;31559:26;;31631:9;31625:4;31621:20;31617:1;31606:9;31602:17;31595:47;31659:131;31785:4;31659:131;:::i;:::-;31651:139;;31549:248;;;:::o;31803:419::-;;32007:2;31996:9;31992:18;31984:26;;32056:9;32050:4;32046:20;32042:1;32031:9;32027:17;32020:47;32084:131;32210:4;32084:131;:::i;:::-;32076:139;;31974:248;;;:::o;32228:419::-;;32432:2;32421:9;32417:18;32409:26;;32481:9;32475:4;32471:20;32467:1;32456:9;32452:17;32445:47;32509:131;32635:4;32509:131;:::i;:::-;32501:139;;32399:248;;;:::o;32653:419::-;;32857:2;32846:9;32842:18;32834:26;;32906:9;32900:4;32896:20;32892:1;32881:9;32877:17;32870:47;32934:131;33060:4;32934:131;:::i;:::-;32926:139;;32824:248;;;:::o;33078:419::-;;33282:2;33271:9;33267:18;33259:26;;33331:9;33325:4;33321:20;33317:1;33306:9;33302:17;33295:47;33359:131;33485:4;33359:131;:::i;:::-;33351:139;;33249:248;;;:::o;33503:419::-;;33707:2;33696:9;33692:18;33684:26;;33756:9;33750:4;33746:20;33742:1;33731:9;33727:17;33720:47;33784:131;33910:4;33784:131;:::i;:::-;33776:139;;33674:248;;;:::o;33928:419::-;;34132:2;34121:9;34117:18;34109:26;;34181:9;34175:4;34171:20;34167:1;34156:9;34152:17;34145:47;34209:131;34335:4;34209:131;:::i;:::-;34201:139;;34099:248;;;:::o;34353:419::-;;34557:2;34546:9;34542:18;34534:26;;34606:9;34600:4;34596:20;34592:1;34581:9;34577:17;34570:47;34634:131;34760:4;34634:131;:::i;:::-;34626:139;;34524:248;;;:::o;34778:419::-;;34982:2;34971:9;34967:18;34959:26;;35031:9;35025:4;35021:20;35017:1;35006:9;35002:17;34995:47;35059:131;35185:4;35059:131;:::i;:::-;35051:139;;34949:248;;;:::o;35203:419::-;;35407:2;35396:9;35392:18;35384:26;;35456:9;35450:4;35446:20;35442:1;35431:9;35427:17;35420:47;35484:131;35610:4;35484:131;:::i;:::-;35476:139;;35374:248;;;:::o;35628:419::-;;35832:2;35821:9;35817:18;35809:26;;35881:9;35875:4;35871:20;35867:1;35856:9;35852:17;35845:47;35909:131;36035:4;35909:131;:::i;:::-;35901:139;;35799:248;;;:::o;36053:419::-;;36257:2;36246:9;36242:18;36234:26;;36306:9;36300:4;36296:20;36292:1;36281:9;36277:17;36270:47;36334:131;36460:4;36334:131;:::i;:::-;36326:139;;36224:248;;;:::o;36478:419::-;;36682:2;36671:9;36667:18;36659:26;;36731:9;36725:4;36721:20;36717:1;36706:9;36702:17;36695:47;36759:131;36885:4;36759:131;:::i;:::-;36751:139;;36649:248;;;:::o;36903:419::-;;37107:2;37096:9;37092:18;37084:26;;37156:9;37150:4;37146:20;37142:1;37131:9;37127:17;37120:47;37184:131;37310:4;37184:131;:::i;:::-;37176:139;;37074:248;;;:::o;37328:419::-;;37532:2;37521:9;37517:18;37509:26;;37581:9;37575:4;37571:20;37567:1;37556:9;37552:17;37545:47;37609:131;37735:4;37609:131;:::i;:::-;37601:139;;37499:248;;;:::o;37753:419::-;;37957:2;37946:9;37942:18;37934:26;;38006:9;38000:4;37996:20;37992:1;37981:9;37977:17;37970:47;38034:131;38160:4;38034:131;:::i;:::-;38026:139;;37924:248;;;:::o;38178:419::-;;38382:2;38371:9;38367:18;38359:26;;38431:9;38425:4;38421:20;38417:1;38406:9;38402:17;38395:47;38459:131;38585:4;38459:131;:::i;:::-;38451:139;;38349:248;;;:::o;38603:419::-;;38807:2;38796:9;38792:18;38784:26;;38856:9;38850:4;38846:20;38842:1;38831:9;38827:17;38820:47;38884:131;39010:4;38884:131;:::i;:::-;38876:139;;38774:248;;;:::o;39028:419::-;;39232:2;39221:9;39217:18;39209:26;;39281:9;39275:4;39271:20;39267:1;39256:9;39252:17;39245:47;39309:131;39435:4;39309:131;:::i;:::-;39301:139;;39199:248;;;:::o;39453:218::-;;39582:2;39571:9;39567:18;39559:26;;39595:69;39661:1;39650:9;39646:17;39637:6;39595:69;:::i;:::-;39549:122;;;;:::o;39677:222::-;;39808:2;39797:9;39793:18;39785:26;;39821:71;39889:1;39878:9;39874:17;39865:6;39821:71;:::i;:::-;39775:124;;;;:::o;39905:129::-;;39966:20;;:::i;:::-;39956:30;;39995:33;40023:4;40015:6;39995:33;:::i;:::-;39946:88;;;:::o;40040:75::-;;40106:2;40100:9;40090:19;;40080:35;:::o;40121:307::-;;40272:18;40264:6;40261:30;40258:2;;;40294:18;;:::i;:::-;40258:2;40332:29;40354:6;40332:29;:::i;:::-;40324:37;;40416:4;40410;40406:15;40398:23;;40187:241;;;:::o;40434:308::-;;40586:18;40578:6;40575:30;40572:2;;;40608:18;;:::i;:::-;40572:2;40646:29;40668:6;40646:29;:::i;:::-;40638:37;;40730:4;40724;40720:15;40712:23;;40501:241;;;:::o;40748:132::-;;40838:3;40830:11;;40868:4;40863:3;40859:14;40851:22;;40820:60;;;:::o;40886:114::-;;40987:5;40981:12;40971:22;;40960:40;;;:::o;41006:98::-;;41091:5;41085:12;41075:22;;41064:40;;;:::o;41110:99::-;;41196:5;41190:12;41180:22;;41169:40;;;:::o;41215:113::-;;41317:4;41312:3;41308:14;41300:22;;41290:38;;;:::o;41334:184::-;;41467:6;41462:3;41455:19;41507:4;41502:3;41498:14;41483:29;;41445:73;;;;:::o;41524:168::-;;41641:6;41636:3;41629:19;41681:4;41676:3;41672:14;41657:29;;41619:73;;;;:::o;41698:169::-;;41816:6;41811:3;41804:19;41856:4;41851:3;41847:14;41832:29;;41794:73;;;;:::o;41873:148::-;;42012:3;41997:18;;41987:34;;;;:::o;42027:242::-;;42085:19;42102:1;42085:19;:::i;:::-;42080:24;;42118:19;42135:1;42118:19;:::i;:::-;42113:24;;42211:1;42203:6;42199:14;42196:1;42193:21;42190:2;;;42217:18;;:::i;:::-;42190:2;42261:1;42258;42254:9;42247:16;;42070:199;;;;:::o;42275:305::-;;42334:20;42352:1;42334:20;:::i;:::-;42329:25;;42368:20;42386:1;42368:20;:::i;:::-;42363:25;;42522:1;42454:66;42450:74;42447:1;42444:81;42441:2;;;42528:18;;:::i;:::-;42441:2;42572:1;42569;42565:9;42558:16;;42319:261;;;;:::o;42586:185::-;;42643:20;42661:1;42643:20;:::i;:::-;42638:25;;42677:20;42695:1;42677:20;:::i;:::-;42672:25;;42716:1;42706:2;;42721:18;;:::i;:::-;42706:2;42763:1;42760;42756:9;42751:14;;42628:143;;;;:::o;42777:348::-;;42840:20;42858:1;42840:20;:::i;:::-;42835:25;;42874:20;42892:1;42874:20;:::i;:::-;42869:25;;43062:1;42994:66;42990:74;42987:1;42984:81;42979:1;42972:9;42965:17;42961:105;42958:2;;;43069:18;;:::i;:::-;42958:2;43117:1;43114;43110:9;43099:20;;42825:300;;;;:::o;43131:188::-;;43190:19;43207:1;43190:19;:::i;:::-;43185:24;;43223:19;43240:1;43223:19;:::i;:::-;43218:24;;43261:1;43258;43255:8;43252:2;;;43266:18;;:::i;:::-;43252:2;43311:1;43308;43304:9;43296:17;;43175:144;;;;:::o;43325:191::-;;43385:20;43403:1;43385:20;:::i;:::-;43380:25;;43419:20;43437:1;43419:20;:::i;:::-;43414:25;;43458:1;43455;43452:8;43449:2;;;43463:18;;:::i;:::-;43449:2;43508:1;43505;43501:9;43493:17;;43370:146;;;;:::o;43522:96::-;;43588:24;43606:5;43588:24;:::i;:::-;43577:35;;43567:51;;;:::o;43624:90::-;;43701:5;43694:13;43687:21;43676:32;;43666:48;;;:::o;43720:149::-;;43796:66;43789:5;43785:78;43774:89;;43764:105;;;:::o;43875:89::-;;43951:6;43944:5;43940:18;43929:29;;43919:45;;;:::o;43970:126::-;;44047:42;44040:5;44036:54;44025:65;;44015:81;;;:::o;44102:77::-;;44168:5;44157:16;;44147:32;;;:::o;44185:154::-;44269:6;44264:3;44259;44246:30;44331:1;44322:6;44317:3;44313:16;44306:27;44236:103;;;:::o;44345:307::-;44413:1;44423:113;44437:6;44434:1;44431:13;44423:113;;;44522:1;44517:3;44513:11;44507:18;44503:1;44498:3;44494:11;44487:39;44459:2;44456:1;44452:10;44447:15;;44423:113;;;44554:6;44551:1;44548:13;44545:2;;;44634:1;44625:6;44620:3;44616:16;44609:27;44545:2;44394:258;;;;:::o;44658:320::-;;44739:1;44733:4;44729:12;44719:22;;44786:1;44780:4;44776:12;44807:18;44797:2;;44863:4;44855:6;44851:17;44841:27;;44797:2;44925;44917:6;44914:14;44894:18;44891:38;44888:2;;;44944:18;;:::i;:::-;44888:2;44709:269;;;;:::o;44984:281::-;45067:27;45089:4;45067:27;:::i;:::-;45059:6;45055:40;45197:6;45185:10;45182:22;45161:18;45149:10;45146:34;45143:62;45140:2;;;45208:18;;:::i;:::-;45140:2;45248:10;45244:2;45237:22;45027:238;;;:::o;45271:171::-;;45332:23;45349:5;45332:23;:::i;:::-;45323:32;;45377:6;45370:5;45367:17;45364:2;;;45387:18;;:::i;:::-;45364:2;45434:1;45427:5;45423:13;45416:20;;45313:129;;;:::o;45448:233::-;;45510:24;45528:5;45510:24;:::i;:::-;45501:33;;45556:66;45549:5;45546:77;45543:2;;;45626:18;;:::i;:::-;45543:2;45673:1;45666:5;45662:13;45655:20;;45491:190;;;:::o;45687:176::-;;45736:20;45754:1;45736:20;:::i;:::-;45731:25;;45770:20;45788:1;45770:20;:::i;:::-;45765:25;;45809:1;45799:2;;45814:18;;:::i;:::-;45799:2;45855:1;45852;45848:9;45843:14;;45721:142;;;;:::o;45869:180::-;45917:77;45914:1;45907:88;46014:4;46011:1;46004:15;46038:4;46035:1;46028:15;46055:180;46103:77;46100:1;46093:88;46200:4;46197:1;46190:15;46224:4;46221:1;46214:15;46241:180;46289:77;46286:1;46279:88;46386:4;46383:1;46376:15;46410:4;46407:1;46400:15;46427:180;46475:77;46472:1;46465:88;46572:4;46569:1;46562:15;46596:4;46593:1;46586:15;46613:102;;46705:2;46701:7;46696:2;46689:5;46685:14;46681:28;46671:38;;46661:54;;;:::o;46721:153::-;46861:5;46857:1;46849:6;46845:14;46838:29;46827:47;:::o;46880:153::-;47020:5;47016:1;47008:6;47004:14;46997:29;46986:47;:::o;47039:153::-;47179:5;47175:1;47167:6;47163:14;47156:29;47145:47;:::o;47198:230::-;47338:34;47334:1;47326:6;47322:14;47315:58;47407:13;47402:2;47394:6;47390:15;47383:38;47304:124;:::o;47434:237::-;47574:34;47570:1;47562:6;47558:14;47551:58;47643:20;47638:2;47630:6;47626:15;47619:45;47540:131;:::o;47677:225::-;47817:34;47813:1;47805:6;47801:14;47794:58;47886:8;47881:2;47873:6;47869:15;47862:33;47783:119;:::o;47908:178::-;48048:30;48044:1;48036:6;48032:14;48025:54;48014:72;:::o;48092:153::-;48232:5;48228:1;48220:6;48216:14;48209:29;48198:47;:::o;48251:223::-;48391:34;48387:1;48379:6;48375:14;48368:58;48460:6;48455:2;48447:6;48443:15;48436:31;48357:117;:::o;48480:175::-;48620:27;48616:1;48608:6;48604:14;48597:51;48586:69;:::o;48661:153::-;48801:5;48797:1;48789:6;48785:14;48778:29;48767:47;:::o;48820:231::-;48960:34;48956:1;48948:6;48944:14;48937:58;49029:14;49024:2;49016:6;49012:15;49005:39;48926:125;:::o;49057:153::-;49197:5;49193:1;49185:6;49181:14;49174:29;49163:47;:::o;49216:243::-;49356:34;49352:1;49344:6;49340:14;49333:58;49425:26;49420:2;49412:6;49408:15;49401:51;49322:137;:::o;49465:229::-;49605:34;49601:1;49593:6;49589:14;49582:58;49674:12;49669:2;49661:6;49657:15;49650:37;49571:123;:::o;49700:153::-;49840:5;49836:1;49828:6;49824:14;49817:29;49806:47;:::o;49859:228::-;49999:34;49995:1;49987:6;49983:14;49976:58;50068:11;50063:2;50055:6;50051:15;50044:36;49965:122;:::o;50093:153::-;50233:5;50229:1;50221:6;50217:14;50210:29;50199:47;:::o;50252:153::-;50392:5;50388:1;50380:6;50376:14;50369:29;50358:47;:::o;50411:153::-;50551:5;50547:1;50539:6;50535:14;50528:29;50517:47;:::o;50570:182::-;50710:34;50706:1;50698:6;50694:14;50687:58;50676:76;:::o;50758:153::-;50898:5;50894:1;50886:6;50882:14;50875:29;50864:47;:::o;50917:153::-;51057:5;51053:1;51045:6;51041:14;51034:29;51023:47;:::o;51076:153::-;51216:5;51212:1;51204:6;51200:14;51193:29;51182:47;:::o;51235:231::-;51375:34;51371:1;51363:6;51359:14;51352:58;51444:14;51439:2;51431:6;51427:15;51420:39;51341:125;:::o;51472:182::-;51612:34;51608:1;51600:6;51596:14;51589:58;51578:76;:::o;51660:228::-;51800:34;51796:1;51788:6;51784:14;51777:58;51869:11;51864:2;51856:6;51852:15;51845:36;51766:122;:::o;51894:234::-;52034:34;52030:1;52022:6;52018:14;52011:58;52103:17;52098:2;52090:6;52086:15;52079:42;52000:128;:::o;52134:220::-;52274:34;52270:1;52262:6;52258:14;52251:58;52343:3;52338:2;52330:6;52326:15;52319:28;52240:114;:::o;52360:236::-;52500:34;52496:1;52488:6;52484:14;52477:58;52569:19;52564:2;52556:6;52552:15;52545:44;52466:130;:::o;52602:231::-;52742:34;52738:1;52730:6;52726:14;52719:58;52811:14;52806:2;52798:6;52794:15;52787:39;52708:125;:::o;52839:153::-;52979:5;52975:1;52967:6;52963:14;52956:29;52945:47;:::o;52998:122::-;53071:24;53089:5;53071:24;:::i;:::-;53064:5;53061:35;53051:2;;53110:1;53107;53100:12;53051:2;53041:79;:::o;53126:116::-;53196:21;53211:5;53196:21;:::i;:::-;53189:5;53186:32;53176:2;;53232:1;53229;53222:12;53176:2;53166:76;:::o;53248:120::-;53320:23;53337:5;53320:23;:::i;:::-;53313:5;53310:34;53300:2;;53358:1;53355;53348:12;53300:2;53290:78;:::o;53374:120::-;53446:23;53463:5;53446:23;:::i;:::-;53439:5;53436:34;53426:2;;53484:1;53481;53474:12;53426:2;53416:78;:::o;53500:122::-;53573:24;53591:5;53573:24;:::i;:::-;53566:5;53563:35;53553:2;;53612:1;53609;53602:12;53553:2;53543:79;:::o

Swarm Source

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