ETH Price: $3,664.36 (+1.77%)

Token

ERC-20: Golden Eaglez Kartel (GEK)
 

Overview

Max Total Supply

0 GEK

Holders

428

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

Balance
1 GEK
0xc985dcb4870e5dcdd3fd578ed351817f6980aace
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
goldenEaglez

Compiler Version
v0.8.6+commit.11564f7e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-09-08
*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/*
    Fully commented standard ERC721 Distilled from OpenZeppelin Docs
    Base for Building ERC721 by Martin McConnell
    All the utility without the fluff.
*/


interface IERC165 {
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

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`.
    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;
}

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);
}

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);
}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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

abstract contract Ownable is Context {
    address private _owner;

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

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

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

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

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

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

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

// ******************************************************************************************************************************
// **************************************************  Start of Main Contract ***************************************************
// ******************************************************************************************************************************

contract goldenEaglez is IERC721, Ownable {

    using Address for address;
    using Strings for uint256;
    
    // Token name
    string private _name;

    // Token symbol
    string private _symbol;
    
    // URI Root Location for Json Files
    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;
    
    // PandaBugz Specific Functionality
    bool public mintActive;
    bool private reentrancyLock;
    uint256 public price;
    uint256 public totalTokens = 10000;
    uint256 public numberMinted;
    uint256 private _maxMintsPerTxn;
    uint256 public earlyMint;
    
    mapping(address => bool) _whitelist;

    /**
     * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.
     */
    constructor() {
        _name = "Golden Eaglez Kartel";
        _symbol = "GEK";
        _baseURI = "https://herodev.mypinata.cloud/ipfs/QmUBv8AVVD3bh76J364ATqL22ZsuWmovuY2kSKEkCovGqd/";
        
        price = 8 * (10 ** 16); // 0.08eth
        _maxMintsPerTxn = 20;
        earlyMint = 1500;
    }

    //@dev See {IERC165-supportsInterface}. Interfaces Supported by this Standard
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return  interfaceId == type(IERC721).interfaceId ||
                interfaceId == type(IERC721Metadata).interfaceId ||
                interfaceId == type(IERC165).interfaceId ||
                interfaceId == goldenEaglez.onERC721Received.selector;
    }
    
    function withdraw() external onlyOwner {
        uint256 sendAmount = address(this).balance;
        
        (bool success, ) = msg.sender.call{value: sendAmount}("");
        require(success, "Transaction Unsuccessful");
    }
    
    function ownerMint(address _to, uint256 qty) external onlyOwner{
        uint256 mintSeedValue = numberMinted; //Store the starting value of the mint batch
        numberMinted += qty;
        
        for(uint256 i = 0; i < qty; i++) {
            _safeMint(_to, mintSeedValue + i);
        }
    }
    
    function mint(address _to, uint256 qty) external payable {
        require(msg.value >= qty * price, "Mint: Insufficient Funds");
        require(qty <= _maxMintsPerTxn, "Mint: Above Transaction Threshold!");
        
        if (mintActive) {
            require(qty < totalTokens - numberMinted, "Mint: Not enough NFTs remaining to fill order");
        } else {
            require(qty < earlyMint - numberMinted, "Mint: Not enough NFTs remaining to fill order");
            require(_whitelist[_msgSender()]);
        }
        
        require(!reentrancyLock);  //Lock up this whole function just in case
        reentrancyLock = true;
        
        uint256 mintSeedValue = numberMinted; //Store the starting value of the mint batch
        numberMinted += qty;
        
        //Handle ETH transactions
        uint256 cashIn = msg.value;
        uint256 cashChange = cashIn - (qty * price);
        
        //send tokens
        for(uint256 i = 0; i < qty; i++) {
            _safeMint(_to, mintSeedValue + i);
        }
                
        if (cashChange > 0){
            (bool success, ) = msg.sender.call{value: cashChange}("");
            require(success, "Mint: unable to send change to user");
        }
        reentrancyLock = false;
    }
    
    function burn(uint256 tokenID) external {
        require(_msgSender() == ownerOf(tokenID));
        _burn(tokenID);
    }
    
    //////////////////// Setters and Getters
    
    function whiteList(address account) external onlyOwner {
        _whitelist[account] = true;
    }
    
    function whiteListMany(address[] memory accounts) external onlyOwner {
        for (uint256 i; i < accounts.length; i++) {
            _whitelist[accounts[i]] = true;
        }
    }
    
    function checkWhitelist(address testAddress) external view returns (bool) {
        if (_whitelist[testAddress] == true) { return true; }
        return false;
    }
    
    function setMaximumMintThreshold(uint256 maxMints) external onlyOwner {
        _maxMintsPerTxn = maxMints;
    }
    
    function viewMaxMintThreshold() external view onlyOwner returns(uint256) {
        return _maxMintsPerTxn;
    }
    
    function setBaseURI(string memory newURI) public onlyOwner {
        _baseURI = newURI;
    }
    
    function setActive(bool setBoolValue) public onlyOwner {
        mintActive = setBoolValue;
    }
    
    function setPrice(uint256 newPrice) public onlyOwner {
        price = newPrice;
    }
    
    function setTotalTokens(uint256 numTokens) public onlyOwner {
        totalTokens = numTokens;
    }
    
    function getBalance(address tokenAddress) view external returns (uint256) {
        return _balances[tokenAddress];
    }
    
    // **************************************** Metadata Standard Functions **********
    //@dev Returns the token collection name.
    function name() external view returns (string memory){
        return _name;
    }

    //@dev Returns the token collection symbol.
    function symbol() external view returns (string memory){
        return _symbol;
    }

    //@dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.
    function tokenURI(uint256 tokenId) external view returns (string memory){   //Fill out file location here later
        require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");
        string memory tokenuri = string(abi.encodePacked(_baseURI, tokenId.toString(), ".json"));
        return tokenuri;
    }
    // *******************************************************************************

    /**
     * @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 {IERC721-approve}.
     */
    function approve(address to, uint256 tokenId) public virtual override {
        address owner = ownerOf(tokenId);
        require(to != owner, "ERC721: approval to current owner");

        require(
            msg.sender == owner || isApprovedForAll(owner, msg.sender),
            "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 != msg.sender, "ERC721: approve to caller");

        _operatorApprovals[msg.sender][operator] = approved;
        emit ApprovalForAll(msg.sender, 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(msg.sender, 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(msg.sender, 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 = ownerOf(tokenId);
        return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender));
    }

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

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

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

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

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

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

    /**
     * @dev Destroys `tokenId`.
     * The approval is cleared when the token is burned.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     *
     * Emits a {Transfer} event.
     */
    function _burn(uint256 tokenId) internal virtual {
        address owner = 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(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(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(msg.sender, from, tokenId, _data) returns (bytes4 retval) {
                return retval == IERC721Receiver(to).onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert("ERC721: transfer to non ERC721Receiver implementer");
                } else {
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }
    
    // *********************** ERC721 Token Receiver **********************
    /**
     * @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) {
        //InterfaceID=0x150b7a02
        return this.onERC721Received.selector;
    }

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

    receive() external payable {}
    
    fallback() external payable {}
}

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"},{"stateMutability":"payable","type":"fallback"},{"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":"tokenID","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"testAddress","type":"address"}],"name":"checkWhitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"earlyMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"}],"name":"getBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"qty","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numberMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_operator","type":"address"},{"internalType":"address","name":"_from","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","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":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"qty","type":"uint256"}],"name":"ownerMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"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":"bool","name":"setBoolValue","type":"bool"}],"name":"setActive","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":"newURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxMints","type":"uint256"}],"name":"setMaximumMintThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numTokens","type":"uint256"}],"name":"setTotalTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalTokens","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":"viewMaxMintThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"whiteList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"}],"name":"whiteListMany","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052612710600a553480156200001757600080fd5b50620000386200002c6200012c60201b60201c565b6200013460201b60201c565b6040518060400160405280601481526020017f476f6c64656e204561676c657a204b617274656c0000000000000000000000008152506001908051906020019062000085929190620001f8565b506040518060400160405280600381526020017f47454b000000000000000000000000000000000000000000000000000000000081525060029080519060200190620000d3929190620001f8565b50604051806080016040528060538152602001620047b0605391396003908051906020019062000105929190620001f8565b5067011c37937e0800006009819055506014600c819055506105dc600d819055506200030d565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200020690620002a8565b90600052602060002090601f0160209004810192826200022a576000855562000276565b82601f106200024557805160ff191683800117855562000276565b8280016001018555821562000276579182015b828111156200027557825182559160200191906001019062000258565b5b50905062000285919062000289565b5090565b5b80821115620002a45760008160009055506001016200028a565b5090565b60006002820490506001821680620002c157607f821691505b60208210811415620002d857620002d7620002de565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b614493806200031d6000396000f3fe6080604052600436106102135760003560e01c806370a0823111610118578063a035b1fe116100a0578063b88d4fde1161006f578063b88d4fde1461076c578063c87b56dd14610795578063e985e9c5146107d2578063f2fde38b1461080f578063f8b2cb4f146108385761021a565b8063a035b1fe146106c6578063a22cb465146106f1578063acec338a1461071a578063b0b92263146107435761021a565b80638ae1e673116100e75780638ae1e673146105f15780638b42035a1461061c5780638da5cb5b1461064757806391b7f5ed1461067257806395d89b411461069b5761021a565b806370a0823114610549578063715018a6146105865780637bddb3451461059d5780637e1c0c09146105c65761021a565b80633ccfd60b1161019b57806343d675651161016a57806343d6756514610466578063484b973c1461048f57806349a772b5146104b857806355f804b3146104e35780636352211e1461050c5761021a565b80633ccfd60b146103e157806340c10f19146103f857806342842e0e1461041457806342966c681461043d5761021a565b8063150b7a02116101e2578063150b7a02146102ea5780631950c2181461032757806323b872dd1461036457806325fd90f31461038d578063372c12b1146103b85761021a565b806301ffc9a71461021c57806306fdde0314610259578063081812fc14610284578063095ea7b3146102c15761021a565b3661021a57005b005b34801561022857600080fd5b50610243600480360381019061023e9190613055565b610875565b6040516102509190613653565b60405180910390f35b34801561026557600080fd5b5061026e6109fe565b60405161027b9190613689565b60405180910390f35b34801561029057600080fd5b506102ab60048036038101906102a691906130f8565b610a90565b6040516102b891906135ec565b60405180910390f35b3480156102cd57600080fd5b506102e860048036038101906102e39190612f9f565b610b15565b005b3480156102f657600080fd5b50610311600480360381019061030c9190612e54565b610c1f565b60405161031e919061366e565b60405180910390f35b34801561033357600080fd5b5061034e60048036038101906103499190612d94565b610c34565b60405161035b9190613653565b60405180910390f35b34801561037057600080fd5b5061038b60048036038101906103869190612e01565b610ca2565b005b34801561039957600080fd5b506103a2610cfb565b6040516103af9190613653565b60405180910390f35b3480156103c457600080fd5b506103df60048036038101906103da9190612d94565b610d0e565b005b3480156103ed57600080fd5b506103f6610de5565b005b610412600480360381019061040d9190612f9f565b610f16565b005b34801561042057600080fd5b5061043b60048036038101906104369190612e01565b611249565b005b34801561044957600080fd5b50610464600480360381019061045f91906130f8565b611269565b005b34801561047257600080fd5b5061048d60048036038101906104889190612fdf565b6112bc565b005b34801561049b57600080fd5b506104b660048036038101906104b19190612f9f565b6113cd565b005b3480156104c457600080fd5b506104cd6114a2565b6040516104da919061394b565b60405180910390f35b3480156104ef57600080fd5b5061050a600480360381019061050591906130af565b6114a8565b005b34801561051857600080fd5b50610533600480360381019061052e91906130f8565b61153e565b60405161054091906135ec565b60405180910390f35b34801561055557600080fd5b50610570600480360381019061056b9190612d94565b6115f0565b60405161057d919061394b565b60405180910390f35b34801561059257600080fd5b5061059b6116a8565b005b3480156105a957600080fd5b506105c460048036038101906105bf91906130f8565b611730565b005b3480156105d257600080fd5b506105db6117b6565b6040516105e8919061394b565b60405180910390f35b3480156105fd57600080fd5b506106066117bc565b604051610613919061394b565b60405180910390f35b34801561062857600080fd5b50610631611842565b60405161063e919061394b565b60405180910390f35b34801561065357600080fd5b5061065c611848565b60405161066991906135ec565b60405180910390f35b34801561067e57600080fd5b50610699600480360381019061069491906130f8565b611871565b005b3480156106a757600080fd5b506106b06118f7565b6040516106bd9190613689565b60405180910390f35b3480156106d257600080fd5b506106db611989565b6040516106e8919061394b565b60405180910390f35b3480156106fd57600080fd5b5061071860048036038101906107139190612f5f565b61198f565b005b34801561072657600080fd5b50610741600480360381019061073c9190613028565b611afb565b005b34801561074f57600080fd5b5061076a600480360381019061076591906130f8565b611b94565b005b34801561077857600080fd5b50610793600480360381019061078e9190612edc565b611c1a565b005b3480156107a157600080fd5b506107bc60048036038101906107b791906130f8565b611c75565b6040516107c99190613689565b60405180910390f35b3480156107de57600080fd5b506107f960048036038101906107f49190612dc1565b611cf7565b6040516108069190613653565b60405180910390f35b34801561081b57600080fd5b5061083660048036038101906108319190612d94565b611d8b565b005b34801561084457600080fd5b5061085f600480360381019061085a9190612d94565b611e83565b60405161086c919061394b565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061094057507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109a857507f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109f7575063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b606060018054610a0d90613c47565b80601f0160208091040260200160405190810160405280929190818152602001828054610a3990613c47565b8015610a865780601f10610a5b57610100808354040283529160200191610a86565b820191906000526020600020905b815481529060010190602001808311610a6957829003601f168201915b5050505050905090565b6000610a9b82611ecc565b610ada576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad19061384b565b60405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b208261153e565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b88906138eb565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610bd15750610bd08133611cf7565b5b610c10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c07906137cb565b60405180910390fd5b610c1a8383611f38565b505050565b600063150b7a0260e01b905095945050505050565b600060011515600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151415610c985760019050610c9d565b600090505b919050565b610cac3382611ff1565b610ceb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce29061390b565b60405180910390fd5b610cf68383836120cf565b505050565b600860009054906101000a900460ff1681565b610d1661232b565b73ffffffffffffffffffffffffffffffffffffffff16610d34611848565b73ffffffffffffffffffffffffffffffffffffffff1614610d8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d819061386b565b60405180910390fd5b6001600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b610ded61232b565b73ffffffffffffffffffffffffffffffffffffffff16610e0b611848565b73ffffffffffffffffffffffffffffffffffffffff1614610e61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e589061386b565b60405180910390fd5b600047905060003373ffffffffffffffffffffffffffffffffffffffff1682604051610e8c906135d7565b60006040518083038185875af1925050503d8060008114610ec9576040519150601f19603f3d011682016040523d82523d6000602084013e610ece565b606091505b5050905080610f12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f099061372b565b60405180910390fd5b5050565b60095481610f249190613b03565b341015610f66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5d9061388b565b60405180910390fd5b600c54811115610fab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa29061378b565b60405180910390fd5b600860009054906101000a900460ff161561101657600b54600a54610fd09190613b5d565b8110611011576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110089061392b565b60405180910390fd5b6110c5565b600b54600d546110269190613b5d565b8110611067576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105e9061392b565b60405180910390fd5b600e600061107361232b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166110c457600080fd5b5b600860019054906101000a900460ff16156110df57600080fd5b6001600860016101000a81548160ff0219169083151502179055506000600b54905081600b60008282546111139190613a7c565b92505081905550600034905060006009548461112f9190613b03565b8261113a9190613b5d565b905060005b8481101561116f5761115c8682866111579190613a7c565b612333565b808061116790613caa565b91505061113f565b5060008111156112275760003373ffffffffffffffffffffffffffffffffffffffff168260405161119f906135d7565b60006040518083038185875af1925050503d80600081146111dc576040519150601f19603f3d011682016040523d82523d6000602084013e6111e1565b606091505b5050905080611225576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121c906136ab565b60405180910390fd5b505b6000600860016101000a81548160ff0219169083151502179055505050505050565b61126483838360405180602001604052806000815250611c1a565b505050565b6112728161153e565b73ffffffffffffffffffffffffffffffffffffffff1661129061232b565b73ffffffffffffffffffffffffffffffffffffffff16146112b057600080fd5b6112b981612351565b50565b6112c461232b565b73ffffffffffffffffffffffffffffffffffffffff166112e2611848565b73ffffffffffffffffffffffffffffffffffffffff1614611338576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132f9061386b565b60405180910390fd5b60005b81518110156113c9576001600e600084848151811061135d5761135c613db1565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806113c190613caa565b91505061133b565b5050565b6113d561232b565b73ffffffffffffffffffffffffffffffffffffffff166113f3611848565b73ffffffffffffffffffffffffffffffffffffffff1614611449576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114409061386b565b60405180910390fd5b6000600b54905081600b60008282546114629190613a7c565b9250508190555060005b8281101561149c576114898482846114849190613a7c565b612333565b808061149490613caa565b91505061146c565b50505050565b600b5481565b6114b061232b565b73ffffffffffffffffffffffffffffffffffffffff166114ce611848565b73ffffffffffffffffffffffffffffffffffffffff1614611524576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151b9061386b565b60405180910390fd5b806003908051906020019061153a929190612ab4565b5050565b6000806004600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156115e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115de9061380b565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611661576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611658906137eb565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6116b061232b565b73ffffffffffffffffffffffffffffffffffffffff166116ce611848565b73ffffffffffffffffffffffffffffffffffffffff1614611724576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171b9061386b565b60405180910390fd5b61172e6000612462565b565b61173861232b565b73ffffffffffffffffffffffffffffffffffffffff16611756611848565b73ffffffffffffffffffffffffffffffffffffffff16146117ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a39061386b565b60405180910390fd5b80600c8190555050565b600a5481565b60006117c661232b565b73ffffffffffffffffffffffffffffffffffffffff166117e4611848565b73ffffffffffffffffffffffffffffffffffffffff161461183a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118319061386b565b60405180910390fd5b600c54905090565b600d5481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61187961232b565b73ffffffffffffffffffffffffffffffffffffffff16611897611848565b73ffffffffffffffffffffffffffffffffffffffff16146118ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e49061386b565b60405180910390fd5b8060098190555050565b60606002805461190690613c47565b80601f016020809104026020016040519081016040528092919081815260200182805461193290613c47565b801561197f5780601f106119545761010080835404028352916020019161197f565b820191906000526020600020905b81548152906001019060200180831161196257829003601f168201915b5050505050905090565b60095481565b3373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156119fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f59061376b565b60405180910390fd5b80600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611aef9190613653565b60405180910390a35050565b611b0361232b565b73ffffffffffffffffffffffffffffffffffffffff16611b21611848565b73ffffffffffffffffffffffffffffffffffffffff1614611b77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6e9061386b565b60405180910390fd5b80600860006101000a81548160ff02191690831515021790555050565b611b9c61232b565b73ffffffffffffffffffffffffffffffffffffffff16611bba611848565b73ffffffffffffffffffffffffffffffffffffffff1614611c10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c079061386b565b60405180910390fd5b80600a8190555050565b611c243383611ff1565b611c63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5a9061390b565b60405180910390fd5b611c6f84848484612526565b50505050565b6060611c8082611ecc565b611cbf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb6906138cb565b60405180910390fd5b60006003611ccc84612582565b604051602001611cdd9291906135a8565b604051602081830303815290604052905080915050919050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611d9361232b565b73ffffffffffffffffffffffffffffffffffffffff16611db1611848565b73ffffffffffffffffffffffffffffffffffffffff1614611e07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dfe9061386b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611e77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6e906136eb565b60405180910390fd5b611e8081612462565b50565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166004600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816006600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611fab8361153e565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611ffc82611ecc565b61203b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612032906137ab565b60405180910390fd5b60006120468361153e565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806120b557508373ffffffffffffffffffffffffffffffffffffffff1661209d84610a90565b73ffffffffffffffffffffffffffffffffffffffff16145b806120c657506120c58185611cf7565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166120ef8261153e565b73ffffffffffffffffffffffffffffffffffffffff1614612145576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213c906138ab565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156121b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ac9061374b565b60405180910390fd5b6121c08383836126e3565b6121cb600082611f38565b6001600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461221b9190613b5d565b925050819055506001600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546122729190613a7c565b92505081905550816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600033905090565b61234d8282604051806020016040528060008152506126e8565b5050565b600061235c8261153e565b905061236a816000846126e3565b612375600083611f38565b6001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546123c59190613b5d565b925050819055506004600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6125318484846120cf565b61253d84848484612743565b61257c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612573906136cb565b60405180910390fd5b50505050565b606060008214156125ca576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506126de565b600082905060005b600082146125fc5780806125e590613caa565b915050600a826125f59190613ad2565b91506125d2565b60008167ffffffffffffffff81111561261857612617613de0565b5b6040519080825280601f01601f19166020018201604052801561264a5781602001600182028036833780820191505090505b5090505b600085146126d7576001826126639190613b5d565b9150600a856126729190613cf3565b603061267e9190613a7c565b60f81b81838151811061269457612693613db1565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856126d09190613ad2565b945061264e565b8093505050505b919050565b505050565b6126f283836128d3565b6126ff6000848484612743565b61273e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612735906136cb565b60405180910390fd5b505050565b60006127648473ffffffffffffffffffffffffffffffffffffffff16612aa1565b156128c6578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02338786866040518563ffffffff1660e01b81526004016127a89493929190613607565b602060405180830381600087803b1580156127c257600080fd5b505af19250505080156127f357506040513d601f19601f820116820180604052508101906127f09190613082565b60015b612876573d8060008114612823576040519150601f19603f3d011682016040523d82523d6000602084013e612828565b606091505b5060008151141561286e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612865906136cb565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506128cb565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612943576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161293a9061382b565b60405180910390fd5b61294c81611ecc565b1561298c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129839061370b565b60405180910390fd5b612998600083836126e3565b6001600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546129e89190613a7c565b92505081905550816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b828054612ac090613c47565b90600052602060002090601f016020900481019282612ae25760008555612b29565b82601f10612afb57805160ff1916838001178555612b29565b82800160010185558215612b29579182015b82811115612b28578251825591602001919060010190612b0d565b5b509050612b369190612b3a565b5090565b5b80821115612b53576000816000905550600101612b3b565b5090565b6000612b6a612b658461398b565b613966565b90508083825260208201905082856020860282011115612b8d57612b8c613e19565b5b60005b85811015612bbd5781612ba38882612c4b565b845260208401935060208301925050600181019050612b90565b5050509392505050565b6000612bda612bd5846139b7565b613966565b905082815260208101848484011115612bf657612bf5613e1e565b5b612c01848285613c05565b509392505050565b6000612c1c612c17846139e8565b613966565b905082815260208101848484011115612c3857612c37613e1e565b5b612c43848285613c05565b509392505050565b600081359050612c5a81614401565b92915050565b600082601f830112612c7557612c74613e14565b5b8135612c85848260208601612b57565b91505092915050565b600081359050612c9d81614418565b92915050565b600081359050612cb28161442f565b92915050565b600081519050612cc78161442f565b92915050565b60008083601f840112612ce357612ce2613e14565b5b8235905067ffffffffffffffff811115612d0057612cff613e0f565b5b602083019150836001820283011115612d1c57612d1b613e19565b5b9250929050565b600082601f830112612d3857612d37613e14565b5b8135612d48848260208601612bc7565b91505092915050565b600082601f830112612d6657612d65613e14565b5b8135612d76848260208601612c09565b91505092915050565b600081359050612d8e81614446565b92915050565b600060208284031215612daa57612da9613e28565b5b6000612db884828501612c4b565b91505092915050565b60008060408385031215612dd857612dd7613e28565b5b6000612de685828601612c4b565b9250506020612df785828601612c4b565b9150509250929050565b600080600060608486031215612e1a57612e19613e28565b5b6000612e2886828701612c4b565b9350506020612e3986828701612c4b565b9250506040612e4a86828701612d7f565b9150509250925092565b600080600080600060808688031215612e7057612e6f613e28565b5b6000612e7e88828901612c4b565b9550506020612e8f88828901612c4b565b9450506040612ea088828901612d7f565b935050606086013567ffffffffffffffff811115612ec157612ec0613e23565b5b612ecd88828901612ccd565b92509250509295509295909350565b60008060008060808587031215612ef657612ef5613e28565b5b6000612f0487828801612c4b565b9450506020612f1587828801612c4b565b9350506040612f2687828801612d7f565b925050606085013567ffffffffffffffff811115612f4757612f46613e23565b5b612f5387828801612d23565b91505092959194509250565b60008060408385031215612f7657612f75613e28565b5b6000612f8485828601612c4b565b9250506020612f9585828601612c8e565b9150509250929050565b60008060408385031215612fb657612fb5613e28565b5b6000612fc485828601612c4b565b9250506020612fd585828601612d7f565b9150509250929050565b600060208284031215612ff557612ff4613e28565b5b600082013567ffffffffffffffff81111561301357613012613e23565b5b61301f84828501612c60565b91505092915050565b60006020828403121561303e5761303d613e28565b5b600061304c84828501612c8e565b91505092915050565b60006020828403121561306b5761306a613e28565b5b600061307984828501612ca3565b91505092915050565b60006020828403121561309857613097613e28565b5b60006130a684828501612cb8565b91505092915050565b6000602082840312156130c5576130c4613e28565b5b600082013567ffffffffffffffff8111156130e3576130e2613e23565b5b6130ef84828501612d51565b91505092915050565b60006020828403121561310e5761310d613e28565b5b600061311c84828501612d7f565b91505092915050565b61312e81613b91565b82525050565b61313d81613ba3565b82525050565b61314c81613baf565b82525050565b600061315d82613a2e565b6131678185613a44565b9350613177818560208601613c14565b61318081613e2d565b840191505092915050565b600061319682613a39565b6131a08185613a60565b93506131b0818560208601613c14565b6131b981613e2d565b840191505092915050565b60006131cf82613a39565b6131d98185613a71565b93506131e9818560208601613c14565b80840191505092915050565b6000815461320281613c47565b61320c8186613a71565b9450600182166000811461322757600181146132385761326b565b60ff1983168652818601935061326b565b61324185613a19565b60005b8381101561326357815481890152600182019150602081019050613244565b838801955050505b50505092915050565b6000613281602383613a60565b915061328c82613e3e565b604082019050919050565b60006132a4603283613a60565b91506132af82613e8d565b604082019050919050565b60006132c7602683613a60565b91506132d282613edc565b604082019050919050565b60006132ea601c83613a60565b91506132f582613f2b565b602082019050919050565b600061330d601883613a60565b915061331882613f54565b602082019050919050565b6000613330602483613a60565b915061333b82613f7d565b604082019050919050565b6000613353601983613a60565b915061335e82613fcc565b602082019050919050565b6000613376602283613a60565b915061338182613ff5565b604082019050919050565b6000613399602c83613a60565b91506133a482614044565b604082019050919050565b60006133bc603883613a60565b91506133c782614093565b604082019050919050565b60006133df602a83613a60565b91506133ea826140e2565b604082019050919050565b6000613402602983613a60565b915061340d82614131565b604082019050919050565b6000613425602083613a60565b915061343082614180565b602082019050919050565b6000613448602c83613a60565b9150613453826141a9565b604082019050919050565b600061346b600583613a71565b9150613476826141f8565b600582019050919050565b600061348e602083613a60565b915061349982614221565b602082019050919050565b60006134b1601883613a60565b91506134bc8261424a565b602082019050919050565b60006134d4602983613a60565b91506134df82614273565b604082019050919050565b60006134f7602f83613a60565b9150613502826142c2565b604082019050919050565b600061351a602183613a60565b915061352582614311565b604082019050919050565b600061353d600083613a55565b915061354882614360565b600082019050919050565b6000613560603183613a60565b915061356b82614363565b604082019050919050565b6000613583602d83613a60565b915061358e826143b2565b604082019050919050565b6135a281613bfb565b82525050565b60006135b482856131f5565b91506135c082846131c4565b91506135cb8261345e565b91508190509392505050565b60006135e282613530565b9150819050919050565b60006020820190506136016000830184613125565b92915050565b600060808201905061361c6000830187613125565b6136296020830186613125565b6136366040830185613599565b81810360608301526136488184613152565b905095945050505050565b60006020820190506136686000830184613134565b92915050565b60006020820190506136836000830184613143565b92915050565b600060208201905081810360008301526136a3818461318b565b905092915050565b600060208201905081810360008301526136c481613274565b9050919050565b600060208201905081810360008301526136e481613297565b9050919050565b60006020820190508181036000830152613704816132ba565b9050919050565b60006020820190508181036000830152613724816132dd565b9050919050565b6000602082019050818103600083015261374481613300565b9050919050565b6000602082019050818103600083015261376481613323565b9050919050565b6000602082019050818103600083015261378481613346565b9050919050565b600060208201905081810360008301526137a481613369565b9050919050565b600060208201905081810360008301526137c48161338c565b9050919050565b600060208201905081810360008301526137e4816133af565b9050919050565b60006020820190508181036000830152613804816133d2565b9050919050565b60006020820190508181036000830152613824816133f5565b9050919050565b6000602082019050818103600083015261384481613418565b9050919050565b600060208201905081810360008301526138648161343b565b9050919050565b6000602082019050818103600083015261388481613481565b9050919050565b600060208201905081810360008301526138a4816134a4565b9050919050565b600060208201905081810360008301526138c4816134c7565b9050919050565b600060208201905081810360008301526138e4816134ea565b9050919050565b600060208201905081810360008301526139048161350d565b9050919050565b6000602082019050818103600083015261392481613553565b9050919050565b6000602082019050818103600083015261394481613576565b9050919050565b60006020820190506139606000830184613599565b92915050565b6000613970613981565b905061397c8282613c79565b919050565b6000604051905090565b600067ffffffffffffffff8211156139a6576139a5613de0565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156139d2576139d1613de0565b5b6139db82613e2d565b9050602081019050919050565b600067ffffffffffffffff821115613a0357613a02613de0565b5b613a0c82613e2d565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000613a8782613bfb565b9150613a9283613bfb565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613ac757613ac6613d24565b5b828201905092915050565b6000613add82613bfb565b9150613ae883613bfb565b925082613af857613af7613d53565b5b828204905092915050565b6000613b0e82613bfb565b9150613b1983613bfb565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613b5257613b51613d24565b5b828202905092915050565b6000613b6882613bfb565b9150613b7383613bfb565b925082821015613b8657613b85613d24565b5b828203905092915050565b6000613b9c82613bdb565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613c32578082015181840152602081019050613c17565b83811115613c41576000848401525b50505050565b60006002820490506001821680613c5f57607f821691505b60208210811415613c7357613c72613d82565b5b50919050565b613c8282613e2d565b810181811067ffffffffffffffff82111715613ca157613ca0613de0565b5b80604052505050565b6000613cb582613bfb565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613ce857613ce7613d24565b5b600182019050919050565b6000613cfe82613bfb565b9150613d0983613bfb565b925082613d1957613d18613d53565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4d696e743a20756e61626c6520746f2073656e64206368616e676520746f207560008201527f7365720000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f5472616e73616374696f6e20556e7375636365737366756c0000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4d696e743a2041626f7665205472616e73616374696f6e205468726573686f6c60008201527f6421000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4d696e743a20496e73756666696369656e742046756e64730000000000000000600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f4d696e743a204e6f7420656e6f756768204e4654732072656d61696e696e672060008201527f746f2066696c6c206f7264657200000000000000000000000000000000000000602082015250565b61440a81613b91565b811461441557600080fd5b50565b61442181613ba3565b811461442c57600080fd5b50565b61443881613baf565b811461444357600080fd5b50565b61444f81613bfb565b811461445a57600080fd5b5056fea264697066735822122092251307dbd8cb9c3585032dac1b989e17acf8f90550b15b8d8f0a773782f87e64736f6c6343000806003368747470733a2f2f6865726f6465762e6d7970696e6174612e636c6f75642f697066732f516d554276384156564433626837364a3336344154714c32325a7375576d6f767559326b534b456b436f764771642f

Deployed Bytecode

0x6080604052600436106102135760003560e01c806370a0823111610118578063a035b1fe116100a0578063b88d4fde1161006f578063b88d4fde1461076c578063c87b56dd14610795578063e985e9c5146107d2578063f2fde38b1461080f578063f8b2cb4f146108385761021a565b8063a035b1fe146106c6578063a22cb465146106f1578063acec338a1461071a578063b0b92263146107435761021a565b80638ae1e673116100e75780638ae1e673146105f15780638b42035a1461061c5780638da5cb5b1461064757806391b7f5ed1461067257806395d89b411461069b5761021a565b806370a0823114610549578063715018a6146105865780637bddb3451461059d5780637e1c0c09146105c65761021a565b80633ccfd60b1161019b57806343d675651161016a57806343d6756514610466578063484b973c1461048f57806349a772b5146104b857806355f804b3146104e35780636352211e1461050c5761021a565b80633ccfd60b146103e157806340c10f19146103f857806342842e0e1461041457806342966c681461043d5761021a565b8063150b7a02116101e2578063150b7a02146102ea5780631950c2181461032757806323b872dd1461036457806325fd90f31461038d578063372c12b1146103b85761021a565b806301ffc9a71461021c57806306fdde0314610259578063081812fc14610284578063095ea7b3146102c15761021a565b3661021a57005b005b34801561022857600080fd5b50610243600480360381019061023e9190613055565b610875565b6040516102509190613653565b60405180910390f35b34801561026557600080fd5b5061026e6109fe565b60405161027b9190613689565b60405180910390f35b34801561029057600080fd5b506102ab60048036038101906102a691906130f8565b610a90565b6040516102b891906135ec565b60405180910390f35b3480156102cd57600080fd5b506102e860048036038101906102e39190612f9f565b610b15565b005b3480156102f657600080fd5b50610311600480360381019061030c9190612e54565b610c1f565b60405161031e919061366e565b60405180910390f35b34801561033357600080fd5b5061034e60048036038101906103499190612d94565b610c34565b60405161035b9190613653565b60405180910390f35b34801561037057600080fd5b5061038b60048036038101906103869190612e01565b610ca2565b005b34801561039957600080fd5b506103a2610cfb565b6040516103af9190613653565b60405180910390f35b3480156103c457600080fd5b506103df60048036038101906103da9190612d94565b610d0e565b005b3480156103ed57600080fd5b506103f6610de5565b005b610412600480360381019061040d9190612f9f565b610f16565b005b34801561042057600080fd5b5061043b60048036038101906104369190612e01565b611249565b005b34801561044957600080fd5b50610464600480360381019061045f91906130f8565b611269565b005b34801561047257600080fd5b5061048d60048036038101906104889190612fdf565b6112bc565b005b34801561049b57600080fd5b506104b660048036038101906104b19190612f9f565b6113cd565b005b3480156104c457600080fd5b506104cd6114a2565b6040516104da919061394b565b60405180910390f35b3480156104ef57600080fd5b5061050a600480360381019061050591906130af565b6114a8565b005b34801561051857600080fd5b50610533600480360381019061052e91906130f8565b61153e565b60405161054091906135ec565b60405180910390f35b34801561055557600080fd5b50610570600480360381019061056b9190612d94565b6115f0565b60405161057d919061394b565b60405180910390f35b34801561059257600080fd5b5061059b6116a8565b005b3480156105a957600080fd5b506105c460048036038101906105bf91906130f8565b611730565b005b3480156105d257600080fd5b506105db6117b6565b6040516105e8919061394b565b60405180910390f35b3480156105fd57600080fd5b506106066117bc565b604051610613919061394b565b60405180910390f35b34801561062857600080fd5b50610631611842565b60405161063e919061394b565b60405180910390f35b34801561065357600080fd5b5061065c611848565b60405161066991906135ec565b60405180910390f35b34801561067e57600080fd5b50610699600480360381019061069491906130f8565b611871565b005b3480156106a757600080fd5b506106b06118f7565b6040516106bd9190613689565b60405180910390f35b3480156106d257600080fd5b506106db611989565b6040516106e8919061394b565b60405180910390f35b3480156106fd57600080fd5b5061071860048036038101906107139190612f5f565b61198f565b005b34801561072657600080fd5b50610741600480360381019061073c9190613028565b611afb565b005b34801561074f57600080fd5b5061076a600480360381019061076591906130f8565b611b94565b005b34801561077857600080fd5b50610793600480360381019061078e9190612edc565b611c1a565b005b3480156107a157600080fd5b506107bc60048036038101906107b791906130f8565b611c75565b6040516107c99190613689565b60405180910390f35b3480156107de57600080fd5b506107f960048036038101906107f49190612dc1565b611cf7565b6040516108069190613653565b60405180910390f35b34801561081b57600080fd5b5061083660048036038101906108319190612d94565b611d8b565b005b34801561084457600080fd5b5061085f600480360381019061085a9190612d94565b611e83565b60405161086c919061394b565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061094057507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109a857507f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109f7575063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b606060018054610a0d90613c47565b80601f0160208091040260200160405190810160405280929190818152602001828054610a3990613c47565b8015610a865780601f10610a5b57610100808354040283529160200191610a86565b820191906000526020600020905b815481529060010190602001808311610a6957829003601f168201915b5050505050905090565b6000610a9b82611ecc565b610ada576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad19061384b565b60405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b208261153e565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b88906138eb565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610bd15750610bd08133611cf7565b5b610c10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c07906137cb565b60405180910390fd5b610c1a8383611f38565b505050565b600063150b7a0260e01b905095945050505050565b600060011515600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151415610c985760019050610c9d565b600090505b919050565b610cac3382611ff1565b610ceb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce29061390b565b60405180910390fd5b610cf68383836120cf565b505050565b600860009054906101000a900460ff1681565b610d1661232b565b73ffffffffffffffffffffffffffffffffffffffff16610d34611848565b73ffffffffffffffffffffffffffffffffffffffff1614610d8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d819061386b565b60405180910390fd5b6001600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b610ded61232b565b73ffffffffffffffffffffffffffffffffffffffff16610e0b611848565b73ffffffffffffffffffffffffffffffffffffffff1614610e61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e589061386b565b60405180910390fd5b600047905060003373ffffffffffffffffffffffffffffffffffffffff1682604051610e8c906135d7565b60006040518083038185875af1925050503d8060008114610ec9576040519150601f19603f3d011682016040523d82523d6000602084013e610ece565b606091505b5050905080610f12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f099061372b565b60405180910390fd5b5050565b60095481610f249190613b03565b341015610f66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5d9061388b565b60405180910390fd5b600c54811115610fab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa29061378b565b60405180910390fd5b600860009054906101000a900460ff161561101657600b54600a54610fd09190613b5d565b8110611011576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110089061392b565b60405180910390fd5b6110c5565b600b54600d546110269190613b5d565b8110611067576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105e9061392b565b60405180910390fd5b600e600061107361232b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166110c457600080fd5b5b600860019054906101000a900460ff16156110df57600080fd5b6001600860016101000a81548160ff0219169083151502179055506000600b54905081600b60008282546111139190613a7c565b92505081905550600034905060006009548461112f9190613b03565b8261113a9190613b5d565b905060005b8481101561116f5761115c8682866111579190613a7c565b612333565b808061116790613caa565b91505061113f565b5060008111156112275760003373ffffffffffffffffffffffffffffffffffffffff168260405161119f906135d7565b60006040518083038185875af1925050503d80600081146111dc576040519150601f19603f3d011682016040523d82523d6000602084013e6111e1565b606091505b5050905080611225576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121c906136ab565b60405180910390fd5b505b6000600860016101000a81548160ff0219169083151502179055505050505050565b61126483838360405180602001604052806000815250611c1a565b505050565b6112728161153e565b73ffffffffffffffffffffffffffffffffffffffff1661129061232b565b73ffffffffffffffffffffffffffffffffffffffff16146112b057600080fd5b6112b981612351565b50565b6112c461232b565b73ffffffffffffffffffffffffffffffffffffffff166112e2611848565b73ffffffffffffffffffffffffffffffffffffffff1614611338576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132f9061386b565b60405180910390fd5b60005b81518110156113c9576001600e600084848151811061135d5761135c613db1565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806113c190613caa565b91505061133b565b5050565b6113d561232b565b73ffffffffffffffffffffffffffffffffffffffff166113f3611848565b73ffffffffffffffffffffffffffffffffffffffff1614611449576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114409061386b565b60405180910390fd5b6000600b54905081600b60008282546114629190613a7c565b9250508190555060005b8281101561149c576114898482846114849190613a7c565b612333565b808061149490613caa565b91505061146c565b50505050565b600b5481565b6114b061232b565b73ffffffffffffffffffffffffffffffffffffffff166114ce611848565b73ffffffffffffffffffffffffffffffffffffffff1614611524576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151b9061386b565b60405180910390fd5b806003908051906020019061153a929190612ab4565b5050565b6000806004600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156115e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115de9061380b565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611661576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611658906137eb565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6116b061232b565b73ffffffffffffffffffffffffffffffffffffffff166116ce611848565b73ffffffffffffffffffffffffffffffffffffffff1614611724576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171b9061386b565b60405180910390fd5b61172e6000612462565b565b61173861232b565b73ffffffffffffffffffffffffffffffffffffffff16611756611848565b73ffffffffffffffffffffffffffffffffffffffff16146117ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a39061386b565b60405180910390fd5b80600c8190555050565b600a5481565b60006117c661232b565b73ffffffffffffffffffffffffffffffffffffffff166117e4611848565b73ffffffffffffffffffffffffffffffffffffffff161461183a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118319061386b565b60405180910390fd5b600c54905090565b600d5481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61187961232b565b73ffffffffffffffffffffffffffffffffffffffff16611897611848565b73ffffffffffffffffffffffffffffffffffffffff16146118ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e49061386b565b60405180910390fd5b8060098190555050565b60606002805461190690613c47565b80601f016020809104026020016040519081016040528092919081815260200182805461193290613c47565b801561197f5780601f106119545761010080835404028352916020019161197f565b820191906000526020600020905b81548152906001019060200180831161196257829003601f168201915b5050505050905090565b60095481565b3373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156119fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f59061376b565b60405180910390fd5b80600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611aef9190613653565b60405180910390a35050565b611b0361232b565b73ffffffffffffffffffffffffffffffffffffffff16611b21611848565b73ffffffffffffffffffffffffffffffffffffffff1614611b77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6e9061386b565b60405180910390fd5b80600860006101000a81548160ff02191690831515021790555050565b611b9c61232b565b73ffffffffffffffffffffffffffffffffffffffff16611bba611848565b73ffffffffffffffffffffffffffffffffffffffff1614611c10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c079061386b565b60405180910390fd5b80600a8190555050565b611c243383611ff1565b611c63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5a9061390b565b60405180910390fd5b611c6f84848484612526565b50505050565b6060611c8082611ecc565b611cbf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb6906138cb565b60405180910390fd5b60006003611ccc84612582565b604051602001611cdd9291906135a8565b604051602081830303815290604052905080915050919050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611d9361232b565b73ffffffffffffffffffffffffffffffffffffffff16611db1611848565b73ffffffffffffffffffffffffffffffffffffffff1614611e07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dfe9061386b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611e77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6e906136eb565b60405180910390fd5b611e8081612462565b50565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166004600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816006600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611fab8361153e565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611ffc82611ecc565b61203b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612032906137ab565b60405180910390fd5b60006120468361153e565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806120b557508373ffffffffffffffffffffffffffffffffffffffff1661209d84610a90565b73ffffffffffffffffffffffffffffffffffffffff16145b806120c657506120c58185611cf7565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166120ef8261153e565b73ffffffffffffffffffffffffffffffffffffffff1614612145576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213c906138ab565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156121b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ac9061374b565b60405180910390fd5b6121c08383836126e3565b6121cb600082611f38565b6001600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461221b9190613b5d565b925050819055506001600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546122729190613a7c565b92505081905550816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600033905090565b61234d8282604051806020016040528060008152506126e8565b5050565b600061235c8261153e565b905061236a816000846126e3565b612375600083611f38565b6001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546123c59190613b5d565b925050819055506004600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6125318484846120cf565b61253d84848484612743565b61257c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612573906136cb565b60405180910390fd5b50505050565b606060008214156125ca576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506126de565b600082905060005b600082146125fc5780806125e590613caa565b915050600a826125f59190613ad2565b91506125d2565b60008167ffffffffffffffff81111561261857612617613de0565b5b6040519080825280601f01601f19166020018201604052801561264a5781602001600182028036833780820191505090505b5090505b600085146126d7576001826126639190613b5d565b9150600a856126729190613cf3565b603061267e9190613a7c565b60f81b81838151811061269457612693613db1565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856126d09190613ad2565b945061264e565b8093505050505b919050565b505050565b6126f283836128d3565b6126ff6000848484612743565b61273e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612735906136cb565b60405180910390fd5b505050565b60006127648473ffffffffffffffffffffffffffffffffffffffff16612aa1565b156128c6578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02338786866040518563ffffffff1660e01b81526004016127a89493929190613607565b602060405180830381600087803b1580156127c257600080fd5b505af19250505080156127f357506040513d601f19601f820116820180604052508101906127f09190613082565b60015b612876573d8060008114612823576040519150601f19603f3d011682016040523d82523d6000602084013e612828565b606091505b5060008151141561286e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612865906136cb565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506128cb565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612943576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161293a9061382b565b60405180910390fd5b61294c81611ecc565b1561298c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129839061370b565b60405180910390fd5b612998600083836126e3565b6001600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546129e89190613a7c565b92505081905550816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b828054612ac090613c47565b90600052602060002090601f016020900481019282612ae25760008555612b29565b82601f10612afb57805160ff1916838001178555612b29565b82800160010185558215612b29579182015b82811115612b28578251825591602001919060010190612b0d565b5b509050612b369190612b3a565b5090565b5b80821115612b53576000816000905550600101612b3b565b5090565b6000612b6a612b658461398b565b613966565b90508083825260208201905082856020860282011115612b8d57612b8c613e19565b5b60005b85811015612bbd5781612ba38882612c4b565b845260208401935060208301925050600181019050612b90565b5050509392505050565b6000612bda612bd5846139b7565b613966565b905082815260208101848484011115612bf657612bf5613e1e565b5b612c01848285613c05565b509392505050565b6000612c1c612c17846139e8565b613966565b905082815260208101848484011115612c3857612c37613e1e565b5b612c43848285613c05565b509392505050565b600081359050612c5a81614401565b92915050565b600082601f830112612c7557612c74613e14565b5b8135612c85848260208601612b57565b91505092915050565b600081359050612c9d81614418565b92915050565b600081359050612cb28161442f565b92915050565b600081519050612cc78161442f565b92915050565b60008083601f840112612ce357612ce2613e14565b5b8235905067ffffffffffffffff811115612d0057612cff613e0f565b5b602083019150836001820283011115612d1c57612d1b613e19565b5b9250929050565b600082601f830112612d3857612d37613e14565b5b8135612d48848260208601612bc7565b91505092915050565b600082601f830112612d6657612d65613e14565b5b8135612d76848260208601612c09565b91505092915050565b600081359050612d8e81614446565b92915050565b600060208284031215612daa57612da9613e28565b5b6000612db884828501612c4b565b91505092915050565b60008060408385031215612dd857612dd7613e28565b5b6000612de685828601612c4b565b9250506020612df785828601612c4b565b9150509250929050565b600080600060608486031215612e1a57612e19613e28565b5b6000612e2886828701612c4b565b9350506020612e3986828701612c4b565b9250506040612e4a86828701612d7f565b9150509250925092565b600080600080600060808688031215612e7057612e6f613e28565b5b6000612e7e88828901612c4b565b9550506020612e8f88828901612c4b565b9450506040612ea088828901612d7f565b935050606086013567ffffffffffffffff811115612ec157612ec0613e23565b5b612ecd88828901612ccd565b92509250509295509295909350565b60008060008060808587031215612ef657612ef5613e28565b5b6000612f0487828801612c4b565b9450506020612f1587828801612c4b565b9350506040612f2687828801612d7f565b925050606085013567ffffffffffffffff811115612f4757612f46613e23565b5b612f5387828801612d23565b91505092959194509250565b60008060408385031215612f7657612f75613e28565b5b6000612f8485828601612c4b565b9250506020612f9585828601612c8e565b9150509250929050565b60008060408385031215612fb657612fb5613e28565b5b6000612fc485828601612c4b565b9250506020612fd585828601612d7f565b9150509250929050565b600060208284031215612ff557612ff4613e28565b5b600082013567ffffffffffffffff81111561301357613012613e23565b5b61301f84828501612c60565b91505092915050565b60006020828403121561303e5761303d613e28565b5b600061304c84828501612c8e565b91505092915050565b60006020828403121561306b5761306a613e28565b5b600061307984828501612ca3565b91505092915050565b60006020828403121561309857613097613e28565b5b60006130a684828501612cb8565b91505092915050565b6000602082840312156130c5576130c4613e28565b5b600082013567ffffffffffffffff8111156130e3576130e2613e23565b5b6130ef84828501612d51565b91505092915050565b60006020828403121561310e5761310d613e28565b5b600061311c84828501612d7f565b91505092915050565b61312e81613b91565b82525050565b61313d81613ba3565b82525050565b61314c81613baf565b82525050565b600061315d82613a2e565b6131678185613a44565b9350613177818560208601613c14565b61318081613e2d565b840191505092915050565b600061319682613a39565b6131a08185613a60565b93506131b0818560208601613c14565b6131b981613e2d565b840191505092915050565b60006131cf82613a39565b6131d98185613a71565b93506131e9818560208601613c14565b80840191505092915050565b6000815461320281613c47565b61320c8186613a71565b9450600182166000811461322757600181146132385761326b565b60ff1983168652818601935061326b565b61324185613a19565b60005b8381101561326357815481890152600182019150602081019050613244565b838801955050505b50505092915050565b6000613281602383613a60565b915061328c82613e3e565b604082019050919050565b60006132a4603283613a60565b91506132af82613e8d565b604082019050919050565b60006132c7602683613a60565b91506132d282613edc565b604082019050919050565b60006132ea601c83613a60565b91506132f582613f2b565b602082019050919050565b600061330d601883613a60565b915061331882613f54565b602082019050919050565b6000613330602483613a60565b915061333b82613f7d565b604082019050919050565b6000613353601983613a60565b915061335e82613fcc565b602082019050919050565b6000613376602283613a60565b915061338182613ff5565b604082019050919050565b6000613399602c83613a60565b91506133a482614044565b604082019050919050565b60006133bc603883613a60565b91506133c782614093565b604082019050919050565b60006133df602a83613a60565b91506133ea826140e2565b604082019050919050565b6000613402602983613a60565b915061340d82614131565b604082019050919050565b6000613425602083613a60565b915061343082614180565b602082019050919050565b6000613448602c83613a60565b9150613453826141a9565b604082019050919050565b600061346b600583613a71565b9150613476826141f8565b600582019050919050565b600061348e602083613a60565b915061349982614221565b602082019050919050565b60006134b1601883613a60565b91506134bc8261424a565b602082019050919050565b60006134d4602983613a60565b91506134df82614273565b604082019050919050565b60006134f7602f83613a60565b9150613502826142c2565b604082019050919050565b600061351a602183613a60565b915061352582614311565b604082019050919050565b600061353d600083613a55565b915061354882614360565b600082019050919050565b6000613560603183613a60565b915061356b82614363565b604082019050919050565b6000613583602d83613a60565b915061358e826143b2565b604082019050919050565b6135a281613bfb565b82525050565b60006135b482856131f5565b91506135c082846131c4565b91506135cb8261345e565b91508190509392505050565b60006135e282613530565b9150819050919050565b60006020820190506136016000830184613125565b92915050565b600060808201905061361c6000830187613125565b6136296020830186613125565b6136366040830185613599565b81810360608301526136488184613152565b905095945050505050565b60006020820190506136686000830184613134565b92915050565b60006020820190506136836000830184613143565b92915050565b600060208201905081810360008301526136a3818461318b565b905092915050565b600060208201905081810360008301526136c481613274565b9050919050565b600060208201905081810360008301526136e481613297565b9050919050565b60006020820190508181036000830152613704816132ba565b9050919050565b60006020820190508181036000830152613724816132dd565b9050919050565b6000602082019050818103600083015261374481613300565b9050919050565b6000602082019050818103600083015261376481613323565b9050919050565b6000602082019050818103600083015261378481613346565b9050919050565b600060208201905081810360008301526137a481613369565b9050919050565b600060208201905081810360008301526137c48161338c565b9050919050565b600060208201905081810360008301526137e4816133af565b9050919050565b60006020820190508181036000830152613804816133d2565b9050919050565b60006020820190508181036000830152613824816133f5565b9050919050565b6000602082019050818103600083015261384481613418565b9050919050565b600060208201905081810360008301526138648161343b565b9050919050565b6000602082019050818103600083015261388481613481565b9050919050565b600060208201905081810360008301526138a4816134a4565b9050919050565b600060208201905081810360008301526138c4816134c7565b9050919050565b600060208201905081810360008301526138e4816134ea565b9050919050565b600060208201905081810360008301526139048161350d565b9050919050565b6000602082019050818103600083015261392481613553565b9050919050565b6000602082019050818103600083015261394481613576565b9050919050565b60006020820190506139606000830184613599565b92915050565b6000613970613981565b905061397c8282613c79565b919050565b6000604051905090565b600067ffffffffffffffff8211156139a6576139a5613de0565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156139d2576139d1613de0565b5b6139db82613e2d565b9050602081019050919050565b600067ffffffffffffffff821115613a0357613a02613de0565b5b613a0c82613e2d565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000613a8782613bfb565b9150613a9283613bfb565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613ac757613ac6613d24565b5b828201905092915050565b6000613add82613bfb565b9150613ae883613bfb565b925082613af857613af7613d53565b5b828204905092915050565b6000613b0e82613bfb565b9150613b1983613bfb565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613b5257613b51613d24565b5b828202905092915050565b6000613b6882613bfb565b9150613b7383613bfb565b925082821015613b8657613b85613d24565b5b828203905092915050565b6000613b9c82613bdb565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613c32578082015181840152602081019050613c17565b83811115613c41576000848401525b50505050565b60006002820490506001821680613c5f57607f821691505b60208210811415613c7357613c72613d82565b5b50919050565b613c8282613e2d565b810181811067ffffffffffffffff82111715613ca157613ca0613de0565b5b80604052505050565b6000613cb582613bfb565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613ce857613ce7613d24565b5b600182019050919050565b6000613cfe82613bfb565b9150613d0983613bfb565b925082613d1957613d18613d53565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4d696e743a20756e61626c6520746f2073656e64206368616e676520746f207560008201527f7365720000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f5472616e73616374696f6e20556e7375636365737366756c0000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4d696e743a2041626f7665205472616e73616374696f6e205468726573686f6c60008201527f6421000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4d696e743a20496e73756666696369656e742046756e64730000000000000000600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f4d696e743a204e6f7420656e6f756768204e4654732072656d61696e696e672060008201527f746f2066696c6c206f7264657200000000000000000000000000000000000000602082015250565b61440a81613b91565b811461441557600080fd5b50565b61442181613ba3565b811461442c57600080fd5b50565b61443881613baf565b811461444357600080fd5b50565b61444f81613bfb565b811461445a57600080fd5b5056fea264697066735822122092251307dbd8cb9c3585032dac1b989e17acf8f90550b15b8d8f0a773782f87e64736f6c63430008060033

Deployed Bytecode Sourcemap

17842:17756:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19421:362;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23302:84;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25137:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24671:400;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34603:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22167:168;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26021:337;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18622:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21857:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19795:233;;;;;;;;;;;;;:::i;:::-;;20358:1298;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26429:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21668:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21969:186;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20040:306;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18753:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22600:95;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24370:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24100:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16818:94;;;;;;;;;;;;;:::i;:::-;;22347:115;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18712:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22474:114;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18825:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16167:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22818:88;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23443;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18685:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25430:289;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22707:99;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22918:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26685:326;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23618:330;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25790:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17067:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23032:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19421:362;19506:4;19546:25;19531:40;;;:11;:40;;;;:109;;;;19607:33;19592:48;;;:11;:48;;;;19531:109;:170;;;;19676:25;19661:40;;;:11;:40;;;;19531:170;:244;;;;19737:38;;;19722:53;;;:11;:53;;;;19531:244;19523:252;;19421:362;;;:::o;23302:84::-;23341:13;23373:5;23366:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23302:84;:::o;25137:221::-;25213:7;25241:16;25249:7;25241;:16::i;:::-;25233:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;25326:15;:24;25342:7;25326:24;;;;;;;;;;;;;;;;;;;;;25319:31;;25137:221;;;:::o;24671:400::-;24752:13;24768:16;24776:7;24768;:16::i;:::-;24752:32;;24809:5;24803:11;;:2;:11;;;;24795:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;24901:5;24887:19;;:10;:19;;;:58;;;;24910:35;24927:5;24934:10;24910:16;:35::i;:::-;24887:58;24865:164;;;;;;;;;;;;:::i;:::-;;;;;;;;;25042:21;25051:2;25055:7;25042:8;:21::i;:::-;24741:330;24671:400;;:::o;34603:215::-;34720:6;34780:30;;;34773:37;;34603:215;;;;;;;:::o;22167:168::-;22235:4;22283;22256:31;;:10;:23;22267:11;22256:23;;;;;;;;;;;;;;;;;;;;;;;;;:31;;;22252:53;;;22298:4;22291:11;;;;22252:53;22322:5;22315:12;;22167:168;;;;:::o;26021:337::-;26216:39;26235:10;26247:7;26216:18;:39::i;:::-;26208:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;26322:28;26332:4;26338:2;26342:7;26322:9;:28::i;:::-;26021:337;;;:::o;18622:22::-;;;;;;;;;;;;;:::o;21857:100::-;16398:12;:10;:12::i;:::-;16387:23;;:7;:5;:7::i;:::-;:23;;;16379:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21945:4:::1;21923:10;:19;21934:7;21923:19;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;21857:100:::0;:::o;19795:233::-;16398:12;:10;:12::i;:::-;16387:23;;:7;:5;:7::i;:::-;:23;;;16379:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19845:18:::1;19866:21;19845:42;;19909:12;19927:10;:15;;19950:10;19927:38;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19908:57;;;19984:7;19976:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;19834:194;;19795:233::o:0;20358:1298::-;20453:5;;20447:3;:11;;;;:::i;:::-;20434:9;:24;;20426:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;20513:15;;20506:3;:22;;20498:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;20592:10;;;;;;;;;;;20588:302;;;20647:12;;20633:11;;:26;;;;:::i;:::-;20627:3;:32;20619:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;20588:302;;;20768:12;;20756:9;;:24;;;;:::i;:::-;20750:3;:30;20742:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;20853:10;:24;20864:12;:10;:12::i;:::-;20853:24;;;;;;;;;;;;;;;;;;;;;;;;;20845:33;;;;;;20588:302;20919:14;;;;;;;;;;;20918:15;20910:24;;;;;;21006:4;20989:14;;:21;;;;;;;;;;;;;;;;;;21031;21055:12;;21031:36;;21139:3;21123:12;;:19;;;;;;;:::i;:::-;;;;;;;;21198:14;21215:9;21198:26;;21235:18;21272:5;;21266:3;:11;;;;:::i;:::-;21256:6;:22;;;;:::i;:::-;21235:43;;21326:9;21322:93;21345:3;21341:1;:7;21322:93;;;21370:33;21380:3;21401:1;21385:13;:17;;;;:::i;:::-;21370:9;:33::i;:::-;21350:3;;;;;:::i;:::-;;;;21322:93;;;;21460:1;21447:10;:14;21443:173;;;21478:12;21496:10;:15;;21519:10;21496:38;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21477:57;;;21557:7;21549:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;21462:154;21443:173;21643:5;21626:14;;:22;;;;;;;;;;;;;;;;;;20415:1241;;;20358:1298;;:::o;26429:185::-;26567:39;26584:4;26590:2;26594:7;26567:39;;;;;;;;;;;;:16;:39::i;:::-;26429:185;;;:::o;21668:125::-;21743:16;21751:7;21743;:16::i;:::-;21727:32;;:12;:10;:12::i;:::-;:32;;;21719:41;;;;;;21771:14;21777:7;21771:5;:14::i;:::-;21668:125;:::o;21969:186::-;16398:12;:10;:12::i;:::-;16387:23;;:7;:5;:7::i;:::-;:23;;;16379:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22054:9:::1;22049:99;22069:8;:15;22065:1;:19;22049:99;;;22132:4;22106:10;:23;22117:8;22126:1;22117:11;;;;;;;;:::i;:::-;;;;;;;;22106:23;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;22086:3;;;;;:::i;:::-;;;;22049:99;;;;21969:186:::0;:::o;20040:306::-;16398:12;:10;:12::i;:::-;16387:23;;:7;:5;:7::i;:::-;:23;;;16379:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20114:21:::1;20138:12;;20114:36;;20222:3;20206:12;;:19;;;;;;;:::i;:::-;;;;;;;;20250:9;20246:93;20269:3;20265:1;:7;20246:93;;;20294:33;20304:3;20325:1;20309:13;:17;;;;:::i;:::-;20294:9;:33::i;:::-;20274:3;;;;;:::i;:::-;;;;20246:93;;;;20103:243;20040:306:::0;;:::o;18753:27::-;;;;:::o;22600:95::-;16398:12;:10;:12::i;:::-;16387:23;;:7;:5;:7::i;:::-;:23;;;16379:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22681:6:::1;22670:8;:17;;;;;;;;;;;;:::i;:::-;;22600:95:::0;:::o;24370:239::-;24442:7;24462:13;24478:7;:16;24486:7;24478:16;;;;;;;;;;;;;;;;;;;;;24462:32;;24530:1;24513:19;;:5;:19;;;;24505:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;24596:5;24589:12;;;24370:239;;;:::o;24100:208::-;24172:7;24217:1;24200:19;;:5;:19;;;;24192:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;24284:9;:16;24294:5;24284:16;;;;;;;;;;;;;;;;24277:23;;24100:208;;;:::o;16818:94::-;16398:12;:10;:12::i;:::-;16387:23;;:7;:5;:7::i;:::-;:23;;;16379:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16883:21:::1;16901:1;16883:9;:21::i;:::-;16818:94::o:0;22347:115::-;16398:12;:10;:12::i;:::-;16387:23;;:7;:5;:7::i;:::-;:23;;;16379:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22446:8:::1;22428:15;:26;;;;22347:115:::0;:::o;18712:34::-;;;;:::o;22474:114::-;22538:7;16398:12;:10;:12::i;:::-;16387:23;;:7;:5;:7::i;:::-;:23;;;16379:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22565:15:::1;;22558:22;;22474:114:::0;:::o;18825:24::-;;;;:::o;16167:87::-;16213:7;16240:6;;;;;;;;;;;16233:13;;16167:87;:::o;22818:88::-;16398:12;:10;:12::i;:::-;16387:23;;:7;:5;:7::i;:::-;:23;;;16379:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22890:8:::1;22882:5;:16;;;;22818:88:::0;:::o;23443:::-;23484:13;23516:7;23509:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23443:88;:::o;18685:20::-;;;;:::o;25430:289::-;25545:10;25533:22;;:8;:22;;;;25525:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;25641:8;25598:18;:30;25617:10;25598:30;;;;;;;;;;;;;;;:40;25629:8;25598:40;;;;;;;;;;;;;;;;:51;;;;;;;;;;;;;;;;;;25692:8;25665:46;;25680:10;25665:46;;;25702:8;25665:46;;;;;;:::i;:::-;;;;;;;;25430:289;;:::o;22707:99::-;16398:12;:10;:12::i;:::-;16387:23;;:7;:5;:7::i;:::-;:23;;;16379:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22786:12:::1;22773:10;;:25;;;;;;;;;;;;;;;;;;22707:99:::0;:::o;22918:102::-;16398:12;:10;:12::i;:::-;16387:23;;:7;:5;:7::i;:::-;:23;;;16379:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23003:9:::1;22989:11;:23;;;;22918:102:::0;:::o;26685:326::-;26860:39;26879:10;26891:7;26860:18;:39::i;:::-;26852:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;26964:39;26978:4;26984:2;26988:7;26997:5;26964:13;:39::i;:::-;26685:326;;;;:::o;23618:330::-;23676:13;23747:16;23755:7;23747;:16::i;:::-;23739:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;23826:22;23875:8;23885:18;:7;:16;:18::i;:::-;23858:55;;;;;;;;;:::i;:::-;;;;;;;;;;;;;23826:88;;23932:8;23925:15;;;23618:330;;;:::o;25790:164::-;25887:4;25911:18;:25;25930:5;25911:25;;;;;;;;;;;;;;;:35;25937:8;25911:35;;;;;;;;;;;;;;;;;;;;;;;;;25904:42;;25790:164;;;;:::o;17067:192::-;16398:12;:10;:12::i;:::-;16387:23;;:7;:5;:7::i;:::-;:23;;;16379:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17176:1:::1;17156:22;;:8;:22;;;;17148:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;17232:19;17242:8;17232:9;:19::i;:::-;17067:192:::0;:::o;23032:123::-;23097:7;23124:9;:23;23134:12;23124:23;;;;;;;;;;;;;;;;23117:30;;23032:123;;;:::o;28521:127::-;28586:4;28638:1;28610:30;;:7;:16;28618:7;28610:16;;;;;;;;;;;;;;;;;;;;;:30;;;;28603:37;;28521:127;;;:::o;32482:167::-;32584:2;32557:15;:24;32573:7;32557:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;32633:7;32629:2;32602:39;;32611:16;32619:7;32611;:16::i;:::-;32602:39;;;;;;;;;;;;32482:167;;:::o;28815:341::-;28908:4;28933:16;28941:7;28933;:16::i;:::-;28925:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;29009:13;29025:16;29033:7;29025;:16::i;:::-;29009:32;;29071:5;29060:16;;:7;:16;;;:51;;;;29104:7;29080:31;;:20;29092:7;29080:11;:20::i;:::-;:31;;;29060:51;:87;;;;29115:32;29132:5;29139:7;29115:16;:32::i;:::-;29060:87;29052:96;;;28815:341;;;;:::o;31793:571::-;31945:4;31925:24;;:16;31933:7;31925;:16::i;:::-;:24;;;31917:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;32028:1;32014:16;;:2;:16;;;;32006:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;32084:39;32105:4;32111:2;32115:7;32084:20;:39::i;:::-;32188:29;32205:1;32209:7;32188:8;:29::i;:::-;32249:1;32230:9;:15;32240:4;32230:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;32278:1;32261:9;:13;32271:2;32261:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;32309:2;32290:7;:16;32298:7;32290:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;32348:7;32344:2;32329:27;;32338:4;32329:27;;;;;;;;;;;;31793:571;;;:::o;15550:98::-;15603:7;15630:10;15623:17;;15550:98;:::o;29498:110::-;29574:26;29584:2;29588:7;29574:26;;;;;;;;;;;;:9;:26::i;:::-;29498:110;;:::o;31103:353::-;31163:13;31179:16;31187:7;31179;:16::i;:::-;31163:32;;31208:48;31229:5;31244:1;31248:7;31208:20;:48::i;:::-;31297:29;31314:1;31318:7;31297:8;:29::i;:::-;31359:1;31339:9;:16;31349:5;31339:16;;;;;;;;;;;;;;;;:21;;;;;;;:::i;:::-;;;;;;;;31378:7;:16;31386:7;31378:16;;;;;;;;;;;;31371:23;;;;;;;;;;;31440:7;31436:1;31412:36;;31421:5;31412:36;;;;;;;;;;;;31152:304;31103:353;:::o;17267:173::-;17323:16;17342:6;;;;;;;;;;;17323:25;;17368:8;17359:6;;:17;;;;;;;;;;;;;;;;;;17423:8;17392:40;;17413:8;17392:40;;;;;;;;;;;;17312:128;17267:173;:::o;27893:315::-;28050:28;28060:4;28066:2;28070:7;28050:9;:28::i;:::-;28097:48;28120:4;28126:2;28130:7;28139:5;28097:22;:48::i;:::-;28089:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;27893:315;;;;:::o;13758:723::-;13814:13;14044:1;14035:5;:10;14031:53;;;14062:10;;;;;;;;;;;;;;;;;;;;;14031:53;14094:12;14109:5;14094:20;;14125:14;14150:78;14165:1;14157:4;:9;14150:78;;14183:8;;;;;:::i;:::-;;;;14214:2;14206:10;;;;;:::i;:::-;;;14150:78;;;14238:19;14270:6;14260:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14238:39;;14288:154;14304:1;14295:5;:10;14288:154;;14332:1;14322:11;;;;;:::i;:::-;;;14399:2;14391:5;:10;;;;:::i;:::-;14378:2;:24;;;;:::i;:::-;14365:39;;14348:6;14355;14348:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;14428:2;14419:11;;;;;:::i;:::-;;;14288:154;;;14466:6;14452:21;;;;;13758:723;;;;:::o;35390:126::-;;;;:::o;29835:321::-;29965:18;29971:2;29975:7;29965:5;:18::i;:::-;30016:54;30047:1;30051:2;30055:7;30064:5;30016:22;:54::i;:::-;29994:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;29835:321;;;:::o;33214:801::-;33369:4;33390:15;:2;:13;;;:15::i;:::-;33386:622;;;33442:2;33426:36;;;33463:10;33475:4;33481:7;33490:5;33426:70;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;33422:531;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33687:1;33670:6;:13;:18;33666:272;;;33713:60;;;;;;;;;;:::i;:::-;;;;;;;;33666:272;33888:6;33882:13;33873:6;33869:2;33865:15;33858:38;33422:531;33557:45;;;33547:55;;;:6;:55;;;;33540:62;;;;;33386:622;33992:4;33985:11;;33214:801;;;;;;;:::o;30492:382::-;30586:1;30572:16;;:2;:16;;;;30564:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;30645:16;30653:7;30645;:16::i;:::-;30644:17;30636:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;30707:45;30736:1;30740:2;30744:7;30707:20;:45::i;:::-;30782:1;30765:9;:13;30775:2;30765:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;30813:2;30794:7;:16;30802:7;30794:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;30858:7;30854:2;30833:33;;30850:1;30833:33;;;;;;;;;;;;30492:382;;:::o;6418:387::-;6478:4;6686:12;6753:7;6741:20;6733:28;;6796:1;6789:4;:8;6782:15;;;6418:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:2;;;404:79;;:::i;:::-;350:2;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;;;;;;:::o;752:410::-;829:5;854:65;870:48;911:6;870:48;:::i;:::-;854:65;:::i;:::-;845:74;;942:6;935:5;928:21;980:4;973:5;969:16;1018:3;1009:6;1004:3;1000:16;997:25;994:2;;;1025:79;;:::i;:::-;994:2;1115:41;1149:6;1144:3;1139;1115:41;:::i;:::-;835:327;;;;;;:::o;1168:412::-;1246:5;1271:66;1287:49;1329:6;1287:49;:::i;:::-;1271:66;:::i;:::-;1262:75;;1360:6;1353:5;1346:21;1398:4;1391:5;1387:16;1436:3;1427:6;1422:3;1418:16;1415:25;1412:2;;;1443:79;;:::i;:::-;1412:2;1533:41;1567:6;1562:3;1557;1533:41;:::i;:::-;1252:328;;;;;;:::o;1586:139::-;1632:5;1670:6;1657:20;1648:29;;1686:33;1713:5;1686:33;:::i;:::-;1638:87;;;;:::o;1748:370::-;1819:5;1868:3;1861:4;1853:6;1849:17;1845:27;1835:2;;1876:79;;:::i;:::-;1835:2;1993:6;1980:20;2018:94;2108:3;2100:6;2093:4;2085:6;2081:17;2018:94;:::i;:::-;2009:103;;1825:293;;;;;:::o;2124:133::-;2167:5;2205:6;2192:20;2183:29;;2221:30;2245:5;2221:30;:::i;:::-;2173:84;;;;:::o;2263:137::-;2308:5;2346:6;2333:20;2324:29;;2362:32;2388:5;2362:32;:::i;:::-;2314:86;;;;:::o;2406:141::-;2462:5;2493:6;2487:13;2478:22;;2509:32;2535:5;2509:32;:::i;:::-;2468:79;;;;:::o;2566:552::-;2623:8;2633:6;2683:3;2676:4;2668:6;2664:17;2660:27;2650:2;;2691:79;;:::i;:::-;2650:2;2804:6;2791:20;2781:30;;2834:18;2826:6;2823:30;2820:2;;;2856:79;;:::i;:::-;2820:2;2970:4;2962:6;2958:17;2946:29;;3024:3;3016:4;3008:6;3004:17;2994:8;2990:32;2987:41;2984:2;;;3031:79;;:::i;:::-;2984:2;2640:478;;;;;:::o;3137:338::-;3192:5;3241:3;3234:4;3226:6;3222:17;3218:27;3208:2;;3249:79;;:::i;:::-;3208:2;3366:6;3353:20;3391:78;3465:3;3457:6;3450:4;3442:6;3438:17;3391:78;:::i;:::-;3382:87;;3198:277;;;;;:::o;3495:340::-;3551:5;3600:3;3593:4;3585:6;3581:17;3577:27;3567:2;;3608:79;;:::i;:::-;3567:2;3725:6;3712:20;3750:79;3825:3;3817:6;3810:4;3802:6;3798:17;3750:79;:::i;:::-;3741:88;;3557:278;;;;;:::o;3841:139::-;3887:5;3925:6;3912:20;3903:29;;3941:33;3968:5;3941:33;:::i;:::-;3893:87;;;;:::o;3986:329::-;4045:6;4094:2;4082:9;4073:7;4069:23;4065:32;4062:2;;;4100:79;;:::i;:::-;4062:2;4220:1;4245:53;4290:7;4281:6;4270:9;4266:22;4245:53;:::i;:::-;4235:63;;4191:117;4052:263;;;;:::o;4321:474::-;4389:6;4397;4446:2;4434:9;4425:7;4421:23;4417:32;4414:2;;;4452:79;;:::i;:::-;4414:2;4572:1;4597:53;4642:7;4633:6;4622:9;4618:22;4597:53;:::i;:::-;4587:63;;4543:117;4699:2;4725:53;4770:7;4761:6;4750:9;4746:22;4725:53;:::i;:::-;4715:63;;4670:118;4404:391;;;;;:::o;4801:619::-;4878:6;4886;4894;4943:2;4931:9;4922:7;4918:23;4914:32;4911:2;;;4949:79;;:::i;:::-;4911:2;5069:1;5094:53;5139:7;5130:6;5119:9;5115:22;5094:53;:::i;:::-;5084:63;;5040:117;5196:2;5222:53;5267:7;5258:6;5247:9;5243:22;5222:53;:::i;:::-;5212:63;;5167:118;5324:2;5350:53;5395:7;5386:6;5375:9;5371:22;5350:53;:::i;:::-;5340:63;;5295:118;4901:519;;;;;:::o;5426:963::-;5523:6;5531;5539;5547;5555;5604:3;5592:9;5583:7;5579:23;5575:33;5572:2;;;5611:79;;:::i;:::-;5572:2;5731:1;5756:53;5801:7;5792:6;5781:9;5777:22;5756:53;:::i;:::-;5746:63;;5702:117;5858:2;5884:53;5929:7;5920:6;5909:9;5905:22;5884:53;:::i;:::-;5874:63;;5829:118;5986:2;6012:53;6057:7;6048:6;6037:9;6033:22;6012:53;:::i;:::-;6002:63;;5957:118;6142:2;6131:9;6127:18;6114:32;6173:18;6165:6;6162:30;6159:2;;;6195:79;;:::i;:::-;6159:2;6308:64;6364:7;6355:6;6344:9;6340:22;6308:64;:::i;:::-;6290:82;;;;6085:297;5562:827;;;;;;;;:::o;6395:943::-;6490:6;6498;6506;6514;6563:3;6551:9;6542:7;6538:23;6534:33;6531:2;;;6570:79;;:::i;:::-;6531:2;6690:1;6715:53;6760:7;6751:6;6740:9;6736:22;6715:53;:::i;:::-;6705:63;;6661:117;6817:2;6843:53;6888:7;6879:6;6868:9;6864:22;6843:53;:::i;:::-;6833:63;;6788:118;6945:2;6971:53;7016:7;7007:6;6996:9;6992:22;6971:53;:::i;:::-;6961:63;;6916:118;7101:2;7090:9;7086:18;7073:32;7132:18;7124:6;7121:30;7118:2;;;7154:79;;:::i;:::-;7118:2;7259:62;7313:7;7304:6;7293:9;7289:22;7259:62;:::i;:::-;7249:72;;7044:287;6521:817;;;;;;;:::o;7344:468::-;7409:6;7417;7466:2;7454:9;7445:7;7441:23;7437:32;7434:2;;;7472:79;;:::i;:::-;7434:2;7592:1;7617:53;7662:7;7653:6;7642:9;7638:22;7617:53;:::i;:::-;7607:63;;7563:117;7719:2;7745:50;7787:7;7778:6;7767:9;7763:22;7745:50;:::i;:::-;7735:60;;7690:115;7424:388;;;;;:::o;7818:474::-;7886:6;7894;7943:2;7931:9;7922:7;7918:23;7914:32;7911:2;;;7949:79;;:::i;:::-;7911:2;8069:1;8094:53;8139:7;8130:6;8119:9;8115:22;8094:53;:::i;:::-;8084:63;;8040:117;8196:2;8222:53;8267:7;8258:6;8247:9;8243:22;8222:53;:::i;:::-;8212:63;;8167:118;7901:391;;;;;:::o;8298:539::-;8382:6;8431:2;8419:9;8410:7;8406:23;8402:32;8399:2;;;8437:79;;:::i;:::-;8399:2;8585:1;8574:9;8570:17;8557:31;8615:18;8607:6;8604:30;8601:2;;;8637:79;;:::i;:::-;8601:2;8742:78;8812:7;8803:6;8792:9;8788:22;8742:78;:::i;:::-;8732:88;;8528:302;8389:448;;;;:::o;8843:323::-;8899:6;8948:2;8936:9;8927:7;8923:23;8919:32;8916:2;;;8954:79;;:::i;:::-;8916:2;9074:1;9099:50;9141:7;9132:6;9121:9;9117:22;9099:50;:::i;:::-;9089:60;;9045:114;8906:260;;;;:::o;9172:327::-;9230:6;9279:2;9267:9;9258:7;9254:23;9250:32;9247:2;;;9285:79;;:::i;:::-;9247:2;9405:1;9430:52;9474:7;9465:6;9454:9;9450:22;9430:52;:::i;:::-;9420:62;;9376:116;9237:262;;;;:::o;9505:349::-;9574:6;9623:2;9611:9;9602:7;9598:23;9594:32;9591:2;;;9629:79;;:::i;:::-;9591:2;9749:1;9774:63;9829:7;9820:6;9809:9;9805:22;9774:63;:::i;:::-;9764:73;;9720:127;9581:273;;;;:::o;9860:509::-;9929:6;9978:2;9966:9;9957:7;9953:23;9949:32;9946:2;;;9984:79;;:::i;:::-;9946:2;10132:1;10121:9;10117:17;10104:31;10162:18;10154:6;10151:30;10148:2;;;10184:79;;:::i;:::-;10148:2;10289:63;10344:7;10335:6;10324:9;10320:22;10289:63;:::i;:::-;10279:73;;10075:287;9936:433;;;;:::o;10375:329::-;10434:6;10483:2;10471:9;10462:7;10458:23;10454:32;10451:2;;;10489:79;;:::i;:::-;10451:2;10609:1;10634:53;10679:7;10670:6;10659:9;10655:22;10634:53;:::i;:::-;10624:63;;10580:117;10441:263;;;;:::o;10710:118::-;10797:24;10815:5;10797:24;:::i;:::-;10792:3;10785:37;10775:53;;:::o;10834:109::-;10915:21;10930:5;10915:21;:::i;:::-;10910:3;10903:34;10893:50;;:::o;10949:115::-;11034:23;11051:5;11034:23;:::i;:::-;11029:3;11022:36;11012:52;;:::o;11070:360::-;11156:3;11184:38;11216:5;11184:38;:::i;:::-;11238:70;11301:6;11296:3;11238:70;:::i;:::-;11231:77;;11317:52;11362:6;11357:3;11350:4;11343:5;11339:16;11317:52;:::i;:::-;11394:29;11416:6;11394:29;:::i;:::-;11389:3;11385:39;11378:46;;11160:270;;;;;:::o;11436:364::-;11524:3;11552:39;11585:5;11552:39;:::i;:::-;11607:71;11671:6;11666:3;11607:71;:::i;:::-;11600:78;;11687:52;11732:6;11727:3;11720:4;11713:5;11709:16;11687:52;:::i;:::-;11764:29;11786:6;11764:29;:::i;:::-;11759:3;11755:39;11748:46;;11528:272;;;;;:::o;11806:377::-;11912:3;11940:39;11973:5;11940:39;:::i;:::-;11995:89;12077:6;12072:3;11995:89;:::i;:::-;11988:96;;12093:52;12138:6;12133:3;12126:4;12119:5;12115:16;12093:52;:::i;:::-;12170:6;12165:3;12161:16;12154:23;;11916:267;;;;;:::o;12213:845::-;12316:3;12353:5;12347:12;12382:36;12408:9;12382:36;:::i;:::-;12434:89;12516:6;12511:3;12434:89;:::i;:::-;12427:96;;12554:1;12543:9;12539:17;12570:1;12565:137;;;;12716:1;12711:341;;;;12532:520;;12565:137;12649:4;12645:9;12634;12630:25;12625:3;12618:38;12685:6;12680:3;12676:16;12669:23;;12565:137;;12711:341;12778:38;12810:5;12778:38;:::i;:::-;12838:1;12852:154;12866:6;12863:1;12860:13;12852:154;;;12940:7;12934:14;12930:1;12925:3;12921:11;12914:35;12990:1;12981:7;12977:15;12966:26;;12888:4;12885:1;12881:12;12876:17;;12852:154;;;13035:6;13030:3;13026:16;13019:23;;12718:334;;12532:520;;12320:738;;;;;;:::o;13064:366::-;13206:3;13227:67;13291:2;13286:3;13227:67;:::i;:::-;13220:74;;13303:93;13392:3;13303:93;:::i;:::-;13421:2;13416:3;13412:12;13405:19;;13210:220;;;:::o;13436:366::-;13578:3;13599:67;13663:2;13658:3;13599:67;:::i;:::-;13592:74;;13675:93;13764:3;13675:93;:::i;:::-;13793:2;13788:3;13784:12;13777:19;;13582:220;;;:::o;13808:366::-;13950:3;13971:67;14035:2;14030:3;13971:67;:::i;:::-;13964:74;;14047:93;14136:3;14047:93;:::i;:::-;14165:2;14160:3;14156:12;14149:19;;13954:220;;;:::o;14180:366::-;14322:3;14343:67;14407:2;14402:3;14343:67;:::i;:::-;14336:74;;14419:93;14508:3;14419:93;:::i;:::-;14537:2;14532:3;14528:12;14521:19;;14326:220;;;:::o;14552:366::-;14694:3;14715:67;14779:2;14774:3;14715:67;:::i;:::-;14708:74;;14791:93;14880:3;14791:93;:::i;:::-;14909:2;14904:3;14900:12;14893:19;;14698:220;;;:::o;14924:366::-;15066:3;15087:67;15151:2;15146:3;15087:67;:::i;:::-;15080:74;;15163:93;15252:3;15163:93;:::i;:::-;15281:2;15276:3;15272:12;15265:19;;15070:220;;;:::o;15296:366::-;15438:3;15459:67;15523:2;15518:3;15459:67;:::i;:::-;15452:74;;15535:93;15624:3;15535:93;:::i;:::-;15653:2;15648:3;15644:12;15637:19;;15442:220;;;:::o;15668:366::-;15810:3;15831:67;15895:2;15890:3;15831:67;:::i;:::-;15824:74;;15907:93;15996:3;15907:93;:::i;:::-;16025:2;16020:3;16016:12;16009:19;;15814:220;;;:::o;16040:366::-;16182:3;16203:67;16267:2;16262:3;16203:67;:::i;:::-;16196:74;;16279:93;16368:3;16279:93;:::i;:::-;16397:2;16392:3;16388:12;16381:19;;16186:220;;;:::o;16412:366::-;16554:3;16575:67;16639:2;16634:3;16575:67;:::i;:::-;16568:74;;16651:93;16740:3;16651:93;:::i;:::-;16769:2;16764:3;16760:12;16753:19;;16558:220;;;:::o;16784:366::-;16926:3;16947:67;17011:2;17006:3;16947:67;:::i;:::-;16940:74;;17023:93;17112:3;17023:93;:::i;:::-;17141:2;17136:3;17132:12;17125:19;;16930:220;;;:::o;17156:366::-;17298:3;17319:67;17383:2;17378:3;17319:67;:::i;:::-;17312:74;;17395:93;17484:3;17395:93;:::i;:::-;17513:2;17508:3;17504:12;17497:19;;17302:220;;;:::o;17528:366::-;17670:3;17691:67;17755:2;17750:3;17691:67;:::i;:::-;17684:74;;17767:93;17856:3;17767:93;:::i;:::-;17885:2;17880:3;17876:12;17869:19;;17674:220;;;:::o;17900:366::-;18042:3;18063:67;18127:2;18122:3;18063:67;:::i;:::-;18056:74;;18139:93;18228:3;18139:93;:::i;:::-;18257:2;18252:3;18248:12;18241:19;;18046:220;;;:::o;18272:400::-;18432:3;18453:84;18535:1;18530:3;18453:84;:::i;:::-;18446:91;;18546:93;18635:3;18546:93;:::i;:::-;18664:1;18659:3;18655:11;18648:18;;18436:236;;;:::o;18678:366::-;18820:3;18841:67;18905:2;18900:3;18841:67;:::i;:::-;18834:74;;18917:93;19006:3;18917:93;:::i;:::-;19035:2;19030:3;19026:12;19019:19;;18824:220;;;:::o;19050:366::-;19192:3;19213:67;19277:2;19272:3;19213:67;:::i;:::-;19206:74;;19289:93;19378:3;19289:93;:::i;:::-;19407:2;19402:3;19398:12;19391:19;;19196:220;;;:::o;19422:366::-;19564:3;19585:67;19649:2;19644:3;19585:67;:::i;:::-;19578:74;;19661:93;19750:3;19661:93;:::i;:::-;19779:2;19774:3;19770:12;19763:19;;19568:220;;;:::o;19794:366::-;19936:3;19957:67;20021:2;20016:3;19957:67;:::i;:::-;19950:74;;20033:93;20122:3;20033:93;:::i;:::-;20151:2;20146:3;20142:12;20135:19;;19940:220;;;:::o;20166:366::-;20308:3;20329:67;20393:2;20388:3;20329:67;:::i;:::-;20322:74;;20405:93;20494:3;20405:93;:::i;:::-;20523:2;20518:3;20514:12;20507:19;;20312:220;;;:::o;20538:398::-;20697:3;20718:83;20799:1;20794:3;20718:83;:::i;:::-;20711:90;;20810:93;20899:3;20810:93;:::i;:::-;20928:1;20923:3;20919:11;20912:18;;20701:235;;;:::o;20942:366::-;21084:3;21105:67;21169:2;21164:3;21105:67;:::i;:::-;21098:74;;21181:93;21270:3;21181:93;:::i;:::-;21299:2;21294:3;21290:12;21283:19;;21088:220;;;:::o;21314:366::-;21456:3;21477:67;21541:2;21536:3;21477:67;:::i;:::-;21470:74;;21553:93;21642:3;21553:93;:::i;:::-;21671:2;21666:3;21662:12;21655:19;;21460:220;;;:::o;21686:118::-;21773:24;21791:5;21773:24;:::i;:::-;21768:3;21761:37;21751:53;;:::o;21810:695::-;22088:3;22110:92;22198:3;22189:6;22110:92;:::i;:::-;22103:99;;22219:95;22310:3;22301:6;22219:95;:::i;:::-;22212:102;;22331:148;22475:3;22331:148;:::i;:::-;22324:155;;22496:3;22489:10;;22092:413;;;;;:::o;22511:379::-;22695:3;22717:147;22860:3;22717:147;:::i;:::-;22710:154;;22881:3;22874:10;;22699:191;;;:::o;22896:222::-;22989:4;23027:2;23016:9;23012:18;23004:26;;23040:71;23108:1;23097:9;23093:17;23084:6;23040:71;:::i;:::-;22994:124;;;;:::o;23124:640::-;23319:4;23357:3;23346:9;23342:19;23334:27;;23371:71;23439:1;23428:9;23424:17;23415:6;23371:71;:::i;:::-;23452:72;23520:2;23509:9;23505:18;23496:6;23452:72;:::i;:::-;23534;23602:2;23591:9;23587:18;23578:6;23534:72;:::i;:::-;23653:9;23647:4;23643:20;23638:2;23627:9;23623:18;23616:48;23681:76;23752:4;23743:6;23681:76;:::i;:::-;23673:84;;23324:440;;;;;;;:::o;23770:210::-;23857:4;23895:2;23884:9;23880:18;23872:26;;23908:65;23970:1;23959:9;23955:17;23946:6;23908:65;:::i;:::-;23862:118;;;;:::o;23986:218::-;24077:4;24115:2;24104:9;24100:18;24092:26;;24128:69;24194:1;24183:9;24179:17;24170:6;24128:69;:::i;:::-;24082:122;;;;:::o;24210:313::-;24323:4;24361:2;24350:9;24346:18;24338:26;;24410:9;24404:4;24400:20;24396:1;24385:9;24381:17;24374:47;24438:78;24511:4;24502:6;24438:78;:::i;:::-;24430:86;;24328:195;;;;:::o;24529:419::-;24695:4;24733:2;24722:9;24718:18;24710:26;;24782:9;24776:4;24772:20;24768:1;24757:9;24753:17;24746:47;24810:131;24936:4;24810:131;:::i;:::-;24802:139;;24700:248;;;:::o;24954:419::-;25120:4;25158:2;25147:9;25143:18;25135:26;;25207:9;25201:4;25197:20;25193:1;25182:9;25178:17;25171:47;25235:131;25361:4;25235:131;:::i;:::-;25227:139;;25125:248;;;:::o;25379:419::-;25545:4;25583:2;25572:9;25568:18;25560:26;;25632:9;25626:4;25622:20;25618:1;25607:9;25603:17;25596:47;25660:131;25786:4;25660:131;:::i;:::-;25652:139;;25550:248;;;:::o;25804:419::-;25970:4;26008:2;25997:9;25993:18;25985:26;;26057:9;26051:4;26047:20;26043:1;26032:9;26028:17;26021:47;26085:131;26211:4;26085:131;:::i;:::-;26077:139;;25975:248;;;:::o;26229:419::-;26395:4;26433:2;26422:9;26418:18;26410:26;;26482:9;26476:4;26472:20;26468:1;26457:9;26453:17;26446:47;26510:131;26636:4;26510:131;:::i;:::-;26502:139;;26400:248;;;:::o;26654:419::-;26820:4;26858:2;26847:9;26843:18;26835:26;;26907:9;26901:4;26897:20;26893:1;26882:9;26878:17;26871:47;26935:131;27061:4;26935:131;:::i;:::-;26927:139;;26825:248;;;:::o;27079:419::-;27245:4;27283:2;27272:9;27268:18;27260:26;;27332:9;27326:4;27322:20;27318:1;27307:9;27303:17;27296:47;27360:131;27486:4;27360:131;:::i;:::-;27352:139;;27250:248;;;:::o;27504:419::-;27670:4;27708:2;27697:9;27693:18;27685:26;;27757:9;27751:4;27747:20;27743:1;27732:9;27728:17;27721:47;27785:131;27911:4;27785:131;:::i;:::-;27777:139;;27675:248;;;:::o;27929:419::-;28095:4;28133:2;28122:9;28118:18;28110:26;;28182:9;28176:4;28172:20;28168:1;28157:9;28153:17;28146:47;28210:131;28336:4;28210:131;:::i;:::-;28202:139;;28100:248;;;:::o;28354:419::-;28520:4;28558:2;28547:9;28543:18;28535:26;;28607:9;28601:4;28597:20;28593:1;28582:9;28578:17;28571:47;28635:131;28761:4;28635:131;:::i;:::-;28627:139;;28525:248;;;:::o;28779:419::-;28945:4;28983:2;28972:9;28968:18;28960:26;;29032:9;29026:4;29022:20;29018:1;29007:9;29003:17;28996:47;29060:131;29186:4;29060:131;:::i;:::-;29052:139;;28950:248;;;:::o;29204:419::-;29370:4;29408:2;29397:9;29393:18;29385:26;;29457:9;29451:4;29447:20;29443:1;29432:9;29428:17;29421:47;29485:131;29611:4;29485:131;:::i;:::-;29477:139;;29375:248;;;:::o;29629:419::-;29795:4;29833:2;29822:9;29818:18;29810:26;;29882:9;29876:4;29872:20;29868:1;29857:9;29853:17;29846:47;29910:131;30036:4;29910:131;:::i;:::-;29902:139;;29800:248;;;:::o;30054:419::-;30220:4;30258:2;30247:9;30243:18;30235:26;;30307:9;30301:4;30297:20;30293:1;30282:9;30278:17;30271:47;30335:131;30461:4;30335:131;:::i;:::-;30327:139;;30225:248;;;:::o;30479:419::-;30645:4;30683:2;30672:9;30668:18;30660:26;;30732:9;30726:4;30722:20;30718:1;30707:9;30703:17;30696:47;30760:131;30886:4;30760:131;:::i;:::-;30752:139;;30650:248;;;:::o;30904:419::-;31070:4;31108:2;31097:9;31093:18;31085:26;;31157:9;31151:4;31147:20;31143:1;31132:9;31128:17;31121:47;31185:131;31311:4;31185:131;:::i;:::-;31177:139;;31075:248;;;:::o;31329:419::-;31495:4;31533:2;31522:9;31518:18;31510:26;;31582:9;31576:4;31572:20;31568:1;31557:9;31553:17;31546:47;31610:131;31736:4;31610:131;:::i;:::-;31602:139;;31500:248;;;:::o;31754:419::-;31920:4;31958:2;31947:9;31943:18;31935:26;;32007:9;32001:4;31997:20;31993:1;31982:9;31978:17;31971:47;32035:131;32161:4;32035:131;:::i;:::-;32027:139;;31925:248;;;:::o;32179:419::-;32345:4;32383:2;32372:9;32368:18;32360:26;;32432:9;32426:4;32422:20;32418:1;32407:9;32403:17;32396:47;32460:131;32586:4;32460:131;:::i;:::-;32452:139;;32350:248;;;:::o;32604:419::-;32770:4;32808:2;32797:9;32793:18;32785:26;;32857:9;32851:4;32847:20;32843:1;32832:9;32828:17;32821:47;32885:131;33011:4;32885:131;:::i;:::-;32877:139;;32775:248;;;:::o;33029:419::-;33195:4;33233:2;33222:9;33218:18;33210:26;;33282:9;33276:4;33272:20;33268:1;33257:9;33253:17;33246:47;33310:131;33436:4;33310:131;:::i;:::-;33302:139;;33200:248;;;:::o;33454:222::-;33547:4;33585:2;33574:9;33570:18;33562:26;;33598:71;33666:1;33655:9;33651:17;33642:6;33598:71;:::i;:::-;33552:124;;;;:::o;33682:129::-;33716:6;33743:20;;:::i;:::-;33733:30;;33772:33;33800:4;33792:6;33772:33;:::i;:::-;33723:88;;;:::o;33817:75::-;33850:6;33883:2;33877:9;33867:19;;33857:35;:::o;33898:311::-;33975:4;34065:18;34057:6;34054:30;34051:2;;;34087:18;;:::i;:::-;34051:2;34137:4;34129:6;34125:17;34117:25;;34197:4;34191;34187:15;34179:23;;33980:229;;;:::o;34215:307::-;34276:4;34366:18;34358:6;34355:30;34352:2;;;34388:18;;:::i;:::-;34352:2;34426:29;34448:6;34426:29;:::i;:::-;34418:37;;34510:4;34504;34500:15;34492:23;;34281:241;;;:::o;34528:308::-;34590:4;34680:18;34672:6;34669:30;34666:2;;;34702:18;;:::i;:::-;34666:2;34740:29;34762:6;34740:29;:::i;:::-;34732:37;;34824:4;34818;34814:15;34806:23;;34595:241;;;:::o;34842:141::-;34891:4;34914:3;34906:11;;34937:3;34934:1;34927:14;34971:4;34968:1;34958:18;34950:26;;34896:87;;;:::o;34989:98::-;35040:6;35074:5;35068:12;35058:22;;35047:40;;;:::o;35093:99::-;35145:6;35179:5;35173:12;35163:22;;35152:40;;;:::o;35198:168::-;35281:11;35315:6;35310:3;35303:19;35355:4;35350:3;35346:14;35331:29;;35293:73;;;;:::o;35372:147::-;35473:11;35510:3;35495:18;;35485:34;;;;:::o;35525:169::-;35609:11;35643:6;35638:3;35631:19;35683:4;35678:3;35674:14;35659:29;;35621:73;;;;:::o;35700:148::-;35802:11;35839:3;35824:18;;35814:34;;;;:::o;35854:305::-;35894:3;35913:20;35931:1;35913:20;:::i;:::-;35908:25;;35947:20;35965:1;35947:20;:::i;:::-;35942:25;;36101:1;36033:66;36029:74;36026:1;36023:81;36020:2;;;36107:18;;:::i;:::-;36020:2;36151:1;36148;36144:9;36137:16;;35898:261;;;;:::o;36165:185::-;36205:1;36222:20;36240:1;36222:20;:::i;:::-;36217:25;;36256:20;36274:1;36256:20;:::i;:::-;36251:25;;36295:1;36285:2;;36300:18;;:::i;:::-;36285:2;36342:1;36339;36335:9;36330:14;;36207:143;;;;:::o;36356:348::-;36396:7;36419:20;36437:1;36419:20;:::i;:::-;36414:25;;36453:20;36471:1;36453:20;:::i;:::-;36448:25;;36641:1;36573:66;36569:74;36566:1;36563:81;36558:1;36551:9;36544:17;36540:105;36537:2;;;36648:18;;:::i;:::-;36537:2;36696:1;36693;36689:9;36678:20;;36404:300;;;;:::o;36710:191::-;36750:4;36770:20;36788:1;36770:20;:::i;:::-;36765:25;;36804:20;36822:1;36804:20;:::i;:::-;36799:25;;36843:1;36840;36837:8;36834:2;;;36848:18;;:::i;:::-;36834:2;36893:1;36890;36886:9;36878:17;;36755:146;;;;:::o;36907:96::-;36944:7;36973:24;36991:5;36973:24;:::i;:::-;36962:35;;36952:51;;;:::o;37009:90::-;37043:7;37086:5;37079:13;37072:21;37061:32;;37051:48;;;:::o;37105:149::-;37141:7;37181:66;37174:5;37170:78;37159:89;;37149:105;;;:::o;37260:126::-;37297:7;37337:42;37330:5;37326:54;37315:65;;37305:81;;;:::o;37392:77::-;37429:7;37458:5;37447:16;;37437:32;;;:::o;37475:154::-;37559:6;37554:3;37549;37536:30;37621:1;37612:6;37607:3;37603:16;37596:27;37526:103;;;:::o;37635:307::-;37703:1;37713:113;37727:6;37724:1;37721:13;37713:113;;;37812:1;37807:3;37803:11;37797:18;37793:1;37788:3;37784:11;37777:39;37749:2;37746:1;37742:10;37737:15;;37713:113;;;37844:6;37841:1;37838:13;37835:2;;;37924:1;37915:6;37910:3;37906:16;37899:27;37835:2;37684:258;;;;:::o;37948:320::-;37992:6;38029:1;38023:4;38019:12;38009:22;;38076:1;38070:4;38066:12;38097:18;38087:2;;38153:4;38145:6;38141:17;38131:27;;38087:2;38215;38207:6;38204:14;38184:18;38181:38;38178:2;;;38234:18;;:::i;:::-;38178:2;37999:269;;;;:::o;38274:281::-;38357:27;38379:4;38357:27;:::i;:::-;38349:6;38345:40;38487:6;38475:10;38472:22;38451:18;38439:10;38436:34;38433:62;38430:2;;;38498:18;;:::i;:::-;38430:2;38538:10;38534:2;38527:22;38317:238;;;:::o;38561:233::-;38600:3;38623:24;38641:5;38623:24;:::i;:::-;38614:33;;38669:66;38662:5;38659:77;38656:2;;;38739:18;;:::i;:::-;38656:2;38786:1;38779:5;38775:13;38768:20;;38604:190;;;:::o;38800:176::-;38832:1;38849:20;38867:1;38849:20;:::i;:::-;38844:25;;38883:20;38901:1;38883:20;:::i;:::-;38878:25;;38922:1;38912:2;;38927:18;;:::i;:::-;38912:2;38968:1;38965;38961:9;38956:14;;38834:142;;;;:::o;38982:180::-;39030:77;39027:1;39020:88;39127:4;39124:1;39117:15;39151:4;39148:1;39141:15;39168:180;39216:77;39213:1;39206:88;39313:4;39310:1;39303:15;39337:4;39334:1;39327:15;39354:180;39402:77;39399:1;39392:88;39499:4;39496:1;39489:15;39523:4;39520:1;39513:15;39540:180;39588:77;39585:1;39578:88;39685:4;39682:1;39675:15;39709:4;39706:1;39699:15;39726:180;39774:77;39771:1;39764:88;39871:4;39868:1;39861:15;39895:4;39892:1;39885:15;39912:117;40021:1;40018;40011:12;40035:117;40144:1;40141;40134:12;40158:117;40267:1;40264;40257:12;40281:117;40390:1;40387;40380:12;40404:117;40513:1;40510;40503:12;40527:117;40636:1;40633;40626:12;40650:102;40691:6;40742:2;40738:7;40733:2;40726:5;40722:14;40718:28;40708:38;;40698:54;;;:::o;40758:222::-;40898:34;40894:1;40886:6;40882:14;40875:58;40967:5;40962:2;40954:6;40950:15;40943:30;40864:116;:::o;40986:237::-;41126:34;41122:1;41114:6;41110:14;41103:58;41195:20;41190:2;41182:6;41178:15;41171:45;41092:131;:::o;41229:225::-;41369:34;41365:1;41357:6;41353:14;41346:58;41438:8;41433:2;41425:6;41421:15;41414:33;41335:119;:::o;41460:178::-;41600:30;41596:1;41588:6;41584:14;41577:54;41566:72;:::o;41644:174::-;41784:26;41780:1;41772:6;41768:14;41761:50;41750:68;:::o;41824:223::-;41964:34;41960:1;41952:6;41948:14;41941:58;42033:6;42028:2;42020:6;42016:15;42009:31;41930:117;:::o;42053:175::-;42193:27;42189:1;42181:6;42177:14;42170:51;42159:69;:::o;42234:221::-;42374:34;42370:1;42362:6;42358:14;42351:58;42443:4;42438:2;42430:6;42426:15;42419:29;42340:115;:::o;42461:231::-;42601:34;42597:1;42589:6;42585:14;42578:58;42670:14;42665:2;42657:6;42653:15;42646:39;42567:125;:::o;42698:243::-;42838:34;42834:1;42826:6;42822:14;42815:58;42907:26;42902:2;42894:6;42890:15;42883:51;42804:137;:::o;42947:229::-;43087:34;43083:1;43075:6;43071:14;43064:58;43156:12;43151:2;43143:6;43139:15;43132:37;43053:123;:::o;43182:228::-;43322:34;43318:1;43310:6;43306:14;43299:58;43391:11;43386:2;43378:6;43374:15;43367:36;43288:122;:::o;43416:182::-;43556:34;43552:1;43544:6;43540:14;43533:58;43522:76;:::o;43604:231::-;43744:34;43740:1;43732:6;43728:14;43721:58;43813:14;43808:2;43800:6;43796:15;43789:39;43710:125;:::o;43841:155::-;43981:7;43977:1;43969:6;43965:14;43958:31;43947:49;:::o;44002:182::-;44142:34;44138:1;44130:6;44126:14;44119:58;44108:76;:::o;44190:174::-;44330:26;44326:1;44318:6;44314:14;44307:50;44296:68;:::o;44370:228::-;44510:34;44506:1;44498:6;44494:14;44487:58;44579:11;44574:2;44566:6;44562:15;44555:36;44476:122;:::o;44604:234::-;44744:34;44740:1;44732:6;44728:14;44721:58;44813:17;44808:2;44800:6;44796:15;44789:42;44710:128;:::o;44844:220::-;44984:34;44980:1;44972:6;44968:14;44961:58;45053:3;45048:2;45040:6;45036:15;45029:28;44950:114;:::o;45070:::-;45176:8;:::o;45190:236::-;45330:34;45326:1;45318:6;45314:14;45307:58;45399:19;45394:2;45386:6;45382:15;45375:44;45296:130;:::o;45432:232::-;45572:34;45568:1;45560:6;45556:14;45549:58;45641:15;45636:2;45628:6;45624:15;45617:40;45538:126;:::o;45670:122::-;45743:24;45761:5;45743:24;:::i;:::-;45736:5;45733:35;45723:2;;45782:1;45779;45772:12;45723:2;45713:79;:::o;45798:116::-;45868:21;45883:5;45868:21;:::i;:::-;45861:5;45858:32;45848:2;;45904:1;45901;45894:12;45848:2;45838:76;:::o;45920:120::-;45992:23;46009:5;45992:23;:::i;:::-;45985:5;45982:34;45972:2;;46030:1;46027;46020:12;45972:2;45962:78;:::o;46046:122::-;46119:24;46137:5;46119:24;:::i;:::-;46112:5;46109:35;46099:2;;46158:1;46155;46148:12;46099:2;46089:79;:::o

Swarm Source

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