ETH Price: $3,490.19 (+0.06%)
Gas: 2 Gwei

Token

Slimy Snails (SNAIL)
 

Overview

Max Total Supply

253 SNAIL

Holders

134

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
1 SNAIL
0x9b6408e870b36a0616dae20cf8aedbd21dcce1b1
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:
slimySnails

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 2021-10-23
*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

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


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

interface IERC721 is IERC165 {
    //@dev Emitted when `tokenId` token is transferred from `from` to `to`.
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);

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

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

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

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

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

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

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

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

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

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

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

interface IERC721Metadata is IERC721 {
    //@dev Returns the token collection name.
    function name() external view returns (string memory);

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

abstract contract Ownable is Context {
    address private _owner;

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

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

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

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

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

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

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

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 to reenter a locked function");
        _reentryKey = true;
        _;
        _reentryKey = false;
    }
}

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

contract slimySnails 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;
    
    // PandaBugz Specific Functionality
    bool public mintActive;
    bool public whiteActive;
    bool public greyActive;
    bool private _hideTokens;  //for URI redirects
    uint256 public price;
    uint256 public maxPerWallet;
    uint256 private _greyListPrice;
    uint256 private _whiteListPrice;
    uint256 public totalTokens;
    uint256 public numberMinted;
    
    mapping(address => bool) private _whitelist;
    mapping(address => bool) private _greylist;

    mapping(address => uint256) private _payoutPercent;
    mapping(address => uint256) private _payoutAmount;
    mapping(address => uint256) private _numberPurchased;
    
    address[] private _payoutWallets;

    /**
     * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.
     */
    constructor() {
        //*** notes ***//
        // Removed Max per Txn
        // Add wallet tracker
        
        _name = "Slimy Snails";
        _symbol = "SNAIL";
        
        // Set URI to the propper address from the get-go, no secret mission going on here ;)
        _baseURI = "https://slimysnails.io/metadata/";
        _hideTokens = true;
        
        totalTokens = 5555;
        price = 55 * (10 ** 15); // Replace leading value with price in finney
        maxPerWallet = 20;
        _whiteListPrice = price;
        _greyListPrice = price;
        
        _payoutWallets.push(0x5A3e0bB30423fa1B7601a06C5F88b862F7D77C71);
        _payoutPercent[0x5A3e0bB30423fa1B7601a06C5F88b862F7D77C71] = 455;
        _payoutWallets.push(0x1FE4d637C215722C0De4dAba922323Ad228ACF00);
        _payoutPercent[0x1FE4d637C215722C0De4dAba922323Ad228ACF00] = 100; //art
        _payoutWallets.push(0x690360ABbB34649eB3d4D811f8e9362303e95080);
        _payoutPercent[0x690360ABbB34649eB3d4D811f8e9362303e95080] = 50;
        _payoutWallets.push(0x2496286BDB820d40C402802F828ae265b244188A);
        _payoutPercent[0x2496286BDB820d40C402802F828ae265b244188A] = 50; //ogg
        _payoutWallets.push(0x6B1e16029ee4232Be377accbaF9304F5620D39a3);
        _payoutPercent[0x6B1e16029ee4232Be377accbaF9304F5620D39a3] = 50;
        _payoutWallets.push(0x8934CC45DF1aB99Fb75Bc53a617548e1096f3013);
        _payoutPercent[0x8934CC45DF1aB99Fb75Bc53a617548e1096f3013] = 120;
        _payoutWallets.push(0x0c0d73B99d81B237cD67EfAFB7fe6475F360917A);
        _payoutPercent[0x0c0d73B99d81B237cD67EfAFB7fe6475F360917A] = 25;
        _payoutWallets.push(0x9579074285DE0A1166493e7054b0a241907C51dE);
        _payoutPercent[0x9579074285DE0A1166493e7054b0a241907C51dE] = 25;
        _payoutWallets.push(0x4dc6823268ceC81bE1c4F1AeF10F7206cac2d56b);
        _payoutPercent[0x4dc6823268ceC81bE1c4F1AeF10F7206cac2d56b] = 25;
        _payoutWallets.push(0x58B9369f1ed16D38De267663dc9B1389a9571623); 
        _payoutPercent[0x58B9369f1ed16D38De267663dc9B1389a9571623] = 50;  //powi
        _payoutWallets.push(0xA5bBc9FBB516818e875B0e563DE0e60bfd517764);
        _payoutPercent[0xA5bBc9FBB516818e875B0e563DE0e60bfd517764] = 50;
        

    }

    //@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 == slimySnails.onERC721Received.selector;
    }
    
    // Standard Withdraw function for the owner to pull the contract
    function withdraw() external reentryLock {
        //send to addresses and percentages
        uint256 sendAmount = _payoutAmount[_msgSender()];
        _payoutAmount[_msgSender()] = 0;
        (bool success, ) = msg.sender.call{value: sendAmount}("");
        require(success, "Transaction Unsuccessful");
    }
    
    function assignPayouts(uint256 amountReceived) internal {
        require(amountReceived > 0);
        for(uint256 i; i < _payoutWallets.length; i++){
            _payoutAmount[_payoutWallets[i]] += (_payoutPercent[_payoutWallets[i]] * amountReceived) / 1000;
        }
    }
    
    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 mint(uint256 mintType, uint256 qty) external payable reentryLock {
        // mintType 1 for pre-sale (whitelist), 2 for greyList, 3 for regular mint 
        require(((mintType > 0)&&(mintType<4)), "Invalid Mint Txn");
        uint256 mintPrice; // defines the price for this txn
        uint256 walletMax; // defines the max per wallet for this txn
        string memory notAvailable = "Mint type not available at this time.";
        
        if (mintType == 1){
            mintPrice = _whiteListPrice;
            walletMax = 2;
            require(_whitelist[_msgSender()], "Mint: Unauthorized Access");
            require(whiteActive, notAvailable);
            require((_numberPurchased[_msgSender()] + qty) <= walletMax, "mint exceeds allowance");
        }
        if (mintType == 2){
            mintPrice = _greyListPrice;
            walletMax = 1;
            require(_greylist[_msgSender()], "Mint: Unauthorized Access");
            require(greyActive, notAvailable);
            require((_numberPurchased[_msgSender()] + qty) <= walletMax, "mint exceeds allowance");
        }        
        if (mintType == 3){
            mintPrice = price;
            walletMax = maxPerWallet;
            require(mintActive, notAvailable);
        }
        //switch dependent variables
        require(msg.value >= qty * mintPrice, "Mint: Insufficient Funds");
        require((_balances[_msgSender()] + qty) <= walletMax, "Mint: Max tokens per wallet exceeded");
        
        //regular checks
        require((qty + numberMinted) < totalTokens, "Mint: Not enough avaialability");

        uint256 mintSeedValue = numberMinted; //Store the starting value of the mint batch
        
        //wallet transfer scam prevention
        _numberPurchased[_msgSender()] += qty;
        
        //Handle ETH transactions
        uint256 cashIn = msg.value;
        uint256 payment = (qty * price);
        uint256 cashChange = cashIn - payment;
        
        if (payment > 0){assignPayouts(payment);}
        
        //send tokens
        for(uint256 i = 0; i < qty; i++) {
            _safeMint(_msgSender(), mintSeedValue + i);
            numberMinted ++;
        }
        
        if (cashChange > 0){
            (bool success, ) = msg.sender.call{value: cashChange}("");
            require(success, "Mint: unable to send change to user");
        }
    }
    
    // allows holders to burn their own tokens if desired
    function burn(uint256 tokenID) external {
        require(_msgSender() == ownerOf(tokenID));
        _burn(tokenID);
    }
    
    //////////////////////////////////////////////////////////////
    //////////////////// Setters and Getters /////////////////////
    //////////////////////////////////////////////////////////////
    
    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 checkPayout() external view returns(string memory){
        return string(abi.encodePacked(toString(_payoutAmount[_msgSender()])));
    }
    
    function whiteList(address account) external onlyOwner {
        _whitelist[account] = true;
    }
    
    function whiteListMany(address[] memory accounts) external onlyOwner {
        for (uint256 i; i < accounts.length; i++) {
            _whitelist[accounts[i]] = true;
        }
    }

    function greyList(address account) external onlyOwner {
        _greylist[account] = true;
    }
    
    function greyListMany(address[] memory accounts) external onlyOwner {
        for (uint256 i; i < accounts.length; i++) {
            _greylist[accounts[i]] = true;
        }
    }
    
    function checkWhitelist(address testAddress) external view returns (bool) {
        if (_whitelist[testAddress] == true) { return true; }
        return false;
    }
    
    function checkGreylist(address testAddress) external view returns (bool) {
        if (_greylist[testAddress] == true) { return true; }
        return false;
    }
    
    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 activateWhiteMint() public onlyOwner {
        whiteActive = true;
    }
    
    function deactivateWhiteMint() public onlyOwner {
        whiteActive = false;
    }
    
    function activateGreyMint() public onlyOwner {
        greyActive = true;
    }
    
    function deactivateGreyMint() public onlyOwner {
        greyActive = false;
    }
    
    function setPriceAll(uint256 newPrice) public onlyOwner {
        price = newPrice;
        _whiteListPrice = newPrice;
        _greyListPrice = newPrice;
    }
    
    function setPriceMain(uint256 newPrice) public onlyOwner {
        price = newPrice;
    }
    
    function setPriceWhite(uint256 newPrice) public onlyOwner {
        _whiteListPrice = newPrice;
    }
    
    function setPriceGrey(uint256 newPrice) public onlyOwner {
        _greyListPrice = newPrice;
    }
    
    function setTotalTokens(uint256 numTokens) public onlyOwner {
        totalTokens = numTokens;
    }

    function totalSupply() external view returns (uint256) {
        return numberMinted; //stupid bs for etherscan's call
    }
    
    function hideTokens() external onlyOwner {
        _hideTokens = true;
    }
    
    function revealTokens() external onlyOwner {
        _hideTokens = false;
    }
    
    function getBalance(address tokenAddress) view external returns (uint256) {
        //return _balances[tokenAddress]; //shows 0 on etherscan due to overflow error
        return _balances[tokenAddress] / (10**15); //temporary fix to report in finneys
    }

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

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

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

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

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

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

        _operatorApprovals[msg.sender][operator] = approved;
        emit ApprovalForAll(msg.sender, operator, approved);
    }

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

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

        _transfer(from, to, tokenId);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _beforeTokenTransfer(from, to, tokenId);

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

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

        emit Transfer(from, to, tokenId);
    }

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

    /**
     * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.
     * The call is not executed if the target address is not a contract.
     *
     * @param from address representing the previous owner of the given token ID
     * @param to target address that will receive the tokens
     * @param tokenId uint256 ID of the token to be transferred
     * @param _data bytes optional data to send along with the call
     * @return bool whether the call correctly returned the expected magic value
     */
    function _checkOnERC721Received(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) private returns (bool) {
        if (to.isContract()) {
            try IERC721Receiver(to).onERC721Received(msg.sender, from, tokenId, _data) returns (bytes4 retval) {
                return retval == IERC721Receiver(to).onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert("ERC721: transfer to non ERC721Receiver implementer");
                } else {
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }
    
    // *********************** ERC721 Token Receiver **********************
    /**
     * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}
     * by `operator` from `from`, this function is called.
     *
     * It must return its Solidity selector to confirm the token transfer.
     * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.
     *
     * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`.
     */
    function onERC721Received(address _operator, address _from, uint256 _tokenId, bytes calldata _data) external returns(bytes4) {
        //InterfaceID=0x150b7a02
        return this.onERC721Received.selector;
    }

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

    // **************************************** 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 query for nonexistent token");
        
        string memory tokenuri;
        
        if (_hideTokens) {
            //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 {
        uint256 payment = msg.value;
        if (payment > 0){assignPayouts(payment);}
    }
    
    fallback() external payable {
        uint256 payment = msg.value;
        if (payment > 0){assignPayouts(payment);}
    }
}

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":"activateGreyMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"activateMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"activateWhiteMint","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":[{"internalType":"address","name":"testAddress","type":"address"}],"name":"checkGreylist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"checkPayout","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"testAddress","type":"address"}],"name":"checkWhitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deactivateGreyMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deactivateMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deactivateWhiteMint","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":[{"internalType":"address","name":"tokenAddress","type":"address"}],"name":"getBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"greyActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"greyList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"}],"name":"greyListMany","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"hideTokens","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":"maxPerWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"mintType","type":"uint256"},{"internalType":"uint256","name":"qty","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numberMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_operator","type":"address"},{"internalType":"address","name":"_from","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"onERC721Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"qty","type":"uint256"}],"name":"ownerMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealTokens","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":"maxWallet","type":"uint256"}],"name":"setMaxWalletThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"setPriceAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"setPriceGrey","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"setPriceMain","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"setPriceWhite","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":"whiteActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"whiteList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"}],"name":"whiteListMany","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405260008060146101000a81548160ff0219169083151502179055503480156200002b57600080fd5b506200004c6200004062000a7960201b60201c565b62000a8160201b60201c565b6040518060400160405280600c81526020017f536c696d7920536e61696c730000000000000000000000000000000000000000815250600190805190602001906200009992919062000b45565b506040518060400160405280600581526020017f534e41494c00000000000000000000000000000000000000000000000000000081525060029080519060200190620000e792919062000b45565b506040518060400160405280602081526020017f68747470733a2f2f736c696d79736e61696c732e696f2f6d657461646174612f815250600390805190602001906200013592919062000b45565b506001600860036101000a81548160ff0219169083151502179055506115b3600d8190555066c3663566a580006009819055506014600a81905550600954600c81905550600954600b819055506014735a3e0bb30423fa1b7601a06c5f88b862f7d77c719080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506101c760116000735a3e0bb30423fa1b7601a06c5f88b862f7d77c7173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506014731fe4d637c215722c0de4daba922323ad228acf009080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550606460116000731fe4d637c215722c0de4daba922323ad228acf0073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550601473690360abbb34649eb3d4d811f8e9362303e950809080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060326011600073690360abbb34649eb3d4d811f8e9362303e9508073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506014732496286bdb820d40c402802f828ae265b244188a9080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550603260116000732496286bdb820d40c402802f828ae265b244188a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506014736b1e16029ee4232be377accbaf9304f5620d39a39080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550603260116000736b1e16029ee4232be377accbaf9304f5620d39a373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506014738934cc45df1ab99fb75bc53a617548e1096f30139080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550607860116000738934cc45df1ab99fb75bc53a617548e1096f301373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506014730c0d73b99d81b237cd67efafb7fe6475f360917a9080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601960116000730c0d73b99d81b237cd67efafb7fe6475f360917a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506014739579074285de0a1166493e7054b0a241907c51de9080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601960116000739579074285de0a1166493e7054b0a241907c51de73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506014734dc6823268cec81be1c4f1aef10f7206cac2d56b9080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601960116000734dc6823268cec81be1c4f1aef10f7206cac2d56b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060147358b9369f1ed16d38de267663dc9b1389a95716239080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506032601160007358b9369f1ed16d38de267663dc9b1389a957162373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550601473a5bbc9fbb516818e875b0e563de0e60bfd5177649080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060326011600073a5bbc9fbb516818e875b0e563de0e60bfd51776473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555062000c5a565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b82805462000b539062000bf5565b90600052602060002090601f01602090048101928262000b77576000855562000bc3565b82601f1062000b9257805160ff191683800117855562000bc3565b8280016001018555821562000bc3579182015b8281111562000bc257825182559160200191906001019062000ba5565b5b50905062000bd2919062000bd6565b5090565b5b8082111562000bf157600081600090555060010162000bd7565b5090565b6000600282049050600182168062000c0e57607f821691505b6020821081141562000c255762000c2462000c2b565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b615d1e8062000c6a6000396000f3fe6080604052600436106103385760003560e01c80635f2f9404116101ab578063b145c013116100f7578063c91c046211610095578063f275d6a71161006f578063f275d6a714610b94578063f2fde38b14610bab578063f8b2cb4f14610bd4578063fe779f6c14610c1157610358565b8063c91c046214610b15578063e8a3d48514610b2c578063e985e9c514610b5757610358565b8063b5b3e214116100d1578063b5b3e21414610a81578063b61a413214610a98578063b88d4fde14610aaf578063c87b56dd14610ad857610358565b8063b145c01314610a04578063b3aa880614610a2f578063b4afeed714610a5857610358565b80638da5cb5b11610164578063a035b1fe1161013e578063a035b1fe1461095e578063a22cb46514610989578063a519355a146109b2578063b0b92263146109db57610358565b80638da5cb5b146108dd5780638de801e91461090857806395d89b411461093357610358565b80635f2f9404146107df5780636352211e1461080a57806370a0823114610847578063715018a614610884578063756aea541461089b5780637e1c0c09146108b257610358565b806330e412ad1161028557806342966c6811610223578063484b973c116101fd578063484b973c1461074b57806349a772b5146107745780634d5a67d81461079f57806355f804b3146107b657610358565b806342966c68146106ce57806343d67565146106f7578063453c23101461072057610358565b80633ba5939d1161025f5780633ba5939d1461064e5780633ccfd60b146106655780633d6aa72e1461067c57806342842e0e146106a557610358565b806330e412ad146105bf578063338431b6146105e8578063372c12b11461062557610358565b806318160ddd116102f257806323b872dd116102cc57806323b872dd1461052b57806325fd90f31461055457806329ccc4781461057f5780632e56f71e146105a857610358565b806318160ddd146104a75780631950c218146104d25780631b2ef1ca1461050f57610358565b8062b6849f1461037357806301ffc9a71461039c57806306fdde03146103d9578063081812fc14610404578063095ea7b314610441578063150b7a021461046a57610358565b3661035857600034905060008111156103555761035481610c3a565b5b50005b600034905060008111156103705761036f81610c3a565b5b50005b34801561037f57600080fd5b5061039a600480360381019061039591906144b7565b610d97565b005b3480156103a857600080fd5b506103c360048036038101906103be9190614500565b610f2d565b6040516103d09190614cb1565b60405180910390f35b3480156103e557600080fd5b506103ee6110b6565b6040516103fb9190614ce7565b60405180910390f35b34801561041057600080fd5b5061042b600480360381019061042691906145a3565b611148565b6040516104389190614c4a565b60405180910390f35b34801561044d57600080fd5b5061046860048036038101906104639190614477565b6111cd565b005b34801561047657600080fd5b50610491600480360381019061048c919061432c565b6112d7565b60405161049e9190614ccc565b60405180910390f35b3480156104b357600080fd5b506104bc6112ec565b6040516104c99190615069565b60405180910390f35b3480156104de57600080fd5b506104f960048036038101906104f4919061426c565b6112f6565b6040516105069190614cb1565b60405180910390f35b610529600480360381019061052491906145d0565b611364565b005b34801561053757600080fd5b50610552600480360381019061054d91906142d9565b611abf565b005b34801561056057600080fd5b50610569611b18565b6040516105769190614cb1565b60405180910390f35b34801561058b57600080fd5b506105a660048036038101906105a191906145a3565b611b2b565b005b3480156105b457600080fd5b506105bd611bb1565b005b3480156105cb57600080fd5b506105e660048036038101906105e1919061426c565b611c4a565b005b3480156105f457600080fd5b5061060f600480360381019061060a919061426c565b611d21565b60405161061c9190614cb1565b60405180910390f35b34801561063157600080fd5b5061064c6004803603810190610647919061426c565b611d8f565b005b34801561065a57600080fd5b50610663611e66565b005b34801561067157600080fd5b5061067a611eff565b005b34801561068857600080fd5b506106a3600480360381019061069e91906145a3565b6120cb565b005b3480156106b157600080fd5b506106cc60048036038101906106c791906142d9565b61215f565b005b3480156106da57600080fd5b506106f560048036038101906106f091906145a3565b61217f565b005b34801561070357600080fd5b5061071e600480360381019061071991906144b7565b6121d2565b005b34801561072c57600080fd5b506107356122e3565b6040516107429190615069565b60405180910390f35b34801561075757600080fd5b50610772600480360381019061076d9190614477565b6122e9565b005b34801561078057600080fd5b5061078961245f565b6040516107969190615069565b60405180910390f35b3480156107ab57600080fd5b506107b4612465565b005b3480156107c257600080fd5b506107dd60048036038101906107d8919061455a565b6124fe565b005b3480156107eb57600080fd5b506107f4612594565b6040516108019190614cb1565b60405180910390f35b34801561081657600080fd5b50610831600480360381019061082c91906145a3565b6125a7565b60405161083e9190614c4a565b60405180910390f35b34801561085357600080fd5b5061086e6004803603810190610869919061426c565b612659565b60405161087b9190615069565b60405180910390f35b34801561089057600080fd5b50610899612711565b005b3480156108a757600080fd5b506108b0612799565b005b3480156108be57600080fd5b506108c7612832565b6040516108d49190615069565b60405180910390f35b3480156108e957600080fd5b506108f2612838565b6040516108ff9190614c4a565b60405180910390f35b34801561091457600080fd5b5061091d612861565b60405161092a9190614cb1565b60405180910390f35b34801561093f57600080fd5b50610948612874565b6040516109559190614ce7565b60405180910390f35b34801561096a57600080fd5b50610973612906565b6040516109809190615069565b60405180910390f35b34801561099557600080fd5b506109b060048036038101906109ab9190614437565b61290c565b005b3480156109be57600080fd5b506109d960048036038101906109d491906144b7565b612a78565b005b3480156109e757600080fd5b50610a0260048036038101906109fd91906145a3565b612b89565b005b348015610a1057600080fd5b50610a19612c0f565b604051610a269190614ce7565b60405180910390f35b348015610a3b57600080fd5b50610a566004803603810190610a5191906145a3565b612c84565b005b348015610a6457600080fd5b50610a7f6004803603810190610a7a91906145a3565b612d0a565b005b348015610a8d57600080fd5b50610a96612d90565b005b348015610aa457600080fd5b50610aad612e29565b005b348015610abb57600080fd5b50610ad66004803603810190610ad191906143b4565b612ec2565b005b348015610ae457600080fd5b50610aff6004803603810190610afa91906145a3565b612f1d565b604051610b0c9190614ce7565b60405180910390f35b348015610b2157600080fd5b50610b2a612fdd565b005b348015610b3857600080fd5b50610b41613076565b604051610b4e9190614ce7565b60405180910390f35b348015610b6357600080fd5b50610b7e6004803603810190610b799190614299565b61309e565b604051610b8b9190614cb1565b60405180910390f35b348015610ba057600080fd5b50610ba9613132565b005b348015610bb757600080fd5b50610bd26004803603810190610bcd919061426c565b6131cb565b005b348015610be057600080fd5b50610bfb6004803603810190610bf6919061426c565b6132c3565b604051610c089190615069565b60405180910390f35b348015610c1d57600080fd5b50610c386004803603810190610c3391906145a3565b61331e565b005b60008111610c4757600080fd5b60005b601480549050811015610d93576103e8826011600060148581548110610c7357610c726154cf565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610ce39190615221565b610ced91906151f0565b6012600060148481548110610d0557610d046154cf565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610d79919061519a565b925050819055508080610d8b906153c8565b915050610c4a565b5050565b610d9f6133a4565b73ffffffffffffffffffffffffffffffffffffffff16610dbd612838565b73ffffffffffffffffffffffffffffffffffffffff1614610e13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0a90614f89565b60405180910390fd5b600081519050600e5481600e54610e2a919061519a565b11610e6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6190615049565b60405180910390fd5b600d5481600e54610e7b919061519a565b10610ebb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb290614f09565b60405180910390fd5b6000600e54905060005b82811015610f2757610efc848281518110610ee357610ee26154cf565b5b60200260200101518284610ef7919061519a565b6133ac565b600e6000815480929190610f0f906153c8565b91905055508080610f1f906153c8565b915050610ec5565b50505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610ff857507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061106057507f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806110af575063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b6060600180546110c590615365565b80601f01602080910402602001604051908101604052809291908181526020018280546110f190615365565b801561113e5780601f106111135761010080835404028352916020019161113e565b820191906000526020600020905b81548152906001019060200180831161112157829003601f168201915b5050505050905090565b6000611153826133ca565b611192576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118990614f69565b60405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006111d8826125a7565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611249576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124090615009565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806112895750611288813361309e565b5b6112c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112bf90614ea9565b60405180910390fd5b6112d28383613436565b505050565b600063150b7a0260e01b905095945050505050565b6000600e54905090565b600060011515600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515141561135a576001905061135f565b600090505b919050565b600060149054906101000a900460ff16156113b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ab90614e89565b60405180910390fd5b6001600060146101000a81548160ff0219169083151502179055506000821180156113df5750600482105b61141e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141590614da9565b60405180910390fd5b6000806000604051806060016040528060258152602001615cc460259139905060018514156115cb57600c54925060029150600f600061145c6133a4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166114e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114da90614f29565b60405180910390fd5b600860019054906101000a900460ff168190611535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152c9190614ce7565b60405180910390fd5b508184601360006115446133a4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611589919061519a565b11156115ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c190614e29565b60405180910390fd5b5b600285141561175857600b54925060019150601060006115e96133a4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611670576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166790614f29565b60405180910390fd5b600860029054906101000a900460ff1681906116c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b99190614ce7565b60405180910390fd5b508184601360006116d16133a4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611716919061519a565b1115611757576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174e90614e29565b60405180910390fd5b5b60038514156117bf576009549250600a549150600860009054906101000a900460ff1681906117bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b49190614ce7565b60405180910390fd5b505b82846117cb9190615221565b34101561180d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180490614fa9565b60405180910390fd5b81846005600061181b6133a4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611860919061519a565b11156118a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189890614dc9565b60405180910390fd5b600d54600e54856118b2919061519a565b106118f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e990614d09565b60405180910390fd5b6000600e54905084601360006119066133a4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461194f919061519a565b92505081905550600034905060006009548761196b9190615221565b90506000818361197b919061527b565b905060008211156119905761198f82610c3a565b5b60005b888110156119e2576119b76119a66133a4565b82876119b2919061519a565b6133ac565b600e60008154809291906119ca906153c8565b919050555080806119da906153c8565b915050611993565b506000811115611a9a5760003373ffffffffffffffffffffffffffffffffffffffff1682604051611a1290614c35565b60006040518083038185875af1925050503d8060008114611a4f576040519150601f19603f3d011682016040523d82523d6000602084013e611a54565b606091505b5050905080611a98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8f90614d29565b60405180910390fd5b505b5050505050505060008060146101000a81548160ff0219169083151502179055505050565b611ac933826134ef565b611b08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aff90615029565b60405180910390fd5b611b138383836135cd565b505050565b600860009054906101000a900460ff1681565b611b336133a4565b73ffffffffffffffffffffffffffffffffffffffff16611b51612838565b73ffffffffffffffffffffffffffffffffffffffff1614611ba7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9e90614f89565b60405180910390fd5b8060098190555050565b611bb96133a4565b73ffffffffffffffffffffffffffffffffffffffff16611bd7612838565b73ffffffffffffffffffffffffffffffffffffffff1614611c2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2490614f89565b60405180910390fd5b6000600860006101000a81548160ff021916908315150217905550565b611c526133a4565b73ffffffffffffffffffffffffffffffffffffffff16611c70612838565b73ffffffffffffffffffffffffffffffffffffffff1614611cc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cbd90614f89565b60405180910390fd5b6001601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600060011515601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151415611d855760019050611d8a565b600090505b919050565b611d976133a4565b73ffffffffffffffffffffffffffffffffffffffff16611db5612838565b73ffffffffffffffffffffffffffffffffffffffff1614611e0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0290614f89565b60405180910390fd5b6001600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b611e6e6133a4565b73ffffffffffffffffffffffffffffffffffffffff16611e8c612838565b73ffffffffffffffffffffffffffffffffffffffff1614611ee2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed990614f89565b60405180910390fd5b6000600860036101000a81548160ff021916908315150217905550565b600060149054906101000a900460ff1615611f4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4690614e89565b60405180910390fd5b6001600060146101000a81548160ff021916908315150217905550600060126000611f786133a4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600060126000611fc36133a4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060003373ffffffffffffffffffffffffffffffffffffffff168260405161202790614c35565b60006040518083038185875af1925050503d8060008114612064576040519150601f19603f3d011682016040523d82523d6000602084013e612069565b606091505b50509050806120ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a490614de9565b60405180910390fd5b505060008060146101000a81548160ff021916908315150217905550565b6120d36133a4565b73ffffffffffffffffffffffffffffffffffffffff166120f1612838565b73ffffffffffffffffffffffffffffffffffffffff1614612147576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213e90614f89565b60405180910390fd5b8060098190555080600c8190555080600b8190555050565b61217a83838360405180602001604052806000815250612ec2565b505050565b612188816125a7565b73ffffffffffffffffffffffffffffffffffffffff166121a66133a4565b73ffffffffffffffffffffffffffffffffffffffff16146121c657600080fd5b6121cf81613829565b50565b6121da6133a4565b73ffffffffffffffffffffffffffffffffffffffff166121f8612838565b73ffffffffffffffffffffffffffffffffffffffff161461224e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224590614f89565b60405180910390fd5b60005b81518110156122df576001600f6000848481518110612273576122726154cf565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806122d7906153c8565b915050612251565b5050565b600a5481565b6122f16133a4565b73ffffffffffffffffffffffffffffffffffffffff1661230f612838565b73ffffffffffffffffffffffffffffffffffffffff1614612365576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235c90614f89565b60405180910390fd5b600e5481600e54612376919061519a565b116123b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ad90615049565b60405180910390fd5b600d5481600e546123c7919061519a565b10612407576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123fe90614f09565b60405180910390fd5b6000600e54905060005b828110156124595761242e848284612429919061519a565b6133ac565b600e6000815480929190612441906153c8565b91905055508080612451906153c8565b915050612411565b50505050565b600e5481565b61246d6133a4565b73ffffffffffffffffffffffffffffffffffffffff1661248b612838565b73ffffffffffffffffffffffffffffffffffffffff16146124e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d890614f89565b60405180910390fd5b6001600860016101000a81548160ff021916908315150217905550565b6125066133a4565b73ffffffffffffffffffffffffffffffffffffffff16612524612838565b73ffffffffffffffffffffffffffffffffffffffff161461257a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161257190614f89565b60405180910390fd5b8060039080519060200190612590929190613f8c565b5050565b600860019054906101000a900460ff1681565b6000806004600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612650576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161264790614ee9565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156126ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126c190614ec9565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6127196133a4565b73ffffffffffffffffffffffffffffffffffffffff16612737612838565b73ffffffffffffffffffffffffffffffffffffffff161461278d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161278490614f89565b60405180910390fd5b612797600061393a565b565b6127a16133a4565b73ffffffffffffffffffffffffffffffffffffffff166127bf612838565b73ffffffffffffffffffffffffffffffffffffffff1614612815576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161280c90614f89565b60405180910390fd5b6001600860026101000a81548160ff021916908315150217905550565b600d5481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600860029054906101000a900460ff1681565b60606002805461288390615365565b80601f01602080910402602001604051908101604052809291908181526020018280546128af90615365565b80156128fc5780601f106128d1576101008083540402835291602001916128fc565b820191906000526020600020905b8154815290600101906020018083116128df57829003601f168201915b5050505050905090565b60095481565b3373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561297b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161297290614e49565b60405180910390fd5b80600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612a6c9190614cb1565b60405180910390a35050565b612a806133a4565b73ffffffffffffffffffffffffffffffffffffffff16612a9e612838565b73ffffffffffffffffffffffffffffffffffffffff1614612af4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aeb90614f89565b60405180910390fd5b60005b8151811015612b8557600160106000848481518110612b1957612b186154cf565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080612b7d906153c8565b915050612af7565b5050565b612b916133a4565b73ffffffffffffffffffffffffffffffffffffffff16612baf612838565b73ffffffffffffffffffffffffffffffffffffffff1614612c05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bfc90614f89565b60405180910390fd5b80600d8190555050565b6060612c6060126000612c206133a4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546139fe565b604051602001612c709190614bab565b604051602081830303815290604052905090565b612c8c6133a4565b73ffffffffffffffffffffffffffffffffffffffff16612caa612838565b73ffffffffffffffffffffffffffffffffffffffff1614612d00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cf790614f89565b60405180910390fd5b80600a8190555050565b612d126133a4565b73ffffffffffffffffffffffffffffffffffffffff16612d30612838565b73ffffffffffffffffffffffffffffffffffffffff1614612d86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d7d90614f89565b60405180910390fd5b80600b8190555050565b612d986133a4565b73ffffffffffffffffffffffffffffffffffffffff16612db6612838565b73ffffffffffffffffffffffffffffffffffffffff1614612e0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e0390614f89565b60405180910390fd5b6001600860036101000a81548160ff021916908315150217905550565b612e316133a4565b73ffffffffffffffffffffffffffffffffffffffff16612e4f612838565b73ffffffffffffffffffffffffffffffffffffffff1614612ea5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e9c90614f89565b60405180910390fd5b6000600860016101000a81548160ff021916908315150217905550565b612ecc33836134ef565b612f0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f0290615029565b60405180910390fd5b612f1784848484613b5f565b50505050565b6060612f28826133ca565b612f67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f5e90614fe9565b60405180910390fd5b6060600860039054906101000a900460ff1615612fa6576003604051602001612f909190614c13565b6040516020818303038152906040529050612fd4565b6003612fb1846139fe565b604051602001612fc2929190614bc2565b60405160208183030381529060405290505b80915050919050565b612fe56133a4565b73ffffffffffffffffffffffffffffffffffffffff16613003612838565b73ffffffffffffffffffffffffffffffffffffffff1614613059576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161305090614f89565b60405180910390fd5b6001600860006101000a81548160ff021916908315150217905550565b6060600360405160200161308a9190614bf1565b604051602081830303815290604052905090565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61313a6133a4565b73ffffffffffffffffffffffffffffffffffffffff16613158612838565b73ffffffffffffffffffffffffffffffffffffffff16146131ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131a590614f89565b60405180910390fd5b6000600860026101000a81548160ff021916908315150217905550565b6131d36133a4565b73ffffffffffffffffffffffffffffffffffffffff166131f1612838565b73ffffffffffffffffffffffffffffffffffffffff1614613247576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161323e90614f89565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156132b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132ae90614d69565b60405180910390fd5b6132c08161393a565b50565b600066038d7ea4c68000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461331791906151f0565b9050919050565b6133266133a4565b73ffffffffffffffffffffffffffffffffffffffff16613344612838565b73ffffffffffffffffffffffffffffffffffffffff161461339a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161339190614f89565b60405180910390fd5b80600c8190555050565b600033905090565b6133c6828260405180602001604052806000815250613bbb565b5050565b60008073ffffffffffffffffffffffffffffffffffffffff166004600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816006600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166134a9836125a7565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006134fa826133ca565b613539576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161353090614e69565b60405180910390fd5b6000613544836125a7565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806135b357508373ffffffffffffffffffffffffffffffffffffffff1661359b84611148565b73ffffffffffffffffffffffffffffffffffffffff16145b806135c457506135c3818561309e565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166135ed826125a7565b73ffffffffffffffffffffffffffffffffffffffff1614613643576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161363a90614fc9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156136b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136aa90614e09565b60405180910390fd5b6136be838383613c16565b6136c9600082613436565b6001600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613719919061527b565b925050819055506001600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613770919061519a565b92505081905550816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000613834826125a7565b905061384281600084613c16565b61384d600083613436565b6001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461389d919061527b565b925050819055506004600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60606000821415613a46576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613b5a565b600082905060005b60008214613a78578080613a61906153c8565b915050600a82613a7191906151f0565b9150613a4e565b60008167ffffffffffffffff811115613a9457613a936154fe565b5b6040519080825280601f01601f191660200182016040528015613ac65781602001600182028036833780820191505090505b5090505b60008514613b5357600182613adf919061527b565b9150600a85613aee9190615411565b6030613afa919061519a565b60f81b818381518110613b1057613b0f6154cf565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85613b4c91906151f0565b9450613aca565b8093505050505b919050565b613b6a8484846135cd565b613b7684848484613c1b565b613bb5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613bac90614d49565b60405180910390fd5b50505050565b613bc58383613dab565b613bd26000848484613c1b565b613c11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c0890614d49565b60405180910390fd5b505050565b505050565b6000613c3c8473ffffffffffffffffffffffffffffffffffffffff16613f79565b15613d9e578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02338786866040518563ffffffff1660e01b8152600401613c809493929190614c65565b602060405180830381600087803b158015613c9a57600080fd5b505af1925050508015613ccb57506040513d601f19601f82011682018060405250810190613cc8919061452d565b60015b613d4e573d8060008114613cfb576040519150601f19603f3d011682016040523d82523d6000602084013e613d00565b606091505b50600081511415613d46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d3d90614d49565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613da3565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613e1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613e1290614f49565b60405180910390fd5b613e24816133ca565b15613e64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613e5b90614d89565b60405180910390fd5b613e7060008383613c16565b6001600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613ec0919061519a565b92505081905550816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b828054613f9890615365565b90600052602060002090601f016020900481019282613fba5760008555614001565b82601f10613fd357805160ff1916838001178555614001565b82800160010185558215614001579182015b82811115614000578251825591602001919060010190613fe5565b5b50905061400e9190614012565b5090565b5b8082111561402b576000816000905550600101614013565b5090565b600061404261403d846150a9565b615084565b9050808382526020820190508285602086028201111561406557614064615537565b5b60005b85811015614095578161407b8882614123565b845260208401935060208301925050600181019050614068565b5050509392505050565b60006140b26140ad846150d5565b615084565b9050828152602081018484840111156140ce576140cd61553c565b5b6140d9848285615323565b509392505050565b60006140f46140ef84615106565b615084565b9050828152602081018484840111156141105761410f61553c565b5b61411b848285615323565b509392505050565b60008135905061413281615c67565b92915050565b600082601f83011261414d5761414c615532565b5b813561415d84826020860161402f565b91505092915050565b60008135905061417581615c7e565b92915050565b60008135905061418a81615c95565b92915050565b60008151905061419f81615c95565b92915050565b60008083601f8401126141bb576141ba615532565b5b8235905067ffffffffffffffff8111156141d8576141d761552d565b5b6020830191508360018202830111156141f4576141f3615537565b5b9250929050565b600082601f8301126142105761420f615532565b5b813561422084826020860161409f565b91505092915050565b600082601f83011261423e5761423d615532565b5b813561424e8482602086016140e1565b91505092915050565b60008135905061426681615cac565b92915050565b60006020828403121561428257614281615546565b5b600061429084828501614123565b91505092915050565b600080604083850312156142b0576142af615546565b5b60006142be85828601614123565b92505060206142cf85828601614123565b9150509250929050565b6000806000606084860312156142f2576142f1615546565b5b600061430086828701614123565b935050602061431186828701614123565b925050604061432286828701614257565b9150509250925092565b60008060008060006080868803121561434857614347615546565b5b600061435688828901614123565b955050602061436788828901614123565b945050604061437888828901614257565b935050606086013567ffffffffffffffff81111561439957614398615541565b5b6143a5888289016141a5565b92509250509295509295909350565b600080600080608085870312156143ce576143cd615546565b5b60006143dc87828801614123565b94505060206143ed87828801614123565b93505060406143fe87828801614257565b925050606085013567ffffffffffffffff81111561441f5761441e615541565b5b61442b878288016141fb565b91505092959194509250565b6000806040838503121561444e5761444d615546565b5b600061445c85828601614123565b925050602061446d85828601614166565b9150509250929050565b6000806040838503121561448e5761448d615546565b5b600061449c85828601614123565b92505060206144ad85828601614257565b9150509250929050565b6000602082840312156144cd576144cc615546565b5b600082013567ffffffffffffffff8111156144eb576144ea615541565b5b6144f784828501614138565b91505092915050565b60006020828403121561451657614515615546565b5b60006145248482850161417b565b91505092915050565b60006020828403121561454357614542615546565b5b600061455184828501614190565b91505092915050565b6000602082840312156145705761456f615546565b5b600082013567ffffffffffffffff81111561458e5761458d615541565b5b61459a84828501614229565b91505092915050565b6000602082840312156145b9576145b8615546565b5b60006145c784828501614257565b91505092915050565b600080604083850312156145e7576145e6615546565b5b60006145f585828601614257565b925050602061460685828601614257565b9150509250929050565b614619816152af565b82525050565b614628816152c1565b82525050565b614637816152cd565b82525050565b60006146488261514c565b6146528185615162565b9350614662818560208601615332565b61466b8161554b565b840191505092915050565b600061468182615157565b61468b818561517e565b935061469b818560208601615332565b6146a48161554b565b840191505092915050565b60006146ba82615157565b6146c4818561518f565b93506146d4818560208601615332565b80840191505092915050565b600081546146ed81615365565b6146f7818661518f565b94506001821660008114614712576001811461472357614756565b60ff19831686528186019350614756565b61472c85615137565b60005b8381101561474e5781548189015260018201915060208101905061472f565b838801955050505b50505092915050565b600061476c601e8361517e565b91506147778261555c565b602082019050919050565b600061478f600d8361518f565b915061479a82615585565b600d82019050919050565b60006147b260238361517e565b91506147bd826155ae565b604082019050919050565b60006147d560328361517e565b91506147e0826155fd565b604082019050919050565b60006147f860268361517e565b91506148038261564c565b604082019050919050565b600061481b601c8361517e565b91506148268261569b565b602082019050919050565b600061483e60108361517e565b9150614849826156c4565b602082019050919050565b600061486160248361517e565b915061486c826156ed565b604082019050919050565b600061488460188361517e565b915061488f8261573c565b602082019050919050565b60006148a760248361517e565b91506148b282615765565b604082019050919050565b60006148ca60168361517e565b91506148d5826157b4565b602082019050919050565b60006148ed60198361517e565b91506148f8826157dd565b602082019050919050565b6000614910600c8361518f565b915061491b82615806565b600c82019050919050565b6000614933602c8361517e565b915061493e8261582f565b604082019050919050565b600061495660248361517e565b91506149618261587e565b604082019050919050565b600061497960388361517e565b9150614984826158cd565b604082019050919050565b600061499c602a8361517e565b91506149a78261591c565b604082019050919050565b60006149bf60298361517e565b91506149ca8261596b565b604082019050919050565b60006149e260118361517e565b91506149ed826159ba565b602082019050919050565b6000614a0560198361517e565b9150614a10826159e3565b602082019050919050565b6000614a2860208361517e565b9150614a3382615a0c565b602082019050919050565b6000614a4b602c8361517e565b9150614a5682615a35565b604082019050919050565b6000614a6e60058361518f565b9150614a7982615a84565b600582019050919050565b6000614a9160208361517e565b9150614a9c82615aad565b602082019050919050565b6000614ab460188361517e565b9150614abf82615ad6565b602082019050919050565b6000614ad760298361517e565b9150614ae282615aff565b604082019050919050565b6000614afa602f8361517e565b9150614b0582615b4e565b604082019050919050565b6000614b1d60218361517e565b9150614b2882615b9d565b604082019050919050565b6000614b40600083615173565b9150614b4b82615bec565b600082019050919050565b6000614b6360318361517e565b9150614b6e82615bef565b604082019050919050565b6000614b8660138361517e565b9150614b9182615c3e565b602082019050919050565b614ba581615319565b82525050565b6000614bb782846146af565b915081905092915050565b6000614bce82856146e0565b9150614bda82846146af565b9150614be582614a61565b91508190509392505050565b6000614bfd82846146e0565b9150614c0882614782565b915081905092915050565b6000614c1f82846146e0565b9150614c2a82614903565b915081905092915050565b6000614c4082614b33565b9150819050919050565b6000602082019050614c5f6000830184614610565b92915050565b6000608082019050614c7a6000830187614610565b614c876020830186614610565b614c946040830185614b9c565b8181036060830152614ca6818461463d565b905095945050505050565b6000602082019050614cc6600083018461461f565b92915050565b6000602082019050614ce1600083018461462e565b92915050565b60006020820190508181036000830152614d018184614676565b905092915050565b60006020820190508181036000830152614d228161475f565b9050919050565b60006020820190508181036000830152614d42816147a5565b9050919050565b60006020820190508181036000830152614d62816147c8565b9050919050565b60006020820190508181036000830152614d82816147eb565b9050919050565b60006020820190508181036000830152614da28161480e565b9050919050565b60006020820190508181036000830152614dc281614831565b9050919050565b60006020820190508181036000830152614de281614854565b9050919050565b60006020820190508181036000830152614e0281614877565b9050919050565b60006020820190508181036000830152614e228161489a565b9050919050565b60006020820190508181036000830152614e42816148bd565b9050919050565b60006020820190508181036000830152614e62816148e0565b9050919050565b60006020820190508181036000830152614e8281614926565b9050919050565b60006020820190508181036000830152614ea281614949565b9050919050565b60006020820190508181036000830152614ec28161496c565b9050919050565b60006020820190508181036000830152614ee28161498f565b9050919050565b60006020820190508181036000830152614f02816149b2565b9050919050565b60006020820190508181036000830152614f22816149d5565b9050919050565b60006020820190508181036000830152614f42816149f8565b9050919050565b60006020820190508181036000830152614f6281614a1b565b9050919050565b60006020820190508181036000830152614f8281614a3e565b9050919050565b60006020820190508181036000830152614fa281614a84565b9050919050565b60006020820190508181036000830152614fc281614aa7565b9050919050565b60006020820190508181036000830152614fe281614aca565b9050919050565b6000602082019050818103600083015261500281614aed565b9050919050565b6000602082019050818103600083015261502281614b10565b9050919050565b6000602082019050818103600083015261504281614b56565b9050919050565b6000602082019050818103600083015261506281614b79565b9050919050565b600060208201905061507e6000830184614b9c565b92915050565b600061508e61509f565b905061509a8282615397565b919050565b6000604051905090565b600067ffffffffffffffff8211156150c4576150c36154fe565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156150f0576150ef6154fe565b5b6150f98261554b565b9050602081019050919050565b600067ffffffffffffffff821115615121576151206154fe565b5b61512a8261554b565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006151a582615319565b91506151b083615319565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156151e5576151e4615442565b5b828201905092915050565b60006151fb82615319565b915061520683615319565b92508261521657615215615471565b5b828204905092915050565b600061522c82615319565b915061523783615319565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156152705761526f615442565b5b828202905092915050565b600061528682615319565b915061529183615319565b9250828210156152a4576152a3615442565b5b828203905092915050565b60006152ba826152f9565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015615350578082015181840152602081019050615335565b8381111561535f576000848401525b50505050565b6000600282049050600182168061537d57607f821691505b60208210811415615391576153906154a0565b5b50919050565b6153a08261554b565b810181811067ffffffffffffffff821117156153bf576153be6154fe565b5b80604052505050565b60006153d382615319565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561540657615405615442565b5b600182019050919050565b600061541c82615319565b915061542783615319565b92508261543757615436615471565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4d696e743a204e6f7420656e6f7567682061766169616c6162696c6974790000600082015250565b7f636f6e74726163742e6a736f6e00000000000000000000000000000000000000600082015250565b7f4d696e743a20756e61626c6520746f2073656e64206368616e676520746f207560008201527f7365720000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f496e76616c6964204d696e742054786e00000000000000000000000000000000600082015250565b7f4d696e743a204d617820746f6b656e73207065722077616c6c6574206578636560008201527f6564656400000000000000000000000000000000000000000000000000000000602082015250565b7f5472616e73616374696f6e20556e7375636365737366756c0000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f6d696e74206578636565647320616c6c6f77616e636500000000000000000000600082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f6d7973746572792e6a736f6e0000000000000000000000000000000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f617474656d707420746f207265656e7465722061206c6f636b65642066756e6360008201527f74696f6e00000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f43616e6e6f742066696c6c206f72646572000000000000000000000000000000600082015250565b7f4d696e743a20556e617574686f72697a65642041636365737300000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4d696e743a20496e73756666696369656e742046756e64730000000000000000600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f4d617468206f766572666c6f77206572726f7200000000000000000000000000600082015250565b615c70816152af565b8114615c7b57600080fd5b50565b615c87816152c1565b8114615c9257600080fd5b50565b615c9e816152cd565b8114615ca957600080fd5b50565b615cb581615319565b8114615cc057600080fd5b5056fe4d696e742074797065206e6f7420617661696c61626c6520617420746869732074696d652ea26469706673582212201e3534fcab784f070fc83e5112bcaa4b22f09170867c22bceb744a6b525ccf9b64736f6c63430008070033

