ETH Price: $2,287.62 (-3.92%)
Gas: 3.57 Gwei

Token

Otto AI ($OTTOAI)
 

Overview

Max Total Supply

1,000,000,000 $OTTOAI

Holders

9

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
5,121,128.218471947 $OTTOAI

Value
$0.00
0x2b1f442b39aa8e2483344dbe2c9b77eae7703783
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:
OttoAI

Compiler Version
v0.8.24+commit.e11b9ed9

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-03-16
*/

// SPDX-License-Identifier: MIT
// Telegram: https://home.ottoland.ai/otto
// Website: https://home.ottoland.ai/otto

pragma solidity >=0.6.0 <0.9.0;

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function decimals() external view returns (uint8);
    function symbol() external view returns (string memory);
    function name() external view returns (string memory);
    function getOwner() external view returns (address);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address _owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

interface IFactoryV2 {
    event PairCreated(address indexed token0, address indexed token1, address lpPair, uint);
    function getPair(address tokenA, address tokenB) external view returns (address lpPair);
    function createPair(address tokenA, address tokenB) external returns (address lpPair);
}

interface IV2Pair {
    function factory() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function sync() external;
}

interface IRouter01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function swapExactETHForTokens(
        uint amountOutMin, 
        address[] calldata path, 
        address to, uint deadline
    ) external payable returns (uint[] memory amounts);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

interface IRouter02 is IRouter01 {
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
}

interface IInitializer {
    function setLaunch(address _initialLpPair, uint32 _liqAddBlock, uint64 _liqAddStamp, uint8 dec) external;
    function getConfig() external returns (address, address);
    function getInits(uint256 amount) external returns (uint256, uint256);
    function setLpPair(address pair, bool enabled) external;
}

interface IStaking {
    function addRewards(uint256 rewardAmount) external;
}

contract OttoAI is IERC20 {
    mapping (address => uint256) private _tOwned;
    mapping (address => bool) lpPairs;
    uint256 private timeSinceLastPair = 0;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => bool) private _liquidityHolders;
    mapping (address => bool) private _isExcludedFromProtection;
    mapping (address => bool) private _isExcludedFromFees;
    uint256 constant private startingSupply = 1_000_000_000;
    string constant private _name = "Otto AI";
    string constant private _symbol = "$OTTOAI";
    uint8 constant private _decimals = 9;
    uint256 constant private _tTotal = startingSupply * 10**_decimals;

    struct Fees {
        uint16 buyFee;
        uint16 sellFee;
        uint16 transferFee;
    }

    struct Ratios {
        uint16 marketing;
        uint16 development;
        uint16 staking;
        uint16 team;
        uint16 totalSwap;
    }

    Fees public _taxRates = Fees({
        buyFee: 400,
        sellFee: 400,
        transferFee: 0
    });

    Ratios public _ratios = Ratios({
        marketing: 1,
        development: 1,
        staking: 1,
        team: 1,
        totalSwap: 4
    });

    uint256 constant public maxBuyTaxes = 1000;
    uint256 constant public maxSellTaxes = 1000;
    uint256 constant public maxTransferTaxes = 1000;
    uint256 constant masterTaxDivisor = 10000;

    bool public taxesAreLocked;
    bool public addRewardsEnabled;

    IRouter02 public dexRouter;
    address public lpPair;
    address constant public DEAD = 0x000000000000000000000000000000000000dEaD;

    struct TaxWallets {
        address payable marketing;
        address payable development;
        address payable team;
        address payable staking;
    }

    struct TokenDistributionWallets {
        address team_advisors;
        address marketing;
        address liquidity_operations;
    }

    TaxWallets public _taxWallets = TaxWallets({
        marketing: payable(0x4E8b4f91088A6d4C38E1D52c751035F3a34b6c9c),
        development: payable(0xB0042e56223fDFBcE6426D6C9650431642Df4440),
        team: payable(0xB4711E55d82D61d88A3f8fd092D2944eEF6b9651),
        staking: payable(0xbc865c58f26c86B9aA240a1F34d5b9e62Ad2bcDC)
    });

    TokenDistributionWallets public tokenDistributionWallets = TokenDistributionWallets({
        team_advisors: 0x14a05C5f1Aa0D4Dd3F59BeCE564C451B0f948094,
        marketing: 0x4E8b4f91088A6d4C38E1D52c751035F3a34b6c9c,
        liquidity_operations: 0xB9FB6DbA5d82c3BB58cE76cc826dAa2Cf26FfaA1
    });
    
    bool inSwap;
    bool public contractSwapEnabled = false;
    uint256 public swapThreshold;
    uint256 public swapAmount;
    bool public piContractSwapsEnabled;
    uint256 public piSwapPercent = 10;
    bool public tradingEnabled = false;
    bool public _hasLiqBeenAdded = false;
    IInitializer initializer;
    uint256 public launchStamp;

    event ContractSwapEnabledUpdated(bool enabled);
    event AutoLiquify(uint256 amountCurrency, uint256 amountTokens);

    modifier inSwapFlag {
        inSwap = true;
        _;
        inSwap = false;
    }

    constructor () payable {
        // Set the owner.
        _owner = msg.sender;

        _tOwned[tokenDistributionWallets.team_advisors] = _tTotal * 125 / 1000;
        _tOwned[tokenDistributionWallets.marketing] = _tTotal * 75 / 1000;
        _tOwned[tokenDistributionWallets.liquidity_operations] = _tTotal * 800 / 1000;

        emit Transfer(address(0), _owner, _tTotal);

        _isExcludedFromFees[_owner] = true;
        _isExcludedFromFees[address(this)] = true;
        _isExcludedFromFees[DEAD] = true;
        _liquidityHolders[_owner] = true;

        _isExcludedFromFees[0x407993575c91ce7643a4d4cCACc9A98c36eE1BBE] = true; // PinkLock
        _isExcludedFromFees[0x663A5C229c09b049E36dCc11a9B0d4a8Eb9db214] = true; // Unicrypt (ETH)
        _isExcludedFromFees[0xDba68f07d1b7Ca219f78ae8582C213d975c25cAf] = true; // Unicrypt (ETH)
    }

//===============================================================================================================
//===============================================================================================================
//===============================================================================================================
    // Ownable removed as a lib and added here to allow for custom transfers and renouncements.
    // This allows for removal of ownership privileges from the owner once renounced or transferred.

    address private _owner;

    modifier onlyOwner() { require(_owner == msg.sender, "Caller =/= owner."); _; }
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    function transferOwner(address newOwner) external onlyOwner {
        require(newOwner != address(0), "Call renounceOwnership to transfer owner to the zero address.");
        require(newOwner != DEAD, "Call renounceOwnership to transfer owner to the zero address.");
        setExcludedFromFees(_owner, false);
        setExcludedFromFees(newOwner, true);
        
        if (balanceOf(_owner) > 0) {
            finalizeTransfer(_owner, newOwner, balanceOf(_owner), false, false, true);
        }
        
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
        
    }

    function renounceOwnership() external onlyOwner {
        require(tradingEnabled, "Cannot renounce until trading has been enabled.");
        setExcludedFromFees(_owner, false);
        address oldOwner = _owner;
        _owner = address(0);
        emit OwnershipTransferred(oldOwner, address(0));
    }

