ETH Price: $2,514.31 (+0.64%)
Gas: 3.81 Gwei

Token

Moya (MOYA)
 

Overview

Max Total Supply

1,000,000,000 MOYA

Holders

243

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
14,018.195486153350402591 MOYA

Value
$0.00
0x7AB3F51Ff93f71cBD0C9A2e55Bad5306211cf0Dc
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:
Token

Compiler Version
v0.8.26+commit.8a97fa7a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-08-02
*/

pragma solidity 0.8.26;

// SPDX-License-Identifier: MIT

/**
*Tg: https://t.me/MoyaShiba
*Twitter: https://x.com/shibamoya
*Website: https://www.moyashibainu.com
*/

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

    function _msgData() internal view virtual returns (bytes calldata) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

interface IERC20Metadata is IERC20{
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

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

    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}

contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

    mapping(address => mapping(address => uint256)) private _allowances;

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    /**
     * @dev Returns the name of the token.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5.05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the default value returned by this function, unless
     * it's overridden.
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

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

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address to, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, amount);
        return true;
    }

    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    /**
     * @dev See {IERC20-approve}.
     *
     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on
     * `transferFrom`. This is semantically equivalent to an infinite approval.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * NOTE: Does not update the allowance if the current allowance
     * is the maximum `uint256`.
     *
     * Requirements:
     *
     * - `from` and `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     * - the caller must have allowance for ``from``'s tokens of at least
     * `amount`.
     */
    function transferFrom(address from, address to, uint256 amount) public virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        return true;
    }

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, allowance(owner, spender) + addedValue);
        return true;
    }

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        address owner = _msgSender();
        uint256 currentAllowance = allowance(owner, spender);
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(owner, spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    /**
     * @dev Moves `amount` of tokens from `from` to `to`.
     *
     * This internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     */
    function _transfer(address from, address to, uint256 amount) internal virtual {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        uint256 fromBalance = _balances[from];
        require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[from] = fromBalance - amount;
            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by
            // decrementing then incrementing.
            _balances[to] += amount;
        }

        emit Transfer(from, to, amount);
    }

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _totalSupply += amount;
        unchecked {
            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.
            _balances[account] += amount;
        }
        emit Transfer(address(0), account, amount);
    }

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(address owner, address spender, uint256 amount) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    /**
     * @dev Updates `owner` s allowance for `spender` based on spent `amount`.
     *
     * Does not update the allowance amount in case of infinite allowance.
     * Revert if not enough allowance is available.
     *
     * Might emit an {Approval} event.
     */
    function _spendAllowance(address owner, address spender, uint256 amount) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount, "ERC20: insufficient allowance");
            unchecked {
                _approve(owner, spender, currentAllowance - amount);
            }
        }
    }
}

contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    
    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    function owner() public view returns (address) {
        return _owner;
    }

    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    function renounceOwnership() external virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