Deployed Bytecode

0x6080604052600436106103385760003560e01c80635f2f9404116101ab578063b145c013116100f7578063c91c046211610095578063f275d6a71161006f578063f275d6a714610b94578063f2fde38b14610bab578063f8b2cb4f14610bd4578063fe779f6c14610c1157610358565b8063c91c046214610b15578063e8a3d48514610b2c578063e985e9c514610b5757610358565b8063b5b3e214116100d1578063b5b3e21414610a81578063b61a413214610a98578063b88d4fde14610aaf578063c87b56dd14610ad857610358565b8063b145c01314610a04578063b3aa880614610a2f578063b4afeed714610a5857610358565b80638da5cb5b11610164578063a035b1fe1161013e578063a035b1fe1461095e578063a22cb46514610989578063a519355a146109b2578063b0b92263146109db57610358565b80638da5cb5b146108dd5780638de801e91461090857806395d89b411461093357610358565b80635f2f9404146107df5780636352211e1461080a57806370a0823114610847578063715018a614610884578063756aea541461089b5780637e1c0c09146108b257610358565b806330e412ad1161028557806342966c6811610223578063484b973c116101fd578063484b973c1461074b57806349a772b5146107745780634d5a67d81461079f57806355f804b3146107b657610358565b806342966c68146106ce57806343d67565146106f7578063453c23101461072057610358565b80633ba5939d1161025f5780633ba5939d1461064e5780633ccfd60b146106655780633d6aa72e1461067c57806342842e0e146106a557610358565b806330e412ad146105bf578063338431b6146105e8578063372c12b11461062557610358565b806318160ddd116102f257806323b872dd116102cc57806323b872dd1461052b57806325fd90f31461055457806329ccc4781461057f5780632e56f71e146105a857610358565b806318160ddd146104a75780631950c218146104d25780631b2ef1ca1461050f57610358565b8062b6849f1461037357806301ffc9a71461039c57806306fdde03146103d9578063081812fc14610404578063095ea7b314610441578063150b7a021461046a57610358565b3661035857600034905060008111156103555761035481610c3a565b5b50005b600034905060008111156103705761036f81610c3a565b5b50005b34801561037f57600080fd5b5061039a600480360381019061039591906144b7565b610d97565b005b3480156103a857600080fd5b506103c360048036038101906103be9190614500565b610f2d565b6040516103d09190614cb1565b60405180910390f35b3480156103e557600080fd5b506103ee6110b6565b6040516103fb9190614ce7565b60405180910390f35b34801561041057600080fd5b5061042b600480360381019061042691906145a3565b611148565b6040516104389190614c4a565b60405180910390f35b34801561044d57600080fd5b5061046860048036038101906104639190614477565b6111cd565b005b34801561047657600080fd5b50610491600480360381019061048c919061432c565b6112d7565b60405161049e9190614ccc565b60405180910390f35b3480156104b357600080fd5b506104bc6112ec565b6040516104c99190615069565b60405180910390f35b3480156104de57600080fd5b506104f960048036038101906104f4919061426c565b6112f6565b6040516105069190614cb1565b60405180910390f35b610529600480360381019061052491906145d0565b611364565b005b34801561053757600080fd5b50610552600480360381019061054d91906142d9565b611abf565b005b34801561056057600080fd5b50610569611b18565b6040516105769190614cb1565b60405180910390f35b34801561058b57600080fd5b506105a660048036038101906105a191906145a3565b611b2b565b005b3480156105b457600080fd5b506105bd611bb1565b005b3480156105cb57600080fd5b506105e660048036038101906105e1919061426c565b611c4a565b005b3480156105f457600080fd5b5061060f600480360381019061060a919061426c565b611d21565b60405161061c9190614cb1565b60405180910390f35b34801561063157600080fd5b5061064c6004803603810190610647919061426c565b611d8f565b005b34801561065a57600080fd5b50610663611e66565b005b34801561067157600080fd5b5061067a611eff565b005b34801561068857600080fd5b506106a3600480360381019061069e91906145a3565b6120cb565b005b3480156106b157600080fd5b506106cc60048036038101906106c791906142d9565b61215f565b005b3480156106da57600080fd5b506106f560048036038101906106f091906145a3565b61217f565b005b34801561070357600080fd5b5061071e600480360381019061071991906144b7565b6121d2565b005b34801561072c57600080fd5b506107356122e3565b6040516107429190615069565b60405180910390f35b34801561075757600080fd5b50610772600480360381019061076d9190614477565b6122e9565b005b34801561078057600080fd5b5061078961245f565b6040516107969190615069565b60405180910390f35b3480156107ab57600080fd5b506107b4612465565b005b3480156107c257600080fd5b506107dd60048036038101906107d8919061455a565b6124fe565b005b3480156107eb57600080fd5b506107f4612594565b6040516108019190614cb1565b60405180910390f35b34801561081657600080fd5b50610831600480360381019061082c91906145a3565b6125a7565b60405161083e9190614c4a565b60405180910390f35b34801561085357600080fd5b5061086e6004803603810190610869919061426c565b612659565b60405161087b9190615069565b60405180910390f35b34801561089057600080fd5b50610899612711565b005b3480156108a757600080fd5b506108b0612799565b005b3480156108be57600080fd5b506108c7612832565b6040516108d49190615069565b60405180910390f35b3480156108e957600080fd5b506108f2612838565b6040516108ff9190614c4a565b60405180910390f35b34801561091457600080fd5b5061091d612861565b60405161092a9190614cb1565b60405180910390f35b34801561093f57600080fd5b50610948612874565b6040516109559190614ce7565b60405180910390f35b34801561096a57600080fd5b50610973612906565b6040516109809190615069565b60405180910390f35b34801561099557600080fd5b506109b060048036038101906109ab9190614437565b61290c565b005b3480156109be57600080fd5b506109d960048036038101906109d491906144b7565b612a78565b005b3480156109e757600080fd5b50610a0260048036038101906109fd91906145a3565b612b89565b005b348015610a1057600080fd5b50610a19612c0f565b604051610a269190614ce7565b60405180910390f35b348015610a3b57600080fd5b50610a566004803603810190610a5191906145a3565b612c84565b005b348015610a6457600080fd5b50610a7f6004803603810190610a7a91906145a3565b612d0a565b005b348015610a8d57600080fd5b50610a96612d90565b005b348015610aa457600080fd5b50610aad612e29565b005b348015610abb57600080fd5b50610ad66004803603810190610ad191906143b4565b612ec2565b005b348015610ae457600080fd5b50610aff6004803603810190610afa91906145a3565b612f1d565b604051610b0c9190614ce7565b60405180910390f35b348015610b2157600080fd5b50610b2a612fdd565b005b348015610b3857600080fd5b50610b41613076565b604051610b4e9190614ce7565b60405180910390f35b348015610b6357600080fd5b50610b7e6004803603810190610b799190614299565b61309e565b604051610b8b9190614cb1565b60405180910390f35b348015610ba057600080fd5b50610ba9613132565b005b348015610bb757600080fd5b50610bd26004803603810190610bcd919061426c565b6131cb565b005b348015610be057600080fd5b50610bfb6004803603810190610bf6919061426c565b6132c3565b604051610c089190615069565b60405180910390f35b348015610c1d57600080fd5b50610c386004803603810190610c3391906145a3565b61331e565b005b60008111610c4757600080fd5b60005b601480549050811015610d93576103e8826011600060148581548110610c7357610c726154cf565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610ce39190615221565b610ced91906151f0565b6012600060148481548110610d0557610d046154cf565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610d79919061519a565b925050819055508080610d8b906153c8565b915050610c4a565b5050565b610d9f6133a4565b73ffffffffffffffffffffffffffffffffffffffff16610dbd612838565b73ffffffffffffffffffffffffffffffffffffffff1614610e13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0a90614f89565b60405180910390fd5b600081519050600e5481600e54610e2a919061519a565b11610e6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6190615049565b60405180910390fd5b600d5481600e54610e7b919061519a565b10610ebb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb290614f09565b60405180910390fd5b6000600e54905060005b82811015610f2757610efc848281518110610ee357610ee26154cf565b5b60200260200101518284610ef7919061519a565b6133ac565b600e6000815480929190610f0f906153c8565b91905055508080610f1f906153c8565b915050610ec5565b50505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610ff857507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061106057507f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806110af575063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b6060600180546110c590615365565b80601f01602080910402602001604051908101604052809291908181526020018280546110f190615365565b801561113e5780601f106111135761010080835404028352916020019161113e565b820191906000526020600020905b81548152906001019060200180831161112157829003601f168201915b5050505050905090565b6000611153826133ca565b611192576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118990614f69565b60405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006111d8826125a7565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611249576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124090615009565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806112895750611288813361309e565b5b6112c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112bf90614ea9565b60405180910390fd5b6112d28383613436565b505050565b600063150b7a0260e01b905095945050505050565b6000600e54905090565b600060011515600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515141561135a576001905061135f565b600090505b919050565b600060149054906101000a900460ff16156113b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ab90614e89565b60405180910390fd5b6001600060146101000a81548160ff0219169083151502179055506000821180156113df5750600482105b61141e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141590614da9565b60405180910390fd5b6000806000604051806060016040528060258152602001615cc460259139905060018514156115cb57600c54925060029150600f600061145c6133a4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166114e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114da90614f29565b60405180910390fd5b600860019054906101000a900460ff168190611535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152c9190614ce7565b60405180910390fd5b508184601360006115446133a4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611589919061519a565b11156115ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c190614e29565b60405180910390fd5b5b600285141561175857600b54925060019150601060006115e96133a4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611670576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166790614f29565b60405180910390fd5b600860029054906101000a900460ff1681906116c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b99190614ce7565b60405180910390fd5b508184601360006116d16133a4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611716919061519a565b1115611757576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174e90614e29565b60405180910390fd5b5b60038514156117bf576009549250600a549150600860009054906101000a900460ff1681906117bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b49190614ce7565b60405180910390fd5b505b82846117cb9190615221565b34101561180d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180490614fa9565b60405180910390fd5b81846005600061181b6133a4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611860919061519a565b11156118a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189890614dc9565b60405180910390fd5b600d54600e54856118b2919061519a565b106118f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e990614d09565b60405180910390fd5b6000600e54905084601360006119066133a4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461194f919061519a565b92505081905550600034905060006009548761196b9190615221565b90506000818361197b919061527b565b905060008211156119905761198f82610c3a565b5b60005b888110156119e2576119b76119a66133a4565b82876119b2919061519a565b6133ac565b600e60008154809291906119ca906153c8565b919050555080806119da906153c8565b915050611993565b506000811115611a9a5760003373ffffffffffffffffffffffffffffffffffffffff1682604051611a1290614c35565b60006040518083038185875af1925050503d8060008114611a4f576040519150601f19603f3d011682016040523d82523d6000602084013e611a54565b606091505b5050905080611a98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8f90614d29565b60405180910390fd5b505b5050505050505060008060146101000a81548160ff0219169083151502179055505050565b611ac933826134ef565b611b08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aff90615029565b60405180910390fd5b611b138383836135cd565b505050565b600860009054906101000a900460ff1681565b611b336133a4565b73ffffffffffffffffffffffffffffffffffffffff16611b51612838565b73ffffffffffffffffffffffffffffffffffffffff1614611ba7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9e90614f89565b60405180910390fd5b8060098190555050565b611bb96133a4565b73ffffffffffffffffffffffffffffffffffffffff16611bd7612838565b73ffffffffffffffffffffffffffffffffffffffff1614611c2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2490614f89565b60405180910390fd5b6000600860006101000a81548160ff021916908315150217905550565b611c526133a4565b73ffffffffffffffffffffffffffffffffffffffff16611c70612838565b73ffffffffffffffffffffffffffffffffffffffff1614611cc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cbd90614f89565b60405180910390fd5b6001601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600060011515601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151415611d855760019050611d8a565b600090505b919050565b611d976133a4565b73ffffffffffffffffffffffffffffffffffffffff16611db5612838565b73ffffffffffffffffffffffffffffffffffffffff1614611e0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0290614f89565b60405180910390fd5b6001600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b611e6e6133a4565b73ffffffffffffffffffffffffffffffffffffffff16611e8c612838565b73ffffffffffffffffffffffffffffffffffffffff1614611ee2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed990614f89565b60405180910390fd5b6000600860036101000a81548160ff021916908315150217905550565b600060149054906101000a900460ff1615611f4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4690614e89565b60405180910390fd5b6001600060146101000a81548160ff021916908315150217905550600060126000611f786133a4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600060126000611fc36133a4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060003373ffffffffffffffffffffffffffffffffffffffff168260405161202790614c35565b60006040518083038185875af1925050503d8060008114612064576040519150601f19603f3d011682016040523d82523d6000602084013e612069565b606091505b50509050806120ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a490614de9565b60405180910390fd5b505060008060146101000a81548160ff021916908315150217905550565b6120d36133a4565b73ffffffffffffffffffffffffffffffffffffffff166120f1612838565b73ffffffffffffffffffffffffffffffffffffffff1614612147576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213e90614f89565b60405180910390fd5b8060098190555080600c8190555080600b8190555050565b61217a83838360405180602001604052806000815250612ec2565b505050565b612188816125a7565b73ffffffffffffffffffffffffffffffffffffffff166121a66133a4565b73ffffffffffffffffffffffffffffffffffffffff16146121c657600080fd5b6121cf81613829565b50565b6121da6133a4565b73ffffffffffffffffffffffffffffffffffffffff166121f8612838565b73ffffffffffffffffffffffffffffffffffffffff161461224e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224590614f89565b60405180910390fd5b60005b81518110156122df576001600f6000848481518110612273576122726154cf565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806122d7906153c8565b915050612251565b5050565b600a5481565b6122f16133a4565b73ffffffffffffffffffffffffffffffffffffffff1661230f612838565b73ffffffffffffffffffffffffffffffffffffffff1614612365576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235c90614f89565b60405180910390fd5b600e5481600e54612376919061519a565b116123b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ad90615049565b60405180910390fd5b600d5481600e546123c7919061519a565b10612407576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123fe90614f09565b60405180910390fd5b6000600e54905060005b828110156124595761242e848284612429919061519a565b6133ac565b600e6000815480929190612441906153c8565b91905055508080612451906153c8565b915050612411565b50505050565b600e5481565b61246d6133a4565b73ffffffffffffffffffffffffffffffffffffffff1661248b612838565b73ffffffffffffffffffffffffffffffffffffffff16146124e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d890614f89565b60405180910390fd5b6001600860016101000a81548160ff021916908315150217905550565b6125066133a4565b73ffffffffffffffffffffffffffffffffffffffff16612524612838565b73ffffffffffffffffffffffffffffffffffffffff161461257a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161257190614f89565b60405180910390fd5b8060039080519060200190612590929190613f8c565b5050565b600860019054906101000a900460ff1681565b6000806004600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612650576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161264790614ee9565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156126ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126c190614ec9565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6127196133a4565b73ffffffffffffffffffffffffffffffffffffffff16612737612838565b73ffffffffffffffffffffffffffffffffffffffff161461278d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161278490614f89565b60405180910390fd5b612797600061393a565b565b6127a16133a4565b73ffffffffffffffffffffffffffffffffffffffff166127bf612838565b73ffffffffffffffffffffffffffffffffffffffff1614612815576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161280c90614f89565b60405180910390fd5b6001600860026101000a81548160ff021916908315150217905550565b600d5481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600860029054906101000a900460ff1681565b60606002805461288390615365565b80601f01602080910402602001604051908101604052809291908181526020018280546128af90615365565b80156128fc5780601f106128d1576101008083540402835291602001916128fc565b820191906000526020600020905b8154815290600101906020018083116128df57829003601f168201915b5050505050905090565b60095481565b3373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561297b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161297290614e49565b60405180910390fd5b80600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612a6c9190614cb1565b60405180910390a35050565b612a806133a4565b73ffffffffffffffffffffffffffffffffffffffff16612a9e612838565b73ffffffffffffffffffffffffffffffffffffffff1614612af4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aeb90614f89565b60405180910390fd5b60005b8151811015612b8557600160106000848481518110612b1957612b186154cf565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080612b7d906153c8565b915050612af7565b5050565b612b916133a4565b73ffffffffffffffffffffffffffffffffffffffff16612baf612838565b73ffffffffffffffffffffffffffffffffffffffff1614612c05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bfc90614f89565b60405180910390fd5b80600d8190555050565b6060612c6060126000612c206133a4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546139fe565b604051602001612c709190614bab565b604051602081830303815290604052905090565b612c8c6133a4565b73ffffffffffffffffffffffffffffffffffffffff16612caa612838565b73ffffffffffffffffffffffffffffffffffffffff1614612d00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cf790614f89565b60405180910390fd5b80600a8190555050565b612d126133a4565b73ffffffffffffffffffffffffffffffffffffffff16612d30612838565b73ffffffffffffffffffffffffffffffffffffffff1614612d86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d7d90614f89565b60405180910390fd5b80600b8190555050565b612d986133a4565b73ffffffffffffffffffffffffffffffffffffffff16612db6612838565b73ffffffffffffffffffffffffffffffffffffffff1614612e0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e0390614f89565b60405180910390fd5b6001600860036101000a81548160ff021916908315150217905550565b612e316133a4565b73ffffffffffffffffffffffffffffffffffffffff16612e4f612838565b73ffffffffffffffffffffffffffffffffffffffff1614612ea5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e9c90614f89565b60405180910390fd5b6000600860016101000a81548160ff021916908315150217905550565b612ecc33836134ef565b612f0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f0290615029565b60405180910390fd5b612f1784848484613b5f565b50505050565b6060612f28826133ca565b612f67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f5e90614fe9565b60405180910390fd5b6060600860039054906101000a900460ff1615612fa6576003604051602001612f909190614c13565b6040516020818303038152906040529050612fd4565b6003612fb1846139fe565b604051602001612fc2929190614bc2565b60405160208183030381529060405290505b80915050919050565b612fe56133a4565b73ffffffffffffffffffffffffffffffffffffffff16613003612838565b73ffffffffffffffffffffffffffffffffffffffff1614613059576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161305090614f89565b60405180910390fd5b6001600860006101000a81548160ff021916908315150217905550565b6060600360405160200161308a9190614bf1565b604051602081830303815290604052905090565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61313a6133a4565b73ffffffffffffffffffffffffffffffffffffffff16613158612838565b73ffffffffffffffffffffffffffffffffffffffff16146131ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131a590614f89565b60405180910390fd5b6000600860026101000a81548160ff021916908315150217905550565b6131d36133a4565b73ffffffffffffffffffffffffffffffffffffffff166131f1612838565b73ffffffffffffffffffffffffffffffffffffffff1614613247576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161323e90614f89565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156132b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132ae90614d69565b60405180910390fd5b6132c08161393a565b50565b600066038d7ea4c68000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461331791906151f0565b9050919050565b6133266133a4565b73ffffffffffffffffffffffffffffffffffffffff16613344612838565b73ffffffffffffffffffffffffffffffffffffffff161461339a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161339190614f89565b60405180910390fd5b80600c8190555050565b600033905090565b6133c6828260405180602001604052806000815250613bbb565b5050565b60008073ffffffffffffffffffffffffffffffffffffffff166004600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816006600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166134a9836125a7565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006134fa826133ca565b613539576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161353090614e69565b60405180910390fd5b6000613544836125a7565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806135b357508373ffffffffffffffffffffffffffffffffffffffff1661359b84611148565b73ffffffffffffffffffffffffffffffffffffffff16145b806135c457506135c3818561309e565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166135ed826125a7565b73ffffffffffffffffffffffffffffffffffffffff1614613643576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161363a90614fc9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156136b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136aa90614e09565b60405180910390fd5b6136be838383613c16565b6136c9600082613436565b6001600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613719919061527b565b925050819055506001600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613770919061519a565b92505081905550816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000613834826125a7565b905061384281600084613c16565b61384d600083613436565b6001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461389d919061527b565b925050819055506004600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60606000821415613a46576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613b5a565b600082905060005b60008214613a78578080613a61906153c8565b915050600a82613a7191906151f0565b9150613a4e565b60008167ffffffffffffffff811115613a9457613a936154fe565b5b6040519080825280601f01601f191660200182016040528015613ac65781602001600182028036833780820191505090505b5090505b60008514613b5357600182613adf919061527b565b9150600a85613aee9190615411565b6030613afa919061519a565b60f81b818381518110613b1057613b0f6154cf565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85613b4c91906151f0565b9450613aca565b8093505050505b919050565b613b6a8484846135cd565b613b7684848484613c1b565b613bb5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613bac90614d49565b60405180910390fd5b50505050565b613bc58383613dab565b613bd26000848484613c1b565b613c11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c0890614d49565b60405180910390fd5b505050565b505050565b6000613c3c8473ffffffffffffffffffffffffffffffffffffffff16613f79565b15613d9e578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02338786866040518563ffffffff1660e01b8152600401613c809493929190614c65565b602060405180830381600087803b158015613c9a57600080fd5b505af1925050508015613ccb57506040513d601f19601f82011682018060405250810190613cc8919061452d565b60015b613d4e573d8060008114613cfb576040519150601f19603f3d011682016040523d82523d6000602084013e613d00565b606091505b50600081511415613d46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d3d90614d49565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613da3565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613e1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613e1290614f49565b60405180910390fd5b613e24816133ca565b15613e64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613e5b90614d89565b60405180910390fd5b613e7060008383613c16565b6001600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613ec0919061519a565b92505081905550816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b828054613f9890615365565b90600052602060002090601f016020900481019282613fba5760008555614001565b82601f10613fd357805160ff1916838001178555614001565b82800160010185558215614001579182015b82811115614000578251825591602001919060010190613fe5565b5b50905061400e9190614012565b5090565b5b8082111561402b576000816000905550600101614013565b5090565b600061404261403d846150a9565b615084565b9050808382526020820190508285602086028201111561406557614064615537565b5b60005b85811015614095578161407b8882614123565b845260208401935060208301925050600181019050614068565b5050509392505050565b60006140b26140ad846150d5565b615084565b9050828152602081018484840111156140ce576140cd61553c565b5b6140d9848285615323565b509392505050565b60006140f46140ef84615106565b615084565b9050828152602081018484840111156141105761410f61553c565b5b61411b848285615323565b509392505050565b60008135905061413281615c67565b92915050565b600082601f83011261414d5761414c615532565b5b813561415d84826020860161402f565b91505092915050565b60008135905061417581615c7e565b92915050565b60008135905061418a81615c95565b92915050565b60008151905061419f81615c95565b92915050565b60008083601f8401126141bb576141ba615532565b5b8235905067ffffffffffffffff8111156141d8576141d761552d565b5b6020830191508360018202830111156141f4576141f3615537565b5b9250929050565b600082601f8301126142105761420f615532565b5b813561422084826020860161409f565b91505092915050565b600082601f83011261423e5761423d615532565b5b813561424e8482602086016140e1565b91505092915050565b60008135905061426681615cac565b92915050565b60006020828403121561428257614281615546565b5b600061429084828501614123565b91505092915050565b600080604083850312156142b0576142af615546565b5b60006142be85828601614123565b92505060206142cf85828601614123565b9150509250929050565b6000806000606084860312156142f2576142f1615546565b5b600061430086828701614123565b935050602061431186828701614123565b925050604061432286828701614257565b9150509250925092565b60008060008060006080868803121561434857614347615546565b5b600061435688828901614123565b955050602061436788828901614123565b945050604061437888828901614257565b935050606086013567ffffffffffffffff81111561439957614398615541565b5b6143a5888289016141a5565b92509250509295509295909350565b600080600080608085870312156143ce576143cd615546565b5b60006143dc87828801614123565b94505060206143ed87828801614123565b93505060406143fe87828801614257565b925050606085013567ffffffffffffffff81111561441f5761441e615541565b5b61442b878288016141fb565b91505092959194509250565b6000806040838503121561444e5761444d615546565b5b600061445c85828601614123565b925050602061446d85828601614166565b9150509250929050565b6000806040838503121561448e5761448d615546565b5b600061449c85828601614123565b92505060206144ad85828601614257565b9150509250929050565b6000602082840312156144cd576144cc615546565b5b600082013567ffffffffffffffff8111156144eb576144ea615541565b5b6144f784828501614138565b91505092915050565b60006020828403121561451657614515615546565b5b60006145248482850161417b565b91505092915050565b60006020828403121561454357614542615546565b5b600061455184828501614190565b91505092915050565b6000602082840312156145705761456f615546565b5b600082013567ffffffffffffffff81111561458e5761458d615541565b5b61459a84828501614229565b91505092915050565b6000602082840312156145b9576145b8615546565b5b60006145c784828501614257565b91505092915050565b600080604083850312156145e7576145e6615546565b5b60006145f585828601614257565b925050602061460685828601614257565b9150509250929050565b614619816152af565b82525050565b614628816152c1565b82525050565b614637816152cd565b82525050565b60006146488261514c565b6146528185615162565b9350614662818560208601615332565b61466b8161554b565b840191505092915050565b600061468182615157565b61468b818561517e565b935061469b818560208601615332565b6146a48161554b565b840191505092915050565b60006146ba82615157565b6146c4818561518f565b93506146d4818560208601615332565b80840191505092915050565b600081546146ed81615365565b6146f7818661518f565b94506001821660008114614712576001811461472357614756565b60ff19831686528186019350614756565b61472c85615137565b60005b8381101561474e5781548189015260018201915060208101905061472f565b838801955050505b50505092915050565b600061476c601e8361517e565b91506147778261555c565b602082019050919050565b600061478f600d8361518f565b915061479a82615585565b600d82019050919050565b60006147b260238361517e565b91506147bd826155ae565b604082019050919050565b60006147d560328361517e565b91506147e0826155fd565b604082019050919050565b60006147f860268361517e565b91506148038261564c565b604082019050919050565b600061481b601c8361517e565b91506148268261569b565b602082019050919050565b600061483e60108361517e565b9150614849826156c4565b602082019050919050565b600061486160248361517e565b915061486c826156ed565b604082019050919050565b600061488460188361517e565b915061488f8261573c565b602082019050919050565b60006148a760248361517e565b91506148b282615765565b604082019050919050565b60006148ca60168361517e565b91506148d5826157b4565b602082019050919050565b60006148ed60198361517e565b91506148f8826157dd565b602082019050919050565b6000614910600c8361518f565b915061491b82615806565b600c82019050919050565b6000614933602c8361517e565b915061493e8261582f565b604082019050919050565b600061495660248361517e565b91506149618261587e565b604082019050919050565b600061497960388361517e565b9150614984826158cd565b604082019050919050565b600061499c602a8361517e565b91506149a78261591c565b604082019050919050565b60006149bf60298361517e565b91506149ca8261596b565b604082019050919050565b60006149e260118361517e565b91506149ed826159ba565b602082019050919050565b6000614a0560198361517e565b9150614a10826159e3565b602082019050919050565b6000614a2860208361517e565b9150614a3382615a0c565b602082019050919050565b6000614a4b602c8361517e565b9150614a5682615a35565b604082019050919050565b6000614a6e60058361518f565b9150614a7982615a84565b600582019050919050565b6000614a9160208361517e565b9150614a9c82615aad565b602082019050919050565b6000614ab460188361517e565b9150614abf82615ad6565b602082019050919050565b6000614ad760298361517e565b9150614ae282615aff565b604082019050919050565b6000614afa602f8361517e565b9150614b0582615b4e565b604082019050919050565b6000614b1d60218361517e565b9150614b2882615b9d565b604082019050919050565b6000614b40600083615173565b9150614b4b82615bec565b600082019050919050565b6000614b6360318361517e565b9150614b6e82615bef565b604082019050919050565b6000614b8660138361517e565b9150614b9182615c3e565b602082019050919050565b614ba581615319565b82525050565b6000614bb782846146af565b915081905092915050565b6000614bce82856146e0565b9150614bda82846146af565b9150614be582614a61565b91508190509392505050565b6000614bfd82846146e0565b9150614c0882614782565b915081905092915050565b6000614c1f82846146e0565b9150614c2a82614903565b915081905092915050565b6000614c4082614b33565b9150819050919050565b6000602082019050614c5f6000830184614610565b92915050565b6000608082019050614c7a6000830187614610565b614c876020830186614610565b614c946040830185614b9c565b8181036060830152614ca6818461463d565b905095945050505050565b6000602082019050614cc6600083018461461f565b92915050565b6000602082019050614ce1600083018461462e565b92915050565b60006020820190508181036000830152614d018184614676565b905092915050565b60006020820190508181036000830152614d228161475f565b9050919050565b60006020820190508181036000830152614d42816147a5565b9050919050565b60006020820190508181036000830152614d62816147c8565b9050919050565b60006020820190508181036000830152614d82816147eb565b9050919050565b60006020820190508181036000830152614da28161480e565b9050919050565b60006020820190508181036000830152614dc281614831565b9050919050565b60006020820190508181036000830152614de281614854565b9050919050565b60006020820190508181036000830152614e0281614877565b9050919050565b60006020820190508181036000830152614e228161489a565b9050919050565b60006020820190508181036000830152614e42816148bd565b9050919050565b60006020820190508181036000830152614e62816148e0565b9050919050565b60006020820190508181036000830152614e8281614926565b9050919050565b60006020820190508181036000830152614ea281614949565b9050919050565b60006020820190508181036000830152614ec28161496c565b9050919050565b60006020820190508181036000830152614ee28161498f565b9050919050565b60006020820190508181036000830152614f02816149b2565b9050919050565b60006020820190508181036000830152614f22816149d5565b9050919050565b60006020820190508181036000830152614f42816149f8565b9050919050565b60006020820190508181036000830152614f6281614a1b565b9050919050565b60006020820190508181036000830152614f8281614a3e565b9050919050565b60006020820190508181036000830152614fa281614a84565b9050919050565b60006020820190508181036000830152614fc281614aa7565b9050919050565b60006020820190508181036000830152614fe281614aca565b9050919050565b6000602082019050818103600083015261500281614aed565b9050919050565b6000602082019050818103600083015261502281614b10565b9050919050565b6000602082019050818103600083015261504281614b56565b9050919050565b6000602082019050818103600083015261506281614b79565b9050919050565b600060208201905061507e6000830184614b9c565b92915050565b600061508e61509f565b905061509a8282615397565b919050565b6000604051905090565b600067ffffffffffffffff8211156150c4576150c36154fe565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156150f0576150ef6154fe565b5b6150f98261554b565b9050602081019050919050565b600067ffffffffffffffff821115615121576151206154fe565b5b61512a8261554b565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006151a582615319565b91506151b083615319565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156151e5576151e4615442565b5b828201905092915050565b60006151fb82615319565b915061520683615319565b92508261521657615215615471565b5b828204905092915050565b600061522c82615319565b915061523783615319565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156152705761526f615442565b5b828202905092915050565b600061528682615319565b915061529183615319565b9250828210156152a4576152a3615442565b5b828203905092915050565b60006152ba826152f9565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015615350578082015181840152602081019050615335565b8381111561535f576000848401525b50505050565b6000600282049050600182168061537d57607f821691505b60208210811415615391576153906154a0565b5b50919050565b6153a08261554b565b810181811067ffffffffffffffff821117156153bf576153be6154fe565b5b80604052505050565b60006153d382615319565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561540657615405615442565b5b600182019050919050565b600061541c82615319565b915061542783615319565b92508261543757615436615471565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4d696e743a204e6f7420656e6f7567682061766169616c6162696c6974790000600082015250565b7f636f6e74726163742e6a736f6e00000000000000000000000000000000000000600082015250565b7f4d696e743a20756e61626c6520746f2073656e64206368616e676520746f207560008201527f7365720000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f496e76616c6964204d696e742054786e00000000000000000000000000000000600082015250565b7f4d696e743a204d617820746f6b656e73207065722077616c6c6574206578636560008201527f6564656400000000000000000000000000000000000000000000000000000000602082015250565b7f5472616e73616374696f6e20556e7375636365737366756c0000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f6d696e74206578636565647320616c6c6f77616e636500000000000000000000600082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f6d7973746572792e6a736f6e0000000000000000000000000000000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f617474656d707420746f207265656e7465722061206c6f636b65642066756e6360008201527f74696f6e00000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f43616e6e6f742066696c6c206f72646572000000000000000000000000000000600082015250565b7f4d696e743a20556e617574686f72697a65642041636365737300000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4d696e743a20496e73756666696369656e742046756e64730000000000000000600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f4d617468206f766572666c6f77206572726f7200000000000000000000000000600082015250565b615c70816152af565b8114615c7b57600080fd5b50565b615c87816152c1565b8114615c9257600080fd5b50565b615c9e816152cd565b8114615ca957600080fd5b50565b615cb581615319565b8114615cc057600080fd5b5056fe4d696e742074797065206e6f7420617661696c61626c6520617420746869732074696d652ea26469706673582212201e3534fcab784f070fc83e5112bcaa4b22f09170867c22bceb744a6b525ccf9b64736f6c63430008070033