//===============================================================================================================
//===============================================================================================================
//===============================================================================================================

    receive() external payable {}
    function totalSupply() external pure override returns (uint256) { return _tTotal; }
    function decimals() external pure override returns (uint8) { return _decimals; }
    function symbol() external pure override returns (string memory) { return _symbol; }
    function name() external pure override returns (string memory) { return _name; }
    function getOwner() external view override returns (address) { return _owner; }
    function allowance(address holder, address spender) external view override returns (uint256) { return _allowances[holder][spender]; }
    function balanceOf(address account) public view override returns (uint256) {
        return _tOwned[account];
    }

    function transfer(address recipient, uint256 amount) public override returns (bool) {
        _transfer(msg.sender, recipient, amount);
        return true;
    }

    function approve(address spender, uint256 amount) external override returns (bool) {
        _approve(msg.sender, spender, amount);
        return true;
    }

    function _approve(address sender, address spender, uint256 amount) internal {
        require(sender != address(0), "ERC20: Zero Address");
        require(spender != address(0), "ERC20: Zero Address");

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

    function approveContractContingency() external onlyOwner returns (bool) {
        _approve(address(this), address(dexRouter), type(uint256).max);
        return true;
    }

    function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) {
        if (_allowances[sender][msg.sender] != type(uint256).max) {
            _allowances[sender][msg.sender] -= amount;
        }

        return _transfer(sender, recipient, amount);
    }

    function setNewRouter(address newRouter) external onlyOwner {
        require(!_hasLiqBeenAdded, "Cannot change after liquidity.");
        IRouter02 _newRouter = IRouter02(newRouter);
        address get_pair = IFactoryV2(_newRouter.factory()).getPair(address(this), _newRouter.WETH());
        lpPairs[lpPair] = false;
        if (get_pair == address(0)) {
            lpPair = IFactoryV2(_newRouter.factory()).createPair(address(this), _newRouter.WETH());
        }
        else {
            lpPair = get_pair;
        }
        dexRouter = _newRouter;
        lpPairs[lpPair] = true;
        _approve(address(this), address(dexRouter), type(uint256).max);
    }

    function setLpPair(address pair, bool enabled) external onlyOwner {
        if (!enabled) {
            lpPairs[pair] = false;
            initializer.setLpPair(pair, false);
        } else {
            if (timeSinceLastPair != 0) {
                require(block.timestamp - timeSinceLastPair > 3 days, "3 Day cooldown.");
            }
            require(!lpPairs[pair], "Pair already added to list.");
            lpPairs[pair] = true;
            timeSinceLastPair = block.timestamp;
            initializer.setLpPair(pair, true);
        }
    }

    function setInitializer(address init) public onlyOwner {
        require(!tradingEnabled);
        require(init != address(this), "Can't be self.");
        initializer = IInitializer(init);
        try initializer.getConfig() returns (address router, address constructorLP) {
            dexRouter = IRouter02(router); lpPair = constructorLP; lpPairs[lpPair] = true; 
            _approve(_owner, address(dexRouter), type(uint256).max);
            _approve(address(this), address(dexRouter), type(uint256).max);
        } catch { revert(); }
    }

    function isExcludedFromFees(address account) external view returns(bool) {
        return _isExcludedFromFees[account];
    }

    function setExcludedFromFees(address account, bool enabled) public onlyOwner {
        _isExcludedFromFees[account] = enabled;
    }

    function isExcludedFromProtection(address account) external view returns (bool) {
        return _isExcludedFromProtection[account];
    }

    function setExcludedFromProtection(address account, bool enabled) external onlyOwner {
        _isExcludedFromProtection[account] = enabled;
    }

    function getCirculatingSupply() public view returns (uint256) {
        return (_tTotal - (balanceOf(DEAD) + balanceOf(address(0))));
    }

    function lockTaxes() external onlyOwner {
        // This will lock taxes at their current value forever, do not call this unless you're sure.
        taxesAreLocked = true;
    }

    function setTaxes(uint16 buyFee, uint16 sellFee, uint16 transferFee) external onlyOwner {
        require(!taxesAreLocked, "Taxes are locked.");
        if (block.timestamp >= launchStamp + 1 hours && launchStamp != 0) {
            require(buyFee <= maxBuyTaxes
                    && sellFee <= maxSellTaxes
                    && transferFee <= maxTransferTaxes,
                    "Cannot exceed maximums.");
        }
        _taxRates.buyFee = buyFee;
        _taxRates.sellFee = sellFee;
        _taxRates.transferFee = transferFee;
    }

    function setRatios(uint16 marketing, uint16 development, uint16 team, uint16 staking) external onlyOwner {
        _ratios.marketing = marketing;
        _ratios.development = development;
        _ratios.team = team;
        _ratios.staking = staking;
        _ratios.totalSwap = marketing + staking + development + team;
        uint256 total = _taxRates.buyFee + _taxRates.sellFee;
        require(_ratios.totalSwap <= total, "Cannot exceed sum of buy and sell fees.");
    }

    function setWallets(address payable marketing, address payable staking, address payable development, address payable team) external onlyOwner {
        require(marketing != address(0) && staking != address(0) && development != address(0) && team != address(0), "Cannot be zero address.");
        _taxWallets.marketing = payable(marketing);
        _taxWallets.development = payable(development);
        _taxWallets.staking = payable(staking);
        _taxWallets.team = payable(team);
    }

    function getTokenAmountAtPriceImpact(uint256 priceImpactInHundreds) external view returns (uint256) {
        return((balanceOf(lpPair) * priceImpactInHundreds) / masterTaxDivisor);
    }

    function setSwapSettings(uint256 thresholdPercent, uint256 thresholdDivisor, uint256 amountPercent, uint256 amountDivisor) external onlyOwner {
        swapThreshold = (_tTotal * thresholdPercent) / thresholdDivisor;
        swapAmount = (_tTotal * amountPercent) / amountDivisor;
        require(swapThreshold <= swapAmount, "Threshold cannot be above amount.");
        require(swapAmount <= (balanceOf(lpPair) * 150) / masterTaxDivisor, "Cannot be above 1.5% of current PI.");
        require(swapAmount >= _tTotal / 1_000_000, "Cannot be lower than 0.00001% of total supply.");
        require(swapThreshold >= _tTotal / 1_000_000, "Cannot be lower than 0.00001% of total supply.");
    }

    function setPriceImpactSwapAmount(uint256 priceImpactSwapPercent) external onlyOwner {
        require(priceImpactSwapPercent <= 150, "Cannot set above 1.5%.");
        piSwapPercent = priceImpactSwapPercent;
    }

    function setContractSwapEnabled(bool swapEnabled, bool priceImpactSwapEnabled) external onlyOwner {
        contractSwapEnabled = swapEnabled;
        piContractSwapsEnabled = priceImpactSwapEnabled;
        emit ContractSwapEnabledUpdated(swapEnabled);
    }

    function _hasLimits(address from, address to) internal view returns (bool) {
        return from != _owner
            && to != _owner
            && tx.origin != _owner
            && !_liquidityHolders[to]
            && !_liquidityHolders[from]
            && to != DEAD
            && to != address(0)
            && from != address(this)
            && from != address(initializer)
            && to != address(initializer);
    }

    function _transfer(address from, address to, uint256 amount) internal returns (bool) {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        bool buy = false;
        bool sell = false;
        bool other = false;
        if (lpPairs[from]) {
            buy = true;
        } else if (lpPairs[to]) {
            sell = true;
        } else {
            other = true;
        }
        if (_hasLimits(from, to)) {
            if(!tradingEnabled) {
                if (!other) {
                    revert("Trading not yet enabled!");
                } else if (!_isExcludedFromProtection[from] && !_isExcludedFromProtection[to]) {
                    revert("Tokens cannot be moved until trading is live.");
                }
            }
        }

        if (sell) {
            if (!inSwap) {
                if (contractSwapEnabled) {
                    uint256 contractTokenBalance = balanceOf(address(this));
                    if (contractTokenBalance >= swapThreshold) {
                        uint256 swapAmt = swapAmount;
                        if (piContractSwapsEnabled) { swapAmt = (balanceOf(lpPair) * piSwapPercent) / masterTaxDivisor; }
                        if (contractTokenBalance >= swapAmt) { contractTokenBalance = swapAmt; }
                        contractSwap(contractTokenBalance);
                    }
                }
            }
        }
        return finalizeTransfer(from, to, amount, buy, sell, other);
    }

    function contractSwap(uint256 contractTokenBalance) internal inSwapFlag {
        Ratios memory ratios = _ratios;
        if (ratios.totalSwap == 0) {
            return;
        }

        if (_allowances[address(this)][address(dexRouter)] != type(uint256).max) {
            _allowances[address(this)][address(dexRouter)] = type(uint256).max;
        }
       
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = dexRouter.WETH();

        try dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            contractTokenBalance,
            0,
            path,
            address(this),
            block.timestamp
        ) {} catch {
            return;
        }

        uint256 amtBalance = address(this).balance;
        bool success;
        uint256 stakingBalance = (amtBalance * ratios.staking) / ratios.totalSwap;
        uint256 developmentBalance = (amtBalance * ratios.development) / ratios.totalSwap;
        uint256 teamBalance = (amtBalance * ratios.team) / ratios.totalSwap;
        uint256 marketingBalance = amtBalance - (stakingBalance + developmentBalance + teamBalance);
        if (ratios.marketing > 0) {
            (success,) = _taxWallets.marketing.call{value: marketingBalance, gas: 55000}("");
        }
        if (ratios.staking > 0) {
            (success,) = _taxWallets.staking.call{value: stakingBalance, gas: 55000}("");
            if (addRewardsEnabled) {
                try IStaking(_taxWallets.staking).addRewards(stakingBalance) {} catch {}
            }
        }
        if (ratios.development > 0) {
            (success,) = _taxWallets.development.call{value: developmentBalance, gas: 55000}("");
        }
        if (ratios.team > 0) {
            (success,) = _taxWallets.team.call{value: teamBalance, gas: 55000}("");
        }
    }

    function _checkLiquidityAdd(address from, address to) internal {
        require(!_hasLiqBeenAdded, "Liquidity already added and marked.");
        if (!_hasLimits(from, to) && to == lpPair) {
            _liquidityHolders[from] = true;
            _isExcludedFromFees[from] = true;
            _hasLiqBeenAdded = true;
            if (address(initializer) == address(0)){
                initializer = IInitializer(address(this));
            }
            contractSwapEnabled = true;
            emit ContractSwapEnabledUpdated(true);
        }
    }

    function enableTrading() public onlyOwner {
        require(!tradingEnabled, "Trading already enabled!");
        require(_hasLiqBeenAdded, "Liquidity must be added.");
        if (address(initializer) == address(0)){
            initializer = IInitializer(address(this));
        }
        try initializer.setLaunch(lpPair, uint32(block.number), uint64(block.timestamp), _decimals) {} catch {}
        try initializer.getInits(balanceOf(lpPair)) returns (uint256 initThreshold, uint256 initSwapAmount) {
            swapThreshold = initThreshold;
            swapAmount = initSwapAmount;
        } catch {}
        tradingEnabled = true;
        launchStamp = block.timestamp;
    }

    function sweepContingency() external onlyOwner {
        require(!_hasLiqBeenAdded, "Cannot call after liquidity.");
        payable(_owner).transfer(address(this).balance);
    }

    function sweepExternalTokens(address token) external onlyOwner {
        if (_hasLiqBeenAdded) {
            require(token != address(this), "Cannot sweep native tokens.");
        }
        IERC20 TOKEN = IERC20(token);
        TOKEN.transfer(_owner, TOKEN.balanceOf(address(this)));
    }

    function multiSendTokens(address[] memory accounts, uint256[] memory amounts) external onlyOwner {
        require(accounts.length == amounts.length, "Lengths do not match.");
        for (uint16 i = 0; i < accounts.length; i++) {
            require(balanceOf(msg.sender) >= amounts[i]*10**_decimals, "Not enough tokens.");
            finalizeTransfer(msg.sender, accounts[i], amounts[i]*10**_decimals, false, false, true);
        }
    }

    function finalizeTransfer(address from, address to, uint256 amount, bool buy, bool sell, bool other) internal returns (bool) {
        bool takeFee = true;
        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]){
            takeFee = false;
        }

        _tOwned[from] -= amount;
        uint256 amountReceived = (takeFee) ? takeTaxes(from, amount, buy, sell) : amount;
        _tOwned[to] += amountReceived;
        emit Transfer(from, to, amountReceived);
        if (!_hasLiqBeenAdded) {
            _checkLiquidityAdd(from, to);
            if (!_hasLiqBeenAdded && _hasLimits(from, to) && !_isExcludedFromProtection[from] && !_isExcludedFromProtection[to] && !other) {
                revert("Pre-liquidity transfer protection.");
            }
        }
        return true;
    }

    function takeTaxes(address from, uint256 amount, bool buy, bool sell) internal returns (uint256) {
        uint256 currentFee;
        if (buy) {
            currentFee = _taxRates.buyFee;
        } else if (sell) {
            currentFee = _taxRates.sellFee;
        } else {
            currentFee = _taxRates.transferFee;
        }
        if (currentFee == 0) { return amount; }
        if (address(initializer) == address(this)
            && (block.chainid == 1
            || block.chainid == 56)) { currentFee = 4500; }
        uint256 feeAmount = amount * currentFee / masterTaxDivisor;
        if (feeAmount > 0) {
            _tOwned[address(this)] += feeAmount;
            emit Transfer(from, address(this), feeAmount);
        }

        return amount - feeAmount;
    }

    function enableAddRewards(bool _enable) external onlyOwner {
        addRewardsEnabled = _enable;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"payable","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":"amountCurrency","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountTokens","type":"uint256"}],"name":"AutoLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"ContractSwapEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DEAD","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_hasLiqBeenAdded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_ratios","outputs":[{"internalType":"uint16","name":"marketing","type":"uint16"},{"internalType":"uint16","name":"development","type":"uint16"},{"internalType":"uint16","name":"staking","type":"uint16"},{"internalType":"uint16","name":"team","type":"uint16"},{"internalType":"uint16","name":"totalSwap","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxRates","outputs":[{"internalType":"uint16","name":"buyFee","type":"uint16"},{"internalType":"uint16","name":"sellFee","type":"uint16"},{"internalType":"uint16","name":"transferFee","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxWallets","outputs":[{"internalType":"address payable","name":"marketing","type":"address"},{"internalType":"address payable","name":"development","type":"address"},{"internalType":"address payable","name":"team","type":"address"},{"internalType":"address payable","name":"staking","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"addRewardsEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","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":[],"name":"approveContractContingency","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractSwapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IRouter02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_enable","type":"bool"}],"name":"enableAddRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"priceImpactInHundreds","type":"uint256"}],"name":"getTokenAmountAtPriceImpact","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromProtection","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchStamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lockTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBuyTaxes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellTaxes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransferTaxes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"multiSendTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"piContractSwapsEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"piSwapPercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"swapEnabled","type":"bool"},{"internalType":"bool","name":"priceImpactSwapEnabled","type":"bool"}],"name":"setContractSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromProtection","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"init","type":"address"}],"name":"setInitializer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setLpPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"setNewRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"priceImpactSwapPercent","type":"uint256"}],"name":"setPriceImpactSwapAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"marketing","type":"uint16"},{"internalType":"uint16","name":"development","type":"uint16"},{"internalType":"uint16","name":"team","type":"uint16"},{"internalType":"uint16","name":"staking","type":"uint16"}],"name":"setRatios","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"thresholdPercent","type":"uint256"},{"internalType":"uint256","name":"thresholdDivisor","type":"uint256"},{"internalType":"uint256","name":"amountPercent","type":"uint256"},{"internalType":"uint256","name":"amountDivisor","type":"uint256"}],"name":"setSwapSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"buyFee","type":"uint16"},{"internalType":"uint16","name":"sellFee","type":"uint16"},{"internalType":"uint16","name":"transferFee","type":"uint16"}],"name":"setTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"marketing","type":"address"},{"internalType":"address payable","name":"staking","type":"address"},{"internalType":"address payable","name":"development","type":"address"},{"internalType":"address payable","name":"team","type":"address"}],"name":"setWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sweepContingency","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"sweepExternalTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"taxesAreLocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenDistributionWallets","outputs":[{"internalType":"address","name":"team_advisors","type":"address"},{"internalType":"address","name":"marketing","type":"address"},{"internalType":"address","name":"liquidity_operations","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","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":"transferOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

5f6002819055610190608081905260a05260c0526007805465ffffffffffff19166301900190179055600160e08190526101008190526101208190526101405260046101605260088054680400010001000100016001600160501b0319909116179055734e8b4f91088a6d4c38e1d52c751035f3a34b6c9c61018081905273b0042e56223fdfbce6426d6c9650431642df44406101a081905273b4711e55d82d61d88a3f8fd092d2944eef6b96516101c081905273bc865c58f26c86b9aa240a1f34d5b9e62ad2bcdc6101e0819052600b80546001600160a01b03199081168617909155600c80548216909417909355600d80548416909217909155600e8054831690911790556102606040527314a05c5f1aa0d4dd3f59bece564c451b0f94809461020081905261022083905273b9fb6dba5d82c3bb58ce76cc826daa2cf26ffaa1610240819052600f805484169092179091556010805483169093179092556011805482169092179091556012805461ff0019169055600a60168190556017805461ffff191690556019805490921633179091556103e890620001a7906009906200050f565b620001b790633b9aca0062000526565b620001c490607d62000526565b620001d0919062000540565b600f546001600160a01b03165f908152602081905260409020556103e8620001fb6009600a6200050f565b6200020b90633b9aca0062000526565b6200021890604b62000526565b62000224919062000540565b6010546001600160a01b03165f908152602081905260409020556103e86200024f6009600a6200050f565b6200025f90633b9aca0062000526565b6200026d9061032062000526565b62000279919062000540565b6011546001600160a01b039081165f9081526020819052604081209290925560195416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef620002cc6009600a6200050f565b620002dc90633b9aca0062000526565b60405190815260200160405180910390a3601980546001600160a01b039081165f9081526006602081815260408084208054600160ff19918216811790925530865282862080548216831790557f1aecba4ebe7a4e0673e4891b2b092b2228e4322380b579fb494fad3da8586e228054821683179055965490951684526004825283208054861685179055527f9f0450866e340883c5637ebf25d629ea9e0ea06bf9caa3748b581238b1bc2bb980548416831790557f9b00c99845a242ceea732a2478bee8e7b057d22892cafbdc32d0e607c88ddea0805484168317905573dba68f07d1b7ca219f78ae8582c213d975c25caf90527fab9d0a02af394b8961be3a9588d91fbbf70984385fd8d3031385f593b62a4bf9805490921617905562000560565b634e487b7160e01b5f52601160045260245ffd5b600181815b808511156200045457815f190482111562000438576200043862000400565b808516156200044657918102915b93841c939080029062000419565b509250929050565b5f826200046c5750600162000509565b816200047a57505f62000509565b81600181146200049357600281146200049e57620004be565b600191505062000509565b60ff841115620004b257620004b262000400565b50506001821b62000509565b5060208310610133831016604e8410600b8410161715620004e3575081810a62000509565b620004ef838362000414565b805f190482111562000505576200050562000400565b0290505b92915050565b5f6200051f60ff8416836200045c565b9392505050565b808202811582820484141762000509576200050962000400565b5f826200055b57634e487b7160e01b5f52601260045260245ffd5b500490565b6139fe806200056e5f395ff3fe60806040526004361061032a575f3560e01c8063590ffdce116101a3578063a9059cbb116100f2578063dd62ed3e11610092578063f94aa1b41161006d578063f94aa1b4146109ea578063fb78680d14610a4f578063fdb78c0e14610a6e578063feadde9c14610a8c575f80fd5b8063dd62ed3e14610973578063eafb5a3c146109b7578063ee5d9c2d146109d6575f80fd5b8063b3d514fb116100cd578063b3d514fb14610576578063b7df8b36146108c2578063bfc2fc35146108db578063cf847706146108fa575f80fd5b8063a9059cbb14610884578063ab558e4d146108a3578063b1b08f7114610576575f80fd5b806380c581d11161015d5780638a63bd9b116101385780638a63bd9b146107d75780638a8c523c146107eb57806395d89b41146107ff578063a1e900e01461082e575f80fd5b806380c581d11461077c57806383672f3e1461079b578063893d20e8146107ba575f80fd5b8063590ffdce146106e25780635a6f0918146107015780635c24b0741461071657806370a0823114610735578063715018a61461075457806378648edf14610768575f80fd5b80632857775111610279578063452ed4f1116102195780634e718e48116101f45780634e718e481461064f5780634fb2e45d1461066e5780634fbee1931461068d57806350a8e016146106c4575f80fd5b8063452ed4f1146105f85780634ada218b146106175780634bbb93eb14610630575f80fd5b80632e8fa821116102545780632e8fa8211461058b578063313ce567146105a057806332cde664146105bb57806335b90399146105da575f80fd5b8063285777511461054d5780632b112e49146105625780632b28fc7a14610576575f80fd5b806307dd79e0116102e45780630dcbcf1c116102bf5780630dcbcf1c146104c457806318160ddd146104fb57806323b872dd1461050f5780632610eaca1461052e575f80fd5b806307dd79e01461045d57806308dce6fe14610486578063095ea7b3146104a5575f80fd5b806303fd2a45146103355780630445b66714610367578063069d955f1461038a57806306fdde03146103df5780630712d165146104175780630758d92414610438575f80fd5b3661033157005b5f80fd5b348015610340575f80fd5b5061034a61dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b348015610372575f80fd5b5061037c60135481565b60405190815260200161035e565b348015610395575f80fd5b506007546103ba9061ffff808216916201000081048216916401000000009091041683565b6040805161ffff9485168152928416602084015292169181019190915260600161035e565b3480156103ea575f80fd5b506040805180820190915260078152664f74746f20414960c81b60208201525b60405161035e91906131d1565b348015610422575f80fd5b50610436610431366004613233565b610aab565b005b348015610443575f80fd5b5060095461034a906201000090046001600160a01b031681565b348015610468575f80fd5b506009546104769060ff1681565b604051901515815260200161035e565b348015610491575f80fd5b506104366104a0366004613291565b610bfd565b3480156104b0575f80fd5b506104766104bf3660046132c0565b610c41565b3480156104cf575f80fd5b506104766104de3660046132ea565b6001600160a01b03165f9081526005602052604090205460ff1690565b348015610506575f80fd5b5061037c610c57565b34801561051a575f80fd5b50610476610529366004613305565b610c77565b348015610539575f80fd5b50610436610548366004613417565b610cec565b348015610558575f80fd5b5061037c60165481565b34801561056d575f80fd5b5061037c610e67565b348015610581575f80fd5b5061037c6103e881565b348015610596575f80fd5b5061037c60145481565b3480156105ab575f80fd5b506040516009815260200161035e565b3480156105c6575f80fd5b506104366105d53660046134d3565b610eaa565b3480156105e5575f80fd5b5060095461047690610100900460ff1681565b348015610603575f80fd5b50600a5461034a906001600160a01b031681565b348015610622575f80fd5b506017546104769060ff1681565b34801561063b575f80fd5b5061037c61064a366004613513565b610ff8565b34801561065a575f80fd5b50610436610669366004613513565b611029565b348015610679575f80fd5b506104366106883660046132ea565b6110a2565b348015610698575f80fd5b506104766106a73660046132ea565b6001600160a01b03165f9081526006602052604090205460ff1690565b3480156106cf575f80fd5b5060175461047690610100900460ff1681565b3480156106ed575f80fd5b506104366106fc36600461352a565b6111c8565b34801561070c575f80fd5b5061037c60185481565b348015610721575f80fd5b506104366107303660046132ea565b61121c565b348015610740575f80fd5b5061037c61074f3660046132ea565b6113bd565b34801561075f575f80fd5b506104366113d7565b348015610773575f80fd5b506104366114ce565b348015610787575f80fd5b5061043661079636600461352a565b611507565b3480156107a6575f80fd5b506104366107b5366004613561565b6116de565b3480156107c5575f80fd5b506019546001600160a01b031661034a565b3480156107e2575f80fd5b506104766117eb565b3480156107f6575f80fd5b5061043661183c565b34801561080a575f80fd5b50604080518082019091526007815266244f54544f414960c81b602082015261040a565b348015610839575f80fd5b50600f5460105460115461085a926001600160a01b03908116928116911683565b604080516001600160a01b039485168152928416602084015292169181019190915260600161035e565b34801561088f575f80fd5b5061047661089e3660046132c0565b611a62565b3480156108ae575f80fd5b506104366108bd3660046132ea565b611a78565b3480156108cd575f80fd5b506015546104769060ff1681565b3480156108e6575f80fd5b506104366108f53660046135ba565b611bef565b348015610905575f80fd5b5060085461093e9061ffff808216916201000081048216916401000000008204811691600160301b8104821691600160401b9091041685565b6040805161ffff968716815294861660208601529285169284019290925283166060830152909116608082015260a00161035e565b34801561097e575f80fd5b5061037c61098d3660046135d6565b6001600160a01b039182165f90815260036020908152604080832093909416825291909152205490565b3480156109c2575f80fd5b506104366109d13660046132ea565b611c78565b3480156109e1575f80fd5b5061043661203e565b3480156109f5575f80fd5b50600b54600c54600d54600e54610a1c936001600160a01b03908116938116928116911684565b604080516001600160a01b039586168152938516602085015291841691830191909152909116606082015260800161035e565b348015610a5a575f80fd5b50610436610a69366004613602565b6120f6565b348015610a79575f80fd5b5060125461047690610100900460ff1681565b348015610a97575f80fd5b50610436610aa636600461352a565b612306565b6019546001600160a01b03163314610ade5760405162461bcd60e51b8152600401610ad590613631565b60405180910390fd5b6008805461ffff86811663ffffffff199092169190911762010000868316021767ffffffff000000001916600160301b8583160265ffff00000000191617640100000000918416919091021790558183610b388387613670565b610b429190613670565b610b4c9190613670565b6008805469ffff00000000000000001916600160401b61ffff938416021790556007545f91610b849162010000810482169116613670565b60085461ffff9182169250600160401b900416811015610bf65760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f74206578636565642073756d206f662062757920616e642073656c60448201526636103332b2b99760c91b6064820152608401610ad5565b5050505050565b6019546001600160a01b03163314610c275760405162461bcd60e51b8152600401610ad590613631565b600980549115156101000261ff0019909216919091179055565b5f610c4d33848461235a565b5060015b92915050565b5f610c646009600a613772565b610c7290633b9aca00613780565b905090565b6001600160a01b0383165f9081526003602090815260408083203384529091528120545f1914610cd9576001600160a01b0384165f90815260036020908152604080832033845290915281208054849290610cd3908490613797565b90915550505b610ce4848484612452565b949350505050565b6019546001600160a01b03163314610d165760405162461bcd60e51b8152600401610ad590613631565b8051825114610d5f5760405162461bcd60e51b81526020600482015260156024820152742632b733ba3439903237903737ba1036b0ba31b41760591b6044820152606401610ad5565b5f5b82518161ffff161015610e6257610d7a6009600a613772565b828261ffff1681518110610d9057610d906137aa565b6020026020010151610da29190613780565b610dab336113bd565b1015610dee5760405162461bcd60e51b81526020600482015260126024820152712737ba1032b737bab3b4103a37b5b2b7399760711b6044820152606401610ad5565b610e4f33848361ffff1681518110610e0857610e086137aa565b60200260200101516009600a610e1e9190613772565b858561ffff1681518110610e3457610e346137aa565b6020026020010151610e469190613780565b5f806001612785565b5080610e5a816137be565b915050610d61565b505050565b5f610e715f6113bd565b610e7c61dead6113bd565b610e8691906137de565b610e926009600a613772565b610ea090633b9aca00613780565b610c729190613797565b6019546001600160a01b03163314610ed45760405162461bcd60e51b8152600401610ad590613631565b60095460ff1615610f1b5760405162461bcd60e51b81526020600482015260116024820152702a30bc32b99030b932903637b1b5b2b21760791b6044820152606401610ad5565b601854610f2a90610e106137de565b4210158015610f3a575060185415155b15610fb9576103e88361ffff1611158015610f5b57506103e88261ffff1611155b8015610f6d57506103e88161ffff1611155b610fb95760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f7420657863656564206d6178696d756d732e0000000000000000006044820152606401610ad5565b6007805461ffff94851663ffffffff199091161762010000938516939093029290921765ffff0000000019166401000000009190931602919091179055565b600a545f90612710908390611015906001600160a01b03166113bd565b61101f9190613780565b610c5191906137f1565b6019546001600160a01b031633146110535760405162461bcd60e51b8152600401610ad590613631565b609681111561109d5760405162461bcd60e51b815260206004820152601660248201527521b0b73737ba1039b2ba1030b137bb329018971a929760511b6044820152606401610ad5565b601655565b6019546001600160a01b031633146110cc5760405162461bcd60e51b8152600401610ad590613631565b6001600160a01b0381166110f25760405162461bcd60e51b8152600401610ad590613810565b61deac196001600160a01b0382160161111d5760405162461bcd60e51b8152600401610ad590613810565b601954611133906001600160a01b03165f6111c8565b61113e8160016111c8565b6019545f90611155906001600160a01b03166113bd565b111561117757601954611175906001600160a01b031682610e46826113bd565b505b601980546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6019546001600160a01b031633146111f25760405162461bcd60e51b8152600401610ad590613631565b6001600160a01b03919091165f908152600660205260409020805460ff1916911515919091179055565b6019546001600160a01b031633146112465760405162461bcd60e51b8152600401610ad590613631565b60175460ff1615611255575f80fd5b306001600160a01b0382160361129e5760405162461bcd60e51b815260206004820152600e60248201526d21b0b713ba1031329039b2b6331760911b6044820152606401610ad5565b6017805462010000600160b01b031916620100006001600160a01b0384811682029290921792839055604080516330fe427560e21b81528151929094049092169263c3f909d492600480830193919282900301815f875af1925050508015611323575060408051601f3d908101601f191682019092526113209181019061386d565b60015b61132b575f80fd5b6009805462010000600160b01b031916620100006001600160a01b038581168202929092178355600a80546001600160a01b0319168584169081179091555f908152600160208190526040909120805460ff19169091179055601954925461139b93831692919004165f1961235a565b600954610e629030906201000090046001600160a01b03165f1961235a565b50565b6001600160a01b03165f9081526020819052604090205490565b6019546001600160a01b031633146114015760405162461bcd60e51b8152600401610ad590613631565b60175460ff1661146b5760405162461bcd60e51b815260206004820152602f60248201527f43616e6e6f742072656e6f756e636520756e74696c2074726164696e6720686160448201526e39903132b2b71032b730b13632b21760891b6064820152608401610ad5565b601954611481906001600160a01b03165f6111c8565b601980546001600160a01b031981169091556040516001600160a01b03909116905f9082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a350565b6019546001600160a01b031633146114f85760405162461bcd60e51b8152600401610ad590613631565b6009805460ff19166001179055565b6019546001600160a01b031633146115315760405162461bcd60e51b8152600401610ad590613631565b806115bb576001600160a01b038281165f81815260016020526040808220805460ff1916905560175490516380c581d160e01b815260048101939093526024830191909152620100009004909116906380c581d1906044015b5f604051808303815f87803b1580156115a1575f80fd5b505af11580156115b3573d5f803e3d5ffd5b505050505050565b60025415611614576203f480600254426115d59190613797565b116116145760405162461bcd60e51b815260206004820152600f60248201526e19902230bc9031b7b7b63237bbb71760891b6044820152606401610ad5565b6001600160a01b0382165f9081526001602052604090205460ff161561167c5760405162461bcd60e51b815260206004820152601b60248201527f5061697220616c726561647920616464656420746f206c6973742e00000000006044820152606401610ad5565b6001600160a01b038281165f81815260016020819052604091829020805460ff1916821790554260025560175491516380c581d160e01b815260048101939093526024830152620100009004909116906380c581d19060440161158a565b5050565b6019546001600160a01b031633146117085760405162461bcd60e51b8152600401610ad590613631565b6001600160a01b0384161580159061172857506001600160a01b03831615155b801561173c57506001600160a01b03821615155b801561175057506001600160a01b03811615155b61179c5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74206265207a65726f20616464726573732e0000000000000000006044820152606401610ad5565b600b80546001600160a01b03199081166001600160a01b0396871617909155600c8054821693861693909317909255600e8054831693851693909317909255600d805490911691909216179055565b6019545f906001600160a01b031633146118175760405162461bcd60e51b8152600401610ad590613631565b6009546118369030906201000090046001600160a01b03165f1961235a565b50600190565b6019546001600160a01b031633146118665760405162461bcd60e51b8152600401610ad590613631565b60175460ff16156118b95760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610ad5565b601754610100900460ff166119105760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206d7573742062652061646465642e00000000000000006044820152606401610ad5565b6017546201000090046001600160a01b0316611940576017805462010000600160b01b0319163062010000021790555b601754600a54604051631b04570d60e21b81526001600160a01b03918216600482015263ffffffff4316602482015267ffffffffffffffff4216604482015260096064820152620100009092041690636c115c34906084015f604051808303815f87803b1580156119af575f80fd5b505af19250505080156119c0575060015b50601754600a546001600160a01b03620100009092048216916325a71cae916119e991166113bd565b6040518263ffffffff1660e01b8152600401611a0791815260200190565b60408051808303815f875af1925050508015611a40575060408051601f3d908101601f19168201909252611a3d9181019061389a565b60015b15611a4f576013919091556014555b6017805460ff1916600117905542601855565b5f611a6e338484612452565b5060019392505050565b6019546001600160a01b03163314611aa25760405162461bcd60e51b8152600401610ad590613631565b601754610100900460ff1615611b0a57306001600160a01b03821603611b0a5760405162461bcd60e51b815260206004820152601b60248201527f43616e6e6f74207377656570206e617469766520746f6b656e732e00000000006044820152606401610ad5565b6019546040516370a0823160e01b815230600482015282916001600160a01b038084169263a9059cbb92919091169083906370a0823190602401602060405180830381865afa158015611b5f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b8391906138bc565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303815f875af1158015611bcb573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e6291906138d3565b6019546001600160a01b03163314611c195760405162461bcd60e51b8152600401610ad590613631565b6012805461ff001916610100841515908102919091179091556015805460ff19168315151790556040519081527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f9141053257906020015b60405180910390a15050565b6019546001600160a01b03163314611ca25760405162461bcd60e51b8152600401610ad590613631565b601754610100900460ff1615611cfa5760405162461bcd60e51b815260206004820152601e60248201527f43616e6e6f74206368616e6765206166746572206c69717569646974792e00006044820152606401610ad5565b5f8190505f816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d3b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d5f91906138ee565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611daa573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611dce91906138ee565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015611e17573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e3b91906138ee565b600a546001600160a01b039081165f908152600160205260409020805460ff191690559091508116611fc957816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ea3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ec791906138ee565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f12573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f3691906138ee565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af1158015611f80573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611fa491906138ee565b600a80546001600160a01b0319166001600160a01b0392909216919091179055611fe5565b600a80546001600160a01b0319166001600160a01b0383161790555b6009805462010000600160b01b031916620100006001600160a01b038581168202929092178355600a5482165f908152600160208190526040909120805460ff191690911790559154610e629230929104165f1961235a565b6019546001600160a01b031633146120685760405162461bcd60e51b8152600401610ad590613631565b601754610100900460ff16156120c05760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742063616c6c206166746572206c69717569646974792e000000006044820152606401610ad5565b6019546040516001600160a01b03909116904780156108fc02915f818181858888f193505050501580156113ba573d5f803e3d5ffd5b6019546001600160a01b031633146121205760405162461bcd60e51b8152600401610ad590613631565b828461212e6009600a613772565b61213c90633b9aca00613780565b6121469190613780565b61215091906137f1565b60135580826121616009600a613772565b61216f90633b9aca00613780565b6121799190613780565b61218391906137f1565b601481905560135411156121e35760405162461bcd60e51b815260206004820152602160248201527f5468726573686f6c642063616e6e6f742062652061626f766520616d6f756e746044820152601760f91b6064820152608401610ad5565b600a54612710906121fc906001600160a01b03166113bd565b612207906096613780565b61221191906137f1565b601454111561226e5760405162461bcd60e51b815260206004820152602360248201527f43616e6e6f742062652061626f766520312e3525206f662063757272656e742060448201526228249760e91b6064820152608401610ad5565b620f424061227e6009600a613772565b61228c90633b9aca00613780565b61229691906137f1565b60145410156122b75760405162461bcd60e51b8152600401610ad590613909565b620f42406122c76009600a613772565b6122d590633b9aca00613780565b6122df91906137f1565b60135410156123005760405162461bcd60e51b8152600401610ad590613909565b50505050565b6019546001600160a01b031633146123305760405162461bcd60e51b8152600401610ad590613631565b6001600160a01b03919091165f908152600560205260409020805460ff1916911515919091179055565b6001600160a01b0383166123a65760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b6044820152606401610ad5565b6001600160a01b0382166123f25760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b6044820152606401610ad5565b6001600160a01b038381165f8181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b5f6001600160a01b0384166124b75760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610ad5565b6001600160a01b0383166125195760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610ad5565b5f821161257a5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610ad5565b6001600160a01b0384165f908152600160205260408120548190819060ff16156125a757600192506125d4565b6001600160a01b0386165f9081526001602052604090205460ff16156125d057600191506125d4565b5060015b6125de8787612988565b156126dd5760175460ff166126dd578061263a5760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610ad5565b6001600160a01b0387165f9081526005602052604090205460ff1615801561267a57506001600160a01b0386165f9081526005602052604090205460ff16155b156126dd5760405162461bcd60e51b815260206004820152602d60248201527f546f6b656e732063616e6e6f74206265206d6f76656420756e74696c2074726160448201526c3234b7339034b9903634bb329760991b6064820152608401610ad5565b811561276c5760125460ff1661276c57601254610100900460ff161561276c575f612707306113bd565b9050601354811061276a5760145460155460ff161561275457601654600a54612710919061273d906001600160a01b03166113bd565b6127479190613780565b61275191906137f1565b90505b80821061275f578091505b61276882612a9c565b505b505b61277a878787868686612785565b979650505050505050565b6001600160a01b0386165f9081526006602052604081205460019060ff16806127c557506001600160a01b0387165f9081526006602052604090205460ff165b156127cd57505f5b6001600160a01b0388165f90815260208190526040812080548892906127f4908490613797565b909155505f9050816128065786612812565b61281289888888612f81565b9050805f808a6001600160a01b03166001600160a01b031681526020019081526020015f205f82825461284591906137de565b92505081905550876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161289191815260200190565b60405180910390a3601754610100900460ff16612979576128b28989613092565b601754610100900460ff161580156128cf57506128cf8989612988565b80156128f357506001600160a01b0389165f9081526005602052604090205460ff16155b801561291757506001600160a01b0388165f9081526005602052604090205460ff16155b8015612921575083155b156129795760405162461bcd60e51b815260206004820152602260248201527f5072652d6c6971756964697479207472616e736665722070726f74656374696f604482015261371760f11b6064820152608401610ad5565b50600198975050505050505050565b6019545f906001600160a01b038481169116148015906129b657506019546001600160a01b03838116911614155b80156129cd57506019546001600160a01b03163214155b80156129f157506001600160a01b0382165f9081526004602052604090205460ff16155b8015612a1557506001600160a01b0383165f9081526004602052604090205460ff16155b8015612a2c57506001600160a01b03821661dead14155b8015612a4057506001600160a01b03821615155b8015612a5557506001600160a01b0383163014155b8015612a7557506017546001600160a01b03848116620100009092041614155b8015612a9557506017546001600160a01b03838116620100009092041614155b9392505050565b6012805460ff191660011790556040805160a08101825260085461ffff8082168352620100008204811660208401526401000000008204811693830193909352600160301b810483166060830152600160401b9004909116608082018190525f03612b075750612f74565b305f9081526003602090815260408083206009546201000090046001600160a01b031684529091529020545f1914612b6857305f9081526003602090815260408083206009546201000090046001600160a01b0316845290915290205f1990555b6040805160028082526060820183525f9260208301908036833701905050905030815f81518110612b9b57612b9b6137aa565b60200260200101906001600160a01b031690816001600160a01b031681525050600960029054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c0c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612c3091906138ee565b81600181518110612c4357612c436137aa565b6001600160a01b03928316602091820292909201015260095460405163791ac94760e01b8152620100009091049091169063791ac94790612c909086905f90869030904290600401613957565b5f604051808303815f87803b158015612ca7575f80fd5b505af1925050508015612cb8575060015b612cc3575050612f74565b5f4790505f80846080015161ffff16856040015161ffff1684612ce69190613780565b612cf091906137f1565b90505f856080015161ffff16866020015161ffff1685612d109190613780565b612d1a91906137f1565b90505f866080015161ffff16876060015161ffff1686612d3a9190613780565b612d4491906137f1565b90505f81612d5284866137de565b612d5c91906137de565b612d669087613797565b885190915061ffff1615612dce57600b546040516001600160a01b039091169061d6d89083905f818181858888f193505050503d805f8114612dc3576040519150601f19603f3d011682016040523d82523d5f602084013e612dc8565b606091505b50909550505b604088015161ffff1615612e9b57600e546040516001600160a01b039091169061d6d89086905f818181858888f193505050503d805f8114612e2b576040519150601f19603f3d011682016040523d82523d5f602084013e612e30565b606091505b5050600954909550610100900460ff1615612e9b57600e5460405163beceed3960e01b8152600481018690526001600160a01b039091169063beceed39906024015f604051808303815f87803b158015612e88575f80fd5b505af1925050508015612e99575060015b505b602088015161ffff1615612f0357600c546040516001600160a01b039091169061d6d89085905f818181858888f193505050503d805f8114612ef8576040519150601f19603f3d011682016040523d82523d5f602084013e612efd565b606091505b50909550505b606088015161ffff1615612f6b57600d546040516001600160a01b039091169061d6d89084905f818181858888f193505050503d805f8114612f60576040519150601f19603f3d011682016040523d82523d5f602084013e612f65565b606091505b50909550505b50505050505050505b506012805460ff19169055565b5f808315612f96575060075461ffff16612fc0565b8215612faf575060075462010000900461ffff16612fc0565b50600754640100000000900461ffff165b805f03612fd05784915050610ce4565b6017546201000090046001600160a01b031630148015612ffa57504660011480612ffa5750466038145b1561300457506111945b5f6127106130128388613780565b61301c91906137f1565b9050801561308857305f90815260208190526040812080548392906130429084906137de565b909155505060405181815230906001600160a01b038916907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b61277a8187613797565b601754610100900460ff16156130f65760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201526232b21760e91b6064820152608401610ad5565b6131008282612988565b15801561311a5750600a546001600160a01b038281169116145b156116da576001600160a01b038083165f908152600460209081526040808320805460ff19908116600190811790925560069093529220805490911690911790556017805461ff001916610100179081905562010000900416613191576017805462010000600160b01b0319163062010000021790555b6012805461ff001916610100179055604051600181527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f914105325790602001611c6c565b5f602080835283518060208501525f5b818110156131fd578581018301518582016040015282016131e1565b505f604082860101526040601f19601f8301168501019250505092915050565b803561ffff8116811461322e575f80fd5b919050565b5f805f8060808587031215613246575f80fd5b61324f8561321d565b935061325d6020860161321d565b925061326b6040860161321d565b91506132796060860161321d565b905092959194509250565b80151581146113ba575f80fd5b5f602082840312156132a1575f80fd5b8135612a9581613284565b6001600160a01b03811681146113ba575f80fd5b5f80604083850312156132d1575f80fd5b82356132dc816132ac565b946020939093013593505050565b5f602082840312156132fa575f80fd5b8135612a95816132ac565b5f805f60608486031215613317575f80fd5b8335613322816132ac565b92506020840135613332816132ac565b929592945050506040919091013590565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561338057613380613343565b604052919050565b5f67ffffffffffffffff8211156133a1576133a1613343565b5060051b60200190565b5f82601f8301126133ba575f80fd5b813560206133cf6133ca83613388565b613357565b8083825260208201915060208460051b8701019350868411156133f0575f80fd5b602086015b8481101561340c57803583529183019183016133f5565b509695505050505050565b5f8060408385031215613428575f80fd5b823567ffffffffffffffff8082111561343f575f80fd5b818501915085601f830112613452575f80fd5b813560206134626133ca83613388565b82815260059290921b84018101918181019089841115613480575f80fd5b948201945b838610156134a7578535613498816132ac565b82529482019490820190613485565b965050860135925050808211156134bc575f80fd5b506134c9858286016133ab565b9150509250929050565b5f805f606084860312156134e5575f80fd5b6134ee8461321d565b92506134fc6020850161321d565b915061350a6040850161321d565b90509250925092565b5f60208284031215613523575f80fd5b5035919050565b5f806040838503121561353b575f80fd5b8235613546816132ac565b9150602083013561355681613284565b809150509250929050565b5f805f8060808587031215613574575f80fd5b843561357f816132ac565b9350602085013561358f816132ac565b9250604085013561359f816132ac565b915060608501356135af816132ac565b939692955090935050565b5f80604083850312156135cb575f80fd5b823561354681613284565b5f80604083850312156135e7575f80fd5b82356135f2816132ac565b91506020830135613556816132ac565b5f805f8060808587031215613615575f80fd5b5050823594602084013594506040840135936060013592509050565b60208082526011908201527021b0b63632b9101e979e9037bbb732b91760791b604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b61ffff81811683821601908082111561368b5761368b61365c565b5092915050565b600181815b808511156136cc57815f19048211156136b2576136b261365c565b808516156136bf57918102915b93841c9390800290613697565b509250929050565b5f826136e257506001610c51565b816136ee57505f610c51565b8160018114613704576002811461370e5761372a565b6001915050610c51565b60ff84111561371f5761371f61365c565b50506001821b610c51565b5060208310610133831016604e8410600b841016171561374d575081810a610c51565b6137578383613692565b805f190482111561376a5761376a61365c565b029392505050565b5f612a9560ff8416836136d4565b8082028115828204841417610c5157610c5161365c565b81810381811115610c5157610c5161365c565b634e487b7160e01b5f52603260045260245ffd5b5f61ffff8083168181036137d4576137d461365c565b6001019392505050565b80820180821115610c5157610c5161365c565b5f8261380b57634e487b7160e01b5f52601260045260245ffd5b500490565b6020808252603d908201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660408201527f6572206f776e657220746f20746865207a65726f20616464726573732e000000606082015260800190565b5f806040838503121561387e575f80fd5b8251613889816132ac565b6020840151909250613556816132ac565b5f80604083850312156138ab575f80fd5b505080516020909101519092909150565b5f602082840312156138cc575f80fd5b5051919050565b5f602082840312156138e3575f80fd5b8151612a9581613284565b5f602082840312156138fe575f80fd5b8151612a95816132ac565b6020808252602e908201527f43616e6e6f74206265206c6f776572207468616e20302e303030303125206f6660408201526d103a37ba30b61039bab838363c9760911b606082015260800190565b5f60a08201878352602087602085015260a0604085015281875180845260c0860191506020890193505f5b818110156139a75784516001600160a01b031683529383019391830191600101613982565b50506001600160a01b0396909616606085015250505060800152939250505056fea2646970667358221220dfbae2171f03bb820b39944bf56baf2ae52b249cbffe5dbd71b47a4d3f57aca264736f6c63430008180033

Deployed Bytecode

0x60806040526004361061032a575f3560e01c8063590ffdce116101a3578063a9059cbb116100f2578063dd62ed3e11610092578063f94aa1b41161006d578063f94aa1b4146109ea578063fb78680d14610a4f578063fdb78c0e14610a6e578063feadde9c14610a8c575f80fd5b8063dd62ed3e14610973578063eafb5a3c146109b7578063ee5d9c2d146109d6575f80fd5b8063b3d514fb116100cd578063b3d514fb14610576578063b7df8b36146108c2578063bfc2fc35146108db578063cf847706146108fa575f80fd5b8063a9059cbb14610884578063ab558e4d146108a3578063b1b08f7114610576575f80fd5b806380c581d11161015d5780638a63bd9b116101385780638a63bd9b146107d75780638a8c523c146107eb57806395d89b41146107ff578063a1e900e01461082e575f80fd5b806380c581d11461077c57806383672f3e1461079b578063893d20e8146107ba575f80fd5b8063590ffdce146106e25780635a6f0918146107015780635c24b0741461071657806370a0823114610735578063715018a61461075457806378648edf14610768575f80fd5b80632857775111610279578063452ed4f1116102195780634e718e48116101f45780634e718e481461064f5780634fb2e45d1461066e5780634fbee1931461068d57806350a8e016146106c4575f80fd5b8063452ed4f1146105f85780634ada218b146106175780634bbb93eb14610630575f80fd5b80632e8fa821116102545780632e8fa8211461058b578063313ce567146105a057806332cde664146105bb57806335b90399146105da575f80fd5b8063285777511461054d5780632b112e49146105625780632b28fc7a14610576575f80fd5b806307dd79e0116102e45780630dcbcf1c116102bf5780630dcbcf1c146104c457806318160ddd146104fb57806323b872dd1461050f5780632610eaca1461052e575f80fd5b806307dd79e01461045d57806308dce6fe14610486578063095ea7b3146104a5575f80fd5b806303fd2a45146103355780630445b66714610367578063069d955f1461038a57806306fdde03146103df5780630712d165146104175780630758d92414610438575f80fd5b3661033157005b5f80fd5b348015610340575f80fd5b5061034a61dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b348015610372575f80fd5b5061037c60135481565b60405190815260200161035e565b348015610395575f80fd5b506007546103ba9061ffff808216916201000081048216916401000000009091041683565b6040805161ffff9485168152928416602084015292169181019190915260600161035e565b3480156103ea575f80fd5b506040805180820190915260078152664f74746f20414960c81b60208201525b60405161035e91906131d1565b348015610422575f80fd5b50610436610431366004613233565b610aab565b005b348015610443575f80fd5b5060095461034a906201000090046001600160a01b031681565b348015610468575f80fd5b506009546104769060ff1681565b604051901515815260200161035e565b348015610491575f80fd5b506104366104a0366004613291565b610bfd565b3480156104b0575f80fd5b506104766104bf3660046132c0565b610c41565b3480156104cf575f80fd5b506104766104de3660046132ea565b6001600160a01b03165f9081526005602052604090205460ff1690565b348015610506575f80fd5b5061037c610c57565b34801561051a575f80fd5b50610476610529366004613305565b610c77565b348015610539575f80fd5b50610436610548366004613417565b610cec565b348015610558575f80fd5b5061037c60165481565b34801561056d575f80fd5b5061037c610e67565b348015610581575f80fd5b5061037c6103e881565b348015610596575f80fd5b5061037c60145481565b3480156105ab575f80fd5b506040516009815260200161035e565b3480156105c6575f80fd5b506104366105d53660046134d3565b610eaa565b3480156105e5575f80fd5b5060095461047690610100900460ff1681565b348015610603575f80fd5b50600a5461034a906001600160a01b031681565b348015610622575f80fd5b506017546104769060ff1681565b34801561063b575f80fd5b5061037c61064a366004613513565b610ff8565b34801561065a575f80fd5b50610436610669366004613513565b611029565b348015610679575f80fd5b506104366106883660046132ea565b6110a2565b348015610698575f80fd5b506104766106a73660046132ea565b6001600160a01b03165f9081526006602052604090205460ff1690565b3480156106cf575f80fd5b5060175461047690610100900460ff1681565b3480156106ed575f80fd5b506104366106fc36600461352a565b6111c8565b34801561070c575f80fd5b5061037c60185481565b348015610721575f80fd5b506104366107303660046132ea565b61121c565b348015610740575f80fd5b5061037c61074f3660046132ea565b6113bd565b34801561075f575f80fd5b506104366113d7565b348015610773575f80fd5b506104366114ce565b348015610787575f80fd5b5061043661079636600461352a565b611507565b3480156107a6575f80fd5b506104366107b5366004613561565b6116de565b3480156107c5575f80fd5b506019546001600160a01b031661034a565b3480156107e2575f80fd5b506104766117eb565b3480156107f6575f80fd5b5061043661183c565b34801561080a575f80fd5b50604080518082019091526007815266244f54544f414960c81b602082015261040a565b348015610839575f80fd5b50600f5460105460115461085a926001600160a01b03908116928116911683565b604080516001600160a01b039485168152928416602084015292169181019190915260600161035e565b34801561088f575f80fd5b5061047661089e3660046132c0565b611a62565b3480156108ae575f80fd5b506104366108bd3660046132ea565b611a78565b3480156108cd575f80fd5b506015546104769060ff1681565b3480156108e6575f80fd5b506104366108f53660046135ba565b611bef565b348015610905575f80fd5b5060085461093e9061ffff808216916201000081048216916401000000008204811691600160301b8104821691600160401b9091041685565b6040805161ffff968716815294861660208601529285169284019290925283166060830152909116608082015260a00161035e565b34801561097e575f80fd5b5061037c61098d3660046135d6565b6001600160a01b039182165f90815260036020908152604080832093909416825291909152205490565b3480156109c2575f80fd5b506104366109d13660046132ea565b611c78565b3480156109e1575f80fd5b5061043661203e565b3480156109f5575f80fd5b50600b54600c54600d54600e54610a1c936001600160a01b03908116938116928116911684565b604080516001600160a01b039586168152938516602085015291841691830191909152909116606082015260800161035e565b348015610a5a575f80fd5b50610436610a69366004613602565b6120f6565b348015610a79575f80fd5b5060125461047690610100900460ff1681565b348015610a97575f80fd5b50610436610aa636600461352a565b612306565b6019546001600160a01b03163314610ade5760405162461bcd60e51b8152600401610ad590613631565b60405180910390fd5b6008805461ffff86811663ffffffff199092169190911762010000868316021767ffffffff000000001916600160301b8583160265ffff00000000191617640100000000918416919091021790558183610b388387613670565b610b429190613670565b610b4c9190613670565b6008805469ffff00000000000000001916600160401b61ffff938416021790556007545f91610b849162010000810482169116613670565b60085461ffff9182169250600160401b900416811015610bf65760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f74206578636565642073756d206f662062757920616e642073656c60448201526636103332b2b99760c91b6064820152608401610ad5565b5050505050565b6019546001600160a01b03163314610c275760405162461bcd60e51b8152600401610ad590613631565b600980549115156101000261ff0019909216919091179055565b5f610c4d33848461235a565b5060015b92915050565b5f610c646009600a613772565b610c7290633b9aca00613780565b905090565b6001600160a01b0383165f9081526003602090815260408083203384529091528120545f1914610cd9576001600160a01b0384165f90815260036020908152604080832033845290915281208054849290610cd3908490613797565b90915550505b610ce4848484612452565b949350505050565b6019546001600160a01b03163314610d165760405162461bcd60e51b8152600401610ad590613631565b8051825114610d5f5760405162461bcd60e51b81526020600482015260156024820152742632b733ba3439903237903737ba1036b0ba31b41760591b6044820152606401610ad5565b5f5b82518161ffff161015610e6257610d7a6009600a613772565b828261ffff1681518110610d9057610d906137aa565b6020026020010151610da29190613780565b610dab336113bd565b1015610dee5760405162461bcd60e51b81526020600482015260126024820152712737ba1032b737bab3b4103a37b5b2b7399760711b6044820152606401610ad5565b610e4f33848361ffff1681518110610e0857610e086137aa565b60200260200101516009600a610e1e9190613772565b858561ffff1681518110610e3457610e346137aa565b6020026020010151610e469190613780565b5f806001612785565b5080610e5a816137be565b915050610d61565b505050565b5f610e715f6113bd565b610e7c61dead6113bd565b610e8691906137de565b610e926009600a613772565b610ea090633b9aca00613780565b610c729190613797565b6019546001600160a01b03163314610ed45760405162461bcd60e51b8152600401610ad590613631565b60095460ff1615610f1b5760405162461bcd60e51b81526020600482015260116024820152702a30bc32b99030b932903637b1b5b2b21760791b6044820152606401610ad5565b601854610f2a90610e106137de565b4210158015610f3a575060185415155b15610fb9576103e88361ffff1611158015610f5b57506103e88261ffff1611155b8015610f6d57506103e88161ffff1611155b610fb95760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f7420657863656564206d6178696d756d732e0000000000000000006044820152606401610ad5565b6007805461ffff94851663ffffffff199091161762010000938516939093029290921765ffff0000000019166401000000009190931602919091179055565b600a545f90612710908390611015906001600160a01b03166113bd565b61101f9190613780565b610c5191906137f1565b6019546001600160a01b031633146110535760405162461bcd60e51b8152600401610ad590613631565b609681111561109d5760405162461bcd60e51b815260206004820152601660248201527521b0b73737ba1039b2ba1030b137bb329018971a929760511b6044820152606401610ad5565b601655565b6019546001600160a01b031633146110cc5760405162461bcd60e51b8152600401610ad590613631565b6001600160a01b0381166110f25760405162461bcd60e51b8152600401610ad590613810565b61deac196001600160a01b0382160161111d5760405162461bcd60e51b8152600401610ad590613810565b601954611133906001600160a01b03165f6111c8565b61113e8160016111c8565b6019545f90611155906001600160a01b03166113bd565b111561117757601954611175906001600160a01b031682610e46826113bd565b505b601980546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6019546001600160a01b031633146111f25760405162461bcd60e51b8152600401610ad590613631565b6001600160a01b03919091165f908152600660205260409020805460ff1916911515919091179055565b6019546001600160a01b031633146112465760405162461bcd60e51b8152600401610ad590613631565b60175460ff1615611255575f80fd5b306001600160a01b0382160361129e5760405162461bcd60e51b815260206004820152600e60248201526d21b0b713ba1031329039b2b6331760911b6044820152606401610ad5565b6017805462010000600160b01b031916620100006001600160a01b0384811682029290921792839055604080516330fe427560e21b81528151929094049092169263c3f909d492600480830193919282900301815f875af1925050508015611323575060408051601f3d908101601f191682019092526113209181019061386d565b60015b61132b575f80fd5b6009805462010000600160b01b031916620100006001600160a01b038581168202929092178355600a80546001600160a01b0319168584169081179091555f908152600160208190526040909120805460ff19169091179055601954925461139b93831692919004165f1961235a565b600954610e629030906201000090046001600160a01b03165f1961235a565b50565b6001600160a01b03165f9081526020819052604090205490565b6019546001600160a01b031633146114015760405162461bcd60e51b8152600401610ad590613631565b60175460ff1661146b5760405162461bcd60e51b815260206004820152602f60248201527f43616e6e6f742072656e6f756e636520756e74696c2074726164696e6720686160448201526e39903132b2b71032b730b13632b21760891b6064820152608401610ad5565b601954611481906001600160a01b03165f6111c8565b601980546001600160a01b031981169091556040516001600160a01b03909116905f9082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a350565b6019546001600160a01b031633146114f85760405162461bcd60e51b8152600401610ad590613631565b6009805460ff19166001179055565b6019546001600160a01b031633146115315760405162461bcd60e51b8152600401610ad590613631565b806115bb576001600160a01b038281165f81815260016020526040808220805460ff1916905560175490516380c581d160e01b815260048101939093526024830191909152620100009004909116906380c581d1906044015b5f604051808303815f87803b1580156115a1575f80fd5b505af11580156115b3573d5f803e3d5ffd5b505050505050565b60025415611614576203f480600254426115d59190613797565b116116145760405162461bcd60e51b815260206004820152600f60248201526e19902230bc9031b7b7b63237bbb71760891b6044820152606401610ad5565b6001600160a01b0382165f9081526001602052604090205460ff161561167c5760405162461bcd60e51b815260206004820152601b60248201527f5061697220616c726561647920616464656420746f206c6973742e00000000006044820152606401610ad5565b6001600160a01b038281165f81815260016020819052604091829020805460ff1916821790554260025560175491516380c581d160e01b815260048101939093526024830152620100009004909116906380c581d19060440161158a565b5050565b6019546001600160a01b031633146117085760405162461bcd60e51b8152600401610ad590613631565b6001600160a01b0384161580159061172857506001600160a01b03831615155b801561173c57506001600160a01b03821615155b801561175057506001600160a01b03811615155b61179c5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74206265207a65726f20616464726573732e0000000000000000006044820152606401610ad5565b600b80546001600160a01b03199081166001600160a01b0396871617909155600c8054821693861693909317909255600e8054831693851693909317909255600d805490911691909216179055565b6019545f906001600160a01b031633146118175760405162461bcd60e51b8152600401610ad590613631565b6009546118369030906201000090046001600160a01b03165f1961235a565b50600190565b6019546001600160a01b031633146118665760405162461bcd60e51b8152600401610ad590613631565b60175460ff16156118b95760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610ad5565b601754610100900460ff166119105760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206d7573742062652061646465642e00000000000000006044820152606401610ad5565b6017546201000090046001600160a01b0316611940576017805462010000600160b01b0319163062010000021790555b601754600a54604051631b04570d60e21b81526001600160a01b03918216600482015263ffffffff4316602482015267ffffffffffffffff4216604482015260096064820152620100009092041690636c115c34906084015f604051808303815f87803b1580156119af575f80fd5b505af19250505080156119c0575060015b50601754600a546001600160a01b03620100009092048216916325a71cae916119e991166113bd565b6040518263ffffffff1660e01b8152600401611a0791815260200190565b60408051808303815f875af1925050508015611a40575060408051601f3d908101601f19168201909252611a3d9181019061389a565b60015b15611a4f576013919091556014555b6017805460ff1916600117905542601855565b5f611a6e338484612452565b5060019392505050565b6019546001600160a01b03163314611aa25760405162461bcd60e51b8152600401610ad590613631565b601754610100900460ff1615611b0a57306001600160a01b03821603611b0a5760405162461bcd60e51b815260206004820152601b60248201527f43616e6e6f74207377656570206e617469766520746f6b656e732e00000000006044820152606401610ad5565b6019546040516370a0823160e01b815230600482015282916001600160a01b038084169263a9059cbb92919091169083906370a0823190602401602060405180830381865afa158015611b5f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b8391906138bc565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303815f875af1158015611bcb573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e6291906138d3565b6019546001600160a01b03163314611c195760405162461bcd60e51b8152600401610ad590613631565b6012805461ff001916610100841515908102919091179091556015805460ff19168315151790556040519081527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f9141053257906020015b60405180910390a15050565b6019546001600160a01b03163314611ca25760405162461bcd60e51b8152600401610ad590613631565b601754610100900460ff1615611cfa5760405162461bcd60e51b815260206004820152601e60248201527f43616e6e6f74206368616e6765206166746572206c69717569646974792e00006044820152606401610ad5565b5f8190505f816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d3b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d5f91906138ee565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611daa573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611dce91906138ee565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015611e17573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e3b91906138ee565b600a546001600160a01b039081165f908152600160205260409020805460ff191690559091508116611fc957816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ea3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ec791906138ee565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f12573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f3691906138ee565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af1158015611f80573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611fa491906138ee565b600a80546001600160a01b0319166001600160a01b0392909216919091179055611fe5565b600a80546001600160a01b0319166001600160a01b0383161790555b6009805462010000600160b01b031916620100006001600160a01b038581168202929092178355600a5482165f908152600160208190526040909120805460ff191690911790559154610e629230929104165f1961235a565b6019546001600160a01b031633146120685760405162461bcd60e51b8152600401610ad590613631565b601754610100900460ff16156120c05760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742063616c6c206166746572206c69717569646974792e000000006044820152606401610ad5565b6019546040516001600160a01b03909116904780156108fc02915f818181858888f193505050501580156113ba573d5f803e3d5ffd5b6019546001600160a01b031633146121205760405162461bcd60e51b8152600401610ad590613631565b828461212e6009600a613772565b61213c90633b9aca00613780565b6121469190613780565b61215091906137f1565b60135580826121616009600a613772565b61216f90633b9aca00613780565b6121799190613780565b61218391906137f1565b601481905560135411156121e35760405162461bcd60e51b815260206004820152602160248201527f5468726573686f6c642063616e6e6f742062652061626f766520616d6f756e746044820152601760f91b6064820152608401610ad5565b600a54612710906121fc906001600160a01b03166113bd565b612207906096613780565b61221191906137f1565b601454111561226e5760405162461bcd60e51b815260206004820152602360248201527f43616e6e6f742062652061626f766520312e3525206f662063757272656e742060448201526228249760e91b6064820152608401610ad5565b620f424061227e6009600a613772565b61228c90633b9aca00613780565b61229691906137f1565b60145410156122b75760405162461bcd60e51b8152600401610ad590613909565b620f42406122c76009600a613772565b6122d590633b9aca00613780565b6122df91906137f1565b60135410156123005760405162461bcd60e51b8152600401610ad590613909565b50505050565b6019546001600160a01b031633146123305760405162461bcd60e51b8152600401610ad590613631565b6001600160a01b03919091165f908152600560205260409020805460ff1916911515919091179055565b6001600160a01b0383166123a65760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b6044820152606401610ad5565b6001600160a01b0382166123f25760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b6044820152606401610ad5565b6001600160a01b038381165f8181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b5f6001600160a01b0384166124b75760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610ad5565b6001600160a01b0383166125195760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610ad5565b5f821161257a5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610ad5565b6001600160a01b0384165f908152600160205260408120548190819060ff16156125a757600192506125d4565b6001600160a01b0386165f9081526001602052604090205460ff16156125d057600191506125d4565b5060015b6125de8787612988565b156126dd5760175460ff166126dd578061263a5760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610ad5565b6001600160a01b0387165f9081526005602052604090205460ff1615801561267a57506001600160a01b0386165f9081526005602052604090205460ff16155b156126dd5760405162461bcd60e51b815260206004820152602d60248201527f546f6b656e732063616e6e6f74206265206d6f76656420756e74696c2074726160448201526c3234b7339034b9903634bb329760991b6064820152608401610ad5565b811561276c5760125460ff1661276c57601254610100900460ff161561276c575f612707306113bd565b9050601354811061276a5760145460155460ff161561275457601654600a54612710919061273d906001600160a01b03166113bd565b6127479190613780565b61275191906137f1565b90505b80821061275f578091505b61276882612a9c565b505b505b61277a878787868686612785565b979650505050505050565b6001600160a01b0386165f9081526006602052604081205460019060ff16806127c557506001600160a01b0387165f9081526006602052604090205460ff165b156127cd57505f5b6001600160a01b0388165f90815260208190526040812080548892906127f4908490613797565b909155505f9050816128065786612812565b61281289888888612f81565b9050805f808a6001600160a01b03166001600160a01b031681526020019081526020015f205f82825461284591906137de565b92505081905550876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161289191815260200190565b60405180910390a3601754610100900460ff16612979576128b28989613092565b601754610100900460ff161580156128cf57506128cf8989612988565b80156128f357506001600160a01b0389165f9081526005602052604090205460ff16155b801561291757506001600160a01b0388165f9081526005602052604090205460ff16155b8015612921575083155b156129795760405162461bcd60e51b815260206004820152602260248201527f5072652d6c6971756964697479207472616e736665722070726f74656374696f604482015261371760f11b6064820152608401610ad5565b50600198975050505050505050565b6019545f906001600160a01b038481169116148015906129b657506019546001600160a01b03838116911614155b80156129cd57506019546001600160a01b03163214155b80156129f157506001600160a01b0382165f9081526004602052604090205460ff16155b8015612a1557506001600160a01b0383165f9081526004602052604090205460ff16155b8015612a2c57506001600160a01b03821661dead14155b8015612a4057506001600160a01b03821615155b8015612a5557506001600160a01b0383163014155b8015612a7557506017546001600160a01b03848116620100009092041614155b8015612a9557506017546001600160a01b03838116620100009092041614155b9392505050565b6012805460ff191660011790556040805160a08101825260085461ffff8082168352620100008204811660208401526401000000008204811693830193909352600160301b810483166060830152600160401b9004909116608082018190525f03612b075750612f74565b305f9081526003602090815260408083206009546201000090046001600160a01b031684529091529020545f1914612b6857305f9081526003602090815260408083206009546201000090046001600160a01b0316845290915290205f1990555b6040805160028082526060820183525f9260208301908036833701905050905030815f81518110612b9b57612b9b6137aa565b60200260200101906001600160a01b031690816001600160a01b031681525050600960029054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c0c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612c3091906138ee565b81600181518110612c4357612c436137aa565b6001600160a01b03928316602091820292909201015260095460405163791ac94760e01b8152620100009091049091169063791ac94790612c909086905f90869030904290600401613957565b5f604051808303815f87803b158015612ca7575f80fd5b505af1925050508015612cb8575060015b612cc3575050612f74565b5f4790505f80846080015161ffff16856040015161ffff1684612ce69190613780565b612cf091906137f1565b90505f856080015161ffff16866020015161ffff1685612d109190613780565b612d1a91906137f1565b90505f866080015161ffff16876060015161ffff1686612d3a9190613780565b612d4491906137f1565b90505f81612d5284866137de565b612d5c91906137de565b612d669087613797565b885190915061ffff1615612dce57600b546040516001600160a01b039091169061d6d89083905f818181858888f193505050503d805f8114612dc3576040519150601f19603f3d011682016040523d82523d5f602084013e612dc8565b606091505b50909550505b604088015161ffff1615612e9b57600e546040516001600160a01b039091169061d6d89086905f818181858888f193505050503d805f8114612e2b576040519150601f19603f3d011682016040523d82523d5f602084013e612e30565b606091505b5050600954909550610100900460ff1615612e9b57600e5460405163beceed3960e01b8152600481018690526001600160a01b039091169063beceed39906024015f604051808303815f87803b158015612e88575f80fd5b505af1925050508015612e99575060015b505b602088015161ffff1615612f0357600c546040516001600160a01b039091169061d6d89085905f818181858888f193505050503d805f8114612ef8576040519150601f19603f3d011682016040523d82523d5f602084013e612efd565b606091505b50909550505b606088015161ffff1615612f6b57600d546040516001600160a01b039091169061d6d89084905f818181858888f193505050503d805f8114612f60576040519150601f19603f3d011682016040523d82523d5f602084013e612f65565b606091505b50909550505b50505050505050505b506012805460ff19169055565b5f808315612f96575060075461ffff16612fc0565b8215612faf575060075462010000900461ffff16612fc0565b50600754640100000000900461ffff165b805f03612fd05784915050610ce4565b6017546201000090046001600160a01b031630148015612ffa57504660011480612ffa5750466038145b1561300457506111945b5f6127106130128388613780565b61301c91906137f1565b9050801561308857305f90815260208190526040812080548392906130429084906137de565b909155505060405181815230906001600160a01b038916907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b61277a8187613797565b601754610100900460ff16156130f65760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201526232b21760e91b6064820152608401610ad5565b6131008282612988565b15801561311a5750600a546001600160a01b038281169116145b156116da576001600160a01b038083165f908152600460209081526040808320805460ff19908116600190811790925560069093529220805490911690911790556017805461ff001916610100179081905562010000900416613191576017805462010000600160b01b0319163062010000021790555b6012805461ff001916610100179055604051600181527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f914105325790602001611c6c565b5f602080835283518060208501525f5b818110156131fd578581018301518582016040015282016131e1565b505f604082860101526040601f19601f8301168501019250505092915050565b803561ffff8116811461322e575f80fd5b919050565b5f805f8060808587031215613246575f80fd5b61324f8561321d565b935061325d6020860161321d565b925061326b6040860161321d565b91506132796060860161321d565b905092959194509250565b80151581146113ba575f80fd5b5f602082840312156132a1575f80fd5b8135612a9581613284565b6001600160a01b03811681146113ba575f80fd5b5f80604083850312156132d1575f80fd5b82356132dc816132ac565b946020939093013593505050565b5f602082840312156132fa575f80fd5b8135612a95816132ac565b5f805f60608486031215613317575f80fd5b8335613322816132ac565b92506020840135613332816132ac565b929592945050506040919091013590565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561338057613380613343565b604052919050565b5f67ffffffffffffffff8211156133a1576133a1613343565b5060051b60200190565b5f82601f8301126133ba575f80fd5b813560206133cf6133ca83613388565b613357565b8083825260208201915060208460051b8701019350868411156133f0575f80fd5b602086015b8481101561340c57803583529183019183016133f5565b509695505050505050565b5f8060408385031215613428575f80fd5b823567ffffffffffffffff8082111561343f575f80fd5b818501915085601f830112613452575f80fd5b813560206134626133ca83613388565b82815260059290921b84018101918181019089841115613480575f80fd5b948201945b838610156134a7578535613498816132ac565b82529482019490820190613485565b965050860135925050808211156134bc575f80fd5b506134c9858286016133ab565b9150509250929050565b5f805f606084860312156134e5575f80fd5b6134ee8461321d565b92506134fc6020850161321d565b915061350a6040850161321d565b90509250925092565b5f60208284031215613523575f80fd5b5035919050565b5f806040838503121561353b575f80fd5b8235613546816132ac565b9150602083013561355681613284565b809150509250929050565b5f805f8060808587031215613574575f80fd5b843561357f816132ac565b9350602085013561358f816132ac565b9250604085013561359f816132ac565b915060608501356135af816132ac565b939692955090935050565b5f80604083850312156135cb575f80fd5b823561354681613284565b5f80604083850312156135e7575f80fd5b82356135f2816132ac565b91506020830135613556816132ac565b5f805f8060808587031215613615575f80fd5b5050823594602084013594506040840135936060013592509050565b60208082526011908201527021b0b63632b9101e979e9037bbb732b91760791b604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b61ffff81811683821601908082111561368b5761368b61365c565b5092915050565b600181815b808511156136cc57815f19048211156136b2576136b261365c565b808516156136bf57918102915b93841c9390800290613697565b509250929050565b5f826136e257506001610c51565b816136ee57505f610c51565b8160018114613704576002811461370e5761372a565b6001915050610c51565b60ff84111561371f5761371f61365c565b50506001821b610c51565b5060208310610133831016604e8410600b841016171561374d575081810a610c51565b6137578383613692565b805f190482111561376a5761376a61365c565b029392505050565b5f612a9560ff8416836136d4565b8082028115828204841417610c5157610c5161365c565b81810381811115610c5157610c5161365c565b634e487b7160e01b5f52603260045260245ffd5b5f61ffff8083168181036137d4576137d461365c565b6001019392505050565b80820180821115610c5157610c5161365c565b5f8261380b57634e487b7160e01b5f52601260045260245ffd5b500490565b6020808252603d908201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660408201527f6572206f776e657220746f20746865207a65726f20616464726573732e000000606082015260800190565b5f806040838503121561387e575f80fd5b8251613889816132ac565b6020840151909250613556816132ac565b5f80604083850312156138ab575f80fd5b505080516020909101519092909150565b5f602082840312156138cc575f80fd5b5051919050565b5f602082840312156138e3575f80fd5b8151612a9581613284565b5f602082840312156138fe575f80fd5b8151612a95816132ac565b6020808252602e908201527f43616e6e6f74206265206c6f776572207468616e20302e303030303125206f6660408201526d103a37ba30b61039bab838363c9760911b606082015260800190565b5f60a08201878352602087602085015260a0604085015281875180845260c0860191506020890193505f5b818110156139a75784516001600160a01b031683529383019391830191600101613982565b50506001600160a01b0396909616606085015250505060800152939250505056fea2646970667358221220dfbae2171f03bb820b39944bf56baf2ae52b249cbffe5dbd71b47a4d3f57aca264736f6c63430008180033

Deployed Bytecode Sourcemap

4063:21792:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5643:73;;;;;;;;;;;;5674:42;5643:73;;;;;-1:-1:-1;;;;;178:32:1;;;160:51;;148:2;133:18;5643:73:0;;;;;;;;6768:28;;;;;;;;;;;;;;;;;;;368:25:1;;;356:2;341:18;6768:28:0;222:177:1;5034:107:0;;;;;;;;;;-1:-1:-1;5034:107:0;;;;;;;;;;;;;;;;;;;;;;;;;;610:6:1;643:15;;;625:34;;695:15;;;690:2;675:18;;668:43;747:15;;727:18;;;720:43;;;;588:2;573:18;5034:107:0;404:365:1;10545:80:0;;;;;;;;;;-1:-1:-1;10617:5:0;;;;;;;;;;;;-1:-1:-1;;;10617:5:0;;;;10545:80;;;;;;;:::i;15448:486::-;;;;;;;;;;-1:-1:-1;15448:486:0;;;;;:::i;:::-;;:::i;:::-;;5582:26;;;;;;;;;;-1:-1:-1;5582:26:0;;;;;;;-1:-1:-1;;;;;5582:26:0;;;5511;;;;;;;;;;-1:-1:-1;5511:26:0;;;;;;;;;;;2287:14:1;;2280:22;2262:41;;2250:2;2235:18;5511:26:0;2122:187:1;25747:105:0;;;;;;;;;;-1:-1:-1;25747:105:0;;;;;:::i;:::-;;:::i;11153:161::-;;;;;;;;;;-1:-1:-1;11153:161:0;;;;;:::i;:::-;;:::i;14240:140::-;;;;;;;;;;-1:-1:-1;14240:140:0;;;;;:::i;:::-;-1:-1:-1;;;;;14338:34:0;14314:4;14338:34;;;:25;:34;;;;;;;;;14240:140;10280:83;;;;;;;;;;;;;:::i;11823:306::-;;;;;;;;;;-1:-1:-1;11823:306:0;;;;;:::i;:::-;;:::i;23653:447::-;;;;;;;;;;-1:-1:-1;23653:447:0;;;;;:::i;:::-;;:::i;6876:33::-;;;;;;;;;;;;;;;;14544:141;;;;;;;;;;;;;:::i;5308:42::-;;;;;;;;;;;;5346:4;5308:42;;6803:25;;;;;;;;;;;;;;;;10369:80;;;;;;;;;;-1:-1:-1;10369:80:0;;4686:1;6487:36:1;;6475:2;6460:18;10369:80:0;6345:184:1;14883:557:0;;;;;;;;;;-1:-1:-1;14883:557:0;;;;;:::i;:::-;;:::i;5544:29::-;;;;;;;;;;-1:-1:-1;5544:29:0;;;;;;;;;;;5615:21;;;;;;;;;;-1:-1:-1;5615:21:0;;;;-1:-1:-1;;;;;5615:21:0;;;6916:34;;;;;;;;;;-1:-1:-1;6916:34:0;;;;;;;;16448:189;;;;;;;;;;-1:-1:-1;16448:189:0;;;;;:::i;:::-;;:::i;17352:217::-;;;;;;;;;;-1:-1:-1;17352:217:0;;;;;:::i;:::-;;:::i;8918:654::-;;;;;;;;;;-1:-1:-1;8918:654:0;;;;;:::i;:::-;;:::i;13963:127::-;;;;;;;;;;-1:-1:-1;13963:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;14054:28:0;14030:4;14054:28;;;:19;:28;;;;;;;;;13963:127;6957:36;;;;;;;;;;-1:-1:-1;6957:36:0;;;;;;;;;;;14098:134;;;;;;;;;;-1:-1:-1;14098:134:0;;;;;:::i;:::-;;:::i;7031:26::-;;;;;;;;;;;;;;;;13397:558;;;;;;;;;;-1:-1:-1;13397:558:0;;;;;:::i;:::-;;:::i;10855:117::-;;;;;;;;;;-1:-1:-1;10855:117:0;;;;;:::i;:::-;;:::i;9580:310::-;;;;;;;;;;;;;:::i;14693:182::-;;;;;;;;;;;;;:::i;12825:564::-;;;;;;;;;;-1:-1:-1;12825:564:0;;;;;:::i;:::-;;:::i;15942:498::-;;;;;;;;;;-1:-1:-1;15942:498:0;;;;;:::i;:::-;;:::i;10631:79::-;;;;;;;;;;-1:-1:-1;10701:6:0;;-1:-1:-1;;;;;10701:6:0;10631:79;;11640:175;;;;;;;;;;;;;:::i;22455:696::-;;;;;;;;;;;;;:::i;10455:84::-;;;;;;;;;;-1:-1:-1;10529:7:0;;;;;;;;;;;;-1:-1:-1;;;10529:7:0;;;;10455:84;;6392:299;;;;;;;;;;-1:-1:-1;6392:299:0;;;;;;;;-1:-1:-1;;;;;6392:299:0;;;;;;;;;;;;;;-1:-1:-1;;;;;8405:15:1;;;8387:34;;8457:15;;;8452:2;8437:18;;8430:43;8509:15;;8489:18;;;8482:43;;;;8337:2;8322:18;6392:299:0;8147:384:1;10980:165:0;;;;;;;;;;-1:-1:-1;10980:165:0;;;;;:::i;:::-;;:::i;23349:296::-;;;;;;;;;;-1:-1:-1;23349:296:0;;;;;:::i;:::-;;:::i;6835:34::-;;;;;;;;;;-1:-1:-1;6835:34:0;;;;;;;;17577:263;;;;;;;;;;-1:-1:-1;17577:263:0;;;;;:::i;:::-;;:::i;5150:149::-;;;;;;;;;;-1:-1:-1;5150:149:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5150:149:0;;;;;-1:-1:-1;;;5150:149:0;;;;;;;;;;9176:6:1;9209:15;;;9191:34;;9261:15;;;9256:2;9241:18;;9234:43;9313:15;;;9293:18;;;9286:43;;;;9365:15;;9360:2;9345:18;;9338:43;9418:15;;;9412:3;9397:19;;9390:44;9153:3;9138:19;5150:149:0;8917:523:1;10716:133:0;;;;;;;;;;-1:-1:-1;10716:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;10818:19:0;;;10800:7;10818:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;10716:133;12137:680;;;;;;;;;;-1:-1:-1;12137:680:0;;;;;:::i;:::-;;:::i;23159:182::-;;;;;;;;;;;;;:::i;6045:338::-;;;;;;;;;;-1:-1:-1;6045:338:0;;;;;;;;;;-1:-1:-1;;;;;6045:338:0;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10189:15:1;;;10171:34;;10241:15;;;10236:2;10221:18;;10214:43;10293:15;;;10273:18;;;10266:43;;;;10345:15;;;10340:2;10325:18;;10318:43;10120:3;10105:19;6045:338:0;9838:529:1;16645:699:0;;;;;;;;;;-1:-1:-1;16645:699:0;;;;;:::i;:::-;;:::i;6722:39::-;;;;;;;;;;-1:-1:-1;6722:39:0;;;;;;;;;;;14388:148;;;;;;;;;;-1:-1:-1;14388:148:0;;;;;:::i;:::-;;:::i;15448:486::-;8772:6;;-1:-1:-1;;;;;8772:6:0;8782:10;8772:20;8764:50;;;;-1:-1:-1;;;8764:50:0;;;;;;;:::i;:::-;;;;;;;;;15564:7:::1;:29:::0;;::::1;::::0;;::::1;-1:-1:-1::0;;15604:33:0;;;;;;;;;;::::1;;;-1:-1:-1::0;;15678:25:0;-1:-1:-1;;;15648:19:0;;::::1;;-1:-1:-1::0;;15678:25:0;;;;;::::1;::::0;;;::::1;;::::0;;15648:19;15604:33;15734:19:::1;15678:25:::0;15564:29;15734:19:::1;:::i;:::-;:33;;;;:::i;:::-;:40;;;;:::i;:::-;15714:7;:60:::0;;-1:-1:-1;;15714:60:0::1;-1:-1:-1::0;;;15714:60:0::1;::::0;;::::1;;;::::0;;15820:9:::1;:17:::0;-1:-1:-1;;15801:36:0::1;::::0;15820:17;;::::1;::::0;::::1;::::0;15801:16:::1;:36;:::i;:::-;15856:7;:17:::0;15785:52:::1;::::0;;::::1;::::0;-1:-1:-1;;;;15856:17:0;::::1;;:26:::0;-1:-1:-1;15856:26:0::1;15848:78;;;::::0;-1:-1:-1;;;15848:78:0;;11615:2:1;15848:78:0::1;::::0;::::1;11597:21:1::0;11654:2;11634:18;;;11627:30;11693:34;11673:18;;;11666:62;-1:-1:-1;;;11744:18:1;;;11737:37;11791:19;;15848:78:0::1;11413:403:1::0;15848:78:0::1;15553:381;15448:486:::0;;;;:::o;25747:105::-;8772:6;;-1:-1:-1;;;;;8772:6:0;8782:10;8772:20;8764:50;;;;-1:-1:-1;;;8764:50:0;;;;;;;:::i;:::-;25817:17:::1;:27:::0;;;::::1;;;;-1:-1:-1::0;;25817:27:0;;::::1;::::0;;;::::1;::::0;;25747:105::o;11153:161::-;11230:4;11247:37;11256:10;11268:7;11277:6;11247:8;:37::i;:::-;-1:-1:-1;11302:4:0;11153:161;;;;;:::o;10280:83::-;10335:7;4746:13;4686:1;4746:2;:13;:::i;:::-;4729:30;;4533:13;4729:30;:::i;:::-;10346:14;;10280:83;:::o;11823:306::-;-1:-1:-1;;;;;11944:19:0;;11923:4;11944:19;;;:11;:19;;;;;;;;11964:10;11944:31;;;;;;;;-1:-1:-1;;11944:52:0;11940:126;;-1:-1:-1;;;;;12013:19:0;;;;;;:11;:19;;;;;;;;12033:10;12013:31;;;;;;;:41;;12048:6;;12013:19;:41;;12048:6;;12013:41;:::i;:::-;;;;-1:-1:-1;;11940:126:0;12085:36;12095:6;12103:9;12114:6;12085:9;:36::i;:::-;12078:43;11823:306;-1:-1:-1;;;;11823:306:0:o;23653:447::-;8772:6;;-1:-1:-1;;;;;8772:6:0;8782:10;8772:20;8764:50;;;;-1:-1:-1;;;8764:50:0;;;;;;;:::i;:::-;23788:7:::1;:14;23769:8;:15;:33;23761:67;;;::::0;-1:-1:-1;;;23761:67:0;;13706:2:1;23761:67:0::1;::::0;::::1;13688:21:1::0;13745:2;13725:18;;;13718:30;-1:-1:-1;;;13764:18:1;;;13757:51;13825:18;;23761:67:0::1;13504:345:1::0;23761:67:0::1;23844:8;23839:254;23862:8;:15;23858:1;:19;;;23839:254;;;23943:13;4686:1;23943:2;:13;:::i;:::-;23932:7;23940:1;23932:10;;;;;;;;;;:::i;:::-;;;;;;;:24;;;;:::i;:::-;23907:21;23917:10;23907:9;:21::i;:::-;:49;;23899:80;;;::::0;-1:-1:-1;;;23899:80:0;;14188:2:1;23899:80:0::1;::::0;::::1;14170:21:1::0;14227:2;14207:18;;;14200:30;-1:-1:-1;;;14246:18:1;;;14239:48;14304:18;;23899:80:0::1;13986:342:1::0;23899:80:0::1;23994:87;24011:10;24023:8;24032:1;24023:11;;;;;;;;;;:::i;:::-;;;;;;;4686:1;24047:2;:13;;;;:::i;:::-;24036:7;24044:1;24036:10;;;;;;;;;;:::i;:::-;;;;;;;:24;;;;:::i;:::-;24062:5;24069::::0;24076:4:::1;23994:16;:87::i;:::-;-1:-1:-1::0;23879:3:0;::::1;::::0;::::1;:::i;:::-;;;;23839:254;;;;23653:447:::0;;:::o;14544:141::-;14597:7;14654:21;14672:1;14654:9;:21::i;:::-;14636:15;5674:42;14636:9;:15::i;:::-;:39;;;;:::i;:::-;4746:13;4686:1;4746:2;:13;:::i;:::-;4729:30;;4533:13;4729:30;:::i;:::-;14625:51;;;;:::i;14883:557::-;8772:6;;-1:-1:-1;;;;;8772:6:0;8782:10;8772:20;8764:50;;;;-1:-1:-1;;;8764:50:0;;;;;;;:::i;:::-;14991:14:::1;::::0;::::1;;14990:15;14982:45;;;::::0;-1:-1:-1;;;14982:45:0;;14867:2:1;14982:45:0::1;::::0;::::1;14849:21:1::0;14906:2;14886:18;;;14879:30;-1:-1:-1;;;14925:18:1;;;14918:47;14982:18;;:45:0::1;14665:341:1::0;14982:45:0::1;15061:11;::::0;:21:::1;::::0;15075:7:::1;15061:21;:::i;:::-;15042:15;:40;;:60;;;;-1:-1:-1::0;15086:11:0::1;::::0;:16;::::1;15042:60;15038:275;;;5346:4;15127:6;:21;;;;:69;;;;;5396:4;15173:7;:23;;;;15127:69;:125;;;;;5450:4;15221:11;:31;;;;15127:125;15119:182;;;::::0;-1:-1:-1;;;15119:182:0;;15213:2:1;15119:182:0::1;::::0;::::1;15195:21:1::0;15252:2;15232:18;;;15225:30;15291:25;15271:18;;;15264:53;15334:18;;15119:182:0::1;15011:347:1::0;15119:182:0::1;15323:9;:25:::0;;::::1;::::0;;::::1;-1:-1:-1::0;;15359:27:0;;;;;;;::::1;::::0;;;::::1;::::0;;;::::1;-1:-1:-1::0;;15397:35:0::1;::::0;;;;::::1;;::::0;;;::::1;::::0;;14883:557::o;16448:189::-;16577:6;;16539:7;;5497:5;;16587:21;;16567:17;;-1:-1:-1;;;;;16577:6:0;16567:9;:17::i;:::-;:41;;;;:::i;:::-;16566:62;;;;:::i;17352:217::-;8772:6;;-1:-1:-1;;;;;8772:6:0;8782:10;8772:20;8764:50;;;;-1:-1:-1;;;8764:50:0;;;;;;;:::i;:::-;17482:3:::1;17456:22;:29;;17448:64;;;::::0;-1:-1:-1;;;17448:64:0;;15787:2:1;17448:64:0::1;::::0;::::1;15769:21:1::0;15826:2;15806:18;;;15799:30;-1:-1:-1;;;15845:18:1;;;15838:52;15907:18;;17448:64:0::1;15585:346:1::0;17448:64:0::1;17523:13;:38:::0;17352:217::o;8918:654::-;8772:6;;-1:-1:-1;;;;;8772:6:0;8782:10;8772:20;8764:50;;;;-1:-1:-1;;;8764:50:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;8997:22:0;::::1;8989:96;;;;-1:-1:-1::0;;;8989:96:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;;;9104:16:0;::::1;::::0;9096:90:::1;;;;-1:-1:-1::0;;;9096:90:0::1;;;;;;;:::i;:::-;9217:6;::::0;9197:34:::1;::::0;-1:-1:-1;;;;;9217:6:0::1;;9197:19;:34::i;:::-;9242:35;9262:8;9272:4;9242:19;:35::i;:::-;9312:6;::::0;9322:1:::1;::::0;9302:17:::1;::::0;-1:-1:-1;;;;;9312:6:0::1;9302:9;:17::i;:::-;:21;9298:127;;;9357:6;::::0;9340:73:::1;::::0;-1:-1:-1;;;;;9357:6:0::1;9365:8:::0;9375:17:::1;9357:6:::0;9375:9:::1;:17::i;9340:73::-;;9298:127;9464:6;::::0;;-1:-1:-1;;;;;9481:17:0;;::::1;-1:-1:-1::0;;;;;;9481:17:0;::::1;::::0;::::1;::::0;;;9514:40:::1;::::0;9464:6;::::1;::::0;9481:17;9464:6;;9514:40:::1;::::0;9445:16:::1;::::0;9514:40:::1;8978:594;8918:654:::0;:::o;14098:134::-;8772:6;;-1:-1:-1;;;;;8772:6:0;8782:10;8772:20;8764:50;;;;-1:-1:-1;;;8764:50:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;14186:28:0;;;::::1;;::::0;;;:19:::1;:28;::::0;;;;:38;;-1:-1:-1;;14186:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;14098:134::o;13397:558::-;8772:6;;-1:-1:-1;;;;;8772:6:0;8782:10;8772:20;8764:50;;;;-1:-1:-1;;;8764:50:0;;;;;;;:::i;:::-;13472:14:::1;::::0;::::1;;13471:15;13463:24;;;::::0;::::1;;13522:4;-1:-1:-1::0;;;;;13506:21:0;::::1;::::0;13498:48:::1;;;::::0;-1:-1:-1;;;13498:48:0;;16568:2:1;13498:48:0::1;::::0;::::1;16550:21:1::0;16607:2;16587:18;;;16580:30;-1:-1:-1;;;16626:18:1;;;16619:44;16680:18;;13498:48:0::1;16366:338:1::0;13498:48:0::1;13557:11;:32:::0;;-1:-1:-1;;;;;;13557:32:0::1;::::0;-1:-1:-1;;;;;13557:32:0;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;;13604:23:::1;::::0;;-1:-1:-1;;;13604:23:0;;;;:11;;;::::1;::::0;;::::1;::::0;:21:::1;::::0;:23:::1;::::0;;::::1;::::0;;;;;;;;-1:-1:-1;13604:11:0;:23:::1;;;;;;;;;;-1:-1:-1::0;13604:23:0::1;::::0;;::::1;;::::0;;::::1;-1:-1:-1::0;;13604:23:0::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;;;13600:348;;13937:8;::::0;::::1;13600:348;13691:9;:29:::0;;-1:-1:-1;;;;;;13691:29:0::1;::::0;-1:-1:-1;;;;;13691:29:0;;::::1;::::0;::::1;::::0;;;::::1;::::0;;13722:6:::1;:22:::0;;-1:-1:-1;;;;;;13722:22:0::1;::::0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;13746:15:0;;;-1:-1:-1;13746:15:0::1;::::0;;;;;;;:22;;-1:-1:-1;;13746:22:0::1;::::0;;::::1;::::0;;13793:6:::1;::::0;13809:9;;13784:55:::1;::::0;13793:6;::::1;::::0;13809:9;;::::1;;-1:-1:-1::0;;13784:8:0::1;:55::i;:::-;13886:9;::::0;13854:62:::1;::::0;13871:4:::1;::::0;13886:9;;::::1;-1:-1:-1::0;;;;;13886:9:0::1;-1:-1:-1::0;;13854:8:0::1;:62::i;13600:348::-;13397:558:::0;:::o;10855:117::-;-1:-1:-1;;;;;10948:16:0;10921:7;10948:16;;;;;;;;;;;;10855:117::o;9580:310::-;8772:6;;-1:-1:-1;;;;;8772:6:0;8782:10;8772:20;8764:50;;;;-1:-1:-1;;;8764:50:0;;;;;;;:::i;:::-;9647:14:::1;::::0;::::1;;9639:74;;;::::0;-1:-1:-1;;;9639:74:0;;17301:2:1;9639:74:0::1;::::0;::::1;17283:21:1::0;17340:2;17320:18;;;17313:30;17379:34;17359:18;;;17352:62;-1:-1:-1;;;17430:18:1;;;17423:45;17485:19;;9639:74:0::1;17099:411:1::0;9639:74:0::1;9744:6;::::0;9724:34:::1;::::0;-1:-1:-1;;;;;9744:6:0::1;;9724:19;:34::i;:::-;9788:6;::::0;;-1:-1:-1;;;;;;9805:19:0;::::1;::::0;;;9840:42:::1;::::0;-1:-1:-1;;;;;9788:6:0;;::::1;::::0;9769:16:::1;::::0;9788:6;;9840:42:::1;::::0;9769:16;;9840:42:::1;9628:262;9580:310::o:0;14693:182::-;8772:6;;-1:-1:-1;;;;;8772:6:0;8782:10;8772:20;8764:50;;;;-1:-1:-1;;;8764:50:0;;;;;;;:::i;:::-;14846:14:::1;:21:::0;;-1:-1:-1;;14846:21:0::1;14863:4;14846:21;::::0;;14693:182::o;12825:564::-;8772:6;;-1:-1:-1;;;;;8772:6:0;8782:10;8772:20;8764:50;;;;-1:-1:-1;;;8764:50:0;;;;;;;:::i;:::-;12907:7:::1;12902:480;;-1:-1:-1::0;;;;;12931:13:0;;::::1;12947:5;12931:13:::0;;;:7:::1;:13;::::0;;;;;:21;;-1:-1:-1;;12931:21:0::1;::::0;;12967:11:::1;::::0;:34;;-1:-1:-1;;;12967:34:0;;::::1;::::0;::::1;17683:51:1::0;;;;17750:18;;;17743:50;;;;12967:11:0;;::::1;::::0;;::::1;::::0;:21:::1;::::0;17656:18:1;;12967:34:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;12825:564:::0;;:::o;12902:480::-:1;13038:17;::::0;:22;13034:135:::1;;13127:6;13107:17;;13089:15;:35;;;;:::i;:::-;:44;13081:72;;;::::0;-1:-1:-1;;;13081:72:0;;18006:2:1;13081:72:0::1;::::0;::::1;17988:21:1::0;18045:2;18025:18;;;18018:30;-1:-1:-1;;;18064:18:1;;;18057:45;18119:18;;13081:72:0::1;17804:339:1::0;13081:72:0::1;-1:-1:-1::0;;;;;13192:13:0;::::1;;::::0;;;:7:::1;:13;::::0;;;;;::::1;;13191:14;13183:54;;;::::0;-1:-1:-1;;;13183:54:0;;18350:2:1;13183:54:0::1;::::0;::::1;18332:21:1::0;18389:2;18369:18;;;18362:30;18428:29;18408:18;;;18401:57;18475:18;;13183:54:0::1;18148:351:1::0;13183:54:0::1;-1:-1:-1::0;;;;;13252:13:0;;::::1;;::::0;;;13268:4:::1;13252:13;::::0;;;;;;;;:20;;-1:-1:-1;;13252:20:0::1;::::0;::::1;::::0;;13307:15:::1;13287:17;:35:::0;13337:11:::1;::::0;:33;;-1:-1:-1;;;13337:33:0;;::::1;::::0;::::1;17683:51:1::0;;;;17750:18;;;17743:50;13337:11:0;;::::1;::::0;;::::1;::::0;:21:::1;::::0;17656:18:1;;13337:33:0::1;17515:284:1::0;12902:480:0::1;12825:564:::0;;:::o;15942:498::-;8772:6;;-1:-1:-1;;;;;8772:6:0;8782:10;8772:20;8764:50;;;;-1:-1:-1;;;8764:50:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16103:23:0;::::1;::::0;;::::1;::::0;:48:::1;;-1:-1:-1::0;;;;;;16130:21:0;::::1;::::0;::::1;16103:48;:77;;;;-1:-1:-1::0;;;;;;16155:25:0;::::1;::::0;::::1;16103:77;:99;;;;-1:-1:-1::0;;;;;;16184:18:0;::::1;::::0;::::1;16103:99;16095:135;;;::::0;-1:-1:-1;;;16095:135:0;;18706:2:1;16095:135:0::1;::::0;::::1;18688:21:1::0;18745:2;18725:18;;;18718:30;18784:25;18764:18;;;18757:53;18827:18;;16095:135:0::1;18504:347:1::0;16095:135:0::1;16241:11;:42:::0;;-1:-1:-1;;;;;;16241:42:0;;::::1;-1:-1:-1::0;;;;;16241:42:0;;::::1;;::::0;;;16294:23;:46;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;16351:19;:38;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;16400:16;:32;;;;::::1;::::0;;;::::1;;::::0;;15942:498::o;11640:175::-;8772:6;;11706:4;;-1:-1:-1;;;;;8772:6:0;8782:10;8772:20;8764:50;;;;-1:-1:-1;;;8764:50:0;;;;;;;:::i;:::-;11755:9:::1;::::0;11723:62:::1;::::0;11740:4:::1;::::0;11755:9;;::::1;-1:-1:-1::0;;;;;11755:9:0::1;-1:-1:-1::0;;11723:8:0::1;:62::i;:::-;-1:-1:-1::0;11803:4:0::1;11640:175:::0;:::o;22455:696::-;8772:6;;-1:-1:-1;;;;;8772:6:0;8782:10;8772:20;8764:50;;;;-1:-1:-1;;;8764:50:0;;;;;;;:::i;:::-;22517:14:::1;::::0;::::1;;22516:15;22508:52;;;::::0;-1:-1:-1;;;22508:52:0;;19058:2:1;22508:52:0::1;::::0;::::1;19040:21:1::0;19097:2;19077:18;;;19070:30;19136:26;19116:18;;;19109:54;19180:18;;22508:52:0::1;18856:348:1::0;22508:52:0::1;22579:16;::::0;::::1;::::0;::::1;;;22571:53;;;::::0;-1:-1:-1;;;22571:53:0;;19411:2:1;22571:53:0::1;::::0;::::1;19393:21:1::0;19450:2;19430:18;;;19423:30;19489:26;19469:18;;;19462:54;19533:18;;22571:53:0::1;19209:348:1::0;22571:53:0::1;22647:11;::::0;;;::::1;-1:-1:-1::0;;;;;22647:11:0::1;22635:107;;22689:11;:41:::0;;-1:-1:-1;;;;;;22689:41:0::1;22724:4;22689:41:::0;::::1;;::::0;;22635:107:::1;22756:11;::::0;22778:6:::1;::::0;22756:87:::1;::::0;-1:-1:-1;;;22756:87:0;;-1:-1:-1;;;;;22778:6:0;;::::1;22756:87;::::0;::::1;19785:51:1::0;19884:10;22793:12:0::1;19872:23:1::0;19852:18;;;19845:51;19944:18;22815:15:0::1;19932:31:1::0;19912:18;;;19905:59;4686:1:0::1;19980:18:1::0;;;19973:45;22756:11:0;;;::::1;;::::0;:21:::1;::::0;19757:19:1;;22756:87:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;22752:103:::0;22869:11:::1;::::0;22900:6:::1;::::0;-1:-1:-1;;;;;22869:11:0;;;::::1;::::0;::::1;::::0;:20:::1;::::0;22890:17:::1;::::0;22900:6:::1;22890:9;:17::i;:::-;22869:39;;;;;;;;;;;;;368:25:1::0;;356:2;341:18;;222:177;22869:39:0::1;;::::0;::::1;;;;;;;;;;;;;;;;;-1:-1:-1::0;22869:39:0::1;::::0;;::::1;;::::0;;::::1;-1:-1:-1::0;;22869:39:0::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;;;22865:207:::0;::::1;;22980:13;:29:::0;;;;23024:10:::1;:27:::0;22865:207:::1;23082:14;:21:::0;;-1:-1:-1;;23082:21:0::1;23099:4;23082:21;::::0;;23128:15:::1;23114:11;:29:::0;22455:696::o;10980:165::-;11058:4;11075:40;11085:10;11097:9;11108:6;11075:9;:40::i;:::-;-1:-1:-1;11133:4:0;;10980:165;-1:-1:-1;;;10980:165:0:o;23349:296::-;8772:6;;-1:-1:-1;;;;;8772:6:0;8782:10;8772:20;8764:50;;;;-1:-1:-1;;;8764:50:0;;;;;;;:::i;:::-;23427:16:::1;::::0;::::1;::::0;::::1;;;23423:111;;;23485:4;-1:-1:-1::0;;;;;23468:22:0;::::1;::::0;23460:62:::1;;;::::0;-1:-1:-1;;;23460:62:0;;20481:2:1;23460:62:0::1;::::0;::::1;20463:21:1::0;20520:2;20500:18;;;20493:30;20559:29;20539:18;;;20532:57;20606:18;;23460:62:0::1;20279:351:1::0;23460:62:0::1;23598:6;::::0;23606:30:::1;::::0;-1:-1:-1;;;23606:30:0;;23630:4:::1;23606:30;::::0;::::1;160:51:1::0;23566:5:0;;-1:-1:-1;;;;;23583:14:0;;::::1;::::0;::::1;::::0;23598:6;;;::::1;::::0;23583:14;;23606:15:::1;::::0;133:18:1;;23606:30:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23583:54;::::0;-1:-1:-1;;;;;;23583:54:0::1;::::0;;;;;;-1:-1:-1;;;;;21016:32:1;;;23583:54:0::1;::::0;::::1;20998:51:1::0;21065:18;;;21058:34;20971:18;;23583:54:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;17577:263::-:0;8772:6;;-1:-1:-1;;;;;8772:6:0;8782:10;8772:20;8764:50;;;;-1:-1:-1;;;8764:50:0;;;;;;;:::i;:::-;17686:19:::1;:33:::0;;-1:-1:-1;;17686:33:0::1;;::::0;::::1;;::::0;;::::1;::::0;;;::::1;::::0;;;17730:22:::1;:47:::0;;-1:-1:-1;;17730:47:0::1;::::0;::::1;;;::::0;;17793:39:::1;::::0;2262:41:1;;;17793:39:0::1;::::0;2250:2:1;2235:18;17793:39:0::1;;;;;;;;17577:263:::0;;:::o;12137:680::-;8772:6;;-1:-1:-1;;;;;8772:6:0;8782:10;8772:20;8764:50;;;;-1:-1:-1;;;8764:50:0;;;;;;;:::i;:::-;12217:16:::1;::::0;::::1;::::0;::::1;;;12216:17;12208:60;;;::::0;-1:-1:-1;;;12208:60:0;;21555:2:1;12208:60:0::1;::::0;::::1;21537:21:1::0;21594:2;21574:18;;;21567:30;21633:32;21613:18;;;21606:60;21683:18;;12208:60:0::1;21353:354:1::0;12208:60:0::1;12279:20;12312:9;12279:43;;12333:16;12363:10;-1:-1:-1::0;;;;;12363:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;12352:40:0::1;;12401:4;12408:10;-1:-1:-1::0;;;;;12408:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12352:74;::::0;-1:-1:-1;;;;;;12352:74:0::1;::::0;;;;;;-1:-1:-1;;;;;22198:15:1;;;12352:74:0::1;::::0;::::1;22180:34:1::0;22250:15;;22230:18;;;22223:43;22115:18;;12352:74:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12445:6;::::0;-1:-1:-1;;;;;12445:6:0;;::::1;12455:5;12437:15:::0;;;:7:::1;:15;::::0;;;;:23;;-1:-1:-1;;12437:23:0::1;::::0;;12333:93;;-1:-1:-1;12475:22:0;::::1;12471:200;;12534:10;-1:-1:-1::0;;;;;12534:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;12523:43:0::1;;12575:4;12582:10;-1:-1:-1::0;;;;;12582:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12523:77;::::0;-1:-1:-1;;;;;;12523:77:0::1;::::0;;;;;;-1:-1:-1;;;;;22198:15:1;;;12523:77:0::1;::::0;::::1;22180:34:1::0;22250:15;;22230:18;;;22223:43;22115:18;;12523:77:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12514:6;:86:::0;;-1:-1:-1;;;;;;12514:86:0::1;-1:-1:-1::0;;;;;12514:86:0;;;::::1;::::0;;;::::1;::::0;;12471:200:::1;;;12642:6;:17:::0;;-1:-1:-1;;;;;;12642:17:0::1;-1:-1:-1::0;;;;;12642:17:0;::::1;;::::0;;12471:200:::1;12681:9;:22:::0;;-1:-1:-1;;;;;;12681:22:0::1;::::0;-1:-1:-1;;;;;12681:22:0;;::::1;::::0;::::1;::::0;;;::::1;::::0;;12722:6:::1;::::0;;::::1;-1:-1:-1::0;12714:15:0;;;-1:-1:-1;12714:15:0::1;::::0;;;;;;;:22;;-1:-1:-1;;12714:22:0::1;::::0;;::::1;::::0;;12779:9;;12747:62:::1;::::0;12764:4:::1;::::0;12779:9;::::1;;-1:-1:-1::0;;12747:8:0::1;:62::i;23159:182::-:0;8772:6;;-1:-1:-1;;;;;8772:6:0;8782:10;8772:20;8764:50;;;;-1:-1:-1;;;8764:50:0;;;;;;;:::i;:::-;23226:16:::1;::::0;::::1;::::0;::::1;;;23225:17;23217:58;;;::::0;-1:-1:-1;;;23217:58:0;;22479:2:1;23217:58:0::1;::::0;::::1;22461:21:1::0;22518:2;22498:18;;;22491:30;22557;22537:18;;;22530:58;22605:18;;23217:58:0::1;22277:352:1::0;23217:58:0::1;23294:6;::::0;23286:47:::1;::::0;-1:-1:-1;;;;;23294:6:0;;::::1;::::0;23311:21:::1;23286:47:::0;::::1;;;::::0;23294:6:::1;23286:47:::0;23294:6;23286:47;23311:21;23294:6;23286:47;::::1;;;;;;;;;;;;;::::0;::::1;;;;16645:699:::0;8772:6;;-1:-1:-1;;;;;8772:6:0;8782:10;8772:20;8764:50;;;;-1:-1:-1;;;8764:50:0;;;;;;;:::i;:::-;16845:16;16825;4746:13:::1;4686:1;4746:2;:13;:::i;:::-;4729:30;::::0;4533:13:::1;4729:30;:::i;:::-;16815:26;;;;:::i;:::-;16814:47;;;;:::i;:::-;16798:13;:63:::0;16913:13;16896;4746::::1;4686:1;4746:2;:13;:::i;:::-;4729:30;::::0;4533:13:::1;4729:30;:::i;:::-;16886:23;;;;:::i;:::-;16885:41;;;;:::i;:::-;16872:10;:54:::0;;;16945:13:::1;::::0;:27:::1;;16937:73;;;::::0;-1:-1:-1;;;16937:73:0;;22836:2:1;16937:73:0::1;::::0;::::1;22818:21:1::0;22875:2;22855:18;;;22848:30;22914:34;22894:18;;;22887:62;-1:-1:-1;;;22965:18:1;;;22958:31;23006:19;;16937:73:0::1;22634:397:1::0;16937:73:0::1;17054:6;::::0;5497:5:::1;::::0;17044:17:::1;::::0;-1:-1:-1;;;;;17054:6:0::1;17044:9;:17::i;:::-;:23;::::0;17064:3:::1;17044:23;:::i;:::-;17043:44;;;;:::i;:::-;17029:10;;:58;;17021:106;;;::::0;-1:-1:-1;;;17021:106:0;;23238:2:1;17021:106:0::1;::::0;::::1;23220:21:1::0;23277:2;23257:18;;;23250:30;23316:34;23296:18;;;23289:62;-1:-1:-1;;;23367:18:1;;;23360:33;23410:19;;17021:106:0::1;23036:399:1::0;17021:106:0::1;17170:9;4746:13;4686:1;4746:2;:13;:::i;:::-;4729:30;::::0;4533:13:::1;4729:30;:::i;:::-;17160:19;;;;:::i;:::-;17146:10;;:33;;17138:92;;;;-1:-1:-1::0;;;17138:92:0::1;;;;;;;:::i;:::-;17276:9;4746:13;4686:1;4746:2;:13;:::i;:::-;4729:30;::::0;4533:13:::1;4729:30;:::i;:::-;17266:19;;;;:::i;:::-;17249:13;;:36;;17241:95;;;;-1:-1:-1::0;;;17241:95:0::1;;;;;;;:::i;:::-;16645:699:::0;;;;:::o;14388:148::-;8772:6;;-1:-1:-1;;;;;8772:6:0;8782:10;8772:20;8764:50;;;;-1:-1:-1;;;8764:50:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;14484:34:0;;;::::1;;::::0;;;:25:::1;:34;::::0;;;;:44;;-1:-1:-1;;14484:44:0::1;::::0;::::1;;::::0;;;::::1;::::0;;14388:148::o;11322:310::-;-1:-1:-1;;;;;11417:20:0;;11409:52;;;;-1:-1:-1;;;11409:52:0;;24057:2:1;11409:52:0;;;24039:21:1;24096:2;24076:18;;;24069:30;-1:-1:-1;;;24115:18:1;;;24108:49;24174:18;;11409:52:0;23855:343:1;11409:52:0;-1:-1:-1;;;;;11480:21:0;;11472:53;;;;-1:-1:-1;;;11472:53:0;;24057:2:1;11472:53:0;;;24039:21:1;24096:2;24076:18;;;24069:30;-1:-1:-1;;;24115:18:1;;;24108:49;24174:18;;11472:53:0;23855:343:1;11472:53:0;-1:-1:-1;;;;;11538:19:0;;;;;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;:37;;;11591:33;;368:25:1;;;11591:33:0;;341:18:1;11591:33:0;;;;;;;11322:310;;;:::o;18302:1673::-;18381:4;-1:-1:-1;;;;;18406:18:0;;18398:68;;;;-1:-1:-1;;;18398:68:0;;24405:2:1;18398:68:0;;;24387:21:1;24444:2;24424:18;;;24417:30;24483:34;24463:18;;;24456:62;-1:-1:-1;;;24534:18:1;;;24527:35;24579:19;;18398:68:0;24203:401:1;18398:68:0;-1:-1:-1;;;;;18485:16:0;;18477:64;;;;-1:-1:-1;;;18477:64:0;;24811:2:1;18477:64:0;;;24793:21:1;24850:2;24830:18;;;24823:30;24889:34;24869:18;;;24862:62;-1:-1:-1;;;24940:18:1;;;24933:33;24983:19;;18477:64:0;24609:399:1;18477:64:0;18569:1;18560:6;:10;18552:64;;;;-1:-1:-1;;;18552:64:0;;25215:2:1;18552:64:0;;;25197:21:1;25254:2;25234:18;;;25227:30;25293:34;25273:18;;;25266:62;-1:-1:-1;;;25344:18:1;;;25337:39;25393:19;;18552:64:0;25013:405:1;18552:64:0;-1:-1:-1;;;;;18715:13:0;;18627:8;18715:13;;;:7;:13;;;;;;18627:8;;;;18715:13;;18711:162;;;18751:4;18745:10;;18711:162;;;-1:-1:-1;;;;;18777:11:0;;;;;;:7;:11;;;;;;;;18773:100;;;18812:4;18805:11;;18773:100;;;-1:-1:-1;18857:4:0;18773:100;18887:20;18898:4;18904:2;18887:10;:20::i;:::-;18883:371;;;18928:14;;;;18924:319;;18968:5;18963:265;;18998:34;;-1:-1:-1;;;18998:34:0;;25625:2:1;18998:34:0;;;25607:21:1;25664:2;25644:18;;;25637:30;25703:26;25683:18;;;25676:54;25747:18;;18998:34:0;25423:348:1;18963:265:0;-1:-1:-1;;;;;19063:31:0;;;;;;:25;:31;;;;;;;;19062:32;:66;;;;-1:-1:-1;;;;;;19099:29:0;;;;;;:25;:29;;;;;;;;19098:30;19062:66;19058:170;;;19153:55;;-1:-1:-1;;;19153:55:0;;25978:2:1;19153:55:0;;;25960:21:1;26017:2;25997:18;;;25990:30;26056:34;26036:18;;;26029:62;-1:-1:-1;;;26107:18:1;;;26100:43;26160:19;;19153:55:0;25776:409:1;19058:170:0;19270:4;19266:632;;;19296:6;;;;19291:596;;19327:19;;;;;;;19323:549;;;19371:28;19402:24;19420:4;19402:9;:24::i;:::-;19371:55;;19477:13;;19453:20;:37;19449:404;;19537:10;;19578:22;;;;19574:97;;;19635:13;;19625:6;;5497:5;;19635:13;19615:17;;-1:-1:-1;;;;;19625:6:0;19615:9;:17::i;:::-;:33;;;;:::i;:::-;19614:54;;;;:::i;:::-;19604:64;;19574:97;19725:7;19701:20;:31;19697:72;;19759:7;19736:30;;19697:72;19795:34;19808:20;19795:12;:34::i;:::-;19492:361;19449:404;19348:524;19323:549;19915:52;19932:4;19938:2;19942:6;19950:3;19955:4;19961:5;19915:16;:52::i;:::-;19908:59;18302:1673;-1:-1:-1;;;;;;;18302:1673:0:o;24108:819::-;-1:-1:-1;;;;;24278:25:0;;24227:4;24278:25;;;:19;:25;;;;;;24259:4;;24278:25;;;:52;;-1:-1:-1;;;;;;24307:23:0;;;;;;:19;:23;;;;;;;;24278:52;24274:99;;;-1:-1:-1;24356:5:0;24274:99;-1:-1:-1;;;;;24385:13:0;;:7;:13;;;;;;;;;;:23;;24402:6;;24385:7;:23;;24402:6;;24385:23;:::i;:::-;;;;-1:-1:-1;24419:22:0;;-1:-1:-1;24445:7:0;24444:55;;24493:6;24444:55;;;24456:34;24466:4;24472:6;24480:3;24485:4;24456:9;:34::i;:::-;24419:80;;24525:14;24510:7;:11;24518:2;-1:-1:-1;;;;;24510:11:0;-1:-1:-1;;;;;24510:11:0;;;;;;;;;;;;;:29;;;;;;;:::i;:::-;;;;;;;;24570:2;-1:-1:-1;;;;;24555:34:0;24564:4;-1:-1:-1;;;;;24555:34:0;;24574:14;24555:34;;;;368:25:1;;356:2;341:18;;222:177;24555:34:0;;;;;;;;24605:16;;;;;;;24600:298;;24638:28;24657:4;24663:2;24638:18;:28::i;:::-;24686:16;;;;;;;24685:17;:41;;;;;24706:20;24717:4;24723:2;24706:10;:20::i;:::-;24685:77;;;;-1:-1:-1;;;;;;24731:31:0;;;;;;:25;:31;;;;;;;;24730:32;24685:77;:111;;;;-1:-1:-1;;;;;;24767:29:0;;;;;;:25;:29;;;;;;;;24766:30;24685:111;:121;;;;;24801:5;24800:6;24685:121;24681:206;;;24827:44;;-1:-1:-1;;;24827:44:0;;26392:2:1;24827:44:0;;;26374:21:1;26431:2;26411:18;;;26404:30;26470:34;26450:18;;;26443:62;-1:-1:-1;;;26521:18:1;;;26514:32;26563:19;;24827:44:0;26190:398:1;24681:206:0;-1:-1:-1;24915:4:0;;24108:819;-1:-1:-1;;;;;;;;24108:819:0:o;17848:446::-;17949:6;;17917:4;;-1:-1:-1;;;;;17941:14:0;;;17949:6;;17941:14;;;;:43;;-1:-1:-1;17978:6:0;;-1:-1:-1;;;;;17972:12:0;;;17978:6;;17972:12;;17941:43;:79;;;;-1:-1:-1;18014:6:0;;-1:-1:-1;;;;;18014:6:0;18001:9;:19;;17941:79;:118;;;;-1:-1:-1;;;;;;18038:21:0;;;;;;:17;:21;;;;;;;;18037:22;17941:118;:159;;;;-1:-1:-1;;;;;;18077:23:0;;;;;;:17;:23;;;;;;;;18076:24;17941:159;:186;;;;-1:-1:-1;;;;;;18117:10:0;;5674:42;18117:10;;17941:186;:219;;;;-1:-1:-1;;;;;;18144:16:0;;;;17941:219;:257;;;;-1:-1:-1;;;;;;18177:21:0;;18193:4;18177:21;;17941:257;:302;;;;-1:-1:-1;18231:11:0;;-1:-1:-1;;;;;18215:28:0;;;18231:11;;;;;18215:28;;17941:302;:345;;;;-1:-1:-1;18274:11:0;;-1:-1:-1;;;;;18260:26:0;;;18274:11;;;;;18260:26;;17941:345;17934:352;17848:446;-1:-1:-1;;;17848:446:0:o;19983:1892::-;7222:6;:13;;-1:-1:-1;;7222:13:0;7231:4;7222:13;;;20066:30:::1;::::0;;::::1;::::0;::::1;::::0;;20089:7:::1;20066:30:::0;::::1;::::0;;::::1;::::0;;;;::::1;::::0;::::1;;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;;;;;;;-1:-1:-1;;;20066:30:0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;20066:30:0;::::1;::::0;;::::1;::::0;;;;;;7222:6;20111:21;20107:60:::1;;20149:7;;;20107:60;20203:4;20183:26;::::0;;;:11:::1;:26;::::0;;;;;;;20218:9:::1;::::0;;;::::1;-1:-1:-1::0;;;;;20218:9:0::1;20183:46:::0;;;;;;;;-1:-1:-1;;20183:67:0::1;20179:166;;20287:4;20267:26;::::0;;;:11:::1;:26;::::0;;;;;;;20302:9:::1;::::0;;;::::1;-1:-1:-1::0;;;;;20302:9:0::1;20267:46:::0;;;;;;;-1:-1:-1;;20267:66:0;;20179:166:::1;20388:16;::::0;;20402:1:::1;20388:16:::0;;;;;::::1;::::0;;20364:21:::1;::::0;20388:16:::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;20388:16:0::1;20364:40;;20433:4;20415;20420:1;20415:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1::0;;;;;20415:23:0::1;;;-1:-1:-1::0;;;;;20415:23:0::1;;;::::0;::::1;20459:9;;;;;;;;;-1:-1:-1::0;;;;;20459:9:0::1;-1:-1:-1::0;;;;;20459:14:0::1;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20449:4;20454:1;20449:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;20449:26:0;;::::1;:7;::::0;;::::1;::::0;;;;;:26;20492:9:::1;::::0;:199:::1;::::0;-1:-1:-1;;;20492:199:0;;:9;;;::::1;::::0;;::::1;::::0;:60:::1;::::0;:199:::1;::::0;20567:20;;20602:1:::1;::::0;20618:4;;20645::::1;::::0;20665:15:::1;::::0;20492:199:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;20488:246;;20716:7;;;;20488:246;20746:18;20767:21;20746:42;;20799:12;20822:22:::0;20879:6:::1;:16;;;20847:48;;20861:6;:14;;;20848:27;;:10;:27;;;;:::i;:::-;20847:48;;;;:::i;:::-;20822:73;;20906:26;20971:6;:16;;;20935:52;;20949:6;:18;;;20936:31;;:10;:31;;;;:::i;:::-;20935:52;;;;:::i;:::-;20906:81;;20998:19;21049:6;:16;;;21020:45;;21034:6;:11;;;21021:24;;:10;:24;;;;:::i;:::-;21020:45;;;;:::i;:::-;20998:67:::0;-1:-1:-1;21076:24:0::1;20998:67:::0;21117:35:::1;21134:18:::0;21117:14;:35:::1;:::i;:::-;:49;;;;:::i;:::-;21103:64;::::0;:10;:64:::1;:::i;:::-;21182:16:::0;;21076:91;;-1:-1:-1;21182:20:0::1;;::::0;21178:133:::1;;21232:11;:21:::0;:67:::1;::::0;-1:-1:-1;;;;;21232:21:0;;::::1;::::0;21289:5:::1;::::0;21266:16;;21232:67:::1;::::0;;;21266:16;21232:21;21289:5;21232:67:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;21219:80:0;;-1:-1:-1;;21178:133:0::1;21325:14;::::0;::::1;::::0;:18:::1;;::::0;21321:270:::1;;21373:19:::0;;:63:::1;::::0;-1:-1:-1;;;;;21373:19:0;;::::1;::::0;21426:5:::1;::::0;21405:14;;21373:63:::1;::::0;;;21405:14;21373:19;21426:5;21373:63:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;21455:17:0::1;::::0;21360:76;;-1:-1:-1;21455:17:0::1;::::0;::::1;;;21451:129;;;21506:19:::0;;21497:56:::1;::::0;-1:-1:-1;;;21497:56:0;;::::1;::::0;::::1;368:25:1::0;;;-1:-1:-1;;;;;21506:19:0;;::::1;::::0;21497:40:::1;::::0;341:18:1;;21497:56:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;21493:72:::0;::::1;21605:18;::::0;::::1;::::0;:22:::1;;::::0;21601:139:::1;;21657:23:::0;;:71:::1;::::0;-1:-1:-1;;;;;21657:23:0;;::::1;::::0;21718:5:::1;::::0;21693:18;;21657:71:::1;::::0;;;21693:18;21657:23;21718:5;21657:71:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;21644:84:0;;-1:-1:-1;;21601:139:0::1;21754:11;::::0;::::1;::::0;:15:::1;;::::0;21750:118:::1;;21799:16:::0;;:57:::1;::::0;-1:-1:-1;;;;;21799:16:0;;::::1;::::0;21846:5:::1;::::0;21828:11;;21799:57:::1;::::0;;;21828:11;21799:16;21846:5;21799:57:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;21786:70:0;;-1:-1:-1;;21750:118:0::1;20055:1820;;;;;;;;7246:1;-1:-1:-1::0;7258:6:0;:14;;-1:-1:-1;;7258:14:0;;;19983:1892::o;24935:804::-;25023:7;25043:18;25076:3;25072:205;;;-1:-1:-1;25109:9:0;:16;;;25072:205;;;25147:4;25143:134;;;-1:-1:-1;25181:9:0;:17;;;;;;25143:134;;;-1:-1:-1;25244:9:0;:21;;;;;;25143:134;25291:10;25305:1;25291:15;25287:39;;25317:6;25310:13;;;;;25287:39;25348:11;;;;;-1:-1:-1;;;;;25348:11:0;25372:4;25340:37;:110;;;;;25395:13;25412:1;25395:18;:54;;;;25430:13;25447:2;25430:19;25395:54;25336:138;;;-1:-1:-1;25467:4:0;25336:138;25484:17;5497:5;25504:19;25513:10;25504:6;:19;:::i;:::-;:38;;;;:::i;:::-;25484:58;-1:-1:-1;25557:13:0;;25553:141;;25603:4;25587:7;:22;;;;;;;;;;:35;;25613:9;;25587:7;:35;;25613:9;;25587:35;:::i;:::-;;;;-1:-1:-1;;25642:40:0;;368:25:1;;;25665:4:0;;-1:-1:-1;;;;;25642:40:0;;;;;356:2:1;341:18;25642:40:0;;;;;;;25553:141;25713:18;25722:9;25713:6;:18;:::i;21883:564::-;21966:16;;;;;;;21965:17;21957:65;;;;-1:-1:-1;;;21957:65:0;;27990:2:1;21957:65:0;;;27972:21:1;28029:2;28009:18;;;28002:30;28068:34;28048:18;;;28041:62;-1:-1:-1;;;28119:18:1;;;28112:33;28162:19;;21957:65:0;27788:399:1;21957:65:0;22038:20;22049:4;22055:2;22038:10;:20::i;:::-;22037:21;:37;;;;-1:-1:-1;22068:6:0;;-1:-1:-1;;;;;22062:12:0;;;22068:6;;22062:12;22037:37;22033:407;;;-1:-1:-1;;;;;22091:23:0;;;;;;;:17;:23;;;;;;;;:30;;-1:-1:-1;;22091:30:0;;;22117:4;22091:30;;;;;;22136:19;:25;;;;;:32;;;;;;;;;;22183:16;:23;;-1:-1:-1;;22183:23:0;22091:30;22183:23;;;;;22233:11;;;;22221:115;;22279:11;:41;;-1:-1:-1;;;;;;22279:41:0;22314:4;22279:41;;;;;22221:115;22350:19;:26;;-1:-1:-1;;22350:26:0;;;;;22396:32;;-1:-1:-1;2262:41:1;;22396:32:0;;2250:2:1;2235:18;22396:32:0;2122:187:1;774:548;886:4;915:2;944;933:9;926:21;976:6;970:13;1019:6;1014:2;1003:9;999:18;992:34;1044:1;1054:140;1068:6;1065:1;1062:13;1054:140;;;1163:14;;;1159:23;;1153:30;1129:17;;;1148:2;1125:26;1118:66;1083:10;;1054:140;;;1058:3;1243:1;1238:2;1229:6;1218:9;1214:22;1210:31;1203:42;1313:2;1306;1302:7;1297:2;1289:6;1285:15;1281:29;1270:9;1266:45;1262:54;1254:62;;;;774:548;;;;:::o;1327:159::-;1394:20;;1454:6;1443:18;;1433:29;;1423:57;;1476:1;1473;1466:12;1423:57;1327:159;;;:::o;1491:401::-;1573:6;1581;1589;1597;1650:3;1638:9;1629:7;1625:23;1621:33;1618:53;;;1667:1;1664;1657:12;1618:53;1690:28;1708:9;1690:28;:::i;:::-;1680:38;;1737:37;1770:2;1759:9;1755:18;1737:37;:::i;:::-;1727:47;;1793:37;1826:2;1815:9;1811:18;1793:37;:::i;:::-;1783:47;;1849:37;1882:2;1871:9;1867:18;1849:37;:::i;:::-;1839:47;;1491:401;;;;;;;:::o;2314:118::-;2400:5;2393:13;2386:21;2379:5;2376:32;2366:60;;2422:1;2419;2412:12;2437:241;2493:6;2546:2;2534:9;2525:7;2521:23;2517:32;2514:52;;;2562:1;2559;2552:12;2514:52;2601:9;2588:23;2620:28;2642:5;2620:28;:::i;2683:131::-;-1:-1:-1;;;;;2758:31:1;;2748:42;;2738:70;;2804:1;2801;2794:12;2819:315;2887:6;2895;2948:2;2936:9;2927:7;2923:23;2919:32;2916:52;;;2964:1;2961;2954:12;2916:52;3003:9;2990:23;3022:31;3047:5;3022:31;:::i;:::-;3072:5;3124:2;3109:18;;;;3096:32;;-1:-1:-1;;;2819:315:1:o;3139:247::-;3198:6;3251:2;3239:9;3230:7;3226:23;3222:32;3219:52;;;3267:1;3264;3257:12;3219:52;3306:9;3293:23;3325:31;3350:5;3325:31;:::i;3391:456::-;3468:6;3476;3484;3537:2;3525:9;3516:7;3512:23;3508:32;3505:52;;;3553:1;3550;3543:12;3505:52;3592:9;3579:23;3611:31;3636:5;3611:31;:::i;:::-;3661:5;-1:-1:-1;3718:2:1;3703:18;;3690:32;3731:33;3690:32;3731:33;:::i;:::-;3391:456;;3783:7;;-1:-1:-1;;;3837:2:1;3822:18;;;;3809:32;;3391:456::o;3852:127::-;3913:10;3908:3;3904:20;3901:1;3894:31;3944:4;3941:1;3934:15;3968:4;3965:1;3958:15;3984:275;4055:2;4049:9;4120:2;4101:13;;-1:-1:-1;;4097:27:1;4085:40;;4155:18;4140:34;;4176:22;;;4137:62;4134:88;;;4202:18;;:::i;:::-;4238:2;4231:22;3984:275;;-1:-1:-1;3984:275:1:o;4264:183::-;4324:4;4357:18;4349:6;4346:30;4343:56;;;4379:18;;:::i;:::-;-1:-1:-1;4424:1:1;4420:14;4436:4;4416:25;;4264:183::o;4452:668::-;4506:5;4559:3;4552:4;4544:6;4540:17;4536:27;4526:55;;4577:1;4574;4567:12;4526:55;4613:6;4600:20;4639:4;4663:60;4679:43;4719:2;4679:43;:::i;:::-;4663:60;:::i;:::-;4745:3;4769:2;4764:3;4757:15;4797:4;4792:3;4788:14;4781:21;;4854:4;4848:2;4845:1;4841:10;4833:6;4829:23;4825:34;4811:48;;4882:3;4874:6;4871:15;4868:35;;;4899:1;4896;4889:12;4868:35;4935:4;4927:6;4923:17;4949:142;4965:6;4960:3;4957:15;4949:142;;;5031:17;;5019:30;;5069:12;;;;4982;;4949:142;;;-1:-1:-1;5109:5:1;4452:668;-1:-1:-1;;;;;;4452:668:1:o;5125:1215::-;5243:6;5251;5304:2;5292:9;5283:7;5279:23;5275:32;5272:52;;;5320:1;5317;5310:12;5272:52;5360:9;5347:23;5389:18;5430:2;5422:6;5419:14;5416:34;;;5446:1;5443;5436:12;5416:34;5484:6;5473:9;5469:22;5459:32;;5529:7;5522:4;5518:2;5514:13;5510:27;5500:55;;5551:1;5548;5541:12;5500:55;5587:2;5574:16;5609:4;5633:60;5649:43;5689:2;5649:43;:::i;5633:60::-;5727:15;;;5809:1;5805:10;;;;5797:19;;5793:28;;;5758:12;;;;5833:19;;;5830:39;;;5865:1;5862;5855:12;5830:39;5889:11;;;;5909:217;5925:6;5920:3;5917:15;5909:217;;;6005:3;5992:17;6022:31;6047:5;6022:31;:::i;:::-;6066:18;;5942:12;;;;6104;;;;5909:217;;;6145:5;-1:-1:-1;;6188:18:1;;6175:32;;-1:-1:-1;;6219:16:1;;;6216:36;;;6248:1;6245;6238:12;6216:36;;6271:63;6326:7;6315:8;6304:9;6300:24;6271:63;:::i;:::-;6261:73;;;5125:1215;;;;;:::o;6534:328::-;6608:6;6616;6624;6677:2;6665:9;6656:7;6652:23;6648:32;6645:52;;;6693:1;6690;6683:12;6645:52;6716:28;6734:9;6716:28;:::i;:::-;6706:38;;6763:37;6796:2;6785:9;6781:18;6763:37;:::i;:::-;6753:47;;6819:37;6852:2;6841:9;6837:18;6819:37;:::i;:::-;6809:47;;6534:328;;;;;:::o;6867:180::-;6926:6;6979:2;6967:9;6958:7;6954:23;6950:32;6947:52;;;6995:1;6992;6985:12;6947:52;-1:-1:-1;7018:23:1;;6867:180;-1:-1:-1;6867:180:1:o;7052:382::-;7117:6;7125;7178:2;7166:9;7157:7;7153:23;7149:32;7146:52;;;7194:1;7191;7184:12;7146:52;7233:9;7220:23;7252:31;7277:5;7252:31;:::i;:::-;7302:5;-1:-1:-1;7359:2:1;7344:18;;7331:32;7372:30;7331:32;7372:30;:::i;:::-;7421:7;7411:17;;;7052:382;;;;;:::o;7439:703::-;7557:6;7565;7573;7581;7634:3;7622:9;7613:7;7609:23;7605:33;7602:53;;;7651:1;7648;7641:12;7602:53;7690:9;7677:23;7709:31;7734:5;7709:31;:::i;:::-;7759:5;-1:-1:-1;7816:2:1;7801:18;;7788:32;7829:33;7788:32;7829:33;:::i;:::-;7881:7;-1:-1:-1;7940:2:1;7925:18;;7912:32;7953:33;7912:32;7953:33;:::i;:::-;8005:7;-1:-1:-1;8064:2:1;8049:18;;8036:32;8077:33;8036:32;8077:33;:::i;:::-;7439:703;;;;-1:-1:-1;7439:703:1;;-1:-1:-1;;7439:703:1:o;8536:376::-;8598:6;8606;8659:2;8647:9;8638:7;8634:23;8630:32;8627:52;;;8675:1;8672;8665:12;8627:52;8714:9;8701:23;8733:28;8755:5;8733:28;:::i;9445:388::-;9513:6;9521;9574:2;9562:9;9553:7;9549:23;9545:32;9542:52;;;9590:1;9587;9580:12;9542:52;9629:9;9616:23;9648:31;9673:5;9648:31;:::i;:::-;9698:5;-1:-1:-1;9755:2:1;9740:18;;9727:32;9768:33;9727:32;9768:33;:::i;10372:385::-;10458:6;10466;10474;10482;10535:3;10523:9;10514:7;10510:23;10506:33;10503:53;;;10552:1;10549;10542:12;10503:53;-1:-1:-1;;10575:23:1;;;10645:2;10630:18;;10617:32;;-1:-1:-1;10696:2:1;10681:18;;10668:32;;10747:2;10732:18;10719:32;;-1:-1:-1;10372:385:1;-1:-1:-1;10372:385:1:o;10762:341::-;10964:2;10946:21;;;11003:2;10983:18;;;10976:30;-1:-1:-1;;;11037:2:1;11022:18;;11015:47;11094:2;11079:18;;10762:341::o;11108:127::-;11169:10;11164:3;11160:20;11157:1;11150:31;11200:4;11197:1;11190:15;11224:4;11221:1;11214:15;11240:168;11307:6;11333:10;;;11345;;;11329:27;;11368:11;;;11365:37;;;11382:18;;:::i;:::-;11365:37;11240:168;;;;:::o;11821:416::-;11910:1;11947:5;11910:1;11961:270;11982:7;11972:8;11969:21;11961:270;;;12041:4;12037:1;12033:6;12029:17;12023:4;12020:27;12017:53;;;12050:18;;:::i;:::-;12100:7;12090:8;12086:22;12083:55;;;12120:16;;;;12083:55;12199:22;;;;12159:15;;;;11961:270;;;11965:3;11821:416;;;;;:::o;12242:806::-;12291:5;12321:8;12311:80;;-1:-1:-1;12362:1:1;12376:5;;12311:80;12410:4;12400:76;;-1:-1:-1;12447:1:1;12461:5;;12400:76;12492:4;12510:1;12505:59;;;;12578:1;12573:130;;;;12485:218;;12505:59;12535:1;12526:10;;12549:5;;;12573:130;12610:3;12600:8;12597:17;12594:43;;;12617:18;;:::i;:::-;-1:-1:-1;;12673:1:1;12659:16;;12688:5;;12485:218;;12787:2;12777:8;12774:16;12768:3;12762:4;12759:13;12755:36;12749:2;12739:8;12736:16;12731:2;12725:4;12722:12;12718:35;12715:77;12712:159;;;-1:-1:-1;12824:19:1;;;12856:5;;12712:159;12903:34;12928:8;12922:4;12903:34;:::i;:::-;12973:6;12969:1;12965:6;12961:19;12952:7;12949:32;12946:58;;;12984:18;;:::i;:::-;13022:20;;12242:806;-1:-1:-1;;;12242:806:1:o;13053:140::-;13111:5;13140:47;13181:4;13171:8;13167:19;13161:4;13140:47;:::i;13198:168::-;13271:9;;;13302;;13319:15;;;13313:22;;13299:37;13289:71;;13340:18;;:::i;13371:128::-;13438:9;;;13459:11;;;13456:37;;;13473:18;;:::i;13854:127::-;13915:10;13910:3;13906:20;13903:1;13896:31;13946:4;13943:1;13936:15;13970:4;13967:1;13960:15;14333:197;14371:3;14399:6;14440:2;14433:5;14429:14;14467:2;14458:7;14455:15;14452:41;;14473:18;;:::i;:::-;14522:1;14509:15;;14333:197;-1:-1:-1;;;14333:197:1:o;14535:125::-;14600:9;;;14621:10;;;14618:36;;;14634:18;;:::i;15363:217::-;15403:1;15429;15419:132;;15473:10;15468:3;15464:20;15461:1;15454:31;15508:4;15505:1;15498:15;15536:4;15533:1;15526:15;15419:132;-1:-1:-1;15565:9:1;;15363:217::o;15936:425::-;16138:2;16120:21;;;16177:2;16157:18;;;16150:30;16216:34;16211:2;16196:18;;16189:62;16287:31;16282:2;16267:18;;16260:59;16351:3;16336:19;;15936:425::o;16709:385::-;16788:6;16796;16849:2;16837:9;16828:7;16824:23;16820:32;16817:52;;;16865:1;16862;16855:12;16817:52;16897:9;16891:16;16916:31;16941:5;16916:31;:::i;:::-;17016:2;17001:18;;16995:25;16966:5;;-1:-1:-1;17029:33:1;16995:25;17029:33;:::i;20029:245::-;20108:6;20116;20169:2;20157:9;20148:7;20144:23;20140:32;20137:52;;;20185:1;20182;20175:12;20137:52;-1:-1:-1;;20208:16:1;;20264:2;20249:18;;;20243:25;20208:16;;20243:25;;-1:-1:-1;20029:245:1:o;20635:184::-;20705:6;20758:2;20746:9;20737:7;20733:23;20729:32;20726:52;;;20774:1;20771;20764:12;20726:52;-1:-1:-1;20797:16:1;;20635:184;-1:-1:-1;20635:184:1:o;21103:245::-;21170:6;21223:2;21211:9;21202:7;21198:23;21194:32;21191:52;;;21239:1;21236;21229:12;21191:52;21271:9;21265:16;21290:28;21312:5;21290:28;:::i;21712:251::-;21782:6;21835:2;21823:9;21814:7;21810:23;21806:32;21803:52;;;21851:1;21848;21841:12;21803:52;21883:9;21877:16;21902:31;21927:5;21902:31;:::i;23440:410::-;23642:2;23624:21;;;23681:2;23661:18;;;23654:30;23720:34;23715:2;23700:18;;23693:62;-1:-1:-1;;;23786:2:1;23771:18;;23764:44;23840:3;23825:19;;23440:410::o;26593:980::-;26855:4;26903:3;26892:9;26888:19;26934:6;26923:9;26916:25;26960:2;26998:6;26993:2;26982:9;26978:18;26971:34;27041:3;27036:2;27025:9;27021:18;27014:31;27065:6;27100;27094:13;27131:6;27123;27116:22;27169:3;27158:9;27154:19;27147:26;;27208:2;27200:6;27196:15;27182:29;;27229:1;27239:195;27253:6;27250:1;27247:13;27239:195;;;27318:13;;-1:-1:-1;;;;;27314:39:1;27302:52;;27409:15;;;;27374:12;;;;27350:1;27268:9;27239:195;;;-1:-1:-1;;;;;;;27490:32:1;;;;27485:2;27470:18;;27463:60;-1:-1:-1;;;27554:3:1;27539:19;27532:35;27451:3;26593:980;-1:-1:-1;;;26593:980:1:o

Swarm Source

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