library Address {
    function isContract(address account) internal view returns (bool) {
        return account.code.length > 0;
    }

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

    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, "Address: low-level call failed");
    }

    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");
        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResultFromTarget(target, 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) {
        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResultFromTarget(target, 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) {
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }

    /**
     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling
     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.
     *
     * _Available since v4.8._
     */
    function verifyCallResultFromTarget(
        address target,
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        if (success) {
            if (returndata.length == 0) {
                // only check isContract if the call was successful and the return data is empty
                // otherwise we already know that it was a contract
                require(isContract(target), "Address: call to non-contract");
            }
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }

    /**
     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason or using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }

    function _revert(bytes memory returndata, string memory errorMessage) private pure {
        // 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
            /// @solidity memory-safe-assembly
            assembly {
                let returndata_size := mload(returndata)
                revert(add(32, returndata), returndata_size)
            }
        } else {
            revert(errorMessage);
        }
    }
}

library SafeERC20 {
    using Address for address;

    function safeTransfer(IERC20 token, address to, uint256 value) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
    }

    function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
    }

    function _callOptionalReturn(IERC20 token, bytes memory data) private {
        bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed");
        if (returndata.length > 0) {
            require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
        }
    }

    function safeApprove(IERC20 token, address spender, uint256 value) internal {
        // safeApprove should only be called when setting an initial allowance,
        // or when resetting it to zero. To increase and decrease it, use
        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'
        require(
            (value == 0) || (token.allowance(address(this), spender) == 0),
            "SafeERC20: approve from non-zero to non-zero allowance"
        );
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
    }
}

interface ILpPair {
    function sync() external;
}

interface IDexRouter {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function swapExactTokensForETHSupportingFeeOnTransferTokens(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external;
}

interface IDexFactory {
    function createPair(address tokenA, address tokenB) external returns (address pair);
}

contract Token is ERC20, Ownable {

    mapping (address => bool) public exemptFromFees;
    mapping (address => bool) public exemptFromLimits;

    bool public tradingAllowed;

    mapping (address => bool) public isAMMPair;

    address public marketingAddress;
    address public devAddress;

    Taxes public buyTax;
    Taxes public sellTax;

    TokensForTax public tokensForTax;

    bool public limited = true;

    uint256 public swapTokensAtAmt;
    uint256 public lastSwapBackBlock;

    address public immutable lpPair;
    IDexRouter public immutable dexRouter;
    address public immutable WETH;

    TxLimits public txLimits;

    uint64 public constant FEE_DIVISOR = 10000;

    uint256 public launchBlock;

    bool public transferDelayEnabled = false;

    // structs

    struct TxLimits {
        uint128 transactionLimit;
        uint128 walletLimit;
    }

    struct Taxes {
        uint64 marketingTax;
        uint64 devTax;
        uint64 liquidityTax;
        uint64 totalTax;
    }

    struct TokensForTax {
        uint80 tokensForMarketing;
        uint80 tokensForLiquidity;
        uint80 tokensForDev;
        bool gasSaver;
    }

    // events

    event UpdatedTransactionLimit(uint newMax);
    event UpdatedWalletLimit(uint newMax);
    event SetExemptFromFees(address _address, bool _isExempt);
    event SetExemptFromLimits(address _address, bool _isExempt);
    event RemovedLimits();
    event UpdatedBuyTax(uint newAmt);
    event UpdatedSellTax(uint newAmt);

    // constructor

    constructor()
        ERC20("Moya", "MOYA")
    {   
        _mint(msg.sender, 1_000_000_000 * 1e18);

        address _v2Router;

        // @dev assumes WETH pair
        if(block.chainid == 1){
            _v2Router = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
        } else if(block.chainid == 8453){
            _v2Router = 0x4752ba5DBc23f44D87826276BF6Fd6b1C372aD24;
        } else {
            revert("Chain not configured");
        }

        dexRouter = IDexRouter(_v2Router);

        txLimits.transactionLimit = uint128(totalSupply() * 10 / 1000);
        txLimits.walletLimit = uint128(totalSupply() * 10 / 1000);
        swapTokensAtAmt = totalSupply() * 25 / 100000;

        marketingAddress = msg.sender; // update
        devAddress = msg.sender; // update

        buyTax.marketingTax = 0; // 1% = 100
        buyTax.liquidityTax = 0;
        buyTax.devTax = 0;
        buyTax.totalTax = 0;

        sellTax.marketingTax = 0;
        sellTax.liquidityTax = 0;
        sellTax.devTax = 0;
        sellTax.totalTax = 0;

        tokensForTax.gasSaver = true;

        WETH = dexRouter.WETH();
        lpPair = IDexFactory(dexRouter.factory()).createPair(address(this), WETH);

        isAMMPair[lpPair] = true;

        exemptFromLimits[lpPair] = true;
        exemptFromLimits[msg.sender] = true;
        exemptFromLimits[address(this)] = true;

        exemptFromFees[msg.sender] = true;
        exemptFromFees[address(this)] = true;
        exemptFromFees[address(dexRouter)] = true;
 
        _approve(address(this), address(dexRouter), type(uint256).max);
        _approve(address(msg.sender), address(dexRouter), totalSupply());
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual override {
        
        if(!exemptFromFees[from] && !exemptFromFees[to]){
            require(tradingAllowed, "Trading not active");
            checkLimits(from, to, amount);
        }

        super._transfer(from,to,amount);
    }

    function checkLimits(address from, address to, uint256 amount) internal {
        if(limited){
            bool exFromLimitsTo = exemptFromLimits[to];
            uint256 balanceOfTo = balanceOf(to);
            TxLimits memory _txLimits = txLimits;
            // buy
            if (isAMMPair[from] && !exFromLimitsTo) {
                require(amount <= _txLimits.transactionLimit, "Max Txn");
                require(amount + balanceOfTo <= _txLimits.walletLimit, "Max Wallet");
            } 
            // sell
            else if (isAMMPair[to] && !exemptFromLimits[from]) {
                require(amount <= _txLimits.transactionLimit, "Max Txn");
            }
            else if(!exFromLimitsTo) {
                require(amount + balanceOfTo <= _txLimits.walletLimit, "Max Wallet");
            }

            if(transferDelayEnabled){

                tokensForTax.gasSaver = true;
                
            }

        }

    }


    // owner functions
    function setExemptFromFee(address _address, bool _isExempt) external onlyOwner {
        require(_address != address(0), "Zero Address");
        require(_address != address(this), "Cannot unexempt contract");
        exemptFromFees[_address] = _isExempt;
        emit SetExemptFromFees(_address, _isExempt);
    }

    function setExemptFromLimit(address _address, bool _isExempt) external onlyOwner {
        require(_address != address(0), "Zero Address");
        if(!_isExempt){
            require(_address != lpPair, "Cannot remove pair");
        }
        exemptFromLimits[_address] = _isExempt;
        emit SetExemptFromLimits(_address, _isExempt);
    }

    function updateTransactionLimit(uint128 newNumInTokens) external onlyOwner {
        require(newNumInTokens >= (totalSupply() * 1 / 1000)/(10**decimals()), "Too low");
        txLimits.transactionLimit = uint128(newNumInTokens * (10**decimals()));
        emit UpdatedTransactionLimit(txLimits.transactionLimit);
    }

    function updateWalletLimit(uint128 newNumInTokens) external onlyOwner {
        require(newNumInTokens >= (totalSupply() * 1 / 1000)/(10**decimals()), "Too low");
        txLimits.walletLimit = uint128(newNumInTokens * (10**decimals()));
        emit UpdatedWalletLimit(txLimits.walletLimit);
    }

    function updateSwapTokensAmt(uint256 newAmount) external onlyOwner {
        require(newAmount >= (totalSupply() * 1) / 100000, "Swap amount cannot be lower than 0.001% total supply.");
        require(newAmount <= (totalSupply() * 5) / 1000, "Swap amount cannot be higher than 0.5% total supply.");
        swapTokensAtAmt = newAmount;
    }


    function unleashMoya() external onlyOwner {
        require(!tradingAllowed, "Trading already enabled");
        tradingAllowed = true;
        launchBlock = block.number;
        lastSwapBackBlock = block.number;
    }

    function removeLimits() external onlyOwner {
        limited = false;
        TxLimits memory _txLimits;
        uint256 supply = totalSupply();
        _txLimits.transactionLimit = uint128(supply);
        _txLimits.walletLimit = uint128(supply);
        txLimits = _txLimits;
        emit RemovedLimits();
    }


    function removeTransferDelay() external onlyOwner {
        require(transferDelayEnabled, "Already disabled!");
        transferDelayEnabled = false;
    }

    function withdrawStuckETH() external {
        bool success;
        (success,) = address(devAddress).call{value: address(this).balance}("");
    }

    function rescueTokens(address _token) external {
        require(_token != address(0), "_token address cannot be 0");
        uint256 _contractBalance = IERC20(_token).balanceOf(address(this));
        SafeERC20.safeTransfer(IERC20(_token),address(devAddress), _contractBalance);
    }


    receive() payable external {}
}

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":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","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":[],"name":"RemovedLimits","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"bool","name":"_isExempt","type":"bool"}],"name":"SetExemptFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"bool","name":"_isExempt","type":"bool"}],"name":"SetExemptFromLimits","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmt","type":"uint256"}],"name":"UpdatedBuyTax","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmt","type":"uint256"}],"name":"UpdatedSellTax","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newMax","type":"uint256"}],"name":"UpdatedTransactionLimit","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newMax","type":"uint256"}],"name":"UpdatedWalletLimit","type":"event"},{"inputs":[],"name":"FEE_DIVISOR","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTax","outputs":[{"internalType":"uint64","name":"marketingTax","type":"uint64"},{"internalType":"uint64","name":"devTax","type":"uint64"},{"internalType":"uint64","name":"liquidityTax","type":"uint64"},{"internalType":"uint64","name":"totalTax","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IDexRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"exemptFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"exemptFromLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isAMMPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastSwapBackBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limited","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeTransferDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"rescueTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellTax","outputs":[{"internalType":"uint64","name":"marketingTax","type":"uint64"},{"internalType":"uint64","name":"devTax","type":"uint64"},{"internalType":"uint64","name":"liquidityTax","type":"uint64"},{"internalType":"uint64","name":"totalTax","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_isExempt","type":"bool"}],"name":"setExemptFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_isExempt","type":"bool"}],"name":"setExemptFromLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapTokensAtAmt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForTax","outputs":[{"internalType":"uint80","name":"tokensForMarketing","type":"uint80"},{"internalType":"uint80","name":"tokensForLiquidity","type":"uint80"},{"internalType":"uint80","name":"tokensForDev","type":"uint80"},{"internalType":"bool","name":"gasSaver","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingAllowed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"txLimits","outputs":[{"internalType":"uint128","name":"transactionLimit","type":"uint128"},{"internalType":"uint128","name":"walletLimit","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unleashMoya","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAmt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint128","name":"newNumInTokens","type":"uint128"}],"name":"updateTransactionLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint128","name":"newNumInTokens","type":"uint128"}],"name":"updateWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60e06040526001600f5f6101000a81548160ff0219169083151502179055505f60145f6101000a81548160ff021916908315150217905550348015610042575f80fd5b506040518060400160405280600481526020017f4d6f7961000000000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f4d4f59410000000000000000000000000000000000000000000000000000000081525081600390816100be9190610eec565b5080600490816100ce9190610eec565b5050505f6100e06109a760201b60201c565b90508060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350610199336b033b2e3c9fd0803ce80000006109ae60201b60201c565b5f600146036101be57737a250d5630b4cf539739df2c5dacb4c659f2488d905061021f565b61210546036101e357734752ba5dbc23f44d87826276bf6fd6b1c372ad24905061021e565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161021590611015565b60405180910390fd5b5b8073ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506103e8600a610266610ae660201b60201c565b6102709190611060565b61027a91906110ce565b60125f015f6101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506103e8600a6102c6610ae660201b60201c565b6102d09190611060565b6102da91906110ce565b60125f0160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550620186a06019610328610ae660201b60201c565b6103329190611060565b61033c91906110ce565b60108190555033600a5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033600b5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f600c5f015f6101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505f600c5f0160106101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505f600c5f0160086101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505f600c5f0160186101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505f600d5f015f6101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505f600d5f0160106101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505f600d5f0160086101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505f600d5f0160186101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600e5f01601e6101000a81548160ff02191690831515021790555060a05173ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610580573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105a4919061115c565b73ffffffffffffffffffffffffffffffffffffffff1660c08173ffffffffffffffffffffffffffffffffffffffff168152505060a05173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610622573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610646919061115c565b73ffffffffffffffffffffffffffffffffffffffff1663c9c653963060c0516040518363ffffffff1660e01b8152600401610682929190611196565b6020604051808303815f875af115801561069e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106c2919061115c565b73ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1681525050600160095f60805173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160075f60805173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160075f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160075f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160065f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160065f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160065f60a05173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506109813060a0517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610aef60201b60201c565b6109a13360a051610996610ae660201b60201c565b610aef60201b60201c565b5061139c565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610a1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1390611207565b60405180910390fd5b8060025f828254610a2d9190611225565b92505081905550805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610ada9190611267565b60405180910390a35050565b5f600254905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610b5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b54906112f0565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610bcb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc29061137e565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610ca59190611267565b60405180910390a3505050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680610d2d57607f821691505b602082108103610d4057610d3f610ce9565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302610da27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82610d67565b610dac8683610d67565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f610df0610deb610de684610dc4565b610dcd565b610dc4565b9050919050565b5f819050919050565b610e0983610dd6565b610e1d610e1582610df7565b848454610d73565b825550505050565b5f90565b610e31610e25565b610e3c818484610e00565b505050565b5b81811015610e5f57610e545f82610e29565b600181019050610e42565b5050565b601f821115610ea457610e7581610d46565b610e7e84610d58565b81016020851015610e8d578190505b610ea1610e9985610d58565b830182610e41565b50505b505050565b5f82821c905092915050565b5f610ec45f1984600802610ea9565b1980831691505092915050565b5f610edc8383610eb5565b9150826002028217905092915050565b610ef582610cb2565b67ffffffffffffffff811115610f0e57610f0d610cbc565b5b610f188254610d16565b610f23828285610e63565b5f60209050601f831160018114610f54575f8415610f42578287015190505b610f4c8582610ed1565b865550610fb3565b601f198416610f6286610d46565b5f5b82811015610f8957848901518255600182019150602085019450602081019050610f64565b86831015610fa65784890151610fa2601f891682610eb5565b8355505b6001600288020188555050505b505050505050565b5f82825260208201905092915050565b7f436861696e206e6f7420636f6e666967757265640000000000000000000000005f82015250565b5f610fff601483610fbb565b915061100a82610fcb565b602082019050919050565b5f6020820190508181035f83015261102c81610ff3565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61106a82610dc4565b915061107583610dc4565b925082820261108381610dc4565b9150828204841483151761109a57611099611033565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6110d882610dc4565b91506110e383610dc4565b9250826110f3576110f26110a1565b5b828204905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61112b82611102565b9050919050565b61113b81611121565b8114611145575f80fd5b50565b5f8151905061115681611132565b92915050565b5f60208284031215611171576111706110fe565b5b5f61117e84828501611148565b91505092915050565b61119081611121565b82525050565b5f6040820190506111a95f830185611187565b6111b66020830184611187565b9392505050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f6111f1601f83610fbb565b91506111fc826111bd565b602082019050919050565b5f6020820190508181035f83015261121e816111e5565b9050919050565b5f61122f82610dc4565b915061123a83610dc4565b925082820190508082111561125257611251611033565b5b92915050565b61126181610dc4565b82525050565b5f60208201905061127a5f830184611258565b92915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f6112da602483610fbb565b91506112e582611280565b604082019050919050565b5f6020820190508181035f830152611307816112ce565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f611368602283610fbb565b91506113738261130e565b604082019050919050565b5f6020820190508181035f8301526113958161135c565b9050919050565b60805160a05160c0516144296113cd5f395f6117cb01525f610b6e01525f8181610fa70152611b9901526144295ff3fe60806040526004361061025e575f3560e01c8063860a32ec11610143578063c78d0fa0116100b5578063d333ea4d11610079578063d333ea4d146108f2578063dd62ed3e14610908578063f270fde414610944578063f2fde38b1461096f578063f5648a4f14610997578063f8686f07146109ad57610265565b8063c78d0fa01461081f578063c876d0b914610849578063cc1776d314610873578063ccad03e1146108a0578063d00efb2f146108c857610265565b8063a457c2d711610107578063a457c2d7146106ef578063a5ece9411461072b578063a9059cbb14610755578063ad5c464814610791578063b0249cc6146107bb578063bedafd01146107f757610265565b8063860a32ec1461060b5780638d3e6e40146106355780638da5cb5b1461067157806395d89b411461069b5780639e93ad8e146106c557610265565b80633ad10ef6116101dc5780635a90a49e116101a05780635a90a49e1461051257806366ebd39a1461054e5780636d7adcad1461057657806370a08231146105a3578063715018a6146105df578063751039fc146105f557610265565b80633ad10ef61461043d578063432e95a514610467578063452ed4f1146104915780634f7041a5146104bb57806353371be0146104e857610265565b80632104591811610223578063210459181461034b57806323b872dd14610373578063313ce567146103af57806336e18e19146103d9578063395093511461040157610265565b8062ae3bf81461026957806306fdde03146102915780630758d924146102bb578063095ea7b3146102e557806318160ddd1461032157610265565b3661026557005b5f80fd5b348015610274575f80fd5b5061028f600480360381019061028a9190612f14565b6109c3565b005b34801561029c575f80fd5b506102a5610adc565b6040516102b29190612faf565b60405180910390f35b3480156102c6575f80fd5b506102cf610b6c565b6040516102dc919061302a565b60405180910390f35b3480156102f0575f80fd5b5061030b60048036038101906103069190613076565b610b90565b60405161031891906130ce565b60405180910390f35b34801561032c575f80fd5b50610335610bb2565b60405161034291906130f6565b60405180910390f35b348015610356575f80fd5b50610371600480360381019061036c919061310f565b610bbb565b005b34801561037e575f80fd5b506103996004803603810190610394919061313a565b610d22565b6040516103a691906130ce565b60405180910390f35b3480156103ba575f80fd5b506103c3610d50565b6040516103d091906131a5565b60405180910390f35b3480156103e4575f80fd5b506103ff60048036038101906103fa9190613203565b610d58565b005b34801561040c575f80fd5b5061042760048036038101906104229190613076565b610f44565b60405161043491906130ce565b60405180910390f35b348015610448575f80fd5b50610451610f7a565b60405161045e919061323d565b60405180910390f35b348015610472575f80fd5b5061047b610f9f565b60405161048891906130f6565b60405180910390f35b34801561049c575f80fd5b506104a5610fa5565b6040516104b2919061323d565b60405180910390f35b3480156104c6575f80fd5b506104cf610fc9565b6040516104df9493929190613278565b60405180910390f35b3480156104f3575f80fd5b506104fc611032565b60405161050991906130ce565b60405180910390f35b34801561051d575f80fd5b5061053860048036038101906105339190612f14565b611044565b60405161054591906130ce565b60405180910390f35b348015610559575f80fd5b50610574600480360381019061056f9190613203565b611061565b005b348015610581575f80fd5b5061058a61124f565b60405161059a94939291906132df565b60405180910390f35b3480156105ae575f80fd5b506105c960048036038101906105c49190612f14565b6112b7565b6040516105d691906130f6565b60405180910390f35b3480156105ea575f80fd5b506105f36112fc565b005b348015610600575f80fd5b5061060961144f565b005b348015610616575f80fd5b5061061f611620565b60405161062c91906130ce565b60405180910390f35b348015610640575f80fd5b5061065b60048036038101906106569190612f14565b611632565b60405161066891906130ce565b60405180910390f35b34801561067c575f80fd5b5061068561164f565b604051610692919061323d565b60405180910390f35b3480156106a6575f80fd5b506106af611677565b6040516106bc9190612faf565b60405180910390f35b3480156106d0575f80fd5b506106d9611707565b6040516106e69190613322565b60405180910390f35b3480156106fa575f80fd5b5061071560048036038101906107109190613076565b61170d565b60405161072291906130ce565b60405180910390f35b348015610736575f80fd5b5061073f611782565b60405161074c919061323d565b60405180910390f35b348015610760575f80fd5b5061077b60048036038101906107769190613076565b6117a7565b60405161078891906130ce565b60405180910390f35b34801561079c575f80fd5b506107a56117c9565b6040516107b2919061323d565b60405180910390f35b3480156107c6575f80fd5b506107e160048036038101906107dc9190612f14565b6117ed565b6040516107ee91906130ce565b60405180910390f35b348015610802575f80fd5b5061081d60048036038101906108189190613365565b61180a565b005b34801561082a575f80fd5b50610833611a0d565b60405161084091906130f6565b60405180910390f35b348015610854575f80fd5b5061085d611a13565b60405161086a91906130ce565b60405180910390f35b34801561087e575f80fd5b50610887611a25565b6040516108979493929190613278565b60405180910390f35b3480156108ab575f80fd5b506108c660048036038101906108c19190613365565b611a8e565b005b3480156108d3575f80fd5b506108dc611cb7565b6040516108e991906130f6565b60405180910390f35b3480156108fd575f80fd5b50610906611cbd565b005b348015610913575f80fd5b5061092e600480360381019061092991906133a3565b611dcc565b60405161093b91906130f6565b60405180910390f35b34801561094f575f80fd5b50610958611e4e565b6040516109669291906133f0565b60405180910390f35b34801561097a575f80fd5b5061099560048036038101906109909190612f14565b611e95565b005b3480156109a2575f80fd5b506109ab612057565b005b3480156109b8575f80fd5b506109c16120e5565b005b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610a31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2890613461565b60405180910390fd5b5f8173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610a6b919061323d565b602060405180830381865afa158015610a86573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610aaa9190613493565b9050610ad882600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836121e4565b5050565b606060038054610aeb906134eb565b80601f0160208091040260200160405190810160405280929190818152602001828054610b17906134eb565b8015610b625780601f10610b3957610100808354040283529160200191610b62565b820191905f5260205f20905b815481529060010190602001808311610b4557829003601f168201915b5050505050905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f80610b9a61226a565b9050610ba7818585612271565b600191505092915050565b5f600254905090565b610bc361226a565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4890613565565b60405180910390fd5b620186a06001610c5f610bb2565b610c6991906135b0565b610c73919061361e565b811015610cb5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cac906136be565b60405180910390fd5b6103e86005610cc2610bb2565b610ccc91906135b0565b610cd6919061361e565b811115610d18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0f9061374c565b60405180910390fd5b8060108190555050565b5f80610d2c61226a565b9050610d39858285612434565b610d448585856124bf565b60019150509392505050565b5f6012905090565b610d6061226a565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610dee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de590613565565b60405180910390fd5b610df6610d50565b600a610e029190613899565b6103e86001610e0f610bb2565b610e1991906135b0565b610e23919061361e565b610e2d919061361e565b816fffffffffffffffffffffffffffffffff161015610e81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e789061392d565b60405180910390fd5b610e89610d50565b600a610e959190613899565b816fffffffffffffffffffffffffffffffff16610eb291906135b0565b60125f015f6101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055507f6710da7d4acedae09cb83751ae24c150719ef67dcbc1e02049f171d13c6b44e660125f015f9054906101000a90046fffffffffffffffffffffffffffffffff16604051610f39919061397b565b60405180910390a150565b5f80610f4e61226a565b9050610f6f818585610f608589611dcc565b610f6a9190613994565b612271565b600191505092915050565b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60115481565b7f000000000000000000000000000000000000000000000000000000000000000081565b600c805f015f9054906101000a900467ffffffffffffffff1690805f0160089054906101000a900467ffffffffffffffff1690805f0160109054906101000a900467ffffffffffffffff1690805f0160189054906101000a900467ffffffffffffffff16905084565b60085f9054906101000a900460ff1681565b6006602052805f5260405f205f915054906101000a900460ff1681565b61106961226a565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ee90613565565b60405180910390fd5b6110ff610d50565b600a61110b9190613899565b6103e86001611118610bb2565b61112291906135b0565b61112c919061361e565b611136919061361e565b816fffffffffffffffffffffffffffffffff16101561118a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111819061392d565b60405180910390fd5b611192610d50565b600a61119e9190613899565b816fffffffffffffffffffffffffffffffff166111bb91906135b0565b60125f0160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055507fde064515fae8f8bb6d8ff19d2c6ba704322def7494147d8a971266430ade078860125f0160109054906101000a90046fffffffffffffffffffffffffffffffff16604051611244919061397b565b60405180910390a150565b600e805f015f9054906101000a900469ffffffffffffffffffff1690805f01600a9054906101000a900469ffffffffffffffffffff1690805f0160149054906101000a900469ffffffffffffffffffff1690805f01601e9054906101000a900460ff16905084565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b61130461226a565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611392576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138990613565565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f60055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b61145761226a565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114dc90613565565b60405180910390fd5b5f600f5f6101000a81548160ff021916908315150217905550611506612e7a565b5f61150f610bb2565b905080825f01906fffffffffffffffffffffffffffffffff1690816fffffffffffffffffffffffffffffffff16815250508082602001906fffffffffffffffffffffffffffffffff1690816fffffffffffffffffffffffffffffffff16815250508160125f820151815f015f6101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506020820151815f0160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055509050507fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c60405160405180910390a15050565b600f5f9054906101000a900460ff1681565b6007602052805f5260405f205f915054906101000a900460ff1681565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054611686906134eb565b80601f01602080910402602001604051908101604052809291908181526020018280546116b2906134eb565b80156116fd5780601f106116d4576101008083540402835291602001916116fd565b820191905f5260205f20905b8154815290600101906020018083116116e057829003601f168201915b5050505050905090565b61271081565b5f8061171761226a565b90505f6117248286611dcc565b905083811015611769576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176090613a37565b60405180910390fd5b6117768286868403612271565b60019250505092915050565b600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f806117b161226a565b90506117be8185856124bf565b600191505092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6009602052805f5260405f205f915054906101000a900460ff1681565b61181261226a565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189790613565565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361190e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190590613a9f565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361197c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197390613b07565b60405180910390fd5b8060065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055507f998cce27cbf44405c67eb636a634d5e2f2e6ff248b3d71fbbbb022f3c4c6dd2d8282604051611a01929190613b25565b60405180910390a15050565b60105481565b60145f9054906101000a900460ff1681565b600d805f015f9054906101000a900467ffffffffffffffff1690805f0160089054906101000a900467ffffffffffffffff1690805f0160109054906101000a900467ffffffffffffffff1690805f0160189054906101000a900467ffffffffffffffff16905084565b611a9661226a565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1b90613565565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611b92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8990613a9f565b60405180910390fd5b80611c26577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611c25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1c90613b96565b60405180910390fd5b5b8060075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055507f8f9f40630a1d139e6cf69b4f447ca47a36f10a017524efaa38252e516fa227ce8282604051611cab929190613b25565b60405180910390a15050565b60135481565b611cc561226a565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4a90613565565b60405180910390fd5b60085f9054906101000a900460ff1615611da2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9990613bfe565b60405180910390fd5b600160085f6101000a81548160ff0219169083151502179055504360138190555043601181905550565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b6012805f015f9054906101000a90046fffffffffffffffffffffffffffffffff1690805f0160109054906101000a90046fffffffffffffffffffffffffffffffff16905082565b611e9d61226a565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2290613565565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611f99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9090613c8c565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a38060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161209d90613cd7565b5f6040518083038185875af1925050503d805f81146120d7576040519150601f19603f3d011682016040523d82523d5f602084013e6120dc565b606091505b50508091505050565b6120ed61226a565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461217b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217290613565565b60405180910390fd5b60145f9054906101000a900460ff166121c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121c090613d35565b60405180910390fd5b5f60145f6101000a81548160ff021916908315150217905550565b6122658363a9059cbb60e01b8484604051602401612203929190613d53565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506125cc565b505050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036122df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122d690613dea565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361234d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234490613e78565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161242791906130f6565b60405180910390a3505050565b5f61243f8484611dcc565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146124b957818110156124ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124a290613ee0565b60405180910390fd5b6124b88484848403612271565b5b50505050565b60065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615801561255d575060065f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156125bc5760085f9054906101000a900460ff166125b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125a790613f48565b60405180910390fd5b6125bb838383612691565b5b6125c7838383612a5f565b505050565b5f61262d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16612cb59092919063ffffffff16565b90505f8151111561268c578080602001905181019061264c9190613f7a565b61268b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268290614015565b60405180910390fd5b5b505050565b600f5f9054906101000a900460ff1615612a5a575f60075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1690505f6126fc846112b7565b90505f60126040518060400160405290815f82015f9054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020015f820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681525050905060095f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156127f3575082155b156128b957805f01516fffffffffffffffffffffffffffffffff16841115612850576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128479061407d565b60405180910390fd5b80602001516fffffffffffffffffffffffffffffffff1682856128739190613994565b11156128b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128ab906140e5565b60405180910390fd5b612a24565b60095f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612956575060075f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156129b857805f01516fffffffffffffffffffffffffffffffff168411156129b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129aa9061407d565b60405180910390fd5b612a23565b82612a225780602001516fffffffffffffffffffffffffffffffff1682856129e09190613994565b1115612a21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a18906140e5565b60405180910390fd5b5b5b5b60145f9054906101000a900460ff1615612a56576001600e5f01601e6101000a81548160ff0219169083151502179055505b5050505b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612acd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ac490614173565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612b3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b3290614201565b60405180910390fd5b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015612bbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bb59061428f565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612ca791906130f6565b60405180910390a350505050565b6060612cc384845f85612ccc565b90509392505050565b606082471015612d11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d089061431d565b60405180910390fd5b5f808673ffffffffffffffffffffffffffffffffffffffff168587604051612d399190614375565b5f6040518083038185875af1925050503d805f8114612d73576040519150601f19603f3d011682016040523d82523d5f602084013e612d78565b606091505b5091509150612d8987838387612d95565b92505050949350505050565b60608315612df6575f835103612dee57612dae85612e09565b612ded576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612de4906143d5565b60405180910390fd5b5b829050612e01565b612e008383612e2b565b5b949350505050565b5f808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b5f82511115612e3d5781518083602001fd5b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e719190612faf565b60405180910390fd5b60405180604001604052805f6fffffffffffffffffffffffffffffffff1681526020015f6fffffffffffffffffffffffffffffffff1681525090565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612ee382612eba565b9050919050565b612ef381612ed9565b8114612efd575f80fd5b50565b5f81359050612f0e81612eea565b92915050565b5f60208284031215612f2957612f28612eb6565b5b5f612f3684828501612f00565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f612f8182612f3f565b612f8b8185612f49565b9350612f9b818560208601612f59565b612fa481612f67565b840191505092915050565b5f6020820190508181035f830152612fc78184612f77565b905092915050565b5f819050919050565b5f612ff2612fed612fe884612eba565b612fcf565b612eba565b9050919050565b5f61300382612fd8565b9050919050565b5f61301482612ff9565b9050919050565b6130248161300a565b82525050565b5f60208201905061303d5f83018461301b565b92915050565b5f819050919050565b61305581613043565b811461305f575f80fd5b50565b5f813590506130708161304c565b92915050565b5f806040838503121561308c5761308b612eb6565b5b5f61309985828601612f00565b92505060206130aa85828601613062565b9150509250929050565b5f8115159050919050565b6130c8816130b4565b82525050565b5f6020820190506130e15f8301846130bf565b92915050565b6130f081613043565b82525050565b5f6020820190506131095f8301846130e7565b92915050565b5f6020828403121561312457613123612eb6565b5b5f61313184828501613062565b91505092915050565b5f805f6060848603121561315157613150612eb6565b5b5f61315e86828701612f00565b935050602061316f86828701612f00565b925050604061318086828701613062565b9150509250925092565b5f60ff82169050919050565b61319f8161318a565b82525050565b5f6020820190506131b85f830184613196565b92915050565b5f6fffffffffffffffffffffffffffffffff82169050919050565b6131e2816131be565b81146131ec575f80fd5b50565b5f813590506131fd816131d9565b92915050565b5f6020828403121561321857613217612eb6565b5b5f613225848285016131ef565b91505092915050565b61323781612ed9565b82525050565b5f6020820190506132505f83018461322e565b92915050565b5f67ffffffffffffffff82169050919050565b61327281613256565b82525050565b5f60808201905061328b5f830187613269565b6132986020830186613269565b6132a56040830185613269565b6132b26060830184613269565b95945050505050565b5f69ffffffffffffffffffff82169050919050565b6132d9816132bb565b82525050565b5f6080820190506132f25f8301876132d0565b6132ff60208301866132d0565b61330c60408301856132d0565b61331960608301846130bf565b95945050505050565b5f6020820190506133355f830184613269565b92915050565b613344816130b4565b811461334e575f80fd5b50565b5f8135905061335f8161333b565b92915050565b5f806040838503121561337b5761337a612eb6565b5b5f61338885828601612f00565b925050602061339985828601613351565b9150509250929050565b5f80604083850312156133b9576133b8612eb6565b5b5f6133c685828601612f00565b92505060206133d785828601612f00565b9150509250929050565b6133ea816131be565b82525050565b5f6040820190506134035f8301856133e1565b61341060208301846133e1565b9392505050565b7f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000005f82015250565b5f61344b601a83612f49565b915061345682613417565b602082019050919050565b5f6020820190508181035f8301526134788161343f565b9050919050565b5f8151905061348d8161304c565b92915050565b5f602082840312156134a8576134a7612eb6565b5b5f6134b58482850161347f565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061350257607f821691505b602082108103613515576135146134be565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f61354f602083612f49565b915061355a8261351b565b602082019050919050565b5f6020820190508181035f83015261357c81613543565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6135ba82613043565b91506135c583613043565b92508282026135d381613043565b915082820484148315176135ea576135e9613583565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61362882613043565b915061363383613043565b925082613643576136426135f1565b5b828204905092915050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e5f8201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b5f6136a8603583612f49565b91506136b38261364e565b604082019050919050565b5f6020820190508181035f8301526136d58161369c565b9050919050565b7f5377617020616d6f756e742063616e6e6f7420626520686967686572207468615f8201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b5f613736603483612f49565b9150613741826136dc565b604082019050919050565b5f6020820190508181035f8301526137638161372a565b9050919050565b5f8160011c9050919050565b5f808291508390505b60018511156137bf5780860481111561379b5761379a613583565b5b60018516156137aa5780820291505b80810290506137b88561376a565b945061377f565b94509492505050565b5f826137d75760019050613892565b816137e4575f9050613892565b81600181146137fa576002811461380457613833565b6001915050613892565b60ff84111561381657613815613583565b5b8360020a91508482111561382d5761382c613583565b5b50613892565b5060208310610133831016604e8410600b84101617156138685782820a90508381111561386357613862613583565b5b613892565b6138758484846001613776565b9250905081840481111561388c5761388b613583565b5b81810290505b9392505050565b5f6138a382613043565b91506138ae8361318a565b92506138db7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846137c8565b905092915050565b7f546f6f206c6f77000000000000000000000000000000000000000000000000005f82015250565b5f613917600783612f49565b9150613922826138e3565b602082019050919050565b5f6020820190508181035f8301526139448161390b565b9050919050565b5f61396561396061395b846131be565b612fcf565b613043565b9050919050565b6139758161394b565b82525050565b5f60208201905061398e5f83018461396c565b92915050565b5f61399e82613043565b91506139a983613043565b92508282019050808211156139c1576139c0613583565b5b92915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f613a21602583612f49565b9150613a2c826139c7565b604082019050919050565b5f6020820190508181035f830152613a4e81613a15565b9050919050565b7f5a65726f204164647265737300000000000000000000000000000000000000005f82015250565b5f613a89600c83612f49565b9150613a9482613a55565b602082019050919050565b5f6020820190508181035f830152613ab681613a7d565b9050919050565b7f43616e6e6f7420756e6578656d707420636f6e747261637400000000000000005f82015250565b5f613af1601883612f49565b9150613afc82613abd565b602082019050919050565b5f6020820190508181035f830152613b1e81613ae5565b9050919050565b5f604082019050613b385f83018561322e565b613b4560208301846130bf565b9392505050565b7f43616e6e6f742072656d6f7665207061697200000000000000000000000000005f82015250565b5f613b80601283612f49565b9150613b8b82613b4c565b602082019050919050565b5f6020820190508181035f830152613bad81613b74565b9050919050565b7f54726164696e6720616c726561647920656e61626c65640000000000000000005f82015250565b5f613be8601783612f49565b9150613bf382613bb4565b602082019050919050565b5f6020820190508181035f830152613c1581613bdc565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f613c76602683612f49565b9150613c8182613c1c565b604082019050919050565b5f6020820190508181035f830152613ca381613c6a565b9050919050565b5f81905092915050565b50565b5f613cc25f83613caa565b9150613ccd82613cb4565b5f82019050919050565b5f613ce182613cb7565b9150819050919050565b7f416c72656164792064697361626c6564210000000000000000000000000000005f82015250565b5f613d1f601183612f49565b9150613d2a82613ceb565b602082019050919050565b5f6020820190508181035f830152613d4c81613d13565b9050919050565b5f604082019050613d665f83018561322e565b613d7360208301846130e7565b9392505050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f613dd4602483612f49565b9150613ddf82613d7a565b604082019050919050565b5f6020820190508181035f830152613e0181613dc8565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f613e62602283612f49565b9150613e6d82613e08565b604082019050919050565b5f6020820190508181035f830152613e8f81613e56565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000005f82015250565b5f613eca601d83612f49565b9150613ed582613e96565b602082019050919050565b5f6020820190508181035f830152613ef781613ebe565b9050919050565b7f54726164696e67206e6f742061637469766500000000000000000000000000005f82015250565b5f613f32601283612f49565b9150613f3d82613efe565b602082019050919050565b5f6020820190508181035f830152613f5f81613f26565b9050919050565b5f81519050613f748161333b565b92915050565b5f60208284031215613f8f57613f8e612eb6565b5b5f613f9c84828501613f66565b91505092915050565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e5f8201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b5f613fff602a83612f49565b915061400a82613fa5565b604082019050919050565b5f6020820190508181035f83015261402c81613ff3565b9050919050565b7f4d61782054786e000000000000000000000000000000000000000000000000005f82015250565b5f614067600783612f49565b915061407282614033565b602082019050919050565b5f6020820190508181035f8301526140948161405b565b9050919050565b7f4d61782057616c6c6574000000000000000000000000000000000000000000005f82015250565b5f6140cf600a83612f49565b91506140da8261409b565b602082019050919050565b5f6020820190508181035f8301526140fc816140c3565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f61415d602583612f49565b915061416882614103565b604082019050919050565b5f6020820190508181035f83015261418a81614151565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f6141eb602383612f49565b91506141f682614191565b604082019050919050565b5f6020820190508181035f830152614218816141df565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f614279602683612f49565b91506142848261421f565b604082019050919050565b5f6020820190508181035f8301526142a68161426d565b9050919050565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f5f8201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b5f614307602683612f49565b9150614312826142ad565b604082019050919050565b5f6020820190508181035f830152614334816142fb565b9050919050565b5f81519050919050565b5f61434f8261433b565b6143598185613caa565b9350614369818560208601612f59565b80840191505092915050565b5f6143808284614345565b915081905092915050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000005f82015250565b5f6143bf601d83612f49565b91506143ca8261438b565b602082019050919050565b5f6020820190508181035f8301526143ec816143b3565b905091905056fea26469706673582212202eed1803fd525c4b06d049819f34beebbf1d76393bc7c0f88da281ab314667b964736f6c634300081a0033

Deployed Bytecode

0x60806040526004361061025e575f3560e01c8063860a32ec11610143578063c78d0fa0116100b5578063d333ea4d11610079578063d333ea4d146108f2578063dd62ed3e14610908578063f270fde414610944578063f2fde38b1461096f578063f5648a4f14610997578063f8686f07146109ad57610265565b8063c78d0fa01461081f578063c876d0b914610849578063cc1776d314610873578063ccad03e1146108a0578063d00efb2f146108c857610265565b8063a457c2d711610107578063a457c2d7146106ef578063a5ece9411461072b578063a9059cbb14610755578063ad5c464814610791578063b0249cc6146107bb578063bedafd01146107f757610265565b8063860a32ec1461060b5780638d3e6e40146106355780638da5cb5b1461067157806395d89b411461069b5780639e93ad8e146106c557610265565b80633ad10ef6116101dc5780635a90a49e116101a05780635a90a49e1461051257806366ebd39a1461054e5780636d7adcad1461057657806370a08231146105a3578063715018a6146105df578063751039fc146105f557610265565b80633ad10ef61461043d578063432e95a514610467578063452ed4f1146104915780634f7041a5146104bb57806353371be0146104e857610265565b80632104591811610223578063210459181461034b57806323b872dd14610373578063313ce567146103af57806336e18e19146103d9578063395093511461040157610265565b8062ae3bf81461026957806306fdde03146102915780630758d924146102bb578063095ea7b3146102e557806318160ddd1461032157610265565b3661026557005b5f80fd5b348015610274575f80fd5b5061028f600480360381019061028a9190612f14565b6109c3565b005b34801561029c575f80fd5b506102a5610adc565b6040516102b29190612faf565b60405180910390f35b3480156102c6575f80fd5b506102cf610b6c565b6040516102dc919061302a565b60405180910390f35b3480156102f0575f80fd5b5061030b60048036038101906103069190613076565b610b90565b60405161031891906130ce565b60405180910390f35b34801561032c575f80fd5b50610335610bb2565b60405161034291906130f6565b60405180910390f35b348015610356575f80fd5b50610371600480360381019061036c919061310f565b610bbb565b005b34801561037e575f80fd5b506103996004803603810190610394919061313a565b610d22565b6040516103a691906130ce565b60405180910390f35b3480156103ba575f80fd5b506103c3610d50565b6040516103d091906131a5565b60405180910390f35b3480156103e4575f80fd5b506103ff60048036038101906103fa9190613203565b610d58565b005b34801561040c575f80fd5b5061042760048036038101906104229190613076565b610f44565b60405161043491906130ce565b60405180910390f35b348015610448575f80fd5b50610451610f7a565b60405161045e919061323d565b60405180910390f35b348015610472575f80fd5b5061047b610f9f565b60405161048891906130f6565b60405180910390f35b34801561049c575f80fd5b506104a5610fa5565b6040516104b2919061323d565b60405180910390f35b3480156104c6575f80fd5b506104cf610fc9565b6040516104df9493929190613278565b60405180910390f35b3480156104f3575f80fd5b506104fc611032565b60405161050991906130ce565b60405180910390f35b34801561051d575f80fd5b5061053860048036038101906105339190612f14565b611044565b60405161054591906130ce565b60405180910390f35b348015610559575f80fd5b50610574600480360381019061056f9190613203565b611061565b005b348015610581575f80fd5b5061058a61124f565b60405161059a94939291906132df565b60405180910390f35b3480156105ae575f80fd5b506105c960048036038101906105c49190612f14565b6112b7565b6040516105d691906130f6565b60405180910390f35b3480156105ea575f80fd5b506105f36112fc565b005b348015610600575f80fd5b5061060961144f565b005b348015610616575f80fd5b5061061f611620565b60405161062c91906130ce565b60405180910390f35b348015610640575f80fd5b5061065b60048036038101906106569190612f14565b611632565b60405161066891906130ce565b60405180910390f35b34801561067c575f80fd5b5061068561164f565b604051610692919061323d565b60405180910390f35b3480156106a6575f80fd5b506106af611677565b6040516106bc9190612faf565b60405180910390f35b3480156106d0575f80fd5b506106d9611707565b6040516106e69190613322565b60405180910390f35b3480156106fa575f80fd5b5061071560048036038101906107109190613076565b61170d565b60405161072291906130ce565b60405180910390f35b348015610736575f80fd5b5061073f611782565b60405161074c919061323d565b60405180910390f35b348015610760575f80fd5b5061077b60048036038101906107769190613076565b6117a7565b60405161078891906130ce565b60405180910390f35b34801561079c575f80fd5b506107a56117c9565b6040516107b2919061323d565b60405180910390f35b3480156107c6575f80fd5b506107e160048036038101906107dc9190612f14565b6117ed565b6040516107ee91906130ce565b60405180910390f35b348015610802575f80fd5b5061081d60048036038101906108189190613365565b61180a565b005b34801561082a575f80fd5b50610833611a0d565b60405161084091906130f6565b60405180910390f35b348015610854575f80fd5b5061085d611a13565b60405161086a91906130ce565b60405180910390f35b34801561087e575f80fd5b50610887611a25565b6040516108979493929190613278565b60405180910390f35b3480156108ab575f80fd5b506108c660048036038101906108c19190613365565b611a8e565b005b3480156108d3575f80fd5b506108dc611cb7565b6040516108e991906130f6565b60405180910390f35b3480156108fd575f80fd5b50610906611cbd565b005b348015610913575f80fd5b5061092e600480360381019061092991906133a3565b611dcc565b60405161093b91906130f6565b60405180910390f35b34801561094f575f80fd5b50610958611e4e565b6040516109669291906133f0565b60405180910390f35b34801561097a575f80fd5b5061099560048036038101906109909190612f14565b611e95565b005b3480156109a2575f80fd5b506109ab612057565b005b3480156109b8575f80fd5b506109c16120e5565b005b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610a31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2890613461565b60405180910390fd5b5f8173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610a6b919061323d565b602060405180830381865afa158015610a86573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610aaa9190613493565b9050610ad882600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836121e4565b5050565b606060038054610aeb906134eb565b80601f0160208091040260200160405190810160405280929190818152602001828054610b17906134eb565b8015610b625780601f10610b3957610100808354040283529160200191610b62565b820191905f5260205f20905b815481529060010190602001808311610b4557829003601f168201915b5050505050905090565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b5f80610b9a61226a565b9050610ba7818585612271565b600191505092915050565b5f600254905090565b610bc361226a565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4890613565565b60405180910390fd5b620186a06001610c5f610bb2565b610c6991906135b0565b610c73919061361e565b811015610cb5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cac906136be565b60405180910390fd5b6103e86005610cc2610bb2565b610ccc91906135b0565b610cd6919061361e565b811115610d18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0f9061374c565b60405180910390fd5b8060108190555050565b5f80610d2c61226a565b9050610d39858285612434565b610d448585856124bf565b60019150509392505050565b5f6012905090565b610d6061226a565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610dee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de590613565565b60405180910390fd5b610df6610d50565b600a610e029190613899565b6103e86001610e0f610bb2565b610e1991906135b0565b610e23919061361e565b610e2d919061361e565b816fffffffffffffffffffffffffffffffff161015610e81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e789061392d565b60405180910390fd5b610e89610d50565b600a610e959190613899565b816fffffffffffffffffffffffffffffffff16610eb291906135b0565b60125f015f6101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055507f6710da7d4acedae09cb83751ae24c150719ef67dcbc1e02049f171d13c6b44e660125f015f9054906101000a90046fffffffffffffffffffffffffffffffff16604051610f39919061397b565b60405180910390a150565b5f80610f4e61226a565b9050610f6f818585610f608589611dcc565b610f6a9190613994565b612271565b600191505092915050565b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60115481565b7f0000000000000000000000006bc8ecd4949ae105c2567a3c1a3d0121670a5a3e81565b600c805f015f9054906101000a900467ffffffffffffffff1690805f0160089054906101000a900467ffffffffffffffff1690805f0160109054906101000a900467ffffffffffffffff1690805f0160189054906101000a900467ffffffffffffffff16905084565b60085f9054906101000a900460ff1681565b6006602052805f5260405f205f915054906101000a900460ff1681565b61106961226a565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ee90613565565b60405180910390fd5b6110ff610d50565b600a61110b9190613899565b6103e86001611118610bb2565b61112291906135b0565b61112c919061361e565b611136919061361e565b816fffffffffffffffffffffffffffffffff16101561118a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111819061392d565b60405180910390fd5b611192610d50565b600a61119e9190613899565b816fffffffffffffffffffffffffffffffff166111bb91906135b0565b60125f0160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055507fde064515fae8f8bb6d8ff19d2c6ba704322def7494147d8a971266430ade078860125f0160109054906101000a90046fffffffffffffffffffffffffffffffff16604051611244919061397b565b60405180910390a150565b600e805f015f9054906101000a900469ffffffffffffffffffff1690805f01600a9054906101000a900469ffffffffffffffffffff1690805f0160149054906101000a900469ffffffffffffffffffff1690805f01601e9054906101000a900460ff16905084565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b61130461226a565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611392576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138990613565565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f60055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b61145761226a565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114dc90613565565b60405180910390fd5b5f600f5f6101000a81548160ff021916908315150217905550611506612e7a565b5f61150f610bb2565b905080825f01906fffffffffffffffffffffffffffffffff1690816fffffffffffffffffffffffffffffffff16815250508082602001906fffffffffffffffffffffffffffffffff1690816fffffffffffffffffffffffffffffffff16815250508160125f820151815f015f6101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506020820151815f0160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055509050507fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c60405160405180910390a15050565b600f5f9054906101000a900460ff1681565b6007602052805f5260405f205f915054906101000a900460ff1681565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054611686906134eb565b80601f01602080910402602001604051908101604052809291908181526020018280546116b2906134eb565b80156116fd5780601f106116d4576101008083540402835291602001916116fd565b820191905f5260205f20905b8154815290600101906020018083116116e057829003601f168201915b5050505050905090565b61271081565b5f8061171761226a565b90505f6117248286611dcc565b905083811015611769576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176090613a37565b60405180910390fd5b6117768286868403612271565b60019250505092915050565b600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f806117b161226a565b90506117be8185856124bf565b600191505092915050565b7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281565b6009602052805f5260405f205f915054906101000a900460ff1681565b61181261226a565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189790613565565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361190e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190590613a9f565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361197c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197390613b07565b60405180910390fd5b8060065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055507f998cce27cbf44405c67eb636a634d5e2f2e6ff248b3d71fbbbb022f3c4c6dd2d8282604051611a01929190613b25565b60405180910390a15050565b60105481565b60145f9054906101000a900460ff1681565b600d805f015f9054906101000a900467ffffffffffffffff1690805f0160089054906101000a900467ffffffffffffffff1690805f0160109054906101000a900467ffffffffffffffff1690805f0160189054906101000a900467ffffffffffffffff16905084565b611a9661226a565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1b90613565565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611b92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8990613a9f565b60405180910390fd5b80611c26577f0000000000000000000000006bc8ecd4949ae105c2567a3c1a3d0121670a5a3e73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611c25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1c90613b96565b60405180910390fd5b5b8060075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055507f8f9f40630a1d139e6cf69b4f447ca47a36f10a017524efaa38252e516fa227ce8282604051611cab929190613b25565b60405180910390a15050565b60135481565b611cc561226a565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4a90613565565b60405180910390fd5b60085f9054906101000a900460ff1615611da2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9990613bfe565b60405180910390fd5b600160085f6101000a81548160ff0219169083151502179055504360138190555043601181905550565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b6012805f015f9054906101000a90046fffffffffffffffffffffffffffffffff1690805f0160109054906101000a90046fffffffffffffffffffffffffffffffff16905082565b611e9d61226a565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2290613565565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611f99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9090613c8c565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a38060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161209d90613cd7565b5f6040518083038185875af1925050503d805f81146120d7576040519150601f19603f3d011682016040523d82523d5f602084013e6120dc565b606091505b50508091505050565b6120ed61226a565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461217b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217290613565565b60405180910390fd5b60145f9054906101000a900460ff166121c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121c090613d35565b60405180910390fd5b5f60145f6101000a81548160ff021916908315150217905550565b6122658363a9059cbb60e01b8484604051602401612203929190613d53565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506125cc565b505050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036122df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122d690613dea565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361234d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234490613e78565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161242791906130f6565b60405180910390a3505050565b5f61243f8484611dcc565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146124b957818110156124ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124a290613ee0565b60405180910390fd5b6124b88484848403612271565b5b50505050565b60065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615801561255d575060065f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156125bc5760085f9054906101000a900460ff166125b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125a790613f48565b60405180910390fd5b6125bb838383612691565b5b6125c7838383612a5f565b505050565b5f61262d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16612cb59092919063ffffffff16565b90505f8151111561268c578080602001905181019061264c9190613f7a565b61268b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268290614015565b60405180910390fd5b5b505050565b600f5f9054906101000a900460ff1615612a5a575f60075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1690505f6126fc846112b7565b90505f60126040518060400160405290815f82015f9054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020015f820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681525050905060095f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156127f3575082155b156128b957805f01516fffffffffffffffffffffffffffffffff16841115612850576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128479061407d565b60405180910390fd5b80602001516fffffffffffffffffffffffffffffffff1682856128739190613994565b11156128b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128ab906140e5565b60405180910390fd5b612a24565b60095f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612956575060075f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156129b857805f01516fffffffffffffffffffffffffffffffff168411156129b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129aa9061407d565b60405180910390fd5b612a23565b82612a225780602001516fffffffffffffffffffffffffffffffff1682856129e09190613994565b1115612a21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a18906140e5565b60405180910390fd5b5b5b5b60145f9054906101000a900460ff1615612a56576001600e5f01601e6101000a81548160ff0219169083151502179055505b5050505b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612acd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ac490614173565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612b3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b3290614201565b60405180910390fd5b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015612bbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bb59061428f565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612ca791906130f6565b60405180910390a350505050565b6060612cc384845f85612ccc565b90509392505050565b606082471015612d11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d089061431d565b60405180910390fd5b5f808673ffffffffffffffffffffffffffffffffffffffff168587604051612d399190614375565b5f6040518083038185875af1925050503d805f8114612d73576040519150601f19603f3d011682016040523d82523d5f602084013e612d78565b606091505b5091509150612d8987838387612d95565b92505050949350505050565b60608315612df6575f835103612dee57612dae85612e09565b612ded576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612de4906143d5565b60405180910390fd5b5b829050612e01565b612e008383612e2b565b5b949350505050565b5f808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b5f82511115612e3d5781518083602001fd5b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e719190612faf565b60405180910390fd5b60405180604001604052805f6fffffffffffffffffffffffffffffffff1681526020015f6fffffffffffffffffffffffffffffffff1681525090565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612ee382612eba565b9050919050565b612ef381612ed9565b8114612efd575f80fd5b50565b5f81359050612f0e81612eea565b92915050565b5f60208284031215612f2957612f28612eb6565b5b5f612f3684828501612f00565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f612f8182612f3f565b612f8b8185612f49565b9350612f9b818560208601612f59565b612fa481612f67565b840191505092915050565b5f6020820190508181035f830152612fc78184612f77565b905092915050565b5f819050919050565b5f612ff2612fed612fe884612eba565b612fcf565b612eba565b9050919050565b5f61300382612fd8565b9050919050565b5f61301482612ff9565b9050919050565b6130248161300a565b82525050565b5f60208201905061303d5f83018461301b565b92915050565b5f819050919050565b61305581613043565b811461305f575f80fd5b50565b5f813590506130708161304c565b92915050565b5f806040838503121561308c5761308b612eb6565b5b5f61309985828601612f00565b92505060206130aa85828601613062565b9150509250929050565b5f8115159050919050565b6130c8816130b4565b82525050565b5f6020820190506130e15f8301846130bf565b92915050565b6130f081613043565b82525050565b5f6020820190506131095f8301846130e7565b92915050565b5f6020828403121561312457613123612eb6565b5b5f61313184828501613062565b91505092915050565b5f805f6060848603121561315157613150612eb6565b5b5f61315e86828701612f00565b935050602061316f86828701612f00565b925050604061318086828701613062565b9150509250925092565b5f60ff82169050919050565b61319f8161318a565b82525050565b5f6020820190506131b85f830184613196565b92915050565b5f6fffffffffffffffffffffffffffffffff82169050919050565b6131e2816131be565b81146131ec575f80fd5b50565b5f813590506131fd816131d9565b92915050565b5f6020828403121561321857613217612eb6565b5b5f613225848285016131ef565b91505092915050565b61323781612ed9565b82525050565b5f6020820190506132505f83018461322e565b92915050565b5f67ffffffffffffffff82169050919050565b61327281613256565b82525050565b5f60808201905061328b5f830187613269565b6132986020830186613269565b6132a56040830185613269565b6132b26060830184613269565b95945050505050565b5f69ffffffffffffffffffff82169050919050565b6132d9816132bb565b82525050565b5f6080820190506132f25f8301876132d0565b6132ff60208301866132d0565b61330c60408301856132d0565b61331960608301846130bf565b95945050505050565b5f6020820190506133355f830184613269565b92915050565b613344816130b4565b811461334e575f80fd5b50565b5f8135905061335f8161333b565b92915050565b5f806040838503121561337b5761337a612eb6565b5b5f61338885828601612f00565b925050602061339985828601613351565b9150509250929050565b5f80604083850312156133b9576133b8612eb6565b5b5f6133c685828601612f00565b92505060206133d785828601612f00565b9150509250929050565b6133ea816131be565b82525050565b5f6040820190506134035f8301856133e1565b61341060208301846133e1565b9392505050565b7f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000005f82015250565b5f61344b601a83612f49565b915061345682613417565b602082019050919050565b5f6020820190508181035f8301526134788161343f565b9050919050565b5f8151905061348d8161304c565b92915050565b5f602082840312156134a8576134a7612eb6565b5b5f6134b58482850161347f565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061350257607f821691505b602082108103613515576135146134be565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f61354f602083612f49565b915061355a8261351b565b602082019050919050565b5f6020820190508181035f83015261357c81613543565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6135ba82613043565b91506135c583613043565b92508282026135d381613043565b915082820484148315176135ea576135e9613583565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61362882613043565b915061363383613043565b925082613643576136426135f1565b5b828204905092915050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e5f8201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b5f6136a8603583612f49565b91506136b38261364e565b604082019050919050565b5f6020820190508181035f8301526136d58161369c565b9050919050565b7f5377617020616d6f756e742063616e6e6f7420626520686967686572207468615f8201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b5f613736603483612f49565b9150613741826136dc565b604082019050919050565b5f6020820190508181035f8301526137638161372a565b9050919050565b5f8160011c9050919050565b5f808291508390505b60018511156137bf5780860481111561379b5761379a613583565b5b60018516156137aa5780820291505b80810290506137b88561376a565b945061377f565b94509492505050565b5f826137d75760019050613892565b816137e4575f9050613892565b81600181146137fa576002811461380457613833565b6001915050613892565b60ff84111561381657613815613583565b5b8360020a91508482111561382d5761382c613583565b5b50613892565b5060208310610133831016604e8410600b84101617156138685782820a90508381111561386357613862613583565b5b613892565b6138758484846001613776565b9250905081840481111561388c5761388b613583565b5b81810290505b9392505050565b5f6138a382613043565b91506138ae8361318a565b92506138db7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846137c8565b905092915050565b7f546f6f206c6f77000000000000000000000000000000000000000000000000005f82015250565b5f613917600783612f49565b9150613922826138e3565b602082019050919050565b5f6020820190508181035f8301526139448161390b565b9050919050565b5f61396561396061395b846131be565b612fcf565b613043565b9050919050565b6139758161394b565b82525050565b5f60208201905061398e5f83018461396c565b92915050565b5f61399e82613043565b91506139a983613043565b92508282019050808211156139c1576139c0613583565b5b92915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f613a21602583612f49565b9150613a2c826139c7565b604082019050919050565b5f6020820190508181035f830152613a4e81613a15565b9050919050565b7f5a65726f204164647265737300000000000000000000000000000000000000005f82015250565b5f613a89600c83612f49565b9150613a9482613a55565b602082019050919050565b5f6020820190508181035f830152613ab681613a7d565b9050919050565b7f43616e6e6f7420756e6578656d707420636f6e747261637400000000000000005f82015250565b5f613af1601883612f49565b9150613afc82613abd565b602082019050919050565b5f6020820190508181035f830152613b1e81613ae5565b9050919050565b5f604082019050613b385f83018561322e565b613b4560208301846130bf565b9392505050565b7f43616e6e6f742072656d6f7665207061697200000000000000000000000000005f82015250565b5f613b80601283612f49565b9150613b8b82613b4c565b602082019050919050565b5f6020820190508181035f830152613bad81613b74565b9050919050565b7f54726164696e6720616c726561647920656e61626c65640000000000000000005f82015250565b5f613be8601783612f49565b9150613bf382613bb4565b602082019050919050565b5f6020820190508181035f830152613c1581613bdc565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f613c76602683612f49565b9150613c8182613c1c565b604082019050919050565b5f6020820190508181035f830152613ca381613c6a565b9050919050565b5f81905092915050565b50565b5f613cc25f83613caa565b9150613ccd82613cb4565b5f82019050919050565b5f613ce182613cb7565b9150819050919050565b7f416c72656164792064697361626c6564210000000000000000000000000000005f82015250565b5f613d1f601183612f49565b9150613d2a82613ceb565b602082019050919050565b5f6020820190508181035f830152613d4c81613d13565b9050919050565b5f604082019050613d665f83018561322e565b613d7360208301846130e7565b9392505050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f613dd4602483612f49565b9150613ddf82613d7a565b604082019050919050565b5f6020820190508181035f830152613e0181613dc8565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f613e62602283612f49565b9150613e6d82613e08565b604082019050919050565b5f6020820190508181035f830152613e8f81613e56565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000005f82015250565b5f613eca601d83612f49565b9150613ed582613e96565b602082019050919050565b5f6020820190508181035f830152613ef781613ebe565b9050919050565b7f54726164696e67206e6f742061637469766500000000000000000000000000005f82015250565b5f613f32601283612f49565b9150613f3d82613efe565b602082019050919050565b5f6020820190508181035f830152613f5f81613f26565b9050919050565b5f81519050613f748161333b565b92915050565b5f60208284031215613f8f57613f8e612eb6565b5b5f613f9c84828501613f66565b91505092915050565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e5f8201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b5f613fff602a83612f49565b915061400a82613fa5565b604082019050919050565b5f6020820190508181035f83015261402c81613ff3565b9050919050565b7f4d61782054786e000000000000000000000000000000000000000000000000005f82015250565b5f614067600783612f49565b915061407282614033565b602082019050919050565b5f6020820190508181035f8301526140948161405b565b9050919050565b7f4d61782057616c6c6574000000000000000000000000000000000000000000005f82015250565b5f6140cf600a83612f49565b91506140da8261409b565b602082019050919050565b5f6020820190508181035f8301526140fc816140c3565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f61415d602583612f49565b915061416882614103565b604082019050919050565b5f6020820190508181035f83015261418a81614151565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f6141eb602383612f49565b91506141f682614191565b604082019050919050565b5f6020820190508181035f830152614218816141df565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f614279602683612f49565b91506142848261421f565b604082019050919050565b5f6020820190508181035f8301526142a68161426d565b9050919050565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f5f8201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b5f614307602683612f49565b9150614312826142ad565b604082019050919050565b5f6020820190508181035f830152614334816142fb565b9050919050565b5f81519050919050565b5f61434f8261433b565b6143598185613caa565b9350614369818560208601612f59565b80840191505092915050565b5f6143808284614345565b915081905092915050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000005f82015250565b5f6143bf601d83612f49565b91506143ca8261438b565b602082019050919050565b5f6020820190508181035f8301526143ec816143b3565b905091905056fea26469706673582212202eed1803fd525c4b06d049819f34beebbf1d76393bc7c0f88da281ab314667b964736f6c634300081a0033

Deployed Bytecode Sourcemap

21596:7586:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28851:289;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4304:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22155:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6664:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5433:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27608:346;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7445:261;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5275:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26968:322;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8115:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21874:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22076:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22117:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21908:19;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;21750:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21638:47;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27298:302;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21963:32;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;5604:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13218:150;;;;;;;;;;;;;:::i;:::-;;28196:321;;;;;;;;;;;;;:::i;:::-;;22004:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21692:49;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13004:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4523:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22270:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8856:436;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21836:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5937:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22199:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21785:42;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26281:319;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22039:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22356:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21934:20;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;26608:352;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22321:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27964:224;;;;;;;;;;;;;:::i;:::-;;6193:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22237:24;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;13376:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28693:150;;;;;;;;;;;;;:::i;:::-;;28527:158;;;;;;;;;;;;;:::i;:::-;;28851:289;28935:1;28917:20;;:6;:20;;;28909:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;28979:24;29013:6;29006:24;;;29039:4;29006:39;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28979:66;;29056:76;29086:6;29102:10;;;;;;;;;;;29115:16;29056:22;:76::i;:::-;28898:242;28851:289;:::o;4304:100::-;4358:13;4391:5;4384:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4304:100;:::o;22155:37::-;;;:::o;6664:201::-;6747:4;6764:13;6780:12;:10;:12::i;:::-;6764:28;;6803:32;6812:5;6819:7;6828:6;6803:8;:32::i;:::-;6853:4;6846:11;;;6664:201;;;;:::o;5433:108::-;5494:7;5521:12;;5514:19;;5433:108;:::o;27608:346::-;13141:12;:10;:12::i;:::-;13131:22;;:6;;;;;;;;;;;:22;;;13123:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27729:6:::1;27724:1;27708:13;:11;:13::i;:::-;:17;;;;:::i;:::-;27707:28;;;;:::i;:::-;27694:9;:41;;27686:107;;;;;;;;;;;;:::i;:::-;;;;;;;;;27847:4;27842:1;27826:13;:11;:13::i;:::-;:17;;;;:::i;:::-;27825:26;;;;:::i;:::-;27812:9;:39;;27804:104;;;;;;;;;;;;:::i;:::-;;;;;;;;;27937:9;27919:15;:27;;;;27608:346:::0;:::o;7445:261::-;7542:4;7559:15;7577:12;:10;:12::i;:::-;7559:30;;7600:38;7616:4;7622:7;7631:6;7600:15;:38::i;:::-;7649:27;7659:4;7665:2;7669:6;7649:9;:27::i;:::-;7694:4;7687:11;;;7445:261;;;;;:::o;5275:93::-;5333:5;5358:2;5351:9;;5275:93;:::o;26968:322::-;13141:12;:10;:12::i;:::-;13131:22;;:6;;;;;;;;;;;:22;;;13123:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27112:10:::1;:8;:10::i;:::-;27108:2;:14;;;;:::i;:::-;27101:4;27097:1;27081:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;27080:43;;;;:::i;:::-;27062:14;:61;;;;27054:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;27204:10;:8;:10::i;:::-;27200:2;:14;;;;:::i;:::-;27182;:33;;;;;;:::i;:::-;27146:8;:25;;;:70;;;;;;;;;;;;;;;;;;27232:50;27256:8;:25;;;;;;;;;;;;27232:50;;;;;;:::i;:::-;;;;;;;;26968:322:::0;:::o;8115:238::-;8203:4;8220:13;8236:12;:10;:12::i;:::-;8220:28;;8259:64;8268:5;8275:7;8312:10;8284:25;8294:5;8301:7;8284:9;:25::i;:::-;:38;;;;:::i;:::-;8259:8;:64::i;:::-;8341:4;8334:11;;;8115:238;;;;:::o;21874:25::-;;;;;;;;;;;;;:::o;22076:32::-;;;;:::o;22117:31::-;;;:::o;21908:19::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;21750:26::-;;;;;;;;;;;;;:::o;21638:47::-;;;;;;;;;;;;;;;;;;;;;;:::o;27298:302::-;13141:12;:10;:12::i;:::-;13131:22;;:6;;;;;;;;;;;:22;;;13123:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27437:10:::1;:8;:10::i;:::-;27433:2;:14;;;;:::i;:::-;27426:4;27422:1;27406:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;27405:43;;;;:::i;:::-;27387:14;:61;;;;27379:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;27524:10;:8;:10::i;:::-;27520:2;:14;;;;:::i;:::-;27502;:33;;;;;;:::i;:::-;27471:8;:20;;;:65;;;;;;;;;;;;;;;;;;27552:40;27571:8;:20;;;;;;;;;;;;27552:40;;;;;;:::i;:::-;;;;;;;;27298:302:::0;:::o;21963:32::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;5604:127::-;5678:7;5705:9;:18;5715:7;5705:18;;;;;;;;;;;;;;;;5698:25;;5604:127;;;:::o;13218:150::-;13141:12;:10;:12::i;:::-;13131:22;;:6;;;;;;;;;;;:22;;;13123:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;13327:1:::1;13290:40;;13311:6;;;;;;;;;;;13290:40;;;;;;;;;;;;13358:1;13341:6;;:19;;;;;;;;;;;;;;;;;;13218:150::o:0;28196:321::-;13141:12;:10;:12::i;:::-;13131:22;;:6;;;;;;;;;;;:22;;;13123:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;28260:5:::1;28250:7;;:15;;;;;;;;;;;;;;;;;;28276:25;;:::i;:::-;28312:14;28329:13;:11;:13::i;:::-;28312:30;;28390:6;28353:9;:26;;:44;;;;;;;;;::::0;::::1;28440:6;28408:9;:21;;:39;;;;;;;;;::::0;::::1;28469:9;28458:8;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28494:15;;;;;;;;;;28239:278;;28196:321::o:0;22004:26::-;;;;;;;;;;;;;:::o;21692:49::-;;;;;;;;;;;;;;;;;;;;;;:::o;13004:79::-;13042:7;13069:6;;;;;;;;;;;13062:13;;13004:79;:::o;4523:104::-;4579:13;4612:7;4605:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4523:104;:::o;22270:42::-;22307:5;22270:42;:::o;8856:436::-;8949:4;8966:13;8982:12;:10;:12::i;:::-;8966:28;;9005:24;9032:25;9042:5;9049:7;9032:9;:25::i;:::-;9005:52;;9096:15;9076:16;:35;;9068:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;9189:60;9198:5;9205:7;9233:15;9214:16;:34;9189:8;:60::i;:::-;9280:4;9273:11;;;;8856:436;;;;:::o;21836:31::-;;;;;;;;;;;;;:::o;5937:193::-;6016:4;6033:13;6049:12;:10;:12::i;:::-;6033:28;;6072;6082:5;6089:2;6093:6;6072:9;:28::i;:::-;6118:4;6111:11;;;5937:193;;;;:::o;22199:29::-;;;:::o;21785:42::-;;;;;;;;;;;;;;;;;;;;;;:::o;26281:319::-;13141:12;:10;:12::i;:::-;13131:22;;:6;;;;;;;;;;;:22;;;13123:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26399:1:::1;26379:22;;:8;:22;;::::0;26371:47:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;26457:4;26437:25;;:8;:25;;::::0;26429:62:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;26529:9;26502:14;:24;26517:8;26502:24;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;26554:38;26572:8;26582:9;26554:38;;;;;;;:::i;:::-;;;;;;;;26281:319:::0;;:::o;22039:30::-;;;;:::o;22356:40::-;;;;;;;;;;;;;:::o;21934:20::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;26608:352::-;13141:12;:10;:12::i;:::-;13131:22;;:6;;;;;;;;;;;:22;;;13123:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26728:1:::1;26708:22;;:8;:22;;::::0;26700:47:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;26762:9;26758:90;;26807:6;26795:18;;:8;:18;;::::0;26787:49:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;26758:90;26887:9;26858:16;:26;26875:8;26858:26;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;26912:40;26932:8;26942:9;26912:40;;;;;;;:::i;:::-;;;;;;;;26608:352:::0;;:::o;22321:26::-;;;;:::o;27964:224::-;13141:12;:10;:12::i;:::-;13131:22;;:6;;;;;;;;;;;:22;;;13123:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;28026:14:::1;;;;;;;;;;;28025:15;28017:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;28096:4;28079:14;;:21;;;;;;;;;;;;;;;;;;28125:12;28111:11;:26;;;;28168:12;28148:17;:32;;;;27964:224::o:0;6193:151::-;6282:7;6309:11;:18;6321:5;6309:18;;;;;;;;;;;;;;;:27;6328:7;6309:27;;;;;;;;;;;;;;;;6302:34;;6193:151;;;;:::o;22237:24::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;13376:244::-;13141:12;:10;:12::i;:::-;13131:22;;:6;;;;;;;;;;;:22;;;13123:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;13485:1:::1;13465:22;;:8;:22;;::::0;13457:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;13575:8;13546:38;;13567:6;;;;;;;;;;;13546:38;;;;;;;;;;;;13604:8;13595:6;;:17;;;;;;;;;;;;;;;;;;13376:244:::0;:::o;28693:150::-;28741:12;28785:10;;;;;;;;;;;28777:24;;28809:21;28777:58;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28764:71;;;;;28730:113;28693:150::o;28527:158::-;13141:12;:10;:12::i;:::-;13131:22;;:6;;;;;;;;;;;:22;;;13123:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;28596:20:::1;;;;;;;;;;;28588:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;28672:5;28649:20;;:28;;;;;;;;;;;;;;;;;;28527:158::o:0;19790:177::-;19873:86;19893:5;19923:23;;;19948:2;19952:5;19900:58;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19873:19;:86::i;:::-;19790:177;;;:::o;210:98::-;263:7;290:10;283:17;;210:98;:::o;11617:346::-;11736:1;11719:19;;:5;:19;;;11711:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11817:1;11798:21;;:7;:21;;;11790:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11901:6;11871:11;:18;11883:5;11871:18;;;;;;;;;;;;;;;:27;11890:7;11871:27;;;;;;;;;;;;;;;:36;;;;11939:7;11923:32;;11932:5;11923:32;;;11948:6;11923:32;;;;;;:::i;:::-;;;;;;;;11617:346;;;:::o;12254:419::-;12355:24;12382:25;12392:5;12399:7;12382:9;:25::i;:::-;12355:52;;12442:17;12422:16;:37;12418:248;;12504:6;12484:16;:26;;12476:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12588:51;12597:5;12604:7;12632:6;12613:16;:25;12588:8;:51::i;:::-;12418:248;12344:329;12254:419;;;:::o;24912:357::-;25058:14;:20;25073:4;25058:20;;;;;;;;;;;;;;;;;;;;;;;;;25057:21;:44;;;;;25083:14;:18;25098:2;25083:18;;;;;;;;;;;;;;;;;;;;;;;;;25082:19;25057:44;25054:164;;;25125:14;;;;;;;;;;;25117:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;25177:29;25189:4;25195:2;25199:6;25177:11;:29::i;:::-;25054:164;25230:31;25246:4;25251:2;25254:6;25230:15;:31::i;:::-;24912:357;;;:::o;20188:333::-;20269:23;20295:69;20323:4;20295:69;;;;;;;;;;;;;;;;;20303:5;20295:27;;;;:69;;;;;:::i;:::-;20269:95;;20399:1;20379:10;:17;:21;20375:139;;;20436:10;20425:30;;;;;;;;;;;;:::i;:::-;20417:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;20375:139;20258:263;20188:333;;:::o;25277:970::-;25363:7;;;;;;;;;;;25360:878;;;25386:19;25408:16;:20;25425:2;25408:20;;;;;;;;;;;;;;;;;;;;;;;;;25386:42;;25443:19;25465:13;25475:2;25465:9;:13::i;:::-;25443:35;;25493:25;25521:8;25493:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25568:9;:15;25578:4;25568:15;;;;;;;;;;;;;;;;;;;;;;;;;:34;;;;;25588:14;25587:15;25568:34;25564:538;;;25641:9;:26;;;25631:36;;:6;:36;;25623:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;25730:9;:21;;;25706:45;;25715:11;25706:6;:20;;;;:::i;:::-;:45;;25698:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25564:538;;;25827:9;:13;25837:2;25827:13;;;;;;;;;;;;;;;;;;;;;;;;;:40;;;;;25845:16;:22;25862:4;25845:22;;;;;;;;;;;;;;;;;;;;;;;;;25844:23;25827:40;25823:279;;;25906:9;:26;;;25896:36;;:6;:36;;25888:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;25823:279;;;25983:14;25979:123;;26050:9;:21;;;26026:45;;26035:11;26026:6;:20;;;;:::i;:::-;:45;;26018:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25979:123;25823:279;25564:538;26121:20;;;;;;;;;;;26118:107;;;26187:4;26163:12;:21;;;:28;;;;;;;;;;;;;;;;;;26118:107;25371:867;;;25360:878;25277:970;;;:::o;9762:705::-;9875:1;9859:18;;:4;:18;;;9851:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9952:1;9938:16;;:2;:16;;;9930:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;10007:19;10029:9;:15;10039:4;10029:15;;;;;;;;;;;;;;;;10007:37;;10078:6;10063:11;:21;;10055:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;10195:6;10181:11;:20;10163:9;:15;10173:4;10163:15;;;;;;;;;;;;;;;:38;;;;10398:6;10381:9;:13;10391:2;10381:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;10448:2;10433:26;;10442:4;10433:26;;;10452:6;10433:26;;;;;;:::i;:::-;;;;;;;;9840:627;9762:705;;;:::o;14293:229::-;14430:12;14462:52;14484:6;14492:4;14498:1;14501:12;14462:21;:52::i;:::-;14455:59;;14293:229;;;;;:::o;15413:455::-;15583:12;15641:5;15616:21;:30;;15608:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;15701:12;15715:23;15742:6;:11;;15761:5;15768:4;15742:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15700:73;;;;15791:69;15818:6;15826:7;15835:10;15847:12;15791:26;:69::i;:::-;15784:76;;;;15413:455;;;;;;:::o;17986:644::-;18171:12;18200:7;18196:427;;;18249:1;18228:10;:17;:22;18224:290;;18446:18;18457:6;18446:10;:18::i;:::-;18438:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;18224:290;18535:10;18528:17;;;;18196:427;18578:33;18586:10;18598:12;18578:7;:33::i;:::-;17986:644;;;;;;;:::o;13650:115::-;13710:4;13756:1;13734:7;:19;;;:23;13727:30;;13650:115;;;:::o;19172:552::-;19353:1;19333:10;:17;:21;19329:388;;;19565:10;19559:17;19622:15;19609:10;19605:2;19601:19;19594:44;19329:388;19692:12;19685:20;;;;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;:::o;88:117:1:-;197:1;194;187:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:329::-;900:6;949:2;937:9;928:7;924:23;920:32;917:119;;;955:79;;:::i;:::-;917:119;1075:1;1100:53;1145:7;1136:6;1125:9;1121:22;1100:53;:::i;:::-;1090:63;;1046:117;841:329;;;;:::o;1176:99::-;1228:6;1262:5;1256:12;1246:22;;1176:99;;;:::o;1281:169::-;1365:11;1399:6;1394:3;1387:19;1439:4;1434:3;1430:14;1415:29;;1281:169;;;;:::o;1456:139::-;1545:6;1540:3;1535;1529:23;1586:1;1577:6;1572:3;1568:16;1561:27;1456:139;;;:::o;1601:102::-;1642:6;1693:2;1689:7;1684:2;1677:5;1673:14;1669:28;1659:38;;1601:102;;;:::o;1709:377::-;1797:3;1825:39;1858:5;1825:39;:::i;:::-;1880:71;1944:6;1939:3;1880:71;:::i;:::-;1873:78;;1960:65;2018:6;2013:3;2006:4;1999:5;1995:16;1960:65;:::i;:::-;2050:29;2072:6;2050:29;:::i;:::-;2045:3;2041:39;2034:46;;1801:285;1709:377;;;;:::o;2092:313::-;2205:4;2243:2;2232:9;2228:18;2220:26;;2292:9;2286:4;2282:20;2278:1;2267:9;2263:17;2256:47;2320:78;2393:4;2384:6;2320:78;:::i;:::-;2312:86;;2092:313;;;;:::o;2411:60::-;2439:3;2460:5;2453:12;;2411:60;;;:::o;2477:142::-;2527:9;2560:53;2578:34;2587:24;2605:5;2587:24;:::i;:::-;2578:34;:::i;:::-;2560:53;:::i;:::-;2547:66;;2477:142;;;:::o;2625:126::-;2675:9;2708:37;2739:5;2708:37;:::i;:::-;2695:50;;2625:126;;;:::o;2757:145::-;2826:9;2859:37;2890:5;2859:37;:::i;:::-;2846:50;;2757:145;;;:::o;2908:169::-;3014:56;3064:5;3014:56;:::i;:::-;3009:3;3002:69;2908:169;;:::o;3083:260::-;3195:4;3233:2;3222:9;3218:18;3210:26;;3246:90;3333:1;3322:9;3318:17;3309:6;3246:90;:::i;:::-;3083:260;;;;:::o;3349:77::-;3386:7;3415:5;3404:16;;3349:77;;;:::o;3432:122::-;3505:24;3523:5;3505:24;:::i;:::-;3498:5;3495:35;3485:63;;3544:1;3541;3534:12;3485:63;3432:122;:::o;3560:139::-;3606:5;3644:6;3631:20;3622:29;;3660:33;3687:5;3660:33;:::i;:::-;3560:139;;;;:::o;3705:474::-;3773:6;3781;3830:2;3818:9;3809:7;3805:23;3801:32;3798:119;;;3836:79;;:::i;:::-;3798:119;3956:1;3981:53;4026:7;4017:6;4006:9;4002:22;3981:53;:::i;:::-;3971:63;;3927:117;4083:2;4109:53;4154:7;4145:6;4134:9;4130:22;4109:53;:::i;:::-;4099:63;;4054:118;3705:474;;;;;:::o;4185:90::-;4219:7;4262:5;4255:13;4248:21;4237:32;;4185:90;;;:::o;4281:109::-;4362:21;4377:5;4362:21;:::i;:::-;4357:3;4350:34;4281:109;;:::o;4396:210::-;4483:4;4521:2;4510:9;4506:18;4498:26;;4534:65;4596:1;4585:9;4581:17;4572:6;4534:65;:::i;:::-;4396:210;;;;:::o;4612:118::-;4699:24;4717:5;4699:24;:::i;:::-;4694:3;4687:37;4612:118;;:::o;4736:222::-;4829:4;4867:2;4856:9;4852:18;4844:26;;4880:71;4948:1;4937:9;4933:17;4924:6;4880:71;:::i;:::-;4736:222;;;;:::o;4964:329::-;5023:6;5072:2;5060:9;5051:7;5047:23;5043:32;5040:119;;;5078:79;;:::i;:::-;5040:119;5198:1;5223:53;5268:7;5259:6;5248:9;5244:22;5223:53;:::i;:::-;5213:63;;5169:117;4964:329;;;;:::o;5299:619::-;5376:6;5384;5392;5441:2;5429:9;5420:7;5416:23;5412:32;5409:119;;;5447:79;;:::i;:::-;5409:119;5567:1;5592:53;5637:7;5628:6;5617:9;5613:22;5592:53;:::i;:::-;5582:63;;5538:117;5694:2;5720:53;5765:7;5756:6;5745:9;5741:22;5720:53;:::i;:::-;5710:63;;5665:118;5822:2;5848:53;5893:7;5884:6;5873:9;5869:22;5848:53;:::i;:::-;5838:63;;5793:118;5299:619;;;;;:::o;5924:86::-;5959:7;5999:4;5992:5;5988:16;5977:27;;5924:86;;;:::o;6016:112::-;6099:22;6115:5;6099:22;:::i;:::-;6094:3;6087:35;6016:112;;:::o;6134:214::-;6223:4;6261:2;6250:9;6246:18;6238:26;;6274:67;6338:1;6327:9;6323:17;6314:6;6274:67;:::i;:::-;6134:214;;;;:::o;6354:118::-;6391:7;6431:34;6424:5;6420:46;6409:57;;6354:118;;;:::o;6478:122::-;6551:24;6569:5;6551:24;:::i;:::-;6544:5;6541:35;6531:63;;6590:1;6587;6580:12;6531:63;6478:122;:::o;6606:139::-;6652:5;6690:6;6677:20;6668:29;;6706:33;6733:5;6706:33;:::i;:::-;6606:139;;;;:::o;6751:329::-;6810:6;6859:2;6847:9;6838:7;6834:23;6830:32;6827:119;;;6865:79;;:::i;:::-;6827:119;6985:1;7010:53;7055:7;7046:6;7035:9;7031:22;7010:53;:::i;:::-;7000:63;;6956:117;6751:329;;;;:::o;7086:118::-;7173:24;7191:5;7173:24;:::i;:::-;7168:3;7161:37;7086:118;;:::o;7210:222::-;7303:4;7341:2;7330:9;7326:18;7318:26;;7354:71;7422:1;7411:9;7407:17;7398:6;7354:71;:::i;:::-;7210:222;;;;:::o;7438:101::-;7474:7;7514:18;7507:5;7503:30;7492:41;;7438:101;;;:::o;7545:115::-;7630:23;7647:5;7630:23;:::i;:::-;7625:3;7618:36;7545:115;;:::o;7666:537::-;7835:4;7873:3;7862:9;7858:19;7850:27;;7887:69;7953:1;7942:9;7938:17;7929:6;7887:69;:::i;:::-;7966:70;8032:2;8021:9;8017:18;8008:6;7966:70;:::i;:::-;8046;8112:2;8101:9;8097:18;8088:6;8046:70;:::i;:::-;8126;8192:2;8181:9;8177:18;8168:6;8126:70;:::i;:::-;7666:537;;;;;;;:::o;8209:105::-;8245:7;8285:22;8278:5;8274:34;8263:45;;8209:105;;;:::o;8320:115::-;8405:23;8422:5;8405:23;:::i;:::-;8400:3;8393:36;8320:115;;:::o;8441:529::-;8606:4;8644:3;8633:9;8629:19;8621:27;;8658:69;8724:1;8713:9;8709:17;8700:6;8658:69;:::i;:::-;8737:70;8803:2;8792:9;8788:18;8779:6;8737:70;:::i;:::-;8817;8883:2;8872:9;8868:18;8859:6;8817:70;:::i;:::-;8897:66;8959:2;8948:9;8944:18;8935:6;8897:66;:::i;:::-;8441:529;;;;;;;:::o;8976:218::-;9067:4;9105:2;9094:9;9090:18;9082:26;;9118:69;9184:1;9173:9;9169:17;9160:6;9118:69;:::i;:::-;8976:218;;;;:::o;9200:116::-;9270:21;9285:5;9270:21;:::i;:::-;9263:5;9260:32;9250:60;;9306:1;9303;9296:12;9250:60;9200:116;:::o;9322:133::-;9365:5;9403:6;9390:20;9381:29;;9419:30;9443:5;9419:30;:::i;:::-;9322:133;;;;:::o;9461:468::-;9526:6;9534;9583:2;9571:9;9562:7;9558:23;9554:32;9551:119;;;9589:79;;:::i;:::-;9551:119;9709:1;9734:53;9779:7;9770:6;9759:9;9755:22;9734:53;:::i;:::-;9724:63;;9680:117;9836:2;9862:50;9904:7;9895:6;9884:9;9880:22;9862:50;:::i;:::-;9852:60;;9807:115;9461:468;;;;;:::o;9935:474::-;10003:6;10011;10060:2;10048:9;10039:7;10035:23;10031:32;10028:119;;;10066:79;;:::i;:::-;10028:119;10186:1;10211:53;10256:7;10247:6;10236:9;10232:22;10211:53;:::i;:::-;10201:63;;10157:117;10313:2;10339:53;10384:7;10375:6;10364:9;10360:22;10339:53;:::i;:::-;10329:63;;10284:118;9935:474;;;;;:::o;10415:118::-;10502:24;10520:5;10502:24;:::i;:::-;10497:3;10490:37;10415:118;;:::o;10539:332::-;10660:4;10698:2;10687:9;10683:18;10675:26;;10711:71;10779:1;10768:9;10764:17;10755:6;10711:71;:::i;:::-;10792:72;10860:2;10849:9;10845:18;10836:6;10792:72;:::i;:::-;10539:332;;;;;:::o;10877:176::-;11017:28;11013:1;11005:6;11001:14;10994:52;10877:176;:::o;11059:366::-;11201:3;11222:67;11286:2;11281:3;11222:67;:::i;:::-;11215:74;;11298:93;11387:3;11298:93;:::i;:::-;11416:2;11411:3;11407:12;11400:19;;11059:366;;;:::o;11431:419::-;11597:4;11635:2;11624:9;11620:18;11612:26;;11684:9;11678:4;11674:20;11670:1;11659:9;11655:17;11648:47;11712:131;11838:4;11712:131;:::i;:::-;11704:139;;11431:419;;;:::o;11856:143::-;11913:5;11944:6;11938:13;11929:22;;11960:33;11987:5;11960:33;:::i;:::-;11856:143;;;;:::o;12005:351::-;12075:6;12124:2;12112:9;12103:7;12099:23;12095:32;12092:119;;;12130:79;;:::i;:::-;12092:119;12250:1;12275:64;12331:7;12322:6;12311:9;12307:22;12275:64;:::i;:::-;12265:74;;12221:128;12005:351;;;;:::o;12362:180::-;12410:77;12407:1;12400:88;12507:4;12504:1;12497:15;12531:4;12528:1;12521:15;12548:320;12592:6;12629:1;12623:4;12619:12;12609:22;;12676:1;12670:4;12666:12;12697:18;12687:81;;12753:4;12745:6;12741:17;12731:27;;12687:81;12815:2;12807:6;12804:14;12784:18;12781:38;12778:84;;12834:18;;:::i;:::-;12778:84;12599:269;12548:320;;;:::o;12874:182::-;13014:34;13010:1;13002:6;12998:14;12991:58;12874:182;:::o;13062:366::-;13204:3;13225:67;13289:2;13284:3;13225:67;:::i;:::-;13218:74;;13301:93;13390:3;13301:93;:::i;:::-;13419:2;13414:3;13410:12;13403:19;;13062:366;;;:::o;13434:419::-;13600:4;13638:2;13627:9;13623:18;13615:26;;13687:9;13681:4;13677:20;13673:1;13662:9;13658:17;13651:47;13715:131;13841:4;13715:131;:::i;:::-;13707:139;;13434:419;;;:::o;13859:180::-;13907:77;13904:1;13897:88;14004:4;14001:1;13994:15;14028:4;14025:1;14018:15;14045:410;14085:7;14108:20;14126:1;14108:20;:::i;:::-;14103:25;;14142:20;14160:1;14142:20;:::i;:::-;14137:25;;14197:1;14194;14190:9;14219:30;14237:11;14219:30;:::i;:::-;14208:41;;14398:1;14389:7;14385:15;14382:1;14379:22;14359:1;14352:9;14332:83;14309:139;;14428:18;;:::i;:::-;14309:139;14093:362;14045:410;;;;:::o;14461:180::-;14509:77;14506:1;14499:88;14606:4;14603:1;14596:15;14630:4;14627:1;14620:15;14647:185;14687:1;14704:20;14722:1;14704:20;:::i;:::-;14699:25;;14738:20;14756:1;14738:20;:::i;:::-;14733:25;;14777:1;14767:35;;14782:18;;:::i;:::-;14767:35;14824:1;14821;14817:9;14812:14;;14647:185;;;;:::o;14838:240::-;14978:34;14974:1;14966:6;14962:14;14955:58;15047:23;15042:2;15034:6;15030:15;15023:48;14838:240;:::o;15084:366::-;15226:3;15247:67;15311:2;15306:3;15247:67;:::i;:::-;15240:74;;15323:93;15412:3;15323:93;:::i;:::-;15441:2;15436:3;15432:12;15425:19;;15084:366;;;:::o;15456:419::-;15622:4;15660:2;15649:9;15645:18;15637:26;;15709:9;15703:4;15699:20;15695:1;15684:9;15680:17;15673:47;15737:131;15863:4;15737:131;:::i;:::-;15729:139;;15456:419;;;:::o;15881:239::-;16021:34;16017:1;16009:6;16005:14;15998:58;16090:22;16085:2;16077:6;16073:15;16066:47;15881:239;:::o;16126:366::-;16268:3;16289:67;16353:2;16348:3;16289:67;:::i;:::-;16282:74;;16365:93;16454:3;16365:93;:::i;:::-;16483:2;16478:3;16474:12;16467:19;;16126:366;;;:::o;16498:419::-;16664:4;16702:2;16691:9;16687:18;16679:26;;16751:9;16745:4;16741:20;16737:1;16726:9;16722:17;16715:47;16779:131;16905:4;16779:131;:::i;:::-;16771:139;;16498:419;;;:::o;16923:102::-;16965:8;17012:5;17009:1;17005:13;16984:34;;16923:102;;;:::o;17031:848::-;17092:5;17099:4;17123:6;17114:15;;17147:5;17138:14;;17161:712;17182:1;17172:8;17169:15;17161:712;;;17277:4;17272:3;17268:14;17262:4;17259:24;17256:50;;;17286:18;;:::i;:::-;17256:50;17336:1;17326:8;17322:16;17319:451;;;17751:4;17744:5;17740:16;17731:25;;17319:451;17801:4;17795;17791:15;17783:23;;17831:32;17854:8;17831:32;:::i;:::-;17819:44;;17161:712;;;17031:848;;;;;;;:::o;17885:1073::-;17939:5;18130:8;18120:40;;18151:1;18142:10;;18153:5;;18120:40;18179:4;18169:36;;18196:1;18187:10;;18198:5;;18169:36;18265:4;18313:1;18308:27;;;;18349:1;18344:191;;;;18258:277;;18308:27;18326:1;18317:10;;18328:5;;;18344:191;18389:3;18379:8;18376:17;18373:43;;;18396:18;;:::i;:::-;18373:43;18445:8;18442:1;18438:16;18429:25;;18480:3;18473:5;18470:14;18467:40;;;18487:18;;:::i;:::-;18467:40;18520:5;;;18258:277;;18644:2;18634:8;18631:16;18625:3;18619:4;18616:13;18612:36;18594:2;18584:8;18581:16;18576:2;18570:4;18567:12;18563:35;18547:111;18544:246;;;18700:8;18694:4;18690:19;18681:28;;18735:3;18728:5;18725:14;18722:40;;;18742:18;;:::i;:::-;18722:40;18775:5;;18544:246;18815:42;18853:3;18843:8;18837:4;18834:1;18815:42;:::i;:::-;18800:57;;;;18889:4;18884:3;18880:14;18873:5;18870:25;18867:51;;;18898:18;;:::i;:::-;18867:51;18947:4;18940:5;18936:16;18927:25;;17885:1073;;;;;;:::o;18964:281::-;19022:5;19046:23;19064:4;19046:23;:::i;:::-;19038:31;;19090:25;19106:8;19090:25;:::i;:::-;19078:37;;19134:104;19171:66;19161:8;19155:4;19134:104;:::i;:::-;19125:113;;18964:281;;;;:::o;19251:157::-;19391:9;19387:1;19379:6;19375:14;19368:33;19251:157;:::o;19414:365::-;19556:3;19577:66;19641:1;19636:3;19577:66;:::i;:::-;19570:73;;19652:93;19741:3;19652:93;:::i;:::-;19770:2;19765:3;19761:12;19754:19;;19414:365;;;:::o;19785:419::-;19951:4;19989:2;19978:9;19974:18;19966:26;;20038:9;20032:4;20028:20;20024:1;20013:9;20009:17;20002:47;20066:131;20192:4;20066:131;:::i;:::-;20058:139;;19785:419;;;:::o;20210:142::-;20260:9;20293:53;20311:34;20320:24;20338:5;20320:24;:::i;:::-;20311:34;:::i;:::-;20293:53;:::i;:::-;20280:66;;20210:142;;;:::o;20358:131::-;20445:37;20476:5;20445:37;:::i;:::-;20440:3;20433:50;20358:131;;:::o;20495:222::-;20588:4;20626:2;20615:9;20611:18;20603:26;;20639:71;20707:1;20696:9;20692:17;20683:6;20639:71;:::i;:::-;20495:222;;;;:::o;20723:191::-;20763:3;20782:20;20800:1;20782:20;:::i;:::-;20777:25;;20816:20;20834:1;20816:20;:::i;:::-;20811:25;;20859:1;20856;20852:9;20845:16;;20880:3;20877:1;20874:10;20871:36;;;20887:18;;:::i;:::-;20871:36;20723:191;;;;:::o;20920:224::-;21060:34;21056:1;21048:6;21044:14;21037:58;21129:7;21124:2;21116:6;21112:15;21105:32;20920:224;:::o;21150:366::-;21292:3;21313:67;21377:2;21372:3;21313:67;:::i;:::-;21306:74;;21389:93;21478:3;21389:93;:::i;:::-;21507:2;21502:3;21498:12;21491:19;;21150:366;;;:::o;21522:419::-;21688:4;21726:2;21715:9;21711:18;21703:26;;21775:9;21769:4;21765:20;21761:1;21750:9;21746:17;21739:47;21803:131;21929:4;21803:131;:::i;:::-;21795:139;;21522:419;;;:::o;21947:162::-;22087:14;22083:1;22075:6;22071:14;22064:38;21947:162;:::o;22115:366::-;22257:3;22278:67;22342:2;22337:3;22278:67;:::i;:::-;22271:74;;22354:93;22443:3;22354:93;:::i;:::-;22472:2;22467:3;22463:12;22456:19;;22115:366;;;:::o;22487:419::-;22653:4;22691:2;22680:9;22676:18;22668:26;;22740:9;22734:4;22730:20;22726:1;22715:9;22711:17;22704:47;22768:131;22894:4;22768:131;:::i;:::-;22760:139;;22487:419;;;:::o;22912:174::-;23052:26;23048:1;23040:6;23036:14;23029:50;22912:174;:::o;23092:366::-;23234:3;23255:67;23319:2;23314:3;23255:67;:::i;:::-;23248:74;;23331:93;23420:3;23331:93;:::i;:::-;23449:2;23444:3;23440:12;23433:19;;23092:366;;;:::o;23464:419::-;23630:4;23668:2;23657:9;23653:18;23645:26;;23717:9;23711:4;23707:20;23703:1;23692:9;23688:17;23681:47;23745:131;23871:4;23745:131;:::i;:::-;23737:139;;23464:419;;;:::o;23889:320::-;24004:4;24042:2;24031:9;24027:18;24019:26;;24055:71;24123:1;24112:9;24108:17;24099:6;24055:71;:::i;:::-;24136:66;24198:2;24187:9;24183:18;24174:6;24136:66;:::i;:::-;23889:320;;;;;:::o;24215:168::-;24355:20;24351:1;24343:6;24339:14;24332:44;24215:168;:::o;24389:366::-;24531:3;24552:67;24616:2;24611:3;24552:67;:::i;:::-;24545:74;;24628:93;24717:3;24628:93;:::i;:::-;24746:2;24741:3;24737:12;24730:19;;24389:366;;;:::o;24761:419::-;24927:4;24965:2;24954:9;24950:18;24942:26;;25014:9;25008:4;25004:20;25000:1;24989:9;24985:17;24978:47;25042:131;25168:4;25042:131;:::i;:::-;25034:139;;24761:419;;;:::o;25186:173::-;25326:25;25322:1;25314:6;25310:14;25303:49;25186:173;:::o;25365:366::-;25507:3;25528:67;25592:2;25587:3;25528:67;:::i;:::-;25521:74;;25604:93;25693:3;25604:93;:::i;:::-;25722:2;25717:3;25713:12;25706:19;;25365:366;;;:::o;25737:419::-;25903:4;25941:2;25930:9;25926:18;25918:26;;25990:9;25984:4;25980:20;25976:1;25965:9;25961:17;25954:47;26018:131;26144:4;26018:131;:::i;:::-;26010:139;;25737:419;;;:::o;26162:225::-;26302:34;26298:1;26290:6;26286:14;26279:58;26371:8;26366:2;26358:6;26354:15;26347:33;26162:225;:::o;26393:366::-;26535:3;26556:67;26620:2;26615:3;26556:67;:::i;:::-;26549:74;;26632:93;26721:3;26632:93;:::i;:::-;26750:2;26745:3;26741:12;26734:19;;26393:366;;;:::o;26765:419::-;26931:4;26969:2;26958:9;26954:18;26946:26;;27018:9;27012:4;27008:20;27004:1;26993:9;26989:17;26982:47;27046:131;27172:4;27046:131;:::i;:::-;27038:139;;26765:419;;;:::o;27190:147::-;27291:11;27328:3;27313:18;;27190:147;;;;:::o;27343:114::-;;:::o;27463:398::-;27622:3;27643:83;27724:1;27719:3;27643:83;:::i;:::-;27636:90;;27735:93;27824:3;27735:93;:::i;:::-;27853:1;27848:3;27844:11;27837:18;;27463:398;;;:::o;27867:379::-;28051:3;28073:147;28216:3;28073:147;:::i;:::-;28066:154;;28237:3;28230:10;;27867:379;;;:::o;28252:167::-;28392:19;28388:1;28380:6;28376:14;28369:43;28252:167;:::o;28425:366::-;28567:3;28588:67;28652:2;28647:3;28588:67;:::i;:::-;28581:74;;28664:93;28753:3;28664:93;:::i;:::-;28782:2;28777:3;28773:12;28766:19;;28425:366;;;:::o;28797:419::-;28963:4;29001:2;28990:9;28986:18;28978:26;;29050:9;29044:4;29040:20;29036:1;29025:9;29021:17;29014:47;29078:131;29204:4;29078:131;:::i;:::-;29070:139;;28797:419;;;:::o;29222:332::-;29343:4;29381:2;29370:9;29366:18;29358:26;;29394:71;29462:1;29451:9;29447:17;29438:6;29394:71;:::i;:::-;29475:72;29543:2;29532:9;29528:18;29519:6;29475:72;:::i;:::-;29222:332;;;;;:::o;29560:223::-;29700:34;29696:1;29688:6;29684:14;29677:58;29769:6;29764:2;29756:6;29752:15;29745:31;29560:223;:::o;29789:366::-;29931:3;29952:67;30016:2;30011:3;29952:67;:::i;:::-;29945:74;;30028:93;30117:3;30028:93;:::i;:::-;30146:2;30141:3;30137:12;30130:19;;29789:366;;;:::o;30161:419::-;30327:4;30365:2;30354:9;30350:18;30342:26;;30414:9;30408:4;30404:20;30400:1;30389:9;30385:17;30378:47;30442:131;30568:4;30442:131;:::i;:::-;30434:139;;30161:419;;;:::o;30586:221::-;30726:34;30722:1;30714:6;30710:14;30703:58;30795:4;30790:2;30782:6;30778:15;30771:29;30586:221;:::o;30813:366::-;30955:3;30976:67;31040:2;31035:3;30976:67;:::i;:::-;30969:74;;31052:93;31141:3;31052:93;:::i;:::-;31170:2;31165:3;31161:12;31154:19;;30813:366;;;:::o;31185:419::-;31351:4;31389:2;31378:9;31374:18;31366:26;;31438:9;31432:4;31428:20;31424:1;31413:9;31409:17;31402:47;31466:131;31592:4;31466:131;:::i;:::-;31458:139;;31185:419;;;:::o;31610:179::-;31750:31;31746:1;31738:6;31734:14;31727:55;31610:179;:::o;31795:366::-;31937:3;31958:67;32022:2;32017:3;31958:67;:::i;:::-;31951:74;;32034:93;32123:3;32034:93;:::i;:::-;32152:2;32147:3;32143:12;32136:19;;31795:366;;;:::o;32167:419::-;32333:4;32371:2;32360:9;32356:18;32348:26;;32420:9;32414:4;32410:20;32406:1;32395:9;32391:17;32384:47;32448:131;32574:4;32448:131;:::i;:::-;32440:139;;32167:419;;;:::o;32592:168::-;32732:20;32728:1;32720:6;32716:14;32709:44;32592:168;:::o;32766:366::-;32908:3;32929:67;32993:2;32988:3;32929:67;:::i;:::-;32922:74;;33005:93;33094:3;33005:93;:::i;:::-;33123:2;33118:3;33114:12;33107:19;;32766:366;;;:::o;33138:419::-;33304:4;33342:2;33331:9;33327:18;33319:26;;33391:9;33385:4;33381:20;33377:1;33366:9;33362:17;33355:47;33419:131;33545:4;33419:131;:::i;:::-;33411:139;;33138:419;;;:::o;33563:137::-;33617:5;33648:6;33642:13;33633:22;;33664:30;33688:5;33664:30;:::i;:::-;33563:137;;;;:::o;33706:345::-;33773:6;33822:2;33810:9;33801:7;33797:23;33793:32;33790:119;;;33828:79;;:::i;:::-;33790:119;33948:1;33973:61;34026:7;34017:6;34006:9;34002:22;33973:61;:::i;:::-;33963:71;;33919:125;33706:345;;;;:::o;34057:229::-;34197:34;34193:1;34185:6;34181:14;34174:58;34266:12;34261:2;34253:6;34249:15;34242:37;34057:229;:::o;34292:366::-;34434:3;34455:67;34519:2;34514:3;34455:67;:::i;:::-;34448:74;;34531:93;34620:3;34531:93;:::i;:::-;34649:2;34644:3;34640:12;34633:19;;34292:366;;;:::o;34664:419::-;34830:4;34868:2;34857:9;34853:18;34845:26;;34917:9;34911:4;34907:20;34903:1;34892:9;34888:17;34881:47;34945:131;35071:4;34945:131;:::i;:::-;34937:139;;34664:419;;;:::o;35089:157::-;35229:9;35225:1;35217:6;35213:14;35206:33;35089:157;:::o;35252:365::-;35394:3;35415:66;35479:1;35474:3;35415:66;:::i;:::-;35408:73;;35490:93;35579:3;35490:93;:::i;:::-;35608:2;35603:3;35599:12;35592:19;;35252:365;;;:::o;35623:419::-;35789:4;35827:2;35816:9;35812:18;35804:26;;35876:9;35870:4;35866:20;35862:1;35851:9;35847:17;35840:47;35904:131;36030:4;35904:131;:::i;:::-;35896:139;;35623:419;;;:::o;36048:160::-;36188:12;36184:1;36176:6;36172:14;36165:36;36048:160;:::o;36214:366::-;36356:3;36377:67;36441:2;36436:3;36377:67;:::i;:::-;36370:74;;36453:93;36542:3;36453:93;:::i;:::-;36571:2;36566:3;36562:12;36555:19;;36214:366;;;:::o;36586:419::-;36752:4;36790:2;36779:9;36775:18;36767:26;;36839:9;36833:4;36829:20;36825:1;36814:9;36810:17;36803:47;36867:131;36993:4;36867:131;:::i;:::-;36859:139;;36586:419;;;:::o;37011:224::-;37151:34;37147:1;37139:6;37135:14;37128:58;37220:7;37215:2;37207:6;37203:15;37196:32;37011:224;:::o;37241:366::-;37383:3;37404:67;37468:2;37463:3;37404:67;:::i;:::-;37397:74;;37480:93;37569:3;37480:93;:::i;:::-;37598:2;37593:3;37589:12;37582:19;;37241:366;;;:::o;37613:419::-;37779:4;37817:2;37806:9;37802:18;37794:26;;37866:9;37860:4;37856:20;37852:1;37841:9;37837:17;37830:47;37894:131;38020:4;37894:131;:::i;:::-;37886:139;;37613:419;;;:::o;38038:222::-;38178:34;38174:1;38166:6;38162:14;38155:58;38247:5;38242:2;38234:6;38230:15;38223:30;38038:222;:::o;38266:366::-;38408:3;38429:67;38493:2;38488:3;38429:67;:::i;:::-;38422:74;;38505:93;38594:3;38505:93;:::i;:::-;38623:2;38618:3;38614:12;38607:19;;38266:366;;;:::o;38638:419::-;38804:4;38842:2;38831:9;38827:18;38819:26;;38891:9;38885:4;38881:20;38877:1;38866:9;38862:17;38855:47;38919:131;39045:4;38919:131;:::i;:::-;38911:139;;38638:419;;;:::o;39063:225::-;39203:34;39199:1;39191:6;39187:14;39180:58;39272:8;39267:2;39259:6;39255:15;39248:33;39063:225;:::o;39294:366::-;39436:3;39457:67;39521:2;39516:3;39457:67;:::i;:::-;39450:74;;39533:93;39622:3;39533:93;:::i;:::-;39651:2;39646:3;39642:12;39635:19;;39294:366;;;:::o;39666:419::-;39832:4;39870:2;39859:9;39855:18;39847:26;;39919:9;39913:4;39909:20;39905:1;39894:9;39890:17;39883:47;39947:131;40073:4;39947:131;:::i;:::-;39939:139;;39666:419;;;:::o;40091:225::-;40231:34;40227:1;40219:6;40215:14;40208:58;40300:8;40295:2;40287:6;40283:15;40276:33;40091:225;:::o;40322:366::-;40464:3;40485:67;40549:2;40544:3;40485:67;:::i;:::-;40478:74;;40561:93;40650:3;40561:93;:::i;:::-;40679:2;40674:3;40670:12;40663:19;;40322:366;;;:::o;40694:419::-;40860:4;40898:2;40887:9;40883:18;40875:26;;40947:9;40941:4;40937:20;40933:1;40922:9;40918:17;40911:47;40975:131;41101:4;40975:131;:::i;:::-;40967:139;;40694:419;;;:::o;41119:98::-;41170:6;41204:5;41198:12;41188:22;;41119:98;;;:::o;41223:386::-;41327:3;41355:38;41387:5;41355:38;:::i;:::-;41409:88;41490:6;41485:3;41409:88;:::i;:::-;41402:95;;41506:65;41564:6;41559:3;41552:4;41545:5;41541:16;41506:65;:::i;:::-;41596:6;41591:3;41587:16;41580:23;;41331:278;41223:386;;;;:::o;41615:271::-;41745:3;41767:93;41856:3;41847:6;41767:93;:::i;:::-;41760:100;;41877:3;41870:10;;41615:271;;;;:::o;41892:179::-;42032:31;42028:1;42020:6;42016:14;42009:55;41892:179;:::o;42077:366::-;42219:3;42240:67;42304:2;42299:3;42240:67;:::i;:::-;42233:74;;42316:93;42405:3;42316:93;:::i;:::-;42434:2;42429:3;42425:12;42418:19;;42077:366;;;:::o;42449:419::-;42615:4;42653:2;42642:9;42638:18;42630:26;;42702:9;42696:4;42692:20;42688:1;42677:9;42673:17;42666:47;42730:131;42856:4;42730:131;:::i;:::-;42722:139;;42449:419;;;:::o

Swarm Source

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