Deployed Bytecode Sourcemap

16655:25019:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41448:15;41466:9;41448:27;;41500:1;41490:7;:11;41486:41;;;41503:22;41517:7;41503:13;:22::i;:::-;41486:41;41437:97;16655:25019;;41585:15;41603:9;41585:27;;41637:1;41627:7;:11;41623:41;;;41640:22;41654:7;41640:13;:22::i;:::-;41623:41;41574:97;16655:25019;25005:510;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20551:361;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40272:84;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29750:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29284:400;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39216:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28069:126;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26299:168;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22152:2435;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30634:337;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17414:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27627:92;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26977:80;;;;;;;;;;;;;:::i;:::-;;25993:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26479:166;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25687:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28297:81;;;;;;;;;;;;;:::i;:::-;;20994:318;;;;;;;;;;;;;:::i;:::-;;27451:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31042:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24658:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25799:186;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17581:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21616:524;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17723:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27069:83;;;;;;;;;;;;;:::i;:::-;;26781:95;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17443:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28983:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28713:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14833:94;;;;;;;;;;;;;:::i;:::-;;27262:81;;;;;;;;;;;;;:::i;:::-;;17690:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14182:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17473:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40413:88;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17554:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30043:289;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26103:184;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27959:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25527:148;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26657:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27846:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28207:78;;;;;;;;;;;;;:::i;:::-;;27164:86;;;;;;;;;;;;;:::i;:::-;;31298:326;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40588:574;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26888:77;;;;;;;;;;;;;:::i;:::-;;41174:140;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30403:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27355:84;;;;;;;;;;;;;:::i;:::-;;15082:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28390:259;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27731:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21324:280;21416:1;21399:14;:18;21391:27;;;;;;21433:9;21429:168;21448:14;:21;;;;21444:1;:25;21429:168;;;21581:4;21563:14;21527;:33;21542:14;21557:1;21542:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;21527:33;;;;;;;;;;;;;;;;:50;;;;:::i;:::-;21526:59;;;;:::i;:::-;21490:13;:32;21504:14;21519:1;21504:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;21490:32;;;;;;;;;;;;;;;;:95;;;;;;;:::i;:::-;;;;;;;;21471:3;;;;;:::i;:::-;;;;21429:168;;;;21324:280;:::o;25005:510::-;14413:12;:10;:12::i;:::-;14402:23;;:7;:5;:7::i;:::-;:23;;;14394:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25074:11:::1;25088:3;:10;25074:24;;25140:12;;25133:3;25118:12;;:18;;;;:::i;:::-;25117:35;25109:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25218:11;;25211:3;25196:12;;:18;;;;:::i;:::-;25195:34;25187:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;25272:21;25296:12;;25272:36;;25333:9;25329:179;25352:3;25348:1;:7;25329:179;;;25377:36;25387:3;25391:1;25387:6;;;;;;;;:::i;:::-;;;;;;;;25411:1;25395:13;:17;;;;:::i;:::-;25377:9;:36::i;:::-;25428:12;;:15;;;;;;;;;:::i;:::-;;;;;;25357:3;;;;;:::i;:::-;;;;25329:179;;;;25063:452;;25005:510:::0;:::o;20551:361::-;20636:4;20676:25;20661:40;;;:11;:40;;;;:109;;;;20737:33;20722:48;;;:11;:48;;;;20661:109;:170;;;;20806:25;20791:40;;;:11;:40;;;;20661:170;:243;;;;20867:37;;;20852:52;;;:11;:52;;;;20661:243;20653:251;;20551:361;;;:::o;40272:84::-;40311:13;40343:5;40336:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40272:84;:::o;29750:221::-;29826:7;29854:16;29862:7;29854;:16::i;:::-;29846:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;29939:15;:24;29955:7;29939:24;;;;;;;;;;;;;;;;;;;;;29932:31;;29750:221;;;:::o;29284:400::-;29365:13;29381:16;29389:7;29381;:16::i;:::-;29365:32;;29422:5;29416:11;;:2;:11;;;;29408:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;29514:5;29500:19;;:10;:19;;;:58;;;;29523:35;29540:5;29547:10;29523:16;:35::i;:::-;29500:58;29478:164;;;;;;;;;;;;:::i;:::-;;;;;;;;;29655:21;29664:2;29668:7;29655:8;:21::i;:::-;29354:330;29284:400;;:::o;39216:215::-;39333:6;39393:30;;;39386:37;;39216:215;;;;;;;:::o;28069:126::-;28115:7;28142:12;;28135:19;;28069:126;:::o;26299:168::-;26367:4;26415;26388:31;;:10;:23;26399:11;26388:23;;;;;;;;;;;;;;;;;;;;;;;;;:31;;;26384:53;;;26430:4;26423:11;;;;26384:53;26454:5;26447:12;;26299:168;;;;:::o;22152:2435::-;16122:11;;;;;;;;;;;16121:12;16113:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;16199:4;16185:11;;:18;;;;;;;;;;;;;;;;;;22343:1:::1;22332:8;:12;22331:28;;;;;22357:1;22348:8;:10;22331:28;22322:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;22392:17;22454::::0;22525:26:::1;:68;;;;;;;;;;;;;;;;;;;22630:1;22618:8;:13;22614:327;;;22659:15;;22647:27;;22701:1;22689:13;;22725:10;:24;22736:12;:10;:12::i;:::-;22725:24;;;;;;;;;;;;;;;;;;;;;;;;;22717:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;22802:11;;;;;;;;;;;22815:12;22794:34;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;22893:9;22885:3;22852:16;:30;22869:12;:10;:12::i;:::-;22852:30;;;;;;;;;;;;;;;;:36;;;;:::i;:::-;22851:51;;22843:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;22614:327;22967:1;22955:8;:13;22951:324;;;22996:14;;22984:26;;23037:1;23025:13;;23061:9;:23;23071:12;:10;:12::i;:::-;23061:23;;;;;;;;;;;;;;;;;;;;;;;;;23053:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;23137:10;;;;;;;;;;;23149:12;23129:33;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;23227:9;23219:3;23186:16;:30;23203:12;:10;:12::i;:::-;23186:30;;;;;;;;;;;;;;;;:36;;;;:::i;:::-;23185:51;;23177:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;22951:324;23309:1;23297:8;:13;23293:149;;;23338:5;;23326:17;;23370:12;;23358:24;;23405:10;;;;;;;;;;;23417:12;23397:33;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;23293:149;23517:9;23511:3;:15;;;;:::i;:::-;23498:9;:28;;23490:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;23609:9;23601:3;23575:9;:23;23585:12;:10;:12::i;:::-;23575:23;;;;;;;;;;;;;;;;:29;;;;:::i;:::-;23574:44;;23566:93;;;;;;;;;;;;:::i;:::-;;;;;;;;;23737:11;;23721:12;;23715:3;:18;;;;:::i;:::-;23714:34;23706:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;23796:21;23820:12;;23796:36;;23975:3;23941:16;:30;23958:12;:10;:12::i;:::-;23941:30;;;;;;;;;;;;;;;;:37;;;;;;;:::i;:::-;;;;;;;;24034:14;24051:9;24034:26;;24071:15;24096:5;;24090:3;:11;;;;:::i;:::-;24071:31;;24113:18;24143:7;24134:6;:16;;;;:::i;:::-;24113:37;;24185:1;24175:7;:11;24171:41;;;24188:22;24202:7;24188:13;:22::i;:::-;24171:41;24259:9;24255:132;24278:3;24274:1;:7;24255:132;;;24303:42;24313:12;:10;:12::i;:::-;24343:1;24327:13;:17;;;;:::i;:::-;24303:9;:42::i;:::-;24360:12;;:15;;;;;;;;;:::i;:::-;;;;;;24283:3;;;;;:::i;:::-;;;;24255:132;;;;24424:1;24411:10;:14;24407:173;;;24442:12;24460:10;:15;;24483:10;24460:38;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24441:57;;;24521:7;24513:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;24426:154;24407:173;22226:2361;;;;;;;16240:5:::0;16226:11;;:19;;;;;;;;;;;;;;;;;;22152:2435;;:::o;30634:337::-;30829:39;30848:10;30860:7;30829:18;:39::i;:::-;30821:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;30935:28;30945:4;30951:2;30955:7;30935:9;:28::i;:::-;30634:337;;;:::o;17414:22::-;;;;;;;;;;;;;:::o;27627:92::-;14413:12;:10;:12::i;:::-;14402:23;;:7;:5;:7::i;:::-;:23;;;14394:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27703:8:::1;27695:5;:16;;;;27627:92:::0;:::o;26977:80::-;14413:12;:10;:12::i;:::-;14402:23;;:7;:5;:7::i;:::-;:23;;;14394:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27044:5:::1;27031:10;;:18;;;;;;;;;;;;;;;;;;26977:80::o:0;25993:98::-;14413:12;:10;:12::i;:::-;14402:23;;:7;:5;:7::i;:::-;:23;;;14394:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26079:4:::1;26058:9;:18;26068:7;26058:18;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;25993:98:::0;:::o;26479:166::-;26546:4;26593;26567:30;;:9;:22;26577:11;26567:22;;;;;;;;;;;;;;;;;;;;;;;;;:30;;;26563:52;;;26608:4;26601:11;;;;26563:52;26632:5;26625:12;;26479:166;;;;:::o;25687:100::-;14413:12;:10;:12::i;:::-;14402:23;;:7;:5;:7::i;:::-;:23;;;14394:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25775:4:::1;25753:10;:19;25764:7;25753:19;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;25687:100:::0;:::o;28297:81::-;14413:12;:10;:12::i;:::-;14402:23;;:7;:5;:7::i;:::-;:23;;;14394:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28365:5:::1;28351:11;;:19;;;;;;;;;;;;;;;;;;28297:81::o:0;20994:318::-;16122:11;;;;;;;;;;;16121:12;16113:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;16199:4;16185:11;;:18;;;;;;;;;;;;;;;;;;21091::::1;21112:13;:27;21126:12;:10;:12::i;:::-;21112:27;;;;;;;;;;;;;;;;21091:48;;21180:1;21150:13;:27;21164:12;:10;:12::i;:::-;21150:27;;;;;;;;;;;;;;;:31;;;;21193:12;21211:10;:15;;21234:10;21211:38;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21192:57;;;21268:7;21260:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;21035:277;;16240:5:::0;16226:11;;:19;;;;;;;;;;;;;;;;;;20994:318::o;27451:164::-;14413:12;:10;:12::i;:::-;14402:23;;:7;:5;:7::i;:::-;:23;;;14394:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27526:8:::1;27518:5;:16;;;;27563:8;27545:15;:26;;;;27599:8;27582:14;:25;;;;27451:164:::0;:::o;31042:185::-;31180:39;31197:4;31203:2;31207:7;31180:39;;;;;;;;;;;;:16;:39::i;:::-;31042:185;;;:::o;24658:125::-;24733:16;24741:7;24733;:16::i;:::-;24717:32;;:12;:10;:12::i;:::-;:32;;;24709:41;;;;;;24761:14;24767:7;24761:5;:14::i;:::-;24658:125;:::o;25799:186::-;14413:12;:10;:12::i;:::-;14402:23;;:7;:5;:7::i;:::-;:23;;;14394:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25884:9:::1;25879:99;25899:8;:15;25895:1;:19;25879:99;;;25962:4;25936:10;:23;25947:8;25956:1;25947:11;;;;;;;;:::i;:::-;;;;;;;;25936:23;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;25916:3;;;;;:::i;:::-;;;;25879:99;;;;25799:186:::0;:::o;17581:27::-;;;;:::o;21616:524::-;14413:12;:10;:12::i;:::-;14402:23;;:7;:5;:7::i;:::-;:23;;;14394:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21722:12:::1;;21715:3;21700:12;;:18;;;;:::i;:::-;21699:35;21691:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21800:11;;21793:3;21778:12;;:18;;;;:::i;:::-;21777:34;21769:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;21854:21;21878:12;;21854:36;;21961:9;21957:176;21980:3;21976:1;:7;21957:176;;;22005:33;22015:3;22036:1;22020:13;:17;;;;:::i;:::-;22005:9;:33::i;:::-;22053:12;;:15;;;;;;;;;:::i;:::-;;;;;;21985:3;;;;;:::i;:::-;;;;21957:176;;;;21680:460;21616:524:::0;;:::o;17723:27::-;;;;:::o;27069:83::-;14413:12;:10;:12::i;:::-;14402:23;;:7;:5;:7::i;:::-;:23;;;14394:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27140:4:::1;27126:11;;:18;;;;;;;;;;;;;;;;;;27069:83::o:0;26781:95::-;14413:12;:10;:12::i;:::-;14402:23;;:7;:5;:7::i;:::-;:23;;;14394:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26862:6:::1;26851:8;:17;;;;;;;;;;;;:::i;:::-;;26781:95:::0;:::o;17443:23::-;;;;;;;;;;;;;:::o;28983:239::-;29055:7;29075:13;29091:7;:16;29099:7;29091:16;;;;;;;;;;;;;;;;;;;;;29075:32;;29143:1;29126:19;;:5;:19;;;;29118:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;29209:5;29202:12;;;28983:239;;;:::o;28713:208::-;28785:7;28830:1;28813:19;;:5;:19;;;;28805:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;28897:9;:16;28907:5;28897:16;;;;;;;;;;;;;;;;28890:23;;28713:208;;;:::o;14833:94::-;14413:12;:10;:12::i;:::-;14402:23;;:7;:5;:7::i;:::-;:23;;;14394:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14898:21:::1;14916:1;14898:9;:21::i;:::-;14833:94::o:0;27262:81::-;14413:12;:10;:12::i;:::-;14402:23;;:7;:5;:7::i;:::-;:23;;;14394:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27331:4:::1;27318:10;;:17;;;;;;;;;;;;;;;;;;27262:81::o:0;17690:26::-;;;;:::o;14182:87::-;14228:7;14255:6;;;;;;;;;;;14248:13;;14182:87;:::o;17473:22::-;;;;;;;;;;;;;:::o;40413:88::-;40454:13;40486:7;40479:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40413:88;:::o;17554:20::-;;;;:::o;30043:289::-;30158:10;30146:22;;:8;:22;;;;30138:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;30254:8;30211:18;:30;30230:10;30211:30;;;;;;;;;;;;;;;:40;30242:8;30211:40;;;;;;;;;;;;;;;;:51;;;;;;;;;;;;;;;;;;30305:8;30278:46;;30293:10;30278:46;;;30315:8;30278:46;;;;;;:::i;:::-;;;;;;;;30043:289;;:::o;26103:184::-;14413:12;:10;:12::i;:::-;14402:23;;:7;:5;:7::i;:::-;:23;;;14394:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26187:9:::1;26182:98;26202:8;:15;26198:1;:19;26182:98;;;26264:4;26239:9;:22;26249:8;26258:1;26249:11;;;;;;;;:::i;:::-;;;;;;;;26239:22;;;;;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;26219:3;;;;;:::i;:::-;;;;26182:98;;;;26103:184:::0;:::o;27959:102::-;14413:12;:10;:12::i;:::-;14402:23;;:7;:5;:7::i;:::-;:23;;;14394:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28044:9:::1;28030:11;:23;;;;27959:102:::0;:::o;25527:148::-;25572:13;25628:37;25637:13;:27;25651:12;:10;:12::i;:::-;25637:27;;;;;;;;;;;;;;;;25628:8;:37::i;:::-;25611:55;;;;;;;;:::i;:::-;;;;;;;;;;;;;25597:70;;25527:148;:::o;26657:112::-;14413:12;:10;:12::i;:::-;14402:23;;:7;:5;:7::i;:::-;:23;;;14394:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26752:9:::1;26737:12;:24;;;;26657:112:::0;:::o;27846:101::-;14413:12;:10;:12::i;:::-;14402:23;;:7;:5;:7::i;:::-;:23;;;14394:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27931:8:::1;27914:14;:25;;;;27846:101:::0;:::o;28207:78::-;14413:12;:10;:12::i;:::-;14402:23;;:7;:5;:7::i;:::-;:23;;;14394:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28273:4:::1;28259:11;;:18;;;;;;;;;;;;;;;;;;28207:78::o:0;27164:86::-;14413:12;:10;:12::i;:::-;14402:23;;:7;:5;:7::i;:::-;:23;;;14394:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27237:5:::1;27223:11;;:19;;;;;;;;;;;;;;;;;;27164:86::o:0;31298:326::-;31473:39;31492:10;31504:7;31473:18;:39::i;:::-;31465:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;31577:39;31591:4;31597:2;31601:7;31610:5;31577:13;:39::i;:::-;31298:326;;;;:::o;40588:574::-;40646:13;40679:16;40687:7;40679;:16::i;:::-;40671:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;40768:22;40815:11;;;;;;;;;;;40811:308;;;40917:8;40900:42;;;;;;;;:::i;:::-;;;;;;;;;;;;;40882:61;;40811:308;;;41069:8;41079:17;41088:7;41079:8;:17::i;:::-;41052:54;;;;;;;;;:::i;:::-;;;;;;;;;;;;;41034:73;;40811:308;41146:8;41139:15;;;40588:574;;;:::o;26888:77::-;14413:12;:10;:12::i;:::-;14402:23;;:7;:5;:7::i;:::-;:23;;;14394:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26953:4:::1;26940:10;;:17;;;;;;;;;;;;;;;;;;26888:77::o:0;41174:140::-;41218:13;41279:8;41262:43;;;;;;;;:::i;:::-;;;;;;;;;;;;;41248:58;;41174:140;:::o;30403:164::-;30500:4;30524:18;:25;30543:5;30524:25;;;;;;;;;;;;;;;:35;30550:8;30524:35;;;;;;;;;;;;;;;;;;;;;;;;;30517:42;;30403:164;;;;:::o;27355:84::-;14413:12;:10;:12::i;:::-;14402:23;;:7;:5;:7::i;:::-;:23;;;14394:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27426:5:::1;27413:10;;:18;;;;;;;;;;;;;;;;;;27355:84::o:0;15082:192::-;14413:12;:10;:12::i;:::-;14402:23;;:7;:5;:7::i;:::-;:23;;;14394:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15191:1:::1;15171:22;;:8;:22;;;;15163:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;15247:19;15257:8;15247:9;:19::i;:::-;15082:192:::0;:::o;28390:259::-;28455:7;28597:6;28570:9;:23;28580:12;28570:23;;;;;;;;;;;;;;;;:34;;;;:::i;:::-;28563:41;;28390:259;;;:::o;27731:103::-;14413:12;:10;:12::i;:::-;14402:23;;:7;:5;:7::i;:::-;:23;;;14394:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27818:8:::1;27800:15;:26;;;;27731:103:::0;:::o;13565:98::-;13618:7;13645:10;13638:17;;13565:98;:::o;34111:110::-;34187:26;34197:2;34201:7;34187:26;;;;;;;;;;;;:9;:26::i;:::-;34111:110;;:::o;33134:127::-;33199:4;33251:1;33223:30;;:7;:16;33231:7;33223:16;;;;;;;;;;;;;;;;;;;;;:30;;;;33216:37;;33134:127;;;:::o;37095:167::-;37197:2;37170:15;:24;37186:7;37170:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;37246:7;37242:2;37215:39;;37224:16;37232:7;37224;:16::i;:::-;37215:39;;;;;;;;;;;;37095:167;;:::o;33428:341::-;33521:4;33546:16;33554:7;33546;:16::i;:::-;33538:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;33622:13;33638:16;33646:7;33638;:16::i;:::-;33622:32;;33684:5;33673:16;;:7;:16;;;:51;;;;33717:7;33693:31;;:20;33705:7;33693:11;:20::i;:::-;:31;;;33673:51;:87;;;;33728:32;33745:5;33752:7;33728:16;:32::i;:::-;33673:87;33665:96;;;33428:341;;;;:::o;36406:571::-;36558:4;36538:24;;:16;36546:7;36538;:16::i;:::-;:24;;;36530:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;36641:1;36627:16;;:2;:16;;;;36619:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;36697:39;36718:4;36724:2;36728:7;36697:20;:39::i;:::-;36801:29;36818:1;36822:7;36801:8;:29::i;:::-;36862:1;36843:9;:15;36853:4;36843:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;36891:1;36874:9;:13;36884:2;36874:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;36922:2;36903:7;:16;36911:7;36903:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;36961:7;36957:2;36942:27;;36951:4;36942:27;;;;;;;;;;;;36406:571;;;:::o;35716:353::-;35776:13;35792:16;35800:7;35792;:16::i;:::-;35776:32;;35821:48;35842:5;35857:1;35861:7;35821:20;:48::i;:::-;35910:29;35927:1;35931:7;35910:8;:29::i;:::-;35972:1;35952:9;:16;35962:5;35952:16;;;;;;;;;;;;;;;;:21;;;;;;;:::i;:::-;;;;;;;;35991:7;:16;35999:7;35991:16;;;;;;;;;;;;35984:23;;;;;;;;;;;36053:7;36049:1;36025:36;;36034:5;36025:36;;;;;;;;;;;;35765:304;35716:353;:::o;15282:173::-;15338:16;15357:6;;;;;;;;;;;15338:25;;15383:8;15374:6;;:17;;;;;;;;;;;;;;;;;;15438:8;15407:40;;15428:8;15407:40;;;;;;;;;;;;15327:128;15282:173;:::o;15498:532::-;15554:13;15593:1;15584:5;:10;15580:53;;;15611:10;;;;;;;;;;;;;;;;;;;;;15580:53;15643:12;15658:5;15643:20;;15674:14;15699:78;15714:1;15706:4;:9;15699:78;;15732:8;;;;;:::i;:::-;;;;15763:2;15755:10;;;;;:::i;:::-;;;15699:78;;;15787:19;15819:6;15809:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15787:39;;15837:154;15853:1;15844:5;:10;15837:154;;15881:1;15871:11;;;;;:::i;:::-;;;15948:2;15940:5;:10;;;;:::i;:::-;15927:2;:24;;;;:::i;:::-;15914:39;;15897:6;15904;15897:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;15977:2;15968:11;;;;;:::i;:::-;;;15837:154;;;16015:6;16001:21;;;;;15498:532;;;;:::o;32506:315::-;32663:28;32673:4;32679:2;32683:7;32663:9;:28::i;:::-;32710:48;32733:4;32739:2;32743:7;32752:5;32710:22;:48::i;:::-;32702:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;32506:315;;;;:::o;34448:321::-;34578:18;34584:2;34588:7;34578:5;:18::i;:::-;34629:54;34660:1;34664:2;34668:7;34677:5;34629:22;:54::i;:::-;34607:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;34448:321;;;:::o;40003:126::-;;;;:::o;37827:801::-;37982:4;38003:15;:2;:13;;;:15::i;:::-;37999:622;;;38055:2;38039:36;;;38076:10;38088:4;38094:7;38103:5;38039:70;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;38035:531;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38300:1;38283:6;:13;:18;38279:272;;;38326:60;;;;;;;;;;:::i;:::-;;;;;;;;38279:272;38501:6;38495:13;38486:6;38482:2;38478:15;38471:38;38035:531;38170:45;;;38160:55;;;:6;:55;;;;38153:62;;;;;37999:622;38605:4;38598:11;;37827:801;;;;;;;:::o;35105:382::-;35199:1;35185:16;;:2;:16;;;;35177:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;35258:16;35266:7;35258;:16::i;:::-;35257:17;35249:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;35320:45;35349:1;35353:2;35357:7;35320:20;:45::i;:::-;35395:1;35378:9;:13;35388:2;35378:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;35426:2;35407:7;:16;35415:7;35407:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;35471:7;35467:2;35446:33;;35463:1;35446:33;;;;;;;;;;;;35105:382;;:::o;6418:387::-;6478:4;6686:12;6753:7;6741:20;6733:28;;6796:1;6789:4;:8;6782:15;;;6418:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350: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:474::-;10449:6;10457;10506:2;10494:9;10485:7;10481:23;10477:32;10474:119;;;10512:79;;:::i;:::-;10474:119;10632:1;10657:53;10702:7;10693:6;10682:9;10678:22;10657:53;:::i;:::-;10647:63;;10603:117;10759:2;10785:53;10830:7;10821:6;10810:9;10806:22;10785:53;:::i;:::-;10775:63;;10730:118;10381:474;;;;;:::o;10861:118::-;10948:24;10966:5;10948:24;:::i;:::-;10943:3;10936:37;10861:118;;:::o;10985:109::-;11066:21;11081:5;11066:21;:::i;:::-;11061:3;11054:34;10985:109;;:::o;11100:115::-;11185:23;11202:5;11185:23;:::i;:::-;11180:3;11173:36;11100:115;;:::o;11221:360::-;11307:3;11335:38;11367:5;11335:38;:::i;:::-;11389:70;11452:6;11447:3;11389:70;:::i;:::-;11382:77;;11468:52;11513:6;11508:3;11501:4;11494:5;11490:16;11468:52;:::i;:::-;11545:29;11567:6;11545:29;:::i;:::-;11540:3;11536:39;11529:46;;11311:270;11221:360;;;;:::o;11587:364::-;11675:3;11703:39;11736:5;11703:39;:::i;:::-;11758:71;11822:6;11817:3;11758:71;:::i;:::-;11751:78;;11838:52;11883:6;11878:3;11871:4;11864:5;11860:16;11838:52;:::i;:::-;11915:29;11937:6;11915:29;:::i;:::-;11910:3;11906:39;11899:46;;11679:272;11587:364;;;;:::o;11957:377::-;12063:3;12091:39;12124:5;12091:39;:::i;:::-;12146:89;12228:6;12223:3;12146:89;:::i;:::-;12139:96;;12244:52;12289:6;12284:3;12277:4;12270:5;12266:16;12244:52;:::i;:::-;12321:6;12316:3;12312:16;12305:23;;12067:267;11957:377;;;;:::o;12364:845::-;12467:3;12504:5;12498:12;12533:36;12559:9;12533:36;:::i;:::-;12585:89;12667:6;12662:3;12585:89;:::i;:::-;12578:96;;12705:1;12694:9;12690:17;12721:1;12716:137;;;;12867:1;12862:341;;;;12683:520;;12716:137;12800:4;12796:9;12785;12781:25;12776:3;12769:38;12836:6;12831:3;12827:16;12820:23;;12716:137;;12862:341;12929:38;12961:5;12929:38;:::i;:::-;12989:1;13003:154;13017:6;13014:1;13011:13;13003:154;;;13091:7;13085:14;13081:1;13076:3;13072:11;13065:35;13141:1;13132:7;13128:15;13117:26;;13039:4;13036:1;13032:12;13027:17;;13003:154;;;13186:6;13181:3;13177:16;13170:23;;12869:334;;12683:520;;12471:738;;12364:845;;;;:::o;13215:366::-;13357:3;13378:67;13442:2;13437:3;13378:67;:::i;:::-;13371:74;;13454:93;13543:3;13454:93;:::i;:::-;13572:2;13567:3;13563:12;13556:19;;13215:366;;;:::o;13587:402::-;13747:3;13768:85;13850:2;13845:3;13768:85;:::i;:::-;13761:92;;13862:93;13951:3;13862:93;:::i;:::-;13980:2;13975:3;13971:12;13964:19;;13587:402;;;:::o;13995:366::-;14137:3;14158:67;14222:2;14217:3;14158:67;:::i;:::-;14151:74;;14234:93;14323:3;14234:93;:::i;:::-;14352:2;14347:3;14343:12;14336:19;;13995:366;;;:::o;14367:::-;14509:3;14530:67;14594:2;14589:3;14530:67;:::i;:::-;14523:74;;14606:93;14695:3;14606:93;:::i;:::-;14724:2;14719:3;14715:12;14708:19;;14367:366;;;:::o;14739:::-;14881:3;14902:67;14966:2;14961:3;14902:67;:::i;:::-;14895:74;;14978:93;15067:3;14978:93;:::i;:::-;15096:2;15091:3;15087:12;15080:19;;14739:366;;;:::o;15111:::-;15253:3;15274:67;15338:2;15333:3;15274:67;:::i;:::-;15267:74;;15350:93;15439:3;15350:93;:::i;:::-;15468:2;15463:3;15459:12;15452:19;;15111:366;;;:::o;15483:::-;15625:3;15646:67;15710:2;15705:3;15646:67;:::i;:::-;15639:74;;15722:93;15811:3;15722:93;:::i;:::-;15840:2;15835:3;15831:12;15824:19;;15483:366;;;:::o;15855:::-;15997:3;16018:67;16082:2;16077:3;16018:67;:::i;:::-;16011:74;;16094:93;16183:3;16094:93;:::i;:::-;16212:2;16207:3;16203:12;16196:19;;15855:366;;;:::o;16227:::-;16369:3;16390:67;16454:2;16449:3;16390:67;:::i;:::-;16383:74;;16466:93;16555:3;16466:93;:::i;:::-;16584:2;16579:3;16575:12;16568:19;;16227:366;;;:::o;16599:::-;16741:3;16762:67;16826:2;16821:3;16762:67;:::i;:::-;16755:74;;16838:93;16927:3;16838:93;:::i;:::-;16956:2;16951:3;16947:12;16940:19;;16599:366;;;:::o;16971:::-;17113:3;17134:67;17198:2;17193:3;17134:67;:::i;:::-;17127:74;;17210:93;17299:3;17210:93;:::i;:::-;17328:2;17323:3;17319:12;17312:19;;16971:366;;;:::o;17343:::-;17485:3;17506:67;17570:2;17565:3;17506:67;:::i;:::-;17499:74;;17582:93;17671:3;17582:93;:::i;:::-;17700:2;17695:3;17691:12;17684:19;;17343:366;;;:::o;17715:402::-;17875:3;17896:85;17978:2;17973:3;17896:85;:::i;:::-;17889:92;;17990:93;18079:3;17990:93;:::i;:::-;18108:2;18103:3;18099:12;18092:19;;17715:402;;;:::o;18123:366::-;18265:3;18286:67;18350:2;18345:3;18286:67;:::i;:::-;18279:74;;18362:93;18451:3;18362:93;:::i;:::-;18480:2;18475:3;18471:12;18464:19;;18123:366;;;:::o;18495:::-;18637:3;18658:67;18722:2;18717:3;18658:67;:::i;:::-;18651:74;;18734:93;18823:3;18734:93;:::i;:::-;18852:2;18847:3;18843:12;18836:19;;18495:366;;;:::o;18867:::-;19009:3;19030:67;19094:2;19089:3;19030:67;:::i;:::-;19023:74;;19106:93;19195:3;19106:93;:::i;:::-;19224:2;19219:3;19215:12;19208:19;;18867:366;;;:::o;19239:::-;19381:3;19402:67;19466:2;19461:3;19402:67;:::i;:::-;19395:74;;19478:93;19567:3;19478:93;:::i;:::-;19596:2;19591:3;19587:12;19580:19;;19239:366;;;:::o;19611:::-;19753:3;19774:67;19838:2;19833:3;19774:67;:::i;:::-;19767:74;;19850:93;19939:3;19850:93;:::i;:::-;19968:2;19963:3;19959:12;19952:19;;19611:366;;;:::o;19983:::-;20125:3;20146:67;20210:2;20205:3;20146:67;:::i;:::-;20139:74;;20222:93;20311:3;20222:93;:::i;:::-;20340:2;20335:3;20331:12;20324:19;;19983:366;;;:::o;20355:::-;20497:3;20518:67;20582:2;20577:3;20518:67;:::i;:::-;20511:74;;20594:93;20683:3;20594:93;:::i;:::-;20712:2;20707:3;20703:12;20696:19;;20355:366;;;:::o;20727:::-;20869:3;20890:67;20954:2;20949:3;20890:67;:::i;:::-;20883:74;;20966:93;21055:3;20966:93;:::i;:::-;21084:2;21079:3;21075:12;21068:19;;20727:366;;;:::o;21099:::-;21241:3;21262:67;21326:2;21321:3;21262:67;:::i;:::-;21255:74;;21338:93;21427:3;21338:93;:::i;:::-;21456:2;21451:3;21447:12;21440:19;;21099:366;;;:::o;21471:400::-;21631:3;21652:84;21734:1;21729:3;21652:84;:::i;:::-;21645:91;;21745:93;21834:3;21745:93;:::i;:::-;21863:1;21858:3;21854:11;21847:18;;21471:400;;;:::o;21877:366::-;22019:3;22040:67;22104:2;22099:3;22040:67;:::i;:::-;22033:74;;22116:93;22205:3;22116:93;:::i;:::-;22234:2;22229:3;22225:12;22218:19;;21877:366;;;:::o;22249:::-;22391:3;22412:67;22476:2;22471:3;22412:67;:::i;:::-;22405:74;;22488:93;22577:3;22488:93;:::i;:::-;22606:2;22601:3;22597:12;22590:19;;22249:366;;;:::o;22621:::-;22763:3;22784:67;22848:2;22843:3;22784:67;:::i;:::-;22777:74;;22860:93;22949:3;22860:93;:::i;:::-;22978:2;22973:3;22969:12;22962:19;;22621:366;;;:::o;22993:::-;23135:3;23156:67;23220:2;23215:3;23156:67;:::i;:::-;23149:74;;23232:93;23321:3;23232:93;:::i;:::-;23350:2;23345:3;23341:12;23334:19;;22993:366;;;:::o;23365:::-;23507:3;23528:67;23592:2;23587:3;23528:67;:::i;:::-;23521:74;;23604:93;23693:3;23604:93;:::i;:::-;23722:2;23717:3;23713:12;23706:19;;23365:366;;;:::o;23737:398::-;23896:3;23917:83;23998:1;23993:3;23917:83;:::i;:::-;23910:90;;24009:93;24098:3;24009:93;:::i;:::-;24127:1;24122:3;24118:11;24111:18;;23737:398;;;:::o;24141:366::-;24283:3;24304:67;24368:2;24363:3;24304:67;:::i;:::-;24297:74;;24380:93;24469:3;24380:93;:::i;:::-;24498:2;24493:3;24489:12;24482:19;;24141:366;;;:::o;24513:::-;24655:3;24676:67;24740:2;24735:3;24676:67;:::i;:::-;24669:74;;24752:93;24841:3;24752:93;:::i;:::-;24870:2;24865:3;24861:12;24854:19;;24513:366;;;:::o;24885:118::-;24972:24;24990:5;24972:24;:::i;:::-;24967:3;24960:37;24885:118;;:::o;25009:275::-;25141:3;25163:95;25254:3;25245:6;25163:95;:::i;:::-;25156:102;;25275:3;25268:10;;25009:275;;;;:::o;25290:695::-;25568:3;25590:92;25678:3;25669:6;25590:92;:::i;:::-;25583:99;;25699:95;25790:3;25781:6;25699:95;:::i;:::-;25692:102;;25811:148;25955:3;25811:148;:::i;:::-;25804:155;;25976:3;25969:10;;25290:695;;;;;:::o;25991:535::-;26221:3;26243:92;26331:3;26322:6;26243:92;:::i;:::-;26236:99;;26352:148;26496:3;26352:148;:::i;:::-;26345:155;;26517:3;26510:10;;25991:535;;;;:::o;26532:::-;26762:3;26784:92;26872:3;26863:6;26784:92;:::i;:::-;26777:99;;26893:148;27037:3;26893:148;:::i;:::-;26886:155;;27058:3;27051:10;;26532:535;;;;:::o;27073:379::-;27257:3;27279:147;27422:3;27279:147;:::i;:::-;27272:154;;27443:3;27436:10;;27073:379;;;:::o;27458:222::-;27551:4;27589:2;27578:9;27574:18;27566:26;;27602:71;27670:1;27659:9;27655:17;27646:6;27602:71;:::i;:::-;27458:222;;;;:::o;27686:640::-;27881:4;27919:3;27908:9;27904:19;27896:27;;27933:71;28001:1;27990:9;27986:17;27977:6;27933:71;:::i;:::-;28014:72;28082:2;28071:9;28067:18;28058:6;28014:72;:::i;:::-;28096;28164:2;28153:9;28149:18;28140:6;28096:72;:::i;:::-;28215:9;28209:4;28205:20;28200:2;28189:9;28185:18;28178:48;28243:76;28314:4;28305:6;28243:76;:::i;:::-;28235:84;;27686:640;;;;;;;:::o;28332:210::-;28419:4;28457:2;28446:9;28442:18;28434:26;;28470:65;28532:1;28521:9;28517:17;28508:6;28470:65;:::i;:::-;28332:210;;;;:::o;28548:218::-;28639:4;28677:2;28666:9;28662:18;28654:26;;28690:69;28756:1;28745:9;28741:17;28732:6;28690:69;:::i;:::-;28548:218;;;;:::o;28772:313::-;28885:4;28923:2;28912:9;28908:18;28900:26;;28972:9;28966:4;28962:20;28958:1;28947:9;28943:17;28936:47;29000:78;29073:4;29064:6;29000:78;:::i;:::-;28992:86;;28772:313;;;;:::o;29091:419::-;29257:4;29295:2;29284:9;29280:18;29272:26;;29344:9;29338:4;29334:20;29330:1;29319:9;29315:17;29308:47;29372:131;29498:4;29372:131;:::i;:::-;29364:139;;29091:419;;;:::o;29516:::-;29682:4;29720:2;29709:9;29705:18;29697:26;;29769:9;29763:4;29759:20;29755:1;29744:9;29740:17;29733:47;29797:131;29923:4;29797:131;:::i;:::-;29789:139;;29516:419;;;:::o;29941:::-;30107:4;30145:2;30134:9;30130:18;30122:26;;30194:9;30188:4;30184:20;30180:1;30169:9;30165:17;30158:47;30222:131;30348:4;30222:131;:::i;:::-;30214:139;;29941:419;;;:::o;30366:::-;30532:4;30570:2;30559:9;30555:18;30547:26;;30619:9;30613:4;30609:20;30605:1;30594:9;30590:17;30583:47;30647:131;30773:4;30647:131;:::i;:::-;30639:139;;30366:419;;;:::o;30791:::-;30957:4;30995:2;30984:9;30980:18;30972:26;;31044:9;31038:4;31034:20;31030:1;31019:9;31015:17;31008:47;31072:131;31198:4;31072:131;:::i;:::-;31064:139;;30791:419;;;:::o;31216:::-;31382:4;31420:2;31409:9;31405:18;31397:26;;31469:9;31463:4;31459:20;31455:1;31444:9;31440:17;31433:47;31497:131;31623:4;31497:131;:::i;:::-;31489:139;;31216:419;;;:::o;31641:::-;31807:4;31845:2;31834:9;31830:18;31822:26;;31894:9;31888:4;31884:20;31880:1;31869:9;31865:17;31858:47;31922:131;32048:4;31922:131;:::i;:::-;31914:139;;31641:419;;;:::o;32066:::-;32232:4;32270:2;32259:9;32255:18;32247:26;;32319:9;32313:4;32309:20;32305:1;32294:9;32290:17;32283:47;32347:131;32473:4;32347:131;:::i;:::-;32339:139;;32066:419;;;:::o;32491:::-;32657:4;32695:2;32684:9;32680:18;32672:26;;32744:9;32738:4;32734:20;32730:1;32719:9;32715:17;32708:47;32772:131;32898:4;32772:131;:::i;:::-;32764:139;;32491:419;;;:::o;32916:::-;33082:4;33120:2;33109:9;33105:18;33097:26;;33169:9;33163:4;33159:20;33155:1;33144:9;33140:17;33133:47;33197:131;33323:4;33197:131;:::i;:::-;33189:139;;32916:419;;;:::o;33341:::-;33507:4;33545:2;33534:9;33530:18;33522:26;;33594:9;33588:4;33584:20;33580:1;33569:9;33565:17;33558:47;33622:131;33748:4;33622:131;:::i;:::-;33614:139;;33341:419;;;:::o;33766:::-;33932:4;33970:2;33959:9;33955:18;33947:26;;34019:9;34013:4;34009:20;34005:1;33994:9;33990:17;33983:47;34047:131;34173:4;34047:131;:::i;:::-;34039:139;;33766:419;;;:::o;34191:::-;34357:4;34395:2;34384:9;34380:18;34372:26;;34444:9;34438:4;34434:20;34430:1;34419:9;34415:17;34408:47;34472:131;34598:4;34472:131;:::i;:::-;34464:139;;34191:419;;;:::o;34616:::-;34782:4;34820:2;34809:9;34805:18;34797:26;;34869:9;34863:4;34859:20;34855:1;34844:9;34840:17;34833:47;34897:131;35023:4;34897:131;:::i;:::-;34889:139;;34616:419;;;:::o;35041:::-;35207:4;35245:2;35234:9;35230:18;35222:26;;35294:9;35288:4;35284:20;35280:1;35269:9;35265:17;35258:47;35322:131;35448:4;35322:131;:::i;:::-;35314:139;;35041:419;;;:::o;35466:::-;35632:4;35670:2;35659:9;35655:18;35647:26;;35719:9;35713:4;35709:20;35705:1;35694:9;35690:17;35683:47;35747:131;35873:4;35747:131;:::i;:::-;35739:139;;35466:419;;;:::o;35891:::-;36057:4;36095:2;36084:9;36080:18;36072:26;;36144:9;36138:4;36134:20;36130:1;36119:9;36115:17;36108:47;36172:131;36298:4;36172:131;:::i;:::-;36164:139;;35891:419;;;:::o;36316:::-;36482:4;36520:2;36509:9;36505:18;36497:26;;36569:9;36563:4;36559:20;36555:1;36544:9;36540:17;36533:47;36597:131;36723:4;36597:131;:::i;:::-;36589:139;;36316:419;;;:::o;36741:::-;36907:4;36945:2;36934:9;36930:18;36922:26;;36994:9;36988:4;36984:20;36980:1;36969:9;36965:17;36958:47;37022:131;37148:4;37022:131;:::i;:::-;37014:139;;36741:419;;;:::o;37166:::-;37332:4;37370:2;37359:9;37355:18;37347:26;;37419:9;37413:4;37409:20;37405:1;37394:9;37390:17;37383:47;37447:131;37573:4;37447:131;:::i;:::-;37439:139;;37166:419;;;:::o;37591:::-;37757:4;37795:2;37784:9;37780:18;37772:26;;37844:9;37838:4;37834:20;37830:1;37819:9;37815:17;37808:47;37872:131;37998:4;37872:131;:::i;:::-;37864:139;;37591:419;;;:::o;38016:::-;38182:4;38220:2;38209:9;38205:18;38197:26;;38269:9;38263:4;38259:20;38255:1;38244:9;38240:17;38233:47;38297:131;38423:4;38297:131;:::i;:::-;38289:139;;38016:419;;;:::o;38441:::-;38607:4;38645:2;38634:9;38630:18;38622:26;;38694:9;38688:4;38684:20;38680:1;38669:9;38665:17;38658:47;38722:131;38848:4;38722:131;:::i;:::-;38714:139;;38441:419;;;:::o;38866:::-;39032:4;39070:2;39059:9;39055:18;39047:26;;39119:9;39113:4;39109:20;39105:1;39094:9;39090:17;39083:47;39147:131;39273:4;39147:131;:::i;:::-;39139:139;;38866:419;;;:::o;39291:::-;39457:4;39495:2;39484:9;39480:18;39472:26;;39544:9;39538:4;39534:20;39530:1;39519:9;39515:17;39508:47;39572:131;39698:4;39572:131;:::i;:::-;39564:139;;39291:419;;;:::o;39716:::-;39882:4;39920:2;39909:9;39905:18;39897:26;;39969:9;39963:4;39959:20;39955:1;39944:9;39940:17;39933:47;39997:131;40123:4;39997:131;:::i;:::-;39989:139;;39716:419;;;:::o;40141:::-;40307:4;40345:2;40334:9;40330:18;40322:26;;40394:9;40388:4;40384:20;40380:1;40369:9;40365:17;40358:47;40422:131;40548:4;40422:131;:::i;:::-;40414:139;;40141:419;;;:::o;40566:222::-;40659:4;40697:2;40686:9;40682:18;40674:26;;40710:71;40778:1;40767:9;40763:17;40754:6;40710:71;:::i;:::-;40566:222;;;;:::o;40794:129::-;40828:6;40855:20;;:::i;:::-;40845:30;;40884:33;40912:4;40904:6;40884:33;:::i;:::-;40794:129;;;:::o;40929:75::-;40962:6;40995:2;40989:9;40979:19;;40929:75;:::o;41010:311::-;41087:4;41177:18;41169:6;41166:30;41163:56;;;41199:18;;:::i;:::-;41163:56;41249:4;41241:6;41237:17;41229:25;;41309:4;41303;41299:15;41291:23;;41010:311;;;:::o;41327:307::-;41388:4;41478:18;41470:6;41467:30;41464:56;;;41500:18;;:::i;:::-;41464:56;41538:29;41560:6;41538:29;:::i;:::-;41530:37;;41622:4;41616;41612:15;41604:23;;41327:307;;;:::o;41640:308::-;41702:4;41792:18;41784:6;41781:30;41778:56;;;41814:18;;:::i;:::-;41778:56;41852:29;41874:6;41852:29;:::i;:::-;41844:37;;41936:4;41930;41926:15;41918:23;;41640:308;;;:::o;41954:141::-;42003:4;42026:3;42018:11;;42049:3;42046:1;42039:14;42083:4;42080:1;42070:18;42062:26;;41954:141;;;:::o;42101:98::-;42152:6;42186:5;42180:12;42170:22;;42101:98;;;:::o;42205:99::-;42257:6;42291:5;42285:12;42275:22;;42205:99;;;:::o;42310:168::-;42393:11;42427:6;42422:3;42415:19;42467:4;42462:3;42458:14;42443:29;;42310:168;;;;:::o;42484:147::-;42585:11;42622:3;42607:18;;42484:147;;;;:::o;42637:169::-;42721:11;42755:6;42750:3;42743:19;42795:4;42790:3;42786:14;42771:29;;42637:169;;;;:::o;42812:148::-;42914:11;42951:3;42936:18;;42812:148;;;;:::o;42966:305::-;43006:3;43025:20;43043:1;43025:20;:::i;:::-;43020:25;;43059:20;43077:1;43059:20;:::i;:::-;43054:25;;43213:1;43145:66;43141:74;43138:1;43135:81;43132:107;;;43219:18;;:::i;:::-;43132:107;43263:1;43260;43256:9;43249:16;;42966:305;;;;:::o;43277:185::-;43317:1;43334:20;43352:1;43334:20;:::i;:::-;43329:25;;43368:20;43386:1;43368:20;:::i;:::-;43363:25;;43407:1;43397:35;;43412:18;;:::i;:::-;43397:35;43454:1;43451;43447:9;43442:14;;43277:185;;;;:::o;43468:348::-;43508:7;43531:20;43549:1;43531:20;:::i;:::-;43526:25;;43565:20;43583:1;43565:20;:::i;:::-;43560:25;;43753:1;43685:66;43681:74;43678:1;43675:81;43670:1;43663:9;43656:17;43652:105;43649:131;;;43760:18;;:::i;:::-;43649:131;43808:1;43805;43801:9;43790:20;;43468:348;;;;:::o;43822:191::-;43862:4;43882:20;43900:1;43882:20;:::i;:::-;43877:25;;43916:20;43934:1;43916:20;:::i;:::-;43911:25;;43955:1;43952;43949:8;43946:34;;;43960:18;;:::i;:::-;43946:34;44005:1;44002;43998:9;43990:17;;43822:191;;;;:::o;44019:96::-;44056:7;44085:24;44103:5;44085:24;:::i;:::-;44074:35;;44019:96;;;:::o;44121:90::-;44155:7;44198:5;44191:13;44184:21;44173:32;;44121:90;;;:::o;44217:149::-;44253:7;44293:66;44286:5;44282:78;44271:89;;44217:149;;;:::o;44372:126::-;44409:7;44449:42;44442:5;44438:54;44427:65;;44372:126;;;:::o;44504:77::-;44541:7;44570:5;44559:16;;44504:77;;;:::o;44587:154::-;44671:6;44666:3;44661;44648:30;44733:1;44724:6;44719:3;44715:16;44708:27;44587:154;;;:::o;44747:307::-;44815:1;44825:113;44839:6;44836:1;44833:13;44825:113;;;44924:1;44919:3;44915:11;44909:18;44905:1;44900:3;44896:11;44889:39;44861:2;44858:1;44854:10;44849:15;;44825:113;;;44956:6;44953:1;44950:13;44947:101;;;45036:1;45027:6;45022:3;45018:16;45011:27;44947:101;44796:258;44747:307;;;:::o;45060:320::-;45104:6;45141:1;45135:4;45131:12;45121:22;;45188:1;45182:4;45178:12;45209:18;45199:81;;45265:4;45257:6;45253:17;45243:27;;45199:81;45327:2;45319:6;45316:14;45296:18;45293:38;45290:84;;;45346:18;;:::i;:::-;45290:84;45111:269;45060:320;;;:::o;45386:281::-;45469:27;45491:4;45469:27;:::i;:::-;45461:6;45457:40;45599:6;45587:10;45584:22;45563:18;45551:10;45548:34;45545:62;45542:88;;;45610:18;;:::i;:::-;45542:88;45650:10;45646:2;45639:22;45429:238;45386:281;;:::o;45673:233::-;45712:3;45735:24;45753:5;45735:24;:::i;:::-;45726:33;;45781:66;45774:5;45771:77;45768:103;;;45851:18;;:::i;:::-;45768:103;45898:1;45891:5;45887:13;45880:20;;45673:233;;;:::o;45912:176::-;45944:1;45961:20;45979:1;45961:20;:::i;:::-;45956:25;;45995:20;46013:1;45995:20;:::i;:::-;45990:25;;46034:1;46024:35;;46039:18;;:::i;:::-;46024:35;46080:1;46077;46073:9;46068:14;;45912:176;;;;:::o;46094:180::-;46142:77;46139:1;46132:88;46239:4;46236:1;46229:15;46263:4;46260:1;46253:15;46280:180;46328:77;46325:1;46318:88;46425:4;46422:1;46415:15;46449:4;46446:1;46439:15;46466:180;46514:77;46511:1;46504:88;46611:4;46608:1;46601:15;46635:4;46632:1;46625:15;46652:180;46700:77;46697:1;46690:88;46797:4;46794:1;46787:15;46821:4;46818:1;46811:15;46838:180;46886:77;46883:1;46876:88;46983:4;46980:1;46973:15;47007:4;47004:1;46997:15;47024:117;47133:1;47130;47123:12;47147:117;47256:1;47253;47246:12;47270:117;47379:1;47376;47369:12;47393:117;47502:1;47499;47492:12;47516:117;47625:1;47622;47615:12;47639:117;47748:1;47745;47738:12;47762:102;47803:6;47854:2;47850:7;47845:2;47838:5;47834:14;47830:28;47820:38;;47762:102;;;:::o;47870:180::-;48010:32;48006:1;47998:6;47994:14;47987:56;47870:180;:::o;48056:163::-;48196:15;48192:1;48184:6;48180:14;48173:39;48056:163;:::o;48225:222::-;48365:34;48361:1;48353:6;48349:14;48342:58;48434:5;48429:2;48421:6;48417:15;48410:30;48225:222;:::o;48453:237::-;48593:34;48589:1;48581:6;48577:14;48570:58;48662:20;48657:2;48649:6;48645:15;48638:45;48453:237;:::o;48696:225::-;48836:34;48832:1;48824:6;48820:14;48813:58;48905:8;48900:2;48892:6;48888:15;48881:33;48696:225;:::o;48927:178::-;49067:30;49063:1;49055:6;49051:14;49044:54;48927:178;:::o;49111:166::-;49251:18;49247:1;49239:6;49235:14;49228:42;49111:166;:::o;49283:223::-;49423:34;49419:1;49411:6;49407:14;49400:58;49492:6;49487:2;49479:6;49475:15;49468:31;49283:223;:::o;49512:174::-;49652:26;49648:1;49640:6;49636:14;49629:50;49512:174;:::o;49692:223::-;49832:34;49828:1;49820:6;49816:14;49809:58;49901:6;49896:2;49888:6;49884:15;49877:31;49692:223;:::o;49921:172::-;50061:24;50057:1;50049:6;50045:14;50038:48;49921:172;:::o;50099:175::-;50239:27;50235:1;50227:6;50223:14;50216:51;50099:175;:::o;50280:162::-;50420:14;50416:1;50408:6;50404:14;50397:38;50280:162;:::o;50448:231::-;50588:34;50584:1;50576:6;50572:14;50565:58;50657:14;50652:2;50644:6;50640:15;50633:39;50448:231;:::o;50685:223::-;50825:34;50821:1;50813:6;50809:14;50802:58;50894:6;50889:2;50881:6;50877:15;50870:31;50685:223;:::o;50914:243::-;51054:34;51050:1;51042:6;51038:14;51031:58;51123:26;51118:2;51110:6;51106:15;51099:51;50914:243;:::o;51163:229::-;51303:34;51299:1;51291:6;51287:14;51280:58;51372:12;51367:2;51359:6;51355:15;51348:37;51163:229;:::o;51398:228::-;51538:34;51534:1;51526:6;51522:14;51515:58;51607:11;51602:2;51594:6;51590:15;51583:36;51398:228;:::o;51632:167::-;51772:19;51768:1;51760:6;51756:14;51749:43;51632:167;:::o;51805:175::-;51945:27;51941:1;51933:6;51929:14;51922:51;51805:175;:::o;51986:182::-;52126:34;52122:1;52114:6;52110:14;52103:58;51986:182;:::o;52174:231::-;52314:34;52310:1;52302:6;52298:14;52291:58;52383:14;52378:2;52370:6;52366:15;52359:39;52174:231;:::o;52411:155::-;52551:7;52547:1;52539:6;52535:14;52528:31;52411:155;:::o;52572:182::-;52712:34;52708:1;52700:6;52696:14;52689:58;52572:182;:::o;52760:174::-;52900:26;52896:1;52888:6;52884:14;52877:50;52760:174;:::o;52940:228::-;53080:34;53076:1;53068:6;53064:14;53057:58;53149:11;53144:2;53136:6;53132:15;53125:36;52940:228;:::o;53174:234::-;53314:34;53310:1;53302:6;53298:14;53291:58;53383:17;53378:2;53370:6;53366:15;53359:42;53174:234;:::o;53414:220::-;53554:34;53550:1;53542:6;53538:14;53531:58;53623:3;53618:2;53610:6;53606:15;53599:28;53414:220;:::o;53640:114::-;;:::o;53760:236::-;53900:34;53896:1;53888:6;53884:14;53877:58;53969:19;53964:2;53956:6;53952:15;53945:44;53760:236;:::o;54002:169::-;54142:21;54138:1;54130:6;54126:14;54119:45;54002:169;:::o;54177:122::-;54250:24;54268:5;54250:24;:::i;:::-;54243:5;54240:35;54230:63;;54289:1;54286;54279:12;54230:63;54177:122;:::o;54305:116::-;54375:21;54390:5;54375:21;:::i;:::-;54368:5;54365:32;54355:60;;54411:1;54408;54401:12;54355:60;54305:116;:::o;54427:120::-;54499:23;54516:5;54499:23;:::i;:::-;54492:5;54489:34;54479:62;;54537:1;54534;54527:12;54479:62;54427:120;:::o;54553:122::-;54626:24;54644:5;54626:24;:::i;:::-;54619:5;54616:35;54606:63;;54665:1;54662;54655:12;54606:63;54553:122;:::o

Swarm Source

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