ETH Price: $3,502.13 (+4.67%)

Token

NotLuna (NL)
 

Overview

Max Total Supply

10,000 NL

Holders

5,810

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
1 NL
0x33e6eee1a7e91904e3c131f433846ecc6d2505b6
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:
NotLuna

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// 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, "Addr: cant send val, rcpt revert");
    }

    /**
     * @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, "Addr: low-level call value fail");
    }

    /**
     * @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, "Addr: insufficient balance 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, "Addr: low-level static call fail");
    }

    /**
     * @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), "Addr: static call 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, "Addr: low-level del 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), "Addr: delegate call 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);
            }
        }
    }
}

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 0x address");
        _setOwner(newOwner);
    }

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

abstract contract Functional {
    function toString(uint256 value) internal pure returns (string memory) {
        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);
    }
    
    bool private _reentryKey = false;
    modifier reentryLock {
        require(!_reentryKey, "attempt reenter locked function");
        _reentryKey = true;
        _;
        _reentryKey = false;
    }
}


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

contract NotLuna is IERC721, Ownable, Functional {

    using Address for address;
    
    // 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;
    
    // Specific Functionality
    bool public mintActive;
    bool private revealTokens;  //for URI redirects
    uint256 public totalTokens;
    uint256 public numberMinted;
    uint256 public maxPerTxn;
    uint256 public maxPerWallet;
    
    mapping(address => uint256) private _mintTracker;
    


    /**
     * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.
     */
    constructor() {
        _name = "NotLuna";
        _symbol = "NL";
        _baseURI = "https://notluna.xyz/metadata/";
        
        totalTokens = 10000;
        
        maxPerTxn = 1;
        maxPerWallet = 1;
    }

    //@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 == NotLuna.onERC721Received.selector;
    }
    
    // Standard Withdraw function for the owner to pull the contract
    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 {
        require((numberMinted + qty) > numberMinted, "Math overflow error");
        require((numberMinted + qty) <= totalTokens, "Cannot fill order");
        
        uint256 mintSeedValue = numberMinted; //Store the starting value of the mint batch
        
        for(uint256 i = 0; i < qty; i++) {
            _safeMint(_to, mintSeedValue + i);
            numberMinted ++;  //reservedTokens can be reset, numberMinted can not
        }
    }
    
    function airDrop(address[] memory _to) external onlyOwner {
        uint256 qty = _to.length;
        require((numberMinted + qty) > numberMinted, "Math overflow error");
        require((numberMinted + qty) <= totalTokens, "Cannot fill order");
        
        uint256 mintSeedValue = numberMinted;
        
        for(uint256 i = 0; i < qty; i++) {
            _safeMint(_to[i], mintSeedValue + i);
            numberMinted ++;  //reservedTokens can be reset, numberMinted can not
        }
    }
    
    function mint() external reentryLock {
        address _to = _msgSender();
        require((1 + numberMinted) <= totalTokens, "Mint: Not enough supply");
        require(_mintTracker[_to] < maxPerWallet, "Mint: Max per wallet exceeded");
        require(mintActive, "Mint: Not Open");

        _mintTracker[_to] ++;
        _safeMint(_to, numberMinted);
        numberMinted ++;        
    }

    function mintQty(uint256 qty) external reentryLock {
        address _to = _msgSender();
        require(qty <= maxPerTxn, "Mint: Above Trxn Threshold!");
        require((qty + numberMinted) <= totalTokens, "Mint: Not enough supply");
        require((_mintTracker[_to] + qty) <= maxPerWallet, "Mint: Max per wallet exceeded");
        require(mintActive, "Mint: Not Open");
        
        uint256 mintSeedValue = numberMinted; //Store the starting value of the mint batch
        _mintTracker[_to] += qty;
        numberMinted += qty;
		
        //send tokens
        for(uint256 i = 0; i < qty; i++) {
            _safeMint(_to, mintSeedValue + i);
        }
    }
    
    // allows holders to burn their own tokens if desired
    function burn(uint256 tokenID) external {
        require(_msgSender() == ownerOf(tokenID));
        _burn(tokenID);
    }
    
    //////////////////////////////////////////////////////////////
    //////////////////// Setters and Getters /////////////////////
    //////////////////////////////////////////////////////////////
    
    function setMaxMintThreshold(uint256 maxMints) external onlyOwner {
        maxPerTxn = maxMints;
    }
    
    function setMaxWalletThreshold(uint256 maxWallet) external onlyOwner {
        maxPerWallet = maxWallet;
    }
    
    function setBaseURI(string memory newURI) public onlyOwner {
        _baseURI = newURI;
    }
    
    function activateMint() public onlyOwner {
        mintActive = true;
    }
    
    function deactivateMint() public onlyOwner {
        mintActive = false;
    }
    
    function setTotalTokens(uint256 numTokens) public onlyOwner {
        totalTokens = numTokens;
    }

    function totalSupply() external view returns (uint256) {
        return numberMinted; //stupid bs for etherscan's call
    }
    
    function hideMeta() external onlyOwner {
        revealTokens = false;
    }
    
    function revealMeta() external onlyOwner {
        revealTokens = true;
    }

    /**
     * @dev See {IERC721-balanceOf}.
     */
    function balanceOf(address owner) public view virtual override returns (uint256) {
        require(owner != address(0), "ERC721: bal qry for 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: own query nonexist tkn");
        return owner;
    }

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

        require(
            msg.sender == owner || isApprovedForAll(owner, msg.sender),
            "ERC721: caller !owner/!approved"
        );

        _approve(to, tokenId);
    }

    /**
     * @dev See {IERC721-getApproved}.
     */
    function getApproved(uint256 tokenId) public view virtual override returns (address) {
        require(_exists(tokenId), "ERC721: approved nonexistent tkn");
        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: txfr !owner/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: txfr !owner/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), "txfr to non ERC721Reciever");
    }

    /**
     * @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: op query nonexistent tkn");
        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),
            "txfr to non ERC721Reciever"
        );
    }

    /**
     * @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: txfr token not owned");
        require(to != address(0), "ERC721: txfr to 0x0 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("txfr to non ERC721Reciever");
                } 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 {}

    // **************************************** 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){
        require(_exists(tokenId), "ERC721Metadata: URI 0x0 token");
        string memory tokenuri;
        
        if (!revealTokens) {
            //redirect to mystery box
            tokenuri = string(abi.encodePacked(_baseURI, "mystery.json"));
        } else {
            //Input flag data here to send to reveal URI
            tokenuri = string(abi.encodePacked(_baseURI, toString(tokenId), ".json"));
        }
        
        return tokenuri;
    }
    
    function contractURI() public view returns (string memory) {
            return string(abi.encodePacked(_baseURI,"contract.json"));
    }
    // *******************************************************************************

    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":[],"name":"activateMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_to","type":"address[]"}],"name":"airDrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenID","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deactivateMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hideMeta","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPerTxn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPerWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"mintActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"qty","type":"uint256"}],"name":"mintQty","outputs":[],"stateMutability":"nonpayable","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":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealMeta","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxMints","type":"uint256"}],"name":"setMaxMintThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxWallet","type":"uint256"}],"name":"setMaxWalletThreshold","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":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405260008060146101000a81548160ff0219169083151502179055503480156200002b57600080fd5b506200004c620000406200015560201b60201c565b6200015d60201b60201c565b6040518060400160405280600781526020017f4e6f744c756e6100000000000000000000000000000000000000000000000000815250600190805190602001906200009992919062000221565b506040518060400160405280600281526020017f4e4c00000000000000000000000000000000000000000000000000000000000081525060029080519060200190620000e792919062000221565b506040518060400160405280601d81526020017f68747470733a2f2f6e6f746c756e612e78797a2f6d657461646174612f000000815250600390805190602001906200013592919062000221565b506127106009819055506001600b819055506001600c8190555062000336565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200022f90620002d1565b90600052602060002090601f0160209004810192826200025357600085556200029f565b82601f106200026e57805160ff19168380011785556200029f565b828001600101855582156200029f579182015b828111156200029e57825182559160200191906001019062000281565b5b509050620002ae9190620002b2565b5090565b5b80821115620002cd576000816000905550600101620002b3565b5090565b60006002820490506001821680620002ea57607f821691505b6020821081141562000301576200030062000307565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6146e880620003466000396000f3fe6080604052600436106102285760003560e01c80636352211e11610123578063b3aa8806116100ab578063c9e71abd1161006f578063c9e71abd14610786578063d78c06fa146107af578063e8a3d485146107d8578063e985e9c514610803578063f2fde38b146108405761022f565b8063b3aa8806146106c9578063b88d4fde146106f2578063bdecbe481461071b578063c87b56dd14610732578063c91c04621461076f5761022f565b80637e1c0c09116100f25780637e1c0c09146105f65780638da5cb5b1461062157806395d89b411461064c578063a22cb46514610677578063b0b92263146106a05761022f565b80636352211e1461054e57806370a082311461058b578063715018a6146105c857806372e227ec146105df5761022f565b806325fd90f3116101b157806342966c681161017557806342966c681461047d578063453c2310146104a6578063484b973c146104d157806349a772b5146104fa57806355f804b3146105255761022f565b806325fd90f3146103d05780632e56f71e146103fb5780633cb51994146104125780633ccfd60b1461043d57806342842e0e146104545761022f565b8063095ea7b3116101f8578063095ea7b3146102ff5780631249c58b14610328578063150b7a021461033f57806318160ddd1461037c57806323b872dd146103a75761022f565b8062b6849f1461023157806301ffc9a71461025a57806306fdde0314610297578063081812fc146102c25761022f565b3661022f57005b005b34801561023d57600080fd5b50610258600480360381019061025391906132d5565b610869565b005b34801561026657600080fd5b50610281600480360381019061027c919061331e565b610a00565b60405161028e9190613a0f565b60405180910390f35b3480156102a357600080fd5b506102ac610b89565b6040516102b99190613a45565b60405180910390f35b3480156102ce57600080fd5b506102e960048036038101906102e491906133c1565b610c1b565b6040516102f691906139a8565b60405180910390f35b34801561030b57600080fd5b5061032660048036038101906103219190613295565b610ca0565b005b34801561033457600080fd5b5061033d610daa565b005b34801561034b57600080fd5b506103666004803603810190610361919061314a565b610fdc565b6040516103739190613a2a565b60405180910390f35b34801561038857600080fd5b50610391610ff1565b60405161039e9190613d67565b60405180910390f35b3480156103b357600080fd5b506103ce60048036038101906103c991906130f7565b610ffb565b005b3480156103dc57600080fd5b506103e5611054565b6040516103f29190613a0f565b60405180910390f35b34801561040757600080fd5b50610410611067565b005b34801561041e57600080fd5b50610427611100565b6040516104349190613d67565b60405180910390f35b34801561044957600080fd5b50610452611106565b005b34801561046057600080fd5b5061047b600480360381019061047691906130f7565b611237565b005b34801561048957600080fd5b506104a4600480360381019061049f91906133c1565b611257565b005b3480156104b257600080fd5b506104bb6112aa565b6040516104c89190613d67565b60405180910390f35b3480156104dd57600080fd5b506104f860048036038101906104f39190613295565b6112b0565b005b34801561050657600080fd5b5061050f611427565b60405161051c9190613d67565b60405180910390f35b34801561053157600080fd5b5061054c60048036038101906105479190613378565b61142d565b005b34801561055a57600080fd5b50610575600480360381019061057091906133c1565b6114c3565b60405161058291906139a8565b60405180910390f35b34801561059757600080fd5b506105b260048036038101906105ad919061308a565b611575565b6040516105bf9190613d67565b60405180910390f35b3480156105d457600080fd5b506105dd61162d565b005b3480156105eb57600080fd5b506105f46116b5565b005b34801561060257600080fd5b5061060b61174e565b6040516106189190613d67565b60405180910390f35b34801561062d57600080fd5b50610636611754565b60405161064391906139a8565b60405180910390f35b34801561065857600080fd5b5061066161177d565b60405161066e9190613a45565b60405180910390f35b34801561068357600080fd5b5061069e60048036038101906106999190613255565b61180f565b005b3480156106ac57600080fd5b506106c760048036038101906106c291906133c1565b61197b565b005b3480156106d557600080fd5b506106f060048036038101906106eb91906133c1565b611a01565b005b3480156106fe57600080fd5b50610719600480360381019061071491906131d2565b611a87565b005b34801561072757600080fd5b50610730611ae2565b005b34801561073e57600080fd5b50610759600480360381019061075491906133c1565b611b7b565b6040516107669190613a45565b60405180910390f35b34801561077b57600080fd5b50610784611c3a565b005b34801561079257600080fd5b506107ad60048036038101906107a891906133c1565b611cd3565b005b3480156107bb57600080fd5b506107d660048036038101906107d191906133c1565b611f88565b005b3480156107e457600080fd5b506107ed61200e565b6040516107fa9190613a45565b60405180910390f35b34801561080f57600080fd5b5061082a600480360381019061082591906130b7565b612036565b6040516108379190613a0f565b60405180910390f35b34801561084c57600080fd5b506108676004803603810190610862919061308a565b6120ca565b005b6108716121c2565b73ffffffffffffffffffffffffffffffffffffffff1661088f611754565b73ffffffffffffffffffffffffffffffffffffffff16146108e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108dc90613c87565b60405180910390fd5b600081519050600a5481600a546108fc9190613e98565b1161093c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161093390613d27565b60405180910390fd5b60095481600a5461094d9190613e98565b111561098e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098590613bc7565b60405180910390fd5b6000600a54905060005b828110156109fa576109cf8482815181106109b6576109b5614173565b5b602002602001015182846109ca9190613e98565b6121ca565b600a60008154809291906109e29061406c565b919050555080806109f29061406c565b915050610998565b50505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610acb57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610b3357507f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610b82575063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b606060018054610b9890614009565b80601f0160208091040260200160405190810160405280929190818152602001828054610bc490614009565b8015610c115780601f10610be657610100808354040283529160200191610c11565b820191906000526020600020905b815481529060010190602001808311610bf457829003601f168201915b5050505050905090565b6000610c26826121e8565b610c65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5c90613ae7565b60405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610cab826114c3565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610d1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1390613b07565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610d5c5750610d5b8133612036565b5b610d9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9290613be7565b60405180910390fd5b610da58383612254565b505050565b600060149054906101000a900460ff1615610dfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df190613c07565b60405180910390fd5b6001600060146101000a81548160ff0219169083151502179055506000610e1f6121c2565b9050600954600a546001610e339190613e98565b1115610e74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6b90613d07565b60405180910390fd5b600c54600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410610ef7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eee90613a87565b60405180910390fd5b600860009054906101000a900460ff16610f46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3d90613d47565b60405180910390fd5b600d60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190610f969061406c565b9190505550610fa781600a546121ca565b600a6000815480929190610fba9061406c565b91905055505060008060146101000a81548160ff021916908315150217905550565b600063150b7a0260e01b905095945050505050565b6000600a54905090565b611005338261230d565b611044576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103b90613ca7565b60405180910390fd5b61104f8383836123eb565b505050565b600860009054906101000a900460ff1681565b61106f6121c2565b73ffffffffffffffffffffffffffffffffffffffff1661108d611754565b73ffffffffffffffffffffffffffffffffffffffff16146110e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110da90613c87565b60405180910390fd5b6000600860006101000a81548160ff021916908315150217905550565b600b5481565b61110e6121c2565b73ffffffffffffffffffffffffffffffffffffffff1661112c611754565b73ffffffffffffffffffffffffffffffffffffffff1614611182576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117990613c87565b60405180910390fd5b600047905060003373ffffffffffffffffffffffffffffffffffffffff16826040516111ad90613993565b60006040518083038185875af1925050503d80600081146111ea576040519150601f19603f3d011682016040523d82523d6000602084013e6111ef565b606091505b5050905080611233576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122a90613b27565b60405180910390fd5b5050565b61125283838360405180602001604052806000815250611a87565b505050565b611260816114c3565b73ffffffffffffffffffffffffffffffffffffffff1661127e6121c2565b73ffffffffffffffffffffffffffffffffffffffff161461129e57600080fd5b6112a781612647565b50565b600c5481565b6112b86121c2565b73ffffffffffffffffffffffffffffffffffffffff166112d6611754565b73ffffffffffffffffffffffffffffffffffffffff161461132c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132390613c87565b60405180910390fd5b600a5481600a5461133d9190613e98565b1161137d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137490613d27565b60405180910390fd5b60095481600a5461138e9190613e98565b11156113cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c690613bc7565b60405180910390fd5b6000600a54905060005b82811015611421576113f68482846113f19190613e98565b6121ca565b600a60008154809291906114099061406c565b919050555080806114199061406c565b9150506113d9565b50505050565b600a5481565b6114356121c2565b73ffffffffffffffffffffffffffffffffffffffff16611453611754565b73ffffffffffffffffffffffffffffffffffffffff16146114a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a090613c87565b60405180910390fd5b80600390805190602001906114bf929190612daa565b5050565b6000806004600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561156c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156390613b87565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156115e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115dd90613c47565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6116356121c2565b73ffffffffffffffffffffffffffffffffffffffff16611653611754565b73ffffffffffffffffffffffffffffffffffffffff16146116a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a090613c87565b60405180910390fd5b6116b36000612758565b565b6116bd6121c2565b73ffffffffffffffffffffffffffffffffffffffff166116db611754565b73ffffffffffffffffffffffffffffffffffffffff1614611731576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172890613c87565b60405180910390fd5b6001600860016101000a81548160ff021916908315150217905550565b60095481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606002805461178c90614009565b80601f01602080910402602001604051908101604052809291908181526020018280546117b890614009565b80156118055780601f106117da57610100808354040283529160200191611805565b820191906000526020600020905b8154815290600101906020018083116117e857829003601f168201915b5050505050905090565b3373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561187e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187590613b67565b60405180910390fd5b80600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161196f9190613a0f565b60405180910390a35050565b6119836121c2565b73ffffffffffffffffffffffffffffffffffffffff166119a1611754565b73ffffffffffffffffffffffffffffffffffffffff16146119f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ee90613c87565b60405180910390fd5b8060098190555050565b611a096121c2565b73ffffffffffffffffffffffffffffffffffffffff16611a27611754565b73ffffffffffffffffffffffffffffffffffffffff1614611a7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7490613c87565b60405180910390fd5b80600c8190555050565b611a91338361230d565b611ad0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac790613ca7565b60405180910390fd5b611adc8484848461281c565b50505050565b611aea6121c2565b73ffffffffffffffffffffffffffffffffffffffff16611b08611754565b73ffffffffffffffffffffffffffffffffffffffff1614611b5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5590613c87565b60405180910390fd5b6000600860016101000a81548160ff021916908315150217905550565b6060611b86826121e8565b611bc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bbc90613ce7565b60405180910390fd5b6060600860019054906101000a900460ff16611c03576003604051602001611bed9190613971565b6040516020818303038152906040529050611c31565b6003611c0e84612878565b604051602001611c1f929190613920565b60405160208183030381529060405290505b80915050919050565b611c426121c2565b73ffffffffffffffffffffffffffffffffffffffff16611c60611754565b73ffffffffffffffffffffffffffffffffffffffff1614611cb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cad90613c87565b60405180910390fd5b6001600860006101000a81548160ff021916908315150217905550565b600060149054906101000a900460ff1615611d23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1a90613c07565b60405180910390fd5b6001600060146101000a81548160ff0219169083151502179055506000611d486121c2565b9050600b54821115611d8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8690613cc7565b60405180910390fd5b600954600a5483611da09190613e98565b1115611de1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd890613d07565b60405180910390fd5b600c5482600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611e2f9190613e98565b1115611e70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6790613a87565b60405180910390fd5b600860009054906101000a900460ff16611ebf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb690613d47565b60405180910390fd5b6000600a54905082600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611f159190613e98565b9250508190555082600a6000828254611f2e9190613e98565b9250508190555060005b83811015611f6857611f55838284611f509190613e98565b6121ca565b8080611f609061406c565b915050611f38565b50505060008060146101000a81548160ff02191690831515021790555050565b611f906121c2565b73ffffffffffffffffffffffffffffffffffffffff16611fae611754565b73ffffffffffffffffffffffffffffffffffffffff1614612004576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ffb90613c87565b60405180910390fd5b80600b8190555050565b60606003604051602001612022919061394f565b604051602081830303815290604052905090565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6120d26121c2565b73ffffffffffffffffffffffffffffffffffffffff166120f0611754565b73ffffffffffffffffffffffffffffffffffffffff1614612146576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213d90613c87565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156121b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ad90613b47565b60405180910390fd5b6121bf81612758565b50565b600033905090565b6121e48282604051806020016040528060008152506129d9565b5050565b60008073ffffffffffffffffffffffffffffffffffffffff166004600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816006600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166122c7836114c3565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000612318826121e8565b612357576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234e90613a67565b60405180910390fd5b6000612362836114c3565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806123d157508373ffffffffffffffffffffffffffffffffffffffff166123b984610c1b565b73ffffffffffffffffffffffffffffffffffffffff16145b806123e257506123e18185612036565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661240b826114c3565b73ffffffffffffffffffffffffffffffffffffffff1614612461576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245890613c67565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156124d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124c890613aa7565b60405180910390fd5b6124dc838383612a34565b6124e7600082612254565b6001600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546125379190613f1f565b925050819055506001600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461258e9190613e98565b92505081905550816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000612652826114c3565b905061266081600084612a34565b61266b600083612254565b6001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546126bb9190613f1f565b925050819055506004600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6128278484846123eb565b61283384848484612a39565b612872576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161286990613ba7565b60405180910390fd5b50505050565b606060008214156128c0576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506129d4565b600082905060005b600082146128f25780806128db9061406c565b915050600a826128eb9190613eee565b91506128c8565b60008167ffffffffffffffff81111561290e5761290d6141a2565b5b6040519080825280601f01601f1916602001820160405280156129405781602001600182028036833780820191505090505b5090505b600085146129cd576001826129599190613f1f565b9150600a8561296891906140b5565b60306129749190613e98565b60f81b81838151811061298a57612989614173565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856129c69190613eee565b9450612944565b8093505050505b919050565b6129e38383612bc9565b6129f06000848484612a39565b612a2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a2690613ba7565b60405180910390fd5b505050565b505050565b6000612a5a8473ffffffffffffffffffffffffffffffffffffffff16612d97565b15612bbc578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02338786866040518563ffffffff1660e01b8152600401612a9e94939291906139c3565b602060405180830381600087803b158015612ab857600080fd5b505af1925050508015612ae957506040513d601f19601f82011682018060405250810190612ae6919061334b565b60015b612b6c573d8060008114612b19576040519150601f19603f3d011682016040523d82523d6000602084013e612b1e565b606091505b50600081511415612b64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b5b90613ba7565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612bc1565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612c39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c3090613c27565b60405180910390fd5b612c42816121e8565b15612c82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c7990613ac7565b60405180910390fd5b612c8e60008383612a34565b6001600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612cde9190613e98565b92505081905550816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b828054612db690614009565b90600052602060002090601f016020900481019282612dd85760008555612e1f565b82601f10612df157805160ff1916838001178555612e1f565b82800160010185558215612e1f579182015b82811115612e1e578251825591602001919060010190612e03565b5b509050612e2c9190612e30565b5090565b5b80821115612e49576000816000905550600101612e31565b5090565b6000612e60612e5b84613da7565b613d82565b90508083825260208201905082856020860282011115612e8357612e826141db565b5b60005b85811015612eb35781612e998882612f41565b845260208401935060208301925050600181019050612e86565b5050509392505050565b6000612ed0612ecb84613dd3565b613d82565b905082815260208101848484011115612eec57612eeb6141e0565b5b612ef7848285613fc7565b509392505050565b6000612f12612f0d84613e04565b613d82565b905082815260208101848484011115612f2e57612f2d6141e0565b5b612f39848285613fc7565b509392505050565b600081359050612f5081614656565b92915050565b600082601f830112612f6b57612f6a6141d6565b5b8135612f7b848260208601612e4d565b91505092915050565b600081359050612f938161466d565b92915050565b600081359050612fa881614684565b92915050565b600081519050612fbd81614684565b92915050565b60008083601f840112612fd957612fd86141d6565b5b8235905067ffffffffffffffff811115612ff657612ff56141d1565b5b602083019150836001820283011115613012576130116141db565b5b9250929050565b600082601f83011261302e5761302d6141d6565b5b813561303e848260208601612ebd565b91505092915050565b600082601f83011261305c5761305b6141d6565b5b813561306c848260208601612eff565b91505092915050565b6000813590506130848161469b565b92915050565b6000602082840312156130a05761309f6141ea565b5b60006130ae84828501612f41565b91505092915050565b600080604083850312156130ce576130cd6141ea565b5b60006130dc85828601612f41565b92505060206130ed85828601612f41565b9150509250929050565b6000806000606084860312156131105761310f6141ea565b5b600061311e86828701612f41565b935050602061312f86828701612f41565b925050604061314086828701613075565b9150509250925092565b600080600080600060808688031215613166576131656141ea565b5b600061317488828901612f41565b955050602061318588828901612f41565b945050604061319688828901613075565b935050606086013567ffffffffffffffff8111156131b7576131b66141e5565b5b6131c388828901612fc3565b92509250509295509295909350565b600080600080608085870312156131ec576131eb6141ea565b5b60006131fa87828801612f41565b945050602061320b87828801612f41565b935050604061321c87828801613075565b925050606085013567ffffffffffffffff81111561323d5761323c6141e5565b5b61324987828801613019565b91505092959194509250565b6000806040838503121561326c5761326b6141ea565b5b600061327a85828601612f41565b925050602061328b85828601612f84565b9150509250929050565b600080604083850312156132ac576132ab6141ea565b5b60006132ba85828601612f41565b92505060206132cb85828601613075565b9150509250929050565b6000602082840312156132eb576132ea6141ea565b5b600082013567ffffffffffffffff811115613309576133086141e5565b5b61331584828501612f56565b91505092915050565b600060208284031215613334576133336141ea565b5b600061334284828501612f99565b91505092915050565b600060208284031215613361576133606141ea565b5b600061336f84828501612fae565b91505092915050565b60006020828403121561338e5761338d6141ea565b5b600082013567ffffffffffffffff8111156133ac576133ab6141e5565b5b6133b884828501613047565b91505092915050565b6000602082840312156133d7576133d66141ea565b5b60006133e584828501613075565b91505092915050565b6133f781613f53565b82525050565b61340681613f65565b82525050565b61341581613f71565b82525050565b600061342682613e4a565b6134308185613e60565b9350613440818560208601613fd6565b613449816141ef565b840191505092915050565b600061345f82613e55565b6134698185613e7c565b9350613479818560208601613fd6565b613482816141ef565b840191505092915050565b600061349882613e55565b6134a28185613e8d565b93506134b2818560208601613fd6565b80840191505092915050565b600081546134cb81614009565b6134d58186613e8d565b945060018216600081146134f0576001811461350157613534565b60ff19831686528186019350613534565b61350a85613e35565b60005b8381101561352c5781548189015260018201915060208101905061350d565b838801955050505b50505092915050565b600061354a602083613e7c565b915061355582614200565b602082019050919050565b600061356d600d83613e8d565b915061357882614229565b600d82019050919050565b6000613590601d83613e7c565b915061359b82614252565b602082019050919050565b60006135b3601b83613e7c565b91506135be8261427b565b602082019050919050565b60006135d6601c83613e7c565b91506135e1826142a4565b602082019050919050565b60006135f9602083613e7c565b9150613604826142cd565b602082019050919050565b600061361c601e83613e7c565b9150613627826142f6565b602082019050919050565b600061363f601883613e7c565b915061364a8261431f565b602082019050919050565b6000613662602083613e7c565b915061366d82614348565b602082019050919050565b6000613685601983613e7c565b915061369082614371565b602082019050919050565b60006136a8600c83613e8d565b91506136b38261439a565b600c82019050919050565b60006136cb601e83613e7c565b91506136d6826143c3565b602082019050919050565b60006136ee601a83613e7c565b91506136f9826143ec565b602082019050919050565b6000613711601183613e7c565b915061371c82614415565b602082019050919050565b6000613734601f83613e7c565b915061373f8261443e565b602082019050919050565b6000613757601f83613e7c565b915061376282614467565b602082019050919050565b600061377a602083613e7c565b915061378582614490565b602082019050919050565b600061379d602083613e7c565b91506137a8826144b9565b602082019050919050565b60006137c0600583613e8d565b91506137cb826144e2565b600582019050919050565b60006137e3601c83613e7c565b91506137ee8261450b565b602082019050919050565b6000613806602083613e7c565b915061381182614534565b602082019050919050565b6000613829601c83613e7c565b91506138348261455d565b602082019050919050565b600061384c601b83613e7c565b915061385782614586565b602082019050919050565b600061386f600083613e71565b915061387a826145af565b600082019050919050565b6000613892601d83613e7c565b915061389d826145b2565b602082019050919050565b60006138b5601783613e7c565b91506138c0826145db565b602082019050919050565b60006138d8601383613e7c565b91506138e382614604565b602082019050919050565b60006138fb600e83613e7c565b91506139068261462d565b602082019050919050565b61391a81613fbd565b82525050565b600061392c82856134be565b9150613938828461348d565b9150613943826137b3565b91508190509392505050565b600061395b82846134be565b915061396682613560565b915081905092915050565b600061397d82846134be565b91506139888261369b565b915081905092915050565b600061399e82613862565b9150819050919050565b60006020820190506139bd60008301846133ee565b92915050565b60006080820190506139d860008301876133ee565b6139e560208301866133ee565b6139f26040830185613911565b8181036060830152613a04818461341b565b905095945050505050565b6000602082019050613a2460008301846133fd565b92915050565b6000602082019050613a3f600083018461340c565b92915050565b60006020820190508181036000830152613a5f8184613454565b905092915050565b60006020820190508181036000830152613a808161353d565b9050919050565b60006020820190508181036000830152613aa081613583565b9050919050565b60006020820190508181036000830152613ac0816135a6565b9050919050565b60006020820190508181036000830152613ae0816135c9565b9050919050565b60006020820190508181036000830152613b00816135ec565b9050919050565b60006020820190508181036000830152613b208161360f565b9050919050565b60006020820190508181036000830152613b4081613632565b9050919050565b60006020820190508181036000830152613b6081613655565b9050919050565b60006020820190508181036000830152613b8081613678565b9050919050565b60006020820190508181036000830152613ba0816136be565b9050919050565b60006020820190508181036000830152613bc0816136e1565b9050919050565b60006020820190508181036000830152613be081613704565b9050919050565b60006020820190508181036000830152613c0081613727565b9050919050565b60006020820190508181036000830152613c208161374a565b9050919050565b60006020820190508181036000830152613c408161376d565b9050919050565b60006020820190508181036000830152613c6081613790565b9050919050565b60006020820190508181036000830152613c80816137d6565b9050919050565b60006020820190508181036000830152613ca0816137f9565b9050919050565b60006020820190508181036000830152613cc08161381c565b9050919050565b60006020820190508181036000830152613ce08161383f565b9050919050565b60006020820190508181036000830152613d0081613885565b9050919050565b60006020820190508181036000830152613d20816138a8565b9050919050565b60006020820190508181036000830152613d40816138cb565b9050919050565b60006020820190508181036000830152613d60816138ee565b9050919050565b6000602082019050613d7c6000830184613911565b92915050565b6000613d8c613d9d565b9050613d98828261403b565b919050565b6000604051905090565b600067ffffffffffffffff821115613dc257613dc16141a2565b5b602082029050602081019050919050565b600067ffffffffffffffff821115613dee57613ded6141a2565b5b613df7826141ef565b9050602081019050919050565b600067ffffffffffffffff821115613e1f57613e1e6141a2565b5b613e28826141ef565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000613ea382613fbd565b9150613eae83613fbd565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613ee357613ee26140e6565b5b828201905092915050565b6000613ef982613fbd565b9150613f0483613fbd565b925082613f1457613f13614115565b5b828204905092915050565b6000613f2a82613fbd565b9150613f3583613fbd565b925082821015613f4857613f476140e6565b5b828203905092915050565b6000613f5e82613f9d565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613ff4578082015181840152602081019050613fd9565b83811115614003576000848401525b50505050565b6000600282049050600182168061402157607f821691505b6020821081141561403557614034614144565b5b50919050565b614044826141ef565b810181811067ffffffffffffffff82111715614063576140626141a2565b5b80604052505050565b600061407782613fbd565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156140aa576140a96140e6565b5b600182019050919050565b60006140c082613fbd565b91506140cb83613fbd565b9250826140db576140da614115565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a206f70207175657279206e6f6e6578697374656e7420746b6e600082015250565b7f636f6e74726163742e6a736f6e00000000000000000000000000000000000000600082015250565b7f4d696e743a204d6178207065722077616c6c6574206578636565646564000000600082015250565b7f4552433732313a207478667220746f2030783020616464726573730000000000600082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a20617070726f766564206e6f6e6578697374656e7420746b6e600082015250565b7f4552433732313a20617070726f76616c2063757272656e74206f776e65720000600082015250565b7f5472616e73616374696f6e20556e7375636365737366756c0000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e65722069732030782061646472657373600082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f6d7973746572792e6a736f6e0000000000000000000000000000000000000000600082015250565b7f4552433732313a206f776e207175657279206e6f6e657869737420746b6e0000600082015250565b7f7478667220746f206e6f6e204552433732315265636965766572000000000000600082015250565b7f43616e6e6f742066696c6c206f72646572000000000000000000000000000000600082015250565b7f4552433732313a2063616c6c657220216f776e65722f21617070726f76656400600082015250565b7f617474656d7074207265656e746572206c6f636b65642066756e6374696f6e00600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a2062616c2071727920666f72207a65726f2061646472657373600082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a207478667220746f6b656e206e6f74206f776e656400000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207478667220216f776e65722f617070726f76656400000000600082015250565b7f4d696e743a2041626f7665205472786e205468726573686f6c64210000000000600082015250565b50565b7f4552433732314d657461646174613a205552492030783020746f6b656e000000600082015250565b7f4d696e743a204e6f7420656e6f75676820737570706c79000000000000000000600082015250565b7f4d617468206f766572666c6f77206572726f7200000000000000000000000000600082015250565b7f4d696e743a204e6f74204f70656e000000000000000000000000000000000000600082015250565b61465f81613f53565b811461466a57600080fd5b50565b61467681613f65565b811461468157600080fd5b50565b61468d81613f71565b811461469857600080fd5b50565b6146a481613fbd565b81146146af57600080fd5b5056fea26469706673582212203d8558b4c3b7d8d33664047f35a2e46cdc4cac3059b4cfeac385b04ca629b21a64736f6c63430008070033

Deployed Bytecode

0x6080604052600436106102285760003560e01c80636352211e11610123578063b3aa8806116100ab578063c9e71abd1161006f578063c9e71abd14610786578063d78c06fa146107af578063e8a3d485146107d8578063e985e9c514610803578063f2fde38b146108405761022f565b8063b3aa8806146106c9578063b88d4fde146106f2578063bdecbe481461071b578063c87b56dd14610732578063c91c04621461076f5761022f565b80637e1c0c09116100f25780637e1c0c09146105f65780638da5cb5b1461062157806395d89b411461064c578063a22cb46514610677578063b0b92263146106a05761022f565b80636352211e1461054e57806370a082311461058b578063715018a6146105c857806372e227ec146105df5761022f565b806325fd90f3116101b157806342966c681161017557806342966c681461047d578063453c2310146104a6578063484b973c146104d157806349a772b5146104fa57806355f804b3146105255761022f565b806325fd90f3146103d05780632e56f71e146103fb5780633cb51994146104125780633ccfd60b1461043d57806342842e0e146104545761022f565b8063095ea7b3116101f8578063095ea7b3146102ff5780631249c58b14610328578063150b7a021461033f57806318160ddd1461037c57806323b872dd146103a75761022f565b8062b6849f1461023157806301ffc9a71461025a57806306fdde0314610297578063081812fc146102c25761022f565b3661022f57005b005b34801561023d57600080fd5b50610258600480360381019061025391906132d5565b610869565b005b34801561026657600080fd5b50610281600480360381019061027c919061331e565b610a00565b60405161028e9190613a0f565b60405180910390f35b3480156102a357600080fd5b506102ac610b89565b6040516102b99190613a45565b60405180910390f35b3480156102ce57600080fd5b506102e960048036038101906102e491906133c1565b610c1b565b6040516102f691906139a8565b60405180910390f35b34801561030b57600080fd5b5061032660048036038101906103219190613295565b610ca0565b005b34801561033457600080fd5b5061033d610daa565b005b34801561034b57600080fd5b506103666004803603810190610361919061314a565b610fdc565b6040516103739190613a2a565b60405180910390f35b34801561038857600080fd5b50610391610ff1565b60405161039e9190613d67565b60405180910390f35b3480156103b357600080fd5b506103ce60048036038101906103c991906130f7565b610ffb565b005b3480156103dc57600080fd5b506103e5611054565b6040516103f29190613a0f565b60405180910390f35b34801561040757600080fd5b50610410611067565b005b34801561041e57600080fd5b50610427611100565b6040516104349190613d67565b60405180910390f35b34801561044957600080fd5b50610452611106565b005b34801561046057600080fd5b5061047b600480360381019061047691906130f7565b611237565b005b34801561048957600080fd5b506104a4600480360381019061049f91906133c1565b611257565b005b3480156104b257600080fd5b506104bb6112aa565b6040516104c89190613d67565b60405180910390f35b3480156104dd57600080fd5b506104f860048036038101906104f39190613295565b6112b0565b005b34801561050657600080fd5b5061050f611427565b60405161051c9190613d67565b60405180910390f35b34801561053157600080fd5b5061054c60048036038101906105479190613378565b61142d565b005b34801561055a57600080fd5b50610575600480360381019061057091906133c1565b6114c3565b60405161058291906139a8565b60405180910390f35b34801561059757600080fd5b506105b260048036038101906105ad919061308a565b611575565b6040516105bf9190613d67565b60405180910390f35b3480156105d457600080fd5b506105dd61162d565b005b3480156105eb57600080fd5b506105f46116b5565b005b34801561060257600080fd5b5061060b61174e565b6040516106189190613d67565b60405180910390f35b34801561062d57600080fd5b50610636611754565b60405161064391906139a8565b60405180910390f35b34801561065857600080fd5b5061066161177d565b60405161066e9190613a45565b60405180910390f35b34801561068357600080fd5b5061069e60048036038101906106999190613255565b61180f565b005b3480156106ac57600080fd5b506106c760048036038101906106c291906133c1565b61197b565b005b3480156106d557600080fd5b506106f060048036038101906106eb91906133c1565b611a01565b005b3480156106fe57600080fd5b50610719600480360381019061071491906131d2565b611a87565b005b34801561072757600080fd5b50610730611ae2565b005b34801561073e57600080fd5b50610759600480360381019061075491906133c1565b611b7b565b6040516107669190613a45565b60405180910390f35b34801561077b57600080fd5b50610784611c3a565b005b34801561079257600080fd5b506107ad60048036038101906107a891906133c1565b611cd3565b005b3480156107bb57600080fd5b506107d660048036038101906107d191906133c1565b611f88565b005b3480156107e457600080fd5b506107ed61200e565b6040516107fa9190613a45565b60405180910390f35b34801561080f57600080fd5b5061082a600480360381019061082591906130b7565b612036565b6040516108379190613a0f565b60405180910390f35b34801561084c57600080fd5b506108676004803603810190610862919061308a565b6120ca565b005b6108716121c2565b73ffffffffffffffffffffffffffffffffffffffff1661088f611754565b73ffffffffffffffffffffffffffffffffffffffff16146108e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108dc90613c87565b60405180910390fd5b600081519050600a5481600a546108fc9190613e98565b1161093c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161093390613d27565b60405180910390fd5b60095481600a5461094d9190613e98565b111561098e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098590613bc7565b60405180910390fd5b6000600a54905060005b828110156109fa576109cf8482815181106109b6576109b5614173565b5b602002602001015182846109ca9190613e98565b6121ca565b600a60008154809291906109e29061406c565b919050555080806109f29061406c565b915050610998565b50505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610acb57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610b3357507f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610b82575063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b606060018054610b9890614009565b80601f0160208091040260200160405190810160405280929190818152602001828054610bc490614009565b8015610c115780601f10610be657610100808354040283529160200191610c11565b820191906000526020600020905b815481529060010190602001808311610bf457829003601f168201915b5050505050905090565b6000610c26826121e8565b610c65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5c90613ae7565b60405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610cab826114c3565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610d1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1390613b07565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610d5c5750610d5b8133612036565b5b610d9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9290613be7565b60405180910390fd5b610da58383612254565b505050565b600060149054906101000a900460ff1615610dfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df190613c07565b60405180910390fd5b6001600060146101000a81548160ff0219169083151502179055506000610e1f6121c2565b9050600954600a546001610e339190613e98565b1115610e74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6b90613d07565b60405180910390fd5b600c54600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410610ef7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eee90613a87565b60405180910390fd5b600860009054906101000a900460ff16610f46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3d90613d47565b60405180910390fd5b600d60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190610f969061406c565b9190505550610fa781600a546121ca565b600a6000815480929190610fba9061406c565b91905055505060008060146101000a81548160ff021916908315150217905550565b600063150b7a0260e01b905095945050505050565b6000600a54905090565b611005338261230d565b611044576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103b90613ca7565b60405180910390fd5b61104f8383836123eb565b505050565b600860009054906101000a900460ff1681565b61106f6121c2565b73ffffffffffffffffffffffffffffffffffffffff1661108d611754565b73ffffffffffffffffffffffffffffffffffffffff16146110e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110da90613c87565b60405180910390fd5b6000600860006101000a81548160ff021916908315150217905550565b600b5481565b61110e6121c2565b73ffffffffffffffffffffffffffffffffffffffff1661112c611754565b73ffffffffffffffffffffffffffffffffffffffff1614611182576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117990613c87565b60405180910390fd5b600047905060003373ffffffffffffffffffffffffffffffffffffffff16826040516111ad90613993565b60006040518083038185875af1925050503d80600081146111ea576040519150601f19603f3d011682016040523d82523d6000602084013e6111ef565b606091505b5050905080611233576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122a90613b27565b60405180910390fd5b5050565b61125283838360405180602001604052806000815250611a87565b505050565b611260816114c3565b73ffffffffffffffffffffffffffffffffffffffff1661127e6121c2565b73ffffffffffffffffffffffffffffffffffffffff161461129e57600080fd5b6112a781612647565b50565b600c5481565b6112b86121c2565b73ffffffffffffffffffffffffffffffffffffffff166112d6611754565b73ffffffffffffffffffffffffffffffffffffffff161461132c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132390613c87565b60405180910390fd5b600a5481600a5461133d9190613e98565b1161137d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137490613d27565b60405180910390fd5b60095481600a5461138e9190613e98565b11156113cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c690613bc7565b60405180910390fd5b6000600a54905060005b82811015611421576113f68482846113f19190613e98565b6121ca565b600a60008154809291906114099061406c565b919050555080806114199061406c565b9150506113d9565b50505050565b600a5481565b6114356121c2565b73ffffffffffffffffffffffffffffffffffffffff16611453611754565b73ffffffffffffffffffffffffffffffffffffffff16146114a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a090613c87565b60405180910390fd5b80600390805190602001906114bf929190612daa565b5050565b6000806004600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561156c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156390613b87565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156115e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115dd90613c47565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6116356121c2565b73ffffffffffffffffffffffffffffffffffffffff16611653611754565b73ffffffffffffffffffffffffffffffffffffffff16146116a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a090613c87565b60405180910390fd5b6116b36000612758565b565b6116bd6121c2565b73ffffffffffffffffffffffffffffffffffffffff166116db611754565b73ffffffffffffffffffffffffffffffffffffffff1614611731576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172890613c87565b60405180910390fd5b6001600860016101000a81548160ff021916908315150217905550565b60095481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606002805461178c90614009565b80601f01602080910402602001604051908101604052809291908181526020018280546117b890614009565b80156118055780601f106117da57610100808354040283529160200191611805565b820191906000526020600020905b8154815290600101906020018083116117e857829003601f168201915b5050505050905090565b3373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561187e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187590613b67565b60405180910390fd5b80600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161196f9190613a0f565b60405180910390a35050565b6119836121c2565b73ffffffffffffffffffffffffffffffffffffffff166119a1611754565b73ffffffffffffffffffffffffffffffffffffffff16146119f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ee90613c87565b60405180910390fd5b8060098190555050565b611a096121c2565b73ffffffffffffffffffffffffffffffffffffffff16611a27611754565b73ffffffffffffffffffffffffffffffffffffffff1614611a7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7490613c87565b60405180910390fd5b80600c8190555050565b611a91338361230d565b611ad0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac790613ca7565b60405180910390fd5b611adc8484848461281c565b50505050565b611aea6121c2565b73ffffffffffffffffffffffffffffffffffffffff16611b08611754565b73ffffffffffffffffffffffffffffffffffffffff1614611b5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5590613c87565b60405180910390fd5b6000600860016101000a81548160ff021916908315150217905550565b6060611b86826121e8565b611bc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bbc90613ce7565b60405180910390fd5b6060600860019054906101000a900460ff16611c03576003604051602001611bed9190613971565b6040516020818303038152906040529050611c31565b6003611c0e84612878565b604051602001611c1f929190613920565b60405160208183030381529060405290505b80915050919050565b611c426121c2565b73ffffffffffffffffffffffffffffffffffffffff16611c60611754565b73ffffffffffffffffffffffffffffffffffffffff1614611cb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cad90613c87565b60405180910390fd5b6001600860006101000a81548160ff021916908315150217905550565b600060149054906101000a900460ff1615611d23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1a90613c07565b60405180910390fd5b6001600060146101000a81548160ff0219169083151502179055506000611d486121c2565b9050600b54821115611d8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8690613cc7565b60405180910390fd5b600954600a5483611da09190613e98565b1115611de1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd890613d07565b60405180910390fd5b600c5482600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611e2f9190613e98565b1115611e70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6790613a87565b60405180910390fd5b600860009054906101000a900460ff16611ebf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb690613d47565b60405180910390fd5b6000600a54905082600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611f159190613e98565b9250508190555082600a6000828254611f2e9190613e98565b9250508190555060005b83811015611f6857611f55838284611f509190613e98565b6121ca565b8080611f609061406c565b915050611f38565b50505060008060146101000a81548160ff02191690831515021790555050565b611f906121c2565b73ffffffffffffffffffffffffffffffffffffffff16611fae611754565b73ffffffffffffffffffffffffffffffffffffffff1614612004576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ffb90613c87565b60405180910390fd5b80600b8190555050565b60606003604051602001612022919061394f565b604051602081830303815290604052905090565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6120d26121c2565b73ffffffffffffffffffffffffffffffffffffffff166120f0611754565b73ffffffffffffffffffffffffffffffffffffffff1614612146576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213d90613c87565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156121b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ad90613b47565b60405180910390fd5b6121bf81612758565b50565b600033905090565b6121e48282604051806020016040528060008152506129d9565b5050565b60008073ffffffffffffffffffffffffffffffffffffffff166004600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816006600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166122c7836114c3565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000612318826121e8565b612357576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234e90613a67565b60405180910390fd5b6000612362836114c3565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806123d157508373ffffffffffffffffffffffffffffffffffffffff166123b984610c1b565b73ffffffffffffffffffffffffffffffffffffffff16145b806123e257506123e18185612036565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661240b826114c3565b73ffffffffffffffffffffffffffffffffffffffff1614612461576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245890613c67565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156124d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124c890613aa7565b60405180910390fd5b6124dc838383612a34565b6124e7600082612254565b6001600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546125379190613f1f565b925050819055506001600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461258e9190613e98565b92505081905550816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000612652826114c3565b905061266081600084612a34565b61266b600083612254565b6001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546126bb9190613f1f565b925050819055506004600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6128278484846123eb565b61283384848484612a39565b612872576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161286990613ba7565b60405180910390fd5b50505050565b606060008214156128c0576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506129d4565b600082905060005b600082146128f25780806128db9061406c565b915050600a826128eb9190613eee565b91506128c8565b60008167ffffffffffffffff81111561290e5761290d6141a2565b5b6040519080825280601f01601f1916602001820160405280156129405781602001600182028036833780820191505090505b5090505b600085146129cd576001826129599190613f1f565b9150600a8561296891906140b5565b60306129749190613e98565b60f81b81838151811061298a57612989614173565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856129c69190613eee565b9450612944565b8093505050505b919050565b6129e38383612bc9565b6129f06000848484612a39565b612a2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a2690613ba7565b60405180910390fd5b505050565b505050565b6000612a5a8473ffffffffffffffffffffffffffffffffffffffff16612d97565b15612bbc578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02338786866040518563ffffffff1660e01b8152600401612a9e94939291906139c3565b602060405180830381600087803b158015612ab857600080fd5b505af1925050508015612ae957506040513d601f19601f82011682018060405250810190612ae6919061334b565b60015b612b6c573d8060008114612b19576040519150601f19603f3d011682016040523d82523d6000602084013e612b1e565b606091505b50600081511415612b64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b5b90613ba7565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612bc1565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612c39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c3090613c27565b60405180910390fd5b612c42816121e8565b15612c82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c7990613ac7565b60405180910390fd5b612c8e60008383612a34565b6001600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612cde9190613e98565b92505081905550816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b828054612db690614009565b90600052602060002090601f016020900481019282612dd85760008555612e1f565b82601f10612df157805160ff1916838001178555612e1f565b82800160010185558215612e1f579182015b82811115612e1e578251825591602001919060010190612e03565b5b509050612e2c9190612e30565b5090565b5b80821115612e49576000816000905550600101612e31565b5090565b6000612e60612e5b84613da7565b613d82565b90508083825260208201905082856020860282011115612e8357612e826141db565b5b60005b85811015612eb35781612e998882612f41565b845260208401935060208301925050600181019050612e86565b5050509392505050565b6000612ed0612ecb84613dd3565b613d82565b905082815260208101848484011115612eec57612eeb6141e0565b5b612ef7848285613fc7565b509392505050565b6000612f12612f0d84613e04565b613d82565b905082815260208101848484011115612f2e57612f2d6141e0565b5b612f39848285613fc7565b509392505050565b600081359050612f5081614656565b92915050565b600082601f830112612f6b57612f6a6141d6565b5b8135612f7b848260208601612e4d565b91505092915050565b600081359050612f938161466d565b92915050565b600081359050612fa881614684565b92915050565b600081519050612fbd81614684565b92915050565b60008083601f840112612fd957612fd86141d6565b5b8235905067ffffffffffffffff811115612ff657612ff56141d1565b5b602083019150836001820283011115613012576130116141db565b5b9250929050565b600082601f83011261302e5761302d6141d6565b5b813561303e848260208601612ebd565b91505092915050565b600082601f83011261305c5761305b6141d6565b5b813561306c848260208601612eff565b91505092915050565b6000813590506130848161469b565b92915050565b6000602082840312156130a05761309f6141ea565b5b60006130ae84828501612f41565b91505092915050565b600080604083850312156130ce576130cd6141ea565b5b60006130dc85828601612f41565b92505060206130ed85828601612f41565b9150509250929050565b6000806000606084860312156131105761310f6141ea565b5b600061311e86828701612f41565b935050602061312f86828701612f41565b925050604061314086828701613075565b9150509250925092565b600080600080600060808688031215613166576131656141ea565b5b600061317488828901612f41565b955050602061318588828901612f41565b945050604061319688828901613075565b935050606086013567ffffffffffffffff8111156131b7576131b66141e5565b5b6131c388828901612fc3565b92509250509295509295909350565b600080600080608085870312156131ec576131eb6141ea565b5b60006131fa87828801612f41565b945050602061320b87828801612f41565b935050604061321c87828801613075565b925050606085013567ffffffffffffffff81111561323d5761323c6141e5565b5b61324987828801613019565b91505092959194509250565b6000806040838503121561326c5761326b6141ea565b5b600061327a85828601612f41565b925050602061328b85828601612f84565b9150509250929050565b600080604083850312156132ac576132ab6141ea565b5b60006132ba85828601612f41565b92505060206132cb85828601613075565b9150509250929050565b6000602082840312156132eb576132ea6141ea565b5b600082013567ffffffffffffffff811115613309576133086141e5565b5b61331584828501612f56565b91505092915050565b600060208284031215613334576133336141ea565b5b600061334284828501612f99565b91505092915050565b600060208284031215613361576133606141ea565b5b600061336f84828501612fae565b91505092915050565b60006020828403121561338e5761338d6141ea565b5b600082013567ffffffffffffffff8111156133ac576133ab6141e5565b5b6133b884828501613047565b91505092915050565b6000602082840312156133d7576133d66141ea565b5b60006133e584828501613075565b91505092915050565b6133f781613f53565b82525050565b61340681613f65565b82525050565b61341581613f71565b82525050565b600061342682613e4a565b6134308185613e60565b9350613440818560208601613fd6565b613449816141ef565b840191505092915050565b600061345f82613e55565b6134698185613e7c565b9350613479818560208601613fd6565b613482816141ef565b840191505092915050565b600061349882613e55565b6134a28185613e8d565b93506134b2818560208601613fd6565b80840191505092915050565b600081546134cb81614009565b6134d58186613e8d565b945060018216600081146134f0576001811461350157613534565b60ff19831686528186019350613534565b61350a85613e35565b60005b8381101561352c5781548189015260018201915060208101905061350d565b838801955050505b50505092915050565b600061354a602083613e7c565b915061355582614200565b602082019050919050565b600061356d600d83613e8d565b915061357882614229565b600d82019050919050565b6000613590601d83613e7c565b915061359b82614252565b602082019050919050565b60006135b3601b83613e7c565b91506135be8261427b565b602082019050919050565b60006135d6601c83613e7c565b91506135e1826142a4565b602082019050919050565b60006135f9602083613e7c565b9150613604826142cd565b602082019050919050565b600061361c601e83613e7c565b9150613627826142f6565b602082019050919050565b600061363f601883613e7c565b915061364a8261431f565b602082019050919050565b6000613662602083613e7c565b915061366d82614348565b602082019050919050565b6000613685601983613e7c565b915061369082614371565b602082019050919050565b60006136a8600c83613e8d565b91506136b38261439a565b600c82019050919050565b60006136cb601e83613e7c565b91506136d6826143c3565b602082019050919050565b60006136ee601a83613e7c565b91506136f9826143ec565b602082019050919050565b6000613711601183613e7c565b915061371c82614415565b602082019050919050565b6000613734601f83613e7c565b915061373f8261443e565b602082019050919050565b6000613757601f83613e7c565b915061376282614467565b602082019050919050565b600061377a602083613e7c565b915061378582614490565b602082019050919050565b600061379d602083613e7c565b91506137a8826144b9565b602082019050919050565b60006137c0600583613e8d565b91506137cb826144e2565b600582019050919050565b60006137e3601c83613e7c565b91506137ee8261450b565b602082019050919050565b6000613806602083613e7c565b915061381182614534565b602082019050919050565b6000613829601c83613e7c565b91506138348261455d565b602082019050919050565b600061384c601b83613e7c565b915061385782614586565b602082019050919050565b600061386f600083613e71565b915061387a826145af565b600082019050919050565b6000613892601d83613e7c565b915061389d826145b2565b602082019050919050565b60006138b5601783613e7c565b91506138c0826145db565b602082019050919050565b60006138d8601383613e7c565b91506138e382614604565b602082019050919050565b60006138fb600e83613e7c565b91506139068261462d565b602082019050919050565b61391a81613fbd565b82525050565b600061392c82856134be565b9150613938828461348d565b9150613943826137b3565b91508190509392505050565b600061395b82846134be565b915061396682613560565b915081905092915050565b600061397d82846134be565b91506139888261369b565b915081905092915050565b600061399e82613862565b9150819050919050565b60006020820190506139bd60008301846133ee565b92915050565b60006080820190506139d860008301876133ee565b6139e560208301866133ee565b6139f26040830185613911565b8181036060830152613a04818461341b565b905095945050505050565b6000602082019050613a2460008301846133fd565b92915050565b6000602082019050613a3f600083018461340c565b92915050565b60006020820190508181036000830152613a5f8184613454565b905092915050565b60006020820190508181036000830152613a808161353d565b9050919050565b60006020820190508181036000830152613aa081613583565b9050919050565b60006020820190508181036000830152613ac0816135a6565b9050919050565b60006020820190508181036000830152613ae0816135c9565b9050919050565b60006020820190508181036000830152613b00816135ec565b9050919050565b60006020820190508181036000830152613b208161360f565b9050919050565b60006020820190508181036000830152613b4081613632565b9050919050565b60006020820190508181036000830152613b6081613655565b9050919050565b60006020820190508181036000830152613b8081613678565b9050919050565b60006020820190508181036000830152613ba0816136be565b9050919050565b60006020820190508181036000830152613bc0816136e1565b9050919050565b60006020820190508181036000830152613be081613704565b9050919050565b60006020820190508181036000830152613c0081613727565b9050919050565b60006020820190508181036000830152613c208161374a565b9050919050565b60006020820190508181036000830152613c408161376d565b9050919050565b60006020820190508181036000830152613c6081613790565b9050919050565b60006020820190508181036000830152613c80816137d6565b9050919050565b60006020820190508181036000830152613ca0816137f9565b9050919050565b60006020820190508181036000830152613cc08161381c565b9050919050565b60006020820190508181036000830152613ce08161383f565b9050919050565b60006020820190508181036000830152613d0081613885565b9050919050565b60006020820190508181036000830152613d20816138a8565b9050919050565b60006020820190508181036000830152613d40816138cb565b9050919050565b60006020820190508181036000830152613d60816138ee565b9050919050565b6000602082019050613d7c6000830184613911565b92915050565b6000613d8c613d9d565b9050613d98828261403b565b919050565b6000604051905090565b600067ffffffffffffffff821115613dc257613dc16141a2565b5b602082029050602081019050919050565b600067ffffffffffffffff821115613dee57613ded6141a2565b5b613df7826141ef565b9050602081019050919050565b600067ffffffffffffffff821115613e1f57613e1e6141a2565b5b613e28826141ef565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000613ea382613fbd565b9150613eae83613fbd565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613ee357613ee26140e6565b5b828201905092915050565b6000613ef982613fbd565b9150613f0483613fbd565b925082613f1457613f13614115565b5b828204905092915050565b6000613f2a82613fbd565b9150613f3583613fbd565b925082821015613f4857613f476140e6565b5b828203905092915050565b6000613f5e82613f9d565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613ff4578082015181840152602081019050613fd9565b83811115614003576000848401525b50505050565b6000600282049050600182168061402157607f821691505b6020821081141561403557614034614144565b5b50919050565b614044826141ef565b810181811067ffffffffffffffff82111715614063576140626141a2565b5b80604052505050565b600061407782613fbd565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156140aa576140a96140e6565b5b600182019050919050565b60006140c082613fbd565b91506140cb83613fbd565b9250826140db576140da614115565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a206f70207175657279206e6f6e6578697374656e7420746b6e600082015250565b7f636f6e74726163742e6a736f6e00000000000000000000000000000000000000600082015250565b7f4d696e743a204d6178207065722077616c6c6574206578636565646564000000600082015250565b7f4552433732313a207478667220746f2030783020616464726573730000000000600082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a20617070726f766564206e6f6e6578697374656e7420746b6e600082015250565b7f4552433732313a20617070726f76616c2063757272656e74206f776e65720000600082015250565b7f5472616e73616374696f6e20556e7375636365737366756c0000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e65722069732030782061646472657373600082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f6d7973746572792e6a736f6e0000000000000000000000000000000000000000600082015250565b7f4552433732313a206f776e207175657279206e6f6e657869737420746b6e0000600082015250565b7f7478667220746f206e6f6e204552433732315265636965766572000000000000600082015250565b7f43616e6e6f742066696c6c206f72646572000000000000000000000000000000600082015250565b7f4552433732313a2063616c6c657220216f776e65722f21617070726f76656400600082015250565b7f617474656d7074207265656e746572206c6f636b65642066756e6374696f6e00600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a2062616c2071727920666f72207a65726f2061646472657373600082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a207478667220746f6b656e206e6f74206f776e656400000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207478667220216f776e65722f617070726f76656400000000600082015250565b7f4d696e743a2041626f7665205472786e205468726573686f6c64210000000000600082015250565b50565b7f4552433732314d657461646174613a205552492030783020746f6b656e000000600082015250565b7f4d696e743a204e6f7420656e6f75676820737570706c79000000000000000000600082015250565b7f4d617468206f766572666c6f77206572726f7200000000000000000000000000600082015250565b7f4d696e743a204e6f74204f70656e000000000000000000000000000000000000600082015250565b61465f81613f53565b811461466a57600080fd5b50565b61467681613f65565b811461468157600080fd5b50565b61468d81613f71565b811461469857600080fd5b50565b6146a481613fbd565b81146146af57600080fd5b5056fea26469706673582212203d8558b4c3b7d8d33664047f35a2e46cdc4cac3059b4cfeac385b04ca629b21a64736f6c63430008070033

Deployed Bytecode Sourcemap

17023:18249:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19699:511;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18489:357;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34087:84;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23731:207;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23293:372;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20222:401;;;;;;;;;;;;;:::i;:::-;;33031:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22372:126;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24601:314;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17768:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22170:80;;;;;;;;;;;;;:::i;:::-;;17917:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18928:223;;;;;;;;;;;;;:::i;:::-;;24986:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21386:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17948:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19163:524;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17883:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21974:95;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23003:228;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22743:198;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15210:94;;;;;;;;;;;;;:::i;:::-;;22600:79;;;;;;;;;;;;;:::i;:::-;;17850:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14559:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34228:88;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24010:289;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22262:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21850:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25242:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22510:78;;;;;;;;;;;;;:::i;:::-;;34403:548;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22081:77;;;;;;;;;;;;;:::i;:::-;;20631:684;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21733:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34963:139;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24370:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15459:186;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19699:511;14790:12;:10;:12::i;:::-;14779:23;;:7;:5;:7::i;:::-;:23;;;14771:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19768:11:::1;19782:3;:10;19768:24;;19834:12;;19827:3;19812:12;;:18;;;;:::i;:::-;19811:35;19803:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19913:11;;19905:3;19890:12;;:18;;;;:::i;:::-;19889:35;;19881:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;19967:21;19991:12;;19967:36;;20028:9;20024:179;20047:3;20043:1;:7;20024:179;;;20072:36;20082:3;20086:1;20082:6;;;;;;;;:::i;:::-;;;;;;;;20106:1;20090:13;:17;;;;:::i;:::-;20072:9;:36::i;:::-;20123:12;;:15;;;;;;;;;:::i;:::-;;;;;;20052:3;;;;;:::i;:::-;;;;20024:179;;;;19757:453;;19699:511:::0;:::o;18489:357::-;18574:4;18614:25;18599:40;;;:11;:40;;;;:109;;;;18675:33;18660:48;;;:11;:48;;;;18599:109;:170;;;;18744:25;18729:40;;;:11;:40;;;;18599:170;:239;;;;18805:33;;;18790:48;;;:11;:48;;;;18599:239;18591:247;;18489:357;;;:::o;34087:84::-;34126:13;34158:5;34151:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34087:84;:::o;23731:207::-;23807:7;23835:16;23843:7;23835;:16::i;:::-;23827:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;23906:15;:24;23922:7;23906:24;;;;;;;;;;;;;;;;;;;;;23899:31;;23731:207;;;:::o;23293:372::-;23374:13;23390:16;23398:7;23390;:16::i;:::-;23374:32;;23431:5;23425:11;;:2;:11;;;;23417:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;23520:5;23506:19;;:10;:19;;;:58;;;;23529:35;23546:5;23553:10;23529:16;:35::i;:::-;23506:58;23484:139;;;;;;;;;;;;:::i;:::-;;;;;;;;;23636:21;23645:2;23649:7;23636:8;:21::i;:::-;23363:302;23293:372;;:::o;20222:401::-;16493:11;;;;;;;;;;;16492:12;16484:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;16565:4;16551:11;;:18;;;;;;;;;;;;;;;;;;20270:11:::1;20284:12;:10;:12::i;:::-;20270:26;;20337:11;;20320:12;;20316:1;:16;;;;:::i;:::-;20315:33;;20307:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;20415:12;;20395;:17;20408:3;20395:17;;;;;;;;;;;;;;;;:32;20387:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;20480:10;;;;;;;;;;;20472:37;;;;;;;;;;;;:::i;:::-;;;;;;;;;20522:12;:17;20535:3;20522:17;;;;;;;;;;;;;;;;:20;;;;;;;;;:::i;:::-;;;;;;20553:28;20563:3;20568:12;;20553:9;:28::i;:::-;20592:12;;:15;;;;;;;;;:::i;:::-;;;;;;20259:364;16606:5:::0;16592:11;;:19;;;;;;;;;;;;;;;;;;20222:401::o;33031:215::-;33148:6;33208:30;;;33201:37;;33031:215;;;;;;;:::o;22372:126::-;22418:7;22445:12;;22438:19;;22372:126;:::o;24601:314::-;24796:39;24815:10;24827:7;24796:18;:39::i;:::-;24788:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;24879:28;24889:4;24895:2;24899:7;24879:9;:28::i;:::-;24601:314;;;:::o;17768:22::-;;;;;;;;;;;;;:::o;22170:80::-;14790:12;:10;:12::i;:::-;14779:23;;:7;:5;:7::i;:::-;:23;;;14771:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22237:5:::1;22224:10;;:18;;;;;;;;;;;;;;;;;;22170:80::o:0;17917:24::-;;;;:::o;18928:223::-;14790:12;:10;:12::i;:::-;14779:23;;:7;:5;:7::i;:::-;:23;;;14771:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18978:18:::1;18999:21;18978:42;;19032:12;19050:10;:15;;19073:10;19050:38;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19031:57;;;19107:7;19099:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;18967:184;;18928:223::o:0;24986:185::-;25124:39;25141:4;25147:2;25151:7;25124:39;;;;;;;;;;;;:16;:39::i;:::-;24986:185;;;:::o;21386:125::-;21461:16;21469:7;21461;:16::i;:::-;21445:32;;:12;:10;:12::i;:::-;:32;;;21437:41;;;;;;21489:14;21495:7;21489:5;:14::i;:::-;21386:125;:::o;17948:27::-;;;;:::o;19163:524::-;14790:12;:10;:12::i;:::-;14779:23;;:7;:5;:7::i;:::-;:23;;;14771:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19269:12:::1;;19262:3;19247:12;;:18;;;;:::i;:::-;19246:35;19238:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19348:11;;19340:3;19325:12;;:18;;;;:::i;:::-;19324:35;;19316:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;19402:21;19426:12;;19402:36;;19508:9;19504:176;19527:3;19523:1;:7;19504:176;;;19552:33;19562:3;19583:1;19567:13;:17;;;;:::i;:::-;19552:9;:33::i;:::-;19600:12;;:15;;;;;;;;;:::i;:::-;;;;;;19532:3;;;;;:::i;:::-;;;;19504:176;;;;19227:460;19163:524:::0;;:::o;17883:27::-;;;;:::o;21974:95::-;14790:12;:10;:12::i;:::-;14779:23;;:7;:5;:7::i;:::-;:23;;;14771:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22055:6:::1;22044:8;:17;;;;;;;;;;;;:::i;:::-;;21974:95:::0;:::o;23003:228::-;23075:7;23095:13;23111:7;:16;23119:7;23111:16;;;;;;;;;;;;;;;;;;;;;23095:32;;23163:1;23146:19;;:5;:19;;;;23138:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;23218:5;23211:12;;;23003:228;;;:::o;22743:198::-;22815:7;22860:1;22843:19;;:5;:19;;;;22835:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;22917:9;:16;22927:5;22917:16;;;;;;;;;;;;;;;;22910:23;;22743:198;;;:::o;15210:94::-;14790:12;:10;:12::i;:::-;14779:23;;:7;:5;:7::i;:::-;:23;;;14771:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15275:21:::1;15293:1;15275:9;:21::i;:::-;15210:94::o:0;22600:79::-;14790:12;:10;:12::i;:::-;14779:23;;:7;:5;:7::i;:::-;:23;;;14771:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22667:4:::1;22652:12;;:19;;;;;;;;;;;;;;;;;;22600:79::o:0;17850:26::-;;;;:::o;14559:87::-;14605:7;14632:6;;;;;;;;;;;14625:13;;14559:87;:::o;34228:88::-;34269:13;34301:7;34294:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34228:88;:::o;24010:289::-;24125:10;24113:22;;:8;:22;;;;24105:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;24221:8;24178:18;:30;24197:10;24178:30;;;;;;;;;;;;;;;:40;24209:8;24178:40;;;;;;;;;;;;;;;;:51;;;;;;;;;;;;;;;;;;24272:8;24245:46;;24260:10;24245:46;;;24282:8;24245:46;;;;;;:::i;:::-;;;;;;;;24010:289;;:::o;22262:102::-;14790:12;:10;:12::i;:::-;14779:23;;:7;:5;:7::i;:::-;:23;;;14771:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22347:9:::1;22333:11;:23;;;;22262:102:::0;:::o;21850:112::-;14790:12;:10;:12::i;:::-;14779:23;;:7;:5;:7::i;:::-;:23;;;14771:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21945:9:::1;21930:12;:24;;;;21850:112:::0;:::o;25242:305::-;25417:39;25436:10;25448:7;25417:18;:39::i;:::-;25409:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;25500:39;25514:4;25520:2;25524:7;25533:5;25500:13;:39::i;:::-;25242:305;;;;:::o;22510:78::-;14790:12;:10;:12::i;:::-;14779:23;;:7;:5;:7::i;:::-;:23;;;14771:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22575:5:::1;22560:12;;:20;;;;;;;;;;;;;;;;;;22510:78::o:0;34403:548::-;34461:13;34494:16;34502:7;34494;:16::i;:::-;34486:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;34555:22;34603:12;;;;;;;;;;;34598:310;;34706:8;34689:42;;;;;;;;:::i;:::-;;;;;;;;;;;;;34671:61;;34598:310;;;34858:8;34868:17;34877:7;34868:8;:17::i;:::-;34841:54;;;;;;;;;:::i;:::-;;;;;;;;;;;;;34823:73;;34598:310;34935:8;34928:15;;;34403:548;;;:::o;22081:77::-;14790:12;:10;:12::i;:::-;14779:23;;:7;:5;:7::i;:::-;:23;;;14771:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22146:4:::1;22133:10;;:17;;;;;;;;;;;;;;;;;;22081:77::o:0;20631:684::-;16493:11;;;;;;;;;;;16492:12;16484:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;16565:4;16551:11;;:18;;;;;;;;;;;;;;;;;;20693:11:::1;20707:12;:10;:12::i;:::-;20693:26;;20745:9;;20738:3;:16;;20730:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;20829:11;;20812:12;;20806:3;:18;;;;:::i;:::-;20805:35;;20797:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;20916:12;;20908:3;20888:12;:17;20901:3;20888:17;;;;;;;;;;;;;;;;:23;;;;:::i;:::-;20887:41;;20879:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;20981:10;;;;;;;;;;;20973:37;;;;;;;;;;;;:::i;:::-;;;;;;;;;21031:21;21055:12;;21031:36;;21144:3;21123:12;:17;21136:3;21123:17;;;;;;;;;;;;;;;;:24;;;;;;;:::i;:::-;;;;;;;;21174:3;21158:12;;:19;;;;;;;:::i;:::-;;;;;;;;21219:9;21215:93;21238:3;21234:1;:7;21215:93;;;21263:33;21273:3;21294:1;21278:13;:17;;;;:::i;:::-;21263:9;:33::i;:::-;21243:3;;;;;:::i;:::-;;;;21215:93;;;;20682:633;;16606:5:::0;16592:11;;:19;;;;;;;;;;;;;;;;;;20631:684;:::o;21733:105::-;14790:12;:10;:12::i;:::-;14779:23;;:7;:5;:7::i;:::-;:23;;;14771:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21822:8:::1;21810:9;:20;;;;21733:105:::0;:::o;34963:139::-;35007:13;35068:8;35051:42;;;;;;;;:::i;:::-;;;;;;;;;;;;;35037:57;;34963:139;:::o;24370:164::-;24467:4;24491:18;:25;24510:5;24491:25;;;;;;;;;;;;;;;:35;24517:8;24491:35;;;;;;;;;;;;;;;;;;;;;;;;;24484:42;;24370:164;;;;:::o;15459:186::-;14790:12;:10;:12::i;:::-;14779:23;;:7;:5;:7::i;:::-;:23;;;14771:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15568:1:::1;15548:22;;:8;:22;;;;15540:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;15618:19;15628:8;15618:9;:19::i;:::-;15459:186:::0;:::o;13942:98::-;13995:7;14022:10;14015:17;;13942:98;:::o;27998:110::-;28074:26;28084:2;28088:7;28074:26;;;;;;;;;;;;:9;:26::i;:::-;27998:110;;:::o;27033:127::-;27098:4;27150:1;27122:30;;:7;:16;27130:7;27122:16;;;;;;;;;;;;;;;;;;;;;:30;;;;27115:37;;27033:127;;;:::o;30934:167::-;31036:2;31009:15;:24;31025:7;31009:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;31085:7;31081:2;31054:39;;31063:16;31071:7;31063;:16::i;:::-;31054:39;;;;;;;;;;;;30934:167;;:::o;27327:329::-;27420:4;27445:16;27453:7;27445;:16::i;:::-;27437:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;27509:13;27525:16;27533:7;27525;:16::i;:::-;27509:32;;27571:5;27560:16;;:7;:16;;;:51;;;;27604:7;27580:31;;:20;27592:7;27580:11;:20::i;:::-;:31;;;27560:51;:87;;;;27615:32;27632:5;27639:7;27615:16;:32::i;:::-;27560:87;27552:96;;;27327:329;;;;:::o;30269:547::-;30421:4;30401:24;;:16;30409:7;30401;:16::i;:::-;:24;;;30393:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;30491:1;30477:16;;:2;:16;;;;30469:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;30536:39;30557:4;30563:2;30567:7;30536:20;:39::i;:::-;30640:29;30657:1;30661:7;30640:8;:29::i;:::-;30701:1;30682:9;:15;30692:4;30682:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;30730:1;30713:9;:13;30723:2;30713:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;30761:2;30742:7;:16;30750:7;30742:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;30800:7;30796:2;30781:27;;30790:4;30781:27;;;;;;;;;;;;30269:547;;;:::o;29579:353::-;29639:13;29655:16;29663:7;29655;:16::i;:::-;29639:32;;29684:48;29705:5;29720:1;29724:7;29684:20;:48::i;:::-;29773:29;29790:1;29794:7;29773:8;:29::i;:::-;29835:1;29815:9;:16;29825:5;29815:16;;;;;;;;;;;;;;;;:21;;;;;;;:::i;:::-;;;;;;;;29854:7;:16;29862:7;29854:16;;;;;;;;;;;;29847:23;;;;;;;;;;;29916:7;29912:1;29888:36;;29897:5;29888:36;;;;;;;;;;;;29628:304;29579:353;:::o;15653:173::-;15709:16;15728:6;;;;;;;;;;;15709:25;;15754:8;15745:6;;:17;;;;;;;;;;;;;;;;;;15809:8;15778:40;;15799:8;15778:40;;;;;;;;;;;;15698:128;15653:173;:::o;26429:291::-;26586:28;26596:4;26602:2;26606:7;26586:9;:28::i;:::-;26633:48;26656:4;26662:2;26666:7;26675:5;26633:22;:48::i;:::-;26625:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;26429:291;;;;:::o;15869:532::-;15925:13;15964:1;15955:5;:10;15951:53;;;15982:10;;;;;;;;;;;;;;;;;;;;;15951:53;16014:12;16029:5;16014:20;;16045:14;16070:78;16085:1;16077:4;:9;16070:78;;16103:8;;;;;:::i;:::-;;;;16134:2;16126:10;;;;;:::i;:::-;;;16070:78;;;16158:19;16190:6;16180:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16158:39;;16208:154;16224:1;16215:5;:10;16208:154;;16252:1;16242:11;;;;;:::i;:::-;;;16319:2;16311:5;:10;;;;:::i;:::-;16298:2;:24;;;;:::i;:::-;16285:39;;16268:6;16275;16268:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;16348:2;16339:11;;;;;:::i;:::-;;;16208:154;;;16386:6;16372:21;;;;;15869:532;;;;:::o;28335:297::-;28465:18;28471:2;28475:7;28465:5;:18::i;:::-;28516:54;28547:1;28551:2;28555:7;28564:5;28516:22;:54::i;:::-;28494:130;;;;;;;;;;;;:::i;:::-;;;;;;;;;28335:297;;;:::o;33818:126::-;;;;:::o;31666:777::-;31821:4;31842:15;:2;:13;;;:15::i;:::-;31838:598;;;31894:2;31878:36;;;31915:10;31927:4;31933:7;31942:5;31878:70;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;31874:507;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32139:1;32122:6;:13;:18;32118:248;;;32165:36;;;;;;;;;;:::i;:::-;;;;;;;;32118:248;32316:6;32310:13;32301:6;32297:2;32293:15;32286:38;31874:507;32009:45;;;31999:55;;;:6;:55;;;;31992:62;;;;;31838:598;32420:4;32413:11;;31666:777;;;;;;;:::o;28968:382::-;29062:1;29048:16;;:2;:16;;;;29040:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;29121:16;29129:7;29121;:16::i;:::-;29120:17;29112:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;29183:45;29212:1;29216:2;29220:7;29183:20;:45::i;:::-;29258:1;29241:9;:13;29251:2;29241:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;29289:2;29270:7;:16;29278:7;29270:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;29334:7;29330:2;29309:33;;29326:1;29309:33;;;;;;;;;;;;28968:382;;:::o;6863:387::-;6923:4;7131:12;7198:7;7186:20;7178:28;;7241:1;7234:4;:8;7227:15;;;6863: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:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;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:112;;;1025:79;;:::i;:::-;994:112;1115:41;1149:6;1144:3;1139;1115:41;:::i;:::-;835:327;752:410;;;;;:::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:112;;;1443:79;;:::i;:::-;1412:112;1533:41;1567:6;1562:3;1557;1533:41;:::i;:::-;1252:328;1168:412;;;;;:::o;1586:139::-;1632:5;1670:6;1657:20;1648:29;;1686:33;1713:5;1686:33;:::i;:::-;1586:139;;;;:::o;1748:370::-;1819:5;1868:3;1861:4;1853:6;1849:17;1845:27;1835:122;;1876:79;;:::i;:::-;1835:122;1993:6;1980:20;2018:94;2108:3;2100:6;2093:4;2085:6;2081:17;2018:94;:::i;:::-;2009:103;;1825:293;1748:370;;;;:::o;2124:133::-;2167:5;2205:6;2192:20;2183:29;;2221:30;2245:5;2221:30;:::i;:::-;2124:133;;;;:::o;2263:137::-;2308:5;2346:6;2333:20;2324:29;;2362:32;2388:5;2362:32;:::i;:::-;2263:137;;;;:::o;2406:141::-;2462:5;2493:6;2487:13;2478:22;;2509:32;2535:5;2509:32;:::i;:::-;2406:141;;;;:::o;2566:552::-;2623:8;2633:6;2683:3;2676:4;2668:6;2664:17;2660:27;2650:122;;2691:79;;:::i;:::-;2650:122;2804:6;2791:20;2781:30;;2834:18;2826:6;2823:30;2820:117;;;2856:79;;:::i;:::-;2820:117;2970:4;2962:6;2958:17;2946:29;;3024:3;3016:4;3008:6;3004:17;2994:8;2990:32;2987:41;2984:128;;;3031:79;;:::i;:::-;2984:128;2566:552;;;;;:::o;3137:338::-;3192:5;3241:3;3234:4;3226:6;3222:17;3218:27;3208:122;;3249:79;;:::i;:::-;3208:122;3366:6;3353:20;3391:78;3465:3;3457:6;3450:4;3442:6;3438:17;3391:78;:::i;:::-;3382:87;;3198:277;3137:338;;;;:::o;3495:340::-;3551:5;3600:3;3593:4;3585:6;3581:17;3577:27;3567:122;;3608:79;;:::i;:::-;3567:122;3725:6;3712:20;3750:79;3825:3;3817:6;3810:4;3802:6;3798:17;3750:79;:::i;:::-;3741:88;;3557:278;3495:340;;;;:::o;3841:139::-;3887:5;3925:6;3912:20;3903:29;;3941:33;3968:5;3941:33;:::i;:::-;3841:139;;;;:::o;3986:329::-;4045:6;4094:2;4082:9;4073:7;4069:23;4065:32;4062:119;;;4100:79;;:::i;:::-;4062:119;4220:1;4245:53;4290:7;4281:6;4270:9;4266:22;4245:53;:::i;:::-;4235:63;;4191:117;3986:329;;;;:::o;4321:474::-;4389:6;4397;4446:2;4434:9;4425:7;4421:23;4417:32;4414:119;;;4452:79;;:::i;:::-;4414:119;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;4321:474;;;;;:::o;4801:619::-;4878:6;4886;4894;4943:2;4931:9;4922:7;4918:23;4914:32;4911:119;;;4949:79;;:::i;:::-;4911:119;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;4801:619;;;;;:::o;5426:963::-;5523:6;5531;5539;5547;5555;5604:3;5592:9;5583:7;5579:23;5575:33;5572:120;;;5611:79;;:::i;:::-;5572:120;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:117;;;6195:79;;:::i;:::-;6159:117;6308:64;6364:7;6355:6;6344:9;6340:22;6308:64;:::i;:::-;6290:82;;;;6085:297;5426:963;;;;;;;;:::o;6395:943::-;6490:6;6498;6506;6514;6563:3;6551:9;6542:7;6538:23;6534:33;6531:120;;;6570:79;;:::i;:::-;6531:120;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:117;;;7154:79;;:::i;:::-;7118:117;7259:62;7313:7;7304:6;7293:9;7289:22;7259:62;:::i;:::-;7249:72;;7044:287;6395:943;;;;;;;:::o;7344:468::-;7409:6;7417;7466:2;7454:9;7445:7;7441:23;7437:32;7434:119;;;7472:79;;:::i;:::-;7434:119;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;7344:468;;;;;:::o;7818:474::-;7886:6;7894;7943:2;7931:9;7922:7;7918:23;7914:32;7911:119;;;7949:79;;:::i;:::-;7911:119;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;7818:474;;;;;:::o;8298:539::-;8382:6;8431:2;8419:9;8410:7;8406:23;8402:32;8399:119;;;8437:79;;:::i;:::-;8399:119;8585:1;8574:9;8570:17;8557:31;8615:18;8607:6;8604:30;8601:117;;;8637:79;;:::i;:::-;8601:117;8742:78;8812:7;8803:6;8792:9;8788:22;8742:78;:::i;:::-;8732:88;;8528:302;8298:539;;;;:::o;8843:327::-;8901:6;8950:2;8938:9;8929:7;8925:23;8921:32;8918:119;;;8956:79;;:::i;:::-;8918:119;9076:1;9101:52;9145:7;9136:6;9125:9;9121:22;9101:52;:::i;:::-;9091:62;;9047:116;8843:327;;;;:::o;9176:349::-;9245:6;9294:2;9282:9;9273:7;9269:23;9265:32;9262:119;;;9300:79;;:::i;:::-;9262:119;9420:1;9445:63;9500:7;9491:6;9480:9;9476:22;9445:63;:::i;:::-;9435:73;;9391:127;9176:349;;;;:::o;9531:509::-;9600:6;9649:2;9637:9;9628:7;9624:23;9620:32;9617:119;;;9655:79;;:::i;:::-;9617:119;9803:1;9792:9;9788:17;9775:31;9833:18;9825:6;9822:30;9819:117;;;9855:79;;:::i;:::-;9819:117;9960:63;10015:7;10006:6;9995:9;9991:22;9960:63;:::i;:::-;9950:73;;9746:287;9531:509;;;;:::o;10046:329::-;10105:6;10154:2;10142:9;10133:7;10129:23;10125:32;10122:119;;;10160:79;;:::i;:::-;10122:119;10280:1;10305:53;10350:7;10341:6;10330:9;10326:22;10305:53;:::i;:::-;10295:63;;10251:117;10046:329;;;;:::o;10381:118::-;10468:24;10486:5;10468:24;:::i;:::-;10463:3;10456:37;10381:118;;:::o;10505:109::-;10586:21;10601:5;10586:21;:::i;:::-;10581:3;10574:34;10505:109;;:::o;10620:115::-;10705:23;10722:5;10705:23;:::i;:::-;10700:3;10693:36;10620:115;;:::o;10741:360::-;10827:3;10855:38;10887:5;10855:38;:::i;:::-;10909:70;10972:6;10967:3;10909:70;:::i;:::-;10902:77;;10988:52;11033:6;11028:3;11021:4;11014:5;11010:16;10988:52;:::i;:::-;11065:29;11087:6;11065:29;:::i;:::-;11060:3;11056:39;11049:46;;10831:270;10741:360;;;;:::o;11107:364::-;11195:3;11223:39;11256:5;11223:39;:::i;:::-;11278:71;11342:6;11337:3;11278:71;:::i;:::-;11271:78;;11358:52;11403:6;11398:3;11391:4;11384:5;11380:16;11358:52;:::i;:::-;11435:29;11457:6;11435:29;:::i;:::-;11430:3;11426:39;11419:46;;11199:272;11107:364;;;;:::o;11477:377::-;11583:3;11611:39;11644:5;11611:39;:::i;:::-;11666:89;11748:6;11743:3;11666:89;:::i;:::-;11659:96;;11764:52;11809:6;11804:3;11797:4;11790:5;11786:16;11764:52;:::i;:::-;11841:6;11836:3;11832:16;11825:23;;11587:267;11477:377;;;;:::o;11884:845::-;11987:3;12024:5;12018:12;12053:36;12079:9;12053:36;:::i;:::-;12105:89;12187:6;12182:3;12105:89;:::i;:::-;12098:96;;12225:1;12214:9;12210:17;12241:1;12236:137;;;;12387:1;12382:341;;;;12203:520;;12236:137;12320:4;12316:9;12305;12301:25;12296:3;12289:38;12356:6;12351:3;12347:16;12340:23;;12236:137;;12382:341;12449:38;12481:5;12449:38;:::i;:::-;12509:1;12523:154;12537:6;12534:1;12531:13;12523:154;;;12611:7;12605:14;12601:1;12596:3;12592:11;12585:35;12661:1;12652:7;12648:15;12637:26;;12559:4;12556:1;12552:12;12547:17;;12523:154;;;12706:6;12701:3;12697:16;12690:23;;12389:334;;12203:520;;11991:738;;11884:845;;;;:::o;12735:366::-;12877:3;12898:67;12962:2;12957:3;12898:67;:::i;:::-;12891:74;;12974:93;13063:3;12974:93;:::i;:::-;13092:2;13087:3;13083:12;13076:19;;12735:366;;;:::o;13107:402::-;13267:3;13288:85;13370:2;13365:3;13288:85;:::i;:::-;13281:92;;13382:93;13471:3;13382:93;:::i;:::-;13500:2;13495:3;13491:12;13484:19;;13107:402;;;:::o;13515:366::-;13657:3;13678:67;13742:2;13737:3;13678:67;:::i;:::-;13671:74;;13754:93;13843:3;13754:93;:::i;:::-;13872:2;13867:3;13863:12;13856:19;;13515:366;;;:::o;13887:::-;14029:3;14050:67;14114:2;14109:3;14050:67;:::i;:::-;14043:74;;14126:93;14215:3;14126:93;:::i;:::-;14244:2;14239:3;14235:12;14228:19;;13887:366;;;:::o;14259:::-;14401:3;14422:67;14486:2;14481:3;14422:67;:::i;:::-;14415:74;;14498:93;14587:3;14498:93;:::i;:::-;14616:2;14611:3;14607:12;14600:19;;14259:366;;;:::o;14631:::-;14773:3;14794:67;14858:2;14853:3;14794:67;:::i;:::-;14787:74;;14870:93;14959:3;14870:93;:::i;:::-;14988:2;14983:3;14979:12;14972:19;;14631:366;;;:::o;15003:::-;15145:3;15166:67;15230:2;15225:3;15166:67;:::i;:::-;15159:74;;15242:93;15331:3;15242:93;:::i;:::-;15360:2;15355:3;15351:12;15344:19;;15003:366;;;:::o;15375:::-;15517:3;15538:67;15602:2;15597:3;15538:67;:::i;:::-;15531:74;;15614:93;15703:3;15614:93;:::i;:::-;15732:2;15727:3;15723:12;15716:19;;15375:366;;;:::o;15747:::-;15889:3;15910:67;15974:2;15969:3;15910:67;:::i;:::-;15903:74;;15986:93;16075:3;15986:93;:::i;:::-;16104:2;16099:3;16095:12;16088:19;;15747:366;;;:::o;16119:::-;16261:3;16282:67;16346:2;16341:3;16282:67;:::i;:::-;16275:74;;16358:93;16447:3;16358:93;:::i;:::-;16476:2;16471:3;16467:12;16460:19;;16119:366;;;:::o;16491:402::-;16651:3;16672:85;16754:2;16749:3;16672:85;:::i;:::-;16665:92;;16766:93;16855:3;16766:93;:::i;:::-;16884:2;16879:3;16875:12;16868:19;;16491:402;;;:::o;16899:366::-;17041:3;17062:67;17126:2;17121:3;17062:67;:::i;:::-;17055:74;;17138:93;17227:3;17138:93;:::i;:::-;17256:2;17251:3;17247:12;17240:19;;16899:366;;;:::o;17271:::-;17413:3;17434:67;17498:2;17493:3;17434:67;:::i;:::-;17427:74;;17510:93;17599:3;17510:93;:::i;:::-;17628:2;17623:3;17619:12;17612:19;;17271:366;;;:::o;17643:::-;17785:3;17806:67;17870:2;17865:3;17806:67;:::i;:::-;17799:74;;17882:93;17971:3;17882:93;:::i;:::-;18000:2;17995:3;17991:12;17984:19;;17643:366;;;:::o;18015:::-;18157:3;18178:67;18242:2;18237:3;18178:67;:::i;:::-;18171:74;;18254:93;18343:3;18254:93;:::i;:::-;18372:2;18367:3;18363:12;18356:19;;18015:366;;;:::o;18387:::-;18529:3;18550:67;18614:2;18609:3;18550:67;:::i;:::-;18543:74;;18626:93;18715:3;18626:93;:::i;:::-;18744:2;18739:3;18735:12;18728:19;;18387:366;;;:::o;18759:::-;18901:3;18922:67;18986:2;18981:3;18922:67;:::i;:::-;18915:74;;18998:93;19087:3;18998:93;:::i;:::-;19116:2;19111:3;19107:12;19100:19;;18759:366;;;:::o;19131:::-;19273:3;19294:67;19358:2;19353:3;19294:67;:::i;:::-;19287:74;;19370:93;19459:3;19370:93;:::i;:::-;19488:2;19483:3;19479:12;19472:19;;19131:366;;;:::o;19503:400::-;19663:3;19684:84;19766:1;19761:3;19684:84;:::i;:::-;19677:91;;19777:93;19866:3;19777:93;:::i;:::-;19895:1;19890:3;19886:11;19879:18;;19503:400;;;:::o;19909:366::-;20051:3;20072:67;20136:2;20131:3;20072:67;:::i;:::-;20065:74;;20148:93;20237:3;20148:93;:::i;:::-;20266:2;20261:3;20257:12;20250:19;;19909:366;;;:::o;20281:::-;20423:3;20444:67;20508:2;20503:3;20444:67;:::i;:::-;20437:74;;20520:93;20609:3;20520:93;:::i;:::-;20638:2;20633:3;20629:12;20622:19;;20281:366;;;:::o;20653:::-;20795:3;20816:67;20880:2;20875:3;20816:67;:::i;:::-;20809:74;;20892:93;20981:3;20892:93;:::i;:::-;21010:2;21005:3;21001:12;20994:19;;20653:366;;;:::o;21025:::-;21167:3;21188:67;21252:2;21247:3;21188:67;:::i;:::-;21181:74;;21264:93;21353:3;21264:93;:::i;:::-;21382:2;21377:3;21373:12;21366:19;;21025:366;;;:::o;21397:398::-;21556:3;21577:83;21658:1;21653:3;21577:83;:::i;:::-;21570:90;;21669:93;21758:3;21669:93;:::i;:::-;21787:1;21782:3;21778:11;21771:18;;21397:398;;;:::o;21801:366::-;21943:3;21964:67;22028:2;22023:3;21964:67;:::i;:::-;21957:74;;22040:93;22129:3;22040:93;:::i;:::-;22158:2;22153:3;22149:12;22142:19;;21801:366;;;:::o;22173:::-;22315:3;22336:67;22400:2;22395:3;22336:67;:::i;:::-;22329:74;;22412:93;22501:3;22412:93;:::i;:::-;22530:2;22525:3;22521:12;22514:19;;22173:366;;;:::o;22545:::-;22687:3;22708:67;22772:2;22767:3;22708:67;:::i;:::-;22701:74;;22784:93;22873:3;22784:93;:::i;:::-;22902:2;22897:3;22893:12;22886:19;;22545:366;;;:::o;22917:::-;23059:3;23080:67;23144:2;23139:3;23080:67;:::i;:::-;23073:74;;23156:93;23245:3;23156:93;:::i;:::-;23274:2;23269:3;23265:12;23258:19;;22917:366;;;:::o;23289:118::-;23376:24;23394:5;23376:24;:::i;:::-;23371:3;23364:37;23289:118;;:::o;23413:695::-;23691:3;23713:92;23801:3;23792:6;23713:92;:::i;:::-;23706:99;;23822:95;23913:3;23904:6;23822:95;:::i;:::-;23815:102;;23934:148;24078:3;23934:148;:::i;:::-;23927:155;;24099:3;24092:10;;23413:695;;;;;:::o;24114:535::-;24344:3;24366:92;24454:3;24445:6;24366:92;:::i;:::-;24359:99;;24475:148;24619:3;24475:148;:::i;:::-;24468:155;;24640:3;24633:10;;24114:535;;;;:::o;24655:::-;24885:3;24907:92;24995:3;24986:6;24907:92;:::i;:::-;24900:99;;25016:148;25160:3;25016:148;:::i;:::-;25009:155;;25181:3;25174:10;;24655:535;;;;:::o;25196:379::-;25380:3;25402:147;25545:3;25402:147;:::i;:::-;25395:154;;25566:3;25559:10;;25196:379;;;:::o;25581:222::-;25674:4;25712:2;25701:9;25697:18;25689:26;;25725:71;25793:1;25782:9;25778:17;25769:6;25725:71;:::i;:::-;25581:222;;;;:::o;25809:640::-;26004:4;26042:3;26031:9;26027:19;26019:27;;26056:71;26124:1;26113:9;26109:17;26100:6;26056:71;:::i;:::-;26137:72;26205:2;26194:9;26190:18;26181:6;26137:72;:::i;:::-;26219;26287:2;26276:9;26272:18;26263:6;26219:72;:::i;:::-;26338:9;26332:4;26328:20;26323:2;26312:9;26308:18;26301:48;26366:76;26437:4;26428:6;26366:76;:::i;:::-;26358:84;;25809:640;;;;;;;:::o;26455:210::-;26542:4;26580:2;26569:9;26565:18;26557:26;;26593:65;26655:1;26644:9;26640:17;26631:6;26593:65;:::i;:::-;26455:210;;;;:::o;26671:218::-;26762:4;26800:2;26789:9;26785:18;26777:26;;26813:69;26879:1;26868:9;26864:17;26855:6;26813:69;:::i;:::-;26671:218;;;;:::o;26895:313::-;27008:4;27046:2;27035:9;27031:18;27023:26;;27095:9;27089:4;27085:20;27081:1;27070:9;27066:17;27059:47;27123:78;27196:4;27187:6;27123:78;:::i;:::-;27115:86;;26895:313;;;;:::o;27214:419::-;27380:4;27418:2;27407:9;27403:18;27395:26;;27467:9;27461:4;27457:20;27453:1;27442:9;27438:17;27431:47;27495:131;27621:4;27495:131;:::i;:::-;27487:139;;27214:419;;;:::o;27639:::-;27805:4;27843:2;27832:9;27828:18;27820:26;;27892:9;27886:4;27882:20;27878:1;27867:9;27863:17;27856:47;27920:131;28046:4;27920:131;:::i;:::-;27912:139;;27639:419;;;:::o;28064:::-;28230:4;28268:2;28257:9;28253:18;28245:26;;28317:9;28311:4;28307:20;28303:1;28292:9;28288:17;28281:47;28345:131;28471:4;28345:131;:::i;:::-;28337:139;;28064:419;;;:::o;28489:::-;28655:4;28693:2;28682:9;28678:18;28670:26;;28742:9;28736:4;28732:20;28728:1;28717:9;28713:17;28706:47;28770:131;28896:4;28770:131;:::i;:::-;28762:139;;28489:419;;;:::o;28914:::-;29080:4;29118:2;29107:9;29103:18;29095:26;;29167:9;29161:4;29157:20;29153:1;29142:9;29138:17;29131:47;29195:131;29321:4;29195:131;:::i;:::-;29187:139;;28914:419;;;:::o;29339:::-;29505:4;29543:2;29532:9;29528:18;29520:26;;29592:9;29586:4;29582:20;29578:1;29567:9;29563:17;29556:47;29620:131;29746:4;29620:131;:::i;:::-;29612:139;;29339:419;;;:::o;29764:::-;29930:4;29968:2;29957:9;29953:18;29945:26;;30017:9;30011:4;30007:20;30003:1;29992:9;29988:17;29981:47;30045:131;30171:4;30045:131;:::i;:::-;30037:139;;29764:419;;;:::o;30189:::-;30355:4;30393:2;30382:9;30378:18;30370:26;;30442:9;30436:4;30432:20;30428:1;30417:9;30413:17;30406:47;30470:131;30596:4;30470:131;:::i;:::-;30462:139;;30189:419;;;:::o;30614:::-;30780:4;30818:2;30807:9;30803:18;30795:26;;30867:9;30861:4;30857:20;30853:1;30842:9;30838:17;30831:47;30895:131;31021:4;30895:131;:::i;:::-;30887:139;;30614:419;;;:::o;31039:::-;31205:4;31243:2;31232:9;31228:18;31220:26;;31292:9;31286:4;31282:20;31278:1;31267:9;31263:17;31256:47;31320:131;31446:4;31320:131;:::i;:::-;31312:139;;31039:419;;;:::o;31464:::-;31630:4;31668:2;31657:9;31653:18;31645:26;;31717:9;31711:4;31707:20;31703:1;31692:9;31688:17;31681:47;31745:131;31871:4;31745:131;:::i;:::-;31737:139;;31464:419;;;:::o;31889:::-;32055:4;32093:2;32082:9;32078:18;32070:26;;32142:9;32136:4;32132:20;32128:1;32117:9;32113:17;32106:47;32170:131;32296:4;32170:131;:::i;:::-;32162:139;;31889:419;;;:::o;32314:::-;32480:4;32518:2;32507:9;32503:18;32495:26;;32567:9;32561:4;32557:20;32553:1;32542:9;32538:17;32531:47;32595:131;32721:4;32595:131;:::i;:::-;32587:139;;32314:419;;;:::o;32739:::-;32905:4;32943:2;32932:9;32928:18;32920:26;;32992:9;32986:4;32982:20;32978:1;32967:9;32963:17;32956:47;33020:131;33146:4;33020:131;:::i;:::-;33012:139;;32739:419;;;:::o;33164:::-;33330:4;33368:2;33357:9;33353:18;33345:26;;33417:9;33411:4;33407:20;33403:1;33392:9;33388:17;33381:47;33445:131;33571:4;33445:131;:::i;:::-;33437:139;;33164:419;;;:::o;33589:::-;33755:4;33793:2;33782:9;33778:18;33770:26;;33842:9;33836:4;33832:20;33828:1;33817:9;33813:17;33806:47;33870:131;33996:4;33870:131;:::i;:::-;33862:139;;33589:419;;;:::o;34014:::-;34180:4;34218:2;34207:9;34203:18;34195:26;;34267:9;34261:4;34257:20;34253:1;34242:9;34238:17;34231:47;34295:131;34421:4;34295:131;:::i;:::-;34287:139;;34014:419;;;:::o;34439:::-;34605:4;34643:2;34632:9;34628:18;34620:26;;34692:9;34686:4;34682:20;34678:1;34667:9;34663:17;34656:47;34720:131;34846:4;34720:131;:::i;:::-;34712:139;;34439:419;;;:::o;34864:::-;35030:4;35068:2;35057:9;35053:18;35045:26;;35117:9;35111:4;35107:20;35103:1;35092:9;35088:17;35081:47;35145:131;35271:4;35145:131;:::i;:::-;35137:139;;34864:419;;;:::o;35289:::-;35455:4;35493:2;35482:9;35478:18;35470:26;;35542:9;35536:4;35532:20;35528:1;35517:9;35513:17;35506:47;35570:131;35696:4;35570:131;:::i;:::-;35562:139;;35289:419;;;:::o;35714:::-;35880:4;35918:2;35907:9;35903:18;35895:26;;35967:9;35961:4;35957:20;35953:1;35942:9;35938:17;35931:47;35995:131;36121:4;35995:131;:::i;:::-;35987:139;;35714:419;;;:::o;36139:::-;36305:4;36343:2;36332:9;36328:18;36320:26;;36392:9;36386:4;36382:20;36378:1;36367:9;36363:17;36356:47;36420:131;36546:4;36420:131;:::i;:::-;36412:139;;36139:419;;;:::o;36564:::-;36730:4;36768:2;36757:9;36753:18;36745:26;;36817:9;36811:4;36807:20;36803:1;36792:9;36788:17;36781:47;36845:131;36971:4;36845:131;:::i;:::-;36837:139;;36564:419;;;:::o;36989:::-;37155:4;37193:2;37182:9;37178:18;37170:26;;37242:9;37236:4;37232:20;37228:1;37217:9;37213:17;37206:47;37270:131;37396:4;37270:131;:::i;:::-;37262:139;;36989:419;;;:::o;37414:222::-;37507:4;37545:2;37534:9;37530:18;37522:26;;37558:71;37626:1;37615:9;37611:17;37602:6;37558:71;:::i;:::-;37414:222;;;;:::o;37642:129::-;37676:6;37703:20;;:::i;:::-;37693:30;;37732:33;37760:4;37752:6;37732:33;:::i;:::-;37642:129;;;:::o;37777:75::-;37810:6;37843:2;37837:9;37827:19;;37777:75;:::o;37858:311::-;37935:4;38025:18;38017:6;38014:30;38011:56;;;38047:18;;:::i;:::-;38011:56;38097:4;38089:6;38085:17;38077:25;;38157:4;38151;38147:15;38139:23;;37858:311;;;:::o;38175:307::-;38236:4;38326:18;38318:6;38315:30;38312:56;;;38348:18;;:::i;:::-;38312:56;38386:29;38408:6;38386:29;:::i;:::-;38378:37;;38470:4;38464;38460:15;38452:23;;38175:307;;;:::o;38488:308::-;38550:4;38640:18;38632:6;38629:30;38626:56;;;38662:18;;:::i;:::-;38626:56;38700:29;38722:6;38700:29;:::i;:::-;38692:37;;38784:4;38778;38774:15;38766:23;;38488:308;;;:::o;38802:141::-;38851:4;38874:3;38866:11;;38897:3;38894:1;38887:14;38931:4;38928:1;38918:18;38910:26;;38802:141;;;:::o;38949:98::-;39000:6;39034:5;39028:12;39018:22;;38949:98;;;:::o;39053:99::-;39105:6;39139:5;39133:12;39123:22;;39053:99;;;:::o;39158:168::-;39241:11;39275:6;39270:3;39263:19;39315:4;39310:3;39306:14;39291:29;;39158:168;;;;:::o;39332:147::-;39433:11;39470:3;39455:18;;39332:147;;;;:::o;39485:169::-;39569:11;39603:6;39598:3;39591:19;39643:4;39638:3;39634:14;39619:29;;39485:169;;;;:::o;39660:148::-;39762:11;39799:3;39784:18;;39660:148;;;;:::o;39814:305::-;39854:3;39873:20;39891:1;39873:20;:::i;:::-;39868:25;;39907:20;39925:1;39907:20;:::i;:::-;39902:25;;40061:1;39993:66;39989:74;39986:1;39983:81;39980:107;;;40067:18;;:::i;:::-;39980:107;40111:1;40108;40104:9;40097:16;;39814:305;;;;:::o;40125:185::-;40165:1;40182:20;40200:1;40182:20;:::i;:::-;40177:25;;40216:20;40234:1;40216:20;:::i;:::-;40211:25;;40255:1;40245:35;;40260:18;;:::i;:::-;40245:35;40302:1;40299;40295:9;40290:14;;40125:185;;;;:::o;40316:191::-;40356:4;40376:20;40394:1;40376:20;:::i;:::-;40371:25;;40410:20;40428:1;40410:20;:::i;:::-;40405:25;;40449:1;40446;40443:8;40440:34;;;40454:18;;:::i;:::-;40440:34;40499:1;40496;40492:9;40484:17;;40316:191;;;;:::o;40513:96::-;40550:7;40579:24;40597:5;40579:24;:::i;:::-;40568:35;;40513:96;;;:::o;40615:90::-;40649:7;40692:5;40685:13;40678:21;40667:32;;40615:90;;;:::o;40711:149::-;40747:7;40787:66;40780:5;40776:78;40765:89;;40711:149;;;:::o;40866:126::-;40903:7;40943:42;40936:5;40932:54;40921:65;;40866:126;;;:::o;40998:77::-;41035:7;41064:5;41053:16;;40998:77;;;:::o;41081:154::-;41165:6;41160:3;41155;41142:30;41227:1;41218:6;41213:3;41209:16;41202:27;41081:154;;;:::o;41241:307::-;41309:1;41319:113;41333:6;41330:1;41327:13;41319:113;;;41418:1;41413:3;41409:11;41403:18;41399:1;41394:3;41390:11;41383:39;41355:2;41352:1;41348:10;41343:15;;41319:113;;;41450:6;41447:1;41444:13;41441:101;;;41530:1;41521:6;41516:3;41512:16;41505:27;41441:101;41290:258;41241:307;;;:::o;41554:320::-;41598:6;41635:1;41629:4;41625:12;41615:22;;41682:1;41676:4;41672:12;41703:18;41693:81;;41759:4;41751:6;41747:17;41737:27;;41693:81;41821:2;41813:6;41810:14;41790:18;41787:38;41784:84;;;41840:18;;:::i;:::-;41784:84;41605:269;41554:320;;;:::o;41880:281::-;41963:27;41985:4;41963:27;:::i;:::-;41955:6;41951:40;42093:6;42081:10;42078:22;42057:18;42045:10;42042:34;42039:62;42036:88;;;42104:18;;:::i;:::-;42036:88;42144:10;42140:2;42133:22;41923:238;41880:281;;:::o;42167:233::-;42206:3;42229:24;42247:5;42229:24;:::i;:::-;42220:33;;42275:66;42268:5;42265:77;42262:103;;;42345:18;;:::i;:::-;42262:103;42392:1;42385:5;42381:13;42374:20;;42167:233;;;:::o;42406:176::-;42438:1;42455:20;42473:1;42455:20;:::i;:::-;42450:25;;42489:20;42507:1;42489:20;:::i;:::-;42484:25;;42528:1;42518:35;;42533:18;;:::i;:::-;42518:35;42574:1;42571;42567:9;42562:14;;42406:176;;;;:::o;42588:180::-;42636:77;42633:1;42626:88;42733:4;42730:1;42723:15;42757:4;42754:1;42747:15;42774:180;42822:77;42819:1;42812:88;42919:4;42916:1;42909:15;42943:4;42940:1;42933:15;42960:180;43008:77;43005:1;42998:88;43105:4;43102:1;43095:15;43129:4;43126:1;43119:15;43146:180;43194:77;43191:1;43184:88;43291:4;43288:1;43281:15;43315:4;43312:1;43305:15;43332:180;43380:77;43377:1;43370:88;43477:4;43474:1;43467:15;43501:4;43498:1;43491:15;43518:117;43627:1;43624;43617:12;43641:117;43750:1;43747;43740:12;43764:117;43873:1;43870;43863:12;43887:117;43996:1;43993;43986:12;44010:117;44119:1;44116;44109:12;44133:117;44242:1;44239;44232:12;44256:102;44297:6;44348:2;44344:7;44339:2;44332:5;44328:14;44324:28;44314:38;;44256:102;;;:::o;44364:182::-;44504:34;44500:1;44492:6;44488:14;44481:58;44364:182;:::o;44552:163::-;44692:15;44688:1;44680:6;44676:14;44669:39;44552:163;:::o;44721:179::-;44861:31;44857:1;44849:6;44845:14;44838:55;44721:179;:::o;44906:177::-;45046:29;45042:1;45034:6;45030:14;45023:53;44906:177;:::o;45089:178::-;45229:30;45225:1;45217:6;45213:14;45206:54;45089:178;:::o;45273:182::-;45413:34;45409:1;45401:6;45397:14;45390:58;45273:182;:::o;45461:180::-;45601:32;45597:1;45589:6;45585:14;45578:56;45461:180;:::o;45647:174::-;45787:26;45783:1;45775:6;45771:14;45764:50;45647:174;:::o;45827:182::-;45967:34;45963:1;45955:6;45951:14;45944:58;45827:182;:::o;46015:175::-;46155:27;46151:1;46143:6;46139:14;46132:51;46015:175;:::o;46196:162::-;46336:14;46332:1;46324:6;46320:14;46313:38;46196:162;:::o;46364:180::-;46504:32;46500:1;46492:6;46488:14;46481:56;46364:180;:::o;46550:176::-;46690:28;46686:1;46678:6;46674:14;46667:52;46550:176;:::o;46732:167::-;46872:19;46868:1;46860:6;46856:14;46849:43;46732:167;:::o;46905:181::-;47045:33;47041:1;47033:6;47029:14;47022:57;46905:181;:::o;47092:::-;47232:33;47228:1;47220:6;47216:14;47209:57;47092:181;:::o;47279:182::-;47419:34;47415:1;47407:6;47403:14;47396:58;47279:182;:::o;47467:::-;47607:34;47603:1;47595:6;47591:14;47584:58;47467:182;:::o;47655:155::-;47795:7;47791:1;47783:6;47779:14;47772:31;47655:155;:::o;47816:178::-;47956:30;47952:1;47944:6;47940:14;47933:54;47816:178;:::o;48000:182::-;48140:34;48136:1;48128:6;48124:14;48117:58;48000:182;:::o;48188:178::-;48328:30;48324:1;48316:6;48312:14;48305:54;48188:178;:::o;48372:177::-;48512:29;48508:1;48500:6;48496:14;48489:53;48372:177;:::o;48555:114::-;;:::o;48675:179::-;48815:31;48811:1;48803:6;48799:14;48792:55;48675:179;:::o;48860:173::-;49000:25;48996:1;48988:6;48984:14;48977:49;48860:173;:::o;49039:169::-;49179:21;49175:1;49167:6;49163:14;49156:45;49039:169;:::o;49214:164::-;49354:16;49350:1;49342:6;49338:14;49331:40;49214:164;:::o;49384:122::-;49457:24;49475:5;49457:24;:::i;:::-;49450:5;49447:35;49437:63;;49496:1;49493;49486:12;49437:63;49384:122;:::o;49512:116::-;49582:21;49597:5;49582:21;:::i;:::-;49575:5;49572:32;49562:60;;49618:1;49615;49608:12;49562:60;49512:116;:::o;49634:120::-;49706:23;49723:5;49706:23;:::i;:::-;49699:5;49696:34;49686:62;;49744:1;49741;49734:12;49686:62;49634:120;:::o;49760:122::-;49833:24;49851:5;49833:24;:::i;:::-;49826:5;49823:35;49813:63;;49872:1;49869;49862:12;49813:63;49760:122;:::o

Swarm Source